]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #556: Make computation of flags more correct for root model
authorvsv <vitaly.smetannikov@opencascade.com>
Mon, 25 May 2015 09:20:51 +0000 (12:20 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Mon, 25 May 2015 09:20:51 +0000 (12:20 +0300)
src/PartSet/PartSet_DocumentDataModel.cpp
src/XGUI/XGUI_ObjectsBrowser.cpp
src/XGUI/XGUI_ObjectsBrowser.h

index 50bae54aca542801aae196094d339f3399e59d2e..c4f24582188fc90e13937eb837db889eea873041 100644 (file)
@@ -644,7 +644,12 @@ Qt::ItemFlags PartSet_DocumentDataModel::flags(const QModelIndex& theIndex) cons
   } else {
     QModelIndex* aIndex = toSourceModelIndex(theIndex);
     const QAbstractItemModel* aModel = aIndex->model();
-    return aModel->flags(*aIndex);
+    Qt::ItemFlags aFlags = aModel->flags(*aIndex);
+    if (aModel == myModel) {
+      if (myModel->object(*aIndex))
+        aFlags |= Qt::ItemIsEditable;
+    }
+    return aFlags;
   }
 }
 
index 25e2db0f5b448054571199ca4a484a273d1509ce..e8b0a1fed297976b71aa68890aed2b7c7de43ee2 100644 (file)
@@ -229,8 +229,13 @@ void XGUI_ObjectsBrowser::closeDocNameEditing(bool toSave)
 //***************************************************
 void XGUI_ObjectsBrowser::onContextMenuRequested(QContextMenuEvent* theEvent)
 {
-  QObjectPtrList aSelectedData = selectedObjects();
-  bool toEnable = aSelectedData.size() == 1;
+  QModelIndexList aIndexes;
+  QObjectPtrList aSelectedData = selectedObjects(&aIndexes);
+  bool toEnable = false;
+  if (aSelectedData.size() == 1) {
+    Qt::ItemFlags aFlags = dataModel()->flags(aIndexes.first());
+    toEnable = ((aFlags & Qt::ItemIsEditable) != 0);
+  }
   foreach(QAction* aCmd, actions()) {
     aCmd->setEnabled(toEnable);
   }
@@ -324,7 +329,7 @@ void XGUI_ObjectsBrowser::onSelectionChanged(const QItemSelection& theSelected,
   emit selectionChanged();
 }
 
-QObjectPtrList XGUI_ObjectsBrowser::selectedObjects() const
+QObjectPtrList XGUI_ObjectsBrowser::selectedObjects(QModelIndexList* theIndexes) const
 {
   QObjectPtrList aList;
   QModelIndexList aIndexes = selectedIndexes();
@@ -333,8 +338,11 @@ QObjectPtrList XGUI_ObjectsBrowser::selectedObjects() const
   for (aIt = aIndexes.constBegin(); aIt != aIndexes.constEnd(); ++aIt) {
     if ((*aIt).column() == 0) {
       ObjectPtr aObject = aModel->object(*aIt);
-      if (aObject)
+      if (aObject) {
         aList.append(aObject);
+        if (theIndexes)
+          theIndexes->append(*aIt);
+      }
     }
   }
   return aList;
index e5965b0ddf8e934838be9146eaaf447aa3957fcf..530a86a51b2c292bc15ba7fd30b4029d3990d01f 100644 (file)
@@ -73,7 +73,8 @@ Q_OBJECT
   }
 
   //! Returns list of currently selected objects
-  QObjectPtrList selectedObjects() const;
+  //! \param theIndexes - output list of corresponded indexes (can be NULL)
+  QObjectPtrList selectedObjects(QModelIndexList* theIndexes = 0) const;
 
   /// Set selected list of objects
   /// \param theObjects list of objects to select