Salome HOME
updated copyright message
[modules/shaper.git] / src / XGUI / XGUI_OperationMgr.h
old mode 100755 (executable)
new mode 100644 (file)
index 56286cc..a478c3c
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2017  CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 //
 // You should have received a copy of the GNU Lesser General Public
 // License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #ifndef XGUI_OperationMgr_H
@@ -31,6 +30,7 @@
 #include <QStringList>
 
 class QKeyEvent;
+class QMessageBox;
 
 class ModuleBase_IWorkshop;
 class XGUI_Workshop;
@@ -48,7 +48,15 @@ class XGUI_ShortCutListener;
 class XGUI_EXPORT XGUI_OperationMgr : public QObject
 {
 Q_OBJECT
- public:
+public:
+  /// Enumeration of kind of message that is used when trying to stop the active operation
+  enum XGUI_MessageKind
+  {
+    XGUI_AbortOperationMessage, ///< warns and give possibility to abort current operation
+    XGUI_InformationMessage ///< ask to apply the current operation before performing something
+  };
+
+public:
   /// Constructor
   /// \param theParent the parent
   /// \param theWorkshop a reference to workshop
@@ -70,6 +78,9 @@ Q_OBJECT
   /// Current workshop
   ModuleBase_IWorkshop* workshop() const { return myWorkshop; }
 
+  /// Current workshop
+  XGUI_Workshop* xworkshop() const;
+
   /// Returns the current operation or NULL
   /// \return the current operation
   ModuleBase_Operation* currentOperation() const;
@@ -87,7 +98,9 @@ Q_OBJECT
   /// Returns true if the operation can be aborted. If the operation is modified,
   /// the warning message box is shown.
   /// \param theOperation an operation which is checked on stop
-  bool canStopOperation(ModuleBase_Operation* theOperation);
+  /// \param theMessageKind a kind of message in warning message box
+  bool canStopOperation(ModuleBase_Operation* theOperation,
+                        const XGUI_MessageKind& theMessageKind = XGUI_AbortOperationMessage);
 
   /// Find and return operation by its Id.
   ModuleBase_Operation* findOperation(const QString& theId) const;
@@ -102,6 +115,10 @@ Q_OBJECT
   /// else, or if there is no parent - returns NULL
   ModuleBase_Operation* previousOperation(ModuleBase_Operation* theOperation) const;
 
+  /// Returns an active widget of the current operation.
+  /// \return widget or NULL
+  ModuleBase_ModelWidget* activeWidget() const;
+
   /// Start the operation and append it to the stack of operations
   /// \param theOperation the started operation
   /// \return the state whether the current operation is started
@@ -124,18 +141,30 @@ Q_OBJECT
   /// \param theOperation an aborted operation
   void abortOperation(ModuleBase_Operation* theOperation);
 
-  /// Slot that commits the current operation.
-  bool onCommitOperation();
+  /// Abort all operations
+  /// \param theMessageKind kind of shown warning message
+  bool abortAllOperations(const XGUI_MessageKind& theMessageKind = XGUI_AbortOperationMessage);
+
+  /// Commits the current operation.
+  bool commitOperation();
+
+  /// Returns true if SHIFT is pressed
+  /// \param thePressed new boolean state
+  void setSHIFTPressed(const bool thePressed) { mySHIFTPressed = thePressed; }
+
+  /// Returns true if SHIFT is pressed
+  /// \return boolean value
+  bool hasSHIFTPressed() const { return mySHIFTPressed; }
 
 public slots:
   /// Slot that aborts the current operation.
   void onAbortOperation();
+  /// Slot that aborts all operations. It shows aborting message
+  void onAbortAllOperation();
   /// Slot that validates the current operation using the validateOperation method.
   void onValidateOperation();
   /// Commit all operations
   bool commitAllOperations();
-  /// Abort all operations
-  bool abortAllOperations();
 
 signals:
   /// Signal about an operation is stopped. It is emitted after the stop() of operation is done.
@@ -159,9 +188,6 @@ public: // TEMPORARY, it should be protected and be performed automatically
   /// \param theOperation the sent operation. If it is NULL, all operations in the stack are sent.
   void updateApplyOfOperations(ModuleBase_Operation* theOperation = 0);
 
-  /// Commits the current operatin if it is valid
-  bool commitOperation();
-
 protected: // TEMPORARY
   /// Sets the current operation or NULL
   /// \param theOperation the started operation
@@ -184,6 +210,11 @@ protected: // TEMPORARY
   /// \param theEvent the mouse event
   bool onKeyReleased(QObject *theObject, QKeyEvent* theEvent);
 
+  /// SLOT, that is called by the key in the property panel is clicked.
+  /// \param theObject a sender of the event
+  /// \param theEvent the mouse event
+  bool onKeyPressed(QObject *theObject, QKeyEvent* theEvent);
+
   /// The functionaly, that should be done by delete click
   /// Fistly the active widget processes it, then workshop. If no one does not
   /// process it, do nothing
@@ -230,6 +261,18 @@ private:
   /// \param theParent a candidate to be a parent
   static bool isChildObject(const QObject* theObject, const QObject* theParent);
 
+  /// Creates question message box with OK/Cancel buttons, where Cancel is default button,
+  /// Escape is Null button
+  /// \param theMessage text of the message
+  /// \return message box
+  static QMessageBox* createMessageBox(const QString& theMessage);
+
+  /// Creates information message box with OK button,
+  /// Escape is Null button
+  /// \param theMessage text of the message
+  /// \return message box
+  static QMessageBox* createInformationBox(const QString& theMessage);
+
  private:
   typedef QList<ModuleBase_Operation*> Operations;  ///< definition for a list of operations
   Operations myOperations;  ///< a stack of started operations. The active operation is on top,
@@ -237,8 +280,9 @@ private:
 
   /// Current workshop
   ModuleBase_IWorkshop* myWorkshop;
-
+  QMessageBox* myActiveMessageBox;
   XGUI_ShortCutListener* myShortCutListener;
+  bool mySHIFTPressed;
 };
 
 #endif