| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 | 
							- /*=========================================================================
 
-   Library:   CTK
 
-   Copyright (c) Kitware Inc.
 
-   Licensed under the Apache License, Version 2.0 (the "License");
 
-   you may not use this file except in compliance with the License.
 
-   You may obtain a copy of the License at
 
-       http://www.commontk.org/LICENSE
 
-   Unless required by applicable law or agreed to in writing, software
 
-   distributed under the License is distributed on an "AS IS" BASIS,
 
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
-   See the License for the specific language governing permissions and
 
-   limitations under the License.
 
- =========================================================================*/
 
- #ifndef __ctkWorkflowStep_h
 
- #define __ctkWorkflowStep_h
 
- // Qt includes
 
- class QObject;
 
- class QState;
 
- // CTK includes
 
- #include "ctkPimpl.h"
 
- #include "ctkWorkflow_p.h"
 
- #include "ctkWorkflowTransitions.h"
 
- #include "ctkCoreExport.h"
 
- class ctkWorkflow;
 
- class ctkWorkflowStepPrivate;
 
- /// \brief ctkWorkflowStep is the basis for a workflow step.
 
- ///
 
- /// A workflow step is a placeholder for various states and transitions that are used in a
 
- /// typical workflow. Such steps can be added to instances of the ctkWorkflow class.
 
- class CTK_CORE_EXPORT ctkWorkflowStep
 
