+ return ObjectPtr();
+}
+
+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());
+}
+
+QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const
+{
+ if (theGroup.compare(ModelAPI_ResultParameters::group()) == 0)
+ return createIndex(0, 0, (qint32) ParamsFolder);
+ if (theGroup.compare(ModelAPI_ResultConstruction::group()) == 0)
+ return createIndex(1, 0, (qint32) ConstructFolder);
+ if (theGroup.compare(ModelAPI_ResultBody::group()) == 0)
+ return createIndex(2, 0, (qint32) BodiesFolder);
+ return QModelIndex();
+}
+
+ResultPartPtr XGUI_PartDataModel::part() const
+{
+ DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
+ ObjectPtr aObj = aRootDoc->object(ModelAPI_ResultPart::group(), myId);
+ return boost::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
+}
+
+QModelIndex XGUI_PartDataModel::objectIndex(const ObjectPtr& theObject) const
+{
+ QModelIndex aIndex;
+ if (theObject) {
+ if (part() == theObject)
+ return aIndex;
+
+ std::string aGroup = theObject->groupName();
+ DocumentPtr aDoc = theObject->document();
+ int aNb = aDoc->size(aGroup);
+ int aRow = -1;
+ for (int i = 0; i < aNb; i++) {
+ if (aDoc->object(aGroup, i) == theObject) {
+ aRow = i;
+ break;
+ }
+ }
+ 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
+ return createIndex(aRow + 3, 0, (qint32) HistoryObject);
+ }
+ return aIndex;