Loading...
Searching...
No Matches
MCUProtocolSettingsWidget.hpp
1#pragma once
2#include <Protocols/MCU/MCUSpecificSettings.hpp>
3
4#include <Device/Protocol/DeviceSettings.hpp>
5#include <Device/Protocol/ProtocolSettingsWidget.hpp>
6
7#include <ossia/protocols/midi/midi.hpp>
8
9#include <libremidi/api.hpp>
10
11#include <QString>
12
13#include <memory>
14#include <utility>
15#include <vector>
16
17#include <verdigris>
18
19#include <libremidi/port_information.hpp>
20
21namespace libremidi
22{
23class observer;
24}
25namespace State
26{
27class AddressFragmentLineEdit;
28}
29namespace score
30{
31class ComboBox;
32}
33class QCheckBox;
34class QComboBox;
35class QLabel;
36class QLineEdit;
37class QPushButton;
38class QRadioButton;
39class QSortFilterProxyModel;
40class QSpinBox;
41class QStandardItemModel;
42class QTreeView;
43class QTreeWidget;
44class QTreeWidgetItem;
45class QWidget;
46
47namespace Protocols
48{
56{
57 W_OBJECT(MCUSettingsWidget)
58
59public:
60 explicit MCUSettingsWidget(QWidget* parent = nullptr);
62
63private:
64 Device::DeviceSettings getSettings() const override;
65
66 void setSettings(const Device::DeviceSettings& settings) override;
67
69 void updateKind();
70
73 QString nameFromPorts() const;
74
76 void applyAutoName(const QString& name);
77
78 static QString defaultName();
79
82 void refreshAutoName();
83
85 void populateDeviceMaps();
86 QString selectedMap() const;
87
89 QString chosenMap() const;
90
93 QString genericLabel(const QString& identity) const;
94
96 MCUSpecificSettings::MapSlot slotAt(int row) const;
97 void addChosenDevice(const QString& identity, int channel, bool level = true);
98
101 int freeChannel() const;
102
104 void updateAddEnabled();
105
107 void updatePreview();
108 static QTreeWidgetItem* childNamed(QTreeWidgetItem* parent, const QString& name);
109 QTreeWidgetItem* topNamed(const QString& name);
110 static QString uniqueChild(QTreeWidgetItem* parent, const QString& name);
111 void selectMap(const QString& identity);
112 void updateDeviceMapSummary();
113
115 void addInput(const libremidi::input_port& p);
116 void addOutput(const libremidi::output_port& p);
117
119 template <typename Port>
120 void
121 removePort(QComboBox& combo, const std::vector<Port>& ports, const Port& gone);
122
124 QComboBox* m_kind{};
125 QComboBox* m_midiin{};
126 QComboBox* m_midiout{};
127
129 QWidget* m_instrumentBox{};
130 QLineEdit* m_search{};
131 QTreeView* m_instruments{};
132 QStandardItemModel* m_instrumentModel{};
133 QSortFilterProxyModel* m_instrumentFilter{};
134 QTreeWidget* m_chosen{};
135
137 QTreeWidget* m_preview{};
138 QLabel* m_summary{};
139
140 Device::DeviceSettings m_current;
141
144 int m_populated{-1};
145
147 QString m_chosenMap;
148
150 bool m_listEmptied{};
151
152 QPushButton* m_add{};
153
156 QString m_autoName;
157
160 libremidi::API m_api{};
161
164 bool m_portsResolved{};
165
166 std::unique_ptr<libremidi::observer> m_observer{};
167
168 std::vector<libremidi::input_port> m_ins;
169 std::vector<libremidi::output_port> m_outs;
170};
171}
Definition ProtocolSettingsWidget.hpp:27
Definition MCUProtocolSettingsWidget.hpp:56
Definition AddressFragmentLineEdit.hpp:9
Utilities for OSSIA data structures.
Definition DeviceInterface.hpp:35
Base toolkit upon which the software is built.
Definition Application.cpp:117
Definition DeviceSettings.hpp:20
Definition MCUSpecificSettings.hpp:39