[Goodies-commits] r5262 - xfburn/trunk/xfburn

David Mohr squisher at xfce.org
Sun Aug 17 06:56:07 CEST 2008


Author: squisher
Date: 2008-08-17 04:56:07 +0000 (Sun, 17 Aug 2008)
New Revision: 5262

Modified:
   xfburn/trunk/xfburn/xfburn-data-composition.c
   xfburn/trunk/xfburn/xfburn-data-disc-usage.c
   xfburn/trunk/xfburn/xfburn-data-disc-usage.h
   xfburn/trunk/xfburn/xfburn-disc-usage.c
   xfburn/trunk/xfburn/xfburn-disc-usage.h
Log:
Adding base class for disc sizes, data disc size now subclasses it

Modified: xfburn/trunk/xfburn/xfburn-data-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-composition.c	2008-08-16 23:34:49 UTC (rev 5261)
+++ xfburn/trunk/xfburn/xfburn-data-composition.c	2008-08-17 04:56:07 UTC (rev 5262)
@@ -483,7 +483,7 @@
 
   image = generate_iso_image (XFBURN_DATA_COMPOSITION (dc));
   
-  switch (xfburn_data_disc_usage_get_disc_type (du)) {
+  switch (xfburn_disc_usage_get_disc_type (XFBURN_DISC_USAGE (du))) {
   case CD_DISC:
     dialog = xfburn_burn_data_cd_composition_dialog_new (image);
     break;
@@ -792,7 +792,7 @@
   g_free (directory_text);
   g_free (humansize);
   
-  xfburn_data_disc_usage_add_size (XFBURN_DATA_DISC_USAGE (priv->disc_usage), 4);
+  xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), 4);
   
   gtk_widget_realize (priv->content);
   
@@ -822,7 +822,7 @@
       guint64 size = 0;
       
       gtk_tree_model_get (model, &iter, DATA_COMPOSITION_COLUMN_SIZE, &size, -1);
-      xfburn_data_disc_usage_sub_size (XFBURN_DATA_DISC_USAGE (priv->disc_usage), size);
+      xfburn_disc_usage_sub_size (XFBURN_DISC_USAGE (priv->disc_usage), size);
 
       iter_temp = iter;
       while (gtk_tree_model_iter_parent (model, &parent, &iter_temp)) {
@@ -941,7 +941,7 @@
   
   gtk_entry_set_text (GTK_ENTRY (priv->entry_volume_name), _(DATA_COMPOSITION_DEFAULT_NAME));
 
-  xfburn_data_disc_usage_set_size (XFBURN_DATA_DISC_USAGE (priv->disc_usage), 0);
+  xfburn_disc_usage_set_size (XFBURN_DISC_USAGE (priv->disc_usage), 0);
 }
 
 static void
@@ -1099,7 +1099,7 @@
                           DATA_COMPOSITION_COLUMN_CONTENT, name,
                           DATA_COMPOSITION_COLUMN_TYPE, DATA_COMPOSITION_TYPE_DIRECTORY, 
                           DATA_COMPOSITION_COLUMN_SIZE, (guint64) 4, -1);
-      xfburn_data_disc_usage_add_size (XFBURN_DATA_DISC_USAGE (priv->disc_usage), (guint64) 4);
+      xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), (guint64) 4);
       gdk_threads_leave ();
 
       while ((filename = g_dir_read_name (dir))) {
@@ -1172,7 +1172,7 @@
                           DATA_COMPOSITION_COLUMN_TYPE, DATA_COMPOSITION_TYPE_FILE, -1);
 #endif
 
-      xfburn_data_disc_usage_add_size (XFBURN_DATA_DISC_USAGE (priv->disc_usage), s.st_size);
+      xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), s.st_size);
 #ifdef HAVE_THUNAR_VFS
       if (G_LIKELY (G_IS_OBJECT (mime_icon)))
         g_object_unref (mime_icon);
