/[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 430 by capela, Tue Mar 8 17:23:29 2005 UTC revision 487 by capela, Thu Mar 31 14:17:19 2005 UTC
# Line 24  Line 24 
24  #include <qfiledialog.h>  #include <qfiledialog.h>
25  #include <qfileinfo.h>  #include <qfileinfo.h>
26  #include <qlistbox.h>  #include <qlistbox.h>
27    #include <qptrlist.h>
28    #include <qpopupmenu.h>
29    
30  #include "qsamplerMainForm.h"  #include "qsamplerMainForm.h"
31    
# Line 33  Line 35 
35  // Kind of constructor.  // Kind of constructor.
36  void qsamplerDeviceForm::init (void)  void qsamplerDeviceForm::init (void)
37  {  {
38      // Initialize locals.          // Initialize locals.
39      m_pMainForm   = (qsamplerMainForm *) QWidget::parentWidget();          m_pMainForm   = NULL;
40      m_pClient     = NULL;          m_pClient     = NULL;
41          m_iDirtySetup = 0;          m_iDirtySetup = 0;
42      m_iDirtyCount = 0;          m_bNewDevice  = false;
43      m_iUntitled   = 1;          m_deviceType  = qsamplerDevice::None;
44      m_bNewDevice  = false;          m_pAudioItems = NULL;
45            m_pMidiItems  = NULL;
46            
47            // This an outsider (from designer), but rather important.
48            QObject::connect(DeviceParamTable, SIGNAL(valueChanged(int,int)),
49                    this, SLOT(changeDeviceParam(int,int)));
50            QObject::connect(DevicePortParamTable, SIGNAL(valueChanged(int,int)),
51                    this, SLOT(changeDevicePortParam(int,int)));
52    
53      // Try to restore normal window positioning.          // Initial contents.
54      adjustSize();          refreshDevices();
55            // Try to restore normal window positioning.
56            adjustSize();
57  }  }
58    
59    
# Line 55  void qsamplerDeviceForm::destroy (void) Line 66  void qsamplerDeviceForm::destroy (void)
66  // Notify our parent that we're emerging.  // Notify our parent that we're emerging.
67  void qsamplerDeviceForm::showEvent ( QShowEvent *pShowEvent )  void qsamplerDeviceForm::showEvent ( QShowEvent *pShowEvent )
68  {  {
69      if (m_pMainForm)          if (m_pMainForm)
70          m_pMainForm->stabilizeForm();                  m_pMainForm->stabilizeForm();
71    
72      stabilizeForm();          stabilizeForm();
73    
74      QWidget::showEvent(pShowEvent);          QWidget::showEvent(pShowEvent);
75  }  }
76    
77    
78  // Notify our parent that we're closing.  // Notify our parent that we're closing.
79  void qsamplerDeviceForm::hideEvent ( QHideEvent *pHideEvent )  void qsamplerDeviceForm::hideEvent ( QHideEvent *pHideEvent )
80  {  {
81      QWidget::hideEvent(pHideEvent);          QWidget::hideEvent(pHideEvent);
82    
83            if (m_pMainForm)
84                    m_pMainForm->stabilizeForm();
85    }
86    
87      if (m_pMainForm)  
88          m_pMainForm->stabilizeForm();  // Application main form settler (life depends on it).
89    void qsamplerDeviceForm::setMainForm ( qsamplerMainForm *pMainForm )
90    {
91       m_pMainForm = pMainForm;
92  }  }
93    
94    
# Line 79  void qsamplerDeviceForm::setClient ( lsc Line 97  void qsamplerDeviceForm::setClient ( lsc
97  {  {
98          // If it has not changed, do nothing.          // If it has not changed, do nothing.
99          if (m_pClient && m_pClient == pClient)          if (m_pClient && m_pClient == pClient)
100              return;                  return;
101    
102          // Set new reference.          // Set new reference.
103          m_pClient = pClient;          m_pClient = pClient;
# Line 89  void qsamplerDeviceForm::setClient ( lsc Line 107  void qsamplerDeviceForm::setClient ( lsc
107  }  }
108    
109    
110  // Format the displayable device configuration filename.  // Set current selected device by type and id.
111  QString qsamplerDeviceForm::devicesName ( const QString& sFilename )  void qsamplerDeviceForm::setDevice (
112  {          qsamplerDevice::qsamplerDeviceType deviceType, int iDeviceID )
113      QString sDevicesName = sFilename;  {
114      qsamplerOptions *pOptions = m_pMainForm->options();          // Get the device view root item...
115      if (pOptions) {          qsamplerDeviceItem *pRootItem = NULL;
116          bool bCompletePath = (pOptions && pOptions->bCompletePath);          switch (deviceType) {
117          if (sDevicesName.isEmpty())          case qsamplerDevice::Audio:
118                  sDevicesName = tr("Untitled") + QString::number(m_iUntitled);                  pRootItem = m_pAudioItems;
119          else if (!bCompletePath)                  break;
120                  sDevicesName = QFileInfo(sDevicesName).fileName();          case qsamplerDevice::Midi:
121                    pRootItem = m_pMidiItems;
122                    break;
123            case qsamplerDevice::None:
124                    break;
125          }          }
126      return sDevicesName;          
127  }          // Is the root present?
128            if (pRootItem == NULL)
129                return;
 // Window close event handlers.  
 bool qsamplerDeviceForm::queryClose (void)  
 {  
     bool bQueryClose = true;  
   
     if (m_iDirtyCount > 0) {  
         switch (QMessageBox::warning(this, tr("Warning"),  
             tr("The device configuration has been changed.\n\n"  
                "\"%1\"\n\n"  
                "Do you want to save the changes?")  
                            .arg(devicesName(m_sFilename)),  
             tr("Save"), tr("Discard"), tr("Cancel"))) {  
         case 0:     // Save...  
             saveDevices();  
             // Fall thru....  
         case 1:     // Discard  
             break;  
         default:    // Cancel.  
             bQueryClose = false;  
         }  
     }  
   
     return bQueryClose;  
 }  
   
   
   
 // Dirty up settings.  
 void qsamplerDeviceForm::contentsChanged (void)  
 {  
     if (m_iDirtySetup > 0)  
         return;  
   
     m_iDirtyCount++;  
     stabilizeForm();  
 }  
   
   
 // Load device configuration slot.  
 void qsamplerDeviceForm::loadDevices (void)  
 {  
     QString sFilename = QFileDialog::getOpenFileName(  
             m_sFilename,                                    // Start here.  
             tr("Device Configuration files") + " (*.lscp)", // Filter (XML files)  
             this, 0,                                        // Parent and name (none)  
             tr("Load Device Configuration")                 // Caption.  
     );  
   
     if (sFilename.isEmpty())  
         return;  
   
     // Check if we're going to discard safely the current one...  
     if (!queryClose())  
         return;  
   
     // Load it right away...  
     loadDevicesFile(sFilename);  
 }  
   
   
 // Save device configuration slot.  
 void qsamplerDeviceForm::saveDevices (void)  
 {  
     QString sFilename = QFileDialog::getSaveFileName(  
             m_sFilename,                                    // Start here.  
             tr("Device Configuration files") + " (*.lscp)", // Filter (XML files)  
             this, 0,                                        // Parent and name (none)  
             tr("Save Device Configuration")                 // Caption.  
     );  
   
     if (sFilename.isEmpty())  
         return;  
   
     // Enforce .xml extension...  
     if (QFileInfo(sFilename).extension().isEmpty())  
         sFilename += ".lscp";  
   
     // Save it right away...  
     saveDevicesFile(sFilename);  
 }  
   
   
 // Load device configuration from file.  
 void qsamplerDeviceForm::loadDevicesFile ( const QString& sFilename )  
 {  
         //  
     // TODO: Load device configuration from file...  
         //  
         m_pMainForm->appendMessages("qsamplerDeviceForm::loadDevicesFile(\"" + sFilename + "\")...");  
   
         m_sFilename   = sFilename;  
         m_iDirtyCount = 0;  
130    
131          refreshDevices();          // For each child, test for identity...
132            qsamplerDeviceItem *pDeviceItem =
133                    (qsamplerDeviceItem *) pRootItem->firstChild();
134            while (pDeviceItem) {
135                    // If identities match, select as current device item.
136                    if (pDeviceItem->device().deviceID() == iDeviceID) {
137                            DeviceListView->setSelected(pDeviceItem, true);
138                            break;
139                    }
140                    pDeviceItem = (qsamplerDeviceItem *) pDeviceItem->nextSibling();
141            }
142  }  }
143    
144    
 // Save device configuration into file.  
 void qsamplerDeviceForm::saveDevicesFile ( const QString& sFilename )  
 {  
         //  
     // TODO: Save device configuration into file...  
     //  
         m_pMainForm->appendMessages("qsamplerDeviceForm::saveDevicesFile(\"" + sFilename + "\")...");  
   
         m_sFilename   = sFilename;  
         m_iDirtyCount = 0;  
         stabilizeForm();  
 }  
   
145    
146  // Create a new device from current table view.  // Create a new device from current table view.
147  void qsamplerDeviceForm::createDevice (void)  void qsamplerDeviceForm::createDevice (void)
148  {  {
149          //          if (m_pMainForm == NULL)
150      // TODO: Create a new device from current table view...              return;
     //  
         m_pMainForm->appendMessages("qsamplerDeviceForm::createDevice()...");  
           
         m_iDirtyCount++;  
         stabilizeForm();  
 }  
   
151    
152  // Update current device in table view.          QListViewItem *pItem = DeviceListView->selectedItem();
153  void qsamplerDeviceForm::updateDevice (void)          if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
154  {                  return;
         //  
     // TODO: Update current device in table view...  
     //  
         m_pMainForm->appendMessages("qsamplerDeviceForm::updateDevice()...");  
155    
156          m_iDirtyCount++;          // About a brand new device instance...
157          stabilizeForm();          qsamplerDevice device(((qsamplerDeviceItem *) pItem)->device());
158            if (device.createDevice()) {
159                    // Now it depends on the device type...
160                    qsamplerDeviceItem *pRootItem = NULL;
161                    switch (device.deviceType()) {
162                    case qsamplerDevice::Audio:
163                            pRootItem = m_pAudioItems;
164                            break;
165                    case qsamplerDevice::Midi:
166                            pRootItem = m_pMidiItems;
167                            break;
168                    case qsamplerDevice::None:
169                            break;
170                    }
171                    // Append the new device item.
172                    qsamplerDeviceItem *pDeviceItem = new qsamplerDeviceItem(pRootItem,
173                            m_pMainForm, device.deviceType(), device.deviceID());
174                    // Just make it the new selection...
175                    DeviceListView->setSelected(pDeviceItem, true);
176                    // Main session should be marked dirty.
177                    m_pMainForm->sessionDirty();
178            }
179  }  }
180    
181    
182  // Delete current device in table view.  // Delete current device in table view.
183  void qsamplerDeviceForm::deleteDevice (void)  void qsamplerDeviceForm::deleteDevice (void)
184  {  {
185          //          if (m_pMainForm == NULL)
186      // TODO: Delete current device in table view...              return;
     //  
         m_pMainForm->appendMessages("qsamplerDeviceForm::deleteDevice()...");  
187    
188          m_iDirtyCount++;          QListViewItem *pItem = DeviceListView->selectedItem();
189          stabilizeForm();          if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
190                    return;
191    
192            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
193    
194            // Prompt user if this is for real...
195            qsamplerOptions *pOptions = m_pMainForm->options();
196            if (pOptions && pOptions->bConfirmRemove) {
197                    if (QMessageBox::warning(this, tr("Warning"),
198                            tr("Delete device:\n\n"
199                            "%1\n\n"
200                            "Are you sure?")
201                            .arg(device.deviceName()),
202                            tr("OK"), tr("Cancel")) > 0)
203                            return;
204            }
205    
206            // Go and destroy...
207            if (device.deleteDevice()) {
208                    // Remove it from the device view...
209                    delete pItem;
210                    // Main session should be marked dirty.
211                    m_pMainForm->sessionDirty();
212            }
213  }  }
214    
215    
216  // Refresh all device list and views.  // Refresh all device list and views.
217  void qsamplerDeviceForm::refreshDevices (void)  void qsamplerDeviceForm::refreshDevices (void)
218  {  {
219      // Avoid nested changes.          if (m_pMainForm == NULL)
220      m_iDirtySetup++;              return;
221    
222          //          // Avoid nested changes.
223      // TODO: Load device configuration data ...          m_iDirtySetup++;
     //  
         m_pMainForm->appendMessages("qsamplerDeviceForm::refreshDevices()");  
224    
225      DeviceListView->clear();          //
226      if (m_pClient) {          // (Re)Load complete device configuration data ...
227                  qsamplerDeviceItem *pItem;          //
228            m_pAudioItems = NULL;
229            m_pMidiItems = NULL;
230            DeviceListView->clear();
231            if (m_pClient) {
232                  int *piDeviceIDs;                  int *piDeviceIDs;
233                  // Grab and pop Audio devices...                  // Grab and pop Audio devices...
234          pItem = new qsamplerDeviceItem(DeviceListView, m_pClient,                  m_pAudioItems = new qsamplerDeviceItem(DeviceListView,
235                          qsamplerDevice::Audio);                          m_pMainForm, qsamplerDevice::Audio);
236          if (pItem) {                  if (m_pAudioItems) {
                         pItem->setText(0, tr("Audio"));  
237                          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);                          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Audio);
238                          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {                          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
239                              new qsamplerDeviceItem(pItem, m_pClient,                                  new qsamplerDeviceItem(m_pAudioItems, m_pMainForm,
240                                          qsamplerDevice::Audio, piDeviceIDs[i]);                                          qsamplerDevice::Audio, piDeviceIDs[i]);
241                          }                          }
242                          pItem->setOpen(true);                          m_pAudioItems->setOpen(true);
243                  }                  }
244                  // Grab and pop MIDI devices...                  // Grab and pop MIDI devices...
245          pItem = new qsamplerDeviceItem(DeviceListView, m_pClient,                  m_pMidiItems = new qsamplerDeviceItem(DeviceListView,
246                          qsamplerDevice::Midi);                          m_pMainForm, qsamplerDevice::Midi);
247          if (pItem) {                  if (m_pMidiItems) {
                         pItem->setText(0, tr("MIDI"));  
248                          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);                          piDeviceIDs = qsamplerDevice::getDevices(m_pClient, qsamplerDevice::Midi);
249                          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {                          for (int i = 0; piDeviceIDs && piDeviceIDs[i] >= 0; i++) {
250                              new qsamplerDeviceItem(pItem, m_pClient,                                  new qsamplerDeviceItem(m_pMidiItems, m_pMainForm,
251                                          qsamplerDevice::Midi, piDeviceIDs[i]);                                          qsamplerDevice::Midi, piDeviceIDs[i]);
252                          }                          }
253                          pItem->setOpen(true);                          m_pMidiItems->setOpen(true);
254                  }                  }
255          }          }
256    
257      // Done.          // Done.
258      selectDevice();          m_iDirtySetup--;
259      m_iDirtySetup--;  
260            // Show something.
261            selectDevice();
262  }  }
263    
264    
265  // Driver selection slot.  // Driver selection slot.
266  void qsamplerDeviceForm::selectDriver ( const QString& sDriverName )  void qsamplerDeviceForm::selectDriver ( const QString& sDriverName )
267  {  {
268            if (m_iDirtySetup > 0)
269                    return;
270    
271          //          //
272          //  TODO: Driver name has changed for a new device...          //  Driver name has changed for a new device...
273          //          //
         m_pMainForm->appendMessages("qsamplerDeviceForm::selectDriver(\"" + sDriverName + "\")");  
274    
275          m_iDirtyCount++;          QListViewItem *pItem = DeviceListView->selectedItem();
276          stabilizeForm();          if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
277                    return;
278    
279            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
280    
281            // Driver change is only valid for scratch devices...
282            if (m_bNewDevice) {
283                    m_iDirtySetup++;
284                    device.setDriver(sDriverName);
285                    DeviceParamTable->refresh(device.params(), m_bNewDevice);
286                    m_iDirtySetup--;
287                    // Done.
288                    stabilizeForm();
289            }
290  }  }
291    
292    
293  // Device selection slot.  // Device selection slot.
294  void qsamplerDeviceForm::selectDevice (void)  void qsamplerDeviceForm::selectDevice (void)
295  {  {
296            if (m_iDirtySetup > 0)
297                    return;
298    
299          //          //
300          //  TODO: Device selection has changed...          //  Device selection has changed...
301          //          //
         m_pMainForm->appendMessages("qsamplerDeviceForm::selectDevice()");  
302    
303      QListViewItem *pItem = DeviceListView->selectedItem();          QListViewItem *pItem = DeviceListView->selectedItem();
304          if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM) {          if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM) {
305                    m_deviceType = qsamplerDevice::None;
306                    DeviceNameTextLabel->setText(QString::null);
307                    DeviceParamTable->setNumRows(0);
308                    DevicePortComboBox->clear();
309                    DevicePortParamTable->setNumRows(0);
310                    DevicePortComboBox->setEnabled(false);
311                    DevicePortParamTable->setEnabled(false);
312                  stabilizeForm();                  stabilizeForm();
313                  return;                  return;
314          }          }
315    
316          const qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();          qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
317    
318            m_iDirtySetup++;
319            // Flag whether this is a new device.
320          m_bNewDevice = (device.deviceID() < 0);          m_bNewDevice = (device.deviceID() < 0);
321    
322          // Fill the device heading...          // Fill the device/driver heading...
323          DeviceNameTextLabel->setText(' ' + device.deviceName());          DeviceNameTextLabel->setText(device.deviceName());
324          DriverNameComboBox->clear();          // The driver combobox is only rebuilt if device type has changed...
325          DriverNameComboBox->insertStringList(          if (device.deviceType() != m_deviceType) {
326                  qsamplerDevice::getDrivers(m_pClient, device.deviceType()));                  DriverNameComboBox->clear();
327                    DriverNameComboBox->insertStringList(
328                            qsamplerDevice::getDrivers(m_pClient, device.deviceType()));
329                    m_deviceType = device.deviceType();
330            }
331            // Do we need a driver name?
332            if (m_bNewDevice || device.driverName().isEmpty())
333                    device.setDriver(DriverNameComboBox->currentText());
334          const QString& sDriverName = device.driverName();          const QString& sDriverName = device.driverName();
335      if (!sDriverName.isEmpty()) {          if (DriverNameComboBox->listBox()->findItem(sDriverName, Qt::ExactMatch) == NULL)
336          if (DriverNameComboBox->listBox()->findItem(sDriverName, Qt::ExactMatch) == NULL)                  DriverNameComboBox->insertItem(sDriverName);
337              DriverNameComboBox->insertItem(sDriverName);          DriverNameComboBox->setCurrentText(sDriverName);
         DriverNameComboBox->setCurrentText(sDriverName);  
     }  
