/[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 463 by capela, Tue Mar 15 15:32:29 2005 UTC revision 482 by capela, Mon Mar 21 10:29:49 2005 UTC
# Line 64  void qsamplerDeviceParam::setParam ( lsc Line 64  void qsamplerDeviceParam::setParam ( lsc
64          else          else
65                  description = QString::null;                  description = QString::null;
66                    
67          mandatory = (bool) pParamInfo->multiplicity;          mandatory = (bool) pParamInfo->mandatory;
68          fix = (bool) pParamInfo->fix;          fix = (bool) pParamInfo->fix;
69          multiplicity = (bool) pParamInfo->multiplicity;          multiplicity = (bool) pParamInfo->multiplicity;
70                    
# Line 127  void qsamplerDevice::setDevice ( lscp_cl Line 127  void qsamplerDevice::setDevice ( lscp_cl
127          m_deviceType = deviceType;          m_deviceType = deviceType;
128                    
129          // Reset device parameters and ports anyway.          // Reset device parameters and ports anyway.
130          m_params.clear();          m_params.clear();
131          m_ports.clear();          m_ports.clear();
132    
133          // Retrieve device info, if any.          // Retrieve device info, if any.
134          lscp_device_info_t *pDeviceInfo = NULL;          lscp_device_info_t *pDeviceInfo = NULL;
# Line 180  void qsamplerDevice::setDevice ( lscp_cl Line 180  void qsamplerDevice::setDevice ( lscp_cl
180                  }                  }
181          }          }
182    
183          // Grab port/channel list...          // Refresh parameter dependencies...
184          refresh(pClient);          refreshParams(pClient);
185            // Set port/channel list...
186            refreshPorts(pClient);
187  }  }
188    
189    
# Line 194  void qsamplerDevice::setDriver ( lscp_cl Line 196  void qsamplerDevice::setDriver ( lscp_cl
196                  return;                  return;
197    
198          // Reset device parameters and ports anyway.          // Reset device parameters and ports anyway.
199          m_params.clear();          m_params.clear();
200          m_ports.clear();          m_ports.clear();
201    
202          // Retrieve driver info, if any.          // Retrieve driver info, if any.
203          lscp_driver_info_t *pDriverInfo = NULL;          lscp_driver_info_t *pDriverInfo = NULL;
# Line 240  void qsamplerDevice::setDriver ( lscp_cl Line 242  void qsamplerDevice::setDriver ( lscp_cl
242                                  pParamInfo->defaultv);                                  pParamInfo->defaultv);
243                  }                  }
244          }          }
245    
246            // Refresh parameter dependencies...
247            refreshParams(pClient);
248            // Set port/channel list...
249            refreshPorts(pClient);
250  }  }
251    
252    
# Line 292  qsamplerDevicePortList& qsamplerDevice:: Line 299  qsamplerDevicePortList& qsamplerDevice::
299  }  }
300    
301    
302    // Device parameter dependencies refreshner.
303    int qsamplerDevice::refreshParams ( lscp_client_t *pClient )
304    {
305            // This should only make sense for scratch devices...
306            if (m_iDeviceID >= 0)
307                return 0;
308            // Refresh all parameters that have dependencies...
309            int iParams = 0;
310            qsamplerDeviceParamMap::ConstIterator iter;
311            for (iter = m_params.begin(); iter != m_params.end(); ++iter)
312                    iParams += refreshParam(pClient, iter.key());
313            // Return how many parameters have been refreshed...
314            return iParams;
315    }
316    
317    
318  // Device port/channel list refreshner.  // Device port/channel list refreshner.
319  void qsamplerDevice::refresh ( lscp_client_t *pClient )  int qsamplerDevice::refreshPorts ( lscp_client_t *pClient )
320  {  {
321            // This should only make sense for actual devices...
322            if (m_iDeviceID < 0)
323                return 0;
324          // Port/channel count determination...          // Port/channel count determination...
325          int iPorts = 0;          int iPorts = 0;
326          switch (m_deviceType) {          switch (m_deviceType) {
# Line 307  void qsamplerDevice::refresh ( lscp_clie Line 333  void qsamplerDevice::refresh ( lscp_clie
333          case qsamplerDevice::None:          case qsamplerDevice::None:
334                  break;                  break;
335          }          }
   
336          // Retrieve port/channel information...          // Retrieve port/channel information...
337          m_ports.clear();          m_ports.clear();
338          for (int iPort = 0; iPort < iPorts; iPort++)          for (int iPort = 0; iPort < iPorts; iPort++)
339                  m_ports.append(new qsamplerDevicePort(pClient, *this, iPort));                  m_ports.append(new qsamplerDevicePort(pClient, *this, iPort));
340            // Return how many ports have been refreshed...
341            return iPorts;
342    }
343    
344    
345    // Refresh/set dependencies given that some parameter has changed.
346    int qsamplerDevice::refreshDepends ( lscp_client_t *pClient,
347            const QString& sParam )
348    {
349            // This should only make sense for scratch devices...
350            if (m_iDeviceID >= 0)
351                return 0;
352            // Refresh all parameters that depend on this one...
353            int iDepends = 0;
354            qsamplerDeviceParamMap::ConstIterator iter;
355            for (iter = m_params.begin(); iter != m_params.end(); ++iter) {
356                    const QStringList& depends = iter.data().depends;
357                    if (depends.find(sParam) != depends.end())
358                            iDepends += refreshParam(pClient, iter.key());
359            }
360            // Return how many dependencies have been refreshed...
361            return iDepends;
362    }
363    
364    
365    // Refresh/set given parameter based on driver supplied dependencies.
366    int qsamplerDevice::refreshParam ( lscp_client_t *pClient,
367            const QString& sParam )
368    {
369            // Check if we have dependencies...
370            qsamplerDeviceParam& param = m_params[sParam.upper()];
371            if (param.depends.isEmpty())
372                    return 0;
373    
374            int iRefresh = 0;
375    
376            // Build dependency list...
377            lscp_param_t *pDepends = new lscp_param_t [param.depends.count() + 1];
378            int iDepend = 0;
379            QStringList::ConstIterator iter;
380            for (iter = param.depends.begin(); iter != param.depends.end(); ++iter) {
381                    const QString& sDepend = *iter;
382                    pDepends[iDepend].key   = (char *) sDepend.latin1();
383                    pDepends[iDepend].value = (char *) m_params[sDepend.upper()].value.latin1();
384                    ++iDepend;
385            }
386            // Null terminated.
387            pDepends[iDepend].key   = NULL;
388            pDepends[iDepend].value = NULL;
389    
390            // FIXME: Some parameter dependencies (e.g.ALSA CARD)
391            // are blocking for no reason, causing potential timeout-crashes.
392            // hopefully this gets mitigated if this dependency hell is only
393            // carried out for scratch devices...
394    
395            // Retrieve some modern parameters...
396            lscp_param_info_t *pParamInfo = NULL;
397            switch (m_deviceType) {
398            case qsamplerDevice::Audio:
399                    pParamInfo = ::lscp_get_audio_driver_param_info(pClient,
400                            m_sDriverName.latin1(), sParam.latin1(), pDepends);
401                    break;
402            case qsamplerDevice::Midi:
403                    pParamInfo = ::lscp_get_midi_driver_param_info(pClient,
404                            m_sDriverName.latin1(), sParam.latin1(), pDepends);
405                    break;
406            case qsamplerDevice::None:
407                    break;
408            }
409            if (pParamInfo) {
410                    param = qsamplerDeviceParam(pParamInfo, QString(param.value));
411                    iRefresh++;
412            }
413    
414            // Free used parameter array.
415            delete pDepends;
416    
417            // Return whether the parameters has been changed...
418            return iRefresh;
419  }  }
420    
421    
# Line 384  void qsamplerDevicePort::setDevicePort ( Line 488  void qsamplerDevicePort::setDevicePort (
488          m_iPortID = iPortID;          m_iPortID = iPortID;
489    
490          // Reset port parameters anyway.          // Reset port parameters anyway.
491          m_params.clear();          m_params.clear();
492    
493          // Retrieve device port/channel info, if any.          // Retrieve device port/channel info, if any.
         QString sPrefix = device.driverName() + ' ';  
