Salome HOME
Merge branch 'Dev_1.1.1' of newgeom:newgeom into Dev_1.2.0
[modules/shaper.git] / src / PartSet / PartSet_PartDataModel.cpp
index ec4dabffaccfbcc66badffccf4f7229e11279f2f..d124d80fc5272b0b2955a1074a38da7999387e5f 100644 (file)
@@ -246,7 +246,7 @@ QModelIndex PartSet_TopDataModel::objectIndex(const ObjectPtr& theObject) const
 //******************************************************************
 //******************************************************************
 PartSet_PartDataModel::PartSet_PartDataModel(QObject* theParent)
-    : PartSet_PartModel(theParent), myHistoryBackOffset(0)
+    : PartSet_PartModel(theParent)
 {
 }
 
@@ -261,7 +261,7 @@ QVariant PartSet_PartDataModel::data(const QModelIndex& theIndex, int theRole) c
     DocumentPtr aActiveDoc = ModelAPI_Session::get()->activeDocument();
     QModelIndex aParent = theIndex.parent();
     if (aActiveDoc == aPartDoc) {
-      if ((theIndex.internalId() == HistoryObject) && (!aParent.isValid())) {
+      if (!aParent.isValid()) {
         switch (theRole) {
         case Qt::DecorationRole:
           if (theIndex.row() == lastHistoryRow())
@@ -468,11 +468,10 @@ bool PartSet_PartDataModel::hasChildren(const QModelIndex& theParent) const
 
 DocumentPtr PartSet_PartDataModel::partDocument() const
 {
-  DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
-  ObjectPtr aObject = aRootDoc->object(ModelAPI_Feature::group(), myId);
-  FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
-  ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aFeature->firstResult()); 
-  return aPart->partDoc();
+  ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(myPart->firstResult()); 
+  if (aPart.get()) // this may be null is Part feature is disabled
+    return aPart->partDoc();
+  return DocumentPtr();
 }
 
 ObjectPtr PartSet_PartDataModel::object(const QModelIndex& theIndex) const
@@ -521,13 +520,6 @@ QModelIndex PartSet_PartDataModel::findGroup(const std::string& theGroup) const
   return QModelIndex();
 }
 
-ResultPartPtr PartSet_PartDataModel::part() const
-{
-  DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
-  ObjectPtr aObj = aRootDoc->object(ModelAPI_ResultPart::group(), myId);
-  return std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
-}
-
 QModelIndex PartSet_PartDataModel::objectIndex(const ObjectPtr& theObject) const
 {
   QModelIndex aIndex;
@@ -572,13 +564,28 @@ int PartSet_PartDataModel::getRowsNumber() const
 
 int PartSet_PartDataModel::lastHistoryRow() const
 {
-  return rowCount() - 1 - myHistoryBackOffset;
+  DocumentPtr aDoc = partDocument();
+  FeaturePtr aFeature = aDoc->currentFeature(true);
+  if (aFeature.get())
+    return getRowsNumber() + aDoc->index(aFeature);
+  else
+    return getRowsNumber() - 1;
 }
 
 void PartSet_PartDataModel::setLastHistoryItem(const QModelIndex& theIndex)
 {
+  SessionPtr aMgr = ModelAPI_Session::get();
+  DocumentPtr aDoc = partDocument();
+  std::string aOpName = tr("History change").toStdString();
   if (theIndex.internalId() == HistoryObject) {
-    myHistoryBackOffset = rowCount() - 1 - theIndex.row();
+    ObjectPtr aObject = object(theIndex);
+    aMgr->startOperation(aOpName);
+    aDoc->setCurrentFeature(std::dynamic_pointer_cast<ModelAPI_Feature>(aObject), true);
+    aMgr->finishOperation();
+  } else {
+    aMgr->startOperation(aOpName);
+    aDoc->setCurrentFeature(FeaturePtr(), true);
+    aMgr->finishOperation();
   }
 }