Author: pollux
Date: 2006-08-10 13:14:41 +0000 (Thu, 10 Aug 2006)
New Revision: 22704

Added:
   xfburn/trunk/xfburn/xfburn-device-box.c
   xfburn/trunk/xfburn/xfburn-device-box.h
Modified:
   xfburn/trunk/xfburn/Makefile.am
   xfburn/trunk/xfburn/xfburn-blank-cd-dialog.c
   xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c
   xfburn/trunk/xfburn/xfburn-burn-image-dialog.c
   xfburn/trunk/xfburn/xfburn-copy-cd-dialog.c
Log:
Add the XfburnDeviceBox class and use it in the burning dialogs



Modified: xfburn/trunk/xfburn/Makefile.am
===================================================================
--- xfburn/trunk/xfburn/Makefile.am     2006-08-10 13:01:08 UTC (rev 22703)
+++ xfburn/trunk/xfburn/Makefile.am     2006-08-10 13:14:41 UTC (rev 22704)
@@ -24,6 +24,7 @@
        xfburn-copy-cd-progress-dialog.h                                \
        xfburn-create-iso-progress-dialog.h                             \
        xfburn-create-iso-from-composition-progress-dialog.h            \
+       xfburn-device-box.h                                             \
        xfburn-progress-dialog.h                                        \
        xfburn-main-window.h                                            \
        xfburn-notebook-tab.h                                           \
@@ -53,6 +54,7 @@
        xfburn-settings.c                                               \
        xfburn-copy-cd-dialog.c                                         \
        xfburn-copy-cd-progress-dialog.c                                \
+       xfburn-device-box.c                                             \
        xfburn-progress-dialog.c                                        \
        xfburn-main.c                                                   \
        xfburn-main-window.c                                            \

Modified: xfburn/trunk/xfburn/xfburn-blank-cd-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-blank-cd-dialog.c        2006-08-10 13:01:08 UTC 
(rev 22703)
+++ xfburn/trunk/xfburn/xfburn-blank-cd-dialog.c        2006-08-10 13:14:41 UTC 
(rev 22704)
@@ -24,6 +24,7 @@
 #include "xfburn-global.h"
 #include "xfburn-utils.h"
 #include "xfburn-blank-cd-progress-dialog.h"
+#include "xfburn-device-box.h"
 #include "xfburn-stock.h"
 
 #include "xfburn-blank-cd-dialog.h"
@@ -37,9 +38,9 @@
 
 struct XfburnBlankCdDialogPrivate
 {
-  GtkWidget *combo_device;
+  GtkWidget *device_box;
   GtkWidget *combo_type;
-  GtkWidget *combo_speed;
+  
   GtkWidget *check_force;
   GtkWidget *check_eject;
 };
@@ -85,15 +86,10 @@
 {
   GtkBox *box = GTK_BOX (GTK_DIALOG (obj)->vbox);
   XfburnBlankCdDialogPrivate *priv;
-  GList *device;
-  GtkWidget *img;
   GdkPixbuf *icon = NULL;
   GtkWidget *frame;
   GtkWidget *vbox;
-  GtkWidget *hbox;
-  GtkWidget *label;
   GtkWidget *button;
-  int i;
 
   obj->priv = g_new0 (XfburnBlankCdDialogPrivate, 1);
 
@@ -105,58 +101,15 @@
   icon = gtk_widget_render_icon (GTK_WIDGET (obj), XFBURN_STOCK_BLANK_CDRW, 
GTK_ICON_SIZE_DIALOG, NULL);
   gtk_window_set_icon (GTK_WINDOW (obj), icon);
   g_object_unref (icon);
-  
-  vbox = gtk_vbox_new (FALSE, 0);
-  gtk_widget_show (vbox);
 
-  frame = xfce_create_framebox_with_content (_("Burning device"), vbox);
+  /* devices list */
+  priv->device_box = xfburn_device_box_new (TRUE, TRUE);
+  gtk_widget_show (priv->device_box);
+
+  frame = xfce_create_framebox_with_content (_("Burning device"), 
priv->device_box);
   gtk_widget_show (frame);
   gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER);
 
-  /* devices list */
-  priv->combo_device = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_device);
-  gtk_box_pack_start (GTK_BOX (vbox), priv->combo_device, FALSE, FALSE, 
BORDER);
-
-  device = list_devices;
-  while (device) {
-    XfburnDevice *device_data = (XfburnDevice *) device->data;
-
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_device), 
device_data->name);
-
-    device = g_list_next (device);
-  }
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_device), 0);
-
-  /* speed */
-  hbox = gtk_hbox_new (FALSE, 0);
-  gtk_widget_show (hbox);
-  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, BORDER);
-
-  label = gtk_label_new_with_mnemonic (_("_Speed :"));
-  gtk_widget_show (label);
-  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, BORDER);
-
-  priv->combo_speed = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_speed);
-  gtk_box_pack_start (GTK_BOX (hbox), priv->combo_speed, TRUE, TRUE, BORDER);
-
-  for (i = 2; i <= 24; i += 2) {
-    gchar *str;
-
-    str = g_strdup_printf ("%d", i);
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_speed), str);
-    g_free (str);
-  }
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_speed), 4);
-
-  img = gtk_image_new_from_stock (GTK_STOCK_REFRESH, 
GTK_ICON_SIZE_SMALL_TOOLBAR);
-  gtk_widget_show (img);
-  button = gtk_button_new ();
-  gtk_container_add (GTK_CONTAINER (button), img);
-  gtk_widget_show (button);
-  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
-
   /* blank type */
   priv->combo_type = gtk_combo_box_new_text ();
   gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_type), _("Fast"));
