Salome HOME
refs #30 - Sketch base GUI: create, draw lines
authornds <natalia.donis@opencascade.com>
Wed, 23 Apr 2014 12:14:07 +0000 (16:14 +0400)
committernds <natalia.donis@opencascade.com>
Wed, 23 Apr 2014 12:14:07 +0000 (16:14 +0400)
Creation of the operation manager to provide the operations stack.

17 files changed:
src/Model/Model_PluginManager.cpp
src/ModuleBase/ModuleBase_Operation.cpp
src/ModuleBase/ModuleBase_Operation.h
src/PartSet/PartSet_Module.cpp
src/PartSet/PartSet_Module.h
src/PartSet/PartSet_OperationSketch.cpp
src/PartSet/PartSet_OperationSketch.h
src/PartSet/PartSet_OperationSketchBase.cpp
src/PartSet/PartSet_OperationSketchBase.h
src/XGUI/CMakeLists.txt
src/XGUI/XGUI_Displayer.cpp
src/XGUI/XGUI_Displayer.h
src/XGUI/XGUI_Module.h
src/XGUI/XGUI_OperationMgr.cpp [new file with mode: 0644]
src/XGUI/XGUI_OperationMgr.h [new file with mode: 0644]
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index eb279208afff32ba365016d136eac30c71cb7297..75cc0430c17ea114ed9f8b2f42c09ae8b2ceeda3 100644 (file)
@@ -22,9 +22,9 @@ shared_ptr<ModelAPI_Feature> Model_PluginManager::createFeature(string theFeatur
 
   LoadPluginsInfo();
   if (myPlugins.find(theFeatureID) != myPlugins.end()) {
-    if (myPluginObjs.find(myPlugins[theFeatureID]) == myPluginObjs.end()) {
+    myCurrentPluginName = myPlugins[theFeatureID];
+    if (myPluginObjs.find(myCurrentPluginName) == myPluginObjs.end()) {
       // load plugin library if not yet done
-      myCurrentPluginName = myPlugins[theFeatureID];
       loadLibrary(myCurrentPluginName);
     }
     if (myPluginObjs.find(myCurrentPluginName) != myPluginObjs.end()) {
index e2e6891c4084ab79244b1899eb4ef1da73a217e5..672eb23f5023e0ce6a8428af18ba732d729cdd87 100644 (file)
@@ -54,6 +54,16 @@ QString ModuleBase_Operation::operationId() const
   return myOperationId;
 }
 
+/*!
+ * \brief Replied whether the operation should be commited after the start, or the operation itself
+ *  do that. The default realization provides the check by the operation having the xml prepresentation 
+ *  @return the boolean value
+ */
+bool ModuleBase_Operation::isPerformedImmediately() const
+{
+  return xmlRepresentation().isEmpty();
+}
+
 std::shared_ptr<ModelAPI_Feature> ModuleBase_Operation::feature() const
 {
   return myFeature;
index a3c0c40c18aa4925a9be7995f7fe6acfd5d38e5f..8d23908316fc47207c8415c63c69ad8a82546770 100644 (file)
@@ -76,6 +76,8 @@ public:
   // Operation processing.
   virtual QString operationId() const;
 
+  virtual bool isPerformedImmediately() const;
+
   std::shared_ptr<ModelAPI_Feature> feature() const;
 
   OperationState state() const;
index 7a32a90bbf3d4c11ed9e73e72baa1ffb37b64e04..bd136d50ea533957644e26a4acf0ead6b6923f0f 100644 (file)
@@ -5,6 +5,9 @@
 
 #include <XGUI_MainWindow.h>
 #include <XGUI_Displayer.h>
+#include <XGUI_Viewer.h>
+#include <XGUI_Workshop.h>
+#include <XGUI_OperationMgr.h>
 
 #include <Config_PointerMessage.h>
 #include <Config_ModuleReader.h>
@@ -29,6 +32,9 @@ extern "C" PARTSET_EXPORT XGUI_Module* createModule(XGUI_Workshop* theWshop)
 PartSet_Module::PartSet_Module(XGUI_Workshop* theWshop)
 {
   myWorkshop = theWshop;
+  XGUI_OperationMgr* anOperationMgr = myWorkshop->operationMgr();
+
+  connect(anOperationMgr, SIGNAL(beforeOperationStart()), this, SLOT(onBeforeOperationStart()));
 }
 
 PartSet_Module::~PartSet_Module()
@@ -70,19 +76,19 @@ void PartSet_Module::onFeatureTriggered()
   else
     aPartSetOp = new ModuleBase_PropPanelOperation(aCmdId, this);
 
-  PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(aPartSetOp);
-  if (aPreviewOp)
-    connect(aPreviewOp, SIGNAL(visualizePreview()), this, SLOT(onVisualizePreview()));
-
   aPartSetOp->setXmlRepresentation(QString::fromStdString(aXmlCfg));
   aPartSetOp->setDescription(QString::fromStdString(aDescription));
   aMessage.setPointer(aPartSetOp);
   Event_Loop::loop()->send(aMessage);
 }
 
-void PartSet_Module::onVisualizePreview()
+/**
+ * Slot that is called by the operation requiring of preview display or erase
+ * \param isDisplay the display or erase state
+*/
+void PartSet_Module::onVisualizePreview(bool isDisplay)
 {
-  ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
+  ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
   if (!anOperation)
     return;
 
@@ -90,5 +96,35 @@ void PartSet_Module::onVisualizePreview()
   if (!aPreviewOp)
     return;
 
-  myWorkshop->displayer()->Display(anOperation->feature(), aPreviewOp->preview());
+  if (isDisplay)
+    myWorkshop->displayer()->Display(anOperation->feature(), aPreviewOp->preview());
+  else
+    myWorkshop->displayer()->Erase(anOperation->feature(), aPreviewOp->preview());
+}
+
+void PartSet_Module::onBeforeOperationStart()
+{
+  ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
+
+  PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
+  if (aPreviewOp) {
+    connect(anOperation, SIGNAL(stopped()), this, SLOT(onOperationStopped()));
+    connect(aPreviewOp, SIGNAL(visualizePreview(bool)), this, SLOT(onVisualizePreview(bool)));
+    connect(myWorkshop->mainWindow()->viewer(), SIGNAL(selectionChanged()),
+            aPreviewOp, SLOT(onViewSelectionChanged()));
+  }
+}
+
+void PartSet_Module::onOperationStopped()
+{
+  ModuleBase_PropPanelOperation* anOperation = dynamic_cast<ModuleBase_PropPanelOperation*>(sender());
+  if (!anOperation)
+    return;
+
+  PartSet_OperationSketchBase* aPreviewOp = dynamic_cast<PartSet_OperationSketchBase*>(anOperation);
+  if (aPreviewOp) {
+    disconnect(aPreviewOp, SIGNAL(visualizePreview(bool)), this, SLOT(onVisualizePreview(bool)));
+    disconnect(myWorkshop->mainWindow()->viewer(), SIGNAL(selectionChanged()),
+               aPreviewOp, SLOT(onViewSelectionChanged()));
+  }
 }
index b33d2ad7dac976aef554ba00e91c16c73c33182c..7530c2300325aa02a5fad6b53170ef8b1cf63a7d 100644 (file)
@@ -20,7 +20,9 @@ public:
 
 public slots:
   void onFeatureTriggered();
-  void onVisualizePreview();
+  void onBeforeOperationStart();
+  void onOperationStopped();
+  void onVisualizePreview(bool isDisplay);
 
 private:
   XGUI_Workshop* myWorkshop;
index b5aa1874753ff6b137242c411307295eff1910a8..3b4e5bd8d89b49ab98a2a5e8c4f1175ce350a656 100644 (file)
@@ -20,3 +20,12 @@ PartSet_OperationSketch::PartSet_OperationSketch(const QString& theId,
 PartSet_OperationSketch::~PartSet_OperationSketch()
 {
 }
+
+/**
+ * The sketch can not be created immediately, firstly a plane should be set
+ * \return false value
+ */
+bool PartSet_OperationSketch::isPerformedImmediately() const
+{
+  return false;
+}
index 99cacfbb68c7f2ff90ba8c661d40bcdd11fb5b25..679f74afa739013a653404c2612d27f99c48732c 100644 (file)
@@ -18,6 +18,8 @@ Q_OBJECT
 public:
   PartSet_OperationSketch(const QString& theId, QObject* theParent);
   virtual ~PartSet_OperationSketch();
+
+  virtual bool isPerformedImmediately() const;
 };
 
 #endif
index 0201255b81cc0b51778e9a61f56c66e31f9c281d..9b34aa2ebd34779ca8525508110440319b93035c 100644 (file)
@@ -42,5 +42,15 @@ void PartSet_OperationSketchBase::startOperation()
 {
   ModuleBase_PropPanelOperation::startOperation();
 
-  emit visualizePreview();
+  emit visualizePreview(true);
+}
+
+/*!
+ * Perform the operation stop and emit signal about visualization stop of the operation preview
+ */
+void PartSet_OperationSketchBase::stopOperation()
+{
+  ModuleBase_PropPanelOperation::stopOperation();
+
+  emit visualizePreview(false);
 }
index ceb88026415606c8113319a9fc575c441f44e732..de7c1ce03e4f647b1a7163f30bc55351c14718e9 100644 (file)
@@ -24,10 +24,15 @@ public:
   const TopoDS_Shape& preview() const;
 
 signals:
-  void visualizePreview();
+  /**
+   * The signal about preview visualization.
+   * \param isDisplay a state whether the preview should be displayed or erased
+   */
+  void visualizePreview(bool isDisplay);
 
 protected:
   virtual void startOperation();
+  virtual void stopOperation();
 };
 
 #endif
index 30949838013fffa5d394850023ac14e976158a47..becc47ee3f97d01ea89c62a6c75d3b4dd48c5280 100644 (file)
@@ -9,6 +9,7 @@ SET(PROJECT_HEADERS
        XGUI_MainMenu.h
        XGUI_MainWindow.h
        XGUI_MenuGroupPanel.h
+       XGUI_Module.h
        XGUI_Tools.h
        XGUI_Workbench.h
        XGUI_Workshop.h
@@ -22,6 +23,7 @@ SET(PROJECT_HEADERS
        XGUI_DocumentDataModel.h
        XGUI_PartDataModel.h
        XGUI_ObjectsBrowser.h
+       XGUI_OperationMgr.h
     XGUI_DataTreeModel.h
     XGUI_SelectionMgr.h
     XGUI_SwitchWidget.h
@@ -49,6 +51,7 @@ SET(PROJECT_SOURCES
        XGUI_DocumentDataModel.cpp
        XGUI_PartDataModel.cpp
        XGUI_ObjectsBrowser.cpp
+       XGUI_OperationMgr.cpp
     XGUI_SelectionMgr.cpp
     XGUI_SwitchWidget.cpp
 )
index 1df32917011497fda656630e3987b3b61bd6ef6f..79abb676fa53a737e597b59bb99447934625abfe 100644 (file)
@@ -45,3 +45,15 @@ void XGUI_Displayer::Display(std::shared_ptr<ModelAPI_Feature> theFeature,
 
   aContext->UpdateCurrentViewer();
 }
+
+/*!
+ * Erase the feature and a shape.
+ * \param theFeature a feature instance
+ * \param theFeature a shape
+ */
+void XGUI_Displayer::Erase(std::shared_ptr<ModelAPI_Feature> theFeature,
+                           const TopoDS_Shape& theShape)
+{
+  Handle(AIS_InteractiveContext) aContext = myViewer->AISContext();
+  aContext->EraseAll();
+}
index cf5dbbbd9c177150d15029a1e9f5639ddee97648..4c5333f45b6f33ad2b00a99b650b1a33a4851e35 100644 (file)
@@ -24,6 +24,8 @@ public:
 
   void Display(std::shared_ptr<ModelAPI_Feature> theFeature, const TopoDS_Shape& theShape);
 
+  void Erase(std::shared_ptr<ModelAPI_Feature> theFeature, const TopoDS_Shape& theShape);
+
 protected:
   XGUI_Viewer* myViewer; ///< the viewer
 };
index 374e057eac601e58a43c6fed73001c402d79aa68..347cc061a6c485ac53ff1117fae152679d5bbd46 100644 (file)
@@ -22,4 +22,4 @@ typedef XGUI_Module* (*CREATE_FUNC)(XGUI_Workshop*);
 \r
 #define CREATE_MODULE "createModule"\r
 \r
-#endif //XGUI_Module\r
\ No newline at end of file
+#endif //XGUI_Module\r
diff --git a/src/XGUI/XGUI_OperationMgr.cpp b/src/XGUI/XGUI_OperationMgr.cpp
new file mode 100644 (file)
index 0000000..ae5aeb0
--- /dev/null
@@ -0,0 +1,99 @@
+#include "XGUI_OperationMgr.h"
+
+#include "ModuleBase_Operation.h"
+
+#include <QMessageBox>
+
+/*!
+ \brief Constructor
+ */
+XGUI_OperationMgr::XGUI_OperationMgr(QObject* theParent)
+: QObject(theParent)
+{
+}
+
+/*!
+ \brief Destructor
+ */
+XGUI_OperationMgr::~XGUI_OperationMgr()
+{
+}
+
+/*!
+ \brief Returns the current operation or NULL
+ * \return the current operation
+ */
+ModuleBase_Operation* XGUI_OperationMgr::currentOperation() const
+{
+  return myOperations.count() > 0 ? myOperations.last() : 0;
+}
+
+/*!
+ \brief Sets the current operation or NULL
+ * \return the current operation
+ */
+bool XGUI_OperationMgr::startOperation(ModuleBase_Operation* theOperation)
+{
+  if (!canStartOperation(theOperation))
+    return false;
+
+  myOperations.append(theOperation);
+  emit beforeOperationStart();
+
+  connect(theOperation, SIGNAL(stopped()), this, SLOT(onOperationStopped()));
+  theOperation->start();
+
+  emit afterOperationStart();
+  return true;
+}
+
+bool XGUI_OperationMgr::canStartOperation(ModuleBase_Operation* theOperation)
+{
+  bool aCanStart = true;
+  ModuleBase_Operation* aCurrentOp = currentOperation();
+  if (aCurrentOp && !theOperation->isGranted())
+  {
+    int anAnswer = QMessageBox::question(0, tr("Operation launch"),
+                                tr("Previous operation is not finished and will be aborted"),
+                                QMessageBox::Ok, QMessageBox::Cancel);
+    if (anAnswer == QMessageBox::Ok)
+      aCurrentOp->abort();
+    else
+      aCanStart = false;
+  }
+  return aCanStart;
+}
+
+void XGUI_OperationMgr::commitCurrentOperation()
+{
+  ModuleBase_Operation* anOperation = currentOperation();
+  if (!anOperation)
+    return;
+
+  anOperation->commit();
+}
+
+void XGUI_OperationMgr::onOperationStopped()
+{
+  ModuleBase_Operation* aSenderOperation = dynamic_cast<ModuleBase_Operation*>(sender());
+  ModuleBase_Operation* anOperation = currentOperation();
+  if (!aSenderOperation || !anOperation || aSenderOperation != anOperation )
+    return;
+
+  myOperations.removeAll(anOperation);
+
+  // get last operation which can be resumed
+  ModuleBase_Operation* aResultOp = 0;
+  QListIterator<ModuleBase_Operation*> anIt(myOperations);
+  anIt.toBack();
+  while(anIt.hasPrevious())
+  {
+    ModuleBase_Operation* anOp = anIt.previous();
+    if (anOp) {
+      aResultOp = anOp;
+      break;
+    }
+  }
+  if (aResultOp)
+    startOperation(aResultOp);
+}
diff --git a/src/XGUI/XGUI_OperationMgr.h b/src/XGUI/XGUI_OperationMgr.h
new file mode 100644 (file)
index 0000000..4fabac8
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef XGUI_OperationMgr_H
+#define XGUI_OperationMgr_H
+
+#include "XGUI.h"
+
+#include <ModuleBase_Operation.h>
+
+#include <QList>
+#include <QObject>
+
+/**\class XGUI_OperationMgr
+ * \ingroup GUI
+ * \brief Operation manager. Servers to manupulate to the workshop operations. Contains a stack
+ *   of started operations and uses the upper one as a current.
+ */
+class XGUI_EXPORT XGUI_OperationMgr : public QObject
+{
+  Q_OBJECT
+public:
+  XGUI_OperationMgr(QObject* theParent);
+  virtual ~XGUI_OperationMgr();
+
+  ModuleBase_Operation* currentOperation() const;
+  bool startOperation(ModuleBase_Operation* theOperation);
+
+  void commitCurrentOperation();
+
+signals:
+  void beforeOperationStart();
+  void afterOperationStart();
+
+protected:
+  bool canStartOperation(ModuleBase_Operation* theOperation);
+
+protected slots:
+  void onOperationStopped();
+
+private:
+  typedef QList<ModuleBase_Operation*> Operations;
+  Operations myOperations;
+};
+
+#endif
index 8911720284c17af1ebf0042e9dfaff2c9616d893..f639e1adca48b2e3694c888dae616b3004a6cafc 100644 (file)
@@ -12,6 +12,7 @@
 #include "XGUI_SelectionMgr.h"
 #include "XGUI_ObjectsBrowser.h"
 #include "XGUI_Displayer.h"
+#include "XGUI_OperationMgr.h"
 
 #include <ModelAPI_PluginManager.h>
 #include <ModelAPI_Feature.h>
 
 XGUI_Workshop::XGUI_Workshop()
   : QObject(), 
-  myCurrentOperation(NULL),
   myPartSetModule(NULL)
 {
   myMainWindow = new XGUI_MainWindow();
   mySelector = new XGUI_SelectionMgr(this);
   myDisplayer = new XGUI_Displayer(myMainWindow->viewer());
+  myOperationMgr = new XGUI_OperationMgr(this);
+  connect(myOperationMgr, SIGNAL(beforeOperationStart()), this, SLOT(onBeforeOperationStart()));
+  connect(myOperationMgr, SIGNAL(afterOperationStart()),  this, SLOT(onAfterOperationStart()));
 }
 
 //******************************************************
@@ -150,15 +153,36 @@ void XGUI_Workshop::processEvent(const Event_Message* theMessage)
   const Config_PointerMessage* aPartSetMsg =
       dynamic_cast<const Config_PointerMessage*>(theMessage);
   if (aPartSetMsg) {
-    ModuleBase_PropPanelOperation* aOperation =
+    ModuleBase_PropPanelOperation* anOperation =
         (ModuleBase_PropPanelOperation*)(aPartSetMsg->pointer());
-    setCurrentOperation(aOperation);
-    if(aOperation->xmlRepresentation().isEmpty()) { //!< No need for property panel
-      myCurrentOperation->start();
-      myCurrentOperation->commit();
-      updateCommandStatus();
-    } else {
-      fillPropertyPanel(aOperation);
+
+    if (myOperationMgr->startOperation(anOperation))
+    {
+      if (anOperation->isPerformedImmediately())
+      {
+        myOperationMgr->commitCurrentOperation();
+        updateCommandStatus();
+      }
+      /*if(anOperation->xmlRepresentation().isEmpty()) { //!< No need for property panel
+        //connectToPropertyPanel(anOperation);
+
+        anOperation->start();
+
+        if (anOperation->isPerformedImmediately()) {
+          anOperation->commit();
+          updateCommandStatus();
+        }
+      } else {
+        connectToPropertyPanel(anOperation);
+        QWidget* aPropWidget = myMainWindow->findChild<QWidget*>(XGUI::PROP_PANEL_WDG);
+        qDeleteAll(aPropWidget->children());
+
+        anOperation->start();
+        
+        XGUI_WidgetFactory aFactory = XGUI_WidgetFactory(anOperation);
+        aFactory.createWidget(aPropWidget);
+        myMainWindow->setPropertyPannelTitle(anOperation->description());
+      }*/
     }
     return;
   }
@@ -170,6 +194,34 @@ void XGUI_Workshop::processEvent(const Event_Message* theMessage)
 
 }
 
+void XGUI_Workshop::onBeforeOperationStart()
+{
+  ModuleBase_PropPanelOperation* aOperation =
+        (ModuleBase_PropPanelOperation*)(myOperationMgr->currentOperation());
+
+  if(aOperation->xmlRepresentation().isEmpty()) { //!< No need for property panel
+    //myPartSetModule->connectToPropertyPanel(aOperation);
+  } else {
+    connectToPropertyPanel(aOperation);
+    QWidget* aPropWidget = myMainWindow->findChild<QWidget*>(XGUI::PROP_PANEL_WDG);
+    qDeleteAll(aPropWidget->children());
+  }
+}
+
+void XGUI_Workshop::onAfterOperationStart()
+{
+  ModuleBase_PropPanelOperation* aOperation =
+        (ModuleBase_PropPanelOperation*)(myOperationMgr->currentOperation());
+
+  if(aOperation->xmlRepresentation().isEmpty()) { //!< No need for property panel
+  } else {
+    XGUI_WidgetFactory aFactory = XGUI_WidgetFactory(aOperation);
+    QWidget* aPropWidget = myMainWindow->findChild<QWidget*>(XGUI::PROP_PANEL_WDG);
+    aFactory.createWidget(aPropWidget);
+    myMainWindow->setPropertyPannelTitle(aOperation->description());
+  }
+}
+
 /*
  *
  */
@@ -208,7 +260,7 @@ void XGUI_Workshop::addFeature(const Config_FeatureMessage* theMessage)
 /*
  *
  */
-void XGUI_Workshop::fillPropertyPanel(ModuleBase_PropPanelOperation* theOperation)
+/*void XGUI_Workshop::fillPropertyPanel(ModuleBase_PropPanelOperation* theOperation)
 {
   connectToPropertyPanel(theOperation);
   QWidget* aPropWidget = myMainWindow->findChild<QWidget*>(XGUI::PROP_PANEL_WDG);
@@ -217,20 +269,7 @@ void XGUI_Workshop::fillPropertyPanel(ModuleBase_PropPanelOperation* theOperatio
   XGUI_WidgetFactory aFactory = XGUI_WidgetFactory(theOperation);
   aFactory.createWidget(aPropWidget);
   myMainWindow->setPropertyPannelTitle(theOperation->description());
-}
-
-void XGUI_Workshop::setCurrentOperation(ModuleBase_Operation* theOperation)
-{
-  //FIXME: Ask user about aborting of current operation?
-  if (myCurrentOperation) {
-    //TODO get isOperation from document
-    if (myCurrentOperation->isRunning())
-      myCurrentOperation->abort();
-
-    myCurrentOperation->deleteLater();
-  }
-  myCurrentOperation = theOperation;
-}
+}*/
 
 /*
  * Makes a signal/slot connections between Property Panel
index 50e0a44cc0759dc0702f330cc29d552712a5c36c..4f62bf452de7a11e254f8ccd3b6ac41c880b9783 100644 (file)
@@ -15,6 +15,7 @@ class XGUI_Module;
 class XGUI_Workbench;
 class XGUI_SelectionMgr;
 class XGUI_Displayer;
+class XGUI_OperationMgr;
 class ModuleBase_Operation;
 class ModuleBase_PropPanelOperation;
 
@@ -48,12 +49,12 @@ public:
   //! Returns displayer
   XGUI_Displayer* displayer() const { return myDisplayer; }
 
+  //! ! Returns operation manager.
+  XGUI_OperationMgr* operationMgr() const { return myOperationMgr; }
+
   //! Creates and adds a new workbench (menu group) with the given name and returns it
   XGUI_Workbench* addWorkbench(const QString& theName);
 
-  //! Returns the current operation or NULL
-  ModuleBase_Operation* currentOperation() { return myCurrentOperation; }
-
   //! Redefinition of Event_Listener method
   virtual void processEvent(const Event_Message* theMessage);
 
@@ -71,9 +72,11 @@ public slots:
 protected:
   //Event-loop processing methods:
   void addFeature(const Config_FeatureMessage*);
-  void fillPropertyPanel(ModuleBase_PropPanelOperation* theOperation);
   void connectToPropertyPanel(ModuleBase_Operation* theOperation);
-  void setCurrentOperation(ModuleBase_Operation* theOperation);
+
+protected slots:
+  void onBeforeOperationStart();
+  void onAfterOperationStart();
 
 private:
   void initMenu();
@@ -87,7 +90,7 @@ private:
   XGUI_SelectionMgr* mySelector;
   XGUI_Displayer* myDisplayer;
 
-  ModuleBase_Operation* myCurrentOperation;
+  XGUI_OperationMgr* myOperationMgr;
 };
 
 #endif