--- qsampler/trunk/src/qsamplerDevice.h 2005/03/08 14:56:05 429 +++ qsampler/trunk/src/qsamplerDevice.h 2005/03/15 15:32:29 463 @@ -1,7 +1,7 @@ // qsamplerDevice.h // /**************************************************************************** - Copyright (C) 2003-2005, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2005, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -31,9 +31,12 @@ #include "qsamplerOptions.h" -// Special QListViewItem::rtti() return values. +// Special QListViewItem::rtti() unique return value. #define QSAMPLER_DEVICE_ITEM 1001 +// Early forward declaration. +class qsamplerDevicePort; + //------------------------------------------------------------------------- // qsamplerDeviceParam - MIDI/Audio Device parameter structure. @@ -42,34 +45,37 @@ { public: - // Constructor. - qsamplerDeviceParam(lscp_param_info_t *pParamInfo = NULL, + // Constructor. + qsamplerDeviceParam(lscp_param_info_t *pParamInfo = NULL, const char *pszValue = NULL); - // Default destructor. - ~qsamplerDeviceParam(); + // Default destructor. + ~qsamplerDeviceParam(); // Initializer. void setParam(lscp_param_info_t *pParamInfo, const char *pszValue = NULL); - // Info structure field members. - lscp_type_t type; - QString description; - bool mandatory; - bool fix; - bool multiplicity; - QStringList depends; - QString defaultv; - QString range_min; - QString range_max; - QStringList possibilities; - // The current parameter value. - QString value; + // Info structure field members. + lscp_type_t type; + QString description; + bool mandatory; + bool fix; + bool multiplicity; + QStringList depends; + QString defaultv; + QString range_min; + QString range_max; + QStringList possibilities; + // The current parameter value. + QString value; }; -// A typedef'd parameter QMap. +// Typedef'd parameter QMap. typedef QMap qsamplerDeviceParamMap; +// Typedef'd device port/channels QptrList. +typedef QPtrList qsamplerDevicePortList; + //------------------------------------------------------------------------- // qsamplerDevice - MIDI/Audio Device structure. @@ -79,45 +85,103 @@ { public: - // We use the same class for MIDI and audio device management - enum qsamplerDeviceType { Midi, Audio }; + // We use the same class for MIDI and audio device management + enum qsamplerDeviceType { None, Midi, Audio }; - // Constructor. - qsamplerDevice(lscp_client_t *pClient, + // Constructor. + qsamplerDevice(lscp_client_t *pClient, qsamplerDeviceType deviceType, int iDeviceID = -1); - // Default destructor. - ~qsamplerDevice(); + // Default destructor. + ~qsamplerDevice(); // Initializer. void setDevice(lscp_client_t *pClient, qsamplerDeviceType deviceType, int iDeviceID = -1); - + + // Driver name initializer. + void setDriver(lscp_client_t *pClient, + const QString& sDriverName); + // Device property accessors. - int deviceID() const; - qsamplerDeviceType deviceType() const; - const QString& driverName() const; - const QString& deviceName() const; + int deviceID() const; + qsamplerDeviceType deviceType() const; + const QString& deviceTypeName() const; + const QString& driverName() const; + const QString& deviceName() const; + + // Set the proper device parameter value. + void setParam (const QString& sParam, const QString& sValue); // Device parameters accessor. - qsamplerDeviceParamMap& params(); + const qsamplerDeviceParamMap& params() const; - // Update/refresh device/driver data. - void refresh(); + // Device port/channel list accessor. + qsamplerDevicePortList& ports(); - // Device enumerator. - static int *getDevices(lscp_client_t *pClient, + // Device port/channel list refreshner. + void refresh(lscp_client_t *pClient); + + // Device ids enumerator. + static int *getDevices(lscp_client_t *pClient, + qsamplerDeviceType deviceType); + + // Driver names enumerator. + static QStringList getDrivers(lscp_client_t *pClient, qsamplerDeviceType deviceType); private: // Instance variables. - int m_iDeviceID; - qsamplerDeviceType m_deviceType; - QString m_sDriverName; - QString m_sDeviceName; + int m_iDeviceID; + qsamplerDeviceType m_deviceType; + QString m_sDeviceType; + QString m_sDriverName; + QString m_sDeviceName; // Device parameter list. qsamplerDeviceParamMap m_params; + + // Device port/channel list. + qsamplerDevicePortList m_ports; +}; + + +//------------------------------------------------------------------------- +// qsamplerDevicePort - MIDI/Audio Device port/channel structure. +// + +class qsamplerDevicePort +{ +public: + + // Constructor. + qsamplerDevicePort(lscp_client_t *pClient, + const qsamplerDevice& device, int iPortID); + // Default destructor. + ~qsamplerDevicePort(); + + // Initializer. + void setDevicePort(lscp_client_t *pClient, + const qsamplerDevice& device, int iPortID); + + // Device port property accessors. + int portID() const; + const QString& portName() const; + + // Device port parameters accessor. + const qsamplerDeviceParamMap& params() const; + + // Set the proper device port/channel parameter value. + void setParam (const QString& sParam, const QString& sValue); + +private: + + // Instance variables. + int m_iPortID; + QString m_sPortName; + + // Device port parameter list. + qsamplerDeviceParamMap m_params; }; @@ -129,24 +193,24 @@ { public: - // Constructors. - qsamplerDeviceItem(QListView *pListView, lscp_client_t *pClient, + // Constructors. + qsamplerDeviceItem(QListView *pListView, lscp_client_t *pClient, qsamplerDevice::qsamplerDeviceType deviceType); - qsamplerDeviceItem(QListViewItem *pItem, lscp_client_t *pClient, + qsamplerDeviceItem(QListViewItem *pItem, lscp_client_t *pClient, qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID); - // Default destructor. - ~qsamplerDeviceItem(); + // Default destructor. + ~qsamplerDeviceItem(); - // Instance accessors. - const qsamplerDevice& device(); + // Instance accessors. + qsamplerDevice& device(); - // To virtually distinguish between list view items. - virtual int rtti() const; + // To virtually distinguish between list view items. + virtual int rtti() const; private: - // Instance variables. - qsamplerDevice m_device; + // Instance variables. + qsamplerDevice m_device; }; @@ -156,32 +220,69 @@ class qsamplerDeviceParamTable : public QTable { - Q_OBJECT + Q_OBJECT public: - // Constructor. - qsamplerDeviceParamTable(QWidget *pParent = 0, const char *pszName = 0); - // Default destructor. - ~qsamplerDeviceParamTable(); + // Constructor. + qsamplerDeviceParamTable(QWidget *pParent = 0, const char *pszName = 0); + // Default destructor. + ~qsamplerDeviceParamTable(); - // Client/device descriptor selector. - void setDevice(lscp_client_t *pClient, - qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID = -1); + // Common parameter table renderer. + void refresh(const qsamplerDeviceParamMap& params, bool bEditable); +}; - // Client/device descriptor accessors. - lscp_client_t *client(); - int deviceID(); - // The main table refresher. - void refresh(); - +//------------------------------------------------------------------------- +// qsamplerDeviceParamTableSpinBox - Custom spin box for parameter table. +// + +class qsamplerDeviceParamTableSpinBox : public QTableItem +{ +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); + private: - // LSCP client/device references. - lscp_client_t *m_pClient; - qsamplerDevice::qsamplerDeviceType m_deviceType; - int m_iDeviceID; + // Initial value holders. + int m_iValue; + int m_iMinValue; + int m_iMaxValue; +}; + + +//------------------------------------------------------------------------- +// qsamplerDeviceParamTableEditBox - Custom edit box for parameter table. +// + +class qsamplerDeviceParamTableEditBox : public QTableItem +{ +public: + + // Constructor. + qsamplerDeviceParamTableEditBox (QTable *pTable, EditType editType, + const QString& sText); + +protected: + + // Virtual implemetations. + QWidget *createEditor() const; + void setContentFromEditor(QWidget *pWidget); };