[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/multimedia/k3b
From:       Sebastian Trueg <sebastian () trueg ! de>
Date:       2005-07-18 12:32:18
Message-ID: 1121689938.428365.11265.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 435853 by trueg:

Update the device lists when HAL signals devices added or removed.

BUG:109251


 M  +50 -0     libk3b/tools/k3bdevicecombobox.cpp  
 M  +12 -0     libk3b/tools/k3bdevicecombobox.h  
 M  +14 -8     src/k3bwriterselectionwidget.cpp  
 M  +2 -0      src/k3bwriterselectionwidget.h  
 M  +9 -0      src/misc/k3bcdcopydialog.cpp  
 M  +3 -0      src/misc/k3bcdcopydialog.h  
 M  +7 -0      src/misc/k3bdvdcopydialog.cpp  
 M  +6 -0      src/misc/k3bdvdcopydialog.h  


--- trunk/extragear/multimedia/k3b/libk3b/tools/k3bdevicecombobox.cpp #435852:435853
@@ -15,6 +15,8 @@
 
 #include "k3bdevicecombobox.h"
 #include <k3bdevice.h>
+#include <k3bdevicemanager.h>
+#include <k3bcore.h>
 
 #include <klocale.h>
 
@@ -36,6 +38,8 @@
   d = new Private();
   connect( this, SIGNAL(activated(int)),
 	   this, SLOT(slotActivated(int)) );
+  connect( k3bcore->deviceManager(), SIGNAL(changed(K3bDevice::DeviceManager*)),
+	   this, SLOT(slotDeviceManagerChanged(K3bDevice::DeviceManager*)) );
 }
 
 
@@ -89,6 +93,27 @@
 }
 
 
+void K3bDeviceComboBox::removeDevice( K3bDevice::Device* dev )
+{
+  if( dev ) {
+    if( d->deviceIndexMap.contains(dev->devicename()) ) {
+      // let's make it easy and recreate the whole list
+      K3bDevice::Device* selDev = selectedDevice();
+      QPtrList<K3bDevice::Device> devices;
+      for( unsigned int i = 0; i < d->devices.size(); ++i )
+	devices.append( d->devices[i] );
+
+      clear();
+
+      devices.removeRef( dev );
+
+      addDevices( devices );
+      setSelectedDevice( selDev );
+    }
+  }
+}
+
+
 void K3bDeviceComboBox::addDevices( const QPtrList<K3bDevice::Device>& list )
 {
   for( QPtrListIterator<K3bDevice::Device> it( list );
@@ -97,6 +122,17 @@
 }
 
 
+void K3bDeviceComboBox::refreshDevices( const QPtrList<K3bDevice::Device>& list )
+{
+  K3bDevice::Device* selDev = selectedDevice();
+  clear();
+  if( !list.containsRef( selDev ) )
+    selDev = 0;
+  addDevices( list );
+  setSelectedDevice( selDev );
+}
+
+
 void K3bDeviceComboBox::setSelectedDevice( K3bDevice::Device* dev )
 {
   if( dev ) {
@@ -121,4 +157,18 @@
   emit selectionChanged( d->devices[i] );
 }
 
+
+void K3bDeviceComboBox::slotDeviceManagerChanged( K3bDevice::DeviceManager* dm )
+{
+  unsigned int i = 0;
+  while( i < d->devices.size() ) {
+    if( !dm->allDevices().containsRef( d->devices[i] ) ) {
+      removeDevice( d->devices[i] );
+      i = 0;
+    }
+    else
+      ++i;
+  }
+}
+
 #include "k3bdevicecombobox.moc"
--- trunk/extragear/multimedia/k3b/libk3b/tools/k3bdevicecombobox.h #435852:435853
@@ -22,9 +22,15 @@
 
 namespace K3bDevice {
   class Device;
+  class DeviceManager;
 }
 
 
+/**
+ * A combobox to select a K3b device.
+ *
+ * It automatically removes devices that are removed from the system.
+ */
 class LIBK3B_EXPORT K3bDeviceComboBox : public KComboBox
 {
   Q_OBJECT
@@ -41,11 +47,17 @@
  public slots:
   void addDevice( K3bDevice::Device* );
   void addDevices( const QPtrList<K3bDevice::Device>& );
+  /**
+   * Clears the device combo and tries to keep the current selection
+   */
+  void refreshDevices( const QPtrList<K3bDevice::Device>& );
+  void removeDevice( K3bDevice::Device* );
   void setSelectedDevice( K3bDevice::Device* );
   void clear();
 
  private slots:
   void slotActivated( int );
+  void slotDeviceManagerChanged( K3bDevice::DeviceManager* dm );
 
  private:
   class Private;
--- trunk/extragear/multimedia/k3b/src/k3bwriterselectionwidget.cpp #435852:435853
@@ -120,6 +120,10 @@
 						"writing speeds supported with the mounted media."
 						"<p>Be aware that this only works with MMC3 compliant "
 						"writers.") );
+
+  connect( k3bcore->deviceManager(), SIGNAL(changed(K3bDevice::DeviceManager*)),
+	   this, SLOT(slotDeviceManagerChanged(K3bDevice::DeviceManager*)) );
+
   init();
 
   slotWriterChanged();
@@ -146,15 +150,10 @@
 
   // -- read cd-writers ----------------------------------------------
   QPtrList<K3bDevice::Device>& devices = ( d->dvd 
-				   ? k3bcore->deviceManager()->dvdWriter() 
-				   : k3bcore->deviceManager()->cdWriter() );
+					   ? k3bcore->deviceManager()->dvdWriter() 
+					   : k3bcore->deviceManager()->cdWriter() );
+  m_comboWriter->addDevices( devices );
 
