ProtocolFactoryInterface.hpp
1 #pragma once
2 #include <Device/Protocol/DeviceSettings.hpp>
3 
4 #include <score/document/DocumentContext.hpp>
5 #include <score/plugins/Interface.hpp>
6 #include <score/plugins/UuidKeySerialization.hpp>
8 
9 #include <QString>
10 #include <QVariant>
11 
12 #include <score_lib_device_export.h>
13 
14 struct VisitorVariant;
15 
16 namespace Explorer
17 {
18 class DeviceDocumentPlugin;
19 }
20 namespace Device
21 {
22 struct DeviceSettings;
23 struct AddressSettings;
24 class DeviceInterface;
25 class ProtocolSettingsWidget;
26 class AddressDialog;
27 class SCORE_LIB_DEVICE_EXPORT DeviceEnumerator : public QObject
28 {
29  W_OBJECT(DeviceEnumerator)
30 public:
31  virtual ~DeviceEnumerator();
32 
33  virtual void
34  enumerate(std::function<void(const QString&, const Device::DeviceSettings&)>) const
35  = 0;
36 
37  void deviceAdded(const QString& n, const Device::DeviceSettings& s)
38  E_SIGNAL(SCORE_LIB_DEVICE_EXPORT, deviceAdded, n, s)
39  void deviceRemoved(const QString& s)
40  E_SIGNAL(SCORE_LIB_DEVICE_EXPORT, deviceRemoved, s)
41 };
42 using DeviceEnumerators = std::vector<std::pair<QString, Device::DeviceEnumerator*>>;
43 class SCORE_LIB_DEVICE_EXPORT ProtocolFactory : public score::InterfaceBase
44 {
45  SCORE_INTERFACE(ProtocolFactory, "3f69d72e-318d-42dc-b48c-a806036592f1")
46 
47 public:
48  virtual ~ProtocolFactory();
50  {
51  static const constexpr auto osc = "OSC";
52  static const constexpr auto audio = "Audio";
53  static const constexpr auto video = "Video";
54  static const constexpr auto web = "Web";
55  static const constexpr auto hardware = "Hardware";
56  static const constexpr auto software = "Software";
57  static const constexpr auto lights = "Lights";
58  static const constexpr auto util = "Utilities";
59  };
60 
61  enum Flags
62  {
63  EditingReloadsEverything = (1 << 0)
64  };
65 
66  virtual Flags flags() const noexcept;
67 
68  virtual QString prettyName() const noexcept = 0;
69  virtual QString category() const noexcept = 0;
70 
73  virtual int visualPriority() const noexcept;
74 
75  virtual DeviceEnumerators getEnumerators(const score::DocumentContext& ctx) const;
76 
77  virtual DeviceInterface* makeDevice(
78  const Device::DeviceSettings& settings,
79  const Explorer::DeviceDocumentPlugin& plugin, const score::DocumentContext& ctx)
80  = 0;
81 
82  virtual ProtocolSettingsWidget* makeSettingsWidget() = 0;
83 
84  virtual AddressDialog* makeAddAddressDialog(
85  const Device::DeviceInterface& dev, const score::DocumentContext& ctx, QWidget*)
86  = 0;
87  virtual AddressDialog* makeEditAddressDialog(
88  const Device::AddressSettings&, const Device::DeviceInterface& dev,
89  const score::DocumentContext& ctx, QWidget*)
90  = 0;
91 
92  virtual const Device::DeviceSettings& defaultSettings() const noexcept = 0;
93 
94  // Save
95  virtual void serializeProtocolSpecificSettings(
96  const QVariant& data, const VisitorVariant& visitor) const
97  = 0;
98 
99  template <typename T>
100  void serializeProtocolSpecificSettings_T(
101  const QVariant& data, const VisitorVariant& visitor) const
102  {
103  score::serialize_dyn(visitor, data.value<T>());
104  }
105 
106  // Load
107  virtual QVariant makeProtocolSpecificSettings(const VisitorVariant& visitor) const = 0;
108 
109  template <typename T>
110  QVariant makeProtocolSpecificSettings_T(const VisitorVariant& vis) const
111  {
112  return QVariant::fromValue(score::deserialize_dyn<T>(vis));
113  }
114 
115  // Returns true if the two devicesettings can coexist at the same time.
116  virtual bool checkCompatibility(
117  const Device::DeviceSettings& a, const Device::DeviceSettings& b) const noexcept
118  = 0;
119 };
120 }
121 
122 Q_DECLARE_METATYPE(UuidKey<Device::ProtocolFactory>)
123 W_REGISTER_ARGTYPE(UuidKey<Device::ProtocolFactory>)
Definition: ProtocolSettingsWidget.hpp:41
Definition: ProtocolFactoryInterface.hpp:28
Definition: DeviceInterface.hpp:66
Definition: ProtocolFactoryInterface.hpp:44
Definition: ProtocolSettingsWidget.hpp:22
Base class for plug-in interfaces.
Definition: Interface.hpp:52
Manipulation of Devices from Qt.
Definition: AddressSettings.cpp:14
Base toolkit upon which the software is built.
Definition: Application.cpp:90
Definition: AddressSettings.hpp:49
Definition: DeviceSettings.hpp:16
Definition: ProtocolFactoryInterface.hpp:50
The VisitorVariant struct.
Definition: VisitorInterface.hpp:26