/[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 467 by capela, Tue Mar 15 23:54:14 2005 UTC
# 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            // Refresh all parameters that have dependencies...
306            int iParams = 0;
307            qsamplerDeviceParamMap::ConstIterator iter;
308            for (iter = m_params.begin(); iter != m_params.end(); ++iter)
309                    iParams += refreshParam(pClient, iter.key());
310            // Return how many parameters have been refreshed...
311            return iParams;
312    }
313    
314    
315  // Device port/channel list refreshner.  // Device port/channel list refreshner.
316  void qsamplerDevice::refresh ( lscp_client_t *pClient )  int qsamplerDevice::refreshPorts ( lscp_client_t *pClient )
317  {  {
318          // Port/channel count determination...          // Port/channel count determination...
319          int iPorts = 0;          int iPorts = 0;
# Line 307  void qsamplerDevice::refresh ( lscp_clie Line 327  void qsamplerDevice::refresh ( lscp_clie
327          case qsamplerDevice::None:          case qsamplerDevice::None:
328                  break;                  break;
329          }          }
   
330          // Retrieve port/channel information...          // Retrieve port/channel information...
331          m_ports.clear();          m_ports.clear();
332          for (int iPort = 0; iPort < iPorts; iPort++)          for (int iPort = 0; iPort < iPorts; iPort++)
333                  m_ports.append(new qsamplerDevicePort(pClient, *this, iPort));                  m_ports.append(new qsamplerDevicePort(pClient, *this, iPort));
334            // Return how many ports have been refreshed...
335            return iPorts;
336    }
337    
338    
339    // Refresh/set dependencies given that some parameter has changed.
340    int qsamplerDevice::refreshDepends ( lscp_client_t *pClient,
341            const QString& sParam )
342    {
343            // Refresh all parameters that depend on this one...
344            int iDepends = 0;
345            qsamplerDeviceParamMap::ConstIterator iter;
346            for (iter = m_params.begin(); iter != m_params.end(); ++iter) {
347                    const QStringList& depends = iter.data().depends;
348                    if (depends.find(sParam) != depends.end())
349                            iDepends += refreshParam(pClient, iter.key());
350            }
351            // Return how many dependencies have been refreshed...
352            return iDepends;
353    }
354    
355    
356    // Refresh/set given parameter based on driver supplied dependencies.
357    int qsamplerDevice::refreshParam ( lscp_client_t *pClient,
358            const QString& sParam )
359    {
360            // Check if we have dependencies...
361            qsamplerDeviceParam& param = m_params[sParam.upper()];
362            if (param.depends.isEmpty())
363                    return 0;
364    
365            int iRefresh = 0;
366    
367            // Build dependency list...
368            lscp_param_t *pDepends = new lscp_param_t [param.depends.count() + 1];
369            int iDepend = 0;
370            QStringList::ConstIterator iter;
371            for (iter = param.depends.begin(); iter != param.depends.end(); ++iter) {
372                    const QString& sDepend = *iter;
373                    pDepends[iDepend].key   = (char *) sDepend.latin1();
374                    pDepends[iDepend].value = (char *) m_params[sDepend.upper()].value.latin1();
375                    ++iDepend;
376            }
377            // Null terminated.
378            pDepends[iDepend].key   = NULL;
379            pDepends[iDepend].value = NULL;
380    
381    #if 0
382            // FIXME: Some parameter dependencies (e.g.ALSA CARD)
383            // are blocking for no reason, causing timeout-crashes.
384    
385            // Retrieve some modern parameters...
386            lscp_param_info_t *pParamInfo = NULL;
387            switch (m_deviceType) {
388            case qsamplerDevice::Audio:
389                    pParamInfo = ::lscp_get_audio_driver_param_info(pClient,
390                            m_sDriverName.latin1(), sParam.latin1(), pDepends);
391                    break;
392            case qsamplerDevice::Midi:
393                    pParamInfo = ::lscp_get_midi_driver_param_info(pClient,
394                            m_sDriverName.latin1(), sParam.latin1(), pDepends);
395                    break;
396            case qsamplerDevice::None:
397                    break;
398            }
399            if (pParamInfo) {
400                    param = qsamplerDeviceParam(pParamInfo, QString(param.value));
401                    iRefresh++;
402            }
403    #endif
404            // Free used parameter array.
405            delete pDepends;
406    
407            // Return whether the parameters has been changed...
408            return iRefresh;
409  }  }
410    
411    
# Line 384  void qsamplerDevicePort::setDevicePort ( Line 478  void qsamplerDevicePort::setDevicePort (
478          m_iPortID = iPortID;          m_iPortID = iPortID;
479    
480          // Reset port parameters anyway.          // Reset port parameters anyway.
481          m_params.clear();          m_params.clear();
482    
483          // Retrieve device port/channel info, if any.          // Retrieve device port/channel info, if any.
484          QString sPrefix = device.driverName() + ' ';          QString sPrefix = device.driverName() + ' ';
485          lscp_device_port_info_t *pPortInfo = NULL;          lscp_device_port_info_t *pPortInfo = NULL;
486          switch (device.deviceType()) {          switch (device.deviceType()) {
487          case qsamplerDevice::Audio:          case qsamplerDevice::Audio:
488              sPrefix += QObject::tr("Channel");                  sPrefix += QObject::tr("Channel");
489                  pPortInfo = ::lscp_get_audio_channel_info(pClient, device.deviceID(), iPortID);                  pPortInfo = ::lscp_get_audio_channel_info(pClient, device.deviceID(), iPortID);
490                  break;                  break;
491          case qsamplerDevice::Midi:          case qsamplerDevice::Midi:
492              sPrefix += QObject::tr("Port");                  sPrefix += QObject::tr("Port");
493                  pPortInfo = ::lscp_get_midi_port_info(pClient, device.deviceID(), iPortID);                  pPortInfo = ::lscp_get_midi_port_info(pClient, device.deviceID(), iPortID);
494                  break;                  break;
495          case qsamplerDevice::None:          case qsamplerDevice::None:

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

  ViewVC Help
Powered by ViewVC