Salome HOME
Issue #6 Extended processing of nested actions.
[modules/shaper.git] / src / XGUI / XGUI_PartDataModel.cpp
index 1e79322ca2afcd871885938b10fc4c86051268dc..ba5bbbea33ddeb56b71e88afd3bc741fe9ec67ff 100644 (file)
@@ -9,7 +9,7 @@
 
 #include <QIcon>
 
-XGUI_TopDataModel::XGUI_TopDataModel(const std::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
+XGUI_TopDataModel::XGUI_TopDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
   : XGUI_FeaturesModel(theDocument, theParent)
 {
 }
@@ -29,15 +29,17 @@ QVariant XGUI_TopDataModel::data(const QModelIndex& theIndex, int theRole) const
       return tr("Parameters");
     case ParamObject:
       {
-        std::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARAMETERS_GROUP, theIndex.row());
-        return aFeature->data()->getName().c_str();
+        boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARAMETERS_GROUP, theIndex.row());
+        if (aFeature)
+          return aFeature->data()->getName().c_str();
       } 
     case ConstructFolder:
         return tr("Constructions");
     case ConstructObject:
       {
-        std::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
-        return aFeature->data()->getName().c_str();
+        boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(CONSTRUCTIONS_GROUP, theIndex.row());
+        if (aFeature)
+          return aFeature->data()->getName().c_str();
       }
     }
     break;
@@ -139,10 +141,31 @@ FeaturePtr XGUI_TopDataModel::feature(const QModelIndex& theIndex) const
 }
 
 
+QModelIndex XGUI_TopDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
+{
+  QString aGroup(theFeature->getGroup().c_str());
+
+  if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
+    return createIndex(0, 0, (qint32) ParamsFolder);
+  if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
+    return createIndex(1, 0, (qint32) ConstructFolder);
+  return QModelIndex();
+}
+
+QModelIndex XGUI_TopDataModel::findGroup(const std::string& theGroup) const
+{
+  if (theGroup.compare(PARAMETERS_GROUP) == 0)
+    return createIndex(0, 0, (qint32) ParamsFolder);
+  if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
+    return createIndex(1, 0, (qint32) ConstructFolder);
+  return QModelIndex();
+}
+
+
 //******************************************************************
 //******************************************************************
 //******************************************************************
-XGUI_PartDataModel::XGUI_PartDataModel(const std::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
+XGUI_PartDataModel::XGUI_PartDataModel(const boost::shared_ptr<ModelAPI_Document>& theDocument, QObject* theParent)
   : XGUI_PartModel(theDocument, theParent)
 {
 }
@@ -160,8 +183,9 @@ QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) cons
     switch (theIndex.internalId()) {
     case MyRoot:
       {
-        std::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
-        return aFeature->data()->getName().c_str();
+        boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
+        if (aFeature)
+          return aFeature->data()->getName().c_str();
       }
     case ParamsFolder:
       return tr("Parameters");
@@ -169,15 +193,17 @@ QVariant XGUI_PartDataModel::data(const QModelIndex& theIndex, int theRole) cons
       return tr("Constructions");
     case ParamObject:
       {
-        std::shared_ptr<ModelAPI_Feature> aFeature = 
+        boost::shared_ptr<ModelAPI_Feature> aFeature = 
           featureDocument()->feature(PARAMETERS_GROUP, theIndex.row());
-        return aFeature->data()->getName().c_str();
+        if (aFeature)
+          return aFeature->data()->getName().c_str();
       }
     case ConstructObject:
       {
-        std::shared_ptr<ModelAPI_Feature> aFeature = 
+        boost::shared_ptr<ModelAPI_Feature> aFeature = 
           featureDocument()->feature(CONSTRUCTIONS_GROUP, theIndex.row());
-        return aFeature->data()->getName().c_str();
+        if (aFeature)
+          return aFeature->data()->getName().c_str();
       }
     }
     break;
@@ -273,9 +299,9 @@ bool XGUI_PartDataModel::hasChildren(const QModelIndex& theParent) const
 }
 
 
-std::shared_ptr<ModelAPI_Document> XGUI_PartDataModel::featureDocument() const
+boost::shared_ptr<ModelAPI_Document> XGUI_PartDataModel::featureDocument() const
 {
-  std::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
+  boost::shared_ptr<ModelAPI_Feature> aFeature = myDocument->feature(PARTS_GROUP, myId);
   return aFeature->data()->docRef("PartDocument")->value();
 }
 
@@ -294,3 +320,29 @@ FeaturePtr XGUI_PartDataModel::feature(const QModelIndex& theIndex) const
   }
   return FeaturePtr();
 }
+
+bool XGUI_PartDataModel::hasDocument(const boost::shared_ptr<ModelAPI_Document>& theDoc) const
+{
+  return (featureDocument() == theDoc);
+}
+
+
+QModelIndex XGUI_PartDataModel::findParent(const boost::shared_ptr<ModelAPI_Feature>& theFeature) const
+{
+  QString aGroup(theFeature->getGroup().c_str());
+
+  if (theFeature->getGroup().compare(PARAMETERS_GROUP) == 0)
+    return createIndex(0, 0, (qint32) ParamsFolder);
+  if (theFeature->getGroup().compare(CONSTRUCTIONS_GROUP) == 0)
+    return createIndex(1, 0, (qint32) ConstructFolder);
+  return QModelIndex();
+}
+
+QModelIndex XGUI_PartDataModel::findGroup(const std::string& theGroup) const
+{
+  if (theGroup.compare(PARAMETERS_GROUP) == 0)
+    return createIndex(0, 0, (qint32) ParamsFolder);
+  if (theGroup.compare(CONSTRUCTIONS_GROUP) == 0)
+    return createIndex(1, 0, (qint32) ConstructFolder);
+  return QModelIndex();
+}