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

Diff of /qsampler/tags/qsampler_0_1_1/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 436 by capela, Wed Mar 9 20:55:04 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_bNewDevice  = false;
42      // Try to restore normal window positioning.          m_deviceType  = qsamplerDevice::None;
43      adjustSize();  
44            // This an outsider (from designer), but rather important.
45            QObject::connect(DeviceParamTable, SIGNAL(valueChanged(int,int)),
46                    this, SLOT(changeValue(int,int)));
47            
48            // Try to restore normal window positioning.
49            adjustSize();
50  }  }
51    
52    
# Line 47  void qsamplerDeviceForm::destroy (void) Line 56  void qsamplerDeviceForm::destroy (void)
56  }  }
57    
58    
59    // Notify our parent that we're emerging.
60    void qsamplerDeviceForm::showEvent ( QShowEvent *pShowEvent )
61    {
62            if (m_pMainForm)
63                    m_pMainForm->stabilizeForm();
64    
65            stabilizeForm();
66    
67            QWidget::showEvent(pShowEvent);
68    }
69    
70    
71    // Notify our parent that we're closing.
72    void qsamplerDeviceForm::hideEvent ( QHideEvent *pHideEvent )
73    {
74            QWidget::hideEvent(pHideEvent);
75    
76            if (m_pMainForm)
77                    m_pMainForm->stabilizeForm();
78    }
79    
80    
81  // Device configuration dialog setup formal initializer.  // Device configuration dialog setup formal initializer.
82  void qsamplerDeviceForm::setup ( qsamplerMainForm *pMainForm )  void qsamplerDeviceForm::setClient ( lscp_client_t *pClient )
83  {  {
84      m_pMainForm   = pMainForm;          // If it has not changed, do nothing.
85          m_iDirtySetup = 0;          if (m_pClient && m_pClient == pClient)
86      m_iDirtyCount = 0;                  return;
87    
88            // Set new reference.
89            m_pClient = pClient;
90            
91            // OK. Do a whole refresh around.
92            refreshDevices();
93    }
94    
     if (m_pMainForm == NULL)  
         return;  
     if (m_pMainForm->client() == NULL)  
         return;  
95    
96      qsamplerOptions *pOptions = m_pMainForm->options();  // Create a new device from current table view.
97      if (pOptions == NULL)  void qsamplerDeviceForm::createDevice (void)
98          return;  {
99            //
100            // TODO: Create a new device from current table view...
101            //
102            m_pMainForm->appendMessages("qsamplerDeviceForm::createDevice()");
103    
104          // Set our main client reference.          QListViewItem *pItem = DeviceListView->selectedItem();
105      DeviceParameterTable->setClient(pMainForm->client());          if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
106                    return;
107    
108            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
109    
110            // Build the parameter list...
111            qsamplerDeviceParamMap& params = device.params();
112            lscp_param_t *pParams = new lscp_param_t [params.count() + 1];
113            int iParam = 0;
114            qsamplerDeviceParamMap::ConstIterator iter;
115            for (iter = params.begin(); iter != params.end(); ++iter) {
116                    pParams[iParam].key   = (char *) iter.key().latin1();
117                    pParams[iParam].value = (char *) iter.data().value.latin1();
118                    ++iParam;
119            }
120            // Null terminated.
121            pParams[iParam].key   = NULL;
122            pParams[iParam].value = NULL;
123    
124            // Now it depends on the device type...
125            int iDeviceID = -1;
126            switch (device.deviceType()) {
127            case qsamplerDevice::Audio:
128                    if ((iDeviceID = ::lscp_create_audio_device(m_pClient,
129                                    device.driverName().latin1(), pParams)) < 0)
130                            m_pMainForm->appendMessagesClient("lscp_create_audio_device");
131                    break;
132            case qsamplerDevice::Midi:
133                    if ((iDeviceID = ::lscp_create_midi_device(m_pClient,
134                                    device.driverName().latin1(), pParams)) < 0)
135                            m_pMainForm->appendMessagesClient("lscp_create_midi_device");
136                    break;
137            case qsamplerDevice::None:
138                    break;
139            }
140    
141            // Free used parameter array.
142            delete pParams;
143    
144            // Show result.
145            if (iDeviceID >= 0) {
146                    m_pMainForm->appendMessages(device.deviceName() + ' ' + tr("created."));
147                    // Done.
148                    refreshDevices();
149                    // Main session should be marked dirty.
150                    m_pMainForm->sessionDirty();
151            }
152    }
153    
     // Avoid nested changes.  
     m_iDirtySetup++;  
154    
155    // Delete current device in table view.
156    void qsamplerDeviceForm::deleteDevice (void)
157    {
158            //
159            // TODO: Delete current device in table view...
160          //          //
161      // TODO: Load initial device configuration data ...          m_pMainForm->appendMessages("qsamplerDeviceForm::deleteDevice()");
     //  
162    
163      // Done.          QListViewItem *pItem = DeviceListView->selectedItem();
164      m_iDirtySetup--;          if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
165      stabilizeForm();                  return;
166    
167            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
168    
169            // Now it depends on the device type...
170            lscp_status_t ret = LSCP_FAILED;
171            switch (device.deviceType()) {
172            case qsamplerDevice::Audio:
173                    if ((ret = ::lscp_destroy_audio_device(m_pClient,
174                                    device.deviceID())) != LSCP_OK)
175                            m_pMainForm->appendMessagesClient("lscp_destroy_audio_device");
176                    break;
177            case qsamplerDevice::Midi:
178                    if ((ret = ::lscp_destroy_midi_device(m_pClient,
179                                    device.deviceID())) != LSCP_OK)
180                            m_pMainForm->appendMessagesClient("lscp_destroy_midi_device");
181                    break;
182            case qsamplerDevice::None:
183                    break;
184            }
185    
186            // Show result.
187            if (ret == LSCP_OK) {
188                    m_pMainForm->appendMessages(device.deviceName() + ' ' + tr("deleted."));
189                    // Done.
190                    refreshDevices();
191                    // Main session should be marked dirty.
192                    m_pMainForm->sessionDirty();
193            }
194  }  }
195    
196    
197  // Dirty up settings.  // Refresh all device list and views.
198  void qsamplerDeviceForm::contentsChanged (void)  void qsamplerDeviceForm::refreshDevices (void)
199  {  {
200      if (m_iDirtySetup > 0)          // Avoid nested changes.
201          return;          m_iDirtySetup++;
202    
203            //
204            // TODO: Load device configuration data ...
205            //
206            m_pMainForm->appendMessages("qsamplerDeviceForm::refreshDevices()");
207    
208            DeviceListView->clear();
209            if (m_pClient) {
210                    qsamplerDeviceItem *pItem;
211                    int *piDeviceIDs;
212                    // Grab and pop Audio devices...
213                    pItem = new qsamplerDeviceItem(DeviceListView, m_pClient,
214                            qsamplerDevice::Audio);
215                    if (pItem) {
216                            pItem->setText(0, tr("Audio"));
217                            piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);
218                            for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
219                                    new qsamplerDeviceItem(pItem, m_pClient,
220                                            qsamplerDevice::Audio, piDeviceIDs[i]);
221                            }
222                            pItem->setOpen(true);
223                    }
224                    // Grab and pop MIDI devices...
225                    pItem = new qsamplerDeviceItem(DeviceListView, m_pClient,
226                            qsamplerDevice::Midi);
227                    if (pItem) {
228                            pItem->setText(0, tr("MIDI"));
229                            piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);
230                            for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
231                                    new qsamplerDeviceItem(pItem, m_pClient,
232                                            qsamplerDevice::Midi, piDeviceIDs[i]);
233                            }
234                            pItem->setOpen(true);
235                    }
236            }
237    
238            // Done.
239            m_iDirtyCount = 0;
240            m_iDirtySetup--;
241    
242      m_iDirtyCount++;          // Show something.
243      stabilizeForm();          selectDevice();
244    }
245    
246    
247    // Driver selection slot.
248    void qsamplerDeviceForm::selectDriver ( const QString& sDriverName )
249    {
250            if (m_iDirtySetup > 0)
251                    return;
252    
253            //
254            //  TODO: Driver name has changed for a new device...
255            //
256            m_pMainForm->appendMessages("qsamplerDeviceForm::selectDriver()");
257    
258            QListViewItem *pItem = DeviceListView->selectedItem();
259            if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
260                    return;
261    
262            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
263    
264            // Driver change is only valid for scratch devices...
265            if (m_bNewDevice) {
266                    device.setDriver(m_pClient, sDriverName);
267                    DeviceParamTable->refresh(device);
268                    m_iDirtyCount++;
269                    // Done.
270                    stabilizeForm();
271            }
272    }
273    
274    
275    // Device selection slot.
276    void qsamplerDeviceForm::selectDevice (void)
277    {
278            if (m_iDirtySetup > 0)
279                    return;
280    
281            //
282            //  TODO: Device selection has changed...
283            //
284            m_pMainForm->appendMessages("qsamplerDeviceForm::selectDevice()");
285    
286            QListViewItem *pItem = DeviceListView->selectedItem();
287            if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM) {
288                    m_deviceType = qsamplerDevice::None;
289                    DeviceNameTextLabel->setText(QString::null);
290                    DeviceParamTable->setNumRows(0);
291                    stabilizeForm();
292                    return;
293            }
294    
295            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
296    
297            // Flag whether this is a new device.
298            m_bNewDevice = (device.deviceID() < 0);
299    
300            // Fill the device/driver heading...
301            DeviceNameTextLabel->setText(device.deviceTypeName() + ' ' + device.deviceName());
302            // The driver combobox is only rebuilt if device type has changed...
303            if (device.deviceType() != m_deviceType) {
304                    DriverNameComboBox->clear();
305                    DriverNameComboBox->insertStringList(
306                            qsamplerDevice::getDrivers(m_pClient, device.deviceType()));
307                    m_deviceType = device.deviceType();
308            }
309            // Do we need a driver name?
310            if (m_bNewDevice || device.driverName().isEmpty())
311                    device.setDriver(m_pClient, DriverNameComboBox->currentText());
312            const QString& sDriverName = device.driverName();
313            if (DriverNameComboBox->listBox()->findItem(sDriverName, Qt::ExactMatch) == NULL)
314                    DriverNameComboBox->insertItem(sDriverName);
315            DriverNameComboBox->setCurrentText(sDriverName);
316            DriverNameTextLabel->setEnabled(m_bNewDevice);
317            DriverNameComboBox->setEnabled(m_bNewDevice);
318            // Fill the device parameter table...
319            DeviceParamTable->refresh(device);
320            // Done.
321            stabilizeForm();
322    }
323    
324    
325    // parameter value change slot.
326    void qsamplerDeviceForm::changeValue ( int iRow, int iCol )
327    {
328            //
329            //  TODO: Device parameter change...
330            //
331            m_pMainForm->appendMessages("qsamplerDeviceForm::changeValue()");
332            
333            QListViewItem *pItem = DeviceListView->selectedItem();
334            if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
335                    return;
336    
337            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
338    
339            // Table 1st column has the parameter name;
340            qsamplerDeviceParamMap& params = device.params();
341            const QString sParam = DeviceParamTable->text(iRow, 0);
342            const QString sValue = DeviceParamTable->text(iRow, iCol);
343            params[sParam].value = sValue;
344    
345            // Set proper device parameter, on existing device ...
346            if (device.deviceID() >= 0) {
347                    // Prepare parameter struct.
348                    lscp_param_t param;
349                    param.key   = (char *) sParam.latin1();
350                    param.value = (char *) sValue.latin1();
351                    // Now it depends on the device type...
352                    lscp_status_t ret = LSCP_FAILED;
353                    switch (device.deviceType()) {
354                    case qsamplerDevice::Audio:
355                            if ((ret = ::lscp_set_audio_device_param(m_pClient,
356                                            device.deviceID(), &param)) != LSCP_OK)
357                                    m_pMainForm->appendMessagesClient("lscp_set_audio_device_param");
358                            break;
359                    case qsamplerDevice::Midi:
360                            if ((ret = ::lscp_set_midi_device_param(m_pClient,
361                                            device.deviceID(), &param)) != LSCP_OK)
362                                    m_pMainForm->appendMessagesClient("lscp_set_midi_device_param");
363                            break;
364                    case qsamplerDevice::None:
365                            break;
366                    }
367                    // Show result.
368                    if (ret == LSCP_OK) {
369                            m_pMainForm->appendMessages(device.deviceName() + ' ' +
370                                    QString("%1: %2.").arg(sParam).arg(sValue));
371                    }
372            }
373    
374            // Done.
375            m_iDirtyCount++;
376            stabilizeForm();
377            // Main session should be dirtier...
378            m_pMainForm->sessionDirty();
379  }  }
380    
381    
382  // Stabilize current form state.  // Stabilize current form state.
383  void qsamplerDeviceForm::stabilizeForm (void)  void qsamplerDeviceForm::stabilizeForm (void)
384  {  {
385          // TODO: Enable/disable available command buttons.          QListViewItem *pItem = DeviceListView->selectedItem();
386            bool bEnabled = (pItem != NULL);
387            DeviceNameTextLabel->setEnabled(bEnabled && !m_bNewDevice);
388            DriverNameTextLabel->setEnabled(bEnabled &&  m_bNewDevice);
389            DriverNameComboBox->setEnabled(bEnabled && m_bNewDevice);
390            DeviceParamTable->setEnabled(bEnabled);
391            CreateDevicePushButton->setEnabled(bEnabled ||  m_bNewDevice);
392            DeleteDevicePushButton->setEnabled(bEnabled && !m_bNewDevice);
393  }  }
394    
395    
396  // end of qsamplerDeviceForm.ui.h  // end of qsamplerDeviceForm.ui.h
   

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

  ViewVC Help
Powered by ViewVC