@@ -1561,7 +1561,7 @@
         
           gtk_tree_store_remove (GTK_TREE_STORE (model), &iter_src);
         } else {
-          xfburn_data_disc_usage_add_size (XFBURN_DATA_DISC_USAGE (priv->disc_usage), size);
+          xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), size);
         }
         
         gtk_tree_path_free (path_parent);

Modified: xfburn/trunk/xfburn/xfburn-data-disc-usage.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-disc-usage.c	2008-08-16 23:34:49 UTC (rev 5261)
+++ xfburn/trunk/xfburn/xfburn-data-disc-usage.c	2008-08-17 04:56:07 UTC (rev 5262)
@@ -25,6 +25,7 @@
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/libxfcegui4.h>
 
+#include "xfburn-disc-usage.h"
 #include "xfburn-data-disc-usage.h"
 #include "xfburn-global.h"
 #include "xfburn-settings.h"
@@ -36,21 +37,17 @@
 static void xfburn_data_disc_usage_class_init (XfburnDataDiscUsageClass *);
 static void xfburn_data_disc_usage_init (XfburnDataDiscUsage *);
 
-static void cb_button_clicked (GtkButton *, XfburnDataDiscUsage *);
-static void cb_combo_changed (GtkComboBox *, XfburnDataDiscUsage *);
+static gboolean can_burn (XfburnDiscUsage *disc_usage);
+static void xfburn_data_disc_usage_update_size (XfburnDiscUsage * disc_usage);
 
 /* globals */
-static GtkHBoxClass *parent_class = NULL;
+static XfburnDiscUsageClass *parent_class = NULL;
 
 #define DEFAULT_DISK_SIZE_LABEL 2
 #define LAST_CD_LABEL 4
 #define NUM_LABELS 7
 
-struct
-{
-  guint64 size;
-  gchar *label;
-} datadisksizes[] = {
+XfburnDiscLabels datadiscsizes[] = {
   {
   200 *1024 * 1024, "200MB CD"},
   {
@@ -67,14 +64,6 @@
   G_GINT64_CONSTANT(0x1fd3e0000), "7.9GB DVD"}, /* 8 543 666 176 */
 };
 
-enum
-{
-  BEGIN_BURN,
-  LAST_SIGNAL,
-};
-
-static guint signals[LAST_SIGNAL];
-
 /*******************************/
 /* XfburnDataComposition class */
 /*******************************/
@@ -96,7 +85,7 @@
       (GInstanceInitFunc) xfburn_data_disc_usage_init
     };
 
-    disc_usage_type = g_type_register_static (GTK_TYPE_HBOX, "XfburnDataDiscUsage", &disc_usage_info, 0);
+    disc_usage_type = g_type_register_static (XFBURN_TYPE_DISC_USAGE, "XfburnDataDiscUsage", &disc_usage_info, 0);
   }
 
   return disc_usage_type;