-  K3bDevice::Device* dev = devices.first();
-  while( dev ) {
-    m_comboWriter->addDevice( dev );
-    dev = devices.next();
-  }
-
   k3bcore->config()->setGroup( "General Options" );
   K3bDevice::Device *current = k3bcore->deviceManager()->deviceByName( \
k3bcore->config()->readEntry( "current_writer" ) );  
@@ -499,4 +498,11 @@
 }
 
 
+void K3bWriterSelectionWidget::slotDeviceManagerChanged( K3bDevice::DeviceManager* \
dm ) +{
+  // we simply rebuild the device list
+  m_comboWriter->refreshDevices( d->dvd ? dm->dvdWriter() : dm->cdWriter() );
+  slotWriterChanged();
+}
+
 #include "k3bwriterselectionwidget.moc"
--- trunk/extragear/multimedia/k3b/src/k3bwriterselectionwidget.h #435852:435853
@@ -26,6 +26,7 @@
 class QToolButton;
 namespace K3bDevice {
   class Device;
+  class DeviceManager;
 }
 
 /**
@@ -86,6 +87,7 @@
   void slotSpeedChanged( int index );
   void slotWriterChanged();
   void slotDetermineSupportedWriteSpeeds();
+  void slotDeviceManagerChanged( K3bDevice::DeviceManager* );
 
  private:
   void init();
--- trunk/extragear/multimedia/k3b/src/misc/k3bcdcopydialog.cpp #435852:435853
@@ -204,6 +204,8 @@
   connect( m_comboCopyMode, SIGNAL(activated(int)), this, SLOT(slotToggleAll()) );
   connect( m_checkReadCdText, SIGNAL(toggled(bool)), this, SLOT(slotToggleAll()) );
 
+  connect( k3bcore->deviceManager(), SIGNAL(changed(K3bDevice::DeviceManager*)),
+	   this, SLOT(slotDeviceManagerChanged(K3bDevice::DeviceManager*)) );
 
   QToolTip::add( m_checkIgnoreReadErrors, i18n("Skip unreadable sectors") );
   QToolTip::add( m_checkNoCorrection, i18n("Disable the source drive's error \
correction") ); @@ -450,6 +452,7 @@
   c->writeEntry( "copy mode", s );
 }
 
+
 void K3bCdCopyDialog::loadK3bDefaults()
 {
   m_writingModeWidget->setWritingMode( K3b::WRITING_MODE_AUTO );
@@ -470,4 +473,10 @@
   slotToggleAll();
 }
 
+
+void K3bCdCopyDialog::slotDeviceManagerChanged( K3bDevice::DeviceManager* dm )
+{
+  m_comboSourceDevice->refreshDevices( dm->cdReader() );
+}
+
 #include "k3bcdcopydialog.moc"
--- trunk/extragear/multimedia/k3b/src/misc/k3bcdcopydialog.h #435852:435853
@@ -23,6 +23,7 @@
 
 namespace K3bDevice {
   class Device;
+  class DeviceManager;
 }
 
 class K3bWriterSelectionWidget;
@@ -53,6 +54,8 @@
 
   void slotToggleAll();
 
+  void slotDeviceManagerChanged( K3bDevice::DeviceManager* dm );
+
  protected:
   void init();
 
--- trunk/extragear/multimedia/k3b/src/misc/k3bdvdcopydialog.cpp #435852:435853
@@ -191,6 +191,8 @@
   connect( m_checkOnlyCreateImage, SIGNAL(toggled(bool)), this, \
SLOT(slotToggleAll()) );  connect( m_writingModeWidget, \
SIGNAL(writingModeChanged(int)), this, SLOT(slotToggleAll()) );  
+  connect( k3bcore->deviceManager(), SIGNAL(changed(K3bDevice::DeviceManager*)),
+	   this, SLOT(slotDeviceManagerChanged(K3bDevice::DeviceManager*)) );
 
   QToolTip::add( m_checkIgnoreReadErrors, i18n("Skip unreadable sectors") );
   QWhatsThis::add( m_checkIgnoreReadErrors, i18n("<p>If this option is checked and \
K3b is not able to read a sector from the " @@ -366,4 +368,9 @@
 }
 
 
+void K3bDvdCopyDialog::slotDeviceManagerChanged( K3bDevice::DeviceManager* dm )
+{
+  m_comboSourceDevice->refreshDevices( dm->cdReader() );
+}
+
 #include "k3bdvdcopydialog.moc"
--- trunk/extragear/multimedia/k3b/src/misc/k3bdvdcopydialog.h #435852:435853
@@ -19,6 +19,11 @@
 
 #include <k3binteractiondialog.h>
 
+namespace K3bDevice {
+  class Device;
+  class DeviceManager;
+}
+
 class K3bTempDirSelectionWidget;
 class K3bWriterSelectionWidget;
 class K3bDeviceComboBox;
@@ -38,6 +43,7 @@
  private slots:
   void slotStartClicked();
   void slotToggleAll();
+  void slotDeviceManagerChanged( K3bDevice::DeviceManager* dm );
 
  protected:
   void init();


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic