ImagingTools Core SDK
CPageNavigationControllerComp.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 <icomp/CComponentBase.h>
7#include <imod/TSingleModelObserverBase.h>
8#include <imod/CMultiModelDispatcherBase.h>
9#include <iprm/ISelectionParam.h>
10
11// ImtCore includes
12#include <imtgui/IPageNavigationController.h>
13
14
15namespace imtgui
16{
17
18
19class CPageNavigationControllerComp:
20 public icomp::CComponentBase,
21 protected imod::TSingleModelObserverBase<iprm::ISelectionParam>,
22 virtual public IPageNavigationController
23
24{
25public:
26 typedef icomp::CComponentBase BaseClass;
27 typedef imod::TSingleModelObserverBase<iprm::ISelectionParam> BaseClass2;
28
29 I_BEGIN_COMPONENT(CPageNavigationControllerComp);
30 I_REGISTER_INTERFACE(IPageNavigationController);
31 I_ASSIGN(m_pageSelectionCompPtr, "PageModel", "Page selection model", true, "PageModel");
32 I_ASSIGN_TO(m_pageSelectionModelCompPtr, m_pageSelectionCompPtr, true);
33 I_END_COMPONENT;
34
35 CPageNavigationControllerComp();
36
37 // reimplemented (IPageNavigationController)
38 virtual bool IsNextPageAvailable() const override;
39 virtual bool IsPreviousPageAvailable() const override;
40 virtual void GoForward() override;
41 virtual void GoBack() override;
42
43protected:
44 virtual void AddPageStep(const QByteArray& pageId);
45 void OnPageSelectionChanged();
46 void GoToPage(const QByteArray& pageId);
47 void CreatePageList(const iprm::ISelectionParam& selection, const QByteArray& parentId);
48
49 // reimplemented (imod::CSingleModelObserverBase)
50 virtual void OnUpdate(const istd::IChangeable::ChangeSet& changeSet);
51
52 class PageSubselectionObserver: public imod::CMultiModelDispatcherBase
53 {
54 public:
55 explicit PageSubselectionObserver(CPageNavigationControllerComp& parent);
56
57 // reimplemented (imod::CMultiModelDispatcherBase)
58 virtual void OnModelChanged(int modelId, const istd::IChangeable::ChangeSet& changeSet) override;
59
60 private:
61 CPageNavigationControllerComp& m_parent;
62 };
63
64 // reimplemented (icomp::CComponentBase)
65 virtual void OnComponentCreated() override;
66 virtual void OnComponentDestroyed() override;
67
68private:
69 QByteArrayList m_visitedPages;
70 QByteArrayList m_pages;
71 qsizetype m_currentPageIndex;
72
73 I_REF(iprm::ISelectionParam, m_pageSelectionCompPtr);
74 I_REF(imod::IModel, m_pageSelectionModelCompPtr);
75
76
77 PageSubselectionObserver m_pageSubselectionObserver;
78 int m_subselectionModelIndex;
79
80 bool m_isUpdateBlocked;
81};
82
83
84} // namespace imtgui
85
86