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