X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_PartDataModel.cpp;h=567ad5677e050e0d4923001afdbc3a23f2a75709;hb=c2651507a52942e0632863b1e5e384396a285d25;hp=5a5af7888dd51a5bae986913fc2c50960a9f85bb;hpb=b7abf2b1011c2babecbe7b4289e9e23d1001b1ff;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_PartDataModel.cpp b/src/XGUI/XGUI_PartDataModel.cpp index 5a5af7888..567ad5677 100644 --- a/src/XGUI/XGUI_PartDataModel.cpp +++ b/src/XGUI/XGUI_PartDataModel.cpp @@ -1,7 +1,9 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + #include "XGUI_PartDataModel.h" #include "XGUI_Workshop.h" -#include +#include #include #include #include @@ -11,81 +13,89 @@ #include #include #include +#include +#include #include #include - //ObjectPtr featureObj(const ObjectPtr& theFeature) //{ -// ObjectPtr aObject = boost::dynamic_pointer_cast(theFeature); +// ObjectPtr aObject = std::dynamic_pointer_cast(theFeature); // if (aObject) // return aObject->featureRef(); // return theFeature; //} - XGUI_TopDataModel::XGUI_TopDataModel(QObject* theParent) - : XGUI_FeaturesModel(theParent) + : XGUI_FeaturesModel(theParent) { } - + XGUI_TopDataModel::~XGUI_TopDataModel() { } - QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const { switch (theRole) { - case Qt::DisplayRole: - // return a name - switch (theIndex.internalId()) { - case ParamsFolder: - return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex)); - case ParamObject: - { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); - ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultParameters::group(), theIndex.row()); - if (aObject) - return boost::dynamic_pointer_cast(aObject)->data()->name().c_str(); - } - case ConstructFolder: - return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex)); - case ConstructObject: - { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); - ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultConstruction::group(), theIndex.row()); - if (aObject) - return boost::dynamic_pointer_cast(aObject)->data()->name().c_str(); + case Qt::DisplayRole: + // return a name + switch (theIndex.internalId()) { + case ParamsFolder: + return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex)); + case ParamObject: { + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); + ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultParameters::group(), theIndex.row()); + if (aObject) + return aObject->data()->name().c_str(); + } + break; + case ConstructFolder: + return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex)); + case ConstructObject: { + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); + ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultConstruction::group(), + theIndex.row()); + if (aObject) + return aObject->data()->name().c_str(); + } + break; + //case GroupsFolder: + // return tr("Groups") + QString(" (%1)").arg(rowCount(theIndex)); + //case GroupObject: { + // DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); + // ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultGroup::group(), + // theIndex.row()); + // if (aObject) + // return aObject->data()->name().c_str(); + //} + // break; } - } - break; + break; - case Qt::DecorationRole: - // return an Icon - switch (theIndex.internalId()) { - case ParamsFolder: - return QIcon(":pictures/params_folder.png"); - case ConstructFolder: - return QIcon(":pictures/constr_folder.png"); - case ConstructObject: - return QIcon(":pictures/constr_object.png"); - //{ - // DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); - // ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultConstruction::group(), theIndex.row()); - // if (aObject) - // return QIcon(XGUI_Workshop::featureIcon(aObject->getKind())); - //} - } - break; - - case Qt::ToolTipRole: - // return Tooltip - break; - case Qt::ForegroundRole: - return QBrush(myItemsColor); - break; + case Qt::DecorationRole: + { + // return an Icon + switch (theIndex.internalId()) { + case ParamsFolder: + return QIcon(":pictures/params_folder.png"); + case ConstructFolder: + return QIcon(":pictures/constr_folder.png"); + case ConstructObject: + return QIcon(":pictures/constr_object.png"); + //case GroupsFolder: + // return QIcon(":pictures/constr_folder.png"); + } + } + break; + + case Qt::ToolTipRole: + // return Tooltip + break; + case Qt::ForegroundRole: + return QBrush(myItemsColor); + break; } return QVariant(); } @@ -97,15 +107,19 @@ QVariant XGUI_TopDataModel::headerData(int section, Qt::Orientation orientation, int XGUI_TopDataModel::rowCount(const QModelIndex& theParent) const { - if (!theParent.isValid()) - return 2; + if (!theParent.isValid()) + return 2; // In case of groups using it has to be +1 - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); if (theParent.internalId() == ParamsFolder) return aRootDoc->size(ModelAPI_ResultParameters::group()); if (theParent.internalId() == ConstructFolder) return aRootDoc->size(ModelAPI_ResultConstruction::group()); + + //if (theParent.internalId() == GroupsFolder) + // return aRootDoc->size(ModelAPI_ResultGroup::group()); + return 0; } @@ -118,10 +132,12 @@ QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelInde { if (!theParent.isValid()) { switch (theRow) { - case 0: - return createIndex(theRow, theColumn, (qint32) ParamsFolder); - case 1: - return createIndex(theRow, theColumn, (qint32) ConstructFolder); + case 0: + return createIndex(theRow, theColumn, (qint32) ParamsFolder); + case 1: + return createIndex(theRow, theColumn, (qint32) ConstructFolder); + //case 2: + // return createIndex(theRow, theColumn, (qint32) GroupsFolder); } } else { if (theParent.internalId() == ParamsFolder) @@ -129,21 +145,27 @@ QModelIndex XGUI_TopDataModel::index(int theRow, int theColumn, const QModelInde if (theParent.internalId() == ConstructFolder) return createIndex(theRow, theColumn, (qint32) ConstructObject); + + //if (theParent.internalId() == GroupsFolder) + // return createIndex(theRow, theColumn, (qint32) GroupObject); } return QModelIndex(); } QModelIndex XGUI_TopDataModel::parent(const QModelIndex& theIndex) const { - int aId = (int)theIndex.internalId(); + int aId = (int) theIndex.internalId(); switch (aId) { - case ParamsFolder: - case ConstructFolder: - return QModelIndex(); - case ParamObject: - return createIndex(0, 0, (qint32) ParamsFolder); - case ConstructObject: - return createIndex(1, 0, (qint32) ConstructFolder); + case ParamsFolder: + case ConstructFolder: + //case GroupsFolder: + return QModelIndex(); + case ParamObject: + return createIndex(0, 0, (qint32) ParamsFolder); + case ConstructObject: + return createIndex(1, 0, (qint32) ConstructFolder); + //case GroupObject: + // return createIndex(2, 0, (qint32) GroupsFolder); } return QModelIndex(); } @@ -156,24 +178,25 @@ bool XGUI_TopDataModel::hasChildren(const QModelIndex& theParent) const ObjectPtr XGUI_TopDataModel::object(const QModelIndex& theIndex) const { switch (theIndex.internalId()) { - case ParamsFolder: - case ConstructFolder: - return ObjectPtr(); - case ParamObject: - { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + case ParamsFolder: + case ConstructFolder: + return ObjectPtr(); + case ParamObject: { + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); return aRootDoc->object(ModelAPI_ResultParameters::group(), theIndex.row()); } - case ConstructObject: - { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + case ConstructObject: { + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); return aRootDoc->object(ModelAPI_ResultConstruction::group(), theIndex.row()); } + //case GroupObject: { + // DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); + // return aRootDoc->object(ModelAPI_ResultGroup::group(), theIndex.row()); + //} } return ObjectPtr(); } - QModelIndex XGUI_TopDataModel::findParent(const ObjectPtr& theObject) const { return findGroup(theObject->groupName().c_str()); @@ -181,10 +204,12 @@ QModelIndex XGUI_TopDataModel::findParent(const ObjectPtr& theObject) const QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const { - if (theGroup.compare(ModelAPI_ResultParameters::group()) == 0) + if (theGroup == ModelAPI_ResultParameters::group()) return createIndex(0, 0, (qint32) ParamsFolder); - if (theGroup.compare(ModelAPI_ResultConstruction::group()) == 0) + if (theGroup == ModelAPI_ResultConstruction::group()) return createIndex(1, 0, (qint32) ConstructFolder); + //if (theGroup == ModelAPI_ResultGroup::group()) + // return createIndex(2, 0, (qint32) ConstructFolder); return QModelIndex(); } @@ -192,7 +217,7 @@ QModelIndex XGUI_TopDataModel::objectIndex(const ObjectPtr& theObject) const { QModelIndex aIndex; if (theObject) { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); std::string aGroup = theObject->groupName(); int aNb = aRootDoc->size(aGroup); int aRow = -1; @@ -203,26 +228,25 @@ QModelIndex XGUI_TopDataModel::objectIndex(const ObjectPtr& theObject) const } } if (aRow != -1) { - if (aGroup.compare(ModelAPI_ResultParameters::group()) == 0) + if (aGroup == ModelAPI_ResultParameters::group()) return createIndex(aRow, 0, (qint32) ParamObject); - if (aGroup.compare(ModelAPI_ResultConstruction::group()) == 0) + if (aGroup == ModelAPI_ResultConstruction::group()) return createIndex(aRow, 0, (qint32) ConstructObject); + //if (aGroup == ModelAPI_ResultGroup::group()) + // return createIndex(aRow, 0, (qint32) GroupObject); } } return aIndex; } - - //****************************************************************** //****************************************************************** //****************************************************************** XGUI_PartDataModel::XGUI_PartDataModel(QObject* theParent) - : XGUI_PartModel(theParent) + : XGUI_PartModel(theParent) { } - XGUI_PartDataModel::~XGUI_PartDataModel() { } @@ -230,74 +254,93 @@ XGUI_PartDataModel::~XGUI_PartDataModel() QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) const { switch (theRole) { - case Qt::DisplayRole: - // return a name - switch (theIndex.internalId()) { - case MyRoot: - { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); - ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), myId); - if (aObject) - return boost::dynamic_pointer_cast(aObject)->data()->name().c_str(); - } - case ParamsFolder: - return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex)); - case ConstructFolder: - return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex)); - case BodiesFolder: - return tr("Bodies") + QString(" (%1)").arg(rowCount(theIndex)); - case ParamObject: - { - ObjectPtr aObject = partDocument()->object(ModelAPI_ResultParameters::group(), theIndex.row()); - if (aObject) - return boost::dynamic_pointer_cast(aObject)->data()->name().c_str(); - } - case ConstructObject: - { - ObjectPtr aObject = partDocument()->object(ModelAPI_ResultConstruction::group(), theIndex.row()); - if (aObject) - return boost::dynamic_pointer_cast(aObject)->data()->name().c_str(); + case Qt::DisplayRole: + // return a name + switch (theIndex.internalId()) { + case MyRoot: { + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); + ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), myId); + if (aObject) + return std::dynamic_pointer_cast(aObject)->data()->name().c_str(); + } + case ParamsFolder: + return tr("Parameters") + QString(" (%1)").arg(rowCount(theIndex)); + case ConstructFolder: + return tr("Constructions") + QString(" (%1)").arg(rowCount(theIndex)); + case BodiesFolder: + return tr("Bodies") + QString(" (%1)").arg(rowCount(theIndex)); + case GroupsFolder: + return tr("Groups") + QString(" (%1)").arg(rowCount(theIndex)); + case ParamObject: { + ObjectPtr aObject = partDocument()->object(ModelAPI_ResultParameters::group(), + theIndex.row()); + if (aObject) + return std::dynamic_pointer_cast(aObject)->data()->name().c_str(); + } + break; + case ConstructObject: { + ObjectPtr aObject = partDocument()->object(ModelAPI_ResultConstruction::group(), + theIndex.row()); + if (aObject) + return std::dynamic_pointer_cast(aObject)->data()->name().c_str(); + } + break; + case BodiesObject: { + ObjectPtr aObject = partDocument()->object(ModelAPI_ResultBody::group(), theIndex.row()); + if (aObject) + return aObject->data()->name().c_str(); + } + break; + case GroupObject: { + ObjectPtr aObject = partDocument()->object(ModelAPI_ResultGroup::group(), theIndex.row()); + if (aObject) + return aObject->data()->name().c_str(); + } + case HistoryObject: { + ObjectPtr aObject = partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - getRowsNumber()); + if (aObject) + return aObject->data()->name().c_str(); + } } - case HistoryObject: - { - ObjectPtr aObject = partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - 3); - if (aObject) - return aObject->data()->name().c_str(); - } - } - break; - case Qt::DecorationRole: - // return an Icon - switch (theIndex.internalId()) { - case MyRoot: - return QIcon(":pictures/part_ico.png"); - case ParamsFolder: - return QIcon(":pictures/params_folder.png"); - case ConstructFolder: - case BodiesFolder: - return QIcon(":pictures/constr_folder.png"); - case ConstructObject: - return QIcon(":pictures/constr_object.png"); - //{ - // ObjectPtr aObject = partDocument()->object(ModelAPI_ResultConstruction::group(), theIndex.row()); - // if (aObject) - // return QIcon(XGUI_Workshop::featureIcon(aObject->getKind())); - //} - case HistoryObject: - { - ObjectPtr aObject = partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - 3); - FeaturePtr aFeature = boost::dynamic_pointer_cast(aObject); - if (aFeature) - return QIcon(XGUI_Workshop::featureIcon(aFeature->getKind())); + break; + case Qt::DecorationRole: + // return an Icon + switch (theIndex.internalId()) { + case MyRoot: + return QIcon(":pictures/part_ico.png"); + case ParamsFolder: + return QIcon(":pictures/params_folder.png"); + case ConstructFolder: + case BodiesFolder: + return QIcon(":pictures/constr_folder.png"); + case GroupsFolder: + return QIcon(":pictures/constr_folder.png"); + case ConstructObject: + case GroupObject: + case BodiesObject: { + std::string aGroup = theIndex.internalId() == ConstructObject ? + ModelAPI_ResultConstruction::group() : ModelAPI_ResultBody::group(); + ObjectPtr anObject = partDocument()->object(aGroup, theIndex.row()); + if (anObject && anObject->data() && + anObject->data()->execState() == ModelAPI_StateMustBeUpdated) { + return QIcon(":pictures/constr_object_modified.png"); + } + return QIcon(":pictures/constr_object.png"); + } + case HistoryObject: { + ObjectPtr aObject = partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - getRowsNumber()); + FeaturePtr aFeature = std::dynamic_pointer_cast(aObject); + if (aFeature) + return XGUI_Workshop::featureIcon(aFeature); + } } - } - break; - case Qt::ToolTipRole: - // return Tooltip - break; - case Qt::ForegroundRole: - return QBrush(myItemsColor); - break; + break; + case Qt::ToolTipRole: + // return Tooltip + break; + case Qt::ForegroundRole: + return QBrush(myItemsColor); + break; } return QVariant(); } @@ -310,21 +353,29 @@ QVariant XGUI_PartDataModel::headerData(int section, Qt::Orientation orientation int XGUI_PartDataModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); if (aRootDoc->object(ModelAPI_ResultPart::group(), myId)) return 1; - else + else return 0; } switch (parent.internalId()) { - case MyRoot: - return 3 + partDocument()->size(ModelAPI_Feature::group()); - case ParamsFolder: - return partDocument()->size(ModelAPI_ResultParameters::group()); - case ConstructFolder: - return partDocument()->size(ModelAPI_ResultConstruction::group()); - case BodiesFolder: - return 0; + case MyRoot: + { + DocumentPtr aDoc = partDocument(); + if (aDoc) { + return getRowsNumber() + aDoc->size(ModelAPI_Feature::group()); + } else + return 0; + } + case ParamsFolder: + return partDocument()->size(ModelAPI_ResultParameters::group()); + case ConstructFolder: + return partDocument()->size(ModelAPI_ResultConstruction::group()); + case BodiesFolder: + return partDocument()->size(ModelAPI_ResultBody::group()); + case GroupsFolder: + return partDocument()->size(ModelAPI_ResultGroup::group()); } return 0; } @@ -339,25 +390,35 @@ QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelInd if (!theParent.isValid()) return createIndex(theRow, 0, (qint32) MyRoot); - int aId = (int)theParent.internalId(); + int aId = (int) theParent.internalId(); switch (aId) { - case MyRoot: - switch (theRow) { - case 0: - return createIndex(0, 0, (qint32) ParamsFolder); - case 1: - return createIndex(1, 0, (qint32) ConstructFolder); - case 2: - return createIndex(2, 0, (qint32) BodiesFolder); - default: - return createIndex(theRow, theColumn, (qint32) HistoryObject); - } - case ParamsFolder: - return createIndex(theRow, 0, (qint32) ParamObject); - case ConstructFolder: - return createIndex(theRow, 0, (qint32) ConstructObject); - case BodiesFolder: - return createIndex(theRow, 0, (qint32) BodiesObject); + case MyRoot: + switch (theRow) { + case 0: + return createIndex(theRow, 0, (qint32) ParamsFolder); + case 1: + return createIndex(theRow, 0, (qint32) ConstructFolder); + case 2: + return createIndex(theRow, 0, (qint32) BodiesFolder); + case 3: + { + int aSize = partDocument()->size(ModelAPI_ResultGroup::group()); + if (aSize > 0) + return createIndex(theRow, 0, (qint32) GroupsFolder); + else + return createIndex(theRow, theColumn, (qint32) HistoryObject); + } + default: + return createIndex(theRow, theColumn, (qint32) HistoryObject); + } + case ParamsFolder: + return createIndex(theRow, 0, (qint32) ParamObject); + case ConstructFolder: + return createIndex(theRow, 0, (qint32) ConstructObject); + case BodiesFolder: + return createIndex(theRow, 0, (qint32) BodiesObject); + case GroupsFolder: + return createIndex(theRow, 0, (qint32) GroupObject); } return QModelIndex(); } @@ -365,17 +426,23 @@ QModelIndex XGUI_PartDataModel::index(int theRow, int theColumn, const QModelInd QModelIndex XGUI_PartDataModel::parent(const QModelIndex& theIndex) const { switch (theIndex.internalId()) { - case MyRoot: - return QModelIndex(); - case ParamsFolder: - case ConstructFolder: - case BodiesFolder: - case HistoryObject: - return createIndex(0, 0, (qint32) MyRoot); - case ParamObject: - return createIndex(0, 0, (qint32) ParamsFolder); - case ConstructObject: - return createIndex(1, 0, (qint32) ConstructFolder); + case MyRoot: + return QModelIndex(); + case ParamsFolder: + case ConstructFolder: + case BodiesFolder: + case GroupsFolder: + case HistoryObject: + return createIndex(0, 0, (qint32) MyRoot); + + case ParamObject: + return createIndex(0, 0, (qint32) ParamsFolder); + case ConstructObject: + return createIndex(1, 0, (qint32) ConstructFolder); + case BodiesObject: + return createIndex(2, 0, (qint32) BodiesFolder); + case GroupObject: + return createIndex(3, 0, (qint32) GroupsFolder); } return QModelIndex(); } @@ -385,35 +452,39 @@ bool XGUI_PartDataModel::hasChildren(const QModelIndex& theParent) const return rowCount(theParent) > 0; } - DocumentPtr XGUI_PartDataModel::partDocument() const { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); ObjectPtr aObject = aRootDoc->object(ModelAPI_ResultPart::group(), myId); - ResultPartPtr aPart = boost::dynamic_pointer_cast(aObject); - return aPart->partDoc(); + ResultPartPtr aPart = std::dynamic_pointer_cast(aObject); + if (aPart) + return aPart->partDoc(); + return DocumentPtr(); // null if not found } - + ObjectPtr XGUI_PartDataModel::object(const QModelIndex& theIndex) const { switch (theIndex.internalId()) { - case MyRoot: - { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + case MyRoot: { + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); return aRootDoc->object(ModelAPI_ResultPart::group(), myId); } - case ParamsFolder: - case ConstructFolder: - case BodiesFolder: - return ObjectPtr(); - case ParamObject: - return partDocument()->object(ModelAPI_ResultParameters::group(), theIndex.row()); - case ConstructObject: - return partDocument()->object(ModelAPI_ResultConstruction::group(), theIndex.row()); - //case BodiesObject: - // return partDocument()->feature(ModelAPI_ResultConstruction::group(), theIndex.row()); - case HistoryObject: - return partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - 3); + case ParamsFolder: + case ConstructFolder: + case BodiesFolder: + case GroupsFolder: + return ObjectPtr(); + + case ParamObject: + return partDocument()->object(ModelAPI_ResultParameters::group(), theIndex.row()); + case ConstructObject: + return partDocument()->object(ModelAPI_ResultConstruction::group(), theIndex.row()); + case BodiesObject: + return partDocument()->object(ModelAPI_ResultBody::group(), theIndex.row()); + case GroupObject: + return partDocument()->object(ModelAPI_ResultGroup::group(), theIndex.row()); + case HistoryObject: + return partDocument()->object(ModelAPI_Feature::group(), theIndex.row() - getRowsNumber()); } return ObjectPtr(); } @@ -423,7 +494,6 @@ bool XGUI_PartDataModel::hasDocument(const DocumentPtr& theDoc) const return (partDocument() == theDoc); } - QModelIndex XGUI_PartDataModel::findParent(const ObjectPtr& theObject) const { return findGroup(theObject->groupName().c_str()); @@ -431,44 +501,62 @@ QModelIndex XGUI_PartDataModel::findParent(const ObjectPtr& theObject) const QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const { - if (theGroup.compare(ModelAPI_ResultParameters::group()) == 0) + if (theGroup == ModelAPI_ResultParameters::group()) return createIndex(0, 0, (qint32) ParamsFolder); - if (theGroup.compare(ModelAPI_ResultConstruction::group()) == 0) + if (theGroup == ModelAPI_ResultConstruction::group()) return createIndex(1, 0, (qint32) ConstructFolder); + if (theGroup == ModelAPI_ResultBody::group()) + return createIndex(2, 0, (qint32) BodiesFolder); + if (theGroup == ModelAPI_ResultGroup::group()) + return createIndex(3, 0, (qint32) GroupsFolder); return QModelIndex(); } ResultPartPtr XGUI_PartDataModel::part() const { - DocumentPtr aRootDoc = ModelAPI_PluginManager::get()->rootDocument(); + DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument(); ObjectPtr aObj = aRootDoc->object(ModelAPI_ResultPart::group(), myId); - return boost::dynamic_pointer_cast(aObj); + return std::dynamic_pointer_cast(aObj); } QModelIndex XGUI_PartDataModel::objectIndex(const ObjectPtr& theObject) const { QModelIndex aIndex; if (theObject) { - if (part() == theObject) + if (part() == theObject) return aIndex; - //std::string aGroup = theFeature->getGroup(); + std::string aGroup = theObject->groupName(); DocumentPtr aDoc = theObject->document(); - int aNb = aDoc->size(ModelAPI_Feature::group()); + int aNb = aDoc->size(aGroup); int aRow = -1; for (int i = 0; i < aNb; i++) { - if (aDoc->object(ModelAPI_Feature::group(), i) == theObject) { + if (aDoc->object(aGroup, i) == theObject) { aRow = i; break; } } - if (aRow != -1) { - return createIndex(aRow + 3, 0, (qint32) HistoryObject); -/* if (aGroup.compare(ModelAPI_ResultParameters::group()) == 0) - return createIndex(aRow, 0, (qint32) ParamObject); - if (aGroup.compare(ModelAPI_ResultConstruction::group()) == 0) - return createIndex(aRow, 0, (qint32) ConstructObject);*/ - } + if (aRow == -1) + return aIndex; + if (aGroup == ModelAPI_ResultParameters::group()) + return createIndex(aRow, 0, (qint32) ParamObject); + else if (aGroup == ModelAPI_ResultConstruction::group()) + return createIndex(aRow, 0, (qint32) ConstructObject); + else if (aGroup == ModelAPI_ResultBody::group()) + return createIndex(aRow, 0, (qint32) BodiesObject); + else if (aGroup == ModelAPI_ResultGroup::group()) + return createIndex(aRow, 0, (qint32) GroupObject); + else + return createIndex(aRow + getRowsNumber(), 0, (qint32) HistoryObject); } return aIndex; } + + +int XGUI_PartDataModel::getRowsNumber() const +{ + int aSize = partDocument()->size(ModelAPI_ResultGroup::group()); + if (aSize == 0) // If there are no groups then do not show group folder + return 3; + return 4; +} \ No newline at end of file