1 /*! 2 * \brief Base class for controllers controlling a workflow (using a state machine). 3 * 4 * \copyright Copyright (c) 2014-2021 Governikus GmbH & Co. KG, Germany 5 */ 6 7 #pragma once 8 9 #include "states/StateBuilder.h" 10 11 #include <QScopedPointer> 12 #include <QSharedPointer> 13 #include <QStateMachine> 14 15 namespace governikus 16 { 17 18 class WorkflowController 19 : public QObject 20 { 21 Q_OBJECT 22 23 protected: 24 QStateMachine mStateMachine; 25 const QSharedPointer<WorkflowContext> mContext; 26 27 public: 28 explicit WorkflowController(const QSharedPointer<WorkflowContext>& pContext); 29 ~WorkflowController() override; 30 31 void run(); 32 getContext()33 [[nodiscard]] QSharedPointer<WorkflowContext> getContext() const 34 { 35 return mContext; 36 } 37 38 39 template<typename T> addState()40 T* addState() 41 { 42 auto state = StateBuilder::createState<T>(mContext); 43 mStateMachine.addState(state); 44 return state; 45 } 46 47 Q_SIGNALS: 48 void fireComplete(); 49 50 }; 51 52 } // namespace governikus 53