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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 388 - (show annotations) (download) (as text)
Thu Feb 17 17:27:59 2005 UTC (12 years, 10 months 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 // qsamplerChannelForm.ui.h
2 //
3 // ui.h extension file, included from the uic-generated form implementation.
4 /****************************************************************************
5 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
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 void qsamplerChannelForm::setup ( qsamplerChannel *pChannel )
54 {
55 m_pChannel = pChannel;
56
57 m_iDirtySetup = 0;
58 m_iDirtyCount = 0;
59
60 if (m_pChannel == NULL)
61 return;
62
63 // It can be a brand new channel, remember?
64 bool bNew = (m_pChannel->channelID() < 0);
65 setCaption(m_pChannel->channelName());
66
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
90 // 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
108 // Read proper channel information,
109 // and populate the channel form fields.
110
111 // Engine name...
112 QString sEngineName = pChannel->engineName();
113 if (sEngineName.isEmpty() && bNew)
114 sEngineName = pOptions->sEngineName;
115 if (sEngineName.isEmpty())
116 sEngineName = qsamplerChannel::noEngineName();
117 if (EngineNameComboBox->listBox()->findItem(sEngineName, Qt::ExactMatch) == NULL)
118 EngineNameComboBox->insertItem(sEngineName);
119 EngineNameComboBox->setCurrentText(sEngineName);
120 // Instrument filename and index...
121 QString sInstrumentFile = pChannel->instrumentFile();
122 if (sInstrumentFile.isEmpty())
123 sInstrumentFile = qsamplerChannel::noInstrumentName();
124 InstrumentFileComboBox->setCurrentText(sInstrumentFile);
125 InstrumentNrComboBox->clear();
126 InstrumentNrComboBox->insertStringList(
127 qsamplerChannel::getInstrumentList(sInstrumentFile,
128 pOptions->bInstrumentNames));
129 InstrumentNrComboBox->setCurrentItem(pChannel->instrumentNr());
130 // MIDI input driver...
131 QString sMidiDriver = pChannel->midiDriver();
132 if (sMidiDriver.isEmpty() || bNew)
133 sMidiDriver = pOptions->sMidiDriver;
134 if (!sMidiDriver.isEmpty()) {
135 if (MidiDriverComboBox->listBox()->findItem(sMidiDriver, Qt::ExactMatch) == NULL)
136 MidiDriverComboBox->insertItem(sMidiDriver);
137 MidiDriverComboBox->setCurrentText(sMidiDriver);
138 }
139 // MIDI input port...
140 MidiPortSpinBox->setValue(pChannel->midiPort());
141 // MIDI input channel...
142 int iMidiChannel = pChannel->midiChannel();
143 // When new, try to suggest a sensible MIDI channel...
144 if (iMidiChannel < 0)
145 iMidiChannel = (::lscp_get_channels(m_pChannel->client()) % 16);
146 MidiChannelComboBox->setCurrentItem(iMidiChannel);
147 // Audio output driver...
148 QString sAudioDriver = pChannel->audioDriver();
149 if (sAudioDriver.isEmpty() || bNew)
150 sAudioDriver = pOptions->sAudioDriver;
151 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 // Are we a new channel?
176 if (!m_pChannel->addChannel())
177 iErrors++;
178 // Audio output driver type...
179 if (!m_pChannel->setAudioDriver(AudioDriverComboBox->currentText()))
180 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 iErrors++;
187 // MIDI input channel...
188 if (!m_pChannel->setMidiChannel(MidiChannelComboBox->currentItem()))
189 iErrors++;
190 // Engine name...
191 if (!m_pChannel->loadEngine(EngineNameComboBox->currentText()))
192 iErrors++;
193 // Instrument file and index...
194 if (!m_pChannel->loadInstrument(InstrumentFileComboBox->currentText(), InstrumentNrComboBox->currentItem()))
195 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 // Save default engine name, instrument directory and history...
202 pOptions->sInstrumentDir = QFileInfo(InstrumentFileComboBox->currentText()).dirPath(true);
203 pOptions->sEngineName = EngineNameComboBox->currentText();
204 pOptions->sAudioDriver = AudioDriverComboBox->currentText();
205 pOptions->sMidiDriver = MidiDriverComboBox->currentText();
206 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 if (m_iDirtyCount > 0 && OkPushButton->isEnabled()) {
220 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 qsamplerOptions *pOptions = m_pChannel->options();
266 if (pOptions == NULL)
267 return;
268
269 // Finally this better idea would be to use libgig
270 // to retrieve the REAL instrument names.
271 InstrumentNrComboBox->clear();
272 InstrumentNrComboBox->insertStringList(
273 qsamplerChannel::getInstrumentList(
274 InstrumentFileComboBox->currentText(),
275 pOptions->bInstrumentNames)
276 );
277
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 const QString& sFilename = InstrumentFileComboBox->currentText();
298 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