@@ -219,15 +172,13 @@
     XfburnBlankCdDialogPrivate *priv;
     gchar *command;
     XfburnDevice *device;
-    gchar *device_name, *blank_type, *speed;
+    gchar *blank_type, *speed;
     
     priv = dialog->priv;
 
-    device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_device));
-    device = xfburn_device_lookup_by_name (device_name);
+    device = xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX 
(priv->device_box));
+    speed = xfburn_device_box_get_speed (XFBURN_DEVICE_BOX (priv->device_box));
 
-    speed = gtk_combo_box_get_active_text (GTK_COMBO_BOX (priv->combo_speed));
-
     switch (gtk_combo_box_get_active (GTK_COMBO_BOX (priv->combo_type))) {
     case 0:
       blank_type = g_strdup ("fast");
@@ -249,7 +200,6 @@
                         gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_eject)) ? " -eject" : "",
                         gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_force)) ? " -force" : "", NULL);
     
-    g_free (device_name);
     g_free (blank_type);
     g_free (speed);
     

Modified: xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c   2006-08-10 
13:01:08 UTC (rev 22703)
+++ xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c   2006-08-10 
13:14:41 UTC (rev 22704)
@@ -26,6 +26,7 @@
 #include "xfburn-settings.h"
 #include "xfburn-burn-data-composition-progress-dialog.h"
 #include "xfburn-create-iso-from-composition-progress-dialog.h"
+#include "xfburn-device-box.h"
 #include "xfburn-write-mode-combo-box.h"
 
 #include "xfburn-burn-data-composition-dialog.h"
@@ -47,8 +48,7 @@
   gchar *command_burn;
 
   GtkWidget *frame_device;
-  GtkWidget *combo_device;
-  GtkWidget *combo_speed;
+  GtkWidget *device_box;
   GtkWidget *combo_mode;
 
   GtkWidget *check_eject;
@@ -104,7 +104,6 @@
 {
   XfburnBurnDataCompositionDialogPrivate *priv;
   GtkBox *box = GTK_BOX (GTK_DIALOG (obj)->vbox);
-  GList *device;
   GtkWidget *img;
   GtkWidget *frame;
   GtkWidget *vbox;
@@ -112,7 +111,6 @@
   GtkWidget *align;
   GtkWidget *label;
   GtkWidget *button;
-  int i;
   gchar *default_path;
   gchar *tmp_dir;
 
@@ -127,60 +125,17 @@
   gtk_window_set_icon_name (GTK_WINDOW (obj), GTK_STOCK_CDROM);
 
   /* burning devices list */
-  vbox = gtk_vbox_new (FALSE, 0);
-  gtk_widget_show (vbox);
+  priv->device_box = xfburn_device_box_new (TRUE, TRUE);
+  gtk_widget_show (priv->device_box);
 
-  priv->frame_device = xfce_create_framebox_with_content (_("Burning device"), 
vbox);
+  priv->frame_device = xfce_create_framebox_with_content (_("Burning device"), 
priv->device_box);
   gtk_widget_show (priv->frame_device);
   gtk_box_pack_start (box, priv->frame_device, FALSE, FALSE, BORDER);
-    
-  priv->combo_device = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_device);
-  gtk_box_pack_start (GTK_BOX (vbox), priv->combo_device, FALSE, FALSE, 
BORDER);
 
-  device = list_devices;
-  while (device) {
-    XfburnDevice *device_data = (XfburnDevice *) device->data;
-
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_device), 
device_data->name);
-
-    device = g_list_next (device);
-  }
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_device), 0);
-
-  /* speed */
-  hbox = gtk_hbox_new (FALSE, 0);
-  gtk_widget_show (hbox);
-  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, BORDER);
-
-  label = gtk_label_new_with_mnemonic (_("_Speed :"));
-  gtk_widget_show (label);
-  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, BORDER);
-
-  priv->combo_speed = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_speed);
-  gtk_box_pack_start (GTK_BOX (hbox), priv->combo_speed, TRUE, TRUE, BORDER);
-
-  for (i = 2; i <= 52; i += 2) {
-    gchar *str;
-
-    str = g_strdup_printf ("%d", i);
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_speed), str);
-    g_free (str);
-  }
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_speed), 19);
-
-  img = gtk_image_new_from_stock (GTK_STOCK_REFRESH, 
GTK_ICON_SIZE_SMALL_TOOLBAR);
-  gtk_widget_show (img);
-  button = gtk_button_new ();
-  gtk_container_add (GTK_CONTAINER (button), img);
-  gtk_widget_show (button);
-  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
-
   /* mode */
   hbox = gtk_hbox_new (FALSE, 0);
   gtk_widget_show (hbox);
