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