Author: pollux Date: 2006-07-30 12:09:37 +0000 (Sun, 30 Jul 2006) New Revision: 22563
Added: xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.h xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.c xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.h Removed: xfburn/trunk/xfburn/xfburn-burn-composition-dialog.c xfburn/trunk/xfburn/xfburn-burn-composition-dialog.h xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.c xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.h Modified: xfburn/trunk/xfburn/Makefile.am xfburn/trunk/xfburn/xfburn-data-composition.c xfburn/trunk/xfburn/xfburn-main.c Log: * rename XfburnBurnCompositionDialog and XfburnBurnCompositionProgressDialog into XfburnBurnDataCompositionDialog and XfburnBurnDataCompositionProgressDialog (gosh it's long) * the generated filelist is now mkisofs compliant Modified: xfburn/trunk/xfburn/Makefile.am =================================================================== --- xfburn/trunk/xfburn/Makefile.am 2006-07-30 08:31:55 UTC (rev 22562) +++ xfburn/trunk/xfburn/Makefile.am 2006-07-30 12:09:37 UTC (rev 22563) @@ -12,8 +12,8 @@ xfburn-adding-progress.h \ xfburn-blank-cd-dialog.h \ xfburn-blank-cd-progress-dialog.h \ - xfburn-burn-composition-dialog.h \ - xfburn-burn-composition-progress-dialog.h \ + xfburn-burn-data-composition-dialog.h \ + xfburn-burn-data-composition-progress-dialog.h \ xfburn-burn-image-dialog.h \ xfburn-burn-image-progress-dialog.h \ xfburn-settings.h \ @@ -40,8 +40,8 @@ xfburn-adding-progress.c \ xfburn-blank-cd-dialog.c \ xfburn-blank-cd-progress-dialog.c \ - xfburn-burn-composition-dialog.c \ - xfburn-burn-composition-progress-dialog.c \ + xfburn-burn-data-composition-dialog.c \ + xfburn-burn-data-composition-progress-dialog.c \ xfburn-burn-image-dialog.c \ xfburn-burn-image-progress-dialog.c \ xfburn-composition.c \ Deleted: xfburn/trunk/xfburn/xfburn-burn-composition-dialog.c Deleted: xfburn/trunk/xfburn/xfburn-burn-composition-dialog.h Deleted: xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.c Deleted: xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.h Copied: xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c (from rev 22560, xfburn/trunk/xfburn/xfburn-burn-composition-dialog.c) =================================================================== --- xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c (rev 0) +++ xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.c 2006-07-30 12:09:37 UTC (rev 22563) @@ -0,0 +1,383 @@ +/* $Id$ */ +/* + * Copyright (c) 2005-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 "xfburn-global.h" +#include "xfburn-utils.h" +#include "xfburn-settings.h" +#include "xfburn-burn-data-composition-progress-dialog.h" +#include "xfburn-create-iso-from-composition-progress-dialog.h" + +#include "xfburn-burn-data-composition-dialog.h" + +/* prototypes */ +static void xfburn_burn_data_composition_dialog_class_init (XfburnBurnDataCompositionDialogClass * klass); +static void xfburn_burn_data_composition_dialog_init (XfburnBurnDataCompositionDialog * obj); +static void xfburn_burn_data_composition_dialog_finalize (GObject * object); + +static void cb_check_only_iso_toggled (GtkToggleButton * button, XfburnBurnDataCompositionDialog * dialog); +static void cb_browse_iso (GtkButton * button, XfburnBurnDataCompositionDialog * dialog); +static void cb_dialog_response (XfburnBurnDataCompositionDialog * dialog, gint response_id, + XfburnBurnDataCompositionDialogPrivate * priv); + +/* structures */ +struct XfburnBurnDataCompositionDialogPrivate +{ + gchar *command_iso; + gchar *command_burn; + + GtkWidget *combo_device; + GtkWidget *combo_speed; + GtkWidget *combo_mode; + + GtkWidget *check_eject; + GtkWidget *check_burnfree; + GtkWidget *check_only_iso; + GtkWidget *hbox_iso; + GtkWidget *entry_path_iso; + GtkWidget *check_dummy; + + gchar *file_list; +}; + +/* globals */ +static XfceTitledDialogClass *parent_class = NULL; + +GtkType +xfburn_burn_data_composition_dialog_get_type () +{ + static GtkType type = 0; + + if (type == 0) { + static const GTypeInfo our_info = { + sizeof (XfburnBurnDataCompositionDialogClass), + NULL, + NULL, + (GClassInitFunc) xfburn_burn_data_composition_dialog_class_init, + NULL, + NULL, + sizeof (XfburnBurnDataCompositionDialog), + 0, + (GInstanceInitFunc) xfburn_burn_data_composition_dialog_init, + }; + + type = g_type_register_static (XFCE_TYPE_TITLED_DIALOG, "XfburnBurnDataCompositionDialog", &our_info, 0); + } + + return type; +} + +static void +xfburn_burn_data_composition_dialog_class_init (XfburnBurnDataCompositionDialogClass * klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + object_class->finalize = xfburn_burn_data_composition_dialog_finalize; + +} + +static void +xfburn_burn_data_composition_dialog_init (XfburnBurnDataCompositionDialog * obj) +{ + XfburnBurnDataCompositionDialogPrivate *priv; + GtkBox *box = GTK_BOX (GTK_DIALOG (obj)->vbox); + GList *device; + GtkWidget *img; + GtkWidget *frame; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *align; + GtkWidget *label; + GtkWidget *button; + int i; + gchar *default_path; + gchar *tmp_dir; + + obj->priv = g_new0 (XfburnBurnDataCompositionDialogPrivate, 1); + priv = obj->priv; + + priv->command_iso = NULL; + priv->command_burn = NULL; + + gtk_window_set_title (GTK_WINDOW (obj), _("Burn Composition")); + gtk_window_set_destroy_with_parent (GTK_WINDOW (obj), TRUE); + gtk_window_set_icon_name (GTK_WINDOW (obj), GTK_STOCK_CDROM); + + /* burning devices list */ + vbox = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox); + + frame = xfce_create_framebox_with_content (_("Burning device"), vbox); + 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); + + label = gtk_label_new_with_mnemonic (_("Write _mode :")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, BORDER); + + priv->combo_mode = gtk_combo_box_new_text (); + gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), _("default")); + gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), "tao"); + gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), "dao"); + gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), "raw96p"); + gtk_combo_box_append_text (GTK_COMBO_BOX (priv->combo_mode), "raw16"); + gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_mode), 0); + gtk_box_pack_start (GTK_BOX (hbox), priv->combo_mode, TRUE, TRUE, BORDER); + gtk_widget_show (priv->combo_mode); + + /* options */ + vbox = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox); + + frame = xfce_create_framebox_with_content (_("Options"), vbox); + gtk_widget_show (frame); + gtk_box_pack_start (box, frame, FALSE, FALSE, BORDER); + + priv->check_eject = gtk_check_button_new_with_mnemonic (_("E_ject disk")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_eject), TRUE); + gtk_widget_show (priv->check_eject); + gtk_box_pack_start (GTK_BOX (vbox), priv->check_eject, FALSE, FALSE, BORDER); + + priv->check_dummy = gtk_check_button_new_with_mnemonic (_("_Dummy write")); + gtk_widget_show (priv->check_dummy); + gtk_box_pack_start (GTK_BOX (vbox), priv->check_dummy, FALSE, FALSE, BORDER); + + priv->check_burnfree = gtk_check_button_new_with_mnemonic (_("Burn_Free")); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->check_burnfree), TRUE); + gtk_widget_show (priv->check_burnfree); + gtk_box_pack_start (GTK_BOX (vbox), priv->check_burnfree, FALSE, FALSE, BORDER); + + /* create ISO ? */ + priv->check_only_iso = gtk_check_button_new_with_mnemonic (_("Only create _ISO")); + gtk_widget_show (priv->check_only_iso); + gtk_box_pack_start (GTK_BOX (vbox), priv->check_only_iso, FALSE, FALSE, BORDER); + g_signal_connect (G_OBJECT (priv->check_only_iso), "toggled", G_CALLBACK (cb_check_only_iso_toggled), obj); + + align = gtk_alignment_new (0, 0, 0, 0); + gtk_alignment_set_padding (GTK_ALIGNMENT (align), 0, 0, BORDER * 4, 0); + gtk_widget_show (align); + gtk_box_pack_start (GTK_BOX (vbox), align, FALSE, FALSE, 0); + + priv->hbox_iso = gtk_hbox_new (FALSE, 0); + gtk_widget_show (priv->hbox_iso); + gtk_container_add (GTK_CONTAINER (align), priv->hbox_iso); + gtk_widget_set_sensitive (priv->hbox_iso, FALSE); + + priv->entry_path_iso = gtk_entry_new (); + tmp_dir = xfburn_settings_get_string ("temporary-dir", "/tmp"); + default_path = g_build_filename (tmp_dir, "xfburn.iso", NULL); + gtk_entry_set_text (GTK_ENTRY (priv->entry_path_iso), default_path); + g_free (default_path); + g_free (tmp_dir); + gtk_widget_show (priv->entry_path_iso); + gtk_box_pack_start (GTK_BOX (priv->hbox_iso), priv->entry_path_iso, FALSE, FALSE, 0); + + img = gtk_image_new_from_stock (GTK_STOCK_DIRECTORY, 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_iso), button, FALSE, FALSE, 0); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (cb_browse_iso), obj); + + /* action buttons */ + button = gtk_button_new_from_stock (GTK_STOCK_CANCEL); + gtk_widget_show (button); + gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_CANCEL); + + button = xfce_create_mixed_button (GTK_STOCK_CDROM, _("_Burn Composition")); + gtk_widget_show (button); + gtk_dialog_add_action_widget (GTK_DIALOG (obj), button, GTK_RESPONSE_OK); + GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); + gtk_widget_grab_focus (button); + gtk_widget_grab_default (button); + + g_signal_connect (G_OBJECT (obj), "response", G_CALLBACK (cb_dialog_response), priv); +} + +static void +xfburn_burn_data_composition_dialog_finalize (GObject * object) +{ + XfburnBurnDataCompositionDialog *cobj; + cobj = XFBURN_BURN_COMPOSITION_DIALOG (object); + + g_free (cobj->priv->file_list); + g_free (cobj->priv->command_iso); + g_free (cobj->priv->command_burn); + g_free (cobj->priv); + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +/* internals */ +static void +cb_check_only_iso_toggled (GtkToggleButton * button, XfburnBurnDataCompositionDialog * dialog) +{ + XfburnBurnDataCompositionDialogPrivate *priv = dialog->priv; + + gtk_widget_set_sensitive (priv->hbox_iso, gtk_toggle_button_get_active (button)); + gtk_widget_set_sensitive (priv->check_eject, !gtk_toggle_button_get_active (button)); + gtk_widget_set_sensitive (priv->check_burnfree, !gtk_toggle_button_get_active (button)); + gtk_widget_set_sensitive (priv->check_dummy, !gtk_toggle_button_get_active (button)); +} + +static void +cb_browse_iso (GtkButton * button, XfburnBurnDataCompositionDialog * dialog) +{ + xfburn_browse_for_file (GTK_ENTRY (dialog->priv->entry_path_iso), GTK_WINDOW (dialog)); +} + +static void +cb_dialog_response (XfburnBurnDataCompositionDialog * dialog, gint response_id, XfburnBurnDataCompositionDialogPrivate * priv) +{ + if (response_id == GTK_RESPONSE_OK) { + gchar *command = NULL; + GtkWidget *dialog_progress = NULL; + + if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->check_only_iso))) { + command = g_strconcat ("sh -c \"mkisofs -gui -graft-points -joliet -full-iso9660-filenames -iso-level 2 -path-list ", + priv->file_list, " > ", gtk_entry_get_text (GTK_ENTRY (priv->entry_path_iso)), "\"", NULL); + + dialog_progress = xfburn_create_iso_from_composition_progress_dialog_new (); + } + else { + gchar *speed; + gchar *write_mode; + gchar *device_name; + 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)); + + switch (gtk_combo_box_get_active (GTK_COMBO_BOX (priv->combo_mode))) { + case 2: + write_mode = g_strdup (" -dao"); + break; + case 3: + write_mode = g_strdup (" -raw96p"); + break; + case 4: + write_mode = g_strdup (" -raw16"); + break; + case 0: + case 1: + default: + write_mode = g_strdup (" -tao"); + } + + command = g_strconcat ("sh -c \"mkisofs -gui -graft-points -joliet -full-iso9660-filenames -iso-level 2 -path-list ", + priv->file_list, " | cdrecord -v gracetime=2", " dev=", device->node_path, write_mode, " speed=", speed, + gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->check_eject)) ? " -eject" : "", + 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); + dialog_progress = xfburn_burn_data_composition_progress_dialog_new (); + } + + gtk_window_set_transient_for (GTK_WINDOW (dialog_progress), gtk_window_get_transient_for (GTK_WINDOW (dialog))); + gtk_widget_hide (GTK_WIDGET (dialog)); + + g_object_set_data (G_OBJECT (dialog_progress), "command", command); + gtk_dialog_run (GTK_DIALOG (dialog_progress)); + + unlink (priv->file_list); + g_free (command); + } +} + +/* public */ +gchar * +xfburn_burn_data_composition_dialog_get_command_iso (XfburnBurnDataCompositionDialog * dialog) +{ + return g_strdup (dialog->priv->command_iso); +} + +gchar * +xfburn_burn_data_composition_dialog_get_command_burn (XfburnBurnDataCompositionDialog * dialog) +{ + return g_strdup (dialog->priv->command_burn); +} + +GtkWidget * +xfburn_burn_data_composition_dialog_new (const gchar * file_list) +{ + XfburnBurnDataCompositionDialog *obj; + + obj = XFBURN_BURN_COMPOSITION_DIALOG (g_object_new (XFBURN_TYPE_BURN_COMPOSITION_DIALOG, NULL)); + + obj->priv->file_list = g_strdup (file_list); + + return GTK_WIDGET (obj); +} Copied: xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.h (from rev 22560, xfburn/trunk/xfburn/xfburn-burn-composition-dialog.h) =================================================================== --- xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.h (rev 0) +++ xfburn/trunk/xfburn/xfburn-burn-data-composition-dialog.h 2006-07-30 12:09:37 UTC (rev 22563) @@ -0,0 +1,57 @@ +/* $Id$ */ +/* + * Copyright (c) 2005-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_BURN_COMPOSITION_DIALOG_H__ +#define __XFBURN_BURN_COMPOSITION_DIALOG_H__ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif /* !HAVE_CONFIG_H */ + +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +#define XFBURN_TYPE_BURN_COMPOSITION_DIALOG (xfburn_burn_data_composition_dialog_get_type ()) +#define XFBURN_BURN_COMPOSITION_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), XFBURN_TYPE_BURN_COMPOSITION_DIALOG, XfburnBurnDataCompositionDialog)) +#define XFBURN_BURN_COMPOSITION_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), XFBURN_TYPE_BURN_COMPOSITION_DIALOG, XfburnBurnDataCompositionDialogClass)) +#define XFBURN_IS_BURN_COMPOSITION_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), XFBURN_TYPE_BURN_COMPOSITION_DIALOG)) +#define XFBURN_IS_BURN_COMPOSITION_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), XFBURN_TYPE_BURN_COMPOSITION_DIALOG)) +#define XFBURN_BURN_COMPOSITION_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), XFBURN_TYPE_BURN_COMPOSITION_DIALOG, XfburnBurnDataCompositionDialogClass)) +typedef struct XfburnBurnDataCompositionDialogPrivate XfburnBurnDataCompositionDialogPrivate; + +typedef struct +{ + XfceTitledDialog parent; + XfburnBurnDataCompositionDialogPrivate *priv; +} XfburnBurnDataCompositionDialog; + +typedef struct +{ + XfceTitledDialogClass parent_class; +} XfburnBurnDataCompositionDialogClass; + +GtkType xfburn_burn_data_composition_dialog_get_type (); +GtkWidget *xfburn_burn_data_composition_dialog_new (const gchar *file_list); + +gchar *xfburn_burn_data_composition_dialog_get_command_iso (XfburnBurnDataCompositionDialog *dialog); +gchar *xfburn_burn_data_composition_dialog_get_command_burn (XfburnBurnDataCompositionDialog *dialog); + +G_END_DECLS +#endif /* XFBURN_BURN_COMPOSITION_DIALOG_H */ Copied: xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.c (from rev 22560, xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.c) =================================================================== --- xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.c (rev 0) +++ xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.c 2006-07-30 12:09:37 UTC (rev 22563) @@ -0,0 +1,108 @@ +/* $Id$ */ +/* + * Copyright (c) 2005-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 "xfburn-progress-dialog.h" + +#include "xfburn-burn-data-composition-progress-dialog.h" + +static void xfburn_burn_data_composition_progress_dialog_class_init (XfburnBurnDataCompositionProgressDialogClass * klass); +static void xfburn_burn_data_composition_progress_dialog_init (XfburnBurnDataCompositionProgressDialog * sp); +static void xfburn_burn_data_composition_progress_dialog_finalize (GObject * object); + +struct XfburnBurnDataCompositionProgressDialogPrivate +{ + /* Place Private Members Here */ +}; + +static XfburnProgressDialogClass *parent_class = NULL; + +GtkType +xfburn_burn_data_composition_progress_dialog_get_type () +{ + static GtkType type = 0; + + if (type == 0) { + static const GTypeInfo our_info = { + sizeof (XfburnBurnDataCompositionProgressDialogClass), + NULL, + NULL, + (GClassInitFunc) xfburn_burn_data_composition_progress_dialog_class_init, + NULL, + NULL, + sizeof (XfburnBurnDataCompositionProgressDialog), + 0, + (GInstanceInitFunc) xfburn_burn_data_composition_progress_dialog_init, + }; + + type = g_type_register_static (XFBURN_TYPE_PROGRESS_DIALOG, "XfburnBurnDataCompositionProgressDialog", &our_info, 0); + } + + return type; +} + +static void +xfburn_burn_data_composition_progress_dialog_class_init (XfburnBurnDataCompositionProgressDialogClass * klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + parent_class = g_type_class_peek_parent (klass); + object_class->finalize = xfburn_burn_data_composition_progress_dialog_finalize; + +} + +static void +xfburn_burn_data_composition_progress_dialog_init (XfburnBurnDataCompositionProgressDialog * obj) +{ + obj->priv = g_new0 (XfburnBurnDataCompositionProgressDialogPrivate, 1); + /* Initialize private members, etc. */ +} + +static void +xfburn_burn_data_composition_progress_dialog_finalize (GObject * object) +{ + XfburnBurnDataCompositionProgressDialog *cobj; + cobj = XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG (object); + + /* Free private members, etc. */ + + g_free (cobj->priv); + G_OBJECT_CLASS (parent_class)->finalize (object); +} + +/* */ +/* internals */ +/* */ + +/* */ +/* public */ +/* */ + +GtkWidget * +xfburn_burn_data_composition_progress_dialog_new () +{ + XfburnBurnDataCompositionProgressDialog *obj; + + obj = XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG (g_object_new (XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG, NULL)); + + return GTK_WIDGET (obj); +} Copied: xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.h (from rev 22560, xfburn/trunk/xfburn/xfburn-burn-composition-progress-dialog.h) =================================================================== --- xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.h (rev 0) +++ xfburn/trunk/xfburn/xfburn-burn-data-composition-progress-dialog.h 2006-07-30 12:09:37 UTC (rev 22563) @@ -0,0 +1,55 @@ +/* $Id$ */ +/* + * Copyright (c) 2005-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_BURN_COMPOSITION_PROGRESS_DIALOG_H__ +#define __XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_H__ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif /* !HAVE_CONFIG_H */ + +#include <gtk/gtk.h> + +#include "xfburn-progress-dialog.h" + +G_BEGIN_DECLS + +#define XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG (xfburn_burn_data_composition_progress_dialog_get_type ()) +#define XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG, XfburnBurnDataCompositionProgressDialog)) +#define XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG, XfburnBurnDataCompositionProgressDialogClass)) +#define XFBURN_IS_BURN_COMPOSITION_PROGRESS_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG)) +#define XFBURN_IS_BURN_COMPOSITION_PROGRESS_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG)) +#define XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), XFBURN_TYPE_BURN_COMPOSITION_PROGRESS_DIALOG, XfburnBurnDataCompositionProgressDialogClass)) + +typedef struct XfburnBurnDataCompositionProgressDialogPrivate XfburnBurnDataCompositionProgressDialogPrivate; + +typedef struct { + XfburnProgressDialog parent; + XfburnBurnDataCompositionProgressDialogPrivate *priv; +} XfburnBurnDataCompositionProgressDialog; + +typedef struct { + XfburnProgressDialogClass parent_class; + /* Add Signal Functions Here */ +} XfburnBurnDataCompositionProgressDialogClass; + +GtkType xfburn_burn_data_composition_progress_dialog_get_type (); +GtkWidget *xfburn_burn_data_composition_progress_dialog_new (); + +#endif /* XFBURN_BURN_COMPOSITION_PROGRESS_DIALOG_H */ Modified: xfburn/trunk/xfburn/xfburn-data-composition.c =================================================================== --- xfburn/trunk/xfburn/xfburn-data-composition.c 2006-07-30 08:31:55 UTC (rev 22562) +++ xfburn/trunk/xfburn/xfburn-data-composition.c 2006-07-30 12:09:37 UTC (rev 22563) @@ -50,7 +50,7 @@ #endif #include "xfburn-composition.h" -#include "xfburn-burn-composition-dialog.h" +#include "xfburn-burn-data-composition-dialog.h" #include "xfburn-disc-usage.h" #include "xfburn-main-window.h" #include "xfburn-utils.h" @@ -105,7 +105,7 @@ { DATA_COMPOSITION_TYPE_FILE, DATA_COMPOSITION_TYPE_DIRECTORY -} DataCompositionype; +} DataCompositionType; typedef struct { @@ -376,7 +376,7 @@ generate_file_list (XFBURN_DATA_COMPOSITION (dc), &tmpfile); - dialog = xfburn_burn_composition_dialog_new (tmpfile); + dialog = xfburn_burn_data_composition_dialog_new (tmpfile); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (mainwin)); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -940,16 +940,56 @@ } } +static gchar * +get_composition_path (GtkTreeModel *model, GtkTreeIter *iter) +{ + GtkTreeIter parent; + GtkTreeIter current = *iter; + gchar *path = g_strdup (""); + gchar *temp = NULL; + + while (gtk_tree_model_iter_parent (model, &parent, ¤t)) { + gchar *name = NULL; + + gtk_tree_model_get (model, &parent, DATA_COMPOSITION_COLUMN_CONTENT, &name, -1); + + temp = g_strdup_printf ("%s/%s", name, path); + g_free (path); + path = temp; + + g_free (name); + + current = parent; + } + + return path; +} + static gboolean foreach_generate_file_list (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, FILE * file) { - gchar *name; - gchar *src; + DataCompositionType type; + gchar *dir_path = NULL; + gchar *name = NULL; + gchar *src = NULL; + + gtk_tree_model_get (model, iter, DATA_COMPOSITION_COLUMN_TYPE, &type, + DATA_COMPOSITION_COLUMN_CONTENT, &name, DATA_COMPOSITION_COLUMN_PATH, &src, -1); - gtk_tree_model_get (model, iter, DATA_COMPOSITION_COLUMN_CONTENT, &name, DATA_COMPOSITION_COLUMN_PATH, &src, -1); + dir_path = get_composition_path (model, iter); + + fprintf (file, "%s%s=", dir_path, name); + + if (type == DATA_COMPOSITION_TYPE_DIRECTORY) { + gchar *dummy_dir = NULL; + + dummy_dir = g_object_get_data (G_OBJECT (model), "dummy-dir"); + fprintf (file, "%s\n", dummy_dir); + } else { + fprintf (file, "%s\n", src); + } - fprintf (file, "%s=%s\n", name, src); - + g_free (dir_path); g_free (name); g_free (src); return FALSE; @@ -964,7 +1004,9 @@ FILE *file_tmp; int fd_tmpfile; GtkTreeModel *model; - + gchar *dummy_dir = NULL; + gchar template[] = "/tmp/xfburnXXXXXX"; + fd_tmpfile = g_file_open_tmp ("xfburnXXXXXX", tmpfile, &error); if (error) { g_warning ("Unable to create temporary file: %s", error->message); @@ -974,9 +1016,14 @@ file_tmp = fdopen (fd_tmpfile, "w+"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content)); + + + dummy_dir = mkdtemp (template); + g_object_set_data (G_OBJECT (model), "dummy-dir", dummy_dir); + gtk_tree_model_foreach (model, (GtkTreeModelForeachFunc) foreach_generate_file_list, file_tmp); fclose (file_tmp); - + return TRUE; } @@ -1147,7 +1194,7 @@ gint i; gchar *name = NULL; gchar *source_path = NULL; - DataCompositionype type; + DataCompositionType type; space = g_strnfill (gtk_tree_path_get_depth (path), '\t'); Modified: xfburn/trunk/xfburn/xfburn-main.c =================================================================== --- xfburn/trunk/xfburn/xfburn-main.c 2006-07-30 08:31:55 UTC (rev 22562) +++ xfburn/trunk/xfburn/xfburn-main.c 2006-07-30 12:09:37 UTC (rev 22563) @@ -79,7 +79,7 @@ mainwin = xfburn_main_window_new (); gtk_widget_show (mainwin); - + gtk_main (); #ifdef HAVE_THUNAR_VFS _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits