]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
TMP
authordish <dmitrii.shvydkoi@opencascade.com>
Wed, 27 Nov 2024 02:42:47 +0000 (02:42 +0000)
committerdish <dmitrii.shvydkoi@opencascade.com>
Wed, 27 Nov 2024 02:42:47 +0000 (02:42 +0000)
src/LightApp/resources/LightApp.xml
src/SUIT/SUIT_ShortcutMgr.cxx
src/SUIT/SUIT_ShortcutMgr.h
src/SUIT/resources/action_id_mutations.json

index 5e0d3cbf887c927329289fbd91fb283d2ddf2f4f..70869070a3369d845383c1aed6655ef6be272e75 100644 (file)
   <section name="action_assets">
     <parameter name="${GUI_ROOT_DIR}/share/salome/resources/gui/action_assets.json" value=""/>
   </section>
+  <section name="actionID_mutations">
+    <parameter name="${GUI_ROOT_DIR}/share/salome/resources/gui/action_id_mutations.json" value=""/>
+  </section>
   <!--Salome shortcut settings
        See SUIT_ShortcutMgr for details.
   -->
index ecd6c64af7c5d2d54ece655ea71c568255ef53b0..99857e3c03d68f8b9b6cb54eeeeb6e66bcbe579e 100644 (file)
@@ -569,6 +569,16 @@ std::set<QString> SUIT_ShortcutContainer::getIDsOfAllModules() const
   return res;
 }
 
+bool SUIT_ShortcutContainer::isEmpty() const
+{
+  for (const auto& moduleIDAndShortcuts : myShortcutsInversed) {
+    const auto& moduleShortcutsInversed = moduleIDAndShortcuts.second;
+    if (!moduleShortcutsInversed.empty())
+      return false;
+  }
+  return true;
+}
+
 std::set<std::pair<QString, QString>> SUIT_ShortcutContainer::setShortcut(QString theModuleID, const QString& theInModuleActionID, const QKeySequence& theKeySequence, bool theOverride)
 {
   if (!SUIT_ShortcutMgr::isModuleIDValid(theModuleID)) {
@@ -1526,6 +1536,19 @@ SUIT_ShortcutMgr::~SUIT_ShortcutMgr()
     myShortcutMgr = new SUIT_ShortcutMgr();
     myShortcutMgr->setAssetsFromResources();
     myShortcutMgr->setShortcutsFromPreferences();
+
+    { // Migrate old shortcut preferences.
+      SUIT_ShortcutHistorian historian;
+      myShortcutMgr->mergeShortcutContainer(
+        historian.getContainerWithOldShortcuts(),
+        true /*theOverride*/,
+        false /*theTreatAbsentIncomingAsDisabled*/,
+        true /*theSaveToPreferences*/
+      );
+
+      historian.removeOldShortcutPreferences();
+    }
+
     ShCutDbg("SUIT_ShortcutMgr initialization has finished.");
   }
 }
@@ -3491,6 +3514,24 @@ SUIT_ShortcutHistorian::SUIT_ShortcutHistorian() {
     SUIT_ShortcutMgr::fillContainerFromPreferences(container, false, oldPrefix);
   }
   ShCutDbg("SUIT_ShortcutHistorian: parsing of old shortcut preference sections finished.");
+
+  for (auto itPrefix = SUIT_ShortcutHistorian::SECTION_PREFIX_EVOLUTION.rbegin(); itPrefix != SUIT_ShortcutHistorian::SECTION_PREFIX_EVOLUTION.rend(); itPrefix++) {
+    const auto itPrefixAndContainer = myShortcutContainers.find(*itPrefix);
+    if (itPrefixAndContainer == myShortcutContainers.end())
+      continue;
+
+    myShortcutContainer.merge(itPrefixAndContainer->second, true /*theOverride*/, false /*theTreatAbsentIncomingAsDisabled*/);
+  }
+}
+
+bool SUIT_ShortcutHistorian::doOldShortcutPreferencesExist() const
+{
+  for (const auto& prefixAndContainer : myShortcutContainers) {
+    const auto& container = prefixAndContainer.second;
+    if (!container.isEmpty())
+      return true;
+  }
+  return false;
 }
 
 std::pair<bool, QKeySequence> SUIT_ShortcutHistorian::getOldUserDefinedKeySequence(const QString& theActionID) const
