6#include <QtCore/QtGlobal>
7#if QT_VERSION >= 0x050000
8#include <QtWidgets/QWidget>
10#include <QtGui/QWidget>
27template <
class Gui,
class Observer>
125 bool m_disableUiIfReadOnly;
126 mutable int m_ignoreUpdatesCounter;
131 bool m_isUpdatePending;
142template <
class Gui,
class Observer>
144: m_isReadOnly(false),
145 m_disableUiIfReadOnly(true),
146 m_ignoreUpdatesCounter(0),
147 m_isUpdatePending(false),
148 m_onShowChangeIds(
istd::IChangeable::GetAllChanges())
155template <
class Gui,
class Observer>
163 retVal = Observer::OnModelAttached(modelPtr, changeMask);
166 if (retVal && Gui::IsGuiCreated()){
167 Q_ASSERT(Observer::IsModelAttached(
NULL));
169 OnGuiModelAttached();
176template <
class Gui,
class Observer>
179 if (Observer::IsModelAttached(modelPtr)){
180 if (Gui::IsGuiCreated()){
181 if (!m_isReadOnly && !IsUpdateBlocked() && !m_isUpdatePending){
183 Q_UNUSED(updateBlocker);
188 OnGuiModelDetached();
192 return Observer::OnModelDetached(modelPtr);
198template <
class Gui,
class Observer>
204template <
class Gui,
class Observer>
210template <
class Gui,
class Observer>
213 Q_ASSERT(Gui::IsGuiCreated());
214 Q_ASSERT(Observer::IsModelAttached(
NULL));
217 UpdateEditor(initChangeSet);
221template <
class Gui,
class Observer>
224 if (!m_isReadOnly && Observer::IsModelAttached(
NULL) && !IsUpdateBlocked() && !m_isUpdatePending){
226 Q_UNUSED(updateBlocker);
233template <
class Gui,
class Observer>
236 return (m_ignoreUpdatesCounter > 0);
240template <
class Gui,
class Observer>
243 m_disableUiIfReadOnly = state;
249template <
class Gui,
class Observer>
252 if (!m_isReadOnly && !IsUpdateBlocked() && Observer::IsModelAttached()){
254 Q_UNUSED(updateBlocker);
265template <
class Gui,
class Observer>
271template <
class Gui,
class Observer>
279template <
class Gui,
class Observer>
282 if (Gui::IsGuiShown()){
287 m_isUpdatePending =
true;
288 m_onShowChangeIds += changeSet;
293template <
class Gui,
class Observer>
296 if (!m_isReadOnly && !m_isUpdatePending){
304template <
class Gui,
class Observer>
309 if (Observer::IsModelAttached(
NULL)){
310 if (m_isUpdatePending){
312 DoUpdate(m_onShowChangeIds);
314 m_onShowChangeIds.Reset();
316 m_isUpdatePending =
false;
324template <
class Gui,
class Observer>
329 if (Observer::IsModelAttached(
NULL)){
335template <
class Gui,
class Observer>
339 Q_UNUSED(updateBlocker);
341 Gui::OnGuiRetranslate();
345template <
class Gui,
class Observer>
350 if (m_disableUiIfReadOnly){
351 QWidget* widgetPtr = Gui::GetWidget();
352 Q_ASSERT(widgetPtr !=
NULL);
354 widgetPtr->setEnabled(!m_isReadOnly);
357 if (Observer::IsModelAttached(
NULL)){
358 OnGuiModelAttached();
363template <
class Gui,
class Observer>
366 if (Observer::IsModelAttached(
NULL)){
367 OnGuiModelDetached();
370 Gui::OnGuiDestroyed();
376template <
class Gui,
class Observer>
379 Q_ASSERT(modelPtr !=
NULL);
380 Q_ASSERT(Observer::IsModelAttached(modelPtr));
382 Observer::AfterUpdate(modelPtr, changeSet);
388 UpdateEditor(changeSet);
394template <
class Gui,
class Observer>
401template <
class Gui,
class Observer>
404 m_isReadOnly = state;
406 if (m_disableUiIfReadOnly && Gui::IsGuiCreated()){
407 QWidget* widgetPtr = Gui::GetWidget();
408 Q_ASSERT(widgetPtr !=
NULL);
410 widgetPtr->setEnabled(!m_isReadOnly);
417template <
class Gui,
class Observer>
420 if (changeSet.
IsEmpty() || IsUpdateBlocked() || !Gui::IsGuiCreated()){
424 UpdateBlocker updateBlocker(
this);
425 Q_UNUSED(updateBlocker);
427 UpdateGui(changeSet);
433template <
class Gui,
class Observer>
435: m_parent(*parentPtr)
437 ++m_parent.m_ignoreUpdatesCounter;
441template <
class Gui,
class Observer>
444 --m_parent.m_ignoreUpdatesCounter;
Common interface for an model editor.
Common interface for model objects, that supports Model/Observer design pattern.
UpdateBlocker(const TGuiObserverWrap< Gui, Observer > *parentPtr)
Join functionality of iqtgui::IGuiObject interface and imod::IObserver.
virtual void SetReadOnly(bool state) override
Set flag that the model data can be changed.
bool DoUpdateModel() const
Secure update model.
virtual void OnGuiShown() override
virtual void UpdateModelFromEditor() const override
Updates model from editor.
virtual bool OnModelAttached(imod::IModel *modelPtr, istd::IChangeable::ChangeSet &changeMask) override
virtual void OnGuiCreated() override
virtual bool IsReadOnly() const override
Returns true if the model data can be changed.
virtual void OnGuiHidden() override
virtual void OnGuiDestroyed() override
virtual void UpdateModel() const
Do update of the model to reflect the current contents of GUI.
void SetDisableUiIfReadOnly(bool state)
Control if GUI should be disaled for read-only editors.
virtual void UpdateGui(const istd::IChangeable::ChangeSet &changeSet)
Do update of the GUI to reflect the state of model.
virtual void UpdateEditor(const istd::IChangeable::ChangeSet &changeSet) override
Updates editor with model data.
virtual void OnGuiModelDetached()
Called when model is detached or GUI is destroyed.
virtual void OnGuiModelShown()
Called when model is attached and GUI is shown.
virtual void AfterUpdate(imod::IModel *modelPtr, const istd::IChangeable::ChangeSet &changeSet) override
bool IsUpdateBlocked() const
Check if GUI updating is blocked.
virtual void OnGuiRetranslate() override
virtual bool OnModelDetached(imod::IModel *modelPtr) override
virtual void OnGuiModelHidden()
Called when model is detached or GUI is hidden.
virtual void OnGuiModelAttached()
Called when model is attached and GUI is created.
Set of change flags (its IDs).
bool IsEmpty() const
Check if there is any change in the set.
bool ContainsExplicit(int changeId, bool singleOnly=false) const
Check if there is specific change flag in the set explicit set by user.
@ CF_DESTROYING
Change flag indicate that model is during destruction.
Standard GUI specific interfaces and components based on Qt.