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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 426 by capela, Mon Mar 7 11:09:32 2005 UTC revision 432 by capela, Wed Mar 9 11:33:27 2005 UTC
# Line 2  Line 2 
2  //  //
3  // ui.h extension file, included from the uic-generated form implementation.  // 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.     Copyright (C) 2005, rncbc aka Rui Nuno Capela. All rights reserved.
6    
7     This program is free software; you can redistribute it and/or     This program is free software; you can redistribute it and/or
8     modify it under the terms of the GNU General Public License     modify it under the terms of the GNU General Public License
# Line 20  Line 20 
20    
21  *****************************************************************************/  *****************************************************************************/
22    
 #include <qvalidator.h>  
23  #include <qmessagebox.h>  #include <qmessagebox.h>
24    #include <qfiledialog.h>
25    #include <qfileinfo.h>
26    #include <qlistbox.h>
27    
28  #include "qsamplerMainForm.h"  #include "qsamplerMainForm.h"
29    
# Line 31  Line 33 
33  // Kind of constructor.  // Kind of constructor.
34  void qsamplerDeviceForm::init (void)  void qsamplerDeviceForm::init (void)
35  {  {
36      // Initialize locals.          // Initialize locals.
37      m_pMainForm   = NULL;          m_pMainForm   = (qsamplerMainForm *) QWidget::parentWidget();
38            m_pClient     = NULL;
39          m_iDirtySetup = 0;          m_iDirtySetup = 0;
40      m_iDirtyCount = 0;          m_iDirtyCount = 0;
41            m_iUntitled   = 1;
42            m_bNewDevice  = false;
43    
44      // Try to restore normal window positioning.          // Try to restore normal window positioning.
45      adjustSize();          adjustSize();
46  }  }
47    
48    
# Line 47  void qsamplerDeviceForm::destroy (void) Line 52  void qsamplerDeviceForm::destroy (void)
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.  // Device configuration dialog setup formal initializer.
78  void qsamplerDeviceForm::setup ( qsamplerMainForm *pMainForm )  void qsamplerDeviceForm::setClient ( lscp_client_t *pClient )
79  {  {
80      m_pMainForm   = pMainForm;          // If it has not changed, do nothing.
81          m_iDirtySetup = 0;          if (m_pClient && m_pClient == pClient)
82      m_iDirtyCount = 0;                  return;
83    
84            // Set new reference.
85            m_pClient = pClient;
86            
87            // OK. Do a whole refresh around.
88            refreshDevices();
89    }
90    
     if (m_pMainForm == NULL)  
         return;  
     if (m_pMainForm->client() == NULL)  
         return;  
91    
92      qsamplerOptions *pOptions = m_pMainForm->options();  // Format the displayable device configuration filename.
93      if (pOptions == NULL)  QString qsamplerDeviceForm::devicesName ( const QString& sFilename )
94          return;  {
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    
         // Set our main client reference.  
     DeviceParameterTable->setClient(pMainForm->client());  
107    
108      // Avoid nested changes.  // Window close event handlers.
109      m_iDirtySetup++;  bool qsamplerDeviceForm::queryClose (void)
110    {
111            bool bQueryClose = true;
112    
113          //          if (m_iDirtyCount > 0) {
114      // TODO: Load initial device configuration data ...                  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      // Done.          return bQueryClose;
     m_iDirtySetup--;  
     stabilizeForm();  
131  }  }
132    
133    
134    
135  // Dirty up settings.  // Dirty up settings.
136  void qsamplerDeviceForm::contentsChanged (void)  void qsamplerDeviceForm::contentsChanged (void)
137  {  {
138      if (m_iDirtySetup > 0)          if (m_iDirtySetup > 0)
139          return;                  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      m_iDirtyCount++;          // Save it right away...
186      stabilizeForm();          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.  // Stabilize current form state.
394  void qsamplerDeviceForm::stabilizeForm (void)  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.          // 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    

Legend:
Removed from v.426  
changed lines
  Added in v.432

  ViewVC Help
Powered by ViewVC