@@ -106,55 +95,33 @@
 xfburn_data_disc_usage_class_init (XfburnDataDiscUsageClass * klass)
 {
   GObjectClass *gobject_class;
+  XfburnDiscUsageClass *pklass;
 
   parent_class = g_type_class_peek_parent (klass);
 
   gobject_class = G_OBJECT_CLASS (klass);
 
-  signals[BEGIN_BURN] = g_signal_new ("begin-burn", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_ACTION,
-                                      G_STRUCT_OFFSET (XfburnDataDiscUsageClass, begin_burn),
-                                      NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+  /* override virtual methods */
+  pklass = XFBURN_DISC_USAGE_CLASS(klass);
+  
+  pklass->labels = parent_class->labels = datadiscsizes;
+  pklass->update_size = parent_class->update_size = xfburn_data_disc_usage_update_size;
+  pklass->can_burn = parent_class->can_burn = can_burn;
 }
 
 static void
 xfburn_data_disc_usage_init (XfburnDataDiscUsage * disc_usage)
 {
-  int i;
-
-  disc_usage->size = 0;
-
-  disc_usage->progress_bar = gtk_progress_bar_new ();
-  gtk_progress_bar_set_text (GTK_PROGRESS_BAR (disc_usage->progress_bar), "0 B");
-  gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->progress_bar, TRUE, TRUE, BORDER);
-  gtk_widget_show (disc_usage->progress_bar);
-
-  disc_usage->combo = gtk_combo_box_new_text ();
-  for (i = 0; i < G_N_ELEMENTS (datadisksizes); i++)
-    gtk_combo_box_append_text (GTK_COMBO_BOX (disc_usage->combo), datadisksizes[i].label);
-  gtk_combo_box_set_active (GTK_COMBO_BOX (disc_usage->combo), DEFAULT_DISK_SIZE_LABEL);
-  gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->combo, FALSE, FALSE, BORDER);
-  gtk_widget_show (disc_usage->combo);
-
-  disc_usage->button = xfce_create_mixed_button (XFBURN_STOCK_BURN_CD, _("Proceed to Burn"));
-  gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->button, FALSE, FALSE, BORDER);
-  gtk_widget_set_sensitive (disc_usage->button, FALSE);
-  gtk_widget_show (disc_usage->button);
-  g_signal_connect (G_OBJECT (disc_usage->button), "clicked", G_CALLBACK (cb_button_clicked), disc_usage);
-  
-  g_signal_connect (G_OBJECT (disc_usage->combo), "changed", G_CALLBACK (cb_combo_changed), disc_usage);
-  /* Disabling burn composition doesn't work when this is enabled */
-  /*gtk_widget_set_sensitive (disc_usage->button, xfburn_main_window_support_cdr (xfburn_main_window_get_instance ()));*/
 }
 
 /* internals */
 static void
-xfburn_data_disc_usage_update_size (XfburnDataDiscUsage * disc_usage, gboolean manual)
+xfburn_data_disc_usage_update_size (XfburnDiscUsage * disc_usage)
 {
   gfloat fraction;
   gchar *size;
-  int i;
 
-  fraction = disc_usage->size / datadisksizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size;
+  fraction = disc_usage->size / datadiscsizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size;
   if (fraction > 1.0)
     fraction = 1.0;
   if (fraction < 0.0)
@@ -169,75 +136,17 @@
 
   gtk_progress_bar_set_text (GTK_PROGRESS_BAR (disc_usage->progress_bar), size);
 
-  if (!manual) {
-    i = 0;
-    while (i < NUM_LABELS  &&  disc_usage->size > datadisksizes[i].size) {
-      i++;
-    }
-    gtk_combo_box_set_active (GTK_COMBO_BOX (disc_usage->combo), (i<NUM_LABELS ? i: i-1));
-  }
-
-  if (disc_usage->size == 0 || 
-      disc_usage->size > datadisksizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size)
-    gtk_widget_set_sensitive (disc_usage->button, FALSE);
-  else
-    gtk_widget_set_sensitive (disc_usage->button, TRUE);
- 
-  
   g_free (size);
 }
 
-static void 
-cb_button_clicked (GtkButton *button, XfburnDataDiscUsage *du)
+static gboolean
+can_burn (XfburnDiscUsage *disc_usage)
 {
-  if (du->size <= datadisksizes[gtk_combo_box_get_active (GTK_COMBO_BOX (du->combo))].size) {
-    g_signal_emit (G_OBJECT (du), signals[BEGIN_BURN], 0);
-  } else {
-    xfce_err (_("You are trying to burn more data than the disk can contain !"));
-  }
-}
-
-static void
-cb_combo_changed (GtkComboBox * combo, XfburnDataDiscUsage * usage)
-{
-  xfburn_data_disc_usage_update_size (usage, TRUE);
-}
-
-/* public methods */
-gdouble
-xfburn_data_disc_usage_get_size (XfburnDataDiscUsage * disc_usage)
-{
-  return disc_usage->size;
-}
-
-void
-xfburn_data_disc_usage_set_size (XfburnDataDiscUsage * disc_usage, gdouble size)
-{
-  disc_usage->size = size;
-  xfburn_data_disc_usage_update_size (disc_usage, FALSE);
-}
-
-void
-xfburn_data_disc_usage_add_size (XfburnDataDiscUsage * disc_usage, gdouble size)
-{
-  disc_usage->size = disc_usage->size + size;
-  xfburn_data_disc_usage_update_size (disc_usage, FALSE);
-}
-
-void
-xfburn_data_disc_usage_sub_size (XfburnDataDiscUsage * disc_usage, gdouble size)
-{
-  disc_usage->size = disc_usage->size - size;
-  xfburn_data_disc_usage_update_size (disc_usage, FALSE);
-}
-
-XfburnDataDiscType
-xfburn_data_disc_usage_get_disc_type (XfburnDataDiscUsage * disc_usage)
-{
-  if (gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo)) > LAST_CD_LABEL)
-    return DVD_DISC;
+  if (disc_usage->size == 0 || 
+      disc_usage->size > datadiscsizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size)
+    return FALSE;
   else
