swift
scalarobserver.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2017 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_SHAREDSTATE_SCALAROBSERVER_H
7 #define SWIFT_MISC_SHAREDSTATE_SCALAROBSERVER_H
8 
9 #include <QMutex>
10 #include <QObject>
11 
13 #include "misc/swiftmiscexport.h"
14 #include "misc/variant.h"
15 
17 {
18  class IDataLink;
19 
25  {
26  Q_OBJECT
27 
28  public:
30  void initialize(IDataLink *);
31 
32  protected:
34  CGenericScalarObserver(QObject *parent) : QObject(parent) {}
35 
37  CVariant value() const;
38 
39  private:
40  void reconstruct();
41  void handleEvent(const CVariant &param);
42  virtual void onGenericValueChanged(const CVariant &value) = 0;
43 
44  QSharedPointer<CActiveObserver> m_observer =
45  CActiveObserver::create(this, &CGenericScalarObserver::handleEvent);
46  mutable QMutex m_valueMutex;
47  CVariant m_value;
48  };
49 
55  template <typename T>
57  {
58  protected:
60  CScalarObserver(QObject *parent) : CGenericScalarObserver(parent) {}
61 
62  public:
64  T value() const { return CGenericScalarObserver::value().template to<T>(); }
65 
66  private:
68  virtual void onValueChanged(const T &value) = 0;
69 
70  virtual void onGenericValueChanged(const CVariant &value) override final { onValueChanged(value.to<T>()); }
71  };
72 } // namespace swift::misc::shared_state
73 
74 #endif // SWIFT_MISC_SHAREDSTATE_SCALAROBSERVER_H
Wrapper around QVariant which provides transparent access to CValueObject methods of the contained ob...
Definition: variant.h:66
static auto create(T *parent, F eventHandler)
Factory method.
Non-template base class for CScalarObserver.
CVariant value() const
Get scalar value as variant.
CGenericScalarObserver(QObject *parent)
Constructor.
Base class for an object that shares state with a corresponding CScalarMutator subclass object.
virtual void onValueChanged(const T &value)=0
Called when the scalar value changes.
CScalarObserver(QObject *parent)
Constructor.
Utilities for sharing state between multiple objects.
Definition: application.h:48
#define SWIFT_MISC_EXPORT
Export a class or function from the library.