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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 455 - (hide annotations) (download) (as text)
Mon Mar 14 12:59:27 2005 UTC (19 years, 1 month ago) by capela
File MIME type: text/x-c++hdr
File size: 13651 byte(s)
* Device configuration is now included and saved on session files.

1 capela 104 // qsamplerChannelForm.ui.h
2     //
3     // ui.h extension file, included from the uic-generated form implementation.
4     /****************************************************************************
5 capela 341 Copyright (C) 2004-2005, rncbc aka Rui Nuno Capela. All rights reserved.
6 capela 104
7     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License
9     as published by the Free Software Foundation; either version 2
10     of the License, or (at your option) any later version.
11    
12     This program is distributed in the hope that it will be useful,
13     but WITHOUT ANY WARRANTY; without even the implied warranty of
14     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15     GNU General Public License for more details.
16    
17     You should have received a copy of the GNU General Public License
18     along with this program; if not, write to the Free Software
19     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20    
21     *****************************************************************************/
22    
23     #include <qvalidator.h>
24     #include <qmessagebox.h>
25     #include <qfiledialog.h>
26     #include <qfileinfo.h>
27     #include <qlistbox.h>
28    
29     #include "config.h"
30    
31    
32     // Kind of constructor.
33     void qsamplerChannelForm::init (void)
34     {
35     // Initialize locals.
36     m_pChannel = NULL;
37    
38     m_iDirtySetup = 0;
39     m_iDirtyCount = 0;
40    
41 capela 452 m_midiDevices.setAutoDelete(true);
42     m_audioDevices.setAutoDelete(true);
43    
44 capela 104 // Try to restore normal window positioning.
45     adjustSize();
46     }
47    
48    
49     // Kind of destructor.
50     void qsamplerChannelForm::destroy (void)
51     {
52     }
53    
54    
55     // Channel dialog setup formal initializer.
56 capela 295 void qsamplerChannelForm::setup ( qsamplerChannel *pChannel )
57 capela 104 {
58     m_pChannel = pChannel;
59    
60     m_iDirtySetup = 0;
61     m_iDirtyCount = 0;
62    
63     if (m_pChannel == NULL)
64     return;
65    
66 capela 295 // It can be a brand new channel, remember?
67     bool bNew = (m_pChannel->channelID() < 0);
68     setCaption(m_pChannel->channelName());
69 capela 104
70     // Check if we're up and connected.
71     if (m_pChannel->client() == NULL)
72     return;
73    
74     qsamplerOptions *pOptions = m_pChannel->options();
75     if (pOptions == NULL)
76     return;
77    
78     // Avoid nested changes.
79     m_iDirtySetup++;
80    
81     // Load combo box history...
82     pOptions->loadComboBoxHistory(InstrumentFileComboBox);
83    
84     // Populate Engines list.
85     const char **ppszEngines = ::lscp_get_available_engines(m_pChannel->client());
86     if (ppszEngines) {
87     EngineNameComboBox->clear();
88     for (int iEngine = 0; ppszEngines[iEngine]; iEngine++)
89     EngineNameComboBox->insertItem(ppszEngines[iEngine]);
90     }
91     else m_pChannel->appendMessagesClient("lscp_get_available_engines");
92 capela 145
93 capela 104 // Populate Audio output type list.
94 capela 430 AudioDriverComboBox->clear();
95     AudioDriverComboBox->insertStringList(
96     qsamplerDevice::getDrivers(m_pChannel->client(), qsamplerDevice::Audio));
97 capela 104
98     // Populate MIDI input type list.
99 capela 430 MidiDriverComboBox->clear();
100     MidiDriverComboBox->insertStringList(
101     qsamplerDevice::getDrivers(m_pChannel->client(), qsamplerDevice::Midi));
102 capela 145
103 capela 104 // Read proper channel information,
104     // and populate the channel form fields.
105    
106     // Engine name...
107 capela 145 QString sEngineName = pChannel->engineName();
108 capela 400 if (sEngineName.isEmpty() || bNew)
109 capela 176 sEngineName = pOptions->sEngineName;
110 capela 145 if (sEngineName.isEmpty())
111 capela 388 sEngineName = qsamplerChannel::noEngineName();
112 capela 145 if (EngineNameComboBox->listBox()->findItem(sEngineName, Qt::ExactMatch) == NULL)
113     EngineNameComboBox->insertItem(sEngineName);
114     EngineNameComboBox->setCurrentText(sEngineName);
115 capela 104 // Instrument filename and index...
116 capela 145 QString sInstrumentFile = pChannel->instrumentFile();
117     if (sInstrumentFile.isEmpty())
118 capela 388 sInstrumentFile = qsamplerChannel::noInstrumentName();
119 capela 145 InstrumentFileComboBox->setCurrentText(sInstrumentFile);
120 capela 299 InstrumentNrComboBox->clear();
121 capela 344 InstrumentNrComboBox->insertStringList(
122     qsamplerChannel::getInstrumentList(sInstrumentFile,
123     pOptions->bInstrumentNames));
124 capela 299 InstrumentNrComboBox->setCurrentItem(pChannel->instrumentNr());
125 capela 452
126     // MIDI input device...
127     qsamplerDevice midiDevice(m_pChannel->client(),
128     qsamplerDevice::Midi, m_pChannel->midiDevice());
129 capela 176 // MIDI input driver...
130 capela 452 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 capela 455 selectMidiDevice(MidiDeviceComboBox->currentItem());
142 capela 176 // MIDI input port...
143 capela 104 MidiPortSpinBox->setValue(pChannel->midiPort());
144 capela 176 // MIDI input channel...
145     int iMidiChannel = pChannel->midiChannel();
146 capela 295 // When new, try to suggest a sensible MIDI channel...
147     if (iMidiChannel < 0)
148     iMidiChannel = (::lscp_get_channels(m_pChannel->client()) % 16);
149 capela 255 MidiChannelComboBox->setCurrentItem(iMidiChannel);
150 capela 455
151 capela 452 // 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 capela 455 selectAudioDevice(AudioDeviceComboBox->currentItem());
167 capela 452
168 capela 391 // As convenient, make it ready on stabilizeForm() for
169     // prompt acceptance, if we got the minimum required...
170 capela 395 if (sEngineName != qsamplerChannel::noEngineName() &&
171     sInstrumentFile != qsamplerChannel::noInstrumentName())
172     m_iDirtyCount++;
173 capela 455 // FIXME: These are better leave disabled...
174 capela 409 MidiPortTextLabel->setEnabled(false);
175     MidiPortSpinBox->setEnabled(false);
176 capela 104 // Done.
177     m_iDirtySetup--;
178     stabilizeForm();
179     }
180    
181    
182     // Accept settings (OK button slot).
183     void qsamplerChannelForm::accept (void)
184     {
185     if (m_pChannel == NULL)
186     return;
187    
188     qsamplerOptions *pOptions = m_pChannel->options();
189     if (pOptions == NULL)
190     return;
191    
192     // We'll go for it!
193     if (m_iDirtyCount > 0) {
194     int iErrors = 0;
195 capela 295 // Are we a new channel?
196     if (!m_pChannel->addChannel())
197     iErrors++;
198 capela 452 // Accept Audio driver or device selection...
199     if (m_audioDevices.isEmpty()) {
200     if (!m_pChannel->setAudioDriver(AudioDriverComboBox->currentText()))
201     iErrors++;
202     } else {
203     qsamplerDevice *pDevice = m_audioDevices.at(AudioDeviceComboBox->currentItem());
204     if (pDevice == NULL)
205     iErrors++;
206     else if (!m_pChannel->setAudioDevice(pDevice->deviceID()))
207     iErrors++;
208     }
209     // Accept MIDI driver or device selection...
210     if (m_midiDevices.isEmpty()) {
211     if (!m_pChannel->setMidiDriver(MidiDriverComboBox->currentText()))
212     iErrors++;
213     } else {
214     qsamplerDevice *pDevice = m_midiDevices.at(MidiDeviceComboBox->currentItem());
215     if (pDevice == NULL)
216     iErrors++;
217     else if (!m_pChannel->setMidiDevice(pDevice->deviceID()))
218     iErrors++;
219     }
220 capela 104 // MIDI input port number...
221     if (!m_pChannel->setMidiPort(MidiPortSpinBox->value()))
222 capela 161 iErrors++;
223 capela 104 // MIDI input channel...
224 capela 255 if (!m_pChannel->setMidiChannel(MidiChannelComboBox->currentItem()))
225 capela 104 iErrors++;
226 capela 115 // Engine name...
227     if (!m_pChannel->loadEngine(EngineNameComboBox->currentText()))
228 capela 104 iErrors++;
229     // Instrument file and index...
230 capela 299 if (!m_pChannel->loadInstrument(InstrumentFileComboBox->currentText(), InstrumentNrComboBox->currentItem()))
231 capela 104 iErrors++;
232     // Show error messages?
233     if (iErrors > 0)
234     m_pChannel->appendMessagesError(tr("Some channel settings could not be set.\n\nSorry."));
235     }
236    
237 capela 176 // Save default engine name, instrument directory and history...
238 capela 104 pOptions->sInstrumentDir = QFileInfo(InstrumentFileComboBox->currentText()).dirPath(true);
239 capela 176 pOptions->sEngineName = EngineNameComboBox->currentText();
240     pOptions->sAudioDriver = AudioDriverComboBox->currentText();
241     pOptions->sMidiDriver = MidiDriverComboBox->currentText();
242 capela 104 pOptions->saveComboBoxHistory(InstrumentFileComboBox);
243    
244     // Just go with dialog acceptance.
245     QDialog::accept();
246     }
247    
248    
249     // Reject settings (Cancel button slot).
250     void qsamplerChannelForm::reject (void)
251     {
252     bool bReject = true;
253    
254     // Check if there's any pending changes...
255 capela 176 if (m_iDirtyCount > 0 && OkPushButton->isEnabled()) {
256 capela 104 switch (QMessageBox::warning(this, tr("Warning"),
257     tr("Some channel settings have been changed.\n\n"
258     "Do you want to apply the changes?"),
259     tr("Apply"), tr("Discard"), tr("Cancel"))) {
260     case 0: // Apply...
261     accept();
262     return;
263     case 1: // Discard
264     break;
265     default: // Cancel.
266     bReject = false;
267     }
268     }
269    
270     if (bReject)
271     QDialog::reject();
272     }
273    
274    
275     // Browse and open an instrument file.
276     void qsamplerChannelForm::openInstrumentFile (void)
277     {
278     qsamplerOptions *pOptions = m_pChannel->options();
279     if (pOptions == NULL)
280     return;
281    
282     // FIXME: the instrument file filters should be restricted,
283     // depending on the current engine.
284     QString sInstrumentFile = QFileDialog::getOpenFileName(
285     pOptions->sInstrumentDir, // Start here.
286     tr("Instrument files") + " (*.gig *.dls)", // Filter (GIG and DLS files)
287     this, 0, // Parent and name (none)
288     tr("Instrument files") // Caption.
289     );
290    
291     if (sInstrumentFile.isEmpty())
292     return;
293    
294     InstrumentFileComboBox->setCurrentText(sInstrumentFile);
295     }
296    
297    
298     // Refresh the actual instrument name.
299     void qsamplerChannelForm::updateInstrumentName (void)
300     {
301 capela 341 qsamplerOptions *pOptions = m_pChannel->options();
302     if (pOptions == NULL)
303     return;
304    
305 capela 299 // Finally this better idea would be to use libgig
306     // to retrieve the REAL instrument names.
307     InstrumentNrComboBox->clear();
308     InstrumentNrComboBox->insertStringList(
309 capela 344 qsamplerChannel::getInstrumentList(
310     InstrumentFileComboBox->currentText(),
311     pOptions->bInstrumentNames)
312 capela 299 );
313 capela 104
314     optionsChanged();
315     }
316    
317    
318 capela 452 // Refresh MIDI device options.
319     void qsamplerChannelForm::selectMidiDriver ( const QString& sMidiDriver )
320     {
321 capela 454 const QString sDriverName = sMidiDriver.upper();
322    
323 capela 452 MidiDeviceComboBox->clear();
324     m_audioDevices.clear();
325 capela 104
326 capela 452 const QPixmap& midiPixmap = QPixmap::fromMimeSource("midi2.png");
327     int *piDeviceIDs = qsamplerDevice::getDevices(m_pChannel->client(),
328     qsamplerDevice::Midi);
329     for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
330     qsamplerDevice *pDevice = new qsamplerDevice(m_pChannel->client(),
331     qsamplerDevice::Midi, piDeviceIDs[i]);
332 capela 454 if (pDevice->driverName().upper() == sDriverName) {
333 capela 452 MidiDeviceComboBox->insertItem(midiPixmap, pDevice->deviceName());
334     m_midiDevices.append(pDevice);
335     } else {
336     delete pDevice;
337     }
338     }
339    
340     bool bEnabled = !m_midiDevices.isEmpty();
341 capela 454 if (!bEnabled)
342     MidiDeviceComboBox->insertItem(tr("(New MIDI device)"));
343 capela 452 MidiDeviceTextLabel->setEnabled(bEnabled);
344     MidiDeviceComboBox->setEnabled(bEnabled);
345     optionsChanged();
346     }
347    
348    
349 capela 455 // Select MIDI device options.
350     void qsamplerChannelForm::selectMidiDevice ( int iMidiItem )
351     {
352     qsamplerDevice *pDevice = m_midiDevices.at(iMidiItem);
353     if (pDevice) {
354     qsamplerDeviceParamMap& params = pDevice->params();
355     int iPorts = params["PORTS"].value.toInt();
356     MidiPortTextLabel->setEnabled(iPorts > 0);
357     MidiPortSpinBox->setEnabled(iPorts > 0);
358     if (iPorts > 0)
359     MidiPortSpinBox->setMaxValue(iPorts - 1);
360     }
361     optionsChanged();
362     }
363    
364    
365 capela 452 // Refresh Audio device options.
366     void qsamplerChannelForm::selectAudioDriver ( const QString& sAudioDriver )
367     {
368 capela 454 const QString sDriverName = sAudioDriver.upper();
369    
370 capela 452 AudioDeviceComboBox->clear();
371     m_audioDevices.clear();
372    
373     const QPixmap& audioPixmap = QPixmap::fromMimeSource("audio2.png");
374     int *piDeviceIDs = qsamplerDevice::getDevices(m_pChannel->client(),
375     qsamplerDevice::Audio);
376     for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
377     qsamplerDevice *pDevice = new qsamplerDevice(m_pChannel->client(),
378     qsamplerDevice::Audio, piDeviceIDs[i]);
379 capela 454 if (pDevice->driverName().upper() == sDriverName) {
380 capela 452 AudioDeviceComboBox->insertItem(audioPixmap, pDevice->deviceName());
381     m_audioDevices.append(pDevice);
382     } else {
383     delete pDevice;
384     }
385     }
386    
387     bool bEnabled = !m_audioDevices.isEmpty();
388 capela 454 if (!bEnabled)
389     AudioDeviceComboBox->insertItem(tr("(New Audio device)"));
390 capela 452 AudioDeviceTextLabel->setEnabled(bEnabled);
391     AudioDeviceComboBox->setEnabled(bEnabled);
392     optionsChanged();
393     }
394    
395    
396 capela 455 // Select Audio device options.
397     void qsamplerChannelForm::selectAudioDevice ( int iAudioItem )
398     {
399     qsamplerDevice *pDevice = m_audioDevices.at(iAudioItem);
400     if (pDevice) {
401     // Is there anything to do here?
402     }
403     optionsChanged();
404     }
405    
406    
407 capela 104 // Dirty up settings.
408     void qsamplerChannelForm::optionsChanged (void)
409     {
410     if (m_iDirtySetup > 0)
411     return;
412    
413     m_iDirtyCount++;
414     stabilizeForm();
415     }
416    
417    
418     // Stabilize current form state.
419     void qsamplerChannelForm::stabilizeForm (void)
420     {
421 capela 145 const QString& sFilename = InstrumentFileComboBox->currentText();
422 capela 104 OkPushButton->setEnabled(m_iDirtyCount > 0 && !sFilename.isEmpty() && QFileInfo(sFilename).exists());
423     }
424    
425    
426     // end of qsamplerChannelForm.ui.h
427    

  ViewVC Help
Powered by ViewVC