Salome HOME
Merge branch 'Dev_1.2.0' of newgeom:newgeom into Dev_1.2.0
[modules/shaper.git] / src / XGUI / XGUI_ObjectsBrowser.cpp
index 3851b9fbee9fe2cbde17b715993c6bbeef8167ee..e8b0a1fed297976b71aa68890aed2b7c7de43ee2 100644 (file)
@@ -229,9 +229,14 @@ void XGUI_ObjectsBrowser::closeDocNameEditing(bool toSave)
 //***************************************************
 void XGUI_ObjectsBrowser::onContextMenuRequested(QContextMenuEvent* theEvent)
 {
-  bool toEnable = mySelectedData.size() == 1;
-  foreach(QAction* aCmd, actions())
-  {
+  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);
   }
   emit contextMenuRequested(theEvent);
@@ -240,12 +245,9 @@ void XGUI_ObjectsBrowser::onContextMenuRequested(QContextMenuEvent* theEvent)
 //***************************************************
 void XGUI_ObjectsBrowser::onLabelContextMenuRequested(const QPoint& thePnt)
 {
-  mySelectedData.clear();
+  myTreeView->selectionModel()->clearSelection();
   //Empty feature pointer means that selected root document
-  mySelectedData.append(ObjectPtr());
-
-  foreach(QAction* aCmd, actions())
-  {
+  foreach(QAction* aCmd, actions()) {
     aCmd->setEnabled(true);
   }
   QContextMenuEvent aEvent(QContextMenuEvent::Mouse, thePnt, myActiveDocLbl->mapToGlobal(thePnt));
@@ -255,13 +257,13 @@ void XGUI_ObjectsBrowser::onLabelContextMenuRequested(const QPoint& thePnt)
 //***************************************************
 void XGUI_ObjectsBrowser::onEditItem()
 {
-  if (mySelectedData.size() > 0) {
-    ObjectPtr aFeature = mySelectedData.first();
+  QObjectPtrList aSelectedData = selectedObjects();
+  if (aSelectedData.size() > 0) {
+    ObjectPtr aFeature = aSelectedData.first();
     if (aFeature) {  // Selection happens in TreeView
       // Find index which corresponds the feature
       QModelIndex aIndex;
-      foreach(QModelIndex aIdx, selectedIndexes())
-      {
+      foreach(QModelIndex aIdx, selectedIndexes()) {
         ObjectPtr aFea = dataModel()->object(aIdx);
         if (dataModel()->object(aIdx)->isSame(aFeature)) {
           aIndex = aIdx;
@@ -272,14 +274,15 @@ void XGUI_ObjectsBrowser::onEditItem()
         myTreeView->setCurrentIndex(aIndex);
         myTreeView->edit(aIndex);
       }
-    } else {  //Selection happens in Upper label
-      myActiveDocLbl->setReadOnly(false);
-      myActiveDocLbl->setFocus();
-      myActiveDocLbl->selectAll();
-      myActiveDocLbl->grabMouse();
-      myActiveDocLbl->setProperty("OldText", myActiveDocLbl->text());
+      return;
     }
   }
+  //Selection happens in Upper label
+  myActiveDocLbl->setReadOnly(false);
+  myActiveDocLbl->setFocus();
+  myActiveDocLbl->selectAll();
+  myActiveDocLbl->grabMouse();
+  myActiveDocLbl->setProperty("OldText", myActiveDocLbl->text());
 }
 
 //***************************************************
@@ -308,7 +311,6 @@ void XGUI_ObjectsBrowser::setObjectsSelected(const QObjectPtrList& theObjects)
 //***************************************************
 void XGUI_ObjectsBrowser::clearContent()  
 { 
-  mySelectedData.clear();
   myTreeView->clear(); 
 }
 
@@ -324,16 +326,24 @@ void XGUI_ObjectsBrowser::setDataModel(ModuleBase_IDocumentDataModel* theModel)
 void XGUI_ObjectsBrowser::onSelectionChanged(const QItemSelection& theSelected,
                                        const QItemSelection& theDeselected)
 {
-  mySelectedData.clear();
-  QModelIndexList aIndexes = myTreeView->selectionModel()->selectedIndexes();
+  emit selectionChanged();
+}
+
+QObjectPtrList XGUI_ObjectsBrowser::selectedObjects(QModelIndexList* theIndexes) const
+{
+  QObjectPtrList aList;
+  QModelIndexList aIndexes = selectedIndexes();
   ModuleBase_IDocumentDataModel* aModel = dataModel();
   QModelIndexList::const_iterator aIt;
   for (aIt = aIndexes.constBegin(); aIt != aIndexes.constEnd(); ++aIt) {
     if ((*aIt).column() == 0) {
       ObjectPtr aObject = aModel->object(*aIt);
-      if (aObject)
-        mySelectedData.append(aObject);
+      if (aObject) {
+        aList.append(aObject);
+        if (theIndexes)
+          theIndexes->append(*aIt);
+      }
     }
   }
-  emit selectionChanged();
-}
+  return aList;
+}
\ No newline at end of file