ACF $AcfVersion:0$
TModelWrap.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#include <istd/TDelPtr.h>
6#include <istd/IChangeable.h>
8#include <imod/CModelBase.h>
9
10
11namespace imod
12{
13
14
22template <class Base>
24{
25public:
28
30
31 void SetBaseObject(const Base& baseObject);
32
33 // pseudo-reimplemented (istd::IChangeable)
34 virtual int GetSupportedOperations() const override;
36 virtual void BeginChanges(const istd::IChangeable::ChangeSet& changeSet) override;
37 virtual void EndChanges(const istd::IChangeable::ChangeSet& changeSet) override;
38 virtual void BeginChangeGroup(const istd::IChangeable::ChangeSet& changeSet) override;
39 virtual void EndChangeGroup(const istd::IChangeable::ChangeSet& changeSet) override;
40
41protected:
42 // reimplemented (imod::CModelBase)
43 virtual void OnBeginGlobalChanges() override;
44 virtual void OnEndGlobalChanges(const istd::IChangeable::ChangeSet& changeSet) override;
45
46private:
47 Q_DISABLE_COPY(TModelWrap);
48};
49
50
51// public methods
52
53template <class Base>
57
58
59template <class Base>
60void TModelWrap<Base>::SetBaseObject(const Base& baseObject)
61{
62 Base::operator=(baseObject);
63}
64
65
66// pseudo-reimplemented (istd::IChangeable)
67
68template <class Base>
70{
71 int baseOperations = Base::GetSupportedOperations();
72
74}
75
76
77template <class Base>
79{
81
82 if (clonePtr->CopyFrom(*this, mode)){
83 return clonePtr;
84 }
85
87}
88
89
90template <class Base>
92{
93 BaseClass2::NotifyBeforeChange(changeSet, false);
94}
95
96
97template <class Base>
99{
100 BaseClass2::NotifyAfterChange(changeSet);
101}
102
103
104template <class Base>
106{
107 BaseClass2::NotifyBeforeChange(changeSet, true);
108}
109
110
111template <class Base>
113{
114 BaseClass2::NotifyAfterChange(changeSet);
115}
116
117
118// protected methods
119
120// reimplemented (imod::CModelBase)
121
122template <class Base>
124{
125 this->OnBeginChanges();
126}
127
128
129template <class Base>
131{
132 this->OnEndChanges(changeSet);
133}
134
135
136} // namespace imod
137
138
Basic implementation of a model.
Definition CModelBase.h:25
This model wrapper provides a simple connection between a concrete istd::IChangeable implementation a...
Definition TModelWrap.h:24
virtual void EndChangeGroup(const istd::IChangeable::ChangeSet &changeSet) override
Definition TModelWrap.h:112
virtual void OnEndGlobalChanges(const istd::IChangeable::ChangeSet &changeSet) override
Called after global changes are finished.
Definition TModelWrap.h:130
imod::CModelBase BaseClass2
Definition TModelWrap.h:27
virtual void EndChanges(const istd::IChangeable::ChangeSet &changeSet) override
Definition TModelWrap.h:98
void SetBaseObject(const Base &baseObject)
Definition TModelWrap.h:60
virtual void BeginChanges(const istd::IChangeable::ChangeSet &changeSet) override
Definition TModelWrap.h:91
iser::TCopySerializedWrap< Base > BaseClass
Definition TModelWrap.h:26
virtual void OnBeginGlobalChanges() override
Called before global changes will be started.
Definition TModelWrap.h:123
virtual istd::TUniqueInterfacePtr< istd::IChangeable > CloneMe(istd::IChangeable::CompatibilityMode mode=istd::IChangeable::CM_WITHOUT_REFS) const override
Definition TModelWrap.h:78
virtual int GetSupportedOperations() const override
Definition TModelWrap.h:69
virtual void BeginChangeGroup(const istd::IChangeable::ChangeSet &changeSet) override
Definition TModelWrap.h:105
Set of change flags (its IDs).
Definition IChangeable.h:36
CompatibilityMode
Control how relationship betweeen objects are interpreted.
@ CM_WITHOUT_REFS
External references are simple ignored.
@ SO_CLONE
Creating of copy of this object.
@ SO_OBSERVE
Observing of this object via observer-observable pattern.
Unique ownership smart pointer for interface types.
This namespace containes basic implementation of Model/Observer design pattern This package is system...
Definition CModelBase.h:16
istd::TUniqueInterfacePtr< istd::IChangeable > IChangeableUniquePtr