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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 432 - (show annotations) (download) (as text)
Wed Mar 9 11:33:27 2005 UTC (19 years ago) by capela
File MIME type: text/x-c++hdr
File size: 10966 byte(s)
Device configuration table is now editable, but non-applicable yet.

1 // qsamplerDeviceForm.ui.h
2 //
3 // ui.h extension file, included from the uic-generated form implementation.
4 /****************************************************************************
5 Copyright (C) 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 <qmessagebox.h>
24 #include <qfiledialog.h>
25 #include <qfileinfo.h>
26 #include <qlistbox.h>
27
28 #include "qsamplerMainForm.h"
29
30 #include "config.h"
31
32
33 // Kind of constructor.
34 void qsamplerDeviceForm::init (void)
35 {
36 // Initialize locals.
37 m_pMainForm = (qsamplerMainForm *) QWidget::parentWidget();
38 m_pClient = NULL;
39 m_iDirtySetup = 0;
40 m_iDirtyCount = 0;
41 m_iUntitled = 1;
42 m_bNewDevice = false;
43
44 // Try to restore normal window positioning.
45 adjustSize();
46 }
47
48
49 // Kind of destructor.
50 void qsamplerDeviceForm::destroy (void)
51 {
52 }
53
54
55 // Notify our parent that we're emerging.
56 void qsamplerDeviceForm::showEvent ( QShowEvent *pShowEvent )
57 {
58 if (m_pMainForm)
59 m_pMainForm->stabilizeForm();
60
61 stabilizeForm();
62
63 QWidget::showEvent(pShowEvent);
64 }
65
66
67 // Notify our parent that we're closing.
68 void qsamplerDeviceForm::hideEvent ( QHideEvent *pHideEvent )
69 {
70 QWidget::hideEvent(pHideEvent);
71
72 if (m_pMainForm)
73 m_pMainForm->stabilizeForm();
74 }
75
76
77 // Device configuration dialog setup formal initializer.
78 void qsamplerDeviceForm::setClient ( lscp_client_t *pClient )
79 {
80 // If it has not changed, do nothing.
81 if (m_pClient && m_pClient == pClient)
82 return;
83
84 // Set new reference.
85 m_pClient = pClient;
86
87 // OK. Do a whole refresh around.
88 refreshDevices();
89 }
90
91
92 // Format the displayable device configuration filename.
93 QString qsamplerDeviceForm::devicesName ( const QString& sFilename )
94 {
95 QString sDevicesName = sFilename;
96 qsamplerOptions *pOptions = m_pMainForm->options();
97 if (pOptions) {
98 bool bCompletePath = (pOptions && pOptions->bCompletePath);
99 if (sDevicesName.isEmpty())
100 sDevicesName = tr("Untitled") + QString::number(m_iUntitled);
101 else if (!bCompletePath)
102 sDevicesName = QFileInfo(sDevicesName).fileName();
103 }
104 return sDevicesName;
105 }
106
107
108 // Window close event handlers.
109 bool qsamplerDeviceForm::queryClose (void)
110 {
111 bool bQueryClose = true;
112
113 if (m_iDirtyCount > 0) {
114 switch (QMessageBox::warning(this, tr("Warning"),
115 tr("The device configuration has been changed.\n\n"
116 "\"%1\"\n\n"
117 "Do you want to save the changes?")
118 .arg(devicesName(m_sFilename)),
119 tr("Save"), tr("Discard"), tr("Cancel"))) {
120 case 0: // Save...
121 saveDevices();
122 // Fall thru....
123 case 1: // Discard
124 break;
125 default: // Cancel.
126 bQueryClose = false;
127 }
128 }
129
130 return bQueryClose;
131 }
132
133
134
135 // Dirty up settings.
136 void qsamplerDeviceForm::contentsChanged (void)
137 {
138 if (m_iDirtySetup > 0)
139 return;
140
141 m_iDirtyCount++;
142 stabilizeForm();
143 }
144
145
146 // Load device configuration slot.
147 void qsamplerDeviceForm::loadDevices (void)
148 {
149 QString sFilename = QFileDialog::getOpenFileName(
150 m_sFilename, // Start here.
151 tr("Device Configuration files") + " (*.lscp)", // Filter (XML files)
152 this, 0, // Parent and name (none)
153 tr("Load Device Configuration") // Caption.
154 );
155
156 if (sFilename.isEmpty())
157 return;
158
159 // Check if we're going to discard safely the current one...
160 if (!queryClose())
161 return;
162
163 // Load it right away...
164 loadDevicesFile(sFilename);
165 }
166
167
168 // Save device configuration slot.
169 void qsamplerDeviceForm::saveDevices (void)
170 {
171 QString sFilename = QFileDialog::getSaveFileName(
172 m_sFilename, // Start here.
173 tr("Device Configuration files") + " (*.lscp)", // Filter (XML files)
174 this, 0, // Parent and name (none)
175 tr("Save Device Configuration") // Caption.
176 );
177
178 if (sFilename.isEmpty())
179 return;
180
181 // Enforce .xml extension...
182 if (QFileInfo(sFilename).extension().isEmpty())
183 sFilename += ".lscp";
184
185 // Save it right away...
186 saveDevicesFile(sFilename);
187 }
188
189
190 // Load device configuration from file.
191 void qsamplerDeviceForm::loadDevicesFile ( const QString& sFilename )
192 {
193 //
194 // TODO: Load device configuration from file...
195 //
196 m_pMainForm->appendMessages("qsamplerDeviceForm::loadDevicesFile(\"" + sFilename + "\")...");
197
198 m_sFilename = sFilename;
199 m_iDirtyCount = 0;
200
201 refreshDevices();
202 }
203
204
205 // Save device configuration into file.
206 void qsamplerDeviceForm::saveDevicesFile ( const QString& sFilename )
207 {
208 //
209 // TODO: Save device configuration into file...
210 //
211 m_pMainForm->appendMessages("qsamplerDeviceForm::saveDevicesFile(\"" + sFilename + "\")...");
212
213 m_sFilename = sFilename;
214 m_iDirtyCount = 0;
215 stabilizeForm();
216 }
217
218
219 // Create a new device from current table view.
220 void qsamplerDeviceForm::createDevice (void)
221 {
222 //
223 // TODO: Create a new device from current table view...
224 //
225 m_pMainForm->appendMessages("qsamplerDeviceForm::createDevice()...");
226
227 m_iDirtyCount++;
228 stabilizeForm();
229 }
230
231
232 // Update current device in table view.
233 void qsamplerDeviceForm::updateDevice (void)
234 {
235 //
236 // TODO: Update current device in table view...
237 //
238 m_pMainForm->appendMessages("qsamplerDeviceForm::updateDevice()...");
239
240 m_iDirtyCount++;
241 stabilizeForm();
242 }
243
244
245 // Delete current device in table view.
246 void qsamplerDeviceForm::deleteDevice (void)
247 {
248 //
249 // TODO: Delete current device in table view...
250 //
251 m_pMainForm->appendMessages("qsamplerDeviceForm::deleteDevice()...");
252
253 m_iDirtyCount++;
254 stabilizeForm();
255 }
256
257
258 // Refresh all device list and views.
259 void qsamplerDeviceForm::refreshDevices (void)
260 {
261 // Avoid nested changes.
262 m_iDirtySetup++;
263
264 //
265 // TODO: Load device configuration data ...
266 //
267 m_pMainForm->appendMessages("qsamplerDeviceForm::refreshDevices()");
268
269 DeviceListView->clear();
270 if (m_pClient) {
271 qsamplerDeviceItem *pItem;
272 int *piDeviceIDs;
273 // Grab and pop Audio devices...
274 pItem = new qsamplerDeviceItem(DeviceListView, m_pClient,
275 qsamplerDevice::Audio);
276 if (pItem) {
277 pItem->setText(0, tr("Audio"));
278 piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);
279 for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
280 new qsamplerDeviceItem(pItem, m_pClient,
281 qsamplerDevice::Audio, piDeviceIDs[i]);
282 }
283 pItem->setOpen(true);
284 }
285 // Grab and pop MIDI devices...
286 pItem = new qsamplerDeviceItem(DeviceListView, m_pClient,
287 qsamplerDevice::Midi);
288 if (pItem) {
289 pItem->setText(0, tr("MIDI"));
290 piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);
291 for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
292 new qsamplerDeviceItem(pItem, m_pClient,
293 qsamplerDevice::Midi, piDeviceIDs[i]);
294 }
295 pItem->setOpen(true);
296 }
297 }
298
299 // Done.
300 selectDevice();
301 m_iDirtySetup--;
302 }
303
304
305 // Driver selection slot.
306 void qsamplerDeviceForm::selectDriver ( const QString& sDriverName )
307 {
308 //
309 // TODO: Driver name has changed for a new device...
310 //
311 m_pMainForm->appendMessages("qsamplerDeviceForm::selectDriver(\"" + sDriverName + "\")");
312
313 QListViewItem *pItem = DeviceListView->selectedItem();
314 if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
315 return;
316
317 qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
318 if (m_bNewDevice) {
319 device.setDriver(m_pClient, sDriverName);
320 m_iDirtyCount++;
321 }
322
323 // Done.
324 stabilizeForm();
325 }
326
327
328 // Device selection slot.
329 void qsamplerDeviceForm::selectDevice (void)
330 {
331 //
332 // TODO: Device selection has changed...
333 //
334 m_pMainForm->appendMessages("qsamplerDeviceForm::selectDevice()");
335
336 QListViewItem *pItem = DeviceListView->selectedItem();
337 if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM) {
338 stabilizeForm();
339 return;
340 }
341
342 qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
343 m_bNewDevice = (device.deviceID() < 0);
344
345 // Fill the device heading...
346 DeviceNameTextLabel->setText(' ' + device.deviceName());
347 DriverNameComboBox->clear();
348 DriverNameComboBox->insertStringList(
349 qsamplerDevice::getDrivers(m_pClient, device.deviceType()));
350 const QString& sDriverName = device.driverName();
351 if (m_bNewDevice || sDriverName.isEmpty()) {
352 device.setDriver(m_pClient, DriverNameComboBox->currentText());
353 } else {
354 if (DriverNameComboBox->listBox()->findItem(sDriverName, Qt::ExactMatch) == NULL)
355 DriverNameComboBox->insertItem(sDriverName);
356 DriverNameComboBox->setCurrentText(sDriverName);
357 }
358 DriverNameTextLabel->setEnabled(m_bNewDevice);
359 DriverNameComboBox->setEnabled(m_bNewDevice);
360
361 // Fill the device parameter table...
362 DeviceParamTable->refresh(device);
363
364 // Done.
365 stabilizeForm();
366 }
367
368
369 // parameter value change slot.
370 void qsamplerDeviceForm::changeValue ( int iRow, int iCol )
371 {
372 //
373 // TODO: Device parameter change...
374 //
375 m_pMainForm->appendMessages("qsamplerDeviceForm::changeValue()");
376
377 QListViewItem *pItem = DeviceListView->selectedItem();
378 if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
379 return;
380
381 qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
382
383 // Table 3rd column has the parameter name;
384 qsamplerDeviceParamMap& params = device.params();
385 QString sParam = DeviceParamTable->text(iRow, 2);
386 params[sParam].value = DeviceParamTable->text(iRow, iCol);
387
388 m_iDirtyCount++;
389 stabilizeForm();
390 }
391
392
393 // Stabilize current form state.
394 void qsamplerDeviceForm::stabilizeForm (void)
395 {
396 // Update the main caption...
397 QString sDevicesName = devicesName(m_sFilename);
398 if (m_iDirtyCount > 0)
399 sDevicesName += '*';
400 setCaption(tr("Devices - [%1]").arg(sDevicesName));
401
402 //
403 // TODO: Enable/disable available command buttons.
404 //
405 m_pMainForm->appendMessages("qsamplerDeviceForm::stabilizeForm()");
406
407 SaveDevicesPushButton->setEnabled(m_iDirtyCount > 0);
408
409 QListViewItem *pItem = DeviceListView->selectedItem();
410 bool bEnabled = (pItem != NULL);
411 DeviceNameTextLabel->setEnabled(bEnabled);
412 DriverNameTextLabel->setEnabled(bEnabled && m_bNewDevice);
413 DriverNameComboBox->setEnabled(bEnabled && m_bNewDevice);
414 DeviceParamTable->setEnabled(bEnabled);
415 CreateDevicePushButton->setEnabled(bEnabled && (m_iDirtyCount > 0 || m_bNewDevice));
416 UpdateDevicePushButton->setEnabled(bEnabled && (m_iDirtyCount > 0 && !m_bNewDevice));
417 DeleteDevicePushButton->setEnabled(bEnabled && (m_iDirtyCount > 0 && !m_bNewDevice));
418 }
419
420
421 // end of qsamplerDeviceForm.ui.h
422

  ViewVC Help
Powered by ViewVC