]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #1055: Close of property panel is abort of current operation
authorvsv <vitaly.smetannikov@opencascade.com>
Mon, 12 Oct 2015 16:54:24 +0000 (19:54 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Mon, 12 Oct 2015 16:54:24 +0000 (19:54 +0300)
src/XGUI/XGUI_PropertyPanel.cpp
src/XGUI/XGUI_PropertyPanel.h
src/XGUI/XGUI_Workshop.cpp

index ab7695723b537203d7a3f62b8c002fdf9398c5bd..fdabd150cf9fa278078e2295c8e3bad42f7a97da 100644 (file)
@@ -9,6 +9,7 @@
 
 #include <XGUI_PropertyPanel.h>
 #include <XGUI_ActionsMgr.h>
+#include <XGUI_OperationMgr.h>
 //#include <AppElements_Constants.h>
 #include <ModuleBase_WidgetMultiSelector.h>
 #include <ModuleBase_Tools.h>
 #include <iostream>
 #endif
 
-XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent)
+XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent, XGUI_OperationMgr* theMgr)
     : ModuleBase_IPropertyPanel(theParent), 
     myActiveWidget(NULL),
     myPreselectionWidget(NULL),
-    myPanelPage(NULL)
+    myPanelPage(NULL),
+    myOperationMgr(theMgr)
 {
   this->setWindowTitle(tr("Property Panel"));
   QAction* aViewAct = this->toggleViewAction();
@@ -256,3 +258,17 @@ void XGUI_PropertyPanel::setPreselectionWidget(ModuleBase_ModelWidget* theWidget
 {
   myPreselectionWidget = theWidget;
 }
+
+
+void XGUI_PropertyPanel::closeEvent(QCloseEvent* theEvent)
+{
+  ModuleBase_Operation* aOp = myOperationMgr->currentOperation();
+  if (aOp) {
+    if (myOperationMgr->canStopOperation(aOp)) {
+      myOperationMgr->abortOperation(aOp);
+      theEvent->accept();
+    } else 
+      theEvent->ignore();
+  } else
+    ModuleBase_IPropertyPanel::closeEvent(theEvent);
+}
\ No newline at end of file
index 083242fd16c18b7acca6ea240bf13dadcb25f148..0b158921ef92d6a3f1c965a9c00c1e443716d37a 100644 (file)
@@ -22,6 +22,7 @@ class QKeyEvent;
 class QGridLayout;
 class ModuleBase_PageBase;
 class ModuleBase_PageWidget;
+class XGUI_OperationMgr;
 
 /// Internal name of property panel widget
 const static char* PROP_PANEL = "property_panel_dock";
@@ -46,7 +47,7 @@ Q_OBJECT
 
   /// Constructor
   /// \param theParent is a parent of the property panel
-  XGUI_PropertyPanel(QWidget* theParent);
+  XGUI_PropertyPanel(QWidget* theParent, XGUI_OperationMgr* theMgr);
 
   virtual ~XGUI_PropertyPanel();
 
@@ -100,7 +101,10 @@ Q_OBJECT
   /// Sets widget processed by preselection
   virtual void setPreselectionWidget(ModuleBase_ModelWidget* theWidget);
 
- public slots:
+  /// Returns operation manager
+  XGUI_OperationMgr* operationMgr() const { return myOperationMgr; }
+
+public slots:
 
    /// \brief Update all widgets in property panel with values from the given feature
    /// \param theFeature a Feature to update values in widgets
@@ -115,6 +119,10 @@ Q_OBJECT
   virtual void activateWidget(ModuleBase_ModelWidget* theWidget);
 
  protected:
+   /// A method called on the property panel closed
+   /// \param theEvent a close event
+   void closeEvent(QCloseEvent* theEvent);
+
   /// A header widget
   QWidget* myHeaderWidget;
 
@@ -126,6 +134,8 @@ Q_OBJECT
   ModuleBase_ModelWidget* myActiveWidget;
   /// Currently widget processed by preselection
   ModuleBase_ModelWidget* myPreselectionWidget;
+
+  XGUI_OperationMgr* myOperationMgr;
 };
 
 #endif /* XGUI_PROPERTYPANEL_H_ */
index 70257c785a89a3b4007b7a5cbae50d3f7baf5058..912a0ef4b455fdb297cce39ef099f40b0183cb9d 100644 (file)
@@ -994,7 +994,7 @@ void XGUI_Workshop::createDockWidgets()
   QMainWindow* aDesktop = isSalomeMode() ? salomeConnector()->desktop() : myMainWindow;
   QDockWidget* aObjDock = createObjectBrowser(aDesktop);
   aDesktop->addDockWidget(Qt::LeftDockWidgetArea, aObjDock);
-  myPropertyPanel = new XGUI_PropertyPanel(aDesktop);
+  myPropertyPanel = new XGUI_PropertyPanel(aDesktop, myOperationMgr);
   myPropertyPanel->setupActions(myActionsMgr);
   myPropertyPanel->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea);
   aDesktop->addDockWidget(Qt::LeftDockWidgetArea, myPropertyPanel);