ACF $AcfVersion:0$
CModelProxy.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// Qt includes
6#include <QtCore/QMutex>
7
8// ACF includes
9#include <imod/IModel.h>
11
12
13namespace imod
14{
15
16
23class CModelProxy: virtual public imod::IModel
24{
25public:
27
28 void SetModelPtr(imod::IModel* modelPtr);
29 void ResetModel();
30
31 // reimplemented (imod::IModel)
32 virtual bool AttachObserver(IObserver* observerPtr) override;
33 virtual void DetachObserver(IObserver* observerPtr) override;
34 virtual void DetachAllObservers() override;
35 virtual bool IsAttached(const IObserver* observerPtr) const override;
36
37private:
38 void AttachProxyObservers();
39 void DetachProxyObservers();
40
41private:
42 class ModelObserver: public imod::TSingleModelObserverBase<imod::IModel>
43 {
44 public:
46
47 explicit ModelObserver(CModelProxy& parent);
48
49 // reimplemented (imod::IObserver)
50 virtual bool OnModelDetached(imod::IModel* modelPtr) override;
51
52 private:
53 CModelProxy& m_parent;
54 };
55
59 struct PendingObserver
60 {
61 PendingObserver(imod::IObserver* observerPtr = NULL, bool isPending = false)
62 :m_observerPtr(observerPtr),
63 m_isPending(isPending)
64 {
65 }
66
67 bool operator == (const imod::IObserver* observerPtr) const
68 {
69 return (observerPtr == m_observerPtr);
70 }
71
72 imod::IObserver* m_observerPtr;
73 bool m_isPending;
74 };
75
76 typedef PendingObserver Observer;
77 typedef std::vector<Observer> Observers;
78
79 Observers m_proxyObservers;
80 ModelObserver m_modelObserver;
81 imod::IModel* m_modelPtr;
82#if QT_VERSION >= 0x060000
83 mutable QRecursiveMutex m_modelMutex;
84#else
85 mutable QMutex m_modelMutex;
86#endif
87};
88
89
90} // namespace imod
91
92
93
94
Implementation of the model proxy.
Definition CModelProxy.h:24
void SetModelPtr(imod::IModel *modelPtr)
virtual bool AttachObserver(IObserver *observerPtr) override
Attaches model object to observer observerPtr.
virtual void DetachObserver(IObserver *observerPtr) override
Detaches model object from observer observerPtr.
virtual void DetachAllObservers() override
Detaches all attached observers.
virtual bool IsAttached(const IObserver *observerPtr) const override
Returns true if observer observer is attached to this model object.
Common interface for model objects, that supports Model/Observer design pattern.
Definition IModel.h:25
Common interface for all classes implementing the Observer functionality in the Model/Observer design...
Definition IObserver.h:156
Basic implementation for a single model observer with binding to concrete data object interface.
#define NULL
Definition istd.h:74
This namespace containes basic implementation of Model/Observer design pattern This package is system...
Definition CModelBase.h:16