-    return CD_DISC;
+    return TRUE;
 }
 
 GtkWidget *

Modified: xfburn/trunk/xfburn/xfburn-data-disc-usage.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-disc-usage.h	2008-08-16 23:34:49 UTC (rev 5261)
+++ xfburn/trunk/xfburn/xfburn-data-disc-usage.h	2008-08-17 04:56:07 UTC (rev 5262)
@@ -25,6 +25,7 @@
 #endif
 
 #include <gtk/gtk.h>
+#include "xfburn-disc-usage.h"
 
 G_BEGIN_DECLS
 
@@ -37,38 +38,17 @@
 
 typedef struct
 {
-  GtkVBox hbox;
-
-  GtkWidget *progress_bar;
-  GtkWidget *combo;
-  GtkWidget *button;
-
-  gdouble size;
+  XfburnDiscUsage disc_usage;
 } XfburnDataDiscUsage;
 
 typedef struct
 {
-  GtkHBoxClass parent_class;
-  
-  void (*begin_burn) (XfburnDataDiscUsage *du);
+  XfburnDiscUsageClass parent_class;
 } XfburnDataDiscUsageClass;
 
-typedef enum
-{
-  CD_DISC,
-  DVD_DISC,
-} XfburnDataDiscType;
-
 GtkType xfburn_data_disc_usage_get_type (void);
 GtkWidget *xfburn_data_disc_usage_new (void);
 
-gdouble xfburn_data_disc_usage_get_size (XfburnDataDiscUsage *);
-void xfburn_data_disc_usage_set_size (XfburnDataDiscUsage *, gdouble);
-void xfburn_data_disc_usage_add_size (XfburnDataDiscUsage *, gdouble);
-void xfburn_data_disc_usage_sub_size (XfburnDataDiscUsage *, gdouble);
-
-XfburnDataDiscType xfburn_data_disc_usage_get_disc_type (XfburnDataDiscUsage *);
-
 G_END_DECLS
 
 #endif

Modified: xfburn/trunk/xfburn/xfburn-disc-usage.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-disc-usage.c	2008-08-16 23:34:49 UTC (rev 5261)
+++ xfburn/trunk/xfburn/xfburn-disc-usage.c	2008-08-17 04:56:07 UTC (rev 5262)
@@ -25,19 +25,22 @@
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/libxfcegui4.h>
 
-#include "xfburn-data-disc-usage.h"
+#include "xfburn-disc-usage.h"
 #include "xfburn-global.h"
 #include "xfburn-settings.h"
 #include "xfburn-utils.h"
 #include "xfburn-stock.h"
 #include "xfburn-main-window.h"
 
+
 /* prototypes */
-static void xfburn_data_disc_usage_class_init (XfburnDataDiscUsageClass *);
-static void xfburn_data_disc_usage_init (XfburnDataDiscUsage *);
+static void xfburn_disc_usage_class_init (XfburnDiscUsageClass *);
+static void xfburn_disc_usage_init (XfburnDiscUsage *);
 