@@ -3514,6 +3555,26 @@ std::pair<bool, QKeySequence> SUIT_ShortcutHistorian::getOldUserDefinedKeySequen
   return result;
 }
 
+void SUIT_ShortcutHistorian::removeOldShortcutPreferences()
+{
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+  if (!resMgr) {
+    Warning("SUIT_ShortcutHistorian: can't retrieve resource manager!");
+    return;
+  }
+
+  for (const auto& prefixAndContainer : myShortcutContainers) {
+    const auto& sectionNamePrefix = prefixAndContainer.first;
+    const auto& container = prefixAndContainer.second;
+
+    const auto& moduleIDs = container.getIDsOfAllModules();
+    for (const QString& moduleID : moduleIDs) {
+      const QString sectionName = sectionNamePrefix + resMgr->sectionsToken() + moduleID;
+      resMgr->remove(sectionName); // TODO Check if SUIT_ResourceMgr really removes sections from preference files, not just from its fields.
+    }
+  }
+}
+
 void SUIT_ShortcutHistorian::parseMutations()
 {
   ShCutDbg() && ShCutDbg("Parsing action ID mutation files.");
index 32e59a86b96a058b50b88d5fb8f3f15cc1315606..2a138d0a34db53656cc02487ee4e9cb16a59275d 100644 (file)
@@ -76,6 +76,9 @@ public:
 
   std::set<QString> getIDsOfAllModules() const;
 
+  /*! \returns True, if no shortcut is added. */
+  bool isEmpty() const;
+
   /*! \brief Checks for conflicts. If theOverride, modifies incoming and disables all conflicting shortcuts.
   Redefining a key sequence for the action, if theKeySequence does not conflict with other shortcuts, is not considered as a conflict.
   \param theModuleID The method has no effect if theModuleID is invalid. \ref See SUIT_ShortcutMgr::isModuleIDValid(const QString&) for details.
@@ -830,7 +833,7 @@ private:
     /*! \returns True, if both old and new prefixes are the same as ones of theOther. */
     bool isConcurrent(const AIDSMutation& theOther) const;
 
-    /*! \returns True. if mutation maps are extended. */
+    /*! \returns True, if mutation maps are augmented. */
     bool merge(const AIDSMutation& theOther);
 
   private:
@@ -850,11 +853,19 @@ private:
 public:
   SUIT_ShortcutHistorian();
 
+  /*! \returns True, if myShortcutContainers has at least one shortcut. */
+  bool doOldShortcutPreferencesExist() const;
+
   /*!
   \param theActionID Action ID in latest version (as elsewhere in ShortcutMgr code).
   \returns {false, _ }, if shortcut is not defined in any outdated shortcut section of user preference files. */
   std::pair<bool, QKeySequence> getOldUserDefinedKeySequence(const QString& theActionID) const;
 
+  const SUIT_ShortcutContainer& getContainerWithOldShortcuts() const { return myShortcutContainer; };
+
+  /*! \brief Removes old shortcut sections from preference files and clears myShortcutContainers. */
+  void removeOldShortcutPreferences();
+
 private:
   void parseMutations();
 
@@ -869,6 +880,9 @@ private:
 
   /** {sectionNamePrefixOld, shortcutContainer}[]. */
   std::map<QString, SUIT_ShortcutContainer> myShortcutContainers;
+
+  /** Merged myShortcutContainers. Merge is performed from the oldest to the newest, newer shortcuts override older ones. */
+  SUIT_ShortcutContainer myShortcutContainer;
 };
 
 
index eec74dc08b70a92dbfa51a4c0c512b2017743e8d..8092ece6229d0b722fe51e9881051daae0c085a5 100644 (file)
@@ -4,7 +4,13 @@
          "sectionPrefixOld": "shortcuts",
          "sectionPrefixNew": "shortcuts_vA1.0",
          "newToOldActionIDMap": {
-
+            "File/Close" : "TOT_DESK_FILE_CLOSE",
+            "File/Exit" : "TOT_DESK_FILE_EXIT",
+            "File/New" : "TOT_DESK_FILE_NEW",
+            "File/Open" : "TOT_DESK_FILE_OPEN",
+            "File/Preferences" : "PRP_DESK_PREFERENCES",
+            "File/Save" : "TOT_DESK_FILE_SAVE",
+            "File/SaveAs" : "TOT_DESK_FILE_SAVEAS"
          }
       }
    ]