Loading...
Searching...
No Matches
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
14class QUrl;
15struct VisitorVariant;
16
17namespace Explorer
18{
19class DeviceDocumentPlugin;
20}
21namespace Device
22{
23struct DeviceSettings;
24struct AddressSettings;
25class DeviceInterface;
26class ProtocolSettingsWidget;
27class AddressDialog;
28class SCORE_LIB_DEVICE_EXPORT DeviceEnumerator : public QObject
29{
30 W_OBJECT(DeviceEnumerator)
31public:
32 virtual ~DeviceEnumerator();
33
34 virtual void
35 enumerate(std::function<void(const QString&, const Device::DeviceSettings&)>) const
36 = 0;
37
38 void deviceAdded(const QString& n, const Device::DeviceSettings& s)
39 E_SIGNAL(SCORE_LIB_DEVICE_EXPORT, deviceAdded, n, s)
40 void deviceRemoved(const QString& s)
41 E_SIGNAL(SCORE_LIB_DEVICE_EXPORT, deviceRemoved, s)
42
43 void sort() E_SIGNAL(SCORE_LIB_DEVICE_EXPORT, sort)
44};
45
46using DeviceEnumerators = std::vector<std::pair<QString, Device::DeviceEnumerator*>>;
47
48class SCORE_LIB_DEVICE_EXPORT ProtocolFactory : public score::InterfaceBase
49{
50 SCORE_INTERFACE(ProtocolFactory, "3f69d72e-318d-42dc-b48c-a806036592f1")
51
52public:
53 virtual ~ProtocolFactory();
55 {
56 static const constexpr auto osc = "Network";
57 static const constexpr auto audio = "Audio";
58 static const constexpr auto video = "Video";
59 static const constexpr auto video_in = "Video In";
60 static const constexpr auto video_out = "Video Out";
61 static const constexpr auto media = "Media";
62 static const constexpr auto web = "Web";
63 static const constexpr auto hardware = "Hardware";
64 static const constexpr auto software = "Software";
65 static const constexpr auto lights = "Lights";
66 static const constexpr auto util = "Utilities";
67 static const constexpr auto tracking = "Tracking";
68 };
69
70 enum Flags
71 {
72 EditingReloadsEverything = (1 << 0)
73 };
74
75 virtual Flags flags() const noexcept;
76
77 virtual QString prettyName() const noexcept = 0;
78 virtual QString category() const noexcept = 0;
79 virtual QUrl manual() const noexcept;
80
83 virtual int visualPriority() const noexcept;
84
85 virtual DeviceEnumerators getEnumerators(const score::DocumentContext& ctx) const;
86
87 virtual DeviceInterface* makeDevice(
88 const Device::DeviceSettings& settings,
89 const Explorer::DeviceDocumentPlugin& plugin, const score::DocumentContext& ctx)
90 = 0;
91
92 virtual ProtocolSettingsWidget* makeSettingsWidget() = 0;
93
94 virtual AddressDialog* makeAddAddressDialog(
95 const Device::DeviceInterface& dev, const score::DocumentContext& ctx, QWidget*)
96 = 0;
97 virtual AddressDialog* makeEditAddressDialog(
98 const Device::AddressSettings&, const Device::DeviceInterface& dev,
99 const score::DocumentContext& ctx, QWidget*)
100 = 0;
101
102 virtual const Device::DeviceSettings& defaultSettings() const noexcept = 0;
103
104 // Save
105 virtual void serializeProtocolSpecificSettings(
106 const QVariant& data, const VisitorVariant& visitor) const
107 = 0;
108
109 template <typename T>
110 void serializeProtocolSpecificSettings_T(
111 const QVariant& data, const VisitorVariant& visitor) const
112 {
113 score::serialize_dyn(visitor, data.value<T>());
114 }
115
116 // Load
117 virtual QVariant makeProtocolSpecificSettings(const VisitorVariant& visitor) const = 0;
118
119 template <typename T>
120 QVariant makeProtocolSpecificSettings_T(const VisitorVariant& vis) const
121 {
122 return QVariant::fromValue(score::deserialize_dyn<T>(vis));
123 }
124
128 virtual bool checkResourcesAvailable(
129 const Device::DeviceSettings& a, const DeviceResourceMap&) const noexcept;
130
131 // Returns true if the two devicesettings can coexist at the same time.
132 virtual bool checkCompatibility(
133 const Device::DeviceSettings& a, const Device::DeviceSettings& b) const noexcept
134 = 0;
135};
136}
137
138Q_DECLARE_METATYPE(UuidKey<Device::ProtocolFactory>)
139W_REGISTER_ARGTYPE(UuidKey<Device::ProtocolFactory>)
Definition ProtocolSettingsWidget.hpp:46
Definition ProtocolFactoryInterface.hpp:29
Definition DeviceInterface.hpp:66
Definition ProtocolFactoryInterface.hpp:49
Definition ProtocolSettingsWidget.hpp:27
Definition UuidKey.hpp:345
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:113
Definition AddressSettings.hpp:49
Definition DeviceSettings.hpp:20
Definition ProtocolFactoryInterface.hpp:55
The VisitorVariant struct.
Definition VisitorInterface.hpp:26