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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 463 by capela, Tue Mar 15 15:32:29 2005 UTC revision 1499 by capela, Tue Nov 20 16:48:04 2007 UTC
# Line 1  Line 1 
1  // qsamplerDevice.h  // qsamplerDevice.h
2  //  //
3  /****************************************************************************  /****************************************************************************
4     Copyright (C) 2005, rncbc aka Rui Nuno Capela. All rights reserved.     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     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License     modify it under the terms of the GNU General Public License
# Line 13  Line 14 
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15     GNU General Public License for more details.     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License     You should have received a copy of the GNU General Public License along
18     along with this program; if not, write to the Free Software     with this program; if not, write to the Free Software Foundation, Inc.,
19     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.     51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20    
21  *****************************************************************************/  *****************************************************************************/
22    
23  #ifndef __qsamplerDevice_h  #ifndef __qsamplerDevice_h
24  #define __qsamplerDevice_h  #define __qsamplerDevice_h
25    
26  #include <qlistview.h>  #include <QListWidget>
27  #include <qtable.h>  #include <QListWidgetItem>
28    #include <QTreeWidgetItem>
29    #include <QTableWidget>
30    #include <QTableWidgetItem>
31    #include <QAbstractTableModel>
32    #include <QItemDelegate>
33    #include <QFontMetrics>
34    #include <QModelIndex>
35    #include <QSize>
36    #include <QList>
37    
38  #include <lscp/client.h>  #include <lscp/client.h>
39  #include <lscp/device.h>  #include <lscp/device.h>
# Line 34  Line 44 
44  // Special QListViewItem::rtti() unique return value.  // Special QListViewItem::rtti() unique return value.
45  #define QSAMPLER_DEVICE_ITEM    1001  #define QSAMPLER_DEVICE_ITEM    1001
46    
47  // Early forward declaration.  // Early forward declarations.
48    class qsamplerMainForm;
49  class qsamplerDevicePort;  class qsamplerDevicePort;
50    
51    
# Line 74  public: Line 85  public:
85  typedef QMap<QString, qsamplerDeviceParam> qsamplerDeviceParamMap;  typedef QMap<QString, qsamplerDeviceParam> qsamplerDeviceParamMap;
86    
87  // Typedef'd device port/channels QptrList.  // Typedef'd device port/channels QptrList.
88  typedef QPtrList<qsamplerDevicePort> qsamplerDevicePortList;  typedef QList<qsamplerDevicePort *> qsamplerDevicePortList;
89    
90    
91  //-------------------------------------------------------------------------  //-------------------------------------------------------------------------
# Line 89  public: Line 100  public:
100          enum qsamplerDeviceType { None, Midi, Audio };          enum qsamplerDeviceType { None, Midi, Audio };
101    
102          // Constructor.          // Constructor.
103          qsamplerDevice(lscp_client_t *pClient,          qsamplerDevice(qsamplerDeviceType deviceType, int iDeviceID = -1);
104                  qsamplerDeviceType deviceType, int iDeviceID = -1);          // Copy constructor.
105        qsamplerDevice(const qsamplerDevice& device);
106          // Default destructor.          // Default destructor.
107          ~qsamplerDevice();          ~qsamplerDevice();
108    
109          // Initializer.          // Initializer.
110          void setDevice(lscp_client_t *pClient,          void setDevice(qsamplerDeviceType deviceType, int iDeviceID = -1);
                 qsamplerDeviceType deviceType, int iDeviceID = -1);  
111    
112          // Driver name initializer.          // Driver name initializer.
113          void setDriver(lscp_client_t *pClient,          void setDriver(const QString& sDriverName);
                 const QString& sDriverName);  
