ImagingTools Core SDK
CMenuBasedCommandsProviderComp.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// ACF includes
6#include <ibase/ICommandsProvider.h>
7#include <iqtgui/IVisualStatusProvider.h>
8#include <ibase/TRuntimeStatusHanderCompWrap.h>
9#include <iqtgui/CGuiComponentBase.h>
10#include <iqtgui/CHierarchicalCommand.h>
11#include <ilog/TLoggerCompWrap.h>
12#include <imod/CMultiModelDispatcherBase.h>
13
14// ImtCore includes
15#include <imtgui/IWidgetProvider.h>
16
17
18namespace imtgui
19{
20
21
22class CMenuBasedCommandsProviderComp:
23 public QObject,
24 public ibase::TRuntimeStatusHanderCompWrap<ilog::CLoggerComponentBase>,
25 virtual public ibase::ICommandsProvider
26{
27 Q_OBJECT
28public:
29 typedef ibase::TRuntimeStatusHanderCompWrap<ilog::CLoggerComponentBase> BaseClass;
30
31 I_BEGIN_COMPONENT(CMenuBasedCommandsProviderComp);
32 I_REGISTER_INTERFACE(ibase::ICommandsProvider);
33 I_ASSIGN(m_menuGuiCompPtr, "MenuGuiObject", "The gui object, provides menu", true, "MenuGuiObject");
34 I_ASSIGN(m_menuAnchorProviderCompPtr, "MenuAnchorProvider", "The widget provider for positioning the GUI component", true, "MenuAnchorProvider");
35 I_ASSIGN_TO(m_menuCommandVisualStatusProviderCompPtr, m_menuGuiCompPtr, true);
36 I_ASSIGN(m_commandIdAttrPtr, "CommandId", "Menu activation command ID", true, "")
37 I_END_COMPONENT;
38
39 CMenuBasedCommandsProviderComp();
40
41 // reimplemented (ibase::ICommandsProvider)
42 virtual const ibase::IHierarchicalCommand* GetCommands() const override;
43
44 // reimpemented (ibase::TRuntimeStatusHanderCompWrap)
45 virtual void OnSystemStarted() override;
46 virtual void OnSystemShutdown() override;
47
48 void UpdateMenuCommandVisualStatus();
49
50private Q_SLOTS:
51 void OnCommandActivated(bool checked = false);
52
53
54private:
55 class MenuCommandVisualStatusObserver: public imod::CMultiModelDispatcherBase
56 {
57 public:
58 explicit MenuCommandVisualStatusObserver(CMenuBasedCommandsProviderComp& parent);
59
60 // reimplemented (imod::CMultiModelDispatcherBase)
61 virtual void OnModelChanged(int modelId, const istd::IChangeable::ChangeSet& changeSet) override;
62
63 private:
64 CMenuBasedCommandsProviderComp& m_parent;
65 };
66
67private:
68 I_REF(iqtgui::IGuiObject, m_menuGuiCompPtr);
69 I_REF(imtgui::IWidgetProvider, m_menuAnchorProviderCompPtr);
70 I_REF(iqtgui::IVisualStatusProvider, m_menuCommandVisualStatusProviderCompPtr);
71 I_ATTR(QByteArray, m_commandIdAttrPtr);
72
73 iqtgui::CHierarchicalCommand m_rootMenuCommand;
74 iqtgui::CHierarchicalCommand m_mainMenuCommand;
75 iqtgui::CHierarchicalCommand* m_menuCommand;
76 QWidget* m_anchorButtonPtr;
77 QWidget* m_topFramePtr;
78 QWidget* m_mainWidgetPtr;
79 MenuCommandVisualStatusObserver m_menuCommandVisualStatusObserver;
80};
81
82
83} // namespace imtgui
84
85