-  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, BORDER);
+  gtk_box_pack_start (GTK_BOX (priv->device_box), hbox, FALSE, FALSE, BORDER);
 
   label = gtk_label_new_with_mnemonic (_("Write _mode :"));
   gtk_widget_show (label);
@@ -314,13 +269,10 @@
     else {
       gchar *speed = NULL;
       gchar *write_mode = NULL;
-      gchar *device_name = NULL;
       XfburnDevice *device;
       
-      device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_device));
-      device = xfburn_device_lookup_by_name (device_name);
-      
-      speed = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_speed));
+      device = xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX 
(priv->device_box));
+      speed = xfburn_device_box_get_speed (XFBURN_DEVICE_BOX 
(priv->device_box));
 
       write_mode = xfburn_write_mode_combo_box_get_cdrecord_param 
(XFBURN_WRITE_MODE_COMBO_BOX (priv->combo_mode));
 
@@ -331,7 +283,6 @@
                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_dummy)) ? " -dummy" : "",
                              gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_burnfree)) ? " driveropts=burnfree" : "",
                              " - \"", NULL);
-      g_free (device_name);
       g_free (speed);
       g_free (write_mode);
       

Modified: xfburn/trunk/xfburn/xfburn-burn-image-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-burn-image-dialog.c      2006-08-10 13:01:08 UTC 
(rev 22703)
+++ xfburn/trunk/xfburn/xfburn-burn-image-dialog.c      2006-08-10 13:14:41 UTC 
(rev 22704)
@@ -26,6 +26,7 @@
 #include "xfburn-global.h"
 #include "xfburn-utils.h"
 #include "xfburn-burn-image-progress-dialog.h"
+#include "xfburn-device-box.h"
 #include "xfburn-stock.h"
 #include "xfburn-write-mode-combo-box.h"
 
@@ -41,8 +42,8 @@
 struct XfburnBurnImageDialogPrivate
 {
   GtkWidget *chooser_image;
-
-  GtkWidget *combo_device;
+  
+  GtkWidget *device_box;
   GtkWidget *combo_speed;
   GtkWidget *combo_mode;
 
@@ -92,15 +93,12 @@
 {
   GtkBox *box = GTK_BOX (GTK_DIALOG (obj)->vbox);
   XfburnBurnImageDialogPrivate *priv;
-  GList *device;
-  GtkWidget *img;
   GdkPixbuf *icon = NULL;
   GtkWidget *frame;
   GtkWidget *vbox;
   GtkWidget *hbox;
   GtkWidget *label;
   GtkWidget *button;
-  int i;
 
   obj->priv = g_new0 (XfburnBurnImageDialogPrivate, 1);
 
@@ -121,60 +119,17 @@
   gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER);
 
   /* devices list */
-  vbox = gtk_vbox_new (FALSE, 0);
-  gtk_widget_show (vbox);
-
-  frame = xfce_create_framebox_with_content (_("Burning device"), vbox);
+  priv->device_box = xfburn_device_box_new (TRUE, TRUE);
+  gtk_widget_show (priv->device_box);
+  
+  frame = xfce_create_framebox_with_content (_("Burning device"), 
priv->device_box);
   gtk_widget_show (frame);
   gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER);
 
-  priv->combo_device = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_device);
-  gtk_box_pack_start (GTK_BOX (vbox), priv->combo_device, FALSE, FALSE, 
BORDER);
-
-  device = list_devices;
-  while (device) {
-    XfburnDevice *device_data = (XfburnDevice *) device->data;
-
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_device), 
device_data->name);
-
-    device = g_list_next (device);
-  }
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_device), 0);
-
-  /* speed */
-  hbox = gtk_hbox_new (FALSE, 0);
-  gtk_widget_show (hbox);
-  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, BORDER);
-
-  label = gtk_label_new_with_mnemonic (_("_Speed :"));
-  gtk_widget_show (label);
-  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, BORDER);
-
-  priv->combo_speed = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_speed);
-  gtk_box_pack_start (GTK_BOX (hbox), priv->combo_speed, TRUE, TRUE, BORDER);
-
-  for (i = 2; i <= 52; i += 2) {
-    gchar *str;
-
-    str = g_strdup_printf ("%d", i);
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_speed), str);
-    g_free (str);
-  }
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_speed), 19);
-
-  img = gtk_image_new_from_stock (GTK_STOCK_REFRESH, 
GTK_ICON_SIZE_SMALL_TOOLBAR);
-  gtk_widget_show (img);
-  button = gtk_button_new ();
-  gtk_container_add (GTK_CONTAINER (button), img);
-  gtk_widget_show (button);
-  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
-
   /* mode */
   hbox = gtk_hbox_new (FALSE, 0);
   gtk_widget_show (hbox);
