1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
4 * ModuleBase_Operation.h
6 * Created on: Apr 2, 2014
10 #ifndef ModuleBase_Operation_H
11 #define ModuleBase_Operation_H
13 #include <ModuleBase.h>
17 #include <QStringList>
19 class ModuleBase_ModelWidget;
20 class ModuleBase_OperationDescription;
21 class ModuleBase_IPropertyPanel;
26 * \class ModuleBase_Operation
28 * \brief Base class for all operations
30 * Base class for all operations. If you perform an action it is reasonable to create
31 * operation intended for this. This is a base class for all operations which provides
32 * mechanism for correct starting operations, starting operations above already started
33 * ones, committing operations and so on. To create own operation it is reasonable to
34 * inherit it from this class and redefines virtual methods to provide own behavior
35 * Main virtual methods are
36 * - virtual bool isReadyToStart();
37 * - virtual void startOperation();
38 * - virtual void abortOperation();
39 * - virtual void commitOperation();
42 class MODULEBASE_EXPORT ModuleBase_Operation : public QObject
48 /// \param theId the operation identifier
49 /// \param theParent the QObject parent
50 ModuleBase_Operation(const QString& theId = "", QObject* theParent = 0);
53 virtual ~ModuleBase_Operation();
55 /// Returns the operation description
56 /// /returns the instance of the description class
57 ModuleBase_OperationDescription* getDescription() const { return myDescription; }
59 /// Must return true if this operation can be launched as nested for any current operation
60 /// and it is not necessary to check this operation on validity. By default
61 /// the operation is not granted.
62 /// The method has to be redefined for granted operations.
63 virtual bool isGranted(QString theId) const;
65 /// Returns True if data of its feature was modified during operation
66 virtual bool isModified() const { return myIsModified; }
68 /// Change the modified state of the operation
69 void setIsModified(const bool theIsModified) { myIsModified = theIsModified; }
71 /// Returns operations Id from it's description
74 /// Must return True if the operation's feature is valid.
75 /// Since IOperation does not have any feature returns false.
76 virtual bool isValid() const;
78 /// \brief Set property pane to the operation
79 /// \param theProp a property panel instance
80 virtual void setPropertyPanel(ModuleBase_IPropertyPanel* theProp);
82 /// \return Currently installed property panel
83 ModuleBase_IPropertyPanel* propertyPanel() const { return myPropertyPanel; }
86 /// The operation is started
89 /// The operation is aborted
92 /// The operation is committed
95 /// The operation is aborted or committed
98 /// The operation is resumed
101 /// The operation is postponed
106 /// Public slot. Verifies whether operation can be started and starts operation.
107 /// This slot is not virtual and cannot be redefined. Redefine startOperation method
108 /// to change behavior of operation. There is no point in using this method. It would
109 /// be better to inherit own operator from base one and redefine startOperation method
111 virtual void start();
113 /// Deactivates current operation which can be resumed later.
114 virtual void postpone();
116 /// Resumes operation
117 /// Public slot. Verifies whether operation can be started and starts operation.
118 /// This slot is not virtual and cannot be redefined. Redefine startOperation method
119 /// to change behavior of operation. There is no point in using this method. It would
120 /// be better to inherit own operator from base one and redefine startOperation method
122 virtual void resume();
125 /// Public slot. Aborts operation. This slot is not virtual and cannot be redefined.
126 /// Redefine abortOperation method to change behavior of operation instead
127 virtual void abort();
129 /// Commits operation
130 /// Public slot. Commits operation. This slot is not virtual and cannot be redefined.
131 /// Redefine commitOperation method to change behavior of operation instead
132 virtual bool commit();
134 /// Changes the modified flag of the operation
135 void onValuesChanged();
138 /// Virtual method called when operation started (see start() method for more description)
139 /// Default impl calls corresponding slot and commits immediately.
140 virtual void startOperation() {}
142 /// Implementation of specific steps on postpone operation
143 virtual void postponeOperation() {}
145 /// Virtual method called when operation stopped - committed or aborted.
146 virtual void stopOperation() {}
148 /// Virtual method called when operation aborted (see abort() method for more description)
149 virtual void abortOperation() {}
151 /// Virtual method called when operation committed (see commit() method for more description)
152 virtual void commitOperation() {};
154 /// Virtual method called after operation committed (see commit() method for more description)
155 virtual void afterCommitOperation() {}
157 /// Virtual method called after operation resume (see resume() method for more description)
158 virtual void resumeOperation() {}
160 /// Verifies whether this operator can be commited.
161 /// \return Returns TRUE if current operation can be committed, e.g. all parameters are filled
162 virtual bool canBeCommitted() const;
165 /// the container to have the operation description
166 ModuleBase_OperationDescription* myDescription;
168 /// Modified feature flag
171 /// Access to property panel
172 ModuleBase_IPropertyPanel* myPropertyPanel;