]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #445 undo/redo for Delete and Auxiliary operations
authorsbh <sergey.belash@opencascade.com>
Thu, 16 Apr 2015 17:02:29 +0000 (20:02 +0300)
committersbh <sergey.belash@opencascade.com>
Thu, 16 Apr 2015 17:02:29 +0000 (20:02 +0300)
src/PartSet/PartSet_MenuMgr.cpp
src/XGUI/XGUI_ContextMenuMgr.cpp
src/XGUI/XGUI_ContextMenuMgr.h
src/XGUI/XGUI_Workshop.cpp

index 0aa5faf3eeb4ccff5ad0897b4d8a6164c7e93f26..91b6f859e32c9ba101dce6d18885978fc8b9cb44 100644 (file)
@@ -376,7 +376,11 @@ void PartSet_MenuMgr::setAuxiliary(const bool isChecked)
   }
   if (isUseTransaction) {
     aMgr->finishOperation();
+    XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(myModule->workshop());
+    XGUI_Workshop* aWorkshop = aConnector->workshop();
+    aWorkshop->updateCommandStatus();
   }
+
   Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED));
   myModule->sketchMgr()->restoreSelection();
 }
index 868da0552900f20958902a229ee81dd13f4a7446..80fdfad7f07ece1ba1b23243e578fdf41ad8d9e6 100644 (file)
@@ -97,6 +97,16 @@ QAction* XGUI_ContextMenuMgr::action(const QString& theId) const
   return 0;
 }
 
+QAction* XGUI_ContextMenuMgr::actionByName(const QString& theName) const
+{
+  foreach(QAction* eachAction, myActions) {
+    if (eachAction->text() == theName) {
+      return eachAction;
+    }
+  }
+  return NULL;
+}
+
 QStringList XGUI_ContextMenuMgr::actionIds() const
 {
   return myActions.keys();
index 570fe912e1ac7b544f4200ba5b58929999f20468..805b376ef4fc159ce9c38e0accd568e87d673224 100644 (file)
@@ -33,6 +33,8 @@ Q_OBJECT
   /// \param theId an id of an action
   QAction* action(const QString& theId) const;
 
+  QAction* actionByName(const QString& theName) const;
+
   /// Returns list of registered actions Ids
   QStringList actionIds() const;
 
index eda3869245186db1cd2e1090526b5f686bbb07a3..701ac10b89ba742b23c2b5200e47d1bbe8dc31f9 100644 (file)
@@ -1377,8 +1377,10 @@ void XGUI_Workshop::deleteObjects()
 {
   ModuleBase_IModule* aModule = module();
   // 1. allow the module to delete objects, do nothing if it has succeed
-  if (aModule->deleteObjects())
+  if (aModule->deleteObjects()) {
+    updateCommandStatus();
     return;
+  }
 
   if (!isActiveOperationAborted())
     return;
@@ -1705,7 +1707,13 @@ QList<ActionInfo> XGUI_Workshop::processHistoryList(const std::list<std::string>
     if (isEditing) {
       anId.chop(ModuleBase_Operation::EditSuffix().size());
     }
-    ActionInfo anInfo = myActionsMgr->actionInfoById(anId);
+    ActionInfo anInfo;
+    QAction* aContextMenuAct = myContextMenuMgr->actionByName(anId);
+    if (aContextMenuAct) {
+      anInfo.initFrom(aContextMenuAct);
+    } else {
+      anInfo = myActionsMgr->actionInfoById(anId);
+    }
     if (isEditing) {
       anInfo.text = anInfo.text.prepend("Modify ");
     }