]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Provide show new and delete obsolete commands in toolbars.
authorvsv <vsv@opencascade.com>
Tue, 6 Nov 2018 12:12:37 +0000 (15:12 +0300)
committervsv <vsv@opencascade.com>
Tue, 6 Nov 2018 12:12:37 +0000 (15:12 +0300)
src/SHAPERGUI/SHAPERGUI.cpp
src/SHAPERGUI/SHAPERGUI.h
src/SHAPERGUI/SHAPERGUI_ToolbarsMgr.cpp
src/SHAPERGUI/SHAPERGUI_ToolbarsMgr.h

index 1a1004970a11405ff923ee909e8bbfc9529c04c7..28f3de9a452fda65b9845be44ca597f04531e9c1 100644 (file)
@@ -83,6 +83,11 @@ SHAPERGUI_EXPORT char* getModuleVersion()
 }
 } // extern "C"
 
+
+static const QString ToolbarsSection("SHAPER_Toolbars");
+static const QString FreeCommandsParam("OutOFToolbars");
+
+
 /** 
 * Class for preferences management
 */
@@ -902,7 +907,7 @@ void SHAPERGUI::saveToolbarsConfig()
 {
   if (!myIsToolbarsModified)
     return;
-  // Set toolbars config
+  // Save toolbars config into map
   QMap<QString, QStringList> aToolbarsConfig;
   QtxActionToolMgr* aMgr = toolMgr();
   QStringList aToolbars = myToolbars.keys();
@@ -918,30 +923,39 @@ void SHAPERGUI::saveToolbarsConfig()
     }
     aToolbarsConfig[aName] = aContent;
   }
-
+  // Store the config into resources
   SUIT_ResourceMgr* aResMgr = application()->resourceMgr();
   QStringList aNames = aToolbarsConfig.keys();
   QStringList aValues;
-  const QString aSection("SHAPER_Toolbars");
   foreach(QString aToolbar, aNames) {
-    aResMgr->setValue(aSection, aToolbar, aToolbarsConfig[aToolbar].join(","));
+    aResMgr->setValue(ToolbarsSection, aToolbar, aToolbarsConfig[aToolbar].join(","));
   }
-  QStringList aOldParams = aResMgr->parameters(aSection);
+  // Remove obsolete parameters from resources
+  QStringList aOldParams = aResMgr->parameters(ToolbarsSection);
   foreach(QString aName, aOldParams) {
     if (!aToolbars.contains(aName))
-      aResMgr->remove(aSection, aName);
+      aResMgr->remove(ToolbarsSection, aName);
   }
