--- qsampler/trunk/src/qsamplerDevice.h 2005/03/07 17:05:55 428 +++ qsampler/trunk/src/qsamplerDevice.h 2005/03/08 14:56:05 429 @@ -22,6 +22,7 @@ #ifndef __qsamplerDevice_h #define __qsamplerDevice_h +#include #include #include @@ -30,29 +31,157 @@ #include "qsamplerOptions.h" +// Special QListViewItem::rtti() return values. +#define QSAMPLER_DEVICE_ITEM 1001 + + +//------------------------------------------------------------------------- +// qsamplerDeviceParam - MIDI/Audio Device parameter structure. +// +class qsamplerDeviceParam +{ +public: + + // Constructor. + qsamplerDeviceParam(lscp_param_info_t *pParamInfo = NULL, + const char *pszValue = NULL); + // 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; +}; + +// A typedef'd parameter QMap. +typedef QMap qsamplerDeviceParamMap; + + //------------------------------------------------------------------------- -// qsamplerDeviceParameterTable - Device parameter view table. +// qsamplerDevice - MIDI/Audio Device structure. // -class qsamplerDeviceParameterTable : public QTable +class qsamplerDevice +{ +public: + + // We use the same class for MIDI and audio device management + enum qsamplerDeviceType { Midi, Audio }; + + // Constructor. + qsamplerDevice(lscp_client_t *pClient, + qsamplerDeviceType deviceType, int iDeviceID = -1); + // Default destructor. + ~qsamplerDevice(); + + // Initializer. + void setDevice(lscp_client_t *pClient, + qsamplerDeviceType deviceType, int iDeviceID = -1); + + // Device property accessors. + int deviceID() const; + qsamplerDeviceType deviceType() const; + const QString& driverName() const; + const QString& deviceName() const; + + // Device parameters accessor. + qsamplerDeviceParamMap& params(); + + // Update/refresh device/driver data. + void refresh(); + + // Device enumerator. + static int *getDevices(lscp_client_t *pClient, + qsamplerDeviceType deviceType); + +private: + + // Instance variables. + int m_iDeviceID; + qsamplerDeviceType m_deviceType; + QString m_sDriverName; + QString m_sDeviceName; + + // Device parameter list. + qsamplerDeviceParamMap m_params; +}; + + +//------------------------------------------------------------------------- +// qsamplerDeviceItem - QListView device item. +// + +class qsamplerDeviceItem : public QListViewItem +{ +public: + + // Constructors. + qsamplerDeviceItem(QListView *pListView, lscp_client_t *pClient, + qsamplerDevice::qsamplerDeviceType deviceType); + qsamplerDeviceItem(QListViewItem *pItem, lscp_client_t *pClient, + qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID); + // Default destructor. + ~qsamplerDeviceItem(); + + // Instance accessors. + const qsamplerDevice& device(); + + // To virtually distinguish between list view items. + virtual int rtti() const; + +private: + + // Instance variables. + qsamplerDevice m_device; +}; + + +//------------------------------------------------------------------------- +// qsamplerDeviceParamTable - Device parameter view table. +// + +class qsamplerDeviceParamTable : public QTable { Q_OBJECT public: // Constructor. - qsamplerDeviceParameterTable(QWidget *pParent = 0, const char *pszName = 0); + qsamplerDeviceParamTable(QWidget *pParent = 0, const char *pszName = 0); // Default destructor. - ~qsamplerDeviceParameterTable(); - - // LSCP client descriptor accessor. - void setClient(lscp_client_t *pClient); - lscp_client_t * client(); + ~qsamplerDeviceParamTable(); + // Client/device descriptor selector. + void setDevice(lscp_client_t *pClient, + qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID = -1); + + // Client/device descriptor accessors. + lscp_client_t *client(); + int deviceID(); + + // The main table refresher. + void refresh(); + private: - // LSCP client reference. + // LSCP client/device references. lscp_client_t *m_pClient; + qsamplerDevice::qsamplerDeviceType m_deviceType; + int m_iDeviceID; };