338          DriverNameTextLabel->setEnabled(m_bNewDevice);          DriverNameTextLabel->setEnabled(m_bNewDevice);
339          DriverNameComboBox->setEnabled(m_bNewDevice);          DriverNameComboBox->setEnabled(m_bNewDevice);
           
340          // Fill the device parameter table...          // Fill the device parameter table...
341          DeviceParamTable->setEnabled(true);          DeviceParamTable->refresh(device.params(), m_bNewDevice);
342          DeviceParamTable->setDevice(m_pClient,          // And now the device port/channel parameter table...
343              device.deviceType(), device.deviceID());          DevicePortComboBox->clear();
344            DevicePortParamTable->setNumRows(0);
345            if (m_bNewDevice) {
346                    DevicePortComboBox->setEnabled(false);
347                    DevicePortParamTable->setEnabled(false);
348            } else {
349                    QPixmap pixmap;
350                    switch (device.deviceType()) {
351                    case qsamplerDevice::Audio:
352                        pixmap = QPixmap::fromMimeSource("audio2.png");
353                        break;
354                    case qsamplerDevice::Midi:
355                        pixmap = QPixmap::fromMimeSource("midi2.png");
356                        break;
357                    case qsamplerDevice::None:
358                        break;
359                    }
360                    qsamplerDevicePortList& ports = device.ports();
361                    qsamplerDevicePort *pPort;
362                    for (pPort = ports.first(); pPort; pPort = ports.next()) {
363                DevicePortComboBox->insertItem(pixmap, device.deviceTypeName()
364                                    + ' ' + device.driverName()
365                                    + ' ' + pPort->portName());
366                    }
367                    bool bEnabled = (ports.count() > 0);
368                    DevicePortComboBox->setEnabled(bEnabled);
369                    DevicePortParamTable->setEnabled(bEnabled);
370            }
371            // Done.
372            m_iDirtySetup--;
373            
374            // Make the device port/channel selection effective.
375            selectDevicePort(DevicePortComboBox->currentItem());
376    }
377    
378    
379    // Device port/channel selection slot.
380    void qsamplerDeviceForm::selectDevicePort ( int iPort )
381    {
382            if (m_iDirtySetup > 0)
383                    return;
384    
385            //
386            //  Device port/channel selection has changed...
387            //
388    
389            QListViewItem *pItem = DeviceListView->selectedItem();
390            if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
391                    return;
392    
393            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
394            qsamplerDevicePort *pPort = device.ports().at(iPort);
395            if (pPort) {
396                    m_iDirtySetup++;
397                    DevicePortParamTable->refresh(pPort->params(), false);
398                    m_iDirtySetup--;
399            }
400          // Done.          // Done.
401          stabilizeForm();          stabilizeForm();
402  }  }
403    
404    
405  // Stabilize current form state.  // Device parameter value change slot.
406  void qsamplerDeviceForm::stabilizeForm (void)  void qsamplerDeviceForm::changeDeviceParam ( int iRow, int iCol )
407    {
408            if (m_pMainForm == NULL)
409                return;
410            if (m_iDirtySetup > 0)
411                    return;
412            if (iRow < 0 || iCol < 0)
413                    return;
414                    
415            //
416            //  Device parameter change...
417            //
418    
419            QListViewItem *pItem = DeviceListView->selectedItem();
420            if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
421                    return;
422    
423            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
424    
425            // Table 1st column has the parameter name;
426            const QString sParam = DeviceParamTable->text(iRow, 0);
427            const QString sValue = DeviceParamTable->text(iRow, iCol);
428            // Set the local device parameter value.
429            if (device.setParam(sParam, sValue)) {
430                    selectDevice();
431            } else {
432                    stabilizeForm();
433            }
434            // Main session should be dirtier...
435            m_pMainForm->sessionDirty();
436    }
437    
438    
439    // Device port/channel parameter value change slot.
440    void qsamplerDeviceForm::changeDevicePortParam ( int iRow, int iCol )
441  {  {
442      // Update the main caption...          if (m_pMainForm == NULL)
443      QString sDevicesName = devicesName(m_sFilename);              return;
444      if (m_iDirtyCount > 0)          if (m_iDirtySetup > 0)
445          sDevicesName += '*';                  return;
446      setCaption(tr("Devices - [%1]").arg(sDevicesName));          if (iRow < 0 || iCol < 0)
447                    return;
448    
449          //          //
450          // TODO: Enable/disable available command buttons.          //  Device port/channel parameter change...
451          //          //
         m_pMainForm->appendMessages("qsamplerDeviceForm::stabilizeForm()");  
452    
453      SaveDevicesPushButton->setEnabled(m_iDirtyCount > 0);          QListViewItem *pItem = DeviceListView->selectedItem();
454            if (pItem == NULL || pItem->rtti() != QSAMPLER_DEVICE_ITEM)
455                    return;
456    
457            qsamplerDevice& device = ((qsamplerDeviceItem *) pItem)->device();
458    
459            int iPort = DevicePortComboBox->currentItem();
460            qsamplerDevicePort *pPort = device.ports().at(iPort);
461            if (pPort == NULL)
462                return;
463    
464            // Table 1st column has the parameter name;
465            const QString sParam = DevicePortParamTable->text(iRow, 0);
466            const QString sValue = DevicePortParamTable->text(iRow, iCol);
467            // Set the local device port/channel parameter value.
468            pPort->setParam(sParam, sValue);
469            // Done.
470            stabilizeForm();
471            // Main session should be dirtier...
472            m_pMainForm->sessionDirty();
473    }
474    
475      QListViewItem *pItem = DeviceListView->selectedItem();  
476      bool bEnabled = (pItem != NULL);  // Device list view context menu handler.
477          DeviceNameTextLabel->setEnabled(bEnabled);  void qsamplerDeviceForm::contextMenu ( QListViewItem *pItem, const QPoint& pos, int )
478          DriverNameTextLabel->setEnabled(bEnabled && m_bNewDevice);  {
479            int iItemID;
480            
481            // Build the device context menu...
482            QPopupMenu* pContextMenu = new QPopupMenu(this);
483            
484            bool bClient = (m_pClient != NULL);
485            bool bEnabled = (pItem != NULL);
486            iItemID = pContextMenu->insertItem(
487                    QIconSet(QPixmap::fromMimeSource("deviceCreate.png")),
488                    tr("&Create device"), this, SLOT(createDevice()));
489            pContextMenu->setItemEnabled(iItemID, bEnabled || (bClient && m_bNewDevice));
490            iItemID = pContextMenu->insertItem(
491                    QIconSet(QPixmap::fromMimeSource("deviceDelete.png")),
492                    tr("&Delete device"), this, SLOT(deleteDevice()));
493            pContextMenu->setItemEnabled(iItemID, bEnabled && !m_bNewDevice);
494            pContextMenu->insertSeparator();
495            iItemID = pContextMenu->insertItem(
496                    QIconSet(QPixmap::fromMimeSource("formRefresh.png")),
497                    tr("&Refresh"), this, SLOT(refreshDevices()));
498            pContextMenu->setItemEnabled(iItemID, bClient);
499            
500            pContextMenu->exec(pos);
501            
502            delete pContextMenu;
503    }
504    
505    
506    // Stabilize current form state.
507    void qsamplerDeviceForm::stabilizeForm (void)
508    {
509            QListViewItem *pItem = DeviceListView->selectedItem();
510            bool bClient = (m_pClient != NULL);
511            bool bEnabled = (pItem != NULL);
512            DeviceNameTextLabel->setEnabled(bEnabled && !m_bNewDevice);
513            DriverNameTextLabel->setEnabled(bEnabled &&  m_bNewDevice);
514          DriverNameComboBox->setEnabled(bEnabled && m_bNewDevice);          DriverNameComboBox->setEnabled(bEnabled && m_bNewDevice);
515          DeviceParamTable->setEnabled(bEnabled);          DeviceParamTable->setEnabled(bEnabled);
516      CreateDevicePushButton->setEnabled(bEnabled && (m_iDirtyCount > 0 ||  m_bNewDevice));          RefreshDevicesPushButton->setEnabled(bClient);
517      UpdateDevicePushButton->setEnabled(bEnabled && (m_iDirtyCount > 0 && !m_bNewDevice));          CreateDevicePushButton->setEnabled(bEnabled || (bClient && m_bNewDevice));
518      DeleteDevicePushButton->setEnabled(bEnabled && (m_iDirtyCount > 0 && !m_bNewDevice));          DeleteDevicePushButton->setEnabled(bEnabled && !m_bNewDevice);
519  }  }
520    
521    
522  // end of qsamplerDeviceForm.ui.h  // end of qsamplerDeviceForm.ui.h
523    
524    
525    

Legend:
Removed from v.430  
changed lines
  Added in v.487

  ViewVC Help
Powered by ViewVC