+  // Store current list of free commands
+  QIntList aFreeCommands = getFreeCommands();
+  QStringList aFreeList;
+  foreach(int aId, aFreeCommands) {
+    aFreeList.append(action(aId)->data().toString());
+  }
+  if (aFreeList.size() > 0)
+    aResMgr->setValue(ToolbarsSection, FreeCommandsParam, aFreeList.join(","));
+
   myIsToolbarsModified = false;
 }
 
 void SHAPERGUI::loadToolbarsConfig()
 {
-  const QString aSection("SHAPER_Toolbars");
   SUIT_ResourceMgr* aResMgr = application()->resourceMgr();
-  QStringList aToolbarNames = aResMgr->parameters(aSection);
+  QStringList aToolbarNames = aResMgr->parameters(ToolbarsSection);
   if (aToolbarNames.size() == 0)
     return;
 
+  // Create commands map
   QMap<QString, int> aCommandsMap;
   QString aCmdIdStr;
   foreach(int aId, myActionsList) {
@@ -949,19 +963,65 @@ void SHAPERGUI::loadToolbarsConfig()
     aCommandsMap[aCmdIdStr] = aId;
   }
 
+  // Create new toolbars structure
   QMap<QString, QIntList> aToolbars;
   QStringList aCommands;
+  QIntList aKnownCommands;
   QList<QAction*> aActions;
   foreach(QString aName, aToolbarNames) {
-    aCommands = aResMgr->stringValue(aSection, aName).split(",");
-
-    aToolbars[aName] = QIntList();
-    if (aCommands.size() > 0) {
+    aCommands = aResMgr->stringValue(ToolbarsSection, aName).split(",");
+    if (aName == FreeCommandsParam) {
+      // The value is a list of free commands
       foreach(QString aCommand, aCommands) {
-        if (aCommand.isEmpty())
-          aToolbars[aName].append(-1);
-        else if (aCommandsMap.contains(aCommand)) {
-          aToolbars[aName].append(aCommandsMap[aCommand]);
+        aKnownCommands.append(aCommandsMap[aCommand]);
+      }
+    }
+    else {
+      aToolbars[aName] = QIntList();
+      if (aCommands.size() > 0) {
+        foreach(QString aCommand, aCommands) {
+          if (aCommand.isEmpty())
+            aToolbars[aName].append(-1);
+          else if (aCommandsMap.contains(aCommand)) {
+            int aId = aCommandsMap[aCommand];
+            aToolbars[aName].append(aId);
+            aKnownCommands.append(aId);
+          }
+        }
+      }
+    }
+  }
+  // Find new and obsolete commands
+  QIntList aNewCommands = myActionsList;
+  foreach(int aId, myActionsList) {
+    if (aKnownCommands.contains(aId)) {
+      aKnownCommands.removeAll(aId);
+      aNewCommands.removeAll(aId);
+    }
+  }
+  if (aNewCommands.size() > 0) {
+    // Add new commands to toolbars structure
+    QStringList aKeys = myToolbars.keys();
+    foreach(int aNewId, aNewCommands) {
+      foreach(QString aName, aKeys) {
+        if (myToolbars[aName].contains(aNewId)) {
+          if (!aToolbars.contains(aName)) {
+            aToolbars[aName] = QIntList();
+          }
+          aToolbars[aName].append(aNewId);
+        }
+      }
+    }
+  }
+  if (aKnownCommands.size() > 0) {
+    // Remove obsolete commands from the toolbars structure
+    QStringList aKeys = aToolbars.keys();
+    foreach(int aOldId, aKnownCommands) {
+      foreach(QString aName, aKeys) {
+        if (aToolbars[aName].contains(aOldId)) {
+          aToolbars[aName].removeAll(aOldId);
+          if (aToolbars[aName].size() == 0)
+            aToolbars.remove(aName);
         }
       }
     }
@@ -969,3 +1029,21 @@ void SHAPERGUI::loadToolbarsConfig()
   updateToolbars(aToolbars);
   myIsToolbarsModified = false;
 }
+
+
+QIntList SHAPERGUI::getFreeCommands() const
+{
+  QIntList aFreeCommands;
+  QtxActionToolMgr* aMgr = toolMgr();
+  QAction* anAction;
+  int aId;
+  QMap<QString, QIntList>::const_iterator aIt;
+  QIntList aShaperActions = shaperActions();
+  foreach(int aCmd, aShaperActions) {
+    anAction = action(aCmd);
+    aId = aMgr->actionId(anAction);
+    if (!aMgr->containsAction(aId))
+      aFreeCommands.append(aCmd);
+  }
+  return aFreeCommands;
+}
index 598c4502335dfe6fe7aaf0df699748bbc1185086..9504446a24f7529f2fb36aae48d795e2369b548e 100644 (file)
@@ -156,10 +156,14 @@ Q_OBJECT
 
   virtual void updateModuleVisibilityState();
 
-
+  /// Returns list of the module commands
   QIntList shaperActions() const { return myActionsList; }
+
+  /// Returns structure of tool bars
   QMap<QString, QIntList> shaperToolbars() const { return myToolbars; }
 
+  /// Returns free commands which are not in toolbars in the module
+  QIntList getFreeCommands() const;
 
  public slots:
   /// \brief The method is redefined to connect to the study viewer before the data
index 673bab04eec7f8409a38fb6294c87b5098e6f92f..e1e6b11377ea91e04ec699078225f9e450a08f2a 100644 (file)
@@ -82,7 +82,7 @@ SHAPERGUI_ToolbarsDlg::SHAPERGUI_ToolbarsDlg(SHAPERGUI* theModule)
   myModule(theModule),
   myResult(theModule->shaperToolbars())
 {
-  myFreeCommands = getModuleFreeCommands();
+  myFreeCommands = theModule->getFreeCommands();
 
   setWindowTitle(tr("Toolbars"));
   QVBoxLayout* aMailLayout = new QVBoxLayout(this);
@@ -211,23 +211,6 @@ void SHAPERGUI_ToolbarsDlg::updateToolbarsList()
   myToolbarsList->addItems(aItems);
 }
 
-QIntList SHAPERGUI_ToolbarsDlg::getModuleFreeCommands() const
-{
-  QIntList aFreeCommands;
-  QtxActionToolMgr* aMgr = myModule->toolMgr();
-  QAction* anAction;
-  int aId;
-  QMap<QString, QIntList>::const_iterator aIt;
-  QIntList aShaperActions = myModule->shaperActions();
-  foreach(int aCmd, aShaperActions) {
-    anAction = myModule->action(aCmd);
-    aId = aMgr->actionId(anAction);
-    if (!aMgr->containsAction(aId))
-      aFreeCommands.append(aCmd);
-  }
-  return aFreeCommands;
-}
-
 
 void SHAPERGUI_ToolbarsDlg::onDoubleClick(const QModelIndex& theIdx)
 {
index 9d6e77536227359c857014dc4850afd085f727f5..19d40013c2401ca2f44a25705e7f2bb806ccfa05 100644 (file)
@@ -124,9 +124,6 @@ private:
   /// Update number of free items
   void updateNumber();
 
-  /// Returns free commands which are not in toolbars in the module
-  QIntList getModuleFreeCommands() const;
-
 private:
   SHAPERGUI* myModule;
   QMap<QString, QIntList> myResult;