114    
115          // Device property accessors.          // Device property accessors.
116          int                 deviceID()   const;          int                 deviceID()   const;
117          qsamplerDeviceType  deviceType() const;          qsamplerDeviceType  deviceType() const;
118          const QString&      deviceTypeName() const;          const QString&      deviceTypeName() const;
119          const QString&      driverName() const;          const QString&      driverName() const;
120          const QString&      deviceName() const;          // Special device name formatter.
121            QString deviceName() const;
122    
123          // Set the proper device parameter value.          // Set the proper device parameter value.
124          void setParam (const QString& sParam, const QString& sValue);          bool setParam (const QString& sParam, const QString& sValue);
125    
126          // Device parameters accessor.          // Device parameters accessor.
127          const qsamplerDeviceParamMap& params() const;          const qsamplerDeviceParamMap& params() const;
# Line 118  public: Line 129  public:
129          // Device port/channel list accessor.          // Device port/channel list accessor.
130          qsamplerDevicePortList& ports();          qsamplerDevicePortList& ports();
131    
132            // Device parameter dependency list refreshner.
133            int refreshParams();
134          // Device port/channel list refreshner.          // Device port/channel list refreshner.
135          void refresh(lscp_client_t *pClient);          int refreshPorts();
136                    // Refresh/set dependencies given that some parameter has changed.
137            int refreshDepends(const QString& sParam);
138    
139            // Create/destroy device methods.
140            bool createDevice();
141            bool deleteDevice();
142    
143            // Message logging methods (brainlessly mapped to main form's).
144            void appendMessages       (const QString& s) const;
145            void appendMessagesColor  (const QString& s, const QString & c) const;
146            void appendMessagesText   (const QString& s) const;
147            void appendMessagesError  (const QString& s) const;
148            void appendMessagesClient (const QString& s) const;
149    
150          // Device ids enumerator.          // Device ids enumerator.
151          static int *getDevices(lscp_client_t *pClient,          static int *getDevices(lscp_client_t *pClient,
152                  qsamplerDeviceType deviceType);                  qsamplerDeviceType deviceType);
# Line 131  public: Line 157  public:
157    
158  private:  private:
159    
160            // Refresh/set given parameter based on driver supplied dependencies.
161            int refreshParam(const QString& sParam);
162    
163            // Main application form reference.
164            qsamplerMainForm  *m_pMainForm;
165    
166          // Instance variables.          // Instance variables.
167          int                m_iDeviceID;          int                m_iDeviceID;
168          qsamplerDeviceType m_deviceType;          qsamplerDeviceType m_deviceType;
# Line 140  private: Line 172  private:
172    
173          // Device parameter list.          // Device parameter list.
174          qsamplerDeviceParamMap m_params;          qsamplerDeviceParamMap m_params;
175            
176          // Device port/channel list.          // Device port/channel list.
177          qsamplerDevicePortList m_ports;          qsamplerDevicePortList m_ports;
178  };  };
# Line 155  class qsamplerDevicePort Line 187  class qsamplerDevicePort
187  public:  public:
188    
189          // Constructor.          // Constructor.
190          qsamplerDevicePort(lscp_client_t *pClient,          qsamplerDevicePort(qsamplerDevice& device, int iPortID);
                 const qsamplerDevice& device, int iPortID);  
191          // Default destructor.          // Default destructor.
192          ~qsamplerDevicePort();          ~qsamplerDevicePort();
193    
194          // Initializer.          // Initializer.
195          void setDevicePort(lscp_client_t *pClient,          void setDevicePort(int iPortID);
                 const qsamplerDevice& device, int iPortID);  
196    
197          // Device port property accessors.          // Device port property accessors.
198          int            portID()   const;          int            portID()   const;
# Line 172  public: Line 202  public:
202          const qsamplerDeviceParamMap& params() const;          const qsamplerDeviceParamMap& params() const;
203    
204          // Set the proper device port/channel parameter value.          // Set the proper device port/channel parameter value.
205          void setParam (const QString& sParam, const QString& sValue);          bool setParam (const QString& sParam, const QString& sValue);
206    
207  private:  private:
208    
209            // Device reference.
210            qsamplerDevice& m_device;
211    
212          // Instance variables.          // Instance variables.
213          int     m_iPortID;          int     m_iPortID;
214          QString m_sPortName;          QString m_sPortName;
# Line 189  private: Line 222  private:
222  // qsamplerDeviceItem - QListView device item.  // qsamplerDeviceItem - QListView device item.
223  //  //
224    
225  class qsamplerDeviceItem : public QListViewItem  class qsamplerDeviceItem : public QTreeWidgetItem
226  {  {
227  public:  public:
228    
229          // Constructors.          // Constructors.
230          qsamplerDeviceItem(QListView *pListView, lscp_client_t *pClient,          qsamplerDeviceItem(QTreeWidget* pTreeWidget,
231                  qsamplerDevice::qsamplerDeviceType deviceType);                  qsamplerDevice::qsamplerDeviceType deviceType);
232          qsamplerDeviceItem(QListViewItem *pItem, lscp_client_t *pClient,          qsamplerDeviceItem(QTreeWidgetItem* pItem,
233                  qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID);                  qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID);
234          // Default destructor.          // Default destructor.
235          ~qsamplerDeviceItem();          ~qsamplerDeviceItem();
# Line 204  public: Line 237  public:
237          // Instance accessors.          // Instance accessors.
238          qsamplerDevice& device();          qsamplerDevice& device();
239    
         // To virtually distinguish between list view items.  
         virtual int rtti() const;  
   
240  private:  private:
241    
242          // Instance variables.          // Instance variables.
243          qsamplerDevice m_device;          qsamplerDevice m_device;
244  };  };
245    
246    struct DeviceParameterRow {
247        QString             name;
248        qsamplerDeviceParam param;
249    };
250    
251    // so we can use it i.e. through QVariant
252    Q_DECLARE_METATYPE(DeviceParameterRow)
253    
254  //-------------------------------------------------------------------------  //-------------------------------------------------------------------------
255  // qsamplerDeviceParamTable - Device parameter view table.  // AbstractDeviceParamModel - data model base class for device parameters
256  //  //
257    class AbstractDeviceParamModel : public QAbstractTableModel {
258  class qsamplerDeviceParamTable : public QTable          Q_OBJECT
259  {      public:
260          Q_OBJECT          AbstractDeviceParamModel(QObject* parent = 0);
261    
262  public:          // overridden methods from subclass(es)
263            int rowCount(const QModelIndex& parent = QModelIndex()) const;
264          // Constructor.          int columnCount(const QModelIndex& parent = QModelIndex() ) const;
265          qsamplerDeviceParamTable(QWidget *pParent = 0, const char *pszName = 0);          QVariant data(const QModelIndex &index, int role) const;
266          // Default destructor.          QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
267          ~qsamplerDeviceParamTable();          Qt::ItemFlags flags(const QModelIndex& index) const;
268    
269          // Common parameter table renderer.          virtual void clear();
270          void refresh(const qsamplerDeviceParamMap& params, bool bEditable);  
271            void refresh(const qsamplerDeviceParamMap* params, bool bEditable);
272    
273        protected:
274            const qsamplerDeviceParamMap* params;
275            bool bEditable;
276  };  };
277    
   