-static void cb_button_clicked (GtkButton *, XfburnDataDiscUsage *);
-static void cb_combo_changed (GtkComboBox *, XfburnDataDiscUsage *);
+static void update_size_default (XfburnDiscUsage *du);
+static gboolean can_burn_default (XfburnDiscUsage *du);
+static void cb_button_clicked (GtkButton *, XfburnDiscUsage *);
+static void cb_combo_changed (GtkComboBox *, XfburnDiscUsage *);
 
 /* globals */
 static GtkHBoxClass *parent_class = NULL;
@@ -46,27 +49,24 @@
 #define LAST_CD_LABEL 4
 #define NUM_LABELS 7
 
-struct
-{
-  guint64 size;
-  gchar *label;
-} datadisksizes[] = {
+XfburnDiscLabels testdiscsizes[] = {
   {
-  200 *1024 * 1024, "200MB CD"},
+  1, "200MB CD"},
   {
-  681984000, "650MB CD"},
+  10, "650MB CD"},
   {
-  737280000, "700MB CD"},
+  100, "700MB CD"},
   {
-  829440000, "800MB CD"},
+  1000, "800MB CD"},
   {
-  912384000, "900MB CD"},
+  10000, "900MB CD"},
   {
-  G_GINT64_CONSTANT(0x1182a0000), "4.3GB DVD"}, /* 4 700 372 992 */
+  100000, "4.3GB DVD"},
   {
-  G_GINT64_CONSTANT(0x1fd3e0000), "7.9GB DVD"}, /* 8 543 666 176 */
+  1000000, "7.9GB DVD"},
 };
 