-  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, BORDER);
+  gtk_box_pack_start (GTK_BOX (priv->device_box), hbox, FALSE, FALSE, BORDER);
 
   label = gtk_label_new_with_mnemonic (_("Write _mode :"));
   gtk_widget_show (label);
@@ -238,7 +193,7 @@
   if (response_id == GTK_RESPONSE_OK) {
     XfburnBurnImageDialogPrivate *priv;
     XfburnDevice *device;
-    gchar *iso_path, *device_name, *speed, *write_mode;
+    gchar *iso_path, *speed, *write_mode;
     gchar *command;
     GtkWidget *dialog_progress;
     
@@ -246,8 +201,7 @@
 
     iso_path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER 
(priv->chooser_image));
 
-    device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_device));
-    device = xfburn_device_lookup_by_name (device_name);
+    device = xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX 
(priv->device_box));
 
     speed = gtk_combo_box_get_active_text (GTK_COMBO_BOX (priv->combo_speed));
 
@@ -258,7 +212,6 @@
                            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_dummy)) ? " -dummy" : "",
                            gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_burnfree)) ? " driveropts=burnfree"
                            : "", " '", iso_path, "'", NULL);
-    g_free (device_name);
     g_free (write_mode);
     g_free (speed);
     g_free (iso_path);

Modified: xfburn/trunk/xfburn/xfburn-copy-cd-dialog.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-copy-cd-dialog.c 2006-08-10 13:01:08 UTC (rev 
22703)
+++ xfburn/trunk/xfburn/xfburn-copy-cd-dialog.c 2006-08-10 13:14:41 UTC (rev 
22704)
@@ -30,6 +30,7 @@
 #include "xfburn-settings.h"
 #include "xfburn-copy-cd-progress-dialog.h"
 #include "xfburn-create-iso-progress-dialog.h"
+#include "xfburn-device-box.h"
 #include "xfburn-stock.h"
 
 #include "xfburn-copy-cd-dialog.h"
@@ -39,7 +40,7 @@
 static void xfburn_copy_cd_dialog_init (XfburnCopyCdDialog * sp);
 static void xfburn_copy_cd_dialog_finalize (GObject * object);
 
-static void cb_combo_device_changed (GtkComboBox *combo, 
XfburnCopyCdDialogPrivate *priv);
+static void cb_device_changed (XfburnDeviceBox *box, const gchar *device_name, 
XfburnCopyCdDialogPrivate *priv);
 static void cb_check_only_iso_toggled (GtkToggleButton * button, 
XfburnCopyCdDialog * dialog);
 static void cb_browse_iso (GtkButton * button, XfburnCopyCdDialog * dialog);
 static void cb_dialog_response (XfburnCopyCdDialog * dialog, gint response_id, 
XfburnCopyCdDialogPrivate * priv);
@@ -47,10 +48,9 @@
 /* structures */
 struct XfburnCopyCdDialogPrivate
 {
-  GtkWidget *combo_source_device;
+  GtkWidget *device_box_src;
   GtkWidget *frame_burn;
-  GtkWidget *combo_dest_device;
-  GtkWidget *combo_speed;
+  GtkWidget *device_box_dest;
 
   GtkWidget *check_eject;
   GtkWidget *check_onthefly;
@@ -102,17 +102,13 @@
 {
   XfburnCopyCdDialogPrivate *priv;
   GtkBox *box = GTK_BOX (GTK_DIALOG (obj)->vbox);
-  GList *device;
   GtkWidget *img;
   GdkPixbuf *icon = NULL;
   GtkWidget *frame;
   GtkWidget *vbox;
-  GtkWidget *hbox;
   GtkWidget *align;
-  GtkWidget *label;
   GtkWidget *button;
   gchar *default_path, *tmp_dir;
-  int i;
 
   obj->priv = g_new0 (XfburnCopyCdDialogPrivate, 1);
   priv = obj->priv;
@@ -124,60 +120,21 @@
   g_object_unref (icon);
 
   /* reader devices list */
-  vbox = gtk_vbox_new (FALSE, 0);
-  gtk_widget_show (vbox);
-
-  frame = xfce_create_framebox_with_content (_("CD Reader device"), vbox);
+  priv->device_box_src = xfburn_device_box_new (FALSE, FALSE);
+  gtk_widget_show (priv->device_box_src);
+  
+  frame = xfce_create_framebox_with_content (_("CD Reader device"), 
priv->device_box_src);
   gtk_widget_show (frame);
   gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER);
 
-  priv->combo_source_device = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_source_device);
-  gtk_box_pack_start (GTK_BOX (vbox), priv->combo_source_device, FALSE, FALSE, 
BORDER);
-  g_signal_connect (G_OBJECT (priv->combo_source_device), "changed", 
G_CALLBACK (cb_combo_device_changed), priv);
-
   /* burning devices list */
