Salome HOME
Fix for the issue #910: never fully remove the results, just make them disabled when...
[modules/shaper.git] / src / PartSet / PartSet_DocumentDataModel.cpp
index 961768c1892a89c3e62f76ca19029452af416231..84ac7a1697ea1820628022c43d0111c696a38c67 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "PartSet_DocumentDataModel.h"
 #include "PartSet_PartDataModel.h"
+#include "PartSet_TopDataModel.h"
 #include "PartSet_Module.h"
 //#include "XGUI_Tools.h"
 
@@ -155,9 +156,15 @@ void PartSet_DocumentDataModel::processEvent(const std::shared_ptr<Events_Messag
         }
         if (aPartModel) {
           QModelIndex aIndex = aPartModel->findGroup(aGroup);
-          int aStart = aPartModel->rowCount(aIndex);
-          aIndex = createIndex(aIndex.row(), aIndex.column(), (void*) getModelIndex(aIndex));
-          removeRow(aStart, aIndex);
+          if (aIndex.isValid()) {
+            int aStart = aPartModel->rowCount(aIndex);
+            aIndex = createIndex(aIndex.row(), aIndex.column(), (void*) getModelIndex(aIndex));
+            removeRow(aStart, aIndex);
+          } else {
+            int aRow = aPartModel->rowCount();
+            aIndex = createIndex(aPartModel->position() + historyOffset(), 0, HistoryNode);
+            removeRow(aRow, aIndex);
+          }
         }
       }
     }
@@ -282,7 +289,20 @@ QVariant PartSet_DocumentDataModel::data(const QModelIndex& theIndex, int theRol
           case Qt::DecorationRole:
             return featureIcon(aFeature);
           case Qt::ToolTipRole:
-            return tr("Feature object");
+            {
+              ResultPtr aResult = aFeature->firstResult();
+              bool isResultAndNotLoaded = false;
+              if( aResult.get() )
+              {
+                ResultPartPtr aResultPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>( aResult );
+                if( aResultPart.get() )
+                  isResultAndNotLoaded = !aResultPart->isActivated();
+              }
+              if( isResultAndNotLoaded )
+                return tr( "The part should be activated before the user may edit it" );
+              else
+                return tr( "Feature object" );
+            }
           case Qt::ForegroundRole:
             if (theIndex.row() > lastHistoryRow())
               return QBrush(Qt::lightGray);
@@ -636,7 +656,7 @@ Qt::ItemFlags PartSet_DocumentDataModel::flags(const QModelIndex& theIndex) cons
 {
   if ((theIndex.internalId() >= PartsFolder) && (theIndex.internalId() <= PartResult)) {
     Qt::ItemFlags aFlags = Qt::ItemIsSelectable;
-    if (object(theIndex)) {
+    if (object(theIndex).get()) {
       aFlags |= Qt::ItemIsEditable;
     }
     // Disable items which are below of last history row
@@ -652,7 +672,7 @@ Qt::ItemFlags PartSet_DocumentDataModel::flags(const QModelIndex& theIndex) cons
     const QAbstractItemModel* aModel = aIndex->model();
     Qt::ItemFlags aFlags = aModel->flags(*aIndex);
     if (aModel == myModel) {
-      if (myModel->object(*aIndex))
+      if (myModel->object(*aIndex).get())
         aFlags |= Qt::ItemIsEditable;
     }
     return aFlags;
@@ -795,6 +815,8 @@ void PartSet_DocumentDataModel::onMouseDoubleClick(const QModelIndex& theIndex)
 {
   if (theIndex.column() != 1)
     return;
+  if (flags(theIndex) == 0)
+    return;
   QTreeView* aTreeView = dynamic_cast<QTreeView*>(sender());
   if ((theIndex.internalId() >= PartsFolder) && (theIndex.internalId() <= PartResult)) {
     if (myActivePartModel)