/[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 161 by capela, Tue Jun 29 21:55:30 2004 UTC revision 463 by capela, Tue Mar 15 15:32:29 2005 UTC
# Line 2  Line 2 
2  //  //
3  // ui.h extension file, included from the uic-generated form implementation.  // ui.h extension file, included from the uic-generated form implementation.
4  /****************************************************************************  /****************************************************************************
5     Copyright (C) 2004, rncbc aka Rui Nuno Capela. All rights reserved.     Copyright (C) 2004-2005, rncbc aka Rui Nuno Capela. All rights reserved.
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 26  Line 26 
26  #include <qfileinfo.h>  #include <qfileinfo.h>
27  #include <qlistbox.h>  #include <qlistbox.h>
28    
 #include "qsamplerOptions.h"  
 #include "qsamplerChannelStrip.h"  
   
29  #include "config.h"  #include "config.h"
30    
31    
# Line 41  void qsamplerChannelForm::init (void) Line 38  void qsamplerChannelForm::init (void)
38      m_iDirtySetup = 0;      m_iDirtySetup = 0;
39      m_iDirtyCount = 0;      m_iDirtyCount = 0;
40    
41            m_midiDevices.setAutoDelete(true);
42            m_audioDevices.setAutoDelete(true);
43    
44      // Try to restore normal window positioning.      // Try to restore normal window positioning.
45      adjustSize();      adjustSize();
46  }  }
# Line 53  void qsamplerChannelForm::destroy (void) Line 53  void qsamplerChannelForm::destroy (void)
53    
54    
55  // Channel dialog setup formal initializer.  // Channel dialog setup formal initializer.
56  void qsamplerChannelForm::setup ( qsamplerChannelStrip *pChannel )  void qsamplerChannelForm::setup ( qsamplerChannel *pChannel )
57  {  {
58      m_pChannel = pChannel;      m_pChannel = pChannel;
59    
# Line 63  void qsamplerChannelForm::setup ( qsampl Line 63  void qsamplerChannelForm::setup ( qsampl
63      if (m_pChannel == NULL)      if (m_pChannel == NULL)
64          return;          return;
65    
66      setCaption(m_pChannel->caption());      // It can be a brand new channel, remember?
67        bool bNew = (m_pChannel->channelID() < 0);
68        setCaption(m_pChannel->channelName());
69    
70      // Check if we're up and connected.      // Check if we're up and connected.
71      if (m_pChannel->client() == NULL)      if (m_pChannel->client() == NULL)
# Line 89  void qsamplerChannelForm::setup ( qsampl Line 91  void qsamplerChannelForm::setup ( qsampl
91      else m_pChannel->appendMessagesClient("lscp_get_available_engines");      else m_pChannel->appendMessagesClient("lscp_get_available_engines");
92    
93      // Populate Audio output type list.      // Populate Audio output type list.
94      const char **ppszAudioDrivers = ::lscp_get_available_audio_drivers(m_pChannel->client());      AudioDriverComboBox->clear();
95      if (ppszAudioDrivers) {      AudioDriverComboBox->insertStringList(
96          AudioDriverComboBox->clear();                  qsamplerDevice::getDrivers(m_pChannel->client(), qsamplerDevice::Audio));
         for (int iAudioDriver = 0; ppszAudioDrivers[iAudioDriver]; iAudioDriver++)  
             AudioDriverComboBox->insertItem(ppszAudioDrivers[iAudioDriver]);  
     }  
     else m_pChannel->appendMessagesClient("lscp_get_available_audio_drivers");  
97    
98      // Populate MIDI input type list.      // Populate MIDI input type list.
99      const char **ppszMidiDrivers = ::lscp_get_available_midi_drivers(m_pChannel->client());      MidiDriverComboBox->clear();
100      if (ppszMidiDrivers) {      MidiDriverComboBox->insertStringList(
101          MidiDriverComboBox->clear();                  qsamplerDevice::getDrivers(m_pChannel->client(), qsamplerDevice::Midi));
         for (int iMidiDriver = 0; ppszMidiDrivers[iMidiDriver]; iMidiDriver++)  
             MidiDriverComboBox->insertItem(ppszMidiDrivers[iMidiDriver]);  
     }  
     else m_pChannel->appendMessagesClient("lscp_get_available_midi_drivers");  
102    
103      // Read proper channel information,      // Read proper channel information,
104      // and populate the channel form fields.      // and populate the channel form fields.
105    
106      // Engine name...      // Engine name...
107      QString sEngineName = pChannel->engineName();      QString sEngineName = pChannel->engineName();
108        if (sEngineName.isEmpty() || bNew)
109            sEngineName = pOptions->sEngineName;
110      if (sEngineName.isEmpty())      if (sEngineName.isEmpty())
111          sEngineName = tr("(No engine)");          sEngineName = qsamplerChannel::noEngineName();
112      if (EngineNameComboBox->listBox()->findItem(sEngineName, Qt::ExactMatch) == NULL)      if (EngineNameComboBox->listBox()->findItem(sEngineName, Qt::ExactMatch) == NULL)
113          EngineNameComboBox->insertItem(sEngineName);          EngineNameComboBox->insertItem(sEngineName);
114      EngineNameComboBox->setCurrentText(sEngineName);      EngineNameComboBox->setCurrentText(sEngineName);
115      // Instrument filename and index...      // Instrument filename and index...
116      QString sInstrumentFile = pChannel->instrumentFile();      QString sInstrumentFile = pChannel->instrumentFile();
117      if (sInstrumentFile.isEmpty())      if (sInstrumentFile.isEmpty())
118          sInstrumentFile = tr("(No instrument)");          sInstrumentFile = qsamplerChannel::noInstrumentName();
119      InstrumentFileComboBox->setCurrentText(sInstrumentFile);      InstrumentFileComboBox->setCurrentText(sInstrumentFile);
120      InstrumentNrSpinBox->setValue(pChannel->instrumentNr());      InstrumentNrComboBox->clear();
121      // MIDI input...      InstrumentNrComboBox->insertStringList(
122      const QString& sMidiDriver = pChannel->midiDriver();                  qsamplerChannel::getInstrumentList(sInstrumentFile,
123      if (!sMidiDriver.isEmpty()) {                  pOptions->bInstrumentNames));
124          if (MidiDriverComboBox->listBox()->findItem(sMidiDriver, Qt::ExactMatch) == NULL)      InstrumentNrComboBox->setCurrentItem(pChannel->instrumentNr());
125              MidiDriverComboBox->insertItem(sMidiDriver);      
126          MidiDriverComboBox->setCurrentText(sMidiDriver);          // MIDI input device...
127      }          qsamplerDevice midiDevice(m_pChannel->client(),
128                    qsamplerDevice::Midi, m_pChannel->midiDevice());
129        // MIDI input driver...
130            QString sMidiDriver = midiDevice.driverName();
131            if (sMidiDriver.isEmpty() || bNew)
132                    sMidiDriver = pOptions->sMidiDriver;
133            if (!sMidiDriver.isEmpty()) {
134                    if (MidiDriverComboBox->listBox()->findItem(sMidiDriver, Qt::ExactMatch) == NULL)
135                            MidiDriverComboBox->insertItem(sMidiDriver);
136                    MidiDriverComboBox->setCurrentText(sMidiDriver);
137            }
138            selectMidiDriver(sMidiDriver);
139            if (!bNew)
140                    MidiDeviceComboBox->setCurrentText(midiDevice.deviceName());
141            selectMidiDevice(MidiDeviceComboBox->currentItem());
142        // MIDI input port...
143      MidiPortSpinBox->setValue(pChannel->midiPort());      MidiPortSpinBox->setValue(pChannel->midiPort());
144      MidiChannelSpinBox->setValue(pChannel->midiChannel());      // MIDI input channel...
145      // Audio output...      int iMidiChannel = pChannel->midiChannel();
146      const QString& sAudioDriver = pChannel->audioDriver();      // When new, try to suggest a sensible MIDI channel...
147      if (!sAudioDriver.isEmpty()) {      if (iMidiChannel < 0)
148          if (AudioDriverComboBox->listBox()->findItem(sAudioDriver, Qt::ExactMatch) == NULL)          iMidiChannel = (::lscp_get_channels(m_pChannel->client()) % 16);
149              AudioDriverComboBox->insertItem(sAudioDriver);      MidiChannelComboBox->setCurrentItem(iMidiChannel);
150          AudioDriverComboBox->setCurrentText(sAudioDriver);  
151      }          // Audio output device...
152            qsamplerDevice audioDevice(m_pChannel->client(),
153                    qsamplerDevice::Audio, m_pChannel->audioDevice());
154            // Audio output driver...
155            QString sAudioDriver = audioDevice.driverName();
156            if (sAudioDriver.isEmpty() || bNew)
157                    sAudioDriver = pOptions->sAudioDriver;
158            if (!sAudioDriver.isEmpty()) {
159                    if (AudioDriverComboBox->listBox()->findItem(sAudioDriver, Qt::ExactMatch) == NULL)
160                            AudioDriverComboBox->insertItem(sAudioDriver);
161                    AudioDriverComboBox->setCurrentText(sAudioDriver);
162            }
163            selectAudioDriver(sAudioDriver);
164            if (!bNew)
165                    AudioDeviceComboBox->setCurrentText(audioDevice.deviceName());
166            selectAudioDevice(AudioDeviceComboBox->currentItem());
167    
168            // As convenient, make it ready on stabilizeForm() for
169            // prompt acceptance, if we got the minimum required...
170            if (sEngineName != qsamplerChannel::noEngineName() &&
171                    sInstrumentFile != qsamplerChannel::noInstrumentName())
172                    m_iDirtyCount++;
173      // Done.      // Done.
174      m_iDirtySetup--;      m_iDirtySetup--;
175      stabilizeForm();      stabilizeForm();
# Line 157  void qsamplerChannelForm::accept (void) Line 189  void qsamplerChannelForm::accept (void)
189      // We'll go for it!      // We'll go for it!
190      if (m_iDirtyCount > 0) {      if (m_iDirtyCount > 0) {
191          int iErrors = 0;          int iErrors = 0;
192          // Audio output driver type...          // Are we a new channel?
193          if (!m_pChannel->setAudioDriver(AudioDriverComboBox->currentText()))          if (!m_pChannel->addChannel())
             iErrors++;  
         // MIDI input driver type...  
         if (!m_pChannel->setMidiDriver(MidiDriverComboBox->currentText()))  
194              iErrors++;              iErrors++;
195                    // Accept Audio driver or device selection...
196                    if (m_audioDevices.isEmpty()) {
197                            if (!m_pChannel->setAudioDriver(AudioDriverComboBox->currentText()))
198                                    iErrors++;
199                    } else {
200                            qsamplerDevice *pDevice = m_audioDevices.at(AudioDeviceComboBox->currentItem());
201                            if (pDevice == NULL)
202                                    iErrors++;
203                            else if (!m_pChannel->setAudioDevice(pDevice->deviceID()))
204                                    iErrors++;
205                    }
206                    // Accept MIDI driver or device selection...
207                    if (m_midiDevices.isEmpty()) {
208                            if (!m_pChannel->setMidiDriver(MidiDriverComboBox->currentText()))
209                                    iErrors++;
210                    } else {
211                            qsamplerDevice *pDevice = m_midiDevices.at(MidiDeviceComboBox->currentItem());
212                            if (pDevice == NULL)
213                                    iErrors++;
214                            else if (!m_pChannel->setMidiDevice(pDevice->deviceID()))
215                                    iErrors++;
216                    }
217          // MIDI input port number...          // MIDI input port number...
218          if (!m_pChannel->setMidiPort(MidiPortSpinBox->value()))          if (!m_pChannel->setMidiPort(MidiPortSpinBox->value()))
219              iErrors++;              iErrors++;
220          // MIDI input channel...          // MIDI input channel...
221          if (!m_pChannel->setMidiChannel(MidiChannelSpinBox->value()))          if (!m_pChannel->setMidiChannel(MidiChannelComboBox->currentItem()))
222              iErrors++;              iErrors++;
223          // Engine name...          // Engine name...
224          if (!m_pChannel->loadEngine(EngineNameComboBox->currentText()))          if (!m_pChannel->loadEngine(EngineNameComboBox->currentText()))
225              iErrors++;              iErrors++;
226          // Instrument file and index...          // Instrument file and index...
227          if (!m_pChannel->loadInstrument(InstrumentFileComboBox->currentText(), InstrumentNrSpinBox->value()))          if (!m_pChannel->loadInstrument(InstrumentFileComboBox->currentText(), InstrumentNrComboBox->currentItem()))
228              iErrors++;              iErrors++;
229          // Show error messages?          // Show error messages?
230          if (iErrors > 0)          if (iErrors > 0)
231              m_pChannel->appendMessagesError(tr("Some channel settings could not be set.\n\nSorry."));              m_pChannel->appendMessagesError(tr("Some channel settings could not be set.\n\nSorry."));
232      }      }
233    
234      // Save default instrument directory and history...      // Save default engine name, instrument directory and history...
235      pOptions->sInstrumentDir = QFileInfo(InstrumentFileComboBox->currentText()).dirPath(true);      pOptions->sInstrumentDir = QFileInfo(InstrumentFileComboBox->currentText()).dirPath(true);
236        pOptions->sEngineName  = EngineNameComboBox->currentText();
237        pOptions->sAudioDriver = AudioDriverComboBox->currentText();
238        pOptions->sMidiDriver  = MidiDriverComboBox->currentText();
239      pOptions->saveComboBoxHistory(InstrumentFileComboBox);      pOptions->saveComboBoxHistory(InstrumentFileComboBox);
240    
241      // Just go with dialog acceptance.      // Just go with dialog acceptance.
# Line 195  void qsamplerChannelForm::reject (void) Line 249  void qsamplerChannelForm::reject (void)
249      bool bReject = true;      bool bReject = true;
250    
251      // Check if there's any pending changes...      // Check if there's any pending changes...
252      if (m_iDirtyCount > 0) {      if (m_iDirtyCount > 0 && OkPushButton->isEnabled()) {
253          switch (QMessageBox::warning(this, tr("Warning"),          switch (QMessageBox::warning(this, tr("Warning"),
254              tr("Some channel settings have been changed.\n\n"              tr("Some channel settings have been changed.\n\n"
255                 "Do you want to apply the changes?"),                 "Do you want to apply the changes?"),
# Line 241  void qsamplerChannelForm::openInstrument Line 295  void qsamplerChannelForm::openInstrument
295  // Refresh the actual instrument name.  // Refresh the actual instrument name.
296  void qsamplerChannelForm::updateInstrumentName (void)  void qsamplerChannelForm::updateInstrumentName (void)
297  {  {
298      // FIXME: A better idea would be to use libgig      qsamplerOptions *pOptions = m_pChannel->options();
299      // to retrieve the REAL instrument name.      if (pOptions == NULL)
300      InstrumentNameTextLabel->setText(QFileInfo(InstrumentFileComboBox->currentText()).fileName()          return;
301          + " [" + QString::number(InstrumentNrSpinBox->value()) + "]");  
302        // Finally this better idea would be to use libgig
303        // to retrieve the REAL instrument names.
304        InstrumentNrComboBox->clear();
305        InstrumentNrComboBox->insertStringList(
306            qsamplerChannel::getInstrumentList(
307                            InstrumentFileComboBox->currentText(),
308                            pOptions->bInstrumentNames)
309        );
310    
311      optionsChanged();      optionsChanged();
312  }  }
313    
314    
315    // Refresh MIDI device options.
316    void qsamplerChannelForm::selectMidiDriver ( const QString& sMidiDriver )
317    {
318            const QString sDriverName = sMidiDriver.upper();
319            
320            MidiDeviceComboBox->clear();
321            m_audioDevices.clear();
322    
323            const QPixmap& midiPixmap = QPixmap::fromMimeSource("midi2.png");
324            int *piDeviceIDs = qsamplerDevice::getDevices(m_pChannel->client(),
325                    qsamplerDevice::Midi);
326            for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
327                    qsamplerDevice *pDevice = new qsamplerDevice(m_pChannel->client(),
328                            qsamplerDevice::Midi, piDeviceIDs[i]);
329                    if (pDevice->driverName().upper() == sDriverName) {
330                            MidiDeviceComboBox->insertItem(midiPixmap, pDevice->deviceName());
331                            m_midiDevices.append(pDevice);
332                    } else {
333                            delete pDevice;
334                    }
335            }
336    
337            bool bEnabled = !m_midiDevices.isEmpty();
338            if (!bEnabled)
339                    MidiDeviceComboBox->insertItem(tr("(New MIDI device)"));
340            MidiDeviceTextLabel->setEnabled(bEnabled);
341            MidiDeviceComboBox->setEnabled(bEnabled);
342            optionsChanged();
343    }
344    
345    
346    // Select MIDI device options.
347    void qsamplerChannelForm::selectMidiDevice ( int iMidiItem )
348    {
349            qsamplerDevice *pDevice = m_midiDevices.at(iMidiItem);
350            if (pDevice) {
351                    const qsamplerDeviceParamMap& params = pDevice->params();
352                    int iPorts = params["PORTS"].value.toInt();
353                    MidiPortTextLabel->setEnabled(iPorts > 0);
354                    MidiPortSpinBox->setEnabled(iPorts > 0);
355                    if (iPorts > 0)
356                            MidiPortSpinBox->setMaxValue(iPorts - 1);
357            }
358            optionsChanged();
359    }
360    
361    
362    // Refresh Audio device options.
363    void qsamplerChannelForm::selectAudioDriver ( const QString& sAudioDriver )
364    {
365            const QString sDriverName = sAudioDriver.upper();
366    
367            AudioDeviceComboBox->clear();
368            m_audioDevices.clear();
369    
370            const QPixmap& audioPixmap = QPixmap::fromMimeSource("audio2.png");
371            int *piDeviceIDs = qsamplerDevice::getDevices(m_pChannel->client(),
372                    qsamplerDevice::Audio);
373            for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
374                    qsamplerDevice *pDevice = new qsamplerDevice(m_pChannel->client(),
375                            qsamplerDevice::Audio, piDeviceIDs[i]);
376                    if (pDevice->driverName().upper() == sDriverName) {
377                            AudioDeviceComboBox->insertItem(audioPixmap, pDevice->deviceName());
378                            m_audioDevices.append(pDevice);
379                    } else {
380                            delete pDevice;
381                    }
382            }
383    
384            bool bEnabled = !m_audioDevices.isEmpty();
385            if (!bEnabled)
386                    AudioDeviceComboBox->insertItem(tr("(New Audio device)"));
387            AudioDeviceTextLabel->setEnabled(bEnabled);
388            AudioDeviceComboBox->setEnabled(bEnabled);
389            optionsChanged();
390    }
391    
392    
393    // Select Audio device options.
394    void qsamplerChannelForm::selectAudioDevice ( int iAudioItem )
395    {
396            qsamplerDevice *pDevice = m_audioDevices.at(iAudioItem);
397            if (pDevice) {
398                    // Is there anything to do here?
399            }
400            optionsChanged();
401    }
402    
403    
404  // Dirty up settings.  // Dirty up settings.
405  void qsamplerChannelForm::optionsChanged (void)  void qsamplerChannelForm::optionsChanged (void)

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

  ViewVC Help
Powered by ViewVC