/[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 757 - (hide annotations) (download) (as text)
Fri Aug 26 23:04:32 2005 UTC (18 years, 8 months ago) by capela
File MIME type: text/x-c++hdr
File size: 16667 byte(s)
* All widget captions changed to include proper application title prefix.

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

  ViewVC Help
Powered by ViewVC