ACF $AcfVersion:0$
TMultiModelObserverBase.h
Go to the documentation of this file.
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ACF-Commercial
2#pragma once
3
4
5// ACF includes
7
8#include <imod/imod.h>
9
10
11namespace imod
12{
13
14
21template<class ModelInterface>
23{
24public:
26 typedef ModelInterface ModelType;
27
32 ModelInterface* GetObservedObject(int objectIndex) const;
37 ModelInterface* GetObjectPtr(int objectIndex) const;
38
39 // reimplemented (imod::IObserver)
40 virtual bool OnModelAttached(imod::IModel* modelPtr, istd::IChangeable::ChangeSet& changeMask) override;
41};
42
43
44// public methods
45
46template<class ModelInterface>
48{
49 Q_ASSERT(objectIndex >= 0);
50 Q_ASSERT(objectIndex < GetModelCount());
51
52 return dynamic_cast<ModelInterface*>(GetObservedModel(objectIndex));
53}
54
55
56template<class ModelInterface>
57ModelInterface* TMultiModelObserverBase<ModelInterface>::GetObjectPtr(int objectIndex) const
58{
59 Q_ASSERT(objectIndex >= 0);
60 Q_ASSERT(objectIndex < GetModelCount());
61
62 return dynamic_cast<ModelInterface*>(GetObservedModel(objectIndex));
63}
64
65
66// reimplemented (imod::IObserver)
67
68template<class ModelInterface>
70{
71 ModelInterface* objectPtr = dynamic_cast<ModelInterface*>(modelPtr);
72 if (objectPtr == NULL){
73 return false;
74 }
75
76 return BaseClass::OnModelAttached(modelPtr, changeMask);
77}
78
79
80} // namespace imod
81
82
83
Basic implementation of a multiple model observer.
Common interface for model objects, that supports Model/Observer design pattern.
Definition IModel.h:25
Basic implementation of a multiple model observer.
ModelInterface * GetObjectPtr(int objectIndex) const
Get instance of observed object.
virtual bool OnModelAttached(imod::IModel *modelPtr, istd::IChangeable::ChangeSet &changeMask) override
Callback invoked when an observable model is about to be attached to this observer.
ModelInterface * GetObservedObject(int objectIndex) const
Get instance of observed object.
Set of change flags (its IDs).
Definition IChangeable.h:36
#define NULL
Definition istd.h:74
This namespace containes basic implementation of Model/Observer design pattern This package is system...
Definition CModelBase.h:16