/[svn]/qsampler/trunk/src/qsamplerDevice.h
ViewVC logotype

Contents of /qsampler/trunk/src/qsamplerDevice.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1464 - (show annotations) (download) (as text)
Thu Nov 1 17:14:21 2007 UTC (16 years, 5 months ago) by capela
File MIME type: text/x-c++hdr
File size: 9768 byte(s)
- Qt4 migration: missing copyright headers update.

1 // qsamplerDevice.h
2 //
3 /****************************************************************************
4 Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved.
5 Copyright (C) 2007, Christian Schoenebeck
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21 *****************************************************************************/
22
23 #ifndef __qsamplerDevice_h
24 #define __qsamplerDevice_h
25
26 #include <QListWidget>
27 #include <QListWidgetItem>
28 #include <QTreeWidgetItem>
29 #include <QTableWidget>
30 #include <QTableWidgetItem>
31 #include <QAbstractTableModel>
32 #include <QMetaType>
33 #include <QItemDelegate>
34 #include <QFontMetrics>
35 #include <QModelIndex>
36 #include <QSize>
37 #include <QList>
38 #include <Q3PtrList>
39
40 #include <lscp/client.h>
41 #include <lscp/device.h>
42
43 #include "qsamplerOptions.h"
44
45
46 // Special QListViewItem::rtti() unique return value.
47 #define QSAMPLER_DEVICE_ITEM 1001
48
49 // Early forward declarations.
50 class qsamplerMainForm;
51 class qsamplerDevicePort;
52
53
54 //-------------------------------------------------------------------------
55 // qsamplerDeviceParam - MIDI/Audio Device parameter structure.
56 //
57 class qsamplerDeviceParam
58 {
59 public:
60
61 // Constructor.
62 qsamplerDeviceParam(lscp_param_info_t *pParamInfo = NULL,
63 const char *pszValue = NULL);
64 // Default destructor.
65 ~qsamplerDeviceParam();
66
67 // Initializer.
68 void setParam(lscp_param_info_t *pParamInfo,
69 const char *pszValue = NULL);
70
71 // Info structure field members.
72 lscp_type_t type;
73 QString description;
74 bool mandatory;
75 bool fix;
76 bool multiplicity;
77 QStringList depends;
78 QString defaultv;
79 QString range_min;
80 QString range_max;
81 QStringList possibilities;
82 // The current parameter value.
83 QString value;
84 };
85
86 // Typedef'd parameter QMap.
87 typedef QMap<QString, qsamplerDeviceParam> qsamplerDeviceParamMap;
88
89 // Typedef'd device port/channels QptrList.
90 typedef Q3PtrList<qsamplerDevicePort> qsamplerDevicePortList;
91
92
93 //-------------------------------------------------------------------------
94 // qsamplerDevice - MIDI/Audio Device structure.
95 //
96
97 class qsamplerDevice
98 {
99 public:
100
101 // We use the same class for MIDI and audio device management
102 enum qsamplerDeviceType { None, Midi, Audio };
103
104 // Constructor.
105 qsamplerDevice(qsamplerDeviceType deviceType, int iDeviceID = -1);
106 // Copy constructor.
107 qsamplerDevice(const qsamplerDevice& device);
108 // Default destructor.
109 ~qsamplerDevice();
110
111 // Initializer.
112 void setDevice(qsamplerDeviceType deviceType, int iDeviceID = -1);
113
114 // Driver name initializer.
115 void setDriver(const QString& sDriverName);
116
117 // Device property accessors.
118 int deviceID() const;
119 qsamplerDeviceType deviceType() const;
120 const QString& deviceTypeName() const;
121 const QString& driverName() const;
122 // Special device name formatter.
123 QString deviceName() const;
124
125 // Set the proper device parameter value.
126 bool setParam (const QString& sParam, const QString& sValue);
127
128 // Device parameters accessor.
129 const qsamplerDeviceParamMap& params() const;
130
131 // Device port/channel list accessor.
132 qsamplerDevicePortList& ports();
133
134 // Device parameter dependency list refreshner.
135 int refreshParams();
136 // Device port/channel list refreshner.
137 int refreshPorts();
138 // Refresh/set dependencies given that some parameter has changed.
139 int refreshDepends(const QString& sParam);
140
141 // Create/destroy device methods.
142 bool createDevice();
143 bool deleteDevice();
144
145 // Message logging methods (brainlessly mapped to main form's).
146 void appendMessages (const QString& s) const;
147 void appendMessagesColor (const QString& s, const QString & c) const;
148 void appendMessagesText (const QString& s) const;
149 void appendMessagesError (const QString& s) const;
150 void appendMessagesClient (const QString& s) const;
151
152 // Device ids enumerator.
153 static int *getDevices(lscp_client_t *pClient,
154 qsamplerDeviceType deviceType);
155
156 // Driver names enumerator.
157 static QStringList getDrivers(lscp_client_t *pClient,
158 qsamplerDeviceType deviceType);
159
160 private:
161
162 // Refresh/set given parameter based on driver supplied dependencies.
163 int refreshParam(const QString& sParam);
164
165 // Main application form reference.
166 qsamplerMainForm *m_pMainForm;
167
168 // Instance variables.
169 int m_iDeviceID;
170 qsamplerDeviceType m_deviceType;
171 QString m_sDeviceType;
172 QString m_sDriverName;
173 QString m_sDeviceName;
174
175 // Device parameter list.
176 qsamplerDeviceParamMap m_params;
177
178 // Device port/channel list.
179 qsamplerDevicePortList m_ports;
180 };
181
182
183 //-------------------------------------------------------------------------
184 // qsamplerDevicePort - MIDI/Audio Device port/channel structure.
185 //
186
187 class qsamplerDevicePort
188 {
189 public:
190
191 // Constructor.
192 qsamplerDevicePort(qsamplerDevice& device, int iPortID);
193 // Default destructor.
194 ~qsamplerDevicePort();
195
196 // Initializer.
197 void setDevicePort(int iPortID);
198
199 // Device port property accessors.
200 int portID() const;
201 const QString& portName() const;
202
203 // Device port parameters accessor.
204 const qsamplerDeviceParamMap& params() const;
205
206 // Set the proper device port/channel parameter value.
207 bool setParam (const QString& sParam, const QString& sValue);
208
209 private:
210
211 // Device reference.
212 qsamplerDevice& m_device;
213
214 // Instance variables.
215 int m_iPortID;
216 QString m_sPortName;
217
218 // Device port parameter list.
219 qsamplerDeviceParamMap m_params;
220 };
221
222
223 //-------------------------------------------------------------------------
224 // qsamplerDeviceItem - QListView device item.
225 //
226
227 class qsamplerDeviceItem : public QTreeWidgetItem
228 {
229 public:
230
231 // Constructors.
232 qsamplerDeviceItem(QTreeWidget* pTreeWidget,
233 qsamplerDevice::qsamplerDeviceType deviceType);
234 qsamplerDeviceItem(QTreeWidgetItem* pItem,
235 qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID);
236 // Default destructor.
237 ~qsamplerDeviceItem();
238
239 // Instance accessors.
240 qsamplerDevice& device();
241
242 private:
243
244 // Instance variables.
245 qsamplerDevice m_device;
246 };
247
248
249 //-------------------------------------------------------------------------
250 // qsamplerDeviceParamTable - Device parameter view table.
251 //
252
253 #if 0
254 class qsamplerDeviceParamTable : public QTable
255 {
256 Q_OBJECT
257
258 public:
259
260 // Constructor.
261 qsamplerDeviceParamTable(QWidget *pParent = 0, const char *pszName = 0);
262 // Default destructor.
263 ~qsamplerDeviceParamTable();
264
265 // Common parameter table renderer.
266 void refresh(const qsamplerDeviceParamMap& params, bool bEditable);
267 };
268 #endif
269
270 struct DeviceParameterRow {
271 QString name;
272 qsamplerDeviceParam param;
273 };
274
275 // so we can use it i.e. through QVariant
276 Q_DECLARE_METATYPE(DeviceParameterRow)
277
278 class DeviceParamModel : public QAbstractTableModel {
279 Q_OBJECT
280 public:
281 DeviceParamModel(QObject* parent = 0);
282
283 // overridden methods from subclass(es)
284 int rowCount(const QModelIndex &parent) const;
285 int columnCount(const QModelIndex &parent) const;
286 QVariant data(const QModelIndex &index, int role) const;
287 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
288
289 void clear();
290
291 public slots:
292 void refresh(const qsamplerDeviceParamMap& params, bool bEditable);
293
294 private:
295 qsamplerDeviceParamMap params;
296 bool bEditable;
297 };
298
299 class DeviceParamDelegate : public QItemDelegate {
300 Q_OBJECT
301 public:
302 DeviceParamDelegate(QObject* parent = 0);
303
304 QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option,
305 const QModelIndex& index) const;
306
307 void setEditorData(QWidget* editor, const QModelIndex& index) const;
308 void setModelData(QWidget* editor, QAbstractItemModel* model,
309 const QModelIndex& index) const;
310
311 void updateEditorGeometry(QWidget* editor,
312 const QStyleOptionViewItem& option, const QModelIndex& index) const;
313 };
314
315
316 //-------------------------------------------------------------------------
317 // qsamplerDeviceParamTableSpinBox - Custom spin box for parameter table.
318 //
319
320 #if 0
321 class qsamplerDeviceParamTableSpinBox : public QTableWidgetItem
322 {
323 public:
324
325 // Constructor.
326 qsamplerDeviceParamTableSpinBox (QTableWidget *pTable, Qt::ItemFlags flags,
327 const QString& sText);
328
329 // Public accessors.
330 void setMinValue(int iMinValue);
331 void setMaxValue(int iMaxValue);
332 void setValue(int iValue);
333
334 protected:
335
336 // Virtual implemetations.
337 QWidget *createEditor() const;
338 void setContentFromEditor(QWidget *pWidget);
339
340 private:
341
342 // Initial value holders.
343 int m_iValue;
344 int m_iMinValue;
345 int m_iMaxValue;
346 };
347
348
349 //-------------------------------------------------------------------------
350 // qsamplerDeviceParamTableEditBox - Custom edit box for parameter table.
351 //
352
353 class qsamplerDeviceParamTableEditBox : public QTableWidgetItem
354 {
355 public:
356
357 // Constructor.
358 qsamplerDeviceParamTableEditBox (QTableWidget *pTable, Qt::ItemFlags flags,
359 const QString& sText);
360
361 protected:
362
363 // Virtual implemetations.
364 QWidget *createEditor() const;
365 void setContentFromEditor(QWidget *pWidget);
366 };
367 #endif
368
369 #endif // __qsamplerDevice_h
370
371
372 // end of qsamplerDevice.h

  ViewVC Help
Powered by ViewVC