- {
 
- public:
 
-   explicit ctkWorkflowStep();
 
-   explicit ctkWorkflowStep(ctkWorkflow* newWorkflow, const QString& newId);
 
-   virtual ~ctkWorkflowStep();
 
-   /// Get the \a workflow associated with this step
 
-   ctkWorkflow* workflow()const;
 
-   /// Get id
 
-   QString id()const;
 
-   /// Set step Id
 
-   /// \note Setting the Id after the step had been added to a workflow is a no-op
 
-   void setId(const QString& newStepId);
 
-   /// Set/get \a name
 
-   QString name()const;
 
-   void setName(const QString& newName);
 
-   /// Set/get \a description
 
-   QString description()const;
 
-   void setDescription(const QString& newDescription);
 
-   /// Get \a statusText
 
-   QString statusText()const;
 
-   /// Set/get whether a validationCommand has been provided in a separate QObject
 
-   /// \note see method 2 described for validation()
 
-   /// \sa validation()
 
-   bool hasValidateCommand()const;
 
-   void setHasValidateCommand(bool newHasValidateCommand);
 
-   /// Set/get whether an onEntryCommand has been provided in a separate QObject
 
-   /// \note See method2 in onEntry()
 
-   /// \sa onEntry()
 
-   bool hasOnEntryCommand()const;
 
-   void setHasOnEntryCommand(bool newHasOnEntryCommand);
 
-   ///
 
-   /// Set/get whether an onExitCommand has been provided in a separate QObject
 
-   /// \note  See method2 in onExit()
 
-   /// \sa onExit()
 
-   bool hasOnExitCommand()const;
 
-   void setHasOnExitCommand(bool newHasOnExitCommand);
 
-   /// Get QObject associated with this step, to connect signals/slots
 
-   QObject* ctkWorkflowStepQObject();
 
- protected:
 
-   explicit ctkWorkflowStep(ctkWorkflowStepPrivate * pimpl);
 
-   explicit ctkWorkflowStep(ctkWorkflowStepPrivate * pimpl,
 
-                            ctkWorkflow* newWorkflow, const QString& newId);
 
-   /// Set workflow
 
-   void setWorkflow(ctkWorkflow* newWorkflow);
 
-   void setStatusText(const QString& newText);
 
-   /// \brief Get the step's processing state.
 
-   ///
 
-   /// This state is used to perform the processing associated with this step.
 
-   QState* processingState()const;
 
-   /// \brief Get the step's validation state.
 
-   ///
 
-   /// This state is used to validate the processing associated with this step.
 
-   QState* validationState()const;
 
-   /// \brief Get the step's validation transition.
 
-   ///
 
-   /// The validation transition is used to bring the state machine
 
-   /// from the step's processingState to its validationState.
 
-   /// More specifically:
 
-   /// <ul>
 
-   ///  <li>its origin state is the processingState state</li>
 
-   ///  <li>its destination state is the validationState state</li>
 
-   /// </ul>
 
-   ///
 
-   /// The transition is of type ctkWorkflowTransition with the value
 
-   /// ctkWorkflowTransitionType::ValidationTransition.
 
-   ctkWorkflowIntrastepTransition* validationTransition()const;
 
-   /// \brief Get the step's validation failed transition.
 
-   ///
 
-   /// The validationFailed transition is used to bring the state
 
-   /// machine from the step's validationState state back to its
 
-   /// processingState, when validation of the processing step fails
 
-   /// (i.e. validate(const QString&) returns false).
 
-   ///
 
-   /// More specifically:
 
-   /// <ul>
 
-   ///  <li>its origin state is the validatationState state</li>
 
-   ///  <li>its destination state is the processingState state</li>
 
-   /// </ul>
 
-   ///
 
-   /// The transition is of type ctkWorkflowTransition with the value
 
-   /// ctkWorkflowTransitionType::ValidationFailedTransition.
 
-   ctkWorkflowIntrastepTransition* validationFailedTransition()const;
 
-   /// \brief  Reimplement this function for step-specific processing when entering a step.
 
-   ///
 
-   /// To define a custom step, developers can either reimplement the onEntry() method in a subclass
 
-   /// of ctkWorkflowStep, or create a ctkWorkflowStep instance and use signals and slots, as
 
-   /// similarly as described for validate().
 
-   ///
 
-   /// Each step should be self-contained, \a comingFrom and \a transitionType may
 
-   /// be used only to decide on how processing should be done for the current step.
 
-   ///
 
-   /// \param comingFrom gives the step that the state machine was in before
 
-   /// transitioning to this step.
 
-   ///
 
-   /// \param transitionType gives the type of the transition used to get to this step.
 
-   virtual void onEntry(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType);
 
-   /// \brief Reimplement this function for step-specific processing when exiting a step.
 
-   ///
 
-   /// To define a custom step, developers can either reimplement the onExit() method
 
-   /// in a subclass of ctkWorkflowStep, or create a ctkWorkflowStep instance and use signals and
 
-   /// slots, similarly as described for validate().
 
-   ///
 
-   /// Each step should be self-contained, \a goingTo and \a transitionType may be used only to
 
-   /// decide on how processing should be done for the current step.
 
-   ///
 
-   /// \param goingTo gives the step that the state machine will go to after
 
-   /// transitioning from this step.
 
-   ///
 
-   /// \param transitionType gives the type of the transition used to get to this step.
 
-   virtual void onExit(const ctkWorkflowStep* goingTo,
 
-                       const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType);
 
-   /// \brief Validates the computation performed in this step's processing state.
 
-   ///
 
-   /// When creating a custom step, developers can create a validate(const QString&) method is one of two ways:
 
-   /// 1) Reimplement the validate(const QString&) method in a subclass of
 
-   /// ctkWorkflowStep, following these instructions:
 
-   /// <ul>
 
-   ///   <li>invoke the superclass method ctkWorkflowStep::validateComplete(bool, const QString&)
 
-   /// (true on successful validation, false on failure; the QString is the desired branchId to use
 
-   /// with branching workflows)</li>
 
-   /// </ul>
 
-   //
 
-   /// OR:
 
-   ///
 
-   /// 2) Create an instance of a ctkWorkflowStep then:
 
-   /// <ul>
 
-   ///  <li>Call setHasValidateCommand(1) on the step
 
-   ///  <li>Create a slot foo() associated with any QObject*, following these instructions:</li>
 
-   ///  <ul>
 
-   ///     <li>Set the following connection:</li>
 
-   ///     <ul>
 
-   ///       <li>QObject::connect(step, SIGNAL(invokeValidateCommand(const QString&)), object,
 
-   /// SLOT(foo(const QString&)))</li>
 
-   ///      </ul>
 
-   ///    </ul>
 
-   ///  </ul>
 
-   virtual void validate(const QString& desiredBranchId = QString());
 
-   /// \brief Signal (emitted by the private implementation) indicating that validation of this
 
-   /// step's processing should be performed.
 
-   ///
 
-   /// \sa validation()
 
-   void invokeValidateCommand(const QString& desiredBranchId = QString())const;
 
-   /// \brief Signal (emitted by the private implementation) indicating that validation of this
 
-   /// step's processing has completed.
 
-   ///
 
-   /// \sa validation()
 
-   void validationComplete(bool validationSuceeded, const QString& branchId = QString())const;
 
-   /// \brief Signal (emitted by the private implementation) indicating that the step's 'onEntry'
 
-   /// processing should be performed.
 
-   ///
 
-   /// \sa onEntry()
 
-   void invokeOnEntryCommand(const ctkWorkflowStep* comingFrom, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const;
 
-   /// \brief Signal (emitted by the private implementation) indicating that the step's 'onEntry'
 
-   /// processing has completed.
 
-   ///
 
-   /// \sa onEntry()
 
-   void onEntryComplete()const;
 
-   /// \brief Signal (emitted by the private implementation) indicating that the step's 'onExit'
 
-   /// processing should be performed.
 
-   ///
 
-   /// \sa onExit()
 
-   void invokeOnExitCommand(const ctkWorkflowStep* goingTo, const ctkWorkflowInterstepTransition::InterstepTransitionType transitionType)const;
 
-   /// \brief Signal (emitted by the private implementation) indicating that the step's 'onExit'
 
-   /// processing has completed.
 
-   ///
 
-   /// \sa onExit()
 
-   void onExitComplete()const;
 
- protected:
 
-   QScopedPointer<ctkWorkflowStepPrivate> d_ptr;
 
- private:
 
-   Q_DECLARE_PRIVATE(ctkWorkflowStep);
 
-   Q_DISABLE_COPY(ctkWorkflowStep);
 
-   friend class ctkWorkflow;        // For access to processingState, validationState, setWorkflow, validate
 
-   friend class ctkWorkflowPrivate; // For access to invokeOn{Entry,Exit}Command, on{Entry,Exit}
 
- };
 
- #endif
 
 
  |