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