/[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 1466 by capela, Thu Nov 1 19:25:10 2007 UTC revision 1840 by capela, Thu Feb 19 11:44:57 2009 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-2009, 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 28  Line 28 
28  #include "qsamplerMainForm.h"  #include "qsamplerMainForm.h"
29  #include "qsamplerInstrument.h"  #include "qsamplerInstrument.h"
30    
31  #include <qvalidator.h>  #include <QValidator>
32  #include <qmessagebox.h>  #include <QMessageBox>
33  #include <qfiledialog.h>  #include <QFileDialog>
34  #include <qfileinfo.h>  #include <QFileInfo>
35    
36    #include <QHeaderView>
37    
38    
39  namespace QSampler {  namespace QSampler {
40    
41  ChannelForm::ChannelForm(QWidget* parent) : QDialog(parent) {  //-------------------------------------------------------------------------
42      ui.setupUi(this);  // QSampler::Channelform -- Channel form implementation.
43    //
44    
45    ChannelForm::ChannelForm ( QWidget* pParent )
46            : QDialog(pParent)
47    {
48            m_ui.setupUi(this);
49    
50          // Initialize locals.          // Initialize locals.
51          m_pChannel = NULL;          m_pChannel = NULL;
# Line 44  ChannelForm::ChannelForm(QWidget* parent Line 53  ChannelForm::ChannelForm(QWidget* parent
53          m_iDirtySetup = 0;          m_iDirtySetup = 0;
54          m_iDirtyCount = 0;          m_iDirtyCount = 0;
55    
56          m_midiDevices.setAutoDelete(true);  //      m_midiDevices.setAutoDelete(true);
57          m_audioDevices.setAutoDelete(true);  //      m_audioDevices.setAutoDelete(true);
58    
59          m_pDeviceForm = NULL;          m_pDeviceForm = NULL;
60    
61            int iRowHeight = m_ui.AudioRoutingTable->fontMetrics().height() + 4;
62            m_ui.AudioRoutingTable->verticalHeader()->setDefaultSectionSize(iRowHeight);
63            m_ui.AudioRoutingTable->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);
64    
65            m_ui.AudioRoutingTable->setModel(&m_routingModel);
66            m_ui.AudioRoutingTable->setItemDelegate(&m_routingDelegate);
67            m_ui.AudioRoutingTable->horizontalHeader()->setResizeMode(0, QHeaderView::Stretch);
68    //      m_ui.AudioRoutingTable->verticalHeader()->hide();
69    
70            // This goes initially hidden, and will be shown
71            // on setup() for currently existing channels...
72            m_ui.AudioRoutingTable->hide();
73    
74          // Try to restore normal window positioning.          // Try to restore normal window positioning.
75          adjustSize();          adjustSize();
76    
77          QObject::connect(ui.EngineNameComboBox,          QObject::connect(m_ui.EngineNameComboBox,
78                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
79                  SLOT(optionsChanged()));                  SLOT(optionsChanged()));
80          QObject::connect(ui.InstrumentFileComboBox,          QObject::connect(m_ui.InstrumentFileComboBox,
81                  SIGNAL(activated(const QString&amp;)),                  SIGNAL(activated(const QString&)),
82                  SLOT(updateInstrumentName()));                  SLOT(updateInstrumentName()));
83          QObject::connect(ui.InstrumentFileToolButton,          QObject::connect(m_ui.InstrumentFileToolButton,
84                  SIGNAL(clicked()),                  SIGNAL(clicked()),
85                  SLOT(openInstrumentFile()));                  SLOT(openInstrumentFile()));
86          QObject::connect(ui.InstrumentNrComboBox,          QObject::connect(m_ui.InstrumentNrComboBox,
87                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
88                  SLOT(optionsChanged()));                  SLOT(optionsChanged()));
89          QObject::connect(ui.MidiDriverComboBox,          QObject::connect(m_ui.MidiDriverComboBox,
90                  SIGNAL(activated(const QString&amp;)),                  SIGNAL(activated(const QString&)),
91                  SLOT(selectMidiDriver(const QString&amp;)));                  SLOT(selectMidiDriver(const QString&)));
92          QObject::connect(ui.MidiDeviceComboBox,          QObject::connect(m_ui.MidiDeviceComboBox,
93                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
94                  SLOT(selectMidiDevice(int)));                  SLOT(selectMidiDevice(int)));
95          QObject::connect(ui.MidiPortSpinBox,          QObject::connect(m_ui.MidiPortSpinBox,
96                  SIGNAL(valueChanged(int)),                  SIGNAL(valueChanged(int)),
97                  SLOT(optionsChanged()));                  SLOT(optionsChanged()));
98          QObject::connect(ui.MidiChannelComboBox,          QObject::connect(m_ui.MidiChannelComboBox,
99                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
100                  SLOT(optionsChanged()));                  SLOT(optionsChanged()));
101          QObject::connect(ui.MidiMapComboBox,          QObject::connect(m_ui.MidiMapComboBox,
102                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
103                  SLOT(optionsChanged()));                  SLOT(optionsChanged()));
104          QObject::connect(ui.AudioDriverComboBox,          QObject::connect(m_ui.AudioDriverComboBox,
105                  SIGNAL(activated(const QString&amp;)),                  SIGNAL(activated(const QString&)),
106                  SLOT(selectAudioDriver(const QString&amp;)));                  SLOT(selectAudioDriver(const QString&)));
107          QObject::connect(ui.AudioDeviceComboBox,          QObject::connect(m_ui.AudioDeviceComboBox,
108                  SIGNAL(activated(int)),                  SIGNAL(activated(int)),
109                  SLOT(selectAudioDevice(int)));                  SLOT(selectAudioDevice(int)));
110          QObject::connect(ui.OkPushButton,          QObject::connect(m_ui.OkPushButton,
111                  SIGNAL(clicked()),                  SIGNAL(clicked()),
112                  SLOT(accept()));                  SLOT(accept()));
113          QObject::connect(ui.CancelPushButton,          QObject::connect(m_ui.CancelPushButton,
114                  SIGNAL(clicked()),                  SIGNAL(clicked()),
115                  SLOT(reject()));                  SLOT(reject()));
116          QObject::connect(ui.MidiDeviceToolButton,          QObject::connect(m_ui.MidiDeviceToolButton,
117                  SIGNAL(clicked()),                  SIGNAL(clicked()),
118                  SLOT(setupMidiDevice()));                  SLOT(setupMidiDevice()));
119          QObject::connect(ui.AudioDeviceToolButton,          QObject::connect(m_ui.AudioDeviceToolButton,
120                  SIGNAL(clicked()),                  SIGNAL(clicked()),
121                  SLOT(setupAudioDevice()));                  SLOT(setupAudioDevice()));
122            QObject::connect(&m_routingModel,
123                    SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),
124                    SLOT(optionsChanged()));
125            QObject::connect(&m_routingModel,
126                    SIGNAL(dataChanged(const QModelIndex&, const QModelIndex&)),
127                    SLOT(updateTableCellRenderers(const QModelIndex&, const QModelIndex&)));
128            QObject::connect(&m_routingModel,
129                    SIGNAL(modelReset()),
130                    SLOT(updateTableCellRenderers()));
131  }  }
132    
133  ChannelForm::~ChannelForm() {  ChannelForm::~ChannelForm()
134    {
135          if (m_pDeviceForm)          if (m_pDeviceForm)
136                  delete m_pDeviceForm;                  delete m_pDeviceForm;
137          m_pDeviceForm = NULL;          m_pDeviceForm = NULL;
138    
139            qDeleteAll(m_midiDevices);
140            m_midiDevices.clear();
141    
142            qDeleteAll(m_audioDevices);
143            m_audioDevices.clear();
144  }  }
145    
146    
147  // Channel dialog setup formal initializer.  // Channel dialog setup formal initializer.
148  void ChannelForm::setup ( qsamplerChannel *pChannel )  void ChannelForm::setup ( Channel *pChannel )
149  {  {
150          m_pChannel = pChannel;          m_pChannel = pChannel;
151    
# Line 118  void ChannelForm::setup ( qsamplerChanne Line 156  void ChannelForm::setup ( qsamplerChanne
156                  return;                  return;
157    
158          // It can be a brand new channel, remember?          // It can be a brand new channel, remember?
159          bool bNew = (m_pChannel->channelID() < 0);          const bool bNew = (m_pChannel->channelID() < 0);
160          setCaption(QSAMPLER_TITLE ": " + m_pChannel->channelName());          setWindowTitle(QSAMPLER_TITLE ": " + m_pChannel->channelName());
161    
162          // Check if we're up and connected.          // Check if we're up and connected.
163          MainForm *pMainForm = MainForm::getInstance();          MainForm *pMainForm = MainForm::getInstance();
# Line 128  void ChannelForm::setup ( qsamplerChanne Line 166  void ChannelForm::setup ( qsamplerChanne
166          if (pMainForm->client() == NULL)          if (pMainForm->client() == NULL)
167                  return;                  return;
168    
169          qsamplerOptions *pOptions = pMainForm->options();          Options *pOptions = pMainForm->options();
170          if (pOptions == NULL)          if (pOptions == NULL)
171                  return;                  return;
172    
# Line 136  void ChannelForm::setup ( qsamplerChanne Line 174  void ChannelForm::setup ( qsamplerChanne
174          m_iDirtySetup++;          m_iDirtySetup++;
175    
176          // Load combo box history...          // Load combo box history...
177          pOptions->loadComboBoxHistory(ui.InstrumentFileComboBox);          pOptions->loadComboBoxHistory(m_ui.InstrumentFileComboBox);
   
         // Notify.that we've just changed one audio route.  
         QObject::connect(ui.AudioRoutingTable, SIGNAL(valueChanged(int,int)),  
                 this, SLOT(changeAudioRouting(int,int)));  
178    
179          // Populate Engines list.          // Populate Engines list.
180          const char **ppszEngines = ::lscp_list_available_engines(pMainForm->client());          const char **ppszEngines = ::lscp_list_available_engines(pMainForm->client());
181          if (ppszEngines) {          if (ppszEngines) {
182                  ui.EngineNameComboBox->clear();                  m_ui.EngineNameComboBox->clear();
183                  for (int iEngine = 0; ppszEngines[iEngine]; iEngine++)                  for (int iEngine = 0; ppszEngines[iEngine]; iEngine++)
184                          ui.EngineNameComboBox->insertItem(ppszEngines[iEngine]);                          m_ui.EngineNameComboBox->addItem(QString(ppszEngines[iEngine]));
185          }          }
186          else m_pChannel->appendMessagesClient("lscp_list_available_engines");          else m_pChannel->appendMessagesClient("lscp_list_available_engines");
187    
188          // Populate Audio output type list.          // Populate Audio output type list.
189          ui.AudioDriverComboBox->clear();          m_ui.AudioDriverComboBox->clear();
190          ui.AudioDriverComboBox->insertStringList(          m_ui.AudioDriverComboBox->insertItems(0,
191                  qsamplerDevice::getDrivers(pMainForm->client(), qsamplerDevice::Audio));                  Device::getDrivers(pMainForm->client(), Device::Audio));
192    
193          // Populate MIDI input type list.          // Populate MIDI input type list.
194          ui.MidiDriverComboBox->clear();          m_ui.MidiDriverComboBox->clear();
195          ui.MidiDriverComboBox->insertStringList(          m_ui.MidiDriverComboBox->insertItems(0,
196                  qsamplerDevice::getDrivers(pMainForm->client(), qsamplerDevice::Midi));                  Device::getDrivers(pMainForm->client(), Device::Midi));
197    
198          // Populate Maps list.          // Populate Maps list.
199          ui.MidiMapComboBox->clear();          m_ui.MidiMapComboBox->clear();
200          ui.MidiMapComboBox->insertStringList(qsamplerInstrument::getMapNames());          m_ui.MidiMapComboBox->insertItems(0,
201                    Instrument::getMapNames());
202    
203          // Read proper channel information,          // Read proper channel information,
204          // and populate the channel form fields.          // and populate the channel form fields.
# Line 173  void ChannelForm::setup ( qsamplerChanne Line 208  void ChannelForm::setup ( qsamplerChanne
208          if (sEngineName.isEmpty() || bNew)          if (sEngineName.isEmpty() || bNew)
209                  sEngineName = pOptions->sEngineName;                  sEngineName = pOptions->sEngineName;
210          if (sEngineName.isEmpty())          if (sEngineName.isEmpty())
211                  sEngineName = qsamplerChannel::noEngineName();                  sEngineName = Channel::noEngineName();
212          if (ui.EngineNameComboBox->findText(sEngineName,          if (m_ui.EngineNameComboBox->findText(sEngineName,
213                          Qt::MatchExactly | Qt::MatchCaseSensitive) == 0) {                          Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) {
214                  ui.EngineNameComboBox->insertItem(sEngineName);                  m_ui.EngineNameComboBox->addItem(sEngineName);
215          }          }
216          ui.EngineNameComboBox->setCurrentText(sEngineName);          m_ui.EngineNameComboBox->setCurrentIndex(
217                    m_ui.EngineNameComboBox->findText(sEngineName,
218                            Qt::MatchExactly | Qt::MatchCaseSensitive));
219    
220          // Instrument filename and index...          // Instrument filename and index...
221          QString sInstrumentFile = pChannel->instrumentFile();          QString sInstrumentFile = pChannel->instrumentFile();
222          if (sInstrumentFile.isEmpty())          if (sInstrumentFile.isEmpty())
223                  sInstrumentFile = qsamplerChannel::noInstrumentName();                  sInstrumentFile = Channel::noInstrumentName();
224          ui.InstrumentFileComboBox->setCurrentText(sInstrumentFile);          m_ui.InstrumentFileComboBox->setEditText(sInstrumentFile);
225          ui.InstrumentNrComboBox->clear();          m_ui.InstrumentNrComboBox->clear();
226          ui.InstrumentNrComboBox->insertStringList(          m_ui.InstrumentNrComboBox->insertItems(0,
227                  qsamplerChannel::getInstrumentList(sInstrumentFile,                  Channel::getInstrumentList(sInstrumentFile,
228                  pOptions->bInstrumentNames));                  pOptions->bInstrumentNames));
229          ui.InstrumentNrComboBox->setCurrentItem(pChannel->instrumentNr());          int iInstrumentNr = pChannel->instrumentNr();
230            if (iInstrumentNr < 0)
231                    iInstrumentNr = 0;
232            m_ui.InstrumentNrComboBox->setCurrentIndex(iInstrumentNr);
233    
234          // MIDI input device...          // MIDI input device...
235          qsamplerDevice midiDevice(qsamplerDevice::Midi, m_pChannel->midiDevice());          Device midiDevice(Device::Midi, m_pChannel->midiDevice());
236          // MIDI input driver...          // MIDI input driver...
237          QString sMidiDriver = midiDevice.driverName();          QString sMidiDriver = midiDevice.driverName();
238          if (sMidiDriver.isEmpty() || bNew)          if (sMidiDriver.isEmpty() || bNew)
239                  sMidiDriver = pOptions->sMidiDriver.upper();                  sMidiDriver = pOptions->sMidiDriver.toUpper();
240          if (!sMidiDriver.isEmpty()) {          if (!sMidiDriver.isEmpty()) {
241                  if (ui.MidiDriverComboBox->findText(sMidiDriver,                  if (m_ui.MidiDriverComboBox->findText(sMidiDriver,
242                                  Qt::MatchExactly | Qt::MatchCaseSensitive) == 0) {                                  Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) {
243                          ui.MidiDriverComboBox->insertItem(sMidiDriver);                          m_ui.MidiDriverComboBox->insertItem(0, sMidiDriver);
244                  }                  }
245                  ui.MidiDriverComboBox->setCurrentText(sMidiDriver);                  m_ui.MidiDriverComboBox->setCurrentIndex(
246                            m_ui.MidiDriverComboBox->findText(sMidiDriver,
247                                    Qt::MatchExactly | Qt::MatchCaseSensitive)
248                    );
249          }          }
250          selectMidiDriverItem(sMidiDriver);          selectMidiDriverItem(sMidiDriver);
251          if (!bNew)          if (!bNew) {
252                  ui.MidiDeviceComboBox->setCurrentText(midiDevice.deviceName());                  m_ui.MidiDeviceComboBox->setItemText(
253          selectMidiDeviceItem(ui.MidiDeviceComboBox->currentItem());                          m_ui.MidiDeviceComboBox->currentIndex(),
254                            midiDevice.deviceName());
255            }
256            selectMidiDeviceItem(m_ui.MidiDeviceComboBox->currentIndex());
257          // MIDI input port...          // MIDI input port...
258          ui.MidiPortSpinBox->setValue(pChannel->midiPort());          m_ui.MidiPortSpinBox->setValue(pChannel->midiPort());
259          // MIDI input channel...          // MIDI input channel...
260          int iMidiChannel = pChannel->midiChannel();          int iMidiChannel = pChannel->midiChannel();
261          // When new, try to suggest a sensible MIDI channel...          // When new, try to suggest a sensible MIDI channel...
262          if (iMidiChannel < 0)          if (iMidiChannel < 0)
263                  iMidiChannel = (::lscp_get_channels(pMainForm->client()) % 16);                  iMidiChannel = (::lscp_get_channels(pMainForm->client()) % 16);
264          ui.MidiChannelComboBox->setCurrentItem(iMidiChannel);          m_ui.MidiChannelComboBox->setCurrentIndex(iMidiChannel);
265          // MIDI instrument map...          // MIDI instrument map...
266          int iMidiMap = (bNew ? pOptions->iMidiMap : pChannel->midiMap());          int iMidiMap = (bNew ? pOptions->iMidiMap : pChannel->midiMap());
267          // When new, try to suggest a sensible MIDI map...          // When new, try to suggest a sensible MIDI map...
268          if (iMidiMap < 0)          if (iMidiMap < 0)
269                  iMidiMap = 0;                  iMidiMap = 0;
270          const QString& sMapName = qsamplerInstrument::getMapName(iMidiMap);          const QString& sMapName = Instrument::getMapName(iMidiMap);
271          if (!sMapName.isEmpty())          if (!sMapName.isEmpty()) {
272                  ui.MidiMapComboBox->setCurrentText(sMapName);                  m_ui.MidiMapComboBox->setItemText(
273                            m_ui.MidiMapComboBox->currentIndex(),
274                            sMapName);
275            }
276          // It might be no maps around...          // It might be no maps around...
277          bool bMidiMapEnabled = (ui.MidiMapComboBox->count() > 0);          bool bMidiMapEnabled = (m_ui.MidiMapComboBox->count() > 0);
278          ui.MidiMapTextLabel->setEnabled(bMidiMapEnabled);          m_ui.MidiMapTextLabel->setEnabled(bMidiMapEnabled);
279          ui.MidiMapComboBox->setEnabled(bMidiMapEnabled);          m_ui.MidiMapComboBox->setEnabled(bMidiMapEnabled);
280    
281          // Audio output device...          // Audio output device...
282          qsamplerDevice audioDevice(qsamplerDevice::Audio, m_pChannel->audioDevice());          Device audioDevice(Device::Audio, m_pChannel->audioDevice());
283          // Audio output driver...          // Audio output driver...
284          QString sAudioDriver = audioDevice.driverName();          QString sAudioDriver = audioDevice.driverName();
285          if (sAudioDriver.isEmpty() || bNew)          if (sAudioDriver.isEmpty() || bNew)
286                  sAudioDriver = pOptions->sAudioDriver.upper();                  sAudioDriver = pOptions->sAudioDriver.toUpper();
287          if (!sAudioDriver.isEmpty()) {          if (!sAudioDriver.isEmpty()) {
288                  if (ui.AudioDriverComboBox->findText(sAudioDriver,                  if (m_ui.AudioDriverComboBox->findText(sAudioDriver,
289                                  Qt::MatchExactly | Qt::MatchCaseSensitive) == 0) {                                  Qt::MatchExactly | Qt::MatchCaseSensitive) < 0) {
290                          ui.AudioDriverComboBox->insertItem(sAudioDriver);                          m_ui.AudioDriverComboBox->insertItem(0, sAudioDriver);
291                  }                  }
292                  ui.AudioDriverComboBox->setCurrentText(sAudioDriver);                  m_ui.AudioDriverComboBox->setCurrentIndex(
293                            m_ui.AudioDriverComboBox->findText(sAudioDriver,
294                                    Qt::MatchExactly | Qt::MatchCaseSensitive)
295                    );
296          }          }
297          selectAudioDriverItem(sAudioDriver);          selectAudioDriverItem(sAudioDriver);
298          if (!bNew)          if (!bNew) {
299                  ui.AudioDeviceComboBox->setCurrentText(audioDevice.deviceName());                  m_ui.AudioDeviceComboBox->setItemText(
300          selectAudioDeviceItem(ui.AudioDeviceComboBox->currentItem());                          m_ui.AudioDeviceComboBox->currentIndex(),
301                            audioDevice.deviceName());
302            }
303            selectAudioDeviceItem(m_ui.AudioDeviceComboBox->currentIndex());
304    
305            // Let the audio routing table see the light,
306            // if we're editing an existing sampler channel...
307            m_ui.AudioRoutingTable->setVisible(!bNew);
308    
309            const QString sInstrumentNrToolTip =
310                    (pOptions->bInstrumentNames) ?
311                            "Select an instrument of the file" :
312                            "You might want to enable instrument name retrieval in the "
313                            "settings dialog";
314            m_ui.InstrumentNrComboBox->setToolTip(
315                    QObject::tr(sInstrumentNrToolTip.toUtf8().data())
316            );
317    
318          // As convenient, make it ready on stabilizeForm() for          // As convenient, make it ready on stabilizeForm() for
319          // prompt acceptance, if we got the minimum required...          // prompt acceptance, if we got the minimum required...
320  /*      if (sEngineName != qsamplerChannel::noEngineName() &&  /*      if (sEngineName != Channel::noEngineName() &&
321                  sInstrumentFile != qsamplerChannel::noInstrumentName())                  sInstrumentFile != Channel::noInstrumentName())
322                  m_iDirtyCount++; */                  m_iDirtyCount++; */
323          // Done.          // Done.
324          m_iDirtySetup--;          m_iDirtySetup--;
# Line 269  void ChannelForm::accept (void) Line 338  void ChannelForm::accept (void)
338          if (pMainForm->client() == NULL)          if (pMainForm->client() == NULL)
339                  return;                  return;
340    
341          qsamplerOptions *pOptions = pMainForm->options();          Options *pOptions = pMainForm->options();
342          if (pOptions == NULL)          if (pOptions == NULL)
343                  return;                  return;
344    
345          // Flush any pending editing...          // Flush any pending editing...
346          //ui.AudioRoutingTable->flush();          //m_ui.AudioRoutingTable->flush();
347    
348          // We'll go for it!          // We'll go for it!
349          if (m_iDirtyCount > 0) {          if (m_iDirtyCount > 0) {
# Line 284  void ChannelForm::accept (void) Line 353  void ChannelForm::accept (void)
353                          iErrors++;                          iErrors++;
354                  // Accept Audio driver or device selection...                  // Accept Audio driver or device selection...
355                  if (m_audioDevices.isEmpty()) {                  if (m_audioDevices.isEmpty()) {
356                          if (!m_pChannel->setAudioDriver(ui.AudioDriverComboBox->currentText()))                          if (!m_pChannel->setAudioDriver(m_ui.AudioDriverComboBox->currentText()))
357                                  iErrors++;                                  iErrors++;
358                  } else {                  } else {
359                          qsamplerDevice *pDevice = m_audioDevices.at(ui.AudioDeviceComboBox->currentItem());                          Device *pDevice = NULL;
360                            int iAudioItem = m_ui.AudioDeviceComboBox->currentIndex();
361                            if (iAudioItem >= 0 && iAudioItem < m_audioDevices.count())
362                                    pDevice = m_audioDevices.at(iAudioItem);
363                            ChannelRoutingMap routingMap = m_routingModel.routingMap();
364                          if (pDevice == NULL)                          if (pDevice == NULL)
365                                  iErrors++;                                  iErrors++;
366                          else if (!m_pChannel->setAudioDevice(pDevice->deviceID()))                          else if (!m_pChannel->setAudioDevice(pDevice->deviceID()))
367                                  iErrors++;                                  iErrors++;
368                          else if (!m_audioRouting.isEmpty()) {                          else if (!routingMap.isEmpty()) {
369                                  // Set the audio route changes...                                  // Set the audio route changes...
370                                  qsamplerChannelRoutingMap::ConstIterator iter;                                  ChannelRoutingMap::ConstIterator iter;
371                                  for (iter = m_audioRouting.begin();                                  for (iter = routingMap.begin();
372                                                  iter != m_audioRouting.end(); ++iter) {                                                  iter != routingMap.end(); ++iter) {
373                                          if (!m_pChannel->setAudioChannel(iter.key(), iter.data()))                                          if (!m_pChannel->setAudioChannel(iter.key(), iter.value()))
374                                                  iErrors++;                                                  iErrors++;
375                                  }                                  }
376                          }                          }
377                  }                  }
378                  // Accept MIDI driver or device selection...                  // Accept MIDI driver or device selection...
379                  if (m_midiDevices.isEmpty()) {                  if (m_midiDevices.isEmpty()) {
380                          if (!m_pChannel->setMidiDriver(ui.MidiDriverComboBox->currentText()))                          if (!m_pChannel->setMidiDriver(m_ui.MidiDriverComboBox->currentText()))
381                                  iErrors++;                                  iErrors++;
382                  } else {                  } else {
383                          qsamplerDevice *pDevice = m_midiDevices.at(ui.MidiDeviceComboBox->currentItem());                          Device *pDevice = NULL;
384                            int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();
385                            if (iMidiItem >= 0 && iMidiItem < m_midiDevices.count())
386                                    pDevice = m_midiDevices.at(iMidiItem);
387                          if (pDevice == NULL)                          if (pDevice == NULL)
388                                  iErrors++;                                  iErrors++;
389                          else if (!m_pChannel->setMidiDevice(pDevice->deviceID()))                          else if (!m_pChannel->setMidiDevice(pDevice->deviceID()))
390                                  iErrors++;                                  iErrors++;
391                  }                  }
392                  // MIDI input port number...                  // MIDI input port number...
393                  if (!m_pChannel->setMidiPort(ui.MidiPortSpinBox->value()))                  if (!m_pChannel->setMidiPort(m_ui.MidiPortSpinBox->value()))
394                          iErrors++;                          iErrors++;
395                  // MIDI input channel...                  // MIDI input channel...
396                  if (!m_pChannel->setMidiChannel(ui.MidiChannelComboBox->currentItem()))                  if (!m_pChannel->setMidiChannel(m_ui.MidiChannelComboBox->currentIndex()))
397                          iErrors++;                          iErrors++;
398                  // Engine name...                  // Engine name...
399                  if (!m_pChannel->loadEngine(ui.EngineNameComboBox->currentText()))                  if (!m_pChannel->loadEngine(m_ui.EngineNameComboBox->currentText()))
400                          iErrors++;                          iErrors++;
401                  // Instrument file and index...                  // Instrument file and index...
402                  const QString& sPath = ui.InstrumentFileComboBox->currentText();                  const QString& sPath = m_ui.InstrumentFileComboBox->currentText();
403                  if (!sPath.isEmpty() && QFileInfo(sPath).exists()) {                  if (!sPath.isEmpty() && QFileInfo(sPath).exists()) {
404                          if (!m_pChannel->loadInstrument(sPath, ui.InstrumentNrComboBox->currentItem()))                          if (!m_pChannel->loadInstrument(sPath, m_ui.InstrumentNrComboBox->currentIndex()))
405                                  iErrors++;                                  iErrors++;
406                  }                  }
407                  // MIDI intrument map...                  // MIDI intrument map...
408                  if (!m_pChannel->setMidiMap(ui.MidiMapComboBox->currentItem()))                  if (!m_pChannel->setMidiMap(m_ui.MidiMapComboBox->currentIndex()))
409                          iErrors++;                          iErrors++;
410                  // Show error messages?                  // Show error messages?
411                  if (iErrors > 0)                  if (iErrors > 0) {
412                          m_pChannel->appendMessagesError(tr("Some channel settings could not be set.\n\nSorry."));                          m_pChannel->appendMessagesError(
413                                    tr("Some channel settings could not be set.\n\nSorry."));
414                    }
415          }          }
416    
417          // Save default engine name, instrument directory and history...          // Save default engine name, instrument directory and history...
418          pOptions->sInstrumentDir = QFileInfo(ui.InstrumentFileComboBox->currentText()).dirPath(true);          pOptions->sInstrumentDir = QFileInfo(
419          pOptions->sEngineName  = ui.EngineNameComboBox->currentText();                  m_ui.InstrumentFileComboBox->currentText()).dir().absolutePath();
420          pOptions->sAudioDriver = ui.AudioDriverComboBox->currentText();          pOptions->sEngineName  = m_ui.EngineNameComboBox->currentText();
421          pOptions->sMidiDriver  = ui.MidiDriverComboBox->currentText();          pOptions->sAudioDriver = m_ui.AudioDriverComboBox->currentText();
422          pOptions->iMidiMap     = ui.MidiMapComboBox->currentItem();          pOptions->sMidiDriver  = m_ui.MidiDriverComboBox->currentText();
423          pOptions->saveComboBoxHistory(ui.InstrumentFileComboBox);          pOptions->iMidiMap     = m_ui.MidiMapComboBox->currentIndex();
424            pOptions->saveComboBoxHistory(m_ui.InstrumentFileComboBox);
425    
426          // Just go with dialog acceptance.          // Just go with dialog acceptance.
427          QDialog::accept();          QDialog::accept();
# Line 355  void ChannelForm::reject (void) Line 434  void ChannelForm::reject (void)
434          bool bReject = true;          bool bReject = true;
435    
436          // Check if there's any pending changes...          // Check if there's any pending changes...
437          if (m_iDirtyCount > 0 && ui.OkPushButton->isEnabled()) {          if (m_iDirtyCount > 0 && m_ui.OkPushButton->isEnabled()) {
438                  switch (QMessageBox::warning(this,                  switch (QMessageBox::warning(this,
439                          QSAMPLER_TITLE ": " + tr("Warning"),                          QSAMPLER_TITLE ": " + tr("Warning"),
440                          tr("Some channel settings have been changed.\n\n"                          tr("Some channel settings have been changed.\n\n"
441                          "Do you want to apply the changes?"),                          "Do you want to apply the changes?"),
442                          tr("Apply"), tr("Discard"), tr("Cancel"))) {                          QMessageBox::Apply |
443                  case 0:     // Apply...                          QMessageBox::Discard |
444                            QMessageBox::Cancel)) {
445                    case QMessageBox::Apply:
446                          accept();                          accept();
447                          return;                          return;
448                  case 1:     // Discard                  case QMessageBox::Discard:
449                          break;                          break;
450                  default:    // Cancel.                  default:    // Cancel.
451                          bReject = false;                          bReject = false;
# Line 386  void ChannelForm::openInstrumentFile (vo Line 467  void ChannelForm::openInstrumentFile (vo
467          if (pMainForm->client() == NULL)          if (pMainForm->client() == NULL)
468                  return;                  return;
469    
470          qsamplerOptions *pOptions = pMainForm->options();          Options *pOptions = pMainForm->options();
471          if (pOptions == NULL)          if (pOptions == NULL)
472                  return;                  return;
473    
474          // FIXME: the instrument file filters should be restricted,          // FIXME: the instrument file filters should be restricted,
475          // depending on the current engine.          // depending on the current engine.
476          QString sInstrumentFile = QFileDialog::getOpenFileName(          QString sInstrumentFile = QFileDialog::getOpenFileName(this,
477                  pOptions->sInstrumentDir,                   // Start here.                  QSAMPLER_TITLE ": " + tr("Instrument files"), // Caption.
478                  tr("Instrument files") + " (*.gig *.dls)",  // Filter (GIG and DLS files)                  pOptions->sInstrumentDir,                 // Start here.
479                  this, 0,                                    // Parent and name (none)                  tr("Instrument files") + " (*.gig *.dls)" // Filter (GIG and DLS files)
                 QSAMPLER_TITLE ": " + tr("Instrument files")    // Caption.  
480          );          );
481    
482          if (sInstrumentFile.isEmpty())          if (sInstrumentFile.isEmpty())
483                  return;                  return;
484    
485          ui.InstrumentFileComboBox->setCurrentText(sInstrumentFile);          m_ui.InstrumentFileComboBox->setEditText(sInstrumentFile);
486          updateInstrumentName();          updateInstrumentName();
487  }  }
488    
# Line 416  void ChannelForm::updateInstrumentName ( Line 496  void ChannelForm::updateInstrumentName (
496          if (pMainForm->client() == NULL)          if (pMainForm->client() == NULL)
497                  return;                  return;
498    
499          qsamplerOptions *pOptions = pMainForm->options();          Options *pOptions = pMainForm->options();
500          if (pOptions == NULL)          if (pOptions == NULL)
501                  return;                  return;
502    
503          // Finally this better idea would be to use libgig          // Finally this better idea would be to use libgig
504          // to retrieve the REAL instrument names.          // to retrieve the REAL instrument names.
505          ui.InstrumentNrComboBox->clear();          m_ui.InstrumentNrComboBox->clear();
506          ui.InstrumentNrComboBox->insertStringList(          m_ui.InstrumentNrComboBox->insertItems(0,
507                  qsamplerChannel::getInstrumentList(                  Channel::getInstrumentList(
508                          ui.InstrumentFileComboBox->currentText(),                          m_ui.InstrumentFileComboBox->currentText(),
509                          pOptions->bInstrumentNames)                          pOptions->bInstrumentNames)
510          );          );
511    
# Line 434  void ChannelForm::updateInstrumentName ( Line 514  void ChannelForm::updateInstrumentName (
514    
515    
516  // Show device options dialog.  // Show device options dialog.
517  void ChannelForm::setupDevice ( qsamplerDevice *pDevice,  void ChannelForm::setupDevice ( Device *pDevice,
518          qsamplerDevice::qsamplerDeviceType deviceTypeMode,          Device::DeviceType deviceTypeMode,
519          const QString& sDriverName )          const QString& sDriverName )
520  {  {
521          MainForm *pMainForm = MainForm::getInstance();          MainForm *pMainForm = MainForm::getInstance();
# Line 447  void ChannelForm::setupDevice ( qsampler Line 527  void ChannelForm::setupDevice ( qsampler
527          // Create the device form if not already...          // Create the device form if not already...
528          if (m_pDeviceForm == NULL) {          if (m_pDeviceForm == NULL) {
529                  m_pDeviceForm = new DeviceForm(this, Qt::Dialog);                  m_pDeviceForm = new DeviceForm(this, Qt::Dialog);
530          m_pDeviceForm->setAttribute(Qt::WA_ShowModal);                  m_pDeviceForm->setAttribute(Qt::WA_ShowModal);
531                  QObject::connect(m_pDeviceForm, SIGNAL(devicesChanged()),                  QObject::connect(m_pDeviceForm, SIGNAL(devicesChanged()),
532                          this, SLOT(updateDevices()));                          this, SLOT(updateDevices()));
533          }          }
# Line 472  void ChannelForm::selectMidiDriverItem ( Line 552  void ChannelForm::selectMidiDriverItem (
552          if (pMainForm->client() == NULL)          if (pMainForm->client() == NULL)
553                  return;                  return;
554    
555          const QString sDriverName = sMidiDriver.upper();          const QString sDriverName = sMidiDriver.toUpper();
556    
557          // Save current device id.          // Save current device id.
558            // Save current device id.
559          int iDeviceID = 0;          int iDeviceID = 0;
560          qsamplerDevice *pDevice = m_midiDevices.at(ui.MidiDeviceComboBox->currentItem());          Device *pDevice = NULL;
561            int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();
562            if (iMidiItem >= 0 && iMidiItem < m_midiDevices.count())
563                    pDevice = m_midiDevices.at(iMidiItem);
564          if (pDevice)          if (pDevice)
565                  iDeviceID = pDevice->deviceID();                  iDeviceID = pDevice->deviceID();
566    
567          // Clean maplist.          // Clean maplist.
568          ui.MidiDeviceComboBox->clear();          m_ui.MidiDeviceComboBox->clear();
569            qDeleteAll(m_midiDevices);
570          m_midiDevices.clear();          m_midiDevices.clear();
571    
572          // Populate with the current ones...          // Populate with the current ones...
573          const QPixmap midiPixmap(":/qsampler/pixmaps/midi2.png");          const QPixmap midiPixmap(":/icons/midi2.png");
574          int *piDeviceIDs = qsamplerDevice::getDevices(pMainForm->client(),          int *piDeviceIDs = Device::getDevices(pMainForm->client(),
575                  qsamplerDevice::Midi);                  Device::Midi);
576          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
577                  pDevice = new qsamplerDevice(qsamplerDevice::Midi, piDeviceIDs[i]);                  pDevice = new Device(Device::Midi, piDeviceIDs[i]);
578                  if (pDevice->driverName().upper() == sDriverName) {                  if (pDevice->driverName().toUpper() == sDriverName) {
579                          ui.MidiDeviceComboBox->insertItem(midiPixmap, pDevice->deviceName());                          m_ui.MidiDeviceComboBox->insertItem(0,
580                                    midiPixmap, pDevice->deviceName());
581                          m_midiDevices.append(pDevice);                          m_midiDevices.append(pDevice);
582                  } else {                  } else {
583                          delete pDevice;                          delete pDevice;
# Line 502  void ChannelForm::selectMidiDriverItem ( Line 588  void ChannelForm::selectMidiDriverItem (
588          bool bEnabled = !m_midiDevices.isEmpty();          bool bEnabled = !m_midiDevices.isEmpty();
589          if (bEnabled) {          if (bEnabled) {
590                  // Select the previous current device...                  // Select the previous current device...
591                  int iMidiItem = 0;                  iMidiItem = 0;
592                  for (pDevice = m_midiDevices.first();                  QListIterator<Device *> iter(m_midiDevices);
593                                  pDevice;                  while (iter.hasNext()) {
594                                          pDevice = m_midiDevices.next()) {                          pDevice = iter.next();
595                          if (pDevice->deviceID() == iDeviceID) {                          if (pDevice->deviceID() == iDeviceID) {
596                                  ui.MidiDeviceComboBox->setCurrentItem(iMidiItem);                                  m_ui.MidiDeviceComboBox->setCurrentIndex(iMidiItem);
597                                  selectMidiDeviceItem(iMidiItem);                                  selectMidiDeviceItem(iMidiItem);
598                                  break;                                  break;
599                          }                          }
600                          iMidiItem++;                          iMidiItem++;
601                  }                  }
602          } else {          } else {
603                  ui.MidiDeviceComboBox->insertItem(                  m_ui.MidiDeviceComboBox->insertItem(0,
604                          tr("(New MIDI %1 device)").arg(sMidiDriver));                          tr("(New MIDI %1 device)").arg(sMidiDriver));
605          }          }
606          ui.MidiDeviceTextLabel->setEnabled(bEnabled);          m_ui.MidiDeviceTextLabel->setEnabled(bEnabled);
607          ui.MidiDeviceComboBox->setEnabled(bEnabled);          m_ui.MidiDeviceComboBox->setEnabled(bEnabled);
608  }  }
609    
610    
# Line 536  void ChannelForm::selectMidiDriver ( con Line 622  void ChannelForm::selectMidiDriver ( con
622  // Select MIDI device item.  // Select MIDI device item.
623  void ChannelForm::selectMidiDeviceItem ( int iMidiItem )  void ChannelForm::selectMidiDeviceItem ( int iMidiItem )
624  {  {
625          qsamplerDevice *pDevice = m_midiDevices.at(iMidiItem);          Device *pDevice = NULL;
626            if (iMidiItem >= 0 && iMidiItem < m_midiDevices.count())
627                    pDevice = m_midiDevices.at(iMidiItem);
628          if (pDevice) {          if (pDevice) {
629                  const qsamplerDeviceParamMap& params = pDevice->params();                  const DeviceParamMap& params = pDevice->params();
630                  int iPorts = params["PORTS"].value.toInt();                  int iPorts = params["PORTS"].value.toInt();
631                  ui.MidiPortTextLabel->setEnabled(iPorts > 0);                  m_ui.MidiPortTextLabel->setEnabled(iPorts > 0);
632                  ui.MidiPortSpinBox->setEnabled(iPorts > 0);                  m_ui.MidiPortSpinBox->setEnabled(iPorts > 0);
633                  if (iPorts > 0)                  if (iPorts > 0)
634                          ui.MidiPortSpinBox->setMaxValue(iPorts - 1);                          m_ui.MidiPortSpinBox->setMaximum(iPorts - 1);
635          }          }
636  }  }
637    
# Line 562  void ChannelForm::selectMidiDevice ( int Line 650  void ChannelForm::selectMidiDevice ( int
650  // MIDI device options.  // MIDI device options.
651  void ChannelForm::setupMidiDevice (void)  void ChannelForm::setupMidiDevice (void)
652  {  {
653          setupDevice(m_midiDevices.at(ui.MidiDeviceComboBox->currentItem()),          Device *pDevice = NULL;
654                  qsamplerDevice::Midi, ui.MidiDriverComboBox->currentText());          int iMidiItem = m_ui.MidiDeviceComboBox->currentIndex();
655            if (iMidiItem >= 0 && iMidiItem < m_midiDevices.count())
656                    pDevice = m_midiDevices.at(iMidiItem);
657            setupDevice(pDevice,
658                    Device::Midi, m_ui.MidiDriverComboBox->currentText());
659  }  }
660    
661    
# Line 576  void ChannelForm::selectAudioDriverItem Line 668  void ChannelForm::selectAudioDriverItem
668          if (pMainForm->client() == NULL)          if (pMainForm->client() == NULL)
669                  return;                  return;
670    
671          const QString sDriverName = sAudioDriver.upper();          const QString sDriverName = sAudioDriver.toUpper();
672    
673          // Save current device id.          // Save current device id.
674          int iDeviceID = 0;          int iDeviceID = 0;
675          qsamplerDevice *pDevice = m_audioDevices.at(ui.AudioDeviceComboBox->currentItem());          Device *pDevice = NULL;
676            int iAudioItem = m_ui.AudioDeviceComboBox->currentIndex();
677            if (iAudioItem >= 0 && iAudioItem < m_audioDevices.count())
678                    pDevice = m_audioDevices.at(iAudioItem);
679          if (pDevice)          if (pDevice)
680                  iDeviceID = pDevice->deviceID();                  iDeviceID = pDevice->deviceID();
681    
682          // Clean maplist.          // Clean maplist.
683          ui.AudioDeviceComboBox->clear();          m_ui.AudioDeviceComboBox->clear();
684            qDeleteAll(m_audioDevices);
685          m_audioDevices.clear();          m_audioDevices.clear();
686    
687          // Populate with the current ones...          // Populate with the current ones...
688          const QPixmap audioPixmap(":/qsampler/pixmaps/audio2.png");          const QPixmap audioPixmap(":/icons/audio2.png");
689          int *piDeviceIDs = qsamplerDevice::getDevices(pMainForm->client(),          int *piDeviceIDs = Device::getDevices(pMainForm->client(),
690                  qsamplerDevice::Audio);                  Device::Audio);
691          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
692                  pDevice = new qsamplerDevice(qsamplerDevice::Audio, piDeviceIDs[i]);                  pDevice = new Device(Device::Audio, piDeviceIDs[i]);
693                  if (pDevice->driverName().upper() == sDriverName) {                  if (pDevice->driverName().toUpper() == sDriverName) {
694                          ui.AudioDeviceComboBox->insertItem(audioPixmap, pDevice->deviceName());                          m_ui.AudioDeviceComboBox->insertItem(0,
695                                    audioPixmap, pDevice->deviceName());
696                          m_audioDevices.append(pDevice);                          m_audioDevices.append(pDevice);
697                  } else {                  } else {
698                          delete pDevice;                          delete pDevice;
# Line 606  void ChannelForm::selectAudioDriverItem Line 703  void ChannelForm::selectAudioDriverItem
703          bool bEnabled = !m_audioDevices.isEmpty();          bool bEnabled = !m_audioDevices.isEmpty();
704          if (bEnabled) {          if (bEnabled) {
705                  // Select the previous current device...                  // Select the previous current device...
706                  int iAudioItem = 0;                  iAudioItem = 0;
707                  for (pDevice = m_audioDevices.first();                  QListIterator<Device *> iter(m_audioDevices);
708                                  pDevice;                  while (iter.hasNext()) {
709                                          pDevice = m_audioDevices.next()) {                          pDevice = iter.next();
710                          if (pDevice->deviceID() == iDeviceID) {                          if (pDevice->deviceID() == iDeviceID) {
711                                  ui.AudioDeviceComboBox->setCurrentItem(iAudioItem);                                  m_ui.AudioDeviceComboBox->setCurrentIndex(iAudioItem);
712                                  selectAudioDeviceItem(iAudioItem);                                  selectAudioDeviceItem(iAudioItem);
713                                  break;                                  break;
714                          }                          }
715                          iAudioItem++;                          iAudioItem++;
716                  }                  }
717          } else {          } else {
718                  ui.AudioDeviceComboBox->insertItem(                  m_ui.AudioDeviceComboBox->insertItem(0,
719                          tr("(New Audio %1 device)").arg(sAudioDriver));                          tr("(New Audio %1 device)").arg(sAudioDriver));
720                  //ui.AudioRoutingTable->setNumRows(0);                  //m_ui.AudioRoutingTable->setNumRows(0);
721          }          }
722          ui.AudioDeviceTextLabel->setEnabled(bEnabled);          m_ui.AudioDeviceTextLabel->setEnabled(bEnabled);
723          ui.AudioDeviceComboBox->setEnabled(bEnabled);          m_ui.AudioDeviceComboBox->setEnabled(bEnabled);
724          ui.AudioRoutingTable->setEnabled(bEnabled);          m_ui.AudioRoutingTable->setEnabled(bEnabled);
725  }  }
726    
727    
# Line 642  void ChannelForm::selectAudioDriver ( co Line 739  void ChannelForm::selectAudioDriver ( co
739  // Select Audio device item.  // Select Audio device item.
740  void ChannelForm::selectAudioDeviceItem ( int iAudioItem )  void ChannelForm::selectAudioDeviceItem ( int iAudioItem )
741  {  {
742          qsamplerDevice *pDevice = m_audioDevices.at(iAudioItem);          Device *pDevice = NULL;
743            if (iAudioItem >= 0 && iAudioItem < m_audioDevices.count())
744                    pDevice = m_audioDevices.at(iAudioItem);
745          if (pDevice) {          if (pDevice) {
746                  // Refresh the audio routing table.                  // Refresh the audio routing table.
747                  routingModel.refresh(pDevice, m_pChannel->audioRouting());                  m_routingModel.refresh(pDevice, m_pChannel->audioRouting());
748                  // Reset routing change map.                  // Reset routing change map.
749                  m_audioRouting.clear();                  m_routingModel.clear();
750          }          }
751  }  }
752    
# Line 666  void ChannelForm::selectAudioDevice ( in Line 765  void ChannelForm::selectAudioDevice ( in
765  // Audio device options.  // Audio device options.
766  void ChannelForm::setupAudioDevice (void)  void ChannelForm::setupAudioDevice (void)
767  {  {
768          setupDevice(m_audioDevices.at(ui.AudioDeviceComboBox->currentItem()),          Device *pDevice = NULL;
769                  qsamplerDevice::Audio, ui.AudioDriverComboBox->currentText());          int iAudioItem = m_ui.AudioDeviceComboBox->currentIndex();
770            if (iAudioItem >= 0 && iAudioItem < m_audioDevices.count())
771                    pDevice = m_audioDevices.at(iAudioItem);
772            setupDevice(pDevice,
773                    Device::Audio, m_ui.AudioDriverComboBox->currentText());
774  }  }
775    
   
 // Audio routing change slot.  
 void ChannelForm::changeAudioRouting ( int iRow, int iCol )  
 {  
 #if 0  
         if (m_iDirtySetup > 0)  
                 return;  
         if (iRow < 0 || iCol < 0)  
                 return;  
   
         // Verify that this is a QComboTableItem (magic rtti == 1)  
         QTableItem *pItem = ui.AudioRoutingTable->item(iRow, iCol);  
         if (pItem == NULL)  
                 return;  
         qsamplerChannelRoutingComboBox *pComboItem =  
                 static_cast<qsamplerChannelRoutingComboBox*> (pItem);  
         // FIXME: Its not garanteed that we must have  
         // iAudioOut == iRow on all times forth!  
         m_audioRouting[iRow] = pComboItem->currentItem();  
   
         // And let's get dirty...  
         optionsChanged();  
 #endif  
 }  
   
   
776  // UPdate all device lists slot.  // UPdate all device lists slot.
777  void ChannelForm::updateDevices (void)  void ChannelForm::updateDevices (void)
778  {  {
779          if (m_iDirtySetup > 0)          if (m_iDirtySetup > 0)
780                  return;                  return;
781    
782          selectMidiDriverItem(ui.MidiDriverComboBox->currentText());          selectMidiDriverItem(m_ui.MidiDriverComboBox->currentText());
783          selectAudioDriverItem(ui.AudioDriverComboBox->currentText());          selectAudioDriverItem(m_ui.AudioDriverComboBox->currentText());
784          optionsChanged();          optionsChanged();
785  }  }
786    
# Line 722  void ChannelForm::optionsChanged (void) Line 799  void ChannelForm::optionsChanged (void)
799  // Stabilize current form state.  // Stabilize current form state.
800  void ChannelForm::stabilizeForm (void)  void ChannelForm::stabilizeForm (void)
801  {  {
802          bool bValid = true;          const bool bValid =
803                    m_ui.EngineNameComboBox->currentIndex() >= 0 &&
804                    m_ui.EngineNameComboBox->currentText()
805                            != Channel::noEngineName();
806  #if 0  #if 0
807          const QString& sPath = InstrumentFileComboBox->currentText();          const QString& sPath = InstrumentFileComboBox->currentText();
808          bValid = bValid && !sPath.isEmpty() && QFileInfo(sPath).exists();          bValid = bValid && !sPath.isEmpty() && QFileInfo(sPath).exists();
809  #endif  #endif
810          ui.OkPushButton->setEnabled(m_iDirtyCount > 0 && bValid);          m_ui.OkPushButton->setEnabled(m_iDirtyCount > 0 && bValid);
811    }
812    
813    
814    void ChannelForm::updateTableCellRenderers (void)
815    {
816            const int rows = m_routingModel.rowCount();
817            const int cols = m_routingModel.columnCount();
818            updateTableCellRenderers(
819                    m_routingModel.index(0, 0),
820                    m_routingModel.index(rows - 1, cols - 1));
821  }  }
822    
823    
824    void ChannelForm::updateTableCellRenderers (
825            const QModelIndex& topLeft, const QModelIndex& bottomRight )
826    {
827            for (int r = topLeft.row(); r <= bottomRight.row(); r++) {
828                    for (int c = topLeft.column(); c <= bottomRight.column(); c++) {
829                            const QModelIndex index = m_routingModel.index(r, c);
830                            m_ui.AudioRoutingTable->openPersistentEditor(index);
831                    }
832            }
833    }
834    
835  } // namespace QSampler  } // namespace QSampler
836    
837    

Legend:
Removed from v.1466  
changed lines
  Added in v.1840

  ViewVC Help
Powered by ViewVC