2 * ModuleBase_IOperation.h
4 * Created on: May 5, 2014
9 #ifndef ModuleBase_IOperation_H
10 #define ModuleBase_IOperation_H
12 #include <ModuleBase.h>
17 #include <boost/shared_ptr.hpp>
19 class ModelAPI_Document;
20 class ModuleBase_OperationDescription;
23 \class ModuleBase_IOperation
24 * \brief Base class for all operations
26 * Base class for all operations. If you perform an action it is reasonable to create
27 * operation intended for this. This is a base class for all operations which provides
28 * mechanism for correct starting operations, starting operations above already started
29 * ones, committing operations and so on. To create own operation it is reasonable to
30 * inherit it from this class and redefines virtual methods to provide own behavior
31 * Main virtual methods are
32 * - virtual bool isReadyToStart();
33 * - virtual void startOperation();
34 * - virtual void abortOperation();
35 * - virtual void commitOperation();
38 class MODULEBASE_EXPORT ModuleBase_IOperation: public QObject
44 /// Constructs an empty operation. Constructor should work very fast because many
45 /// operators may be created after starting workshop but only several from them
46 /// may be used. As result this constructor stores given workshop in myApp field
47 /// and set Waiting status.
48 /// \param theId the operation identifier
49 /// \param theParent the QObject parent
50 ModuleBase_IOperation(const QString& theId = "", QObject* theParent = 0);
52 virtual ~ModuleBase_IOperation();
54 /// Returns the operation description
55 /// /returns the instance of the description class
56 ModuleBase_OperationDescription* getDescription() const;
58 /// Verifies whether this operator can be always started above any already running one
59 /// \return Returns TRUE if current operation must not be checked for ActiveOperation->IsValid( this )
60 /// This method must be redefined in derived operation if operation of derived class
61 /// must be always can start above any launched one. Default impl returns FALSE,
62 /// so it is being checked for IsValid, but some operations may overload IsGranted()
63 /// In this case they will always start, no matter what operation is running.
64 /// \param theOperation the previous running operation
65 virtual bool isGranted(ModuleBase_IOperation* theOperation) const;
68 void started(); /// the operation is started
69 void aborted(); /// the operation is aborted
70 void committed(); /// the operation is committed
71 void stopped(); /// the operation is aborted or committed
72 void resumed(); /// the operation is resumed
76 /// Public slot. Verifies whether operation can be started and starts operation.
77 /// This slot is not virtual and cannot be redefined. Redefine startOperation method
78 /// to change behavior of operation. There is no point in using this method. It would
79 /// be better to inherit own operator from base one and redefine startOperation method
83 /// Public slot. Verifies whether operation can be started and starts operation.
84 /// This slot is not virtual and cannot be redefined. Redefine startOperation method
85 /// to change behavior of operation. There is no point in using this method. It would
86 /// be better to inherit own operator from base one and redefine startOperation method
90 /// Public slot. Aborts operation. This slot is not virtual and cannot be redefined.
91 /// Redefine abortOperation method to change behavior of operation instead
94 /// Public slot. Commits operation. This slot is not virtual and cannot be redefined.
95 /// Redefine commitOperation method to change behavior of operation instead
98 /// Alias for start/abort slots
99 /// Public slot. Aborts operation if false, else does nothing.
100 /// Provided for S/S compatibility with QAction's toggle(bool)
101 /// \param theState th flag to abort, if it is true, do nothing, overwise abort
102 void setRunning(bool theState);
104 // Data model methods.
105 /// Stores a real value in model.
106 /// \param theValue - to store
107 virtual void storeReal(double theValue) = 0;
108 /// Stores a custom value in model.
109 virtual void storeCustomValue() = 0;
112 /// Virtual method called when operation started (see start() method for more description)
113 /// Default impl calls corresponding slot and commits immediately.
114 virtual void startOperation() = 0;
115 /// Virtual method called when operation stopped - committed or aborted.
116 virtual void stopOperation() = 0;
117 /// Virtual method called when operation aborted (see abort() method for more description)
118 virtual void abortOperation() = 0;
119 /// Virtual method called when operation committed (see commit() method for more description)
120 virtual void commitOperation() = 0;
121 /// Virtual method called after operation committed (see commit() method for more description)
122 /// it is important that the method is called after the stop() signal is emitted
123 virtual void afterCommitOperation() = 0;
125 /// Returns pointer to the root document.
126 boost::shared_ptr<ModelAPI_Document> document() const;
129 ModuleBase_OperationDescription* myDescription; /// the container to have the operation description