+/* signals */
 enum
 {
   BEGIN_BURN,
@@ -76,34 +76,36 @@
 static guint signals[LAST_SIGNAL];
 
 /*******************************/
-/* XfburnDataComposition class */
+/* XfburnDiscUsage class */
 /*******************************/
+static guint signals[LAST_SIGNAL];
+
 GtkType
-xfburn_data_disc_usage_get_type (void)
+xfburn_disc_usage_get_type (void)
 {
   static GtkType disc_usage_type = 0;
 
   if (!disc_usage_type) {
     static const GTypeInfo disc_usage_info = {
-      sizeof (XfburnDataDiscUsageClass),
+      sizeof (XfburnDiscUsageClass),
       NULL,
       NULL,
-      (GClassInitFunc) xfburn_data_disc_usage_class_init,
+      (GClassInitFunc) xfburn_disc_usage_class_init,
       NULL,
       NULL,
-      sizeof (XfburnDataDiscUsage),
+      sizeof (XfburnDiscUsage),
       0,
-      (GInstanceInitFunc) xfburn_data_disc_usage_init
+      (GInstanceInitFunc) xfburn_disc_usage_init
     };
 
-    disc_usage_type = g_type_register_static (GTK_TYPE_HBOX, "XfburnDataDiscUsage", &disc_usage_info, 0);
+    disc_usage_type = g_type_register_static (GTK_TYPE_HBOX, "XfburnDiscUsage", &disc_usage_info, 0);
   }
 
   return disc_usage_type;
 }
 
 static void
-xfburn_data_disc_usage_class_init (XfburnDataDiscUsageClass * klass)
+xfburn_disc_usage_class_init (XfburnDiscUsageClass * klass)
 {
   GObjectClass *gobject_class;
 
@@ -112,13 +114,19 @@
   gobject_class = G_OBJECT_CLASS (klass);
 
   signals[BEGIN_BURN] = g_signal_new ("begin-burn", G_TYPE_FROM_CLASS (gobject_class), G_SIGNAL_ACTION,
-                                      G_STRUCT_OFFSET (XfburnDataDiscUsageClass, begin_burn),
+                                      G_STRUCT_OFFSET (XfburnDiscUsageClass, begin_burn),
                                       NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
+
+  /* install default values */
+  klass->update_size = update_size_default;
+  klass->can_burn = can_burn_default;
+  klass->labels = testdiscsizes;
 }
 
 static void
-xfburn_data_disc_usage_init (XfburnDataDiscUsage * disc_usage)
+xfburn_disc_usage_init (XfburnDiscUsage * disc_usage)
 {
+  XfburnDiscUsageClass *class = XFBURN_DISC_USAGE_GET_CLASS (disc_usage);
   int i;
 
   disc_usage->size = 0;
@@ -129,8 +137,8 @@
   gtk_widget_show (disc_usage->progress_bar);
 
   disc_usage->combo = gtk_combo_box_new_text ();
-  for (i = 0; i < G_N_ELEMENTS (datadisksizes); i++)
-    gtk_combo_box_append_text (GTK_COMBO_BOX (disc_usage->combo), datadisksizes[i].label);
+  for (i = 0; i < NUM_LABELS; i++)
+    gtk_combo_box_append_text (GTK_COMBO_BOX (disc_usage->combo), class->labels[i].label);
   gtk_combo_box_set_active (GTK_COMBO_BOX (disc_usage->combo), DEFAULT_DISK_SIZE_LABEL);
   gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->combo, FALSE, FALSE, BORDER);
   gtk_widget_show (disc_usage->combo);
@@ -142,97 +150,95 @@
   g_signal_connect (G_OBJECT (disc_usage->button), "clicked", G_CALLBACK (cb_button_clicked), disc_usage);
   
   g_signal_connect (G_OBJECT (disc_usage->combo), "changed", G_CALLBACK (cb_combo_changed), disc_usage);
-  /* Disabling burn composition doesn't work when this is enabled */
-  /*gtk_widget_set_sensitive (disc_usage->button, xfburn_main_window_support_cdr (xfburn_main_window_get_instance ()));*/
+
 }
 
 /* internals */
-static void
-xfburn_data_disc_usage_update_size (XfburnDataDiscUsage * disc_usage, gboolean manual)
+static void 
+update_size_default (XfburnDiscUsage *du)
 {
-  gfloat fraction;
   gchar *size;
-  int i;
 
-  fraction = disc_usage->size / datadisksizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size;
-  if (fraction > 1.0)
-    fraction = 1.0;
-  if (fraction < 0.0)
-    fraction = 0.0;
+  size = g_strdup_printf ("%.0lf", du->size);
 
-  gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (disc_usage->progress_bar), fraction > 1.0 ? 1.0 : fraction);
+  gtk_progress_bar_set_text (GTK_PROGRESS_BAR (du->progress_bar), size);
 
-  if (xfburn_settings_get_boolean ("human-readable-units", TRUE))
-    size = xfburn_humanreadable_filesize ((guint64) disc_usage->size);
-  else
-    size = g_strdup_printf ("%.0lf B", disc_usage->size);
+  g_free (size);
+}
 
-  gtk_progress_bar_set_text (GTK_PROGRESS_BAR (disc_usage->progress_bar), size);
+static gboolean 
+can_burn_default (XfburnDiscUsage *du)
+{
+  return TRUE;
+}
 
+static void 
+cb_button_clicked (GtkButton *button, XfburnDiscUsage *du)
+{
+  XfburnDiscUsageClass *class = XFBURN_DISC_USAGE_GET_CLASS (du);
+
+  if (du->size <= class->labels[gtk_combo_box_get_active (GTK_COMBO_BOX (du->combo))].size) {
+    g_signal_emit (G_OBJECT (du), signals[BEGIN_BURN], 0);
+  } else {
+    xfce_err (_("You are trying to burn more data than the disc can contain !"));
+  }
+}
+
+static void
+update_size (XfburnDiscUsage * disc_usage, gboolean manual)
+{
+  XfburnDiscUsageClass *class = XFBURN_DISC_USAGE_GET_CLASS (disc_usage);
+  int i;
+
+  class->update_size (disc_usage);
+
   if (!manual) {
     i = 0;
-    while (i < NUM_LABELS  &&  disc_usage->size > datadisksizes[i].size) {
+    while (i < NUM_LABELS  &&  disc_usage->size > class->labels[i].size) {
       i++;
     }
     gtk_combo_box_set_active (GTK_COMBO_BOX (disc_usage->combo), (i<NUM_LABELS ? i: i-1));
   }
 
-  if (disc_usage->size == 0 || 
-      disc_usage->size > datadisksizes[gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo))].size)
-    gtk_widget_set_sensitive (disc_usage->button, FALSE);
-  else
-    gtk_widget_set_sensitive (disc_usage->button, TRUE);
- 
-  
-  g_free (size);
+  gtk_widget_set_sensitive (disc_usage->button, class->can_burn (disc_usage));
 }
 
