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

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

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

revision 1498 by schoenebeck, Sat Nov 17 02:02:28 2007 UTC revision 1499 by capela, Tue Nov 20 16:48:04 2007 UTC
# Line 26  Line 26 
26  #include "qsamplerMainForm.h"  #include "qsamplerMainForm.h"
27  #include "qsamplerDeviceForm.h"  #include "qsamplerDeviceForm.h"
28    
29  #include <qspinbox.h>  #include <QCheckBox>
30  #include <qlineedit.h>  #include <QSpinBox>
31    #include <QLineEdit>
32    
33    
34  using namespace QSampler;  using namespace QSampler;
35    
# Line 107  void qsamplerDeviceParam::setParam ( lsc Line 109  void qsamplerDeviceParam::setParam ( lsc
109  // Constructor.  // Constructor.
110  qsamplerDevice::qsamplerDevice ( qsamplerDeviceType deviceType, int iDeviceID )  qsamplerDevice::qsamplerDevice ( qsamplerDeviceType deviceType, int iDeviceID )
111  {  {
112          m_ports.setAutoDelete(true);  //      m_ports.setAutoDelete(true);
113    
114          setDevice(deviceType, iDeviceID);          setDevice(deviceType, iDeviceID);
115  }  }
# Line 115  qsamplerDevice::qsamplerDevice ( qsample Line 117  qsamplerDevice::qsamplerDevice ( qsample
117  // Default destructor.  // Default destructor.
118  qsamplerDevice::~qsamplerDevice (void)  qsamplerDevice::~qsamplerDevice (void)
119  {  {
120            qDeleteAll(m_ports);
121            m_ports.clear();
122  }  }
123    
124  // Copy constructor.  // Copy constructor.
125  qsamplerDevice::qsamplerDevice ( const qsamplerDevice& device )  qsamplerDevice::qsamplerDevice ( const qsamplerDevice& device )
126          : m_params(device.m_params), m_ports(m_ports)          : m_params(device.m_params), m_ports(device.m_ports)
127  {  {
128          m_iDeviceID   = device.m_iDeviceID;          m_iDeviceID   = device.m_iDeviceID;
129          m_deviceType  = device.m_deviceType;          m_deviceType  = device.m_deviceType;
# Line 144  void qsamplerDevice::setDevice ( qsample Line 148  void qsamplerDevice::setDevice ( qsample
148    
149          // Reset device parameters and ports anyway.          // Reset device parameters and ports anyway.
150          m_params.clear();          m_params.clear();
151            qDeleteAll(m_ports);
152          m_ports.clear();          m_ports.clear();
153    
154          // Retrieve device info, if any.          // Retrieve device info, if any.
# Line 183  void qsamplerDevice::setDevice ( qsample Line 188  void qsamplerDevice::setDevice ( qsample
188                  lscp_param_info_t *pParamInfo = NULL;                  lscp_param_info_t *pParamInfo = NULL;
189                  switch (deviceType) {                  switch (deviceType) {
190                  case qsamplerDevice::Audio:                  case qsamplerDevice::Audio:
191                          if ((pParamInfo = ::lscp_get_audio_driver_param_info(pMainForm->client(),                          if ((pParamInfo = ::lscp_get_audio_driver_param_info(
192                                          m_sDriverName.latin1(), sParam.latin1(), NULL)) == NULL)                                          pMainForm->client(), m_sDriverName.toUtf8().constData(),
193                                            sParam.toUtf8().constData(), NULL)) == NULL)
194                                  appendMessagesClient("lscp_get_audio_driver_param_info");                                  appendMessagesClient("lscp_get_audio_driver_param_info");
195                          break;                          break;
196                  case qsamplerDevice::Midi:                  case qsamplerDevice::Midi:
197                          if ((pParamInfo = ::lscp_get_midi_driver_param_info(pMainForm->client(),                          if ((pParamInfo = ::lscp_get_midi_driver_param_info(
198                                          m_sDriverName.latin1(), sParam.latin1(), NULL)) == NULL)                                          pMainForm->client(), m_sDriverName.toUtf8().constData(),
199                                            sParam.toUtf8().constData(), NULL)) == NULL)
200                                  appendMessagesClient("lscp_get_midi_driver_param_info");                                  appendMessagesClient("lscp_get_midi_driver_param_info");
201                          break;                          break;
202                  case qsamplerDevice::None:                  case qsamplerDevice::None:
203                          break;                          break;
204                  }                  }
205                  if (pParamInfo) {                  if (pParamInfo) {
206                          m_params[sParam.upper()] = qsamplerDeviceParam(pParamInfo,                          m_params[sParam.toUpper()] = qsamplerDeviceParam(pParamInfo,
207                                  pDeviceInfo->params[i].value);                                  pDeviceInfo->params[i].value);
208                  }                  }
209          }          }
# Line 223  void qsamplerDevice::setDriver ( const Q Line 230  void qsamplerDevice::setDriver ( const Q
230    
231          // Reset device parameters and ports anyway.          // Reset device parameters and ports anyway.
232          m_params.clear();          m_params.clear();
233            qDeleteAll(m_ports);
234          m_ports.clear();          m_ports.clear();
235    
236          // Retrieve driver info, if any.          // Retrieve driver info, if any.
# Line 230  void qsamplerDevice::setDriver ( const Q Line 238  void qsamplerDevice::setDriver ( const Q
238          switch (m_deviceType) {          switch (m_deviceType) {
239          case qsamplerDevice::Audio:          case qsamplerDevice::Audio:
240                  if ((pDriverInfo = ::lscp_get_audio_driver_info(pMainForm->client(),                  if ((pDriverInfo = ::lscp_get_audio_driver_info(pMainForm->client(),
241                                  sDriverName.latin1())) == NULL)                                  sDriverName.toUtf8().constData())) == NULL)
242                          appendMessagesClient("lscp_get_audio_driver_info");                          appendMessagesClient("lscp_get_audio_driver_info");
243                  break;                  break;
244          case qsamplerDevice::Midi:          case qsamplerDevice::Midi:
245                  if ((pDriverInfo = ::lscp_get_midi_driver_info(pMainForm->client(),                  if ((pDriverInfo = ::lscp_get_midi_driver_info(pMainForm->client(),
246                                  sDriverName.latin1())) == NULL)                                  sDriverName.toUtf8().constData())) == NULL)
247                          appendMessagesClient("lscp_get_midi_driver_info");                          appendMessagesClient("lscp_get_midi_driver_info");
248                  break;                  break;
249          case qsamplerDevice::None:          case qsamplerDevice::None:
# Line 255  void qsamplerDevice::setDriver ( const Q Line 263  void qsamplerDevice::setDriver ( const Q
263                  lscp_param_info_t *pParamInfo = NULL;                  lscp_param_info_t *pParamInfo = NULL;
264                  switch (m_deviceType) {                  switch (m_deviceType) {
265                  case qsamplerDevice::Audio:                  case qsamplerDevice::Audio:
266                          if ((pParamInfo = ::lscp_get_audio_driver_param_info(pMainForm->client(),                          if ((pParamInfo = ::lscp_get_audio_driver_param_info(
267                                          sDriverName.latin1(), sParam.latin1(), NULL)) == NULL)                                          pMainForm->client(), sDriverName.toUtf8().constData(),
268                                            sParam.toUtf8().constData(), NULL)) == NULL)
269                                  appendMessagesClient("lscp_get_audio_driver_param_info");                                  appendMessagesClient("lscp_get_audio_driver_param_info");
270                          break;                          break;
271                  case qsamplerDevice::Midi:                  case qsamplerDevice::Midi:
272                          if ((pParamInfo = ::lscp_get_midi_driver_param_info(pMainForm->client(),                          if ((pParamInfo = ::lscp_get_midi_driver_param_info(
273                                          sDriverName.latin1(), sParam.latin1(), NULL)) == NULL)                                          pMainForm->client(), sDriverName.toUtf8().constData(),
274                                            sParam.toUtf8().constData(), NULL)) == NULL)
275                                  appendMessagesClient("lscp_get_midi_driver_param_info");                                  appendMessagesClient("lscp_get_midi_driver_param_info");
276                          break;                          break;
277                  case qsamplerDevice::None:                  case qsamplerDevice::None:
278                          break;                          break;
279                  }                  }
280                  if (pParamInfo) {                  if (pParamInfo) {
281                          m_params[sParam.upper()] = qsamplerDeviceParam(pParamInfo,                          m_params[sParam.toUpper()] = qsamplerDeviceParam(pParamInfo,
282                                  pParamInfo->defaultv);                                  pParamInfo->defaultv);
283                  }                  }
284          }          }
# Line 322  bool qsamplerDevice::setParam ( const QS Line 332  bool qsamplerDevice::setParam ( const QS
332                  return false;                  return false;
333    
334          // Set proper device parameter.          // Set proper device parameter.
335          m_params[sParam.upper()].value = sValue;          m_params[sParam.toUpper()].value = sValue;
336    
337          // If the device already exists, things get immediate...          // If the device already exists, things get immediate...
338          int iRefresh = 0;          int iRefresh = 0;
339          if (m_iDeviceID >= 0 && sValue != QString::null) {          if (m_iDeviceID >= 0 && sValue != QString::null) {
340                  // Prepare parameter struct.                  // Prepare parameter struct.
341                  lscp_param_t param;                  lscp_param_t param;
342                  param.key   = (char *) sParam.latin1();                  param.key   = (char *) sParam.toUtf8().constData();
343                  param.value = (char *) sValue.latin1();                  param.value = (char *) sValue.toUtf8().constData();
344                  // Now it depends on the device type...                  // Now it depends on the device type...
345                  lscp_status_t ret = LSCP_FAILED;                  lscp_status_t ret = LSCP_FAILED;
346                  switch (m_deviceType) {                  switch (m_deviceType) {
# Line 396  bool qsamplerDevice::createDevice (void) Line 406  bool qsamplerDevice::createDevice (void)
406          int iParam = 0;          int iParam = 0;
407          qsamplerDeviceParamMap::ConstIterator iter;          qsamplerDeviceParamMap::ConstIterator iter;
408          for (iter = m_params.begin(); iter != m_params.end(); ++iter) {          for (iter = m_params.begin(); iter != m_params.end(); ++iter) {
409                  if (iter.data().value == QString::null) continue;                  if (iter.value().value == QString::null) continue;
410                  pParams[iParam].key   = (char *) iter.key().latin1();                  pParams[iParam].key   = (char *) iter.key().toUtf8().constData();
411                  pParams[iParam].value = (char *) iter.data().value.latin1();                  pParams[iParam].value = (char *) iter.value().value.toUtf8().constData();
412                  ++iParam;                  ++iParam;
413          }          }
414          // Null terminated.          // Null terminated.
# Line 409  bool qsamplerDevice::createDevice (void) Line 419  bool qsamplerDevice::createDevice (void)
419          switch (m_deviceType) {          switch (m_deviceType) {
420          case qsamplerDevice::Audio:          case qsamplerDevice::Audio:
421                  if ((m_iDeviceID = ::lscp_create_audio_device(pMainForm->client(),                  if ((m_iDeviceID = ::lscp_create_audio_device(pMainForm->client(),
422                                  m_sDriverName.latin1(), pParams)) < 0)                                  m_sDriverName.toUtf8().constData(), pParams)) < 0)
423                          appendMessagesClient("lscp_create_audio_device");                          appendMessagesClient("lscp_create_audio_device");
424                  break;                  break;
425          case qsamplerDevice::Midi:          case qsamplerDevice::Midi:
426                  if ((m_iDeviceID = ::lscp_create_midi_device(pMainForm->client(),                  if ((m_iDeviceID = ::lscp_create_midi_device(pMainForm->client(),
427                                  m_sDriverName.latin1(), pParams)) < 0)                                  m_sDriverName.toUtf8().constData(), pParams)) < 0)
428                          appendMessagesClient("lscp_create_midi_device");                          appendMessagesClient("lscp_create_midi_device");
429                  break;                  break;
430          case qsamplerDevice::None:          case qsamplerDevice::None:
# Line 512  int qsamplerDevice::refreshPorts (void) Line 522  int qsamplerDevice::refreshPorts (void)
522                  break;                  break;
523          }          }
524          // Retrieve port/channel information...          // Retrieve port/channel information...
525            qDeleteAll(m_ports);
526          m_ports.clear();          m_ports.clear();
527          for (int iPort = 0; iPort < iPorts; iPort++)          for (int iPort = 0; iPort < iPorts; iPort++)
528                  m_ports.append(new qsamplerDevicePort(*this, iPort));                  m_ports.append(new qsamplerDevicePort(*this, iPort));
# Line 530  int qsamplerDevice::refreshDepends ( con Line 541  int qsamplerDevice::refreshDepends ( con
541          int iDepends = 0;          int iDepends = 0;
542          qsamplerDeviceParamMap::ConstIterator iter;          qsamplerDeviceParamMap::ConstIterator iter;
543          for (iter = m_params.begin(); iter != m_params.end(); ++iter) {          for (iter = m_params.begin(); iter != m_params.end(); ++iter) {
544                  const QStringList& depends = iter.data().depends;                  const QStringList& depends = iter.value().depends;
545                  if (depends.find(sParam) != depends.end())                  if (depends.indexOf(sParam) >= 0)
546                          iDepends += refreshParam(iter.key());                          iDepends += refreshParam(iter.key());
547          }          }
548          // Return how many dependencies have been refreshed...          // Return how many dependencies have been refreshed...
# Line 549  int qsamplerDevice::refreshParam ( const Line 560  int qsamplerDevice::refreshParam ( const
560                  return 0;                  return 0;
561    
562          // Check if we have dependencies...          // Check if we have dependencies...
563          qsamplerDeviceParam& param = m_params[sParam.upper()];          qsamplerDeviceParam& param = m_params[sParam.toUpper()];
564          if (param.depends.isEmpty())          if (param.depends.isEmpty())
565                  return 0;                  return 0;
566    
# Line 561  int qsamplerDevice::refreshParam ( const Line 572  int qsamplerDevice::refreshParam ( const
572          QStringList::ConstIterator iter;          QStringList::ConstIterator iter;
573          for (iter = param.depends.begin(); iter != param.depends.end(); ++iter) {          for (iter = param.depends.begin(); iter != param.depends.end(); ++iter) {
574                  const QString& sDepend = *iter;                  const QString& sDepend = *iter;
575                  pDepends[iDepend].key   = (char *) sDepend.latin1();                  pDepends[iDepend].key   = (char *) sDepend.toUtf8().constData();
576                  pDepends[iDepend].value = (char *) m_params[sDepend.upper()].value.latin1();                  pDepends[iDepend].value = (char *) m_params[sDepend.toUpper()].value
577                            .toUtf8().constData();
578                  ++iDepend;                  ++iDepend;
579          }          }
580          // Null terminated.          // Null terminated.
# Line 578  int qsamplerDevice::refreshParam ( const Line 590  int qsamplerDevice::refreshParam ( const
590          lscp_param_info_t *pParamInfo = NULL;          lscp_param_info_t *pParamInfo = NULL;
591          switch (m_deviceType) {          switch (m_deviceType) {
592          case qsamplerDevice::Audio:          case qsamplerDevice::Audio:
593                  if ((pParamInfo = ::lscp_get_audio_driver_param_info(pMainForm->client(),                  if ((pParamInfo = ::lscp_get_audio_driver_param_info(
594                                  m_sDriverName.latin1(), sParam.latin1(), pDepends)) == NULL)                                  pMainForm->client(), m_sDriverName.toUtf8().constData(),
595                                    sParam.toUtf8().constData(), pDepends)) == NULL)
596                          appendMessagesClient("lscp_get_audio_driver_param_info");                          appendMessagesClient("lscp_get_audio_driver_param_info");
597                  break;                  break;
598          case qsamplerDevice::Midi:          case qsamplerDevice::Midi:
599                  if ((pParamInfo = ::lscp_get_midi_driver_param_info(pMainForm->client(),                  if ((pParamInfo = ::lscp_get_midi_driver_param_info(
600                                  m_sDriverName.latin1(), sParam.latin1(), pDepends)) == NULL)                                  pMainForm->client(), m_sDriverName.toUtf8().constData(),
601                                    sParam.toUtf8().constData(), pDepends)) == NULL)
602                          appendMessagesClient("lscp_get_midi_driver_param_info");                          appendMessagesClient("lscp_get_midi_driver_param_info");
603                  break;                  break;
604          case qsamplerDevice::None:          case qsamplerDevice::None:
605                  break;                  break;
606          }          }
607          if (pParamInfo) {          if (pParamInfo) {
608                  if (param.value != QString::null)                  param = qsamplerDeviceParam(pParamInfo,
609                          param = qsamplerDeviceParam(pParamInfo, param.value);                          param.value.isEmpty() ? NULL : param.value.toUtf8().constData());
                 else  
                         param = qsamplerDeviceParam(pParamInfo, NULL);  
610                  iRefresh++;                  iRefresh++;
611          }          }
612    
# Line 755  void qsamplerDevicePort::setDevicePort ( Line 767  void qsamplerDevicePort::setDevicePort (
767                  case qsamplerDevice::Audio:                  case qsamplerDevice::Audio:
768                          if ((pParamInfo = ::lscp_get_audio_channel_param_info(                          if ((pParamInfo = ::lscp_get_audio_channel_param_info(
769                                          pMainForm->client(), m_device.deviceID(),                                          pMainForm->client(), m_device.deviceID(),
770                                          m_iPortID, sParam.latin1())) == NULL)                                          m_iPortID, sParam.toUtf8().constData())) == NULL)
771                                  m_device.appendMessagesClient("lscp_get_audio_channel_param_info");                                  m_device.appendMessagesClient("lscp_get_audio_channel_param_info");
772                          break;                          break;
773                  case qsamplerDevice::Midi:                  case qsamplerDevice::Midi:
774                          if ((pParamInfo = ::lscp_get_midi_port_param_info(                          if ((pParamInfo = ::lscp_get_midi_port_param_info(
775                                          pMainForm->client(), m_device.deviceID(),                                          pMainForm->client(), m_device.deviceID(),
776                                          m_iPortID, sParam.latin1())) == NULL)                                          m_iPortID, sParam.toUtf8().constData())) == NULL)
777                                  m_device.appendMessagesClient("lscp_get_midi_port_param_info");                                  m_device.appendMessagesClient("lscp_get_midi_port_param_info");
778                          break;                          break;
779                  case qsamplerDevice::None:                  case qsamplerDevice::None:
780                          break;                          break;
781                  }                  }
782                  if (pParamInfo) {                  if (pParamInfo) {
783                          m_params[sParam.upper()] = qsamplerDeviceParam(pParamInfo,                          m_params[sParam.toUpper()] = qsamplerDeviceParam(pParamInfo,
784                                  pPortInfo->params[i].value);                                  pPortInfo->params[i].value);
785                  }                  }
786          }          }
# Line 804  bool qsamplerDevicePort::setParam ( cons Line 816  bool qsamplerDevicePort::setParam ( cons
816                  return false;                  return false;
817    
818          // Set proper port/channel parameter.          // Set proper port/channel parameter.
819          m_params[sParam.upper()].value = sValue;          m_params[sParam.toUpper()].value = sValue;
820    
821          // If the device already exists, things get immediate...          // If the device already exists, things get immediate...
822          int iRefresh = 0;          int iRefresh = 0;
823          if (m_device.deviceID() >= 0 && m_iPortID >= 0) {          if (m_device.deviceID() >= 0 && m_iPortID >= 0) {
824                  // Prepare parameter struct.                  // Prepare parameter struct.
825                  lscp_param_t param;                  lscp_param_t param;
826                  param.key   = (char *) sParam.latin1();                  param.key   = (char *) sParam.toUtf8().constData();
827                  param.value = (char *) sValue.latin1();                  param.value = (char *) sValue.toUtf8().constData();
828                  // Now it depends on the device type...                  // Now it depends on the device type...
829                  lscp_status_t ret = LSCP_FAILED;                  lscp_status_t ret = LSCP_FAILED;
830                  switch (m_device.deviceType()) {                  switch (m_device.deviceType()) {
# Line 937  QVariant AbstractDeviceParamModel::data( Line 949  QVariant AbstractDeviceParamModel::data(
949      item.name  = params->keys()[index.row()];      item.name  = params->keys()[index.row()];
950      item.param = (*params)[item.name];      item.param = (*params)[item.name];
951    
952      //std::cout << "item["<<index.row()<<"]=[" << item.name.toLatin1().data() << "]\n" << std::flush;      //std::cout << "item["<<index.row()<<"]=[" << item.name.toUtf8().constData() << "]\n" << std::flush;
953    
954      return QVariant::fromValue(item);      return QVariant::fromValue(item);
955  }  }
# Line 1056  QWidget* DeviceParamDelegate::createEdit Line 1068  QWidget* DeviceParamDelegate::createEdit
1068          case 1: {          case 1: {
1069              if (r.param.type == LSCP_TYPE_BOOL) {              if (r.param.type == LSCP_TYPE_BOOL) {
1070                  QCheckBox* pCheckBox = new QCheckBox(parent);                  QCheckBox* pCheckBox = new QCheckBox(parent);
1071                  pCheckBox->setChecked(r.param.value.lower() == "true");                  pCheckBox->setChecked(r.param.value.toLower() == "true");
1072                  pCheckBox->setEnabled(bEnabled);                  pCheckBox->setEnabled(bEnabled);
1073                  return pCheckBox;                  return pCheckBox;
1074              } else if (r.param.possibilities.count() > 0) {              } else if (r.param.possibilities.count() > 0) {

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

  ViewVC Help
Powered by ViewVC