X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Operation.h;h=5f8b722ac87998251470da26686cb3ee685626fd;hb=59610176acaef6df307f9a2ec24fe3a14bfaef0b;hp=75724ea34e6e418524ebf2230986c3594fee9ac2;hpb=c80e8ac643930b858f4f653e2659896ba587b165;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.h b/src/ModuleBase/ModuleBase_Operation.h index 75724ea34..5f8b722ac 100644 --- a/src/ModuleBase/ModuleBase_Operation.h +++ b/src/ModuleBase/ModuleBase_Operation.h @@ -1,28 +1,40 @@ -/* - * ModuleBase_Operation.h - * - * Created on: Apr 2, 2014 - * Author: sbh - */ - - -#ifndef MODULEBASE_OPERATION_H -#define MODULEBASE_OPERATION_H +// Copyright (C) 2014-2021 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// 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 +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef ModuleBase_Operation_H +#define ModuleBase_Operation_H #include #include #include +#include -#include +class ModuleBase_ModelWidget; +class ModuleBase_OperationDescription; +class ModuleBase_IPropertyPanel; -class SUIT_Study; -class XGUI_Workshop; -class ModelAPI_Feature; -class ModelAPI_Document; +class QKeyEvent; /*! - \class ModuleBase_Operation + * \class ModuleBase_Operation + * \ingroup GUI * \brief Base class for all operations * * Base class for all operations. If you perform an action it is reasonable to create @@ -37,101 +49,170 @@ class ModelAPI_Document; * - virtual void commitOperation(); */ -class MODULEBASE_EXPORT ModuleBase_Operation: public QObject +class MODULEBASE_EXPORT ModuleBase_Operation : public QObject { Q_OBJECT -public: - /*! Enum describes state of operation */ - enum OperationState - { - Waiting, //!< Operation is not used (it is not run or suspended) - Running //!< Operation is started - }; - - /*! - * Enum describes execution status of operation. Execution status often used after - * ending work of operation which was started from this one. In this case this - * operation can ask previously started operation whether it finished successfully. - */ - enum ExecStatus - { - Rejected, //!< Operation has not performed any action (modification of data model for example) - Accepted //!< Operation has performed an actions and must be stopped - }; - - /*! - * Enum describes setting of the operation. - */ - enum Flags - { - None = 0x00, //!< None options - Transaction = 0x01 //!< Automatically open (commit/abort) transaction during start (commit/abort). - }; - -public: - ModuleBase_Operation(const QString& theId = "", QObject* parent = 0); + public: + /// Constructor + /// \param theId the operation identifier + /// \param theParent the QObject parent + ModuleBase_Operation(const QString& theId = "", QObject* theParent = 0); + + /// Destructor virtual ~ModuleBase_Operation(); - // Operation processing. - virtual QString operationId() const; + /// Returns the operation description + /// /returns the instance of the description class + ModuleBase_OperationDescription* getDescription() const { return myDescription; } + + /// Returns list of granted operation indices + const QStringList& grantedOperationIds() const; + + /// Sets list of operation indices, which can be started without the current operation stop + /// \param theList an ids + void setGrantedOperationIds(const QStringList& theList); - boost::shared_ptr feature() const; + /// Must return true if this operation can be launched as nested for any current operation + /// and it is not necessary to check this operation on validity. By default + /// the operation is not granted. + /// The method has to be redefined for granted operations. + virtual bool isGranted(QString theId) const; - OperationState state() const; - bool isRunning() const; - virtual bool isValid(ModuleBase_Operation* theOtherOp) const; - virtual bool isGranted() const; + /// Returns True if data of its feature was modified during operation + virtual bool isModified() const; - bool setSlot(const QObject* theReceiver, const char* theSlot); + /// Returns operations Id from it's description + QString id() const; - void setFlags(const int); - void clearFlags(const int); - bool testFlags(const int) const; + /// Must return True if the operation's feature is valid. + /// Since IOperation does not have any feature returns false. + virtual bool isValid() const; - int execStatus() const; + /// \brief Set property pane to the operation + /// \param theProp a property panel instance + virtual void setPropertyPanel(ModuleBase_IPropertyPanel* theProp); + + /// \return Currently installed property panel + ModuleBase_IPropertyPanel* propertyPanel() const { return myPropertyPanel; } + + QString helpFileName() const { return myHelpFileName; } + + void setHelpFileName(QString theName) { + myHelpFileName = theName; + } + + void setHideFacesVisible(bool isVisible) { myHideFacesVisibilityState = isVisible; } + + bool isHideFacesVisible() const { return myHideFacesVisibilityState; } signals: + /// The operation is started + void beforeStarted(); + /// The operation is started void started(); + + /// The operation is aborted + void beforeAborted(); + /// The operation is aborted void aborted(); + + /// The operation is committed + void beforeCommitted(); + /// The operation is committed void committed(); - void stopped(); //!< operation aborted or committed - void callSlot(); + /// The operation is aborted or committed + void stopped(); -public slots: - void start(); - void abort(); - void commit(); + /// The operation is resumed + void resumed(); - //true = do nothing, false = abort() - //Provided for S/S compatibility with QAction's toggle(bool) - void setRunning(bool); + /// The operation is postponed + void postponed(); - // Data model operations. - void storeReal(double); + public slots: + /// Starts operation + /// Public slot. Verifies whether operation can be started and starts operation. + /// This slot is not virtual and cannot be redefined. Redefine startOperation method + /// to change behavior of operation. There is no point in using this method. It would + /// be better to inherit own operator from base one and redefine startOperation method + /// instead. + /// \return true if the start is successful + virtual bool start(); -protected: - virtual bool isReadyToStart() const; + /// Deactivates current operation which can be resumed later. + virtual void postpone(); - virtual void startOperation(); - virtual void stopOperation(); - virtual void abortOperation(); - virtual void commitOperation(); + /// Resumes operation + /// Public slot. Verifies whether operation can be started and starts operation. + /// This slot is not virtual and cannot be redefined. Redefine startOperation method + /// to change behavior of operation. There is no point in using this method. It would + /// be better to inherit own operator from base one and redefine startOperation method + /// instead. + virtual void resume(); - void setExecStatus(const int); - void setState(const OperationState); + /// Aborts operation + /// Public slot. Aborts operation. This slot is not virtual and cannot be redefined. + /// Redefine abortOperation method to change behavior of operation instead + virtual void abort(); - boost::shared_ptr document() const; + /// Commits operation + /// Public slot. Commits operation. This slot is not virtual and cannot be redefined. + /// Redefine commitOperation method to change behavior of operation instead + virtual bool commit(); + + /// Changes the modified flag of the operation + void onValuesChanged(); + + /// Changes the modified flag of the operation if the current state of the widget is modified + /// \param thePreviousState the previous vlaue state of the widget + void onValueStateChanged(int thePreviousState); + + protected: + /// Virtual method called when operation started (see start() method for more description) + /// Default impl calls corresponding slot and commits immediately. + virtual void startOperation() {} + + /// Implementation of specific steps on postpone operation + virtual void postponeOperation() {} + + /// Virtual method called when operation stopped - committed or aborted. + virtual void stopOperation() {} + + /// Virtual method called when operation aborted (see abort() method for more description) + virtual void abortOperation() {} + + /// Virtual method called when operation committed (see commit() method for more description) + virtual void commitOperation() {}; + + /// Virtual method called after operation committed (see commit() method for more description) + virtual void afterCommitOperation() {} + + /// Virtual method called after operation resume (see resume() method for more description) + virtual void resumeOperation() {} + + /// Verifies whether this operator can be commited. + /// \return Returns TRUE if current operation can be committed, e.g. all parameters are filled + virtual bool canBeCommitted() const; private: - int myFlags; //!< Operation flags - OperationState myState; //!< Operation state - ExecStatus myExecStatus; //!< Execution status + /// the container to have the operation description + ModuleBase_OperationDescription* myDescription; + + /// Modified feature flag + bool myIsModified; + + /// List of operations IDs which are granted of the current operation + QStringList myGrantedIds; + + /// Access to property panel + ModuleBase_IPropertyPanel* myPropertyPanel; + + QString myHelpFileName; - //!< Next fields could be extracted into a subclass; - QString myOperationId; - boost::shared_ptr myFeature; + /// Visibility state of HideFaces panel before the operation launch + bool myHideFacesVisibilityState; }; #endif