/[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 391 - (hide annotations) (download) (as text)
Fri Feb 18 10:28:45 2005 UTC (19 years, 2 months ago) by capela
File MIME type: text/x-c++hdr
File size: 10326 byte(s)
* Drag-and-drop of instrument files now fixed.

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     // Try to restore normal window positioning.
42     adjustSize();
43     }
44    
45    
46     // Kind of destructor.
47     void qsamplerChannelForm::destroy (void)
48     {
49     }
50    
51    
52     // Channel dialog setup formal initializer.
53 capela 295 void qsamplerChannelForm::setup ( qsamplerChannel *pChannel )
54 capela 104 {
55     m_pChannel = pChannel;
56    
57     m_iDirtySetup = 0;
58     m_iDirtyCount = 0;
59    
60     if (m_pChannel == NULL)
61     return;
62    
63 capela 295 // It can be a brand new channel, remember?
64     bool bNew = (m_pChannel->channelID() < 0);
65     setCaption(m_pChannel->channelName());
66 capela 104
67     // Check if we're up and connected.
68     if (m_pChannel->client() == NULL)
69     return;
70    
71     qsamplerOptions *pOptions = m_pChannel->options();
72     if (pOptions == NULL)
73     return;
74    
75     // Avoid nested changes.
76     m_iDirtySetup++;
77    
78     // Load combo box history...
79     pOptions->loadComboBoxHistory(InstrumentFileComboBox);
80    
81     // Populate Engines list.
82     const char **ppszEngines = ::lscp_get_available_engines(m_pChannel->client());
83     if (ppszEngines) {
84     EngineNameComboBox->clear();
85     for (int iEngine = 0; ppszEngines[iEngine]; iEngine++)
86     EngineNameComboBox->insertItem(ppszEngines[iEngine]);
87     }
88     else m_pChannel->appendMessagesClient("lscp_get_available_engines");
89 capela 145
90 capela 104 // Populate Audio output type list.
91     const char **ppszAudioDrivers = ::lscp_get_available_audio_drivers(m_pChannel->client());
92     if (ppszAudioDrivers) {
93     AudioDriverComboBox->clear();
94     for (int iAudioDriver = 0; ppszAudioDrivers[iAudioDriver]; iAudioDriver++)
95     AudioDriverComboBox->insertItem(ppszAudioDrivers[iAudioDriver]);
96     }
97     else m_pChannel->appendMessagesClient("lscp_get_available_audio_drivers");
98    
99     // Populate MIDI input type list.
100     const char **ppszMidiDrivers = ::lscp_get_available_midi_drivers(m_pChannel->client());
101     if (ppszMidiDrivers) {
102     MidiDriverComboBox->clear();
103     for (int iMidiDriver = 0; ppszMidiDrivers[iMidiDriver]; iMidiDriver++)
104     MidiDriverComboBox->insertItem(ppszMidiDrivers[iMidiDriver]);
105     }
106     else m_pChannel->appendMessagesClient("lscp_get_available_midi_drivers");
107 capela 145
108 capela 104 // Read proper channel information,
109     // and populate the channel form fields.
110    
111     // Engine name...
112 capela 145 QString sEngineName = pChannel->engineName();
113 capela 176 if (sEngineName.isEmpty() && bNew)
114     sEngineName = pOptions->sEngineName;
115 capela 145 if (sEngineName.isEmpty())
116 capela 388 sEngineName = qsamplerChannel::noEngineName();
117 capela 145 if (EngineNameComboBox->listBox()->findItem(sEngineName, Qt::ExactMatch) == NULL)
118     EngineNameComboBox->insertItem(sEngineName);
119     EngineNameComboBox->setCurrentText(sEngineName);
120 capela 104 // Instrument filename and index...
121 capela 145 QString sInstrumentFile = pChannel->instrumentFile();
122     if (sInstrumentFile.isEmpty())
123 capela 388 sInstrumentFile = qsamplerChannel::noInstrumentName();
124 capela 145 InstrumentFileComboBox->setCurrentText(sInstrumentFile);
125 capela 299 InstrumentNrComboBox->clear();
126 capela 344 InstrumentNrComboBox->insertStringList(
127     qsamplerChannel::getInstrumentList(sInstrumentFile,
128     pOptions->bInstrumentNames));
129 capela 299 InstrumentNrComboBox->setCurrentItem(pChannel->instrumentNr());
130 capela 176 // MIDI input driver...
131     QString sMidiDriver = pChannel->midiDriver();
132 capela 295 if (sMidiDriver.isEmpty() || bNew)
133 capela 176 sMidiDriver = pOptions->sMidiDriver;
134 capela 104 if (!sMidiDriver.isEmpty()) {
135     if (MidiDriverComboBox->listBox()->findItem(sMidiDriver, Qt::ExactMatch) == NULL)
136     MidiDriverComboBox->insertItem(sMidiDriver);
137     MidiDriverComboBox->setCurrentText(sMidiDriver);
138     }
139 capela 176 // MIDI input port...
140 capela 104 MidiPortSpinBox->setValue(pChannel->midiPort());
141 capela 176 // MIDI input channel...
142     int iMidiChannel = pChannel->midiChannel();
143 capela 295 // When new, try to suggest a sensible MIDI channel...
144     if (iMidiChannel < 0)
145     iMidiChannel = (::lscp_get_channels(m_pChannel->client()) % 16);
146 capela 255 MidiChannelComboBox->setCurrentItem(iMidiChannel);
147 capela 176 // Audio output driver...
148     QString sAudioDriver = pChannel->audioDriver();
149 capela 295 if (sAudioDriver.isEmpty() || bNew)
150 capela 176 sAudioDriver = pOptions->sAudioDriver;
151 capela 104 if (!sAudioDriver.isEmpty()) {
152     if (AudioDriverComboBox->listBox()->findItem(sAudioDriver, Qt::ExactMatch) == NULL)
153     AudioDriverComboBox->insertItem(sAudioDriver);
154     AudioDriverComboBox->setCurrentText(sAudioDriver);
155     }
156 capela 391 // As convenient, make it ready on stabilizeForm() for
157     // prompt acceptance, if we got the minimum required...
158     if (bNew && sEngineName != qsamplerChannel::noEngineName() &&
159     sInstrumentFile != qsamplerChannel::noInstrumentName())
160     m_iDirtyCount++;
161 capela 104 // Done.
162     m_iDirtySetup--;
163     stabilizeForm();
164     }
165    
166    
167     // Accept settings (OK button slot).
168     void qsamplerChannelForm::accept (void)
169     {
170     if (m_pChannel == NULL)
171     return;
172    
173     qsamplerOptions *pOptions = m_pChannel->options();
174     if (pOptions == NULL)
175     return;
176    
177     // We'll go for it!
178     if (m_iDirtyCount > 0) {
179     int iErrors = 0;
180 capela 295 // Are we a new channel?
181     if (!m_pChannel->addChannel())
182     iErrors++;
183 capela 115 // Audio output driver type...
184     if (!m_pChannel->setAudioDriver(AudioDriverComboBox->currentText()))
185 capela 104 iErrors++;
186     // MIDI input driver type...
187     if (!m_pChannel->setMidiDriver(MidiDriverComboBox->currentText()))
188     iErrors++;
189     // MIDI input port number...
190     if (!m_pChannel->setMidiPort(MidiPortSpinBox->value()))
191 capela 161 iErrors++;
192 capela 104 // MIDI input channel...
193 capela 255 if (!m_pChannel->setMidiChannel(MidiChannelComboBox->currentItem()))
194 capela 104 iErrors++;
195 capela 115 // Engine name...
196     if (!m_pChannel->loadEngine(EngineNameComboBox->currentText()))
197 capela 104 iErrors++;
198     // Instrument file and index...
199 capela 299 if (!m_pChannel->loadInstrument(InstrumentFileComboBox->currentText(), InstrumentNrComboBox->currentItem()))
200 capela 104 iErrors++;
201     // Show error messages?
202     if (iErrors > 0)
203     m_pChannel->appendMessagesError(tr("Some channel settings could not be set.\n\nSorry."));
204     }
205    
206 capela 176 // Save default engine name, instrument directory and history...
207 capela 104 pOptions->sInstrumentDir = QFileInfo(InstrumentFileComboBox->currentText()).dirPath(true);
208 capela 176 pOptions->sEngineName = EngineNameComboBox->currentText();
209     pOptions->sAudioDriver = AudioDriverComboBox->currentText();
210     pOptions->sMidiDriver = MidiDriverComboBox->currentText();
211 capela 104 pOptions->saveComboBoxHistory(InstrumentFileComboBox);
212    
213     // Just go with dialog acceptance.
214     QDialog::accept();
215     }
216    
217    
218     // Reject settings (Cancel button slot).
219     void qsamplerChannelForm::reject (void)
220     {
221     bool bReject = true;
222    
223     // Check if there's any pending changes...
224 capela 176 if (m_iDirtyCount > 0 && OkPushButton->isEnabled()) {
225 capela 104 switch (QMessageBox::warning(this, tr("Warning"),
226     tr("Some channel settings have been changed.\n\n"
227     "Do you want to apply the changes?"),
228     tr("Apply"), tr("Discard"), tr("Cancel"))) {
229     case 0: // Apply...
230     accept();
231     return;
232     case 1: // Discard
233     break;
234     default: // Cancel.
235     bReject = false;
236     }
237     }
238    
239     if (bReject)
240     QDialog::reject();
241     }
242    
243    
244     // Browse and open an instrument file.
245     void qsamplerChannelForm::openInstrumentFile (void)
246     {
247     qsamplerOptions *pOptions = m_pChannel->options();
248     if (pOptions == NULL)
249     return;
250    
251     // FIXME: the instrument file filters should be restricted,
252     // depending on the current engine.
253     QString sInstrumentFile = QFileDialog::getOpenFileName(
254     pOptions->sInstrumentDir, // Start here.
255     tr("Instrument files") + " (*.gig *.dls)", // Filter (GIG and DLS files)
256     this, 0, // Parent and name (none)
257     tr("Instrument files") // Caption.
258     );
259    
260     if (sInstrumentFile.isEmpty())
261     return;
262    
263     InstrumentFileComboBox->setCurrentText(sInstrumentFile);
264     }
265    
266    
267     // Refresh the actual instrument name.
268     void qsamplerChannelForm::updateInstrumentName (void)
269     {
270 capela 341 qsamplerOptions *pOptions = m_pChannel->options();
271     if (pOptions == NULL)
272     return;
273    
274 capela 299 // Finally this better idea would be to use libgig
275     // to retrieve the REAL instrument names.
276     InstrumentNrComboBox->clear();
277     InstrumentNrComboBox->insertStringList(
278 capela 344 qsamplerChannel::getInstrumentList(
279     InstrumentFileComboBox->currentText(),
280     pOptions->bInstrumentNames)
281 capela 299 );
282 capela 104
283     optionsChanged();
284     }
285    
286    
287    
288     // Dirty up settings.
289     void qsamplerChannelForm::optionsChanged (void)
290     {
291     if (m_iDirtySetup > 0)
292     return;
293    
294     m_iDirtyCount++;
295     stabilizeForm();
296     }
297    
298    
299     // Stabilize current form state.
300     void qsamplerChannelForm::stabilizeForm (void)
301     {
302 capela 145 const QString& sFilename = InstrumentFileComboBox->currentText();
303 capela 104 OkPushButton->setEnabled(m_iDirtyCount > 0 && !sFilename.isEmpty() && QFileInfo(sFilename).exists());
304     }
305    
306    
307     // end of qsamplerChannelForm.ui.h
308    

  ViewVC Help
Powered by ViewVC