278  //-------------------------------------------------------------------------  //-------------------------------------------------------------------------
279  // qsamplerDeviceParamTableSpinBox - Custom spin box for parameter table.  // DeviceParamModel - data model for device parameters (used for QTableView)
280  //  //
281    class DeviceParamModel : public AbstractDeviceParamModel {
282            Q_OBJECT
283        public:
284            DeviceParamModel(QObject* parent = 0);
285    
286            // overridden methods from subclass(es)
287            bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
288            void clear();
289    
290  class qsamplerDeviceParamTableSpinBox : public QTableItem      public slots:
291  {          void refresh(qsamplerDevice* pDevice, bool bEditable);
 public:  
   
         // Constructor.  
         qsamplerDeviceParamTableSpinBox (QTable *pTable, EditType editType,  
                 const QString& sText);  
   
         // Public accessors.  
         void setMinValue(int iMinValue);  
         void setMaxValue(int iMaxValue);  
         void setValue(int iValue);  
   
 protected:  
   
         // Virtual implemetations.  
         QWidget *createEditor() const;  
         void setContentFromEditor(QWidget *pWidget);  
292    
293  private:      private:
294            qsamplerDevice* device;
         // Initial value holders.  
         int m_iValue;  
         int m_iMinValue;  
         int m_iMaxValue;  
295  };  };
296    
   
297  //-------------------------------------------------------------------------  //-------------------------------------------------------------------------
298  // qsamplerDeviceParamTableEditBox - Custom edit box for parameter table.  // PortParamModel - data model for port parameters (used for QTableView)
299  //  //
300    class PortParamModel : public AbstractDeviceParamModel {
301            Q_OBJECT
302        public:
303            PortParamModel(QObject* parent = 0);
304    
305            // overridden methods from subclass(es)
306            bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
307            void clear();
308    
309  class qsamplerDeviceParamTableEditBox : public QTableItem      public slots:
310  {          void refresh(qsamplerDevicePort* pPort, bool bEditable);
 public:  
   
         // Constructor.  
         qsamplerDeviceParamTableEditBox (QTable *pTable, EditType editType,  
                 const QString& sText);  
   
 protected:  
311    
312          // Virtual implemetations.      private:
313          QWidget *createEditor() const;          qsamplerDevicePort* port;
         void setContentFromEditor(QWidget *pWidget);  
314  };  };
315    
316    //-------------------------------------------------------------------------
317    // DeviceParamDelegate - table cell renderer for device/port parameters
318    //
319    class DeviceParamDelegate : public QItemDelegate {
320            Q_OBJECT
321        public:
322            DeviceParamDelegate(QObject* parent = 0);
323            QWidget* createEditor(QWidget* parent,
324                                  const QStyleOptionViewItem& option,
325                                  const QModelIndex& index) const;
326            void setEditorData(QWidget* editor, const QModelIndex& index) const;
327            void setModelData(QWidget* editor, QAbstractItemModel* model,
328                              const QModelIndex& index) const;
329            void updateEditorGeometry(QWidget* editor,
330                                      const QStyleOptionViewItem& option,
331                                      const QModelIndex& index) const;
332    };
333    
334  #endif  // __qsamplerDevice_h  #endif  // __qsamplerDevice_h
335    
   
336  // end of qsamplerDevice.h  // end of qsamplerDevice.h

Legend:
Removed from v.463  
changed lines
  Added in v.1499

  ViewVC Help
Powered by ViewVC