-static void 
-cb_button_clicked (GtkButton *button, XfburnDataDiscUsage *du)
-{
-  if (du->size <= datadisksizes[gtk_combo_box_get_active (GTK_COMBO_BOX (du->combo))].size) {
-    g_signal_emit (G_OBJECT (du), signals[BEGIN_BURN], 0);
-  } else {
-    xfce_err (_("You are trying to burn more data than the disk can contain !"));
-  }
-}
-
 static void
-cb_combo_changed (GtkComboBox * combo, XfburnDataDiscUsage * usage)
+cb_combo_changed (GtkComboBox * combo, XfburnDiscUsage * usage)
 {
-  xfburn_data_disc_usage_update_size (usage, TRUE);
+  update_size (usage, TRUE);
 }
 
 /* public methods */
 gdouble
-xfburn_data_disc_usage_get_size (XfburnDataDiscUsage * disc_usage)
+xfburn_disc_usage_get_size (XfburnDiscUsage * disc_usage)
 {
   return disc_usage->size;
 }
 
 void
-xfburn_data_disc_usage_set_size (XfburnDataDiscUsage * disc_usage, gdouble size)
+xfburn_disc_usage_set_size (XfburnDiscUsage * disc_usage, gdouble size)
 {
   disc_usage->size = size;
-  xfburn_data_disc_usage_update_size (disc_usage, FALSE);
+  update_size (disc_usage, FALSE);
 }
 
 void
-xfburn_data_disc_usage_add_size (XfburnDataDiscUsage * disc_usage, gdouble size)
+xfburn_disc_usage_add_size (XfburnDiscUsage * disc_usage, gdouble size)
 {
   disc_usage->size = disc_usage->size + size;
-  xfburn_data_disc_usage_update_size (disc_usage, FALSE);
+  update_size (disc_usage, FALSE);
 }
 
 void
-xfburn_data_disc_usage_sub_size (XfburnDataDiscUsage * disc_usage, gdouble size)
+xfburn_disc_usage_sub_size (XfburnDiscUsage * disc_usage, gdouble size)
 {
   disc_usage->size = disc_usage->size - size;
-  xfburn_data_disc_usage_update_size (disc_usage, FALSE);
+  update_size (disc_usage, FALSE);
 }
 
-XfburnDataDiscType
-xfburn_data_disc_usage_get_disc_type (XfburnDataDiscUsage * disc_usage)
+XfburnDiscType
+xfburn_disc_usage_get_disc_type (XfburnDiscUsage * disc_usage)
 {
   if (gtk_combo_box_get_active (GTK_COMBO_BOX (disc_usage->combo)) > LAST_CD_LABEL)
     return DVD_DISC;
@@ -241,8 +247,8 @@
 }
 
 GtkWidget *
-xfburn_data_disc_usage_new (void)
+xfburn_disc_usage_new (void)
 {
-  return g_object_new (xfburn_data_disc_usage_get_type (), NULL);
+  return g_object_new (xfburn_disc_usage_get_type (), NULL);
 }
 

Modified: xfburn/trunk/xfburn/xfburn-disc-usage.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-disc-usage.h	2008-08-16 23:34:49 UTC (rev 5261)
+++ xfburn/trunk/xfburn/xfburn-disc-usage.h	2008-08-17 04:56:07 UTC (rev 5262)
@@ -17,8 +17,8 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#ifndef __XFBURN_DATA_DISC_USAGE_H__
-#define __XFBURN_DATA_DISC_USAGE_H__
+#ifndef __XFBURN_DISC_USAGE_H__
+#define __XFBURN_DISC_USAGE_H__
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -28,12 +28,12 @@
 
 G_BEGIN_DECLS
 