-  vbox = gtk_vbox_new (FALSE, 0);
-  gtk_widget_show (vbox);
+  priv->device_box_dest = xfburn_device_box_new (TRUE, TRUE);
+  gtk_widget_show (priv->device_box_dest);
 
-  priv->frame_burn = xfce_create_framebox_with_content (_("Burning device"), 
vbox);
+  priv->frame_burn = xfce_create_framebox_with_content (_("Burning device"), 
priv->device_box_dest);
   gtk_widget_show (priv->frame_burn);
   gtk_box_pack_start (box, priv->frame_burn, FALSE, FALSE, BORDER);
-
-  priv->combo_dest_device = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_dest_device);
-  gtk_box_pack_start (GTK_BOX (vbox), priv->combo_dest_device, FALSE, FALSE, 
BORDER);
-  g_signal_connect (G_OBJECT (priv->combo_dest_device), "changed", G_CALLBACK 
(cb_combo_device_changed), priv);
-  
-  /* speed */
-  hbox = gtk_hbox_new (FALSE, 0);
-  gtk_widget_show (hbox);
-  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, BORDER);
-
-  label = gtk_label_new_with_mnemonic (_("_Speed :"));
-  gtk_widget_show (label);
-  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, BORDER);
-
-  priv->combo_speed = gtk_combo_box_new_text ();
-  gtk_widget_show (priv->combo_speed);
-  gtk_box_pack_start (GTK_BOX (hbox), priv->combo_speed, TRUE, TRUE, BORDER);
-
-  for (i = 2; i <= 52; i += 2) {
-    gchar *str;
-
-    str = g_strdup_printf ("%d", i);
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_speed), str);
-    g_free (str);
-  }
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_speed), 19);
-
-  img = gtk_image_new_from_stock (GTK_STOCK_REFRESH, 
GTK_ICON_SIZE_SMALL_TOOLBAR);
-  gtk_widget_show (img);
-  button = gtk_button_new ();
-  gtk_container_add (GTK_CONTAINER (button), img);
-  gtk_widget_show (button);
-  gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
-  
+    
   /* options */
   vbox = gtk_vbox_new (FALSE, 0);
   gtk_widget_show (vbox);
@@ -243,20 +200,13 @@
   gtk_widget_grab_focus (button);
   gtk_widget_grab_default (button);
 
-  g_signal_connect (G_OBJECT (obj), "response", G_CALLBACK 
(cb_dialog_response), priv);
+  g_signal_connect (G_OBJECT (priv->device_box_src), "device-changed", 
G_CALLBACK (cb_device_changed), priv);
+  g_signal_connect (G_OBJECT (priv->device_box_dest), "device-changed", 
G_CALLBACK (cb_device_changed), priv);
   
-  /* load devices in combos */
-  device = list_devices;
-  while (device) {
-    XfburnDevice *device_data = (XfburnDevice *) device->data;
-
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_source_device), 
device_data->name);
-    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_dest_device), 
device_data->name);
-    device = g_list_next (device);
-  }
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_source_device), 0);
-  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_dest_device), 0);
-
+  /* check if the selected devices are the same */
+  cb_device_changed (XFBURN_DEVICE_BOX (priv->device_box_dest), NULL, priv);
+  
+  g_signal_connect (G_OBJECT (obj), "response", G_CALLBACK 
(cb_dialog_response), priv);
 }
 
 static void
@@ -286,18 +236,21 @@
 }
 
 static void
-cb_combo_device_changed (GtkComboBox *combo, XfburnCopyCdDialogPrivate *priv)
+cb_device_changed (XfburnDeviceBox *box, const gchar *device_name, 
XfburnCopyCdDialogPrivate *priv)
 {
-  gchar *source_device_name, *dest_device_name;
+  gchar *source_device_name = NULL, *dest_device_name = NULL;
   
-  source_device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_source_device));
-  dest_device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_dest_device));
+  source_device_name = xfburn_device_box_get_selected (XFBURN_DEVICE_BOX 
(priv->device_box_src));
+  dest_device_name = xfburn_device_box_get_selected (XFBURN_DEVICE_BOX 
(priv->device_box_dest));
   
   if (source_device_name && dest_device_name && !strcmp (source_device_name, 
dest_device_name)) {
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_onthefly), 
FALSE);
     gtk_widget_set_sensitive (priv->check_onthefly, FALSE);
   } else
     gtk_widget_set_sensitive (priv->check_onthefly, TRUE);
+  
+  g_free (source_device_name);
+  g_free (dest_device_name);
 }
 
 static void
