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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1486 - (hide annotations) (download) (as text)
Sat Nov 17 02:02:28 2007 UTC (16 years, 5 months ago) by schoenebeck
File MIME type: text/x-c++hdr
File size: 9796 byte(s)
* Qt4 migration: finished / fixed device management dialog.
* Fixed creation of devices (don't try to set device parameters which the
  user did not touch in the device creation dialog, this bug already
  existed in the Qt3 version of QSampler).

1 capela 426 // qsamplerDevice.h
2     //
3     /****************************************************************************
4 schoenebeck 1461 Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved.
5 capela 1464 Copyright (C) 2007, Christian Schoenebeck
6 capela 426
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 capela 920 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 capela 426
21     *****************************************************************************/
22    
23     #ifndef __qsamplerDevice_h
24     #define __qsamplerDevice_h
25    
26 schoenebeck 1461 #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 capela 426
40     #include <lscp/client.h>
41     #include <lscp/device.h>
42    
43     #include "qsamplerOptions.h"
44    
45    
46 capela 430 // Special QListViewItem::rtti() unique return value.
47 capela 429 #define QSAMPLER_DEVICE_ITEM 1001
48    
49 capela 484 // Early forward declarations.
50     class qsamplerMainForm;
51 capela 463 class qsamplerDevicePort;
52 capela 429
53 capela 463
54 capela 426 //-------------------------------------------------------------------------
55 capela 429 // qsamplerDeviceParam - MIDI/Audio Device parameter structure.
56 capela 426 //
57 capela 429 class qsamplerDeviceParam
58     {
59     public:
60 capela 426
61 capela 431 // Constructor.
62     qsamplerDeviceParam(lscp_param_info_t *pParamInfo = NULL,
63 capela 429 const char *pszValue = NULL);
64 capela 431 // Default destructor.
65     ~qsamplerDeviceParam();
66 capela 429
67     // Initializer.
68     void setParam(lscp_param_info_t *pParamInfo,
69     const char *pszValue = NULL);
70    
71 capela 431 // 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 capela 429 };
85    
86 capela 463 // Typedef'd parameter QMap.
87 capela 429 typedef QMap<QString, qsamplerDeviceParam> qsamplerDeviceParamMap;
88    
89 capela 463 // Typedef'd device port/channels QptrList.
90 schoenebeck 1461 typedef Q3PtrList<qsamplerDevicePort> qsamplerDevicePortList;
91 capela 429
92 capela 463
93 capela 429 //-------------------------------------------------------------------------
94     // qsamplerDevice - MIDI/Audio Device structure.
95     //
96    
97     class qsamplerDevice
98 capela 426 {
99 capela 429 public:
100    
101 capela 431 // We use the same class for MIDI and audio device management
102 capela 436 enum qsamplerDeviceType { None, Midi, Audio };
103 capela 429
104 capela 431 // Constructor.
105 capela 961 qsamplerDevice(qsamplerDeviceType deviceType, int iDeviceID = -1);
106 capela 484 // Copy constructor.
107     qsamplerDevice(const qsamplerDevice& device);
108 capela 431 // Default destructor.
109     ~qsamplerDevice();
110 capela 429
111     // Initializer.
112 capela 484 void setDevice(qsamplerDeviceType deviceType, int iDeviceID = -1);
113 capela 431
114     // Driver name initializer.
115 capela 484 void setDriver(const QString& sDriverName);
116 capela 431
117 capela 429 // Device property accessors.
118 capela 431 int deviceID() const;
119     qsamplerDeviceType deviceType() const;
120 capela 433 const QString& deviceTypeName() const;
121 capela 431 const QString& driverName() const;
122 capela 484 // Special device name formatter.
123     QString deviceName() const;
124 capela 429
125 capela 463 // Set the proper device parameter value.
126 capela 484 bool setParam (const QString& sParam, const QString& sValue);
127 capela 463
128 capela 429 // Device parameters accessor.
129 capela 462 const qsamplerDeviceParamMap& params() const;
130 capela 429
131 capela 463 // Device port/channel list accessor.
132     qsamplerDevicePortList& ports();
133 capela 429
134 capela 467 // Device parameter dependency list refreshner.
135 capela 484 int refreshParams();
136 capela 463 // Device port/channel list refreshner.
137 capela 484 int refreshPorts();
138 capela 467 // Refresh/set dependencies given that some parameter has changed.
139 capela 484 int refreshDepends(const QString& sParam);
140 capela 467
141 capela 484 // 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 capela 430 // Device ids enumerator.
153 capela 431 static int *getDevices(lscp_client_t *pClient,
154 capela 429 qsamplerDeviceType deviceType);
155    
156 capela 430 // Driver names enumerator.
157 capela 431 static QStringList getDrivers(lscp_client_t *pClient,
158 capela 430 qsamplerDeviceType deviceType);
159    
160 capela 429 private:
161    
162 capela 467 // Refresh/set given parameter based on driver supplied dependencies.
163 capela 484 int refreshParam(const QString& sParam);
164 capela 467
165 capela 484 // Main application form reference.
166     qsamplerMainForm *m_pMainForm;
167    
168 capela 429 // Instance variables.
169 capela 431 int m_iDeviceID;
170     qsamplerDeviceType m_deviceType;
171 capela 433 QString m_sDeviceType;
172 capela 431 QString m_sDriverName;
173     QString m_sDeviceName;
174 capela 429
175     // Device parameter list.
176     qsamplerDeviceParamMap m_params;
177 capela 492
178 capela 463 // Device port/channel list.
179     qsamplerDevicePortList m_ports;
180 capela 429 };
181    
182    
183     //-------------------------------------------------------------------------
184 capela 462 // qsamplerDevicePort - MIDI/Audio Device port/channel structure.
185     //
186    
187     class qsamplerDevicePort
188     {
189     public:
190    
191     // Constructor.
192 capela 484 qsamplerDevicePort(qsamplerDevice& device, int iPortID);
193 capela 462 // Default destructor.
194     ~qsamplerDevicePort();
195    
196     // Initializer.
197 capela 484 void setDevicePort(int iPortID);
198 capela 462
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 capela 484 bool setParam (const QString& sParam, const QString& sValue);
208 capela 462
209     private:
210    
211 capela 484 // Device reference.
212     qsamplerDevice& m_device;
213 capela 492
214 capela 462 // 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 capela 429 // qsamplerDeviceItem - QListView device item.
225     //
226    
227 schoenebeck 1461 class qsamplerDeviceItem : public QTreeWidgetItem
228 capela 429 {
229     public:
230    
231 capela 431 // Constructors.
232 schoenebeck 1461 qsamplerDeviceItem(QTreeWidget* pTreeWidget,
233 capela 429 qsamplerDevice::qsamplerDeviceType deviceType);
234 schoenebeck 1461 qsamplerDeviceItem(QTreeWidgetItem* pItem,
235 capela 429 qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID);
236 capela 431 // Default destructor.
237     ~qsamplerDeviceItem();
238 capela 429
239 capela 431 // Instance accessors.
240     qsamplerDevice& device();
241 capela 429
242     private:
243    
244 capela 431 // Instance variables.
245     qsamplerDevice m_device;
246 capela 429 };
247    
248 schoenebeck 1461 struct DeviceParameterRow {
249     QString name;
250     qsamplerDeviceParam param;
251     };
252 capela 426
253 schoenebeck 1461 // so we can use it i.e. through QVariant
254     Q_DECLARE_METATYPE(DeviceParameterRow)
255    
256 schoenebeck 1486 //-------------------------------------------------------------------------
257     // AbstractDeviceParamModel - data model base class for device parameters
258     //
259     class AbstractDeviceParamModel : public QAbstractTableModel {
260 schoenebeck 1461 Q_OBJECT
261     public:
262 schoenebeck 1486 AbstractDeviceParamModel(QObject* parent = 0);
263 schoenebeck 1461
264     // overridden methods from subclass(es)
265 schoenebeck 1486 int rowCount(const QModelIndex& parent = QModelIndex()) const;
266     int columnCount(const QModelIndex& parent = QModelIndex() ) const;
267 schoenebeck 1461 QVariant data(const QModelIndex &index, int role) const;
268     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
269 schoenebeck 1486 Qt::ItemFlags flags(const QModelIndex& index) const;
270 schoenebeck 1461
271 schoenebeck 1486 virtual void clear();
272 schoenebeck 1461
273 schoenebeck 1486 void refresh(const qsamplerDeviceParamMap* params, bool bEditable);
274 schoenebeck 1461
275 schoenebeck 1486 protected:
276     const qsamplerDeviceParamMap* params;
277 schoenebeck 1461 bool bEditable;
278     };
279    
280 schoenebeck 1486 //-------------------------------------------------------------------------
281     // DeviceParamModel - data model for device parameters (used for QTableView)
282     //
283     class DeviceParamModel : public AbstractDeviceParamModel {
284 schoenebeck 1461 Q_OBJECT
285     public:
286 schoenebeck 1486 DeviceParamModel(QObject* parent = 0);
287 schoenebeck 1461
288 schoenebeck 1486 // overridden methods from subclass(es)
289     bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
290     void clear();
291 schoenebeck 1461
292 schoenebeck 1486 public slots:
293     void refresh(qsamplerDevice* pDevice, bool bEditable);
294 schoenebeck 1461
295 schoenebeck 1486 private:
296     qsamplerDevice* device;
297 schoenebeck 1461 };
298    
299 capela 442 //-------------------------------------------------------------------------
300 schoenebeck 1486 // PortParamModel - data model for port parameters (used for QTableView)
301 capela 442 //
302 schoenebeck 1486 class PortParamModel : public AbstractDeviceParamModel {
303     Q_OBJECT
304     public:
305     PortParamModel(QObject* parent = 0);
306 capela 442
307 schoenebeck 1486 // overridden methods from subclass(es)
308     bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
309     void clear();
310 capela 442
311 schoenebeck 1486 public slots:
312     void refresh(qsamplerDevicePort* pPort, bool bEditable);
313 capela 442
314 schoenebeck 1486 private:
315     qsamplerDevicePort* port;
316 capela 442 };
317    
318     //-------------------------------------------------------------------------
319 schoenebeck 1486 // DeviceParamDelegate - table cell renderer for device/port parameters
320 capela 442 //
321 schoenebeck 1486 class DeviceParamDelegate : public QItemDelegate {
322     Q_OBJECT
323     public:
324     DeviceParamDelegate(QObject* parent = 0);
325     QWidget* createEditor(QWidget* parent,
326     const QStyleOptionViewItem& option,
327     const QModelIndex& index) const;
328     void setEditorData(QWidget* editor, const QModelIndex& index) const;
329     void setModelData(QWidget* editor, QAbstractItemModel* model,
330     const QModelIndex& index) const;
331     void updateEditorGeometry(QWidget* editor,
332     const QStyleOptionViewItem& option,
333     const QModelIndex& index) const;
334 capela 442 };
335    
336 capela 426 #endif // __qsamplerDevice_h
337    
338     // end of qsamplerDevice.h

  ViewVC Help
Powered by ViewVC