X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_Operation.h;h=46839253cc26e24efaaedb9df0632991831c2f33;hb=06e7f5859095193fc7f498bd89a7d28009794f53;hp=9d1a1c04ad2e3310c2040d0ac03ccbedddc93b0d;hpb=9854dbe3ec458621458f78823cf31d0fc3e9de85;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_Operation.h b/src/ModuleBase/ModuleBase_Operation.h index 9d1a1c04a..46839253c 100644 --- a/src/ModuleBase/ModuleBase_Operation.h +++ b/src/ModuleBase/ModuleBase_Operation.h @@ -1,18 +1,26 @@ -/* - * ModuleBase_Operation.h - * - * Created on: Apr 2, 2014 - * Author: sbh - */ +// 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 +// 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 #include @@ -21,12 +29,12 @@ class ModuleBase_ModelWidget; class ModuleBase_OperationDescription; class ModuleBase_IPropertyPanel; -class ModuleBase_ISelection; 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 @@ -50,6 +58,7 @@ Q_OBJECT /// \param theId the operation identifier /// \param theParent the QObject parent ModuleBase_Operation(const QString& theId = "", QObject* theParent = 0); + /// Destructor virtual ~ModuleBase_Operation(); @@ -57,81 +66,70 @@ Q_OBJECT /// /returns the instance of the description class ModuleBase_OperationDescription* getDescription() const { return myDescription; } - /** - * 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(ModuleBase_Operation* theOperation) const { return false; } + /// Returns list of granted operation indices + const QStringList& grantedOperationIds() const; - /// Sets a list of model widgets, according to the operation feature xml definition - /// \param theXmlRepresentation an xml feature definition - /// \param theWidgets a list of widgets - //void setModelWidgets(const std::string& theXmlRepresentation, - // QList theWidgets); + /// Sets list of operation indices, which can be started without the current operation stop + /// \param theList an ids + void setGrantedOperationIds(const QStringList& theList); - /// Returns True if data of its feature was modified during operation - virtual bool isModified() const { return myIsModified; } - - /// Returns True id the current operation is launched in editing mode - bool isEditOperation() const { return myIsEditing; } - - /// Returns list of nested features - QStringList nestedFeatures() const { return myNestedFeatures; } - - /// Sets list of nested features - void setNestedFeatures(const QStringList& theList) { myNestedFeatures = theList; } + /// 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; + /// Returns True if data of its feature was modified during operation + virtual bool isModified() const; - // Returns operations Id from it's description + /// Returns operations Id from it's description QString id() const; - /// Returns the operation feature - /// \return the feature - FeaturePtr feature() const; - - /** - * Must return True if the operation's feature is valid. - * Since IOperation does not have any feature returns false. - */ + /// Must return True if the operation's feature is valid. + /// Since IOperation does not have any feature returns false. virtual bool isValid() const; - /// Returns whether the nested operations are enabled. - /// The state can depend on the operation current state. - /// \return enabled state - virtual bool isNestedOperationsEnabled() const; + /// \brief Set property pane to the operation + /// \param theProp a property panel instance + virtual void setPropertyPanel(ModuleBase_IPropertyPanel* theProp); - /// Sets the operation feature - void setFeature(FeaturePtr theFeature); + /// \return Currently installed property panel + ModuleBase_IPropertyPanel* propertyPanel() const { return myPropertyPanel; } - /// Returns True if the current operation works with the given object (feature or result) - virtual bool hasObject(ObjectPtr theObj) const; + QString helpFileName() const { return myHelpFileName; } - virtual void keyReleased(const int theKey) {}; + void setHelpFileName(QString theName) { + myHelpFileName = theName; + } - /// If operation needs to redisplay its result during operation - /// then this method has to return True - virtual bool hasPreview() const { return false; } + void setHideFacesVisible(bool isVisible) { myHideFacesVisibilityState = isVisible; } - /// Initialisation of operation with preliminary selection - /// \param theSelected the list of selected presentations - /// \param theHighlighted the list of highlighted presentations - virtual void initSelection(ModuleBase_ISelection* theSelection); + bool isHideFacesVisible() const { return myHideFacesVisibilityState; } - virtual void setPropertyPanel(ModuleBase_IPropertyPanel* theProp); +signals: + /// The operation is started + void beforeStarted(); + /// The operation is started + void started(); - ModuleBase_IPropertyPanel* propertyPanel() const { return myPropertyPanel; } + /// The operation is aborted + void beforeAborted(); + /// The operation is aborted + void aborted(); - /// Activates widgets by preselection if it is accepted - virtual bool activateByPreselection(); + /// The operation is committed + void beforeCommitted(); + /// The operation is committed + void committed(); -signals: - void started(); /// the operation is started - void aborted(); /// the operation is aborted - void committed(); /// the operation is committed - void stopped(); /// the operation is aborted or committed - void resumed(); /// the operation is resumed + /// The operation is aborted or committed + void stopped(); + + /// The operation is resumed + void resumed(); + + /// The operation is postponed + void postponed(); public slots: /// Starts operation @@ -140,100 +138,81 @@ signals: /// 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. - void start(); + /// \return true if the start is successful + virtual bool start(); + + /// Deactivates current operation which can be resumed later. + virtual void postpone(); + /// 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. - void resume(); + virtual void resume(); + /// Aborts operation /// Public slot. Aborts operation. This slot is not virtual and cannot be redefined. /// Redefine abortOperation method to change behavior of operation instead - void abort(); + virtual void abort(); + /// Commits operation /// Public slot. Commits operation. This slot is not virtual and cannot be redefined. /// Redefine commitOperation method to change behavior of operation instead - bool commit(); - - /// Alias for start/abort slots - /// Public slot. Aborts operation if false, else does nothing. - /// Provided for S/S compatibility with QAction's toggle(bool) - /// \param theState th flag to abort, if it is true, do nothing, overwise abort - void setRunning(bool theState); + virtual bool commit(); - // Data model methods. - /// Stores a custom value in model. - virtual void storeCustomValue(); + /// Changes the modified flag of the operation + void onValuesChanged(); - /// Slots which listen the mode widget activation - /// \param theWidget the model widget - virtual void onWidgetActivated(ModuleBase_ModelWidget* theWidget); + /// 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(); + 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 void stopOperation() {} /// Virtual method called when operation aborted (see abort() method for more description) - virtual void abortOperation(); + virtual void abortOperation() {} /// Virtual method called when operation committed (see commit() method for more description) - virtual void commitOperation(); + virtual void commitOperation() {}; /// Virtual method called after operation committed (see commit() method for more description) - virtual void afterCommitOperation(); - - /// Send update message by loop - void flushUpdated(); - /// Send created message by loop - void flushCreated(); + virtual void afterCommitOperation() {} - /// Creates an operation new feature - /// \param theFlushMessage the flag whether the create message should be flushed - /// \param theCompositeFeature the feature that must be used for adding the created object or null - /// \returns the created - virtual FeaturePtr createFeature(const bool theFlushMessage = true, - CompositeFeaturePtr theCompositeFeature = CompositeFeaturePtr()); + /// 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; - /// Returns pointer to the root document. - boost::shared_ptr document() const; - - /// Set value to the active widget - /// \param theFeature the feature - /// \param theX the horizontal coordinate - /// \param theY the vertical coordinate - /// \return true if the point is set - virtual bool setWidgetValue(ObjectPtr theFeature, double theX, double theY); - - protected: - FeaturePtr myFeature; /// the operation feature to be handled - +private: /// the container to have the operation description - ModuleBase_OperationDescription* myDescription; - - /// Editing feature flag - bool myIsEditing; + ModuleBase_OperationDescription* myDescription; /// Modified feature flag bool myIsModified; - /// List of nested operations IDs - QStringList myNestedFeatures; - - /// List of pre-selected object - QList myPreSelection; + /// List of operations IDs which are granted of the current operation + QStringList myGrantedIds; /// Access to property panel ModuleBase_IPropertyPanel* myPropertyPanel; + + QString myHelpFileName; + + /// Visibility state of HideFaces panel before the operation launch + bool myHideFacesVisibilityState; }; #endif