@@ -310,14 +263,12 @@
 cb_dialog_response (XfburnCopyCdDialog * dialog, gint response_id, 
XfburnCopyCdDialogPrivate * priv)
 {
   if (response_id == GTK_RESPONSE_OK) {
-    gchar *source_device_name;
     gchar *command;
     XfburnDevice *device_burn;
     XfburnDevice *device_read;
     GtkWidget *dialog_progress = NULL;
   
-    source_device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_source_device));
-    device_read = xfburn_device_lookup_by_name (source_device_name);
+    device_read = xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX 
(priv->device_box_src));
         
     if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(priv->check_only_iso))) {
       command = g_strconcat ("readcd dev=", device_read->node_path, " f=", 
@@ -325,12 +276,11 @@
       
       dialog_progress = xfburn_create_iso_progress_dialog_new ();
     } else {
-      gchar *dest_device_name, *speed;
+      gchar *speed;
       gchar *source_device = NULL;
       
-      dest_device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_dest_device));
-      device_burn = xfburn_device_lookup_by_name (dest_device_name);
-      speed = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_speed));
+      device_burn = xfburn_device_box_get_selected_device (XFBURN_DEVICE_BOX 
(priv->device_box_dest));
+      speed = xfburn_device_box_get_speed (XFBURN_DEVICE_BOX 
(priv->device_box_dest));
       
       if (device_burn != device_read)
         source_device = g_strconcat (" --source-device ", 
device_read->node_path, NULL);
@@ -345,7 +295,6 @@
                              " --datafile /tmp/xfburn.bin", NULL);
       g_free (source_device);
       g_free (speed);
-      g_free (dest_device_name);
       
       dialog_progress = xfburn_copy_cd_progress_dialog_new ();
     }
@@ -356,7 +305,6 @@
     g_object_set_data (G_OBJECT (dialog_progress), "command", command);
     gtk_dialog_run (GTK_DIALOG (dialog_progress));
    
-    g_free (source_device_name);
     g_free (command);
   }
 }

