/[svn]/qsampler/trunk/src/qsamplerChannelForm.ui.h
ViewVC logotype

Diff of /qsampler/trunk/src/qsamplerChannelForm.ui.h

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

revision 341 by capela, Tue Jan 18 11:29:01 2005 UTC revision 525 by capela, Mon May 9 10:21:41 2005 UTC
# Line 26  Line 26 
26  #include <qfileinfo.h>  #include <qfileinfo.h>
27  #include <qlistbox.h>  #include <qlistbox.h>
28    
29    #include "qsamplerDeviceForm.h"
30    
31  #include "config.h"  #include "config.h"
32    
33    
34  // Kind of constructor.  // Kind of constructor.
35  void qsamplerChannelForm::init (void)  void qsamplerChannelForm::init (void)
36  {  {
37      // Initialize locals.          // Initialize locals.
38      m_pChannel = NULL;          m_pChannel = NULL;
39    
40            m_iDirtySetup = 0;
41            m_iDirtyCount = 0;
42    
43      m_iDirtySetup = 0;          m_midiDevices.setAutoDelete(true);
44      m_iDirtyCount = 0;          m_audioDevices.setAutoDelete(true);
45    
46      // Try to restore normal window positioning.          m_pDeviceForm = NULL;
47      adjustSize();  
48            // Try to restore normal window positioning.
49            adjustSize();
50  }  }
51    
52    
53  // Kind of destructor.  // Kind of destructor.
54  void qsamplerChannelForm::destroy (void)  void qsamplerChannelForm::destroy (void)
55  {  {
56            if (m_pDeviceForm)
57                    delete m_pDeviceForm;
58            m_pDeviceForm = NULL;
59  }  }
60    
61    
62  // Channel dialog setup formal initializer.  // Channel dialog setup formal initializer.
63  void qsamplerChannelForm::setup ( qsamplerChannel *pChannel )  void qsamplerChannelForm::setup ( qsamplerChannel *pChannel )
64  {  {
65      m_pChannel = pChannel;          m_pChannel = pChannel;
66    
67      m_iDirtySetup = 0;          m_iDirtySetup = 0;
68      m_iDirtyCount = 0;          m_iDirtyCount = 0;
69    
70      if (m_pChannel == NULL)          if (m_pChannel == NULL)
71          return;                  return;
72    
73      // It can be a brand new channel, remember?          // It can be a brand new channel, remember?
74      bool bNew = (m_pChannel->channelID() < 0);          bool bNew = (m_pChannel->channelID() < 0);
75      setCaption(m_pChannel->channelName());          setCaption(m_pChannel->channelName());
76    
77      // Check if we're up and connected.          // Check if we're up and connected.
78      if (m_pChannel->client() == NULL)          if (m_pChannel->client() == NULL)
79          return;                  return;
80    
81      qsamplerOptions *pOptions = m_pChannel->options();          qsamplerOptions *pOptions = m_pChannel->options();
82      if (pOptions == NULL)          if (pOptions == NULL)
83          return;                  return;
84    
85      // Avoid nested changes.          // Avoid nested changes.
86      m_iDirtySetup++;          m_iDirtySetup++;
87    
88      // Load combo box history...          // Load combo box history...
89      pOptions->loadComboBoxHistory(InstrumentFileComboBox);          pOptions->loadComboBoxHistory(InstrumentFileComboBox);
90    
91      // Populate Engines list.          // Populate Engines list.
92      const char **ppszEngines = ::lscp_get_available_engines(m_pChannel->client());          const char **ppszEngines = ::lscp_list_available_engines(m_pChannel->client());
93      if (ppszEngines) {          if (ppszEngines) {
94          EngineNameComboBox->clear();                  EngineNameComboBox->clear();
95          for (int iEngine = 0; ppszEngines[iEngine]; iEngine++)                  for (int iEngine = 0; ppszEngines[iEngine]; iEngine++)
96              EngineNameComboBox->insertItem(ppszEngines[iEngine]);                          EngineNameComboBox->insertItem(ppszEngines[iEngine]);
97      }          }
98      else m_pChannel->appendMessagesClient("lscp_get_available_engines");          else m_pChannel->appendMessagesClient("lscp_list_available_engines");
99    
100      // Populate Audio output type list.          // Populate Audio output type list.
101      const char **ppszAudioDrivers = ::lscp_get_available_audio_drivers(m_pChannel->client());          AudioDriverComboBox->clear();
102      if (ppszAudioDrivers) {          AudioDriverComboBox->insertStringList(
103          AudioDriverComboBox->clear();                  qsamplerDevice::getDrivers(m_pChannel->client(), qsamplerDevice::Audio));
104          for (int iAudioDriver = 0; ppszAudioDrivers[iAudioDriver]; iAudioDriver++)  
105              AudioDriverComboBox->insertItem(ppszAudioDrivers[iAudioDriver]);          // Populate MIDI input type list.
106      }          MidiDriverComboBox->clear();
107      else m_pChannel->appendMessagesClient("lscp_get_available_audio_drivers");          MidiDriverComboBox->insertStringList(
108                    qsamplerDevice::getDrivers(m_pChannel->client(), qsamplerDevice::Midi));
109      // Populate MIDI input type list.  
110      const char **ppszMidiDrivers = ::lscp_get_available_midi_drivers(m_pChannel->client());          // Read proper channel information,
111      if (ppszMidiDrivers) {          // and populate the channel form fields.
112          MidiDriverComboBox->clear();  
113          for (int iMidiDriver = 0; ppszMidiDrivers[iMidiDriver]; iMidiDriver++)          // Engine name...
114              MidiDriverComboBox->insertItem(ppszMidiDrivers[iMidiDriver]);          QString sEngineName = pChannel->engineName();
115      }          if (sEngineName.isEmpty() || bNew)
116      else m_pChannel->appendMessagesClient("lscp_get_available_midi_drivers");                  sEngineName = pOptions->sEngineName;
117            if (sEngineName.isEmpty())
118      // Read proper channel information,                  sEngineName = qsamplerChannel::noEngineName();
119      // and populate the channel form fields.          if (EngineNameComboBox->listBox()->findItem(sEngineName,
120                            Qt::ExactMatch | Qt::CaseSensitive) == NULL) {
121      // Engine name...                  EngineNameComboBox->insertItem(sEngineName);
122      QString sEngineName = pChannel->engineName();          }
123      if (sEngineName.isEmpty() && bNew)          EngineNameComboBox->setCurrentText(sEngineName);
124          sEngineName = pOptions->sEngineName;          // Instrument filename and index...
125      if (sEngineName.isEmpty())          QString sInstrumentFile = pChannel->instrumentFile();
126          sEngineName = tr("(No engine)");          if (sInstrumentFile.isEmpty())
127      if (EngineNameComboBox->listBox()->findItem(sEngineName, Qt::ExactMatch) == NULL)                  sInstrumentFile = qsamplerChannel::noInstrumentName();
128          EngineNameComboBox->insertItem(sEngineName);          InstrumentFileComboBox->setCurrentText(sInstrumentFile);
129      EngineNameComboBox->setCurrentText(sEngineName);          InstrumentNrComboBox->clear();
130      // Instrument filename and index...          InstrumentNrComboBox->insertStringList(
131      QString sInstrumentFile = pChannel->instrumentFile();                  qsamplerChannel::getInstrumentList(sInstrumentFile,
132      if (sInstrumentFile.isEmpty())                  pOptions->bInstrumentNames));
133          sInstrumentFile = tr("(No instrument)");          InstrumentNrComboBox->setCurrentItem(pChannel->instrumentNr());
134      InstrumentFileComboBox->setCurrentText(sInstrumentFile);  
135      InstrumentNrComboBox->clear();          // MIDI input device...
136      InstrumentNrComboBox->insertStringList(qsamplerChannel::getInstrumentList(sInstrumentFile));          qsamplerDevice midiDevice(m_pChannel->mainForm(),
137      InstrumentNrComboBox->setCurrentItem(pChannel->instrumentNr());                  qsamplerDevice::Midi, m_pChannel->midiDevice());
138      // MIDI input driver...          // MIDI input driver...
139      QString sMidiDriver = pChannel->midiDriver();          QString sMidiDriver = midiDevice.driverName();
140      if (sMidiDriver.isEmpty() || bNew)          if (sMidiDriver.isEmpty() || bNew)
141          sMidiDriver = pOptions->sMidiDriver;                  sMidiDriver = pOptions->sMidiDriver.upper();
142      if (!sMidiDriver.isEmpty()) {          if (!sMidiDriver.isEmpty()) {
143          if (MidiDriverComboBox->listBox()->findItem(sMidiDriver, Qt::ExactMatch) == NULL)                  if (MidiDriverComboBox->listBox()->findItem(sMidiDriver,
144              MidiDriverComboBox->insertItem(sMidiDriver);                                  Qt::ExactMatch | Qt::CaseSensitive) == NULL) {
145          MidiDriverComboBox->setCurrentText(sMidiDriver);                          MidiDriverComboBox->insertItem(sMidiDriver);
146      }                  }
147      // MIDI input port...                  MidiDriverComboBox->setCurrentText(sMidiDriver);
148      MidiPortSpinBox->setValue(pChannel->midiPort());          }
149      // MIDI input channel...          selectMidiDriverItem(sMidiDriver);
150      int iMidiChannel = pChannel->midiChannel();          if (!bNew)
151      // When new, try to suggest a sensible MIDI channel...                  MidiDeviceComboBox->setCurrentText(midiDevice.deviceName());
152      if (iMidiChannel < 0)          selectMidiDeviceItem(MidiDeviceComboBox->currentItem());
153          iMidiChannel = (::lscp_get_channels(m_pChannel->client()) % 16);          // MIDI input port...
154      MidiChannelComboBox->setCurrentItem(iMidiChannel);          MidiPortSpinBox->setValue(pChannel->midiPort());
155      // Audio output driver...          // MIDI input channel...
156      QString sAudioDriver = pChannel->audioDriver();          int iMidiChannel = pChannel->midiChannel();
157      if (sAudioDriver.isEmpty() || bNew)          // When new, try to suggest a sensible MIDI channel...
158          sAudioDriver = pOptions->sAudioDriver;          if (iMidiChannel < 0)
159      if (!sAudioDriver.isEmpty()) {                  iMidiChannel = (::lscp_get_channels(m_pChannel->client()) % 16);
160          if (AudioDriverComboBox->listBox()->findItem(sAudioDriver, Qt::ExactMatch) == NULL)          MidiChannelComboBox->setCurrentItem(iMidiChannel);
161              AudioDriverComboBox->insertItem(sAudioDriver);  
162          AudioDriverComboBox->setCurrentText(sAudioDriver);          // Audio output device...
163      }          qsamplerDevice audioDevice(m_pChannel->mainForm(),
164      // Done.                  qsamplerDevice::Audio, m_pChannel->audioDevice());
165      m_iDirtySetup--;          // Audio output driver...
166      stabilizeForm();          QString sAudioDriver = audioDevice.driverName();
167            if (sAudioDriver.isEmpty() || bNew)
168                    sAudioDriver = pOptions->sAudioDriver.upper();
169            if (!sAudioDriver.isEmpty()) {
170                    if (AudioDriverComboBox->listBox()->findItem(sAudioDriver,
171                                    Qt::ExactMatch | Qt::CaseSensitive) == NULL) {
172                            AudioDriverComboBox->insertItem(sAudioDriver);
173                    }
174                    AudioDriverComboBox->setCurrentText(sAudioDriver);
175            }
176            selectAudioDriverItem(sAudioDriver);
177            if (!bNew)
178                    AudioDeviceComboBox->setCurrentText(audioDevice.deviceName());
179            selectAudioDeviceItem(AudioDeviceComboBox->currentItem());
180    
181            // As convenient, make it ready on stabilizeForm() for
182            // prompt acceptance, if we got the minimum required...
183            if (sEngineName != qsamplerChannel::noEngineName() &&
184                    sInstrumentFile != qsamplerChannel::noInstrumentName())
185                    m_iDirtyCount++;
186            // Done.
187            m_iDirtySetup--;
188            stabilizeForm();
189  }  }
190    
191    
192  // Accept settings (OK button slot).  // Accept settings (OK button slot).
193  void qsamplerChannelForm::accept (void)  void qsamplerChannelForm::accept (void)
194  {  {
195      if (m_pChannel == NULL)          if (m_pChannel == NULL)
196          return;                  return;
197    
198      qsamplerOptions *pOptions = m_pChannel->options();          qsamplerOptions *pOptions = m_pChannel->options();
199      if (pOptions == NULL)          if (pOptions == NULL)
200          return;                  return;
201    
202      // We'll go for it!          // We'll go for it!
203      if (m_iDirtyCount > 0) {          if (m_iDirtyCount > 0) {
204          int iErrors = 0;                  int iErrors = 0;
205          // Are we a new channel?                  // Are we a new channel?
206          if (!m_pChannel->addChannel())                  if (!m_pChannel->addChannel())
207              iErrors++;                          iErrors++;
208          // Audio output driver type...                  // Accept Audio driver or device selection...
209          if (!m_pChannel->setAudioDriver(AudioDriverComboBox->currentText()))                  if (m_audioDevices.isEmpty()) {
210              iErrors++;                          if (!m_pChannel->setAudioDriver(AudioDriverComboBox->currentText()))
211          // MIDI input driver type...                                  iErrors++;
212          if (!m_pChannel->setMidiDriver(MidiDriverComboBox->currentText()))                  } else {
213              iErrors++;                          qsamplerDevice *pDevice = m_audioDevices.at(AudioDeviceComboBox->currentItem());
214          // MIDI input port number...                          if (pDevice == NULL)
215          if (!m_pChannel->setMidiPort(MidiPortSpinBox->value()))                                  iErrors++;
216              iErrors++;                          else if (!m_pChannel->setAudioDevice(pDevice->deviceID()))
217          // MIDI input channel...                                  iErrors++;
218          if (!m_pChannel->setMidiChannel(MidiChannelComboBox->currentItem()))                  }
219              iErrors++;                  // Accept MIDI driver or device selection...
220          // Engine name...                  if (m_midiDevices.isEmpty()) {
221          if (!m_pChannel->loadEngine(EngineNameComboBox->currentText()))                          if (!m_pChannel->setMidiDriver(MidiDriverComboBox->currentText()))
222              iErrors++;                                  iErrors++;
223          // Instrument file and index...                  } else {
224          if (!m_pChannel->loadInstrument(InstrumentFileComboBox->currentText(), InstrumentNrComboBox->currentItem()))                          qsamplerDevice *pDevice = m_midiDevices.at(MidiDeviceComboBox->currentItem());
225              iErrors++;                          if (pDevice == NULL)
226          // Show error messages?                                  iErrors++;
227          if (iErrors > 0)                          else if (!m_pChannel->setMidiDevice(pDevice->deviceID()))
228              m_pChannel->appendMessagesError(tr("Some channel settings could not be set.\n\nSorry."));                                  iErrors++;
229      }                  }
230                    // MIDI input port number...
231      // Save default engine name, instrument directory and history...                  if (!m_pChannel->setMidiPort(MidiPortSpinBox->value()))
232      pOptions->sInstrumentDir = QFileInfo(InstrumentFileComboBox->currentText()).dirPath(true);                          iErrors++;
233      pOptions->sEngineName  = EngineNameComboBox->currentText();                  // MIDI input channel...
234      pOptions->sAudioDriver = AudioDriverComboBox->currentText();                  if (!m_pChannel->setMidiChannel(MidiChannelComboBox->currentItem()))
235      pOptions->sMidiDriver  = MidiDriverComboBox->currentText();                          iErrors++;
236      pOptions->saveComboBoxHistory(InstrumentFileComboBox);                  // Engine name...
237                    if (!m_pChannel->loadEngine(EngineNameComboBox->currentText()))
238                            iErrors++;
239                    // Instrument file and index...
240                    if (!m_pChannel->loadInstrument(InstrumentFileComboBox->currentText(), InstrumentNrComboBox->currentItem()))
241                            iErrors++;
242                    // Show error messages?
243                    if (iErrors > 0)
244                            m_pChannel->appendMessagesError(tr("Some channel settings could not be set.\n\nSorry."));
245            }
246    
247            // Save default engine name, instrument directory and history...
248            pOptions->sInstrumentDir = QFileInfo(InstrumentFileComboBox->currentText()).dirPath(true);
249            pOptions->sEngineName  = EngineNameComboBox->currentText();
250            pOptions->sAudioDriver = AudioDriverComboBox->currentText();
251            pOptions->sMidiDriver  = MidiDriverComboBox->currentText();
252            pOptions->saveComboBoxHistory(InstrumentFileComboBox);
253    
254      // Just go with dialog acceptance.          // Just go with dialog acceptance.
255      QDialog::accept();          QDialog::accept();
256  }  }
257    
258    
259  // Reject settings (Cancel button slot).  // Reject settings (Cancel button slot).
260  void qsamplerChannelForm::reject (void)  void qsamplerChannelForm::reject (void)
261  {  {
262      bool bReject = true;          bool bReject = true;
263    
264      // Check if there's any pending changes...          // Check if there's any pending changes...
265      if (m_iDirtyCount > 0 && OkPushButton->isEnabled()) {          if (m_iDirtyCount > 0 && OkPushButton->isEnabled()) {
266          switch (QMessageBox::warning(this, tr("Warning"),                  switch (QMessageBox::warning(this, tr("Warning"),
267              tr("Some channel settings have been changed.\n\n"                          tr("Some channel settings have been changed.\n\n"
268                 "Do you want to apply the changes?"),                          "Do you want to apply the changes?"),
269              tr("Apply"), tr("Discard"), tr("Cancel"))) {                          tr("Apply"), tr("Discard"), tr("Cancel"))) {
270          case 0:     // Apply...                  case 0:     // Apply...
271              accept();                          accept();
272              return;                          return;
273          case 1:     // Discard                  case 1:     // Discard
274              break;                          break;
275          default:    // Cancel.                  default:    // Cancel.
276              bReject = false;                          bReject = false;
277          }                  }
278      }          }
279    
280      if (bReject)          if (bReject)
281          QDialog::reject();                  QDialog::reject();
282  }  }
283    
284    
285  // Browse and open an instrument file.  // Browse and open an instrument file.
286  void qsamplerChannelForm::openInstrumentFile (void)  void qsamplerChannelForm::openInstrumentFile (void)
287  {  {
288      qsamplerOptions *pOptions = m_pChannel->options();          qsamplerOptions *pOptions = m_pChannel->options();
289      if (pOptions == NULL)          if (pOptions == NULL)
290          return;                  return;
291    
292      // FIXME: the instrument file filters should be restricted,          // FIXME: the instrument file filters should be restricted,
293      // depending on the current engine.          // depending on the current engine.
294      QString sInstrumentFile = QFileDialog::getOpenFileName(          QString sInstrumentFile = QFileDialog::getOpenFileName(
295              pOptions->sInstrumentDir,                   // Start here.                          pOptions->sInstrumentDir,                   // Start here.
296              tr("Instrument files") + " (*.gig *.dls)",  // Filter (GIG and DLS files)                          tr("Instrument files") + " (*.gig *.dls)",  // Filter (GIG and DLS files)
297              this, 0,                                    // Parent and name (none)                          this, 0,                                    // Parent and name (none)
298              tr("Instrument files")                      // Caption.                          tr("Instrument files")                      // Caption.
299      );          );
300    
301      if (sInstrumentFile.isEmpty())          if (sInstrumentFile.isEmpty())
302          return;                  return;
303    
304      InstrumentFileComboBox->setCurrentText(sInstrumentFile);          InstrumentFileComboBox->setCurrentText(sInstrumentFile);
305            updateInstrumentName();
306  }  }
307    
308    
309  // Refresh the actual instrument name.  // Refresh the actual instrument name.
310  void qsamplerChannelForm::updateInstrumentName (void)  void qsamplerChannelForm::updateInstrumentName (void)
311  {  {
312      qsamplerOptions *pOptions = m_pChannel->options();          qsamplerOptions *pOptions = m_pChannel->options();
313      if (pOptions == NULL)          if (pOptions == NULL)
314          return;                  return;
315    
316      // Finally this better idea would be to use libgig          // Finally this better idea would be to use libgig
317      // to retrieve the REAL instrument names.          // to retrieve the REAL instrument names.
318      InstrumentNrComboBox->clear();          InstrumentNrComboBox->clear();
319      InstrumentNrComboBox->insertStringList(          InstrumentNrComboBox->insertStringList(
320          qsamplerChannel::getInstrumentList(InstrumentFileComboBox->currentText())                  qsamplerChannel::getInstrumentList(
321      );                          InstrumentFileComboBox->currentText(),
322                            pOptions->bInstrumentNames)
323            );
324    
325            optionsChanged();
326    }
327    
328      optionsChanged();  // Show device options dialog.
329    void qsamplerChannelForm::setupDevice ( qsamplerDevice *pDevice,
330            qsamplerDevice::qsamplerDeviceType deviceTypeMode,
331            const QString& sDriverName )
332    {
333            // Create the device form if not already...
334            if (m_pDeviceForm == NULL) {
335                    m_pDeviceForm = new qsamplerDeviceForm(this, 0,
336                            WType_Dialog | WShowModal);
337                    m_pDeviceForm->setMainForm(m_pChannel->mainForm());
338                    QObject::connect(m_pDeviceForm, SIGNAL(devicesChanged()),
339                            this, SLOT(updateDevices()));
340            }
341    
342            // Refresh the device form with selected data.
343            if (m_pDeviceForm) {
344                    m_pDeviceForm->setDeviceTypeMode(deviceTypeMode);
345                    m_pDeviceForm->setClient(m_pChannel->client()); // -> refreshDevices();
346                    m_pDeviceForm->setDevice(pDevice);
347                    m_pDeviceForm->setDriverName(sDriverName);
348                    m_pDeviceForm->show();
349            }
350  }  }
351    
352    
353    // Refresh MIDI driver item devices.
354    void qsamplerChannelForm::selectMidiDriverItem ( const QString& sMidiDriver )
355    {
356            const QString sDriverName = sMidiDriver.upper();
357    
358            // Save current device id.
359            int iDeviceID = -1;
360            qsamplerDevice *pDevice = m_midiDevices.at(MidiDeviceComboBox->currentItem());
361            if (pDevice)
362                    iDeviceID = pDevice->deviceID();
363    
364            // Clean maplist.
365            MidiDeviceComboBox->clear();
366            m_midiDevices.clear();
367    
368            // Populate with the current ones...
369            const QPixmap& midiPixmap = QPixmap::fromMimeSource("midi2.png");
370            int *piDeviceIDs = qsamplerDevice::getDevices(m_pChannel->client(),
371                    qsamplerDevice::Midi);
372            for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
373                    pDevice = new qsamplerDevice(m_pChannel->mainForm(),
374                            qsamplerDevice::Midi, piDeviceIDs[i]);
375                    if (pDevice->driverName().upper() == sDriverName) {
376                            MidiDeviceComboBox->insertItem(midiPixmap, pDevice->deviceName());
377                            m_midiDevices.append(pDevice);
378                    } else {
379                            delete pDevice;
380                    }
381            }
382    
383            // Do proper enabling...
384            bool bEnabled = !m_midiDevices.isEmpty();
385            if (!bEnabled) {
386                    MidiDeviceComboBox->insertItem(
387                            tr("(New MIDI %1 device)").arg(sMidiDriver));
388            } else if (iDeviceID >= 0) {
389                    // Select the previous current device...
390                    int iMidiItem = 0;
391                    for (pDevice = m_midiDevices.first();
392                                    pDevice;
393                                            pDevice = m_midiDevices.next()) {
394                            if (pDevice->deviceID() == iDeviceID) {
395                                    MidiDeviceComboBox->setCurrentItem(iMidiItem);
396                            //      selectMidiDeviceItem(iMidiItem);
397                                    break;
398                            }
399                            iMidiItem++;
400                    }
401            }
402            MidiDeviceTextLabel->setEnabled(bEnabled);
403            MidiDeviceComboBox->setEnabled(bEnabled);
404    }
405    
406    
407    // Refresh MIDI device options slot.
408    void qsamplerChannelForm::selectMidiDriver ( const QString& sMidiDriver )
409    {
410            if (m_iDirtySetup > 0)
411                    return;
412    
413            selectMidiDriverItem(sMidiDriver);
414            optionsChanged();
415    }
416    
417    
418    // Select MIDI device item.
419    void qsamplerChannelForm::selectMidiDeviceItem ( int iMidiItem )
420    {
421            qsamplerDevice *pDevice = m_midiDevices.at(iMidiItem);
422            if (pDevice) {
423                    const qsamplerDeviceParamMap& params = pDevice->params();
424                    int iPorts = params["PORTS"].value.toInt();
425                    MidiPortTextLabel->setEnabled(iPorts > 0);
426                    MidiPortSpinBox->setEnabled(iPorts > 0);
427                    if (iPorts > 0)
428                            MidiPortSpinBox->setMaxValue(iPorts - 1);
429            }
430    }
431    
432    
433    // Select MIDI device options slot.
434    void qsamplerChannelForm::selectMidiDevice ( int iMidiItem )
435    {
436            if (m_iDirtySetup > 0)
437                    return;
438    
439            selectMidiDeviceItem(iMidiItem);
440            optionsChanged();
441    }
442    
443    
444    // MIDI device options.
445    void qsamplerChannelForm::setupMidiDevice (void)
446    {
447            setupDevice(m_midiDevices.at(MidiDeviceComboBox->currentItem()),
448                    qsamplerDevice::Midi, MidiDriverComboBox->currentText());
449    }
450    
451    
452    // Refresh Audio driver item devices.
453    void qsamplerChannelForm::selectAudioDriverItem ( const QString& sAudioDriver )
454    {
455            const QString sDriverName = sAudioDriver.upper();
456    
457            // Save current device id.
458            int iDeviceID = -1;
459            qsamplerDevice *pDevice = m_audioDevices.at(AudioDeviceComboBox->currentItem());
460            if (pDevice)
461                    iDeviceID = pDevice->deviceID();
462    
463            // Clean maplist.
464            AudioDeviceComboBox->clear();
465            m_audioDevices.clear();
466    
467            // Populate with the current ones...
468            const QPixmap& audioPixmap = QPixmap::fromMimeSource("audio2.png");
469            int *piDeviceIDs = qsamplerDevice::getDevices(m_pChannel->client(),
470                    qsamplerDevice::Audio);
471            for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
472                    pDevice = new qsamplerDevice(m_pChannel->mainForm(),
473                            qsamplerDevice::Audio, piDeviceIDs[i]);
474                    if (pDevice->driverName().upper() == sDriverName) {
475                            AudioDeviceComboBox->insertItem(audioPixmap, pDevice->deviceName());
476                            m_audioDevices.append(pDevice);
477                    } else {
478                            delete pDevice;
479                    }
480            }
481    
482            // Do proper enabling...
483            bool bEnabled = !m_audioDevices.isEmpty();
484            if (!bEnabled) {
485                    AudioDeviceComboBox->insertItem(
486                            tr("(New Audio %1 device)").arg(sAudioDriver));
487            } else if (iDeviceID >= 0) {
488                    // Select the previous current device...
489                    int iAudioItem = 0;
490                    for (pDevice = m_audioDevices.first();
491                                    pDevice;
492                                            pDevice = m_audioDevices.next()) {
493                            if (pDevice->deviceID() == iDeviceID) {
494                                    AudioDeviceComboBox->setCurrentItem(iAudioItem);
495                            //      selectAudioDeviceItem(iAudioItem);
496                                    break;
497                            }
498                            iAudioItem++;
499                    }
500            }
501            AudioDeviceTextLabel->setEnabled(bEnabled);
502            AudioDeviceComboBox->setEnabled(bEnabled);
503    }
504    
505    
506    // Refresh Audio device options slot.
507    void qsamplerChannelForm::selectAudioDriver ( const QString& sAudioDriver )
508    {
509            if (m_iDirtySetup > 0)
510                    return;
511    
512            selectAudioDriverItem(sAudioDriver);
513            optionsChanged();
514    }
515    
516    
517    // Select Audio device item.
518    void qsamplerChannelForm::selectAudioDeviceItem ( int iAudioItem )
519    {
520            qsamplerDevice *pDevice = m_audioDevices.at(iAudioItem);
521            if (pDevice) {
522                    // Is there anything to do here?
523            }
524    }
525    
526    
527    // Select Audio device options slot.
528    void qsamplerChannelForm::selectAudioDevice ( int iAudioItem )
529    {
530            if (m_iDirtySetup > 0)
531                    return;
532    
533            selectAudioDeviceItem(iAudioItem);
534            optionsChanged();
535    }
536    
537    
538    // Audio device options.
539    void qsamplerChannelForm::setupAudioDevice (void)
540    {
541            setupDevice(m_audioDevices.at(AudioDeviceComboBox->currentItem()),
542                    qsamplerDevice::Audio, AudioDriverComboBox->currentText());
543    }
544    
545    
546    // UPdate all device lists slot.
547    void qsamplerChannelForm::updateDevices (void)
548    {
549            if (m_iDirtySetup > 0)
550                    return;
551    
552            selectMidiDriverItem(MidiDriverComboBox->currentText());
553            selectAudioDriverItem(AudioDriverComboBox->currentText());
554            optionsChanged();
555    }
556    
557    
558  // Dirty up settings.  // Dirty up settings.
559  void qsamplerChannelForm::optionsChanged (void)  void qsamplerChannelForm::optionsChanged (void)
560  {  {
561      if (m_iDirtySetup > 0)          if (m_iDirtySetup > 0)
562          return;                  return;
563    
564      m_iDirtyCount++;          m_iDirtyCount++;
565      stabilizeForm();          stabilizeForm();
566  }  }
567    
568    
569  // Stabilize current form state.  // Stabilize current form state.
570  void qsamplerChannelForm::stabilizeForm (void)  void qsamplerChannelForm::stabilizeForm (void)
571  {  {
572      const QString& sFilename = InstrumentFileComboBox->currentText();          const QString& sFilename = InstrumentFileComboBox->currentText();
573      OkPushButton->setEnabled(m_iDirtyCount > 0 && !sFilename.isEmpty() && QFileInfo(sFilename).exists());          OkPushButton->setEnabled(m_iDirtyCount > 0 && !sFilename.isEmpty() && QFileInfo(sFilename).exists());
574  }  }
575    
576    
577  // end of qsamplerChannelForm.ui.h  // end of qsamplerChannelForm.ui.h
   

Legend:
Removed from v.341  
changed lines
  Added in v.525

  ViewVC Help
Powered by ViewVC