/[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 388 - (hide annotations) (download) (as text)
Thu Feb 17 17:27:59 2005 UTC (19 years, 1 month ago) by capela
File MIME type: text/x-c++hdr
File size: 10067 byte(s)
* Drag-and-drop of either session files (LSCP scripts) or
  instrument files (GIG) are now supported. Multiple files
  drop is allowed, but it only makes sense for instrument
  files, each one prompting to create a new sampler channel.

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     // Done.
157     m_iDirtySetup--;
158     stabilizeForm();
159     }
160    
161    
162     // Accept settings (OK button slot).
163     void qsamplerChannelForm::accept (void)
164     {
165     if (m_pChannel == NULL)
166     return;
167    
168     qsamplerOptions *pOptions = m_pChannel->options();
169     if (pOptions == NULL)
170     return;
171    
172     // We'll go for it!
173     if (m_iDirtyCount > 0) {
174     int iErrors = 0;
175 capela 295 // Are we a new channel?
176     if (!m_pChannel->addChannel())
177     iErrors++;
178 capela 115 // Audio output driver type...
179     if (!m_pChannel->setAudioDriver(AudioDriverComboBox->currentText()))
180 capela 104 iErrors++;
181     // MIDI input driver type...
182     if (!m_pChannel->setMidiDriver(MidiDriverComboBox->currentText()))
183     iErrors++;
184     // MIDI input port number...
185     if (!m_pChannel->setMidiPort(MidiPortSpinBox->value()))
186 capela 161 iErrors++;
187 capela 104 // MIDI input channel...
188 capela 255 if (!m_pChannel->setMidiChannel(MidiChannelComboBox->currentItem()))
189 capela 104 iErrors++;
190 capela 115 // Engine name...
191     if (!m_pChannel->loadEngine(EngineNameComboBox->currentText()))
192 capela 104 iErrors++;
193     // Instrument file and index...
194 capela 299 if (!m_pChannel->loadInstrument(InstrumentFileComboBox->currentText(), InstrumentNrComboBox->currentItem()))
195 capela 104 iErrors++;
196     // Show error messages?
197     if (iErrors > 0)
198     m_pChannel->appendMessagesError(tr("Some channel settings could not be set.\n\nSorry."));
199     }
200    
201 capela 176 // Save default engine name, instrument directory and history...
202 capela 104 pOptions->sInstrumentDir = QFileInfo(InstrumentFileComboBox->currentText()).dirPath(true);
203 capela 176 pOptions->sEngineName = EngineNameComboBox->currentText();
204     pOptions->sAudioDriver = AudioDriverComboBox->currentText();
205     pOptions->sMidiDriver = MidiDriverComboBox->currentText();
206 capela 104 pOptions->saveComboBoxHistory(InstrumentFileComboBox);
207    
208     // Just go with dialog acceptance.
209     QDialog::accept();
210     }
211    
212    
213     // Reject settings (Cancel button slot).
214     void qsamplerChannelForm::reject (void)
215     {
216     bool bReject = true;
217    
218     // Check if there's any pending changes...
219 capela 176 if (m_iDirtyCount > 0 && OkPushButton->isEnabled()) {
220 capela 104 switch (QMessageBox::warning(this, tr("Warning"),
221     tr("Some channel settings have been changed.\n\n"
222     "Do you want to apply the changes?"),
223     tr("Apply"), tr("Discard"), tr("Cancel"))) {
224     case 0: // Apply...
225     accept();
226     return;
227     case 1: // Discard
228     break;
229     default: // Cancel.
230     bReject = false;
231     }
232     }
233    
234     if (bReject)
235     QDialog::reject();
236     }
237    
238    
239     // Browse and open an instrument file.
240     void qsamplerChannelForm::openInstrumentFile (void)
241     {
242     qsamplerOptions *pOptions = m_pChannel->options();
243     if (pOptions == NULL)
244     return;
245    
246     // FIXME: the instrument file filters should be restricted,
247     // depending on the current engine.
248     QString sInstrumentFile = QFileDialog::getOpenFileName(
249     pOptions->sInstrumentDir, // Start here.
250     tr("Instrument files") + " (*.gig *.dls)", // Filter (GIG and DLS files)
251     this, 0, // Parent and name (none)
252     tr("Instrument files") // Caption.
253     );
254    
255     if (sInstrumentFile.isEmpty())
256     return;
257    
258     InstrumentFileComboBox->setCurrentText(sInstrumentFile);
259     }
260    
261    
262     // Refresh the actual instrument name.
263     void qsamplerChannelForm::updateInstrumentName (void)
264     {
265 capela 341 qsamplerOptions *pOptions = m_pChannel->options();
266     if (pOptions == NULL)
267     return;
268    
269 capela 299 // Finally this better idea would be to use libgig
270     // to retrieve the REAL instrument names.
271     InstrumentNrComboBox->clear();
272     InstrumentNrComboBox->insertStringList(
273 capela 344 qsamplerChannel::getInstrumentList(
274     InstrumentFileComboBox->currentText(),
275     pOptions->bInstrumentNames)
276 capela 299 );
277 capela 104
278     optionsChanged();
279     }
280    
281    
282    
283     // Dirty up settings.
284     void qsamplerChannelForm::optionsChanged (void)
285     {
286     if (m_iDirtySetup > 0)
287     return;
288    
289     m_iDirtyCount++;
290     stabilizeForm();
291     }
292    
293    
294     // Stabilize current form state.
295     void qsamplerChannelForm::stabilizeForm (void)
296     {
297 capela 145 const QString& sFilename = InstrumentFileComboBox->currentText();
298 capela 104 OkPushButton->setEnabled(m_iDirtyCount > 0 && !sFilename.isEmpty() && QFileInfo(sFilename).exists());
299     }
300    
301    
302     // end of qsamplerChannelForm.ui.h
303    

  ViewVC Help
Powered by ViewVC