6#include <icomp/CComponentBase.h>
7#include <imod/TSingleModelObserverBase.h>
8#include <imod/CMultiModelDispatcherBase.h>
9#include <iprm/ISelectionParam.h>
12#include <imtgui/IPageNavigationController.h>
19class CPageNavigationControllerComp:
20 public icomp::CComponentBase,
21 protected imod::TSingleModelObserverBase<iprm::ISelectionParam>,
22 virtual public IPageNavigationController
26 typedef icomp::CComponentBase BaseClass;
27 typedef imod::TSingleModelObserverBase<iprm::ISelectionParam> BaseClass2;
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);
35 CPageNavigationControllerComp();
38 virtual bool IsNextPageAvailable()
const override;
39 virtual bool IsPreviousPageAvailable()
const override;
40 virtual void GoForward()
override;
41 virtual void GoBack()
override;
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);
50 virtual void OnUpdate(
const istd::IChangeable::ChangeSet& changeSet);
52 class PageSubselectionObserver:
public imod::CMultiModelDispatcherBase
55 explicit PageSubselectionObserver(CPageNavigationControllerComp& parent);
58 virtual void OnModelChanged(
int modelId,
const istd::IChangeable::ChangeSet& changeSet)
override;
61 CPageNavigationControllerComp& m_parent;
65 virtual void OnComponentCreated()
override;
66 virtual void OnComponentDestroyed()
override;
69 QByteArrayList m_visitedPages;
70 QByteArrayList m_pages;
71 qsizetype m_currentPageIndex;
73 I_REF(iprm::ISelectionParam, m_pageSelectionCompPtr);
74 I_REF(imod::IModel, m_pageSelectionModelCompPtr);
77 PageSubselectionObserver m_pageSubselectionObserver;
78 int m_subselectionModelIndex;
80 bool m_isUpdateBlocked;