Added: xfburn/trunk/xfburn/xfburn-device-box.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-box.c                             (rev 0)
+++ xfburn/trunk/xfburn/xfburn-device-box.c     2006-08-10 13:14:41 UTC (rev 
22704)
@@ -0,0 +1,280 @@
+/* $Id$ */
+/*
+ * Copyright (c) 2006 Jean-François Wauthy ([EMAIL PROTECTED])
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Library General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /* !HAVE_CONFIG_H */
+
+#include <gtk/gtk.h>
+#include <libxfce4util/libxfce4util.h>
+
+#include "xfburn-utils.h"
+
+#include "xfburn-device-box.h"
+
+#define XFBURN_DEVICE_BOX_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE 
((obj), XFBURN_TYPE_DEVICE_BOX, XfburnDeviceBoxPrivate))
+
+enum {
+  DEVICE_CHANGED,
+  LAST_SIGNAL,
+};
+
+enum {
+  PROP_0,
+  PROP_SHOW_WRITERS_ONLY,
+  PROP_SHOW_SPEED_SELECTION,
+};
+
+/* private struct */
+typedef struct
+{
+  gboolean show_writers_only;
+  gboolean show_speed_selection;
+  
+  GtkWidget *combo_device;
+  
+  GtkWidget *hbox_speed_selection;
+  GtkWidget *combo_speed;
+} XfburnDeviceBoxPrivate;
+
+/* prototypes */
+static void xfburn_device_box_class_init (XfburnDeviceBoxClass *);
+static void xfburn_device_box_init (XfburnDeviceBox *);
+static void xfburn_device_box_get_property (GObject *object, guint prop_id, 
GValue *value, GParamSpec *pspec);
+static void xfburn_device_box_set_property (GObject *object, guint prop_id, 
const GValue *value, GParamSpec *pspec);
+
+static void cb_combo_device_changed (GtkComboBox *combo, XfburnDeviceBox *box);
+
+/* globals */
+static GtkVBoxClass *parent_class = NULL;
+
+/*************************/
+/* XfburnDeviceBox class */
+/*************************/
+static guint signals[LAST_SIGNAL];
+
+GtkType
+xfburn_device_box_get_type (void)
+{
+  static GtkType device_box_type = 0;
+
+  if (!device_box_type)
+    {
+      static const GTypeInfo device_box_info = {
+        sizeof (XfburnDeviceBoxClass),
+        NULL,
+        NULL,
+        (GClassInitFunc) xfburn_device_box_class_init,
+        NULL,
+        NULL,
+        sizeof (XfburnDeviceBox),
+        0,
+        (GInstanceInitFunc) xfburn_device_box_init
+      };
+
+      device_box_type = g_type_register_static (GTK_TYPE_VBOX, 
"XfburnDeviceBox", &device_box_info, 0);
+    }
+
+  return device_box_type;
+}
+
+static void
+xfburn_device_box_class_init (XfburnDeviceBoxClass * klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  
+  g_type_class_add_private (klass, sizeof (XfburnDeviceBoxPrivate));
+
+  parent_class = g_type_class_peek_parent (klass);
+  
+  object_class->set_property = xfburn_device_box_set_property;
+  object_class->get_property = xfburn_device_box_get_property;
+  
+  signals[DEVICE_CHANGED] = g_signal_new ("device-changed", 
XFBURN_TYPE_DEVICE_BOX, G_SIGNAL_ACTION,
+                                          G_STRUCT_OFFSET 
(XfburnDeviceBoxClass, device_changed),
+                                          NULL, NULL, 
g_cclosure_marshal_VOID__STRING,
+                                          G_TYPE_NONE, 1, G_TYPE_STRING);
+    
+  g_object_class_install_property (object_class, PROP_SHOW_WRITERS_ONLY, 
+                                   g_param_spec_boolean ("show-writers-only", 
_("Show writers only"),
+                                                        _("Show writers 
only"), FALSE, G_PARAM_READWRITE));
+  g_object_class_install_property (object_class, PROP_SHOW_SPEED_SELECTION, 
+                                   g_param_spec_boolean 
("show-speed-selection", _("Show speed selection"),
+                                                        _("Show speed 
selection list and refresh button"), 
+                                                        FALSE, 
G_PARAM_READWRITE));
+}
+
+static void
+xfburn_device_box_init (XfburnDeviceBox * box)
+{
+  XfburnDeviceBoxPrivate *priv = XFBURN_DEVICE_BOX_GET_PRIVATE (box);
+  
+  GtkWidget *label, *img, *button;
+  GList *device = NULL;
+  gint i;
+  
+  /* devices */
+  priv->combo_device = gtk_combo_box_new_text ();
+  gtk_widget_show (priv->combo_device);
+  gtk_box_pack_start (GTK_BOX (box), priv->combo_device, FALSE, FALSE, BORDER);
+
+  device = list_devices;
+  while (device) {
+    XfburnDevice *device_data = (XfburnDevice *) device->data;
+
+    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_device), 
device_data->name);
+
+    device = g_list_next (device);
+  }
+  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_device), 0);
+  
+  g_signal_connect (G_OBJECT (priv->combo_device), "changed", G_CALLBACK 
(cb_combo_device_changed), box);
+  
+  /* speed */
+  priv->hbox_speed_selection = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (priv->hbox_speed_selection);
+  gtk_box_pack_start (GTK_BOX (box), priv->hbox_speed_selection, FALSE, FALSE, 
BORDER);
+
+  label = gtk_label_new_with_mnemonic (_("_Speed :"));
+  gtk_widget_show (label);
+  gtk_box_pack_start (GTK_BOX (priv->hbox_speed_selection), label, FALSE, 
FALSE, BORDER);
+
+  priv->combo_speed = gtk_combo_box_new_text ();
+  gtk_widget_show (priv->combo_speed);
+  gtk_box_pack_start (GTK_BOX (priv->hbox_speed_selection), priv->combo_speed, 
TRUE, TRUE, BORDER);
+
+  for (i = 2; i <= 52; i += 2) {
+    gchar *str = NULL;
+
+    str = g_strdup_printf ("%d", i);
+    gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_speed), str);
+    g_free (str);
+  }
+  gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_speed), 19);
+
+  img = gtk_image_new_from_stock (GTK_STOCK_REFRESH, 
GTK_ICON_SIZE_SMALL_TOOLBAR);
+  gtk_widget_show (img);
+  button = gtk_button_new ();
+  gtk_container_add (GTK_CONTAINER (button), img);
+  gtk_widget_show (button);
+  gtk_box_pack_start (GTK_BOX (priv->hbox_speed_selection), button, FALSE, 
FALSE, 0);
+}
+
+static void
+xfburn_device_box_get_property (GObject *object, guint prop_id, GValue *value, 
GParamSpec *pspec)
+{
+  XfburnDeviceBoxPrivate *priv = XFBURN_DEVICE_BOX_GET_PRIVATE (object);
+
+  switch (prop_id) {
+    case PROP_SHOW_WRITERS_ONLY:
+      g_value_set_boolean (value, priv->show_writers_only);
+      break;
+    case PROP_SHOW_SPEED_SELECTION:
+      g_value_set_boolean (value, priv->show_speed_selection);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+static void
+xfburn_device_box_set_property (GObject *object, guint prop_id, const GValue 
*value, GParamSpec *pspec)
+{
+  XfburnDeviceBoxPrivate *priv = XFBURN_DEVICE_BOX_GET_PRIVATE (object);
+  
+  switch (prop_id) {
+    case PROP_SHOW_WRITERS_ONLY:
+      priv->show_writers_only = g_value_get_boolean (value);
+      break;
+    case PROP_SHOW_SPEED_SELECTION:
+      priv->show_speed_selection = g_value_get_boolean (value);
+      if (priv->show_speed_selection)
+        gtk_widget_show (priv->hbox_speed_selection);
+      else
+        gtk_widget_hide (priv->hbox_speed_selection);
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+  }
+}
+
+/*************/
+/* internals */
+/*************/
+static void
+cb_combo_device_changed (GtkComboBox *combo, XfburnDeviceBox *box)
+{
+  gchar *device_name = NULL;
+  
+  gtk_combo_box_get_active_text (combo);
+  
+  g_signal_emit (G_OBJECT (box), signals[DEVICE_CHANGED], 0, device_name);
+  
+  g_free (device_name);
+}
+
+/******************/
+/* public methods */
+/******************/
+GtkWidget *
+xfburn_device_box_new (gboolean show_writers_only, gboolean 
show_speed_selection)
+{
+  GtkWidget *obj;
+
+  obj = g_object_new (xfburn_device_box_get_type (), "show-writers-only", 
show_writers_only, 
+                      "show-speed-selection", show_speed_selection, NULL);
+
+  return obj;
+}
+
+gchar *
+xfburn_device_box_get_selected (XfburnDeviceBox *box)
+{
+  XfburnDeviceBoxPrivate *priv = XFBURN_DEVICE_BOX_GET_PRIVATE (box);
+  
+  return gtk_combo_box_get_active_text (GTK_COMBO_BOX (priv->combo_device));
+}
+
+XfburnDevice *
+xfburn_device_box_get_selected_device (XfburnDeviceBox *box)
+{
+  XfburnDeviceBoxPrivate *priv = XFBURN_DEVICE_BOX_GET_PRIVATE (box);
+  gchar *device_name = NULL;
+  XfburnDevice * device = NULL;
+  
+  device_name = gtk_combo_box_get_active_text (GTK_COMBO_BOX 
(priv->combo_device));
+  device = xfburn_device_lookup_by_name (device_name);
+  g_free (device_name);
+  
+  return device;
+}
+
+gchar *
+xfburn_device_box_get_speed (XfburnDeviceBox *box)
+{
+  XfburnDeviceBoxPrivate *priv = XFBURN_DEVICE_BOX_GET_PRIVATE (box);
+  
+  g_return_val_if_fail (priv->show_speed_selection == TRUE, NULL);
+  if (priv->show_speed_selection)
+    return gtk_combo_box_get_active_text (GTK_COMBO_BOX (priv->combo_speed));
+  else
+    return NULL;
+}


Property changes on: xfburn/trunk/xfburn/xfburn-device-box.c
___________________________________________________________________
Name: svn:keywords
   + Id

Added: xfburn/trunk/xfburn/xfburn-device-box.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-device-box.h                             (rev 0)
+++ xfburn/trunk/xfburn/xfburn-device-box.h     2006-08-10 13:14:41 UTC (rev 
22704)
@@ -0,0 +1,61 @@
+/* $Id$ */
+/*
+ * Copyright (c) 2006 Jean-François Wauthy ([EMAIL PROTECTED])
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Library General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __XFBURN_DEVICE_BOX_H__
+#define __XFBURN_DEVICE_BOX_H__
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+#include "xfburn-global.h"
+
+G_BEGIN_DECLS
+#define XFBURN_TYPE_DEVICE_BOX            (xfburn_device_box_get_type ())
+#define XFBURN_DEVICE_BOX(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), 
XFBURN_TYPE_DEVICE_BOX, XfburnDeviceBox))
+#define XFBURN_DEVICE_BOX_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), 
XFBURN_TYPE_DEVICE_BOX, XfburnDeviceBoxClass))
+#define XFBURN_IS_DEVICE_BOX(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), 
XFBURN_TYPE_DEVICE_BOX))
+#define XFBURN_IS_DEVICE_BOX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), 
XFBURN_TYPE_DEVICE_BOX))
+#define XFBURN_DEVICE_BOX_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), 
XFBURN_TYPE_DEVICE_BOX, XfburnDeviceBoxClass))
+
+typedef struct
+{
+  GtkVBox window;
+} XfburnDeviceBox;
+
+typedef struct
+{
+  GtkVBoxClass parent_class;
+  
+  void (*device_changed) (XfburnDeviceBox *box, const gchar *selected_device);
+} XfburnDeviceBoxClass;
+
+GtkType xfburn_device_box_get_type (void);
+
+GtkWidget *xfburn_device_box_new (gboolean show_writers_only, gboolean 
show_speed_selection);
+
+gchar *xfburn_device_box_get_selected (XfburnDeviceBox *box);
+XfburnDevice *xfburn_device_box_get_selected_device (XfburnDeviceBox *box);
+
+gchar *xfburn_device_box_get_speed (XfburnDeviceBox *box);
+
+G_END_DECLS
+#endif


Property changes on: xfburn/trunk/xfburn/xfburn-device-box.h
___________________________________________________________________
Name: svn:keywords
   + Id

_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to