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

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

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

revision 1558 by capela, Thu Dec 6 09:35:33 2007 UTC revision 3385 by capela, Fri Dec 1 19:23:47 2017 UTC
# Line 1  Line 1 
1  // qsamplerChannelForm.cpp  // qsamplerChannelForm.cpp
2  //  //
3  /****************************************************************************  /****************************************************************************
4     Copyright (C) 2004-2007, rncbc aka Rui Nuno Capela. All rights reserved.     Copyright (C) 2004-2016, rncbc aka Rui Nuno Capela. All rights reserved.
5     Copyright (C) 2007, Christian Schoenebeck     Copyright (C) 2007, 2008 Christian Schoenebeck
6    
7     This program is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License     modify it under the terms of the GNU General Public License
# Line 58  ChannelForm::ChannelForm ( QWidget* pPar Line 58  ChannelForm::ChannelForm ( QWidget* pPar
58    
59          m_pDeviceForm = NULL;          m_pDeviceForm = NULL;
60    
61          int iRowHeight = m_ui.AudioRoutingTable->fontMetrics().height() + 4;          const int iRowHeight = m_ui.AudioRoutingTable->fontMetrics().height() + 4;
62          m_ui.AudioRoutingTable->verticalHeader()->setDefaultSectionSize(iRowHeight);          m_ui.AudioRoutingTable->verticalHeader()->setDefaultSectionSize(iRowHeight);
63          m_ui.AudioRoutingTable->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);          m_ui.AudioRoutingTable->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
64    
65          m_ui.AudioRoutingTable->setModel(&m_routingModel);          m_ui.AudioRoutingTable->setModel(&m_routingModel);
66          m_ui.AudioRoutingTable->setItemDelegate(&m_routingDelegate);          m_ui.AudioRoutingTable->setItemDelegate(&m_routingDelegate);
67    #if QT_VERSION >= 0x050000
68            m_ui.AudioRoutingTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
69    #else
70          m_ui.AudioRoutingTable->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch);          m_ui.AudioRoutingTable->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch);
71    #endif
72  //      m_ui.AudioRoutingTable->verticalHeader()->hide();  //      m_ui.AudioRoutingTable->verticalHeader()->hide();
73    
74          // This goes initially hidden, and will be shown          // This goes initially hidden, and will be shown
# Line 78  ChannelForm::ChannelForm ( QWidget* pPar Line 82  ChannelForm::ChannelForm ( QWidget* pPar
82                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
83                  SLOT(optionsChanged()));                  SLOT(optionsChanged()));
84          QObject::connect(m_ui.InstrumentFileComboBox,          QObject::connect(m_ui.InstrumentFileComboBox,
85                    SIGNAL(editTextChanged(const QString&)),
86                    SLOT(updateInstrumentName()));
87            QObject::connect(m_ui.InstrumentFileComboBox,
88                  SIGNAL(activated(const QString&)),                  SIGNAL(activated(const QString&)),
89                  SLOT(updateInstrumentName()));                  SLOT(updateInstrumentName()));
90          QObject::connect(m_ui.InstrumentFileToolButton,          QObject::connect(m_ui.InstrumentFileToolButton,
# Line 107  ChannelForm::ChannelForm ( QWidget* pPar Line 114  ChannelForm::ChannelForm ( QWidget* pPar
114          QObject::connect(m_ui.AudioDeviceComboBox,          QObject::connect(m_ui.AudioDeviceComboBox,
115                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
116                  SLOT(selectAudioDevice(int)));                  SLOT(selectAudioDevice(int)));
117          QObject::connect(m_ui.OkPushButton,          QObject::connect(m_ui.DialogButtonBox,
118                  SIGNAL(clicked()),                  SIGNAL(accepted()),
119                  SLOT(accept()));                  SLOT(accept()));
120          QObject::connect(m_ui.CancelPushButton,          QObject::connect(m_ui.DialogButtonBox,
121                  SIGNAL(clicked()),                  SIGNAL(rejected()),
122                  SLOT(reject()));                  SLOT(reject()));
123          QObject::connect(m_ui.MidiDeviceToolButton,          QObject::connect(m_ui.MidiDeviceToolButton,
124                  SIGNAL(clicked()),                  SIGNAL(clicked()),
# Line 119  ChannelForm::ChannelForm ( QWidget* pPar Line 126  ChannelForm::ChannelForm ( QWidget* pPar
126          QObject::connect(m_ui.AudioDeviceToolButton,          QObject::connect(m_ui.AudioDeviceToolButton,
127                  SIGNAL(clicked()),                  SIGNAL(clicked()),
128                  SLOT(setupAudioDevice()));                  SLOT(setupAudioDevice()));
129    
130          QObject::connect(&m_routingModel,          QObject::connect(&m_routingModel,
131                  SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),                  SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),
132                  SLOT(optionsChanged()));                  SLOT(optionsChanged()));
# Line 156  void ChannelForm::setup ( Channel *pChan Line 164  void ChannelForm::setup ( Channel *pChan
164                  return;                  return;
165    
166          // It can be a brand new channel, remember?          // It can be a brand new channel, remember?
167          bool bNew = (m_pChannel->channelID() < 0);          const bool bNew = (m_pChannel->channelID() < 0);
168          setWindowTitle(QSAMPLER_TITLE ": " + m_pChannel->channelName());          setWindowTitle(QSAMPLER_TITLE ": " + m_pChannel->channelName());
169    
170          // Check if we're up and connected.          // Check if we're up and connected.
# Line 175  void ChannelForm::setup ( Channel *pChan Line 183  void ChannelForm::setup ( Channel *pChan
183    
184          // Load combo box history...          // Load combo box history...
185          pOptions->loadComboBoxHistory(m_ui.InstrumentFileComboBox);          pOptions->loadComboBoxHistory(m_ui.InstrumentFileComboBox);
186            // Remove non-existant instrument file-paths...
187            int i = m_ui.InstrumentFileComboBox->count() - 1;
188            while (i >= 0) {
189                    const QString& sInstrumentFile
190                            = m_ui.InstrumentFileComboBox->itemText(i);
191                    if (sInstrumentFile.isEmpty()
192                            || !QFileInfo(sInstrumentFile).exists())
193                            m_ui.InstrumentFileComboBox->removeItem(i);
194                    --i;
195            }
196    
197          // Populate Engines list.          // Populate Engines list.
198          const char **ppszEngines = ::lscp_list_available_engines(pMainForm->client());          const char **ppszEngines = ::lscp_list_available_engines(pMainForm->client());
# Line 232  void ChannelForm::setup ( Channel *pChan Line 250  void ChannelForm::setup ( Channel *pChan
250          m_ui.InstrumentNrComboBox->setCurrentIndex(iInstrumentNr);          m_ui.InstrumentNrComboBox->setCurrentIndex(iInstrumentNr);
251    
252          // MIDI input device...          // MIDI input device...
253          Device midiDevice(Device::Midi, m_pChannel->midiDevice());          const Device midiDevice(Device::Midi, m_pChannel->midiDevice());
254          // MIDI input driver...          // MIDI input driver...
255          QString sMidiDriver = midiDevice.driverName();          QString sMidiDriver = midiDevice.driverName();
256          if (sMidiDriver.isEmpty() || bNew)          if (sMidiDriver.isEmpty() || bNew)
# Line 242  void ChannelForm::setup ( Channel *pChan Line 260  void ChannelForm::setup ( Channel *pChan
260                                  Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) {                                  Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) {
261                          m_ui.MidiDriverComboBox->insertItem(0, sMidiDriver);                          m_ui.MidiDriverComboBox->insertItem(0, sMidiDriver);
262                  }                  }
263                  m_ui.MidiDriverComboBox->setItemText(                  m_ui.MidiDriverComboBox->setCurrentIndex(
264                          m_ui.MidiDriverComboBox->currentIndex(),                          m_ui.MidiDriverComboBox->findText(sMidiDriver,
265                          sMidiDriver);                                  Qt::MatchExactly | Qt::MatchCaseSensitive)
266                    );
267          }          }
268          selectMidiDriverItem(sMidiDriver);          selectMidiDriverItem(sMidiDriver);
269          if (!bNew) {          if (!bNew) {
# Line 273  void ChannelForm::setup ( Channel *pChan Line 292  void ChannelForm::setup ( Channel *pChan
292                          sMapName);                          sMapName);
293          }          }
294          // It might be no maps around...          // It might be no maps around...
295          bool bMidiMapEnabled = (m_ui.MidiMapComboBox->count() > 0);          const bool bMidiMapEnabled = (m_ui.MidiMapComboBox->count() > 0);
296          m_ui.MidiMapTextLabel->setEnabled(bMidiMapEnabled);          m_ui.MidiMapTextLabel->setEnabled(bMidiMapEnabled);
297          m_ui.MidiMapComboBox->setEnabled(bMidiMapEnabled);          m_ui.MidiMapComboBox->setEnabled(bMidiMapEnabled);
298    
299          // Audio output device...          // Audio output device...
300          Device audioDevice(Device::Audio, m_pChannel->audioDevice());          const Device audioDevice(Device::Audio, m_pChannel->audioDevice());
301          // Audio output driver...          // Audio output driver...
302          QString sAudioDriver = audioDevice.driverName();          QString sAudioDriver = audioDevice.driverName();
303          if (sAudioDriver.isEmpty() || bNew)          if (sAudioDriver.isEmpty() || bNew)
# Line 288  void ChannelForm::setup ( Channel *pChan Line 307  void ChannelForm::setup ( Channel *pChan
307                                  Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) {                                  Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) {
308                          m_ui.AudioDriverComboBox->insertItem(0, sAudioDriver);                          m_ui.AudioDriverComboBox->insertItem(0, sAudioDriver);
309                  }                  }
310                  m_ui.AudioDriverComboBox->setItemText(                  m_ui.AudioDriverComboBox->setCurrentIndex(
311                          m_ui.AudioDriverComboBox->currentIndex(),                          m_ui.AudioDriverComboBox->findText(sAudioDriver,
312                          sAudioDriver);                                  Qt::MatchExactly | Qt::MatchCaseSensitive)
313                    );
314          }          }
315          selectAudioDriverItem(sAudioDriver);          selectAudioDriverItem(sAudioDriver);
316          if (!bNew) {          if (!bNew) {
# Line 306  void ChannelForm::setup ( Channel *pChan Line 326  void ChannelForm::setup ( Channel *pChan
326    
327          const QString sInstrumentNrToolTip =          const QString sInstrumentNrToolTip =
328                  (pOptions->bInstrumentNames) ?                  (pOptions->bInstrumentNames) ?
329                          "Select an instrument of the file" :                          tr("Select an instrument of the file") :
330                          "You might want to enable instrument name retrieval in the "                          tr("You might want to enable instrument name retrieval in the "
331                          "settings dialog";                          "settings dialog");
332          m_ui.InstrumentNrComboBox->setToolTip(          m_ui.InstrumentNrComboBox->setToolTip(
333                  QObject::tr(sInstrumentNrToolTip.toUtf8().data())                  QObject::tr(sInstrumentNrToolTip.toUtf8().data())
334          );          );
335    
336    #if 0
337          // As convenient, make it ready on stabilizeForm() for          // As convenient, make it ready on stabilizeForm() for
338          // prompt acceptance, if we got the minimum required...          // prompt acceptance, if we got the minimum required...
339  /*      if (sEngineName != Channel::noEngineName() &&          if (sEngineName != Channel::noEngineName() &&
340                  sInstrumentFile != Channel::noInstrumentName())                  sInstrumentFile != Channel::noInstrumentName())
341                  m_iDirtyCount++; */                  m_iDirtyCount++;
342    #endif
343    
344          // Done.          // Done.
345          m_iDirtySetup--;          m_iDirtySetup--;
346          stabilizeForm();          stabilizeForm();
# Line 355  void ChannelForm::accept (void) Line 378  void ChannelForm::accept (void)
378                                  iErrors++;                                  iErrors++;
379                  } else {                  } else {
380                          Device *pDevice = NULL;                          Device *pDevice = NULL;
381                          int iAudioItem = m_ui.AudioDeviceComboBox->currentIndex();                          const int iAudioItem = m_ui.AudioDeviceComboBox->currentIndex();
382                          if (iAudioItem >= 0 && iAudioItem < m_audioDevices.count())                          if (iAudioItem >= 0 && iAudioItem < m_audioDevices.count())
383                                  pDevice = m_audioDevices.at(iAudioItem);                                  pDevice = m_audioDevices.at(iAudioItem);
384                          ChannelRoutingMap routingMap = m_routingModel.routingMap();                          ChannelRoutingMap routingMap = m_routingModel.routingMap();
# Line 379  void ChannelForm::accept (void) Line 402  void ChannelForm::accept (void)
402                                  iErrors++;                                  iErrors++;
403                  } else {                  } else {
404                          Device *pDevice = NULL;                          Device *pDevice = NULL;
405                          int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();                          const int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();
406                          if (iMidiItem >= 0 && iMidiItem < m_midiDevices.count())                          if (iMidiItem >= 0 && iMidiItem < m_midiDevices.count())
407                                  pDevice = m_midiDevices.at(iMidiItem);                                  pDevice = m_midiDevices.at(iMidiItem);
408                          if (pDevice == NULL)                          if (pDevice == NULL)
# Line 432  void ChannelForm::reject (void) Line 455  void ChannelForm::reject (void)
455          bool bReject = true;          bool bReject = true;
456    
457          // Check if there's any pending changes...          // Check if there's any pending changes...
458          if (m_iDirtyCount > 0 && m_ui.OkPushButton->isEnabled()) {          if (m_iDirtyCount > 0) {
459                  switch (QMessageBox::warning(this,                  switch (QMessageBox::warning(this,
460                          QSAMPLER_TITLE ": " + tr("Warning"),                          QSAMPLER_TITLE ": " + tr("Warning"),
461                          tr("Some channel settings have been changed.\n\n"                          tr("Some channel settings have been changed.\n\n"
462                          "Do you want to apply the changes?"),                          "Do you want to apply the changes?"),
463                          tr("Apply"), tr("Discard"), tr("Cancel"))) {                          QMessageBox::Apply |
464                  case 0:     // Apply...                          QMessageBox::Discard |
465                            QMessageBox::Cancel)) {
466                    case QMessageBox::Apply:
467                          accept();                          accept();
468                          return;                          return;
469                  case 1:     // Discard                  case QMessageBox::Discard:
470                          break;                          break;
471                  default:    // Cancel.                  default:    // Cancel.
472                          bReject = false;                          bReject = false;
# Line 469  void ChannelForm::openInstrumentFile (vo Line 494  void ChannelForm::openInstrumentFile (vo
494    
495          // FIXME: the instrument file filters should be restricted,          // FIXME: the instrument file filters should be restricted,
496          // depending on the current engine.          // depending on the current engine.
497            QStringList filters;
498            const QString& sEngineName = m_ui.EngineNameComboBox->currentText().toUpper();
499            if (sEngineName.contains("GIG"))
500                    filters << tr("GIG Instrument files") + " (*.gig *.dls)";
501            if (sEngineName.contains("SFZ"))
502                    filters << tr("SFZ Instrument files") + " (*.sfz)";
503            if (sEngineName.contains("SF2"))
504                    filters << tr("SF2 Instrument files") + " (*.sf2)";
505            filters << tr("All files") + " (*.*)";
506            const QString& filter = filters.join(";;");
507    
508          QString sInstrumentFile = QFileDialog::getOpenFileName(this,          QString sInstrumentFile = QFileDialog::getOpenFileName(this,
509                  QSAMPLER_TITLE ": " + tr("Instrument files"), // Caption.                  QSAMPLER_TITLE ": " + tr("Instrument files"), // Caption.
510                  pOptions->sInstrumentDir,                 // Start here.                  pOptions->sInstrumentDir, // Start here.
511                  tr("Instrument files") + " (*.gig *.dls)" // Filter (GIG and DLS files)                  filter                    // File filter.
512          );          );
513    
514          if (sInstrumentFile.isEmpty())          if (sInstrumentFile.isEmpty())
# Line 551  void ChannelForm::selectMidiDriverItem ( Line 587  void ChannelForm::selectMidiDriverItem (
587          const QString sDriverName = sMidiDriver.toUpper();          const QString sDriverName = sMidiDriver.toUpper();
588    
589          // Save current device id.          // Save current device id.
         // Save current device id.  
590          int iDeviceID = 0;          int iDeviceID = 0;
591          Device *pDevice = NULL;          Device *pDevice = NULL;
592          int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();          int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();
# Line 566  void ChannelForm::selectMidiDriverItem ( Line 601  void ChannelForm::selectMidiDriverItem (
601          m_midiDevices.clear();          m_midiDevices.clear();
602    
603          // Populate with the current ones...          // Populate with the current ones...
604          const QPixmap midiPixmap(":/icons/midi2.png");          const QPixmap midiPixmap(":/images/midi2.png");
605          int *piDeviceIDs = Device::getDevices(pMainForm->client(),          int *piDeviceIDs = Device::getDevices(pMainForm->client(), Device::Midi);
                 Device::Midi);  
606          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
607                  pDevice = new Device(Device::Midi, piDeviceIDs[i]);                  pDevice = new Device(Device::Midi, piDeviceIDs[i]);
608                  if (pDevice->driverName().toUpper() == sDriverName) {                  if (pDevice->driverName().toUpper() == sDriverName) {
# Line 581  void ChannelForm::selectMidiDriverItem ( Line 615  void ChannelForm::selectMidiDriverItem (
615          }          }
616    
617          // Do proper enabling...          // Do proper enabling...
618          bool bEnabled = !m_midiDevices.isEmpty();          const bool bEnabled = !m_midiDevices.isEmpty();
619          if (bEnabled) {          if (bEnabled) {
620                  // Select the previous current device...                  // Select the previous current device...
621                  iMidiItem = 0;                  iMidiItem = 0;
# Line 623  void ChannelForm::selectMidiDeviceItem ( Line 657  void ChannelForm::selectMidiDeviceItem (
657                  pDevice = m_midiDevices.at(iMidiItem);                  pDevice = m_midiDevices.at(iMidiItem);
658          if (pDevice) {          if (pDevice) {
659                  const DeviceParamMap& params = pDevice->params();                  const DeviceParamMap& params = pDevice->params();
660                  int iPorts = params["PORTS"].value.toInt();                  const int iPorts = params["PORTS"].value.toInt();
661                  m_ui.MidiPortTextLabel->setEnabled(iPorts > 0);                  m_ui.MidiPortTextLabel->setEnabled(iPorts > 0);
662                  m_ui.MidiPortSpinBox->setEnabled(iPorts > 0);                  m_ui.MidiPortSpinBox->setEnabled(iPorts > 0);
663                  if (iPorts > 0)                  if (iPorts > 0)
# Line 647  void ChannelForm::selectMidiDevice ( int Line 681  void ChannelForm::selectMidiDevice ( int
681  void ChannelForm::setupMidiDevice (void)  void ChannelForm::setupMidiDevice (void)
682  {  {
683          Device *pDevice = NULL;          Device *pDevice = NULL;
684          int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();          const int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();
685          if (iMidiItem >= 0 && iMidiItem < m_midiDevices.count())          if (iMidiItem >= 0 && iMidiItem < m_midiDevices.count())
686                  pDevice = m_midiDevices.at(iMidiItem);                  pDevice = m_midiDevices.at(iMidiItem);
687          setupDevice(pDevice,          setupDevice(pDevice,
# Line 681  void ChannelForm::selectAudioDriverItem Line 715  void ChannelForm::selectAudioDriverItem
715          m_audioDevices.clear();          m_audioDevices.clear();
716    
717          // Populate with the current ones...          // Populate with the current ones...
718          const QPixmap audioPixmap(":/icons/audio2.png");          const QPixmap audioPixmap(":/images/audio2.png");
719          int *piDeviceIDs = Device::getDevices(pMainForm->client(),          int *piDeviceIDs = Device::getDevices(pMainForm->client(),
720                  Device::Audio);                  Device::Audio);
721          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
# Line 696  void ChannelForm::selectAudioDriverItem Line 730  void ChannelForm::selectAudioDriverItem
730          }          }
731    
732          // Do proper enabling...          // Do proper enabling...
733          bool bEnabled = !m_audioDevices.isEmpty();          const bool bEnabled = !m_audioDevices.isEmpty();
734          if (bEnabled) {          if (bEnabled) {
735                  // Select the previous current device...                  // Select the previous current device...
736                  iAudioItem = 0;                  iAudioItem = 0;
# Line 762  void ChannelForm::selectAudioDevice ( in Line 796  void ChannelForm::selectAudioDevice ( in
796  void ChannelForm::setupAudioDevice (void)  void ChannelForm::setupAudioDevice (void)
797  {  {
798          Device *pDevice = NULL;          Device *pDevice = NULL;
799          int iAudioItem = m_ui.AudioDeviceComboBox->currentIndex();          const int iAudioItem = m_ui.AudioDeviceComboBox->currentIndex();
800          if (iAudioItem >= 0 && iAudioItem < m_audioDevices.count())          if (iAudioItem >= 0 && iAudioItem < m_audioDevices.count())
801                  pDevice = m_audioDevices.at(iAudioItem);                  pDevice = m_audioDevices.at(iAudioItem);
802          setupDevice(pDevice,          setupDevice(pDevice,
# Line 795  void ChannelForm::optionsChanged (void) Line 829  void ChannelForm::optionsChanged (void)
829  // Stabilize current form state.  // Stabilize current form state.
830  void ChannelForm::stabilizeForm (void)  void ChannelForm::stabilizeForm (void)
831  {  {
832          const bool bValid =          bool bValid = m_ui.EngineNameComboBox->currentIndex() >= 0 &&
833                  m_ui.EngineNameComboBox->currentIndex() >= 0 &&                  m_ui.EngineNameComboBox->currentText() != Channel::noEngineName();
834                  m_ui.EngineNameComboBox->currentText()  
835                          != Channel::noEngineName();          const QString& sPath = m_ui.InstrumentFileComboBox->currentText();
 #if 0  
         const QString& sPath = InstrumentFileComboBox->currentText();  
836          bValid = bValid && !sPath.isEmpty() && QFileInfo(sPath).exists();          bValid = bValid && !sPath.isEmpty() && QFileInfo(sPath).exists();
837  #endif  
838          m_ui.OkPushButton->setEnabled(m_iDirtyCount > 0 && bValid);          m_ui.DialogButtonBox->button(
839                    QDialogButtonBox::Ok)->setEnabled(m_iDirtyCount > 0 && bValid);
840  }  }
841    
842    

Legend:
Removed from v.1558  
changed lines
  Added in v.3385

  ViewVC Help
Powered by ViewVC