ImagingTools Core SDK
CLayoutManagerGuiComp.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// Qt includes
6#include <QtWidgets/QMenu>
7#include <QtWidgets/QSplitter>
8#include <QtCore/QTimer>
9#if QT_VERSION >= 0x050000 && QT_VERSION < 0x060000
10#include <QtWidgets/QAction>
11#else
12#include <QtGui/QAction>
13#endif
14
15// ACF includes
16#include <iqtgui/TDesignerGuiObserverCompBase.h>
17#include <ibase/ICommandsProvider.h>
18#include <iprm/COptionsManager.h>
19#include <iqtgui/CHierarchicalCommand.h>
20#include <imod/IModel.h>
21#include <idoc/IUndoManager.h>
22#include <iser/ISerializable.h>
23
24// ImtCore includes
25#include <imtgui/ILayout.h>
26#include <imtgui/ILayout.h>
27#include <imtgui/CHierarchicalLayoutWidget.h>
28#include <GeneratedFiles/imtgui/ui_CLayoutManagerGuiComp.h>
29
30
31namespace imtgui
32{
33
34
39 public iqtgui::TDesignerGuiObserverCompBase<Ui::CLayoutManagerGuiComp, imtgui::ILayout>,
40 public virtual ibase::ICommandsProvider
41{
42 Q_OBJECT
43
44public:
45 typedef iqtgui::TDesignerGuiObserverCompBase<Ui::CLayoutManagerGuiComp, imtgui::ILayout> BaseClass;
46 typedef QList<int> SizeList;
47
48 I_BEGIN_COMPONENT(CLayoutManagerGuiComp);
49 I_REGISTER_INTERFACE(ibase::ICommandsProvider);
50 I_REGISTER_INTERFACE(iser::ISerializable);
51 I_REGISTER_SUBELEMENT(GuiViewOptionsList);
52 I_REGISTER_SUBELEMENT_INTERFACE(GuiViewOptionsList, iprm::IOptionsList, ExtractGuiViewOptionList);
53 I_ASSIGN(m_commandsProviderCompPtr, "UndoManagerCommands", "Undo manager commands providing commands functionality", false, "UndoManagerCommandsProvider");
54 I_ASSIGN(m_isFixedLayoutAttrPtr, "DefaultFixedLayout", "Fixed layout", true, true);
55 I_ASSIGN(m_isBorderEnabledAttrPtr, "DefaultBorderEnabled", "Border enabled", true, true);
56 I_ASSIGN(m_colorBorderAttrPtr, "DefaultBorderColor", "Border color", true, "#808080");
57 I_ASSIGN(m_isEditEnabledAttrPtr, "DefaultEditEnabled", "Edit enabled", true, true);
58 I_ASSIGN_MULTI_0(m_guiViewIdMultiAttrPtr, "ViewIds", "View ids to be used in layout creation", true);
59 I_ASSIGN_MULTI_0(m_guiViewMultiFactCompPtr, "ViewFactories", "View factories to create gui in layout", true);
60 I_ASSIGN_MULTI_0(m_guiViewNameMultiAttrPtr, "ViewNames", "View names will be shown to user in layout widget", true);
61 I_END_COMPONENT
62
64
65 // reimplemented (ibase::ICommandsProvider)
66 virtual const ibase::IHierarchicalCommand* GetCommands() const override;
67
68protected:
69 QLayout* CreateCustomLayoutWidget(ILayout* layout);
70
71 // reimplemented (iqtgui::TGuiObserverWrap)
72 virtual void UpdateGui(const istd::IChangeable::ChangeSet& changeSet) override;
73
74 // reimplemented (iqtgui::CGuiComponentBase)
75 virtual void OnGuiCreated() override;
76 virtual void OnGuiDestroyed() override;
77 virtual void OnGuiRetranslate() override;
78 virtual void OnGuiDesignChanged() override;
79
80protected Q_SLOTS:
81 void OnSplitterMoved(int pos, int index);
82 void OnSplitterMoveFinished();
83 void OnStartEndEditCommand();
84 void OnClearAll();
85 void OnLoad();
86 void OnSave();
87 void OnChangeTitle(const QByteArray& id, const QString& title);
88 void OnChangeAlignTitle(const QByteArray& id, const ILayout::AlignType& align);
89 void OnChangeIcon(const QByteArray& id);
90 void OnRemoveIcon(const QByteArray& id);
91 void OnSplitLayout(const QByteArray& id, ILayout::LayoutType type, int width, int height);
92 void OnDeleteWidget(const QByteArray& id);
93 void OnAddWidget(const QByteArray& id, int index);
94 void OnAddWidgetByViewId(const QByteArray& id, const QByteArray& viewId);
95 void OnChangeSizes(const QByteArray& id, const SizeList& sizeList);
96 void OnChangeProperties(const QByteArray& id);
97
98private:
99 // static template methods for subelement access
100 template <class InterfaceType>
101 static InterfaceType* ExtractGuiViewOptionList(CLayoutManagerGuiComp& component)
102 {
103 return &component.m_guiViewOptionsManager;
104 }
105
106private:
107 void SetAllProperties(ILayout* layout, const ILayout::LayoutProperties& properties, const CLayoutSettingsDialog& settingsDialog);
108 void RemoveAllGuiComponents();
109
110private:
111 I_REF(ibase::ICommandsProvider, m_commandsProviderCompPtr);
112 I_ATTR(bool, m_isFixedLayoutAttrPtr);
113 I_ATTR(bool, m_isShowBoxAttrPtr);
114 I_ATTR(bool, m_isBorderEnabledAttrPtr);
115 I_ATTR(bool, m_isEditEnabledAttrPtr);
116 I_ATTR(QByteArray, m_colorBorderAttrPtr);
117 I_MULTIATTR(QByteArray, m_guiViewIdMultiAttrPtr);
118 I_MULTIFACT(iqtgui::IGuiObject, m_guiViewMultiFactCompPtr);
119 I_MULTIATTR(QString, m_guiViewNameMultiAttrPtr);
120
121 CHierarchicalLayoutWidget* m_layoutWidgetPtr;
122
123 // commands
124 iqtgui::CHierarchicalCommand m_rootCommands;
125 iqtgui::CHierarchicalCommand m_commands;
126 iqtgui::CHierarchicalCommand m_startEndEditModeCommand;
127 iqtgui::CHierarchicalCommand m_clearCommand;
128 iqtgui::CHierarchicalCommand m_loadCommand;
129 iqtgui::CHierarchicalCommand m_saveCommand;
130
131 iqtgui::CHierarchicalCommand* m_undoCommands;
132
133 QTimer m_splitterTimer;
134 QByteArray m_activeId;
135 QMap<QSplitter*, QByteArray> m_splitterMap;
136
137 iprm::COptionsManager m_guiViewOptionsManager;
138
139 typedef iqtgui::IGuiObjectSharedPtr GuiObjectPtr;
140 typedef QVector<GuiObjectPtr> GuiObjects;
141
142 GuiObjects m_guiObjects;
143};
144
145
146} // namespace iloggui
147
148