494          lscp_device_port_info_t *pPortInfo = NULL;          lscp_device_port_info_t *pPortInfo = NULL;
495          switch (device.deviceType()) {          switch (device.deviceType()) {
496          case qsamplerDevice::Audio:          case qsamplerDevice::Audio:
             sPrefix += QObject::tr("Channel");  
497                  pPortInfo = ::lscp_get_audio_channel_info(pClient, device.deviceID(), iPortID);                  pPortInfo = ::lscp_get_audio_channel_info(pClient, device.deviceID(), iPortID);
498                  break;                  break;
499          case qsamplerDevice::Midi:          case qsamplerDevice::Midi:
             sPrefix += QObject::tr("Port");  
500                  pPortInfo = ::lscp_get_midi_port_info(pClient, device.deviceID(), iPortID);                  pPortInfo = ::lscp_get_midi_port_info(pClient, device.deviceID(), iPortID);
501                  break;                  break;
502          case qsamplerDevice::None:          case qsamplerDevice::None:
# Line 409  void qsamplerDevicePort::setDevicePort ( Line 510  void qsamplerDevicePort::setDevicePort (
510          }          }
511    
512          // Set device port/channel properties...          // Set device port/channel properties...
513          sPrefix += " %1:";          m_sPortName += device.driverName() + ' ' + pPortInfo->name;
         m_sPortName = sPrefix.arg(m_iPortID)  + ' ' + pPortInfo->name;  