-#define XFBURN_TYPE_DATA_DISC_USAGE            (xfburn_data_disc_usage_get_type ())
-#define XFBURN_DATA_DISC_USAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFBURN_TYPE_DATA_DISC_USAGE, XfburnDataDiscUsage))
-#define XFBURN_DATA_DISC_USAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), XFBURN_TYPE_DATA_DISC_USAGE, XfburnDataDiscUsageClass))
-#define XFBURN_IS_DATA_DISC_USAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFBURN_TYPE_DATA_DISC_USAGE))
-#define XFBURN_IS_DATA_DISC_USAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFBURN_TYPE_DATA_DISC_USAGE))
-#define XFBURN_DATA_DISC_USAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), XFBURN_TYPE_DATA_DISC_USAGE, XfburnDataDiscUsageClass))
+#define XFBURN_TYPE_DISC_USAGE            (xfburn_disc_usage_get_type ())
+#define XFBURN_DISC_USAGE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFBURN_TYPE_DISC_USAGE, XfburnDiscUsage))
+#define XFBURN_DISC_USAGE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), XFBURN_TYPE_DISC_USAGE, XfburnDiscUsageClass))
+#define XFBURN_IS_DISC_USAGE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFBURN_TYPE_DISC_USAGE))
+#define XFBURN_IS_DISC_USAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFBURN_TYPE_DISC_USAGE))
+#define XFBURN_DISC_USAGE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), XFBURN_TYPE_DISC_USAGE, XfburnDiscUsageClass))
 
 typedef struct
 {
@@ -44,31 +44,44 @@
   GtkWidget *button;
 
   gdouble size;
-} XfburnDataDiscUsage;
+} XfburnDiscUsage;
 
 typedef struct
 {
+  guint64 size;
+  gchar *label;
+} XfburnDiscLabels;
+
+typedef struct
+{
   GtkHBoxClass parent_class;
+  XfburnDiscLabels *labels;
   
-  void (*begin_burn) (XfburnDataDiscUsage *du);
-} XfburnDataDiscUsageClass;
+  /* signals */
+  void (*begin_burn) (XfburnDiscUsage *du);
 
+  /* virtual functions */
+  void (*update_size) (XfburnDiscUsage *du);
+  gboolean (*can_burn) (XfburnDiscUsage *du);
+} XfburnDiscUsageClass;
+
 typedef enum
 {
   CD_DISC,
   DVD_DISC,
-} XfburnDataDiscType;
+} XfburnDiscType;
 
-GtkType xfburn_data_disc_usage_get_type (void);
-GtkWidget *xfburn_data_disc_usage_new (void);
 
-gdouble xfburn_data_disc_usage_get_size (XfburnDataDiscUsage *);
-void xfburn_data_disc_usage_set_size (XfburnDataDiscUsage *, gdouble);
-void xfburn_data_disc_usage_add_size (XfburnDataDiscUsage *, gdouble);
-void xfburn_data_disc_usage_sub_size (XfburnDataDiscUsage *, gdouble);
+GtkType xfburn_disc_usage_get_type (void);
+GtkWidget *xfburn_disc_usage_new (void);
 
-XfburnDataDiscType xfburn_data_disc_usage_get_disc_type (XfburnDataDiscUsage *);
+gdouble xfburn_disc_usage_get_size (XfburnDiscUsage *);
+void xfburn_disc_usage_set_size (XfburnDiscUsage *, gdouble);
+void xfburn_disc_usage_add_size (XfburnDiscUsage *, gdouble);
+void xfburn_disc_usage_sub_size (XfburnDiscUsage *, gdouble);
 
+XfburnDiscType xfburn_disc_usage_get_disc_type (XfburnDiscUsage *);
+
 G_END_DECLS
 
 #endif




More information about the Goodies-commits mailing list