514    
515          // Grab device port/channel parameters...          // Grab device port/channel parameters...
516          m_params.clear();          m_params.clear();
# Line 475  qsamplerDeviceItem::qsamplerDeviceItem ( Line 575  qsamplerDeviceItem::qsamplerDeviceItem (
575          switch(m_device.deviceType()) {          switch(m_device.deviceType()) {
576          case qsamplerDevice::Audio:          case qsamplerDevice::Audio:
577                  QListViewItem::setPixmap(0, QPixmap::fromMimeSource("audio1.png"));                  QListViewItem::setPixmap(0, QPixmap::fromMimeSource("audio1.png"));
578                  QListViewItem::setText(0, QObject::tr("Audio devices"));                  QListViewItem::setText(0, QObject::tr("Audio Devices"));
579                  break;                  break;
580          case qsamplerDevice::Midi:          case qsamplerDevice::Midi:
581                  QListViewItem::setPixmap(0, QPixmap::fromMimeSource("midi1.png"));                  QListViewItem::setPixmap(0, QPixmap::fromMimeSource("midi1.png"));
582                  QListViewItem::setText(0, QObject::tr("MIDI devices"));                  QListViewItem::setText(0, QObject::tr("MIDI Devices"));
583                  break;                  break;
584          case qsamplerDevice::None:          case qsamplerDevice::None:
585                  break;                  break;
# Line 550  qsamplerDeviceParamTable::qsamplerDevice Line 650  qsamplerDeviceParamTable::qsamplerDevice
650          // Set read-onlyness of each column          // Set read-onlyness of each column
651          QTable::setColumnReadOnly(0, true);          QTable::setColumnReadOnly(0, true);
652          QTable::setColumnReadOnly(1, true);          QTable::setColumnReadOnly(1, true);
653  //  QTable::setColumnReadOnly(2, true); -- of course not.  //  QTable::setColumnReadOnly(2, false); -- of course not.
654          QTable::setColumnStretchable(1, true);          QTable::setColumnStretchable(1, true);
655  }  }
656    
# Line 590  void qsamplerDeviceParamTable::refresh ( Line 690  void qsamplerDeviceParamTable::refresh (
690                                  param.possibilities);                                  param.possibilities);
691                          pComboItem->setCurrentItem(param.value);                          pComboItem->setCurrentItem(param.value);
692                          pComboItem->setEnabled(bEnabled);                          pComboItem->setEnabled(bEnabled);
693                          pComboItem->setEditable(bEnabled && param.multiplicity);                  //      pComboItem->setEditable(bEnabled && param.multiplicity);
694                          QTable::setItem(iRow, 2, pComboItem);                          QTable::setItem(iRow, 2, pComboItem);
695                  } else if (param.type == LSCP_TYPE_INT && bEnabled                  } else if (param.type == LSCP_TYPE_INT && bEnabled
696                                  && !param.range_min.isEmpty()                                  && !param.range_min.isEmpty()

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

  ViewVC Help
Powered by ViewVC