[Goodies-commits] r5270 - in xfburn/trunk: . xfburn

David Mohr squisher at xfce.org
Sun Aug 17 18:50:50 CEST 2008


Author: squisher
Date: 2008-08-17 16:50:50 +0000 (Sun, 17 Aug 2008)
New Revision: 5270

Modified:
   xfburn/trunk/xfburn-toolbars.ui
   xfburn/trunk/xfburn.ui
   xfburn/trunk/xfburn/Makefile.am
   xfburn/trunk/xfburn/xfburn-audio-composition.c
   xfburn/trunk/xfburn/xfburn-audio-composition.h
   xfburn/trunk/xfburn/xfburn-compositions-notebook.c
   xfburn/trunk/xfburn/xfburn-data-disc-usage.c
   xfburn/trunk/xfburn/xfburn-disc-usage.c
   xfburn/trunk/xfburn/xfburn-main-window.c
   xfburn/trunk/xfburn/xfburn-main-window.h
   xfburn/trunk/xfburn/xfburn-main.c
   xfburn/trunk/xfburn/xfburn-welcome-tab.c
Log:
Adding basic UI for audio CDs

Modified: xfburn/trunk/xfburn/Makefile.am
===================================================================
--- xfburn/trunk/xfburn/Makefile.am	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/Makefile.am	2008-08-17 16:50:50 UTC (rev 5270)
@@ -30,6 +30,7 @@
 	xfburn-file-browser.h						\
 	xfburn-welcome-tab.h						\
 	xfburn-data-composition.h					\
+	xfburn-audio-composition.h					\
 	xfburn-disc-usage.h						\
 	xfburn-data-disc-usage.h					\
 	xfburn-fs-browser.h						\
@@ -61,6 +62,7 @@
 	xfburn-file-browser.c						\
 	xfburn-welcome-tab.c    	                             	\
 	xfburn-data-composition.c    	                             	\
+	xfburn-audio-composition.c    	                             	\
 	xfburn-disc-usage.c						\
 	xfburn-data-disc-usage.c					\
 	xfburn-fs-browser.c 	                                       	\

Modified: xfburn/trunk/xfburn/xfburn-audio-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-composition.c	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-audio-composition.c	2008-08-17 16:50:50 UTC (rev 5270)
@@ -45,89 +45,89 @@
 
 #include <libisofs.h>
 
-#include "xfburn-data-composition.h"
+#include "xfburn-audio-composition.h"
 #include "xfburn-global.h"
 
 #include "xfburn-adding-progress.h"
 #include "xfburn-composition.h"
-#include "xfburn-burn-data-cd-composition-dialog.h"
-#include "xfburn-burn-data-dvd-composition-dialog.h"
 #include "xfburn-data-disc-usage.h"
 #include "xfburn-main-window.h"
 #include "xfburn-utils.h"
 
-#define XFBURN_DATA_COMPOSITION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_DATA_COMPOSITION, XfburnDataCompositionPrivate))
+#define XFBURN_AUDIO_COMPOSITION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_AUDIO_COMPOSITION, XfburnAudioCompositionPrivate))
 
 enum
 {
-  DATA_COMPOSITION_COLUMN_ICON,
-  DATA_COMPOSITION_COLUMN_CONTENT,
-  DATA_COMPOSITION_COLUMN_HUMANSIZE,
-  DATA_COMPOSITION_COLUMN_SIZE,
-  DATA_COMPOSITION_COLUMN_PATH,
-  DATA_COMPOSITION_COLUMN_TYPE,
-  DATA_COMPOSITION_N_COLUMNS
+  AUDIO_COMPOSITION_COLUMN_ICON,
+  AUDIO_COMPOSITION_COLUMN_POS,
+  AUDIO_COMPOSITION_COLUMN_CONTENT,
+  AUDIO_COMPOSITION_COLUMN_LENGTH,
+  AUDIO_COMPOSITION_COLUMN_HUMANLENGTH,
+  AUDIO_COMPOSITION_COLUMN_SIZE,
+  AUDIO_COMPOSITION_COLUMN_SONG,
+  AUDIO_COMPOSITION_COLUMN_ARTIST,
+  AUDIO_COMPOSITION_COLUMN_PATH,
+  AUDIO_COMPOSITION_COLUMN_TYPE,
+  AUDIO_COMPOSITION_N_COLUMNS
 };
 
 typedef enum
 {
-  DATA_COMPOSITION_TYPE_FILE,
-  DATA_COMPOSITION_TYPE_DIRECTORY
-} DataCompositionEntryType;
+  AUDIO_COMPOSITION_TYPE_RAW,
+} AudioCompositionEntryType;
 
 
 /* thread parameters */
 typedef struct {
   char **filenames;
   int filec;
-  XfburnDataComposition *dc;
+  XfburnAudioComposition *dc;
 } ThreadAddFilesCLIParams;
 
 typedef struct {
-  XfburnDataComposition *dc;
+  XfburnAudioComposition *dc;
   GtkTreeModel *model;
   GtkTreeIter iter_where_insert;
-  DataCompositionEntryType type;
+  AudioCompositionEntryType type;
 } ThreadAddFilesActionParams;
 
 typedef struct {
-  XfburnDataComposition *composition;
-  DataCompositionEntryType type;
+  XfburnAudioComposition *composition;
+  AudioCompositionEntryType type;
   GtkWidget *widget;
   GtkTreeViewDropPosition position;
   GtkTreeIter iter_dummy;
 } ThreadAddFilesDragParams;
 
 /* prototypes */
-static void xfburn_data_composition_class_init (XfburnDataCompositionClass *);
+static void xfburn_audio_composition_class_init (XfburnAudioCompositionClass *);
 static void composition_interface_init (XfburnCompositionInterface *composition, gpointer iface_data);
-static void xfburn_data_composition_init (XfburnDataComposition *dc);
-static void xfburn_data_composition_finalize (GObject * object);
+static void xfburn_audio_composition_init (XfburnAudioComposition *dc);
+static void xfburn_audio_composition_finalize (GObject * object);
 
 static void show_custom_controls (XfburnComposition *composition);
 static void hide_custom_controls (XfburnComposition *composition);
 static void load_from_file (XfburnComposition *composition, const gchar *file);
 static void save_to_file (XfburnComposition *composition);
 
-static gint directory_tree_sortfunc (GtkTreeModel * model, GtkTreeIter * a, GtkTreeIter * b, gpointer user_data);
+//static gint song_tree_sortfunc (GtkTreeModel * model, GtkTreeIter * a, GtkTreeIter * b, gpointer user_data);
 
-static void action_create_directory (GtkAction *, XfburnDataComposition *);
-static void action_clear (GtkAction *, XfburnDataComposition *);
-static void action_remove_selection (GtkAction *, XfburnDataComposition *);
-static void action_rename_selection (GtkAction *, XfburnDataComposition *);
-static void action_add_selected_files (GtkAction *, XfburnDataComposition *);
+static void action_clear (GtkAction *, XfburnAudioComposition *);
+static void action_remove_selection (GtkAction *, XfburnAudioComposition *);
+static void action_rename_selection (GtkAction *, XfburnAudioComposition *);
+static void action_add_selected_files (GtkAction *, XfburnAudioComposition *);
 
-static gboolean cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnDataComposition * dc);
-static void cb_treeview_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * column, XfburnDataComposition * composition);
-static void cb_selection_changed (GtkTreeSelection *selection, XfburnDataComposition * dc);
-static void cb_begin_burn (XfburnDataDiscUsage * du, XfburnDataComposition * dc);
-static void cb_cell_file_edited (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnDataComposition * dc);
+static void tracks_changed (XfburnAudioComposition *ac);
+static gboolean cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnAudioComposition * dc);
+static void cb_selection_changed (GtkTreeSelection *selection, XfburnAudioComposition * dc);
+static void cb_begin_burn (XfburnDataDiscUsage * du, XfburnAudioComposition * dc);
+//static void cb_cell_file_edited (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnAudioComposition * dc);
 
 static void cb_content_drag_data_rcv (GtkWidget * widget, GdkDragContext * dc, guint x, guint y, GtkSelectionData * sd,
-                                      guint info, guint t, XfburnDataComposition * composition);
+                                      guint info, guint t, XfburnAudioComposition * composition);
 static void cb_content_drag_data_get (GtkWidget * widget, GdkDragContext * dc, GtkSelectionData * data, guint info,
-                                      guint time, XfburnDataComposition * content);
-static void cb_adding_done (XfburnAddingProgress *progress, XfburnDataComposition *dc);
+                                      guint time, XfburnAudioComposition * content);
+static void cb_adding_done (XfburnAddingProgress *progress, XfburnAudioComposition *dc);
 
 /* thread entry points */
 static void thread_add_files_cli (ThreadAddFilesCLIParams *params);
@@ -135,19 +135,18 @@
 static void thread_add_files_drag (ThreadAddFilesDragParams *params);
 
 /* thread helpers */
-static gboolean thread_add_file_to_list_with_name (const gchar *name, XfburnDataComposition * dc, 
+static gboolean thread_add_file_to_list_with_name (const gchar *name, XfburnAudioComposition * dc, 
                                                    GtkTreeModel * model, const gchar * path, GtkTreeIter * iter, 
                                                    GtkTreeIter * insertion, GtkTreeViewDropPosition position);
-static gboolean thread_add_file_to_list (XfburnDataComposition * dc, GtkTreeModel * model, const gchar * path, 
+static gboolean thread_add_file_to_list (XfburnAudioComposition * dc, GtkTreeModel * model, const gchar * path, 
                                          GtkTreeIter * iter, GtkTreeIter * insertion, GtkTreeViewDropPosition position);
-static IsoImage * generate_iso_image (XfburnDataComposition * dc);
                                   
 typedef struct
 {
   gchar *filename;
   gboolean modified;
  
-  guint n_new_directory;
+  guint n_tracks;
 
   GList *full_paths_to_add;
   gchar *selected_files;
@@ -169,7 +168,7 @@
   GtkWidget *disc_usage;
   GtkWidget *progress;
 
-} XfburnDataCompositionPrivate;
+} XfburnAudioCompositionPrivate;
 
 /* globals */
 static GtkHPanedClass *parent_class = NULL;
@@ -178,8 +177,6 @@
 static const GtkActionEntry action_entries[] = {
   {"add-file", GTK_STOCK_ADD, N_("Add"), NULL, N_("Add the selected file(s) to the composition"),
    G_CALLBACK (action_add_selected_files),},
-  {"create-dir", GTK_STOCK_NEW, N_("Create directory"), NULL, N_("Add a new directory to the composition"),
-   G_CALLBACK (action_create_directory),},
   {"remove-file", GTK_STOCK_REMOVE, N_("Remove"), NULL, N_("Remove the selected file(s) from the composition"),
    G_CALLBACK (action_remove_selection),},
   {"clear", GTK_STOCK_CLEAR, N_("Clear"), NULL, N_("Clear the content of the composition"),
@@ -192,32 +189,31 @@
 static const gchar *toolbar_actions[] = {
   "add-file",
   "remove-file",
-  "create-dir",
   "clear",
   "import-session",
 };
 
 static GdkPixbuf *icon_directory = NULL, *icon_file = NULL;
 
-/***************************/
-/* XfburnDataComposition class */
-/***************************/
+/********************************/
+/* XfburnAudioComposition class */
+/********************************/
 GtkType
-xfburn_data_composition_get_type (void)
+xfburn_audio_composition_get_type (void)
 {
-  static GtkType data_composition_type = 0;
+  static GtkType audio_composition_type = 0;
 
-  if (!data_composition_type) {
-    static const GTypeInfo data_composition_info = {
-      sizeof (XfburnDataCompositionClass),
+  if (!audio_composition_type) {
+    static const GTypeInfo audio_composition_info = {
+      sizeof (XfburnAudioCompositionClass),
       NULL,
       NULL,
-      (GClassInitFunc) xfburn_data_composition_class_init,
+      (GClassInitFunc) xfburn_audio_composition_class_init,
       NULL,
       NULL,
-      sizeof (XfburnDataComposition),
+      sizeof (XfburnAudioComposition),
       0,
-      (GInstanceInitFunc) xfburn_data_composition_init
+      (GInstanceInitFunc) xfburn_audio_composition_init
     };
 
     static const GInterfaceInfo composition_info = {
@@ -226,24 +222,24 @@
       NULL                                                /* interface_data */
     };
     
-    data_composition_type = g_type_register_static (GTK_TYPE_VBOX, "XfburnDataComposition", &data_composition_info, 0);
+    audio_composition_type = g_type_register_static (GTK_TYPE_VBOX, "XfburnAudioComposition", &audio_composition_info, 0);
     
-    g_type_add_interface_static (data_composition_type, XFBURN_TYPE_COMPOSITION, &composition_info);
+    g_type_add_interface_static (audio_composition_type, XFBURN_TYPE_COMPOSITION, &composition_info);
   }
 
-  return data_composition_type;
+  return audio_composition_type;
 }
 
 static void
-xfburn_data_composition_class_init (XfburnDataCompositionClass * klass)
+xfburn_audio_composition_class_init (XfburnAudioCompositionClass * klass)
 {
   GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
-  g_type_class_add_private (klass, sizeof (XfburnDataCompositionPrivate));
+  g_type_class_add_private (klass, sizeof (XfburnAudioCompositionPrivate));
   
   parent_class = g_type_class_peek_parent (klass);
   
-  object_class->finalize = xfburn_data_composition_finalize;
+  object_class->finalize = xfburn_audio_composition_finalize;
 }
 
 static void
@@ -256,32 +252,31 @@
 }
 
 static void
-xfburn_data_composition_init (XfburnDataComposition * composition)
+xfburn_audio_composition_init (XfburnAudioComposition * composition)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (composition);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (composition);
   
   gint x, y;
   ExoToolbarsModel *model_toolbar;
   gint toolbar_position;
   GtkWidget *hbox_toolbar;
-  GtkWidget *hbox, *label;
+  //GtkWidget *hbox, *label;
   GtkWidget *scrolled_window;
   GtkTreeStore *model;
-  GtkTreeViewColumn *column_file;
-  GtkCellRenderer *cell_icon, *cell_file;
+  //GtkTreeViewColumn *column_file;
+  //GtkCellRenderer *cell_icon, *cell_file;
   GtkTreeSelection *selection;
   GtkAction *action = NULL;
   GdkScreen *screen;
   GtkIconTheme *icon_theme;
   
   const gchar ui_string[] = "<ui> <popup name=\"popup-menu\">"
-    "<menuitem action=\"create-dir\"/>" "<separator/>"
     "<menuitem action=\"rename-file\"/>" "<menuitem action=\"remove-file\"/>" "</popup></ui>";
 
-  GtkTargetEntry gte_src[] =  { { "XFBURN_TREE_PATHS", GTK_TARGET_SAME_WIDGET, DATA_COMPOSITION_DND_TARGET_INSIDE } };
-  GtkTargetEntry gte_dest[] = { { "XFBURN_TREE_PATHS", GTK_TARGET_SAME_WIDGET, DATA_COMPOSITION_DND_TARGET_INSIDE },
-                                { "text/plain", 0, DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN },
-                                { "text/uri-list", 0, DATA_COMPOSITION_DND_TARGET_TEXT_URI_LIST },
+  GtkTargetEntry gte_src[] =  { { "XFBURN_TREE_PATHS", GTK_TARGET_SAME_WIDGET, AUDIO_COMPOSITION_DND_TARGET_INSIDE } };
+  GtkTargetEntry gte_dest[] = { { "XFBURN_TREE_PATHS", GTK_TARGET_SAME_WIDGET, AUDIO_COMPOSITION_DND_TARGET_INSIDE },
+                                { "text/plain", 0, AUDIO_COMPOSITION_DND_TARGET_TEXT_PLAIN },
+                                { "text/uri-list", 0, AUDIO_COMPOSITION_DND_TARGET_TEXT_URI_LIST },
                               };
 
   priv->full_paths_to_add = NULL;
@@ -299,7 +294,7 @@
     icon_file = gtk_icon_theme_load_icon (icon_theme, "gnome-fs-regular", x, 0, NULL);
 
   /* create ui manager */
-  priv->action_group = gtk_action_group_new ("xfburn-data-composition");
+  priv->action_group = gtk_action_group_new ("xfburn-audio-composition");
   gtk_action_group_set_translation_domain (priv->action_group, GETTEXT_PACKAGE);
   gtk_action_group_add_actions (priv->action_group, action_entries, G_N_ELEMENTS (action_entries),
                                 GTK_WIDGET (composition));
@@ -320,7 +315,6 @@
   exo_toolbars_model_set_style (model_toolbar, GTK_TOOLBAR_BOTH, toolbar_position);
 
   exo_toolbars_model_add_item (model_toolbar, toolbar_position, -1, "add-file", EXO_TOOLBARS_ITEM_TYPE);
-  exo_toolbars_model_add_item (model_toolbar, toolbar_position, -1, "create-dir", EXO_TOOLBARS_ITEM_TYPE);
   exo_toolbars_model_add_separator (model_toolbar, toolbar_position, -1);
   exo_toolbars_model_add_item (model_toolbar, toolbar_position, -1, "remove-file", EXO_TOOLBARS_ITEM_TYPE);
   exo_toolbars_model_add_item (model_toolbar, toolbar_position, -1, "clear", EXO_TOOLBARS_ITEM_TYPE);
@@ -332,21 +326,6 @@
   gtk_widget_show (priv->toolbar);
 
     
-  /* volume name */
-  hbox = gtk_hbox_new (FALSE, 5);
-  gtk_container_set_border_width (GTK_CONTAINER (hbox), 10);
-  gtk_box_pack_start (GTK_BOX (hbox_toolbar), hbox, FALSE, FALSE, 0);
-  gtk_widget_show (hbox);
-  
-  label = gtk_label_new (_("Volume name :"));
-  gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-  gtk_widget_show (label);
-  
-  priv->entry_volume_name = gtk_entry_new ();
-  gtk_entry_set_text (GTK_ENTRY (priv->entry_volume_name), _(DATA_COMPOSITION_DEFAULT_NAME));
-  gtk_box_pack_start (GTK_BOX (hbox), priv->entry_volume_name, FALSE, FALSE, 0);
-  gtk_widget_show (priv->entry_volume_name);
-  
   /* content treeview */
   scrolled_window = gtk_scrolled_window_new (NULL, NULL);
   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
@@ -355,12 +334,14 @@
   gtk_box_pack_start (GTK_BOX (composition), scrolled_window, TRUE, TRUE, 0);
 
   priv->content = exo_tree_view_new ();
-  model = gtk_tree_store_new (DATA_COMPOSITION_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING,
-                              G_TYPE_UINT64, G_TYPE_STRING, G_TYPE_UINT);
+  model = gtk_tree_store_new (AUDIO_COMPOSITION_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_UINT, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_STRING,
+                              G_TYPE_UINT64, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT);
 							  
-  gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (model), DATA_COMPOSITION_COLUMN_CONTENT,
-                                   directory_tree_sortfunc, NULL, NULL);
-  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), DATA_COMPOSITION_COLUMN_CONTENT, GTK_SORT_ASCENDING);
+  /*
+  gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (model), AUDIO_COMPOSITION_COLUMN_POS,
+                                   song_tree_sortfunc, NULL, NULL);
+  gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), AUDIO_COMPOSITION_COLUMN_CONTENT, GTK_SORT_ASCENDING);
+  */
   gtk_tree_view_set_model (GTK_TREE_VIEW (priv->content), GTK_TREE_MODEL (model));
   gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (priv->content), TRUE);
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->content));
@@ -368,39 +349,33 @@
   gtk_widget_show (priv->content);
   gtk_container_add (GTK_CONTAINER (scrolled_window), priv->content);
 
-  column_file = gtk_tree_view_column_new ();
-  gtk_tree_view_column_set_title (column_file, _("Contents"));
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->content), -1, _("Pos"),
+                                               gtk_cell_renderer_text_new (), "text", AUDIO_COMPOSITION_COLUMN_POS, NULL);
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->content), -1, _("Length"),
+                                               gtk_cell_renderer_text_new (), "text", AUDIO_COMPOSITION_COLUMN_HUMANLENGTH, NULL);
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->content), -1, _("Artist"),
+                                               gtk_cell_renderer_text_new (), "text", AUDIO_COMPOSITION_COLUMN_ARTIST, NULL);
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->content), -1, _("Song Name"),
+                                               gtk_cell_renderer_text_new (), "text", AUDIO_COMPOSITION_COLUMN_SONG, NULL);
+  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->content), -1, _("Filename"),
+                                               gtk_cell_renderer_text_new (), "text", AUDIO_COMPOSITION_COLUMN_PATH, NULL);
 
-  cell_icon = gtk_cell_renderer_pixbuf_new ();
-  gtk_tree_view_column_pack_start (column_file, cell_icon, FALSE);
-  gtk_tree_view_column_set_attributes (column_file, cell_icon, "pixbuf", DATA_COMPOSITION_COLUMN_ICON, NULL);
-  g_object_set (cell_icon, "xalign", 0.0, "ypad", 0, NULL);
-
-  cell_file = gtk_cell_renderer_text_new ();
-  gtk_tree_view_column_pack_start (column_file, cell_file, TRUE);
-  gtk_tree_view_column_set_attributes (column_file, cell_file, "text", DATA_COMPOSITION_COLUMN_CONTENT, NULL);
-  g_signal_connect (G_OBJECT (cell_file), "edited", G_CALLBACK (cb_cell_file_edited), composition);
-  g_object_set (G_OBJECT (cell_file), "editable", TRUE, NULL);
-
-  gtk_tree_view_append_column (GTK_TREE_VIEW (priv->content), column_file);
-
-  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->content), -1, _("Size"),
-                                               gtk_cell_renderer_text_new (), "text", DATA_COMPOSITION_COLUMN_HUMANSIZE,
-                                               NULL);
-  gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (priv->content), -1, _("Local Path"),
-                                               gtk_cell_renderer_text_new (), "text", DATA_COMPOSITION_COLUMN_PATH, NULL);
-
-  /* Contents column */
-  gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 0), 1);
-  gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 0), 200);
-  /* Size (HUMANSIZE) column */
-  gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 1), 1);
+  /* Position  */
+  gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 0), FALSE);
+  gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 0), 20);
+  /* Length */
+  gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 1), FALSE);
   gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 1), 60);
+  /* Artist */
+  gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 2), TRUE);
+  gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 2), 80);
+  /* Song Name */
+  gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 3), TRUE);
+  gtk_tree_view_column_set_min_width (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 3), 100);
   /* Local Path (PATH) column */
-  gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 2), 1);
+  gtk_tree_view_column_set_resizable (gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), 4), TRUE);
 
 
-  g_signal_connect (G_OBJECT (priv->content), "row-activated", G_CALLBACK (cb_treeview_row_activated), composition);
   g_signal_connect (G_OBJECT (priv->content), "button-press-event",
                     G_CALLBACK (cb_treeview_button_pressed), composition);
   g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (cb_selection_changed), composition);
@@ -412,7 +387,7 @@
   /* FIXME: progress should have a busy cursor */
 
   /* disc usage */
-  priv->disc_usage = xfburn_data_disc_usage_new ();
+  priv->disc_usage = xfburn_disc_usage_new ();
   gtk_box_pack_start (GTK_BOX (composition), priv->disc_usage, FALSE, FALSE, 5);
   gtk_widget_show (priv->disc_usage);
   g_signal_connect (G_OBJECT (priv->disc_usage), "begin-burn", G_CALLBACK (cb_begin_burn), composition);
@@ -432,9 +407,9 @@
 }
 
 static void
-xfburn_data_composition_finalize (GObject * object)
+xfburn_audio_composition_finalize (GObject * object)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (object);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (object);
   
   g_free (priv->filename);
   
@@ -470,8 +445,9 @@
 }
 
 static void
-cb_begin_burn (XfburnDataDiscUsage * du, XfburnDataComposition * dc)
+cb_begin_burn (XfburnDataDiscUsage * du, XfburnAudioComposition * dc)
 {
+  /*
   XfburnMainWindow *mainwin = xfburn_main_window_get_instance ();
   GtkWidget *dialog = NULL;
   IsoImage *image = NULL;
@@ -481,7 +457,7 @@
     return;
   }
 
-  image = generate_iso_image (XFBURN_DATA_COMPOSITION (dc));
+  image = generate_iso_image (XFBURN_AUDIO_COMPOSITION (dc));
   
   switch (xfburn_data_disc_usage_get_disc_type (du)) {
   case CD_DISC:
@@ -495,19 +471,13 @@
   gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (mainwin));
   gtk_dialog_run (GTK_DIALOG (dialog));
   gtk_widget_destroy (dialog);
+  */
 }
 
 static void
-cb_treeview_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * column,
-                         XfburnDataComposition * composition)
+cb_selection_changed (GtkTreeSelection *selection, XfburnAudioComposition * dc)
 {
-  gtk_tree_view_expand_row (treeview, path, FALSE);
-}
-
-static void
-cb_selection_changed (GtkTreeSelection *selection, XfburnDataComposition * dc)
-{
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   gint n_selected_rows;
   GtkAction *action = NULL;
   
@@ -516,31 +486,25 @@
   if (n_selected_rows == 0) {
     action = gtk_action_group_get_action (priv->action_group, "add-file");
     gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
-    action = gtk_action_group_get_action (priv->action_group, "create-dir");
-    gtk_action_set_sensitive (GTK_ACTION (action), TRUE);  
     action = gtk_action_group_get_action (priv->action_group, "remove-file");
     gtk_action_set_sensitive (GTK_ACTION (action), FALSE);  
   } else if (n_selected_rows == 1) {
     action = gtk_action_group_get_action (priv->action_group, "add-file");
     gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
-    action = gtk_action_group_get_action (priv->action_group, "create-dir");
-    gtk_action_set_sensitive (GTK_ACTION (action), TRUE);  
     action = gtk_action_group_get_action (priv->action_group, "remove-file");
     gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
   } else {
     action = gtk_action_group_get_action (priv->action_group, "add-file");
     gtk_action_set_sensitive (GTK_ACTION (action), FALSE);
-    action = gtk_action_group_get_action (priv->action_group, "create-dir");
-    gtk_action_set_sensitive (GTK_ACTION (action), FALSE);  
     action = gtk_action_group_get_action (priv->action_group, "remove-file");
     gtk_action_set_sensitive (GTK_ACTION (action), TRUE);     
   }
 }
 
 static gboolean
-cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnDataComposition * dc)
+cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnAudioComposition * dc)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   
   if ((event->button == 1) && (event->type == GDK_BUTTON_PRESS)) {
     GtkTreePath *path;
@@ -592,29 +556,22 @@
   return FALSE;
 }
 
+/*
 static gint
-directory_tree_sortfunc (GtkTreeModel * model, GtkTreeIter * a, GtkTreeIter * b, gpointer user_data)
+song_tree_sortfunc (GtkTreeModel * model, GtkTreeIter * a, GtkTreeIter * b, gpointer user_data)
 {
-  /* adapted from gnomebaker */
-  gchar *aname, *bname;
-  DataCompositionEntryType atype = -1, btype = -1;
+  guint *apos, *bpos;
+  AudioCompositionEntryType atype = -1, btype = -1;
   gint result = 0;
 
-  gtk_tree_model_get (model, a, DATA_COMPOSITION_COLUMN_CONTENT, &aname, DATA_COMPOSITION_COLUMN_TYPE, &atype, -1);
-  gtk_tree_model_get (model, b, DATA_COMPOSITION_COLUMN_CONTENT, &bname, DATA_COMPOSITION_COLUMN_TYPE, &btype, -1);
+  gtk_tree_model_get (model, a, AUDIO_COMPOSITION_COLUMN_POS, &apos, AUDIO_COMPOSITION_COLUMN_TYPE, &atype, -1);
+  gtk_tree_model_get (model, b, AUDIO_COMPOSITION_COLUMN_POS, &bpos, AUDIO_COMPOSITION_COLUMN_TYPE, &btype, -1);
 
-  if ( (atype == DATA_COMPOSITION_TYPE_DIRECTORY) && (btype != DATA_COMPOSITION_TYPE_DIRECTORY) )
-    result = -1;
-  else if ( (atype != DATA_COMPOSITION_TYPE_DIRECTORY) && (btype == DATA_COMPOSITION_TYPE_DIRECTORY) )
-    result = 1;
-  else
-    result = g_ascii_strcasecmp (aname, bname);
+  result = apos - bpos;
 
-  g_free (aname);
-  g_free (bname);
-
   return result;
 }
+*/
 
 static gboolean
 file_exists_on_same_level (GtkTreeModel * model, GtkTreePath * path, gboolean skip_path, const gchar *filename)
@@ -634,7 +591,7 @@
         continue;
       }
 
-      gtk_tree_model_get (model, &current_iter, DATA_COMPOSITION_COLUMN_CONTENT, &current_filename, -1);
+      gtk_tree_model_get (model, &current_iter, AUDIO_COMPOSITION_COLUMN_CONTENT, &current_filename, -1);
       if (strcmp (current_filename, filename) == 0) {
         g_free (current_filename);
         gtk_tree_path_free (current_path);
@@ -650,10 +607,11 @@
   return FALSE;
 }
 
+/*
 static void
-cb_cell_file_edited (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnDataComposition * dc)
+cb_cell_file_edited (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnAudioComposition * dc)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   
   GtkTreeIter iter;
   GtkTreeModel *model;
@@ -672,18 +630,36 @@
       xfce_err (_("A file with the same name is already present in the composition"));
     }
     else {
-      gtk_tree_store_set (GTK_TREE_STORE (model), &iter, DATA_COMPOSITION_COLUMN_CONTENT, newtext, -1);
+      gtk_tree_store_set (GTK_TREE_STORE (model), &iter, AUDIO_COMPOSITION_COLUMN_CONTENT, newtext, -1);
     }
   }
 
   gtk_tree_path_free (real_path);
 }
+*/
 
 static void
-cb_adding_done (XfburnAddingProgress *progress, XfburnDataComposition *dc)
+tracks_changed (XfburnAudioComposition *ac)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (ac);
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+  int i=0;
 
+  /* fix up position numbers based on the tree model */
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
+  if (gtk_tree_model_get_iter_first (model, &iter)) {
+    do {
+      gtk_tree_store_set (GTK_TREE_STORE (model), &iter, AUDIO_COMPOSITION_COLUMN_POS, ++i, -1);
+    } while (gtk_tree_model_iter_next (model, &iter));
+  }
+}
+
+static void
+cb_adding_done (XfburnAddingProgress *progress, XfburnAudioComposition *dc)
+{
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
+
   gtk_widget_hide (priv->progress);
 
   if (priv->selected_files) {
@@ -703,13 +679,16 @@
   }
 
   g_free (priv->thread_params);
+
+  tracks_changed (dc);
+
   xfburn_default_cursor (priv->content);
 }
 
 static void
-action_rename_selection (GtkAction * action, XfburnDataComposition * dc)
+action_rename_selection (GtkAction * action, XfburnAudioComposition * dc)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   
   GtkTreeSelection *selection;
   GtkTreeModel *model;
@@ -721,7 +700,7 @@
   list = gtk_tree_selection_get_selected_rows (selection, &model);
 
   path = (GtkTreePath *) list->data;
-  column = gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), DATA_COMPOSITION_COLUMN_CONTENT - 1);
+  column = gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), AUDIO_COMPOSITION_COLUMN_CONTENT - 1);
   /* -1 because of COLUMN_ICON */
   
   gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->content), path, column, TRUE);
@@ -731,84 +710,9 @@
 }
 
 static void
-action_create_directory (GtkAction * action, XfburnDataComposition * dc)
+remove_row_reference (GtkTreeRowReference *reference, XfburnAudioCompositionPrivate *priv)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
-  
-  GtkTreeModel *model;
-  GtkTreeSelection *selection;
-  GList *selected_paths = NULL;
-  GtkTreePath *path_where_insert = NULL;
-  GtkTreeIter iter_where_insert, iter_directory;
-  DataCompositionEntryType type = -1;
-  gchar *humansize = NULL;
-  
-  GtkTreePath *inserted_path = NULL;
-  gchar *directory_text = NULL;
-  
-  GtkTreeViewColumn *column;
   GtkTreePath *path = NULL;
-  
-  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->content));
-  selected_paths = gtk_tree_selection_get_selected_rows (selection, NULL);
-  model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
-    
-  if (selected_paths) {
-    path_where_insert = (GtkTreePath *) (selected_paths->data);
-
-    gtk_tree_model_get_iter (model, &iter_where_insert, path_where_insert);
-    gtk_tree_model_get (model, &iter_where_insert, DATA_COMPOSITION_COLUMN_TYPE, &type, -1);
-  }
-  
-  if (type == DATA_COMPOSITION_TYPE_DIRECTORY) {
-    gtk_tree_store_append (GTK_TREE_STORE (model), &iter_directory, &iter_where_insert);
-    gtk_tree_view_expand_row (GTK_TREE_VIEW (priv->content), path_where_insert, FALSE);
-  } else if (type == DATA_COMPOSITION_TYPE_FILE) {
-    GtkTreeIter parent;
-        
-    if (gtk_tree_model_iter_parent (model, &parent, &iter_where_insert))
-      gtk_tree_store_append (GTK_TREE_STORE (model), &iter_directory, &parent);
-    else
-      gtk_tree_store_append (GTK_TREE_STORE (model), &iter_directory, NULL);
-  } else {
-    gtk_tree_store_append (GTK_TREE_STORE (model), &iter_directory, NULL);
-  }
-  
-  humansize = xfburn_humanreadable_filesize (4);
-  
-  inserted_path = gtk_tree_model_get_path (model, &iter_directory);
-  if (file_exists_on_same_level (model, inserted_path, TRUE, _("New directory")))
-    directory_text = g_strdup_printf ("%s %d", _("New directory"), ++(priv->n_new_directory));
-  else
-    directory_text = g_strdup (_("New directory"));
-  gtk_tree_path_free (inserted_path);
-  
-  gtk_tree_store_set (GTK_TREE_STORE (model), &iter_directory,
-                      DATA_COMPOSITION_COLUMN_ICON, icon_directory,                     
-                      DATA_COMPOSITION_COLUMN_CONTENT, directory_text,
-                      DATA_COMPOSITION_COLUMN_HUMANSIZE, humansize,
-                      DATA_COMPOSITION_COLUMN_SIZE, (guint64) 4,
-                      DATA_COMPOSITION_COLUMN_TYPE, DATA_COMPOSITION_TYPE_DIRECTORY, -1);
-  g_free (directory_text);
-  g_free (humansize);
-  
-  xfburn_data_disc_usage_add_size (XFBURN_DATA_DISC_USAGE (priv->disc_usage), 4);
-  
-  gtk_widget_realize (priv->content);
-  
-  /* put the cell renderer in edition mode */
-  column = gtk_tree_view_get_column (GTK_TREE_VIEW (priv->content), DATA_COMPOSITION_COLUMN_CONTENT - 1);
-  /* -1 because of COLUMN_ICON */
-  path = gtk_tree_model_get_path (model, &iter_directory);
-  
-  gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->content), path, column, TRUE);
-  gtk_tree_path_free (path);
-}
-
-static void
-remove_row_reference (GtkTreeRowReference *reference, XfburnDataCompositionPrivate *priv)
-{
-  GtkTreePath *path = NULL;
   GtkTreeModel *model;
   
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
@@ -821,8 +725,8 @@
       GtkTreeIter parent, iter_temp;
       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);
+      gtk_tree_model_get (model, &iter, AUDIO_COMPOSITION_COLUMN_SIZE, &size, -1);
+      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)) {
@@ -830,12 +734,11 @@
         gchar *humansize = NULL;
 
         /* updates parent directories size */
-        gtk_tree_model_get (model, &parent, DATA_COMPOSITION_COLUMN_SIZE, &old_size, -1);
+        gtk_tree_model_get (model, &parent, AUDIO_COMPOSITION_COLUMN_SIZE, &old_size, -1);
 
         humansize = xfburn_humanreadable_filesize (old_size - size);
         gtk_tree_store_set (GTK_TREE_STORE (model), &parent, 
-                            DATA_COMPOSITION_COLUMN_HUMANSIZE, humansize,
-                            DATA_COMPOSITION_COLUMN_SIZE, old_size - size, -1);
+                            AUDIO_COMPOSITION_COLUMN_SIZE, old_size - size, -1);
 
         iter_temp = parent;
 
@@ -852,9 +755,9 @@
 }
 
 static void
-action_remove_selection (GtkAction * action, XfburnDataComposition * dc)
+action_remove_selection (GtkAction * action, XfburnAudioComposition * dc)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   
   GtkTreeSelection *selection;
   GtkTreeModel *model;
@@ -886,9 +789,9 @@
 
 
 static void
-action_add_selected_files (GtkAction *action, XfburnDataComposition *dc)
+action_add_selected_files (GtkAction *action, XfburnAudioComposition *dc)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   XfburnFileBrowser *browser = xfburn_main_window_get_file_browser (xfburn_main_window_get_instance ());
   
   gchar *selected_files = NULL;
@@ -916,7 +819,7 @@
       priv->path_where_insert = (GtkTreePath *) (selected_paths->data);
 
       gtk_tree_model_get_iter (params->model, &params->iter_where_insert, priv->path_where_insert);
-      gtk_tree_model_get (params->model, &params->iter_where_insert, DATA_COMPOSITION_COLUMN_TYPE, &params->type, -1);
+      gtk_tree_model_get (params->model, &params->iter_where_insert, AUDIO_COMPOSITION_COLUMN_TYPE, &params->type, -1);
     }
     
     priv->selected_files = selected_files;
@@ -930,25 +833,23 @@
 }
 
 static void
-action_clear (GtkAction * action, XfburnDataComposition * dc)
+action_clear (GtkAction * action, XfburnAudioComposition * dc)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   
   GtkTreeModel *model;
 
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
   gtk_tree_store_clear (GTK_TREE_STORE (model));
   
-  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
 cb_content_drag_data_get (GtkWidget * widget, GdkDragContext * dc,
-                          GtkSelectionData * data, guint info, guint time, XfburnDataComposition * content)
+                          GtkSelectionData * data, guint info, guint time, XfburnAudioComposition * content)
 {
-  if (info == DATA_COMPOSITION_DND_TARGET_INSIDE) {
+  if (info == AUDIO_COMPOSITION_DND_TARGET_INSIDE) {
     GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
     GtkTreeModel *model;
     GList *selected_rows = NULL, *row = NULL;
@@ -979,7 +880,7 @@
 }
 
 static void
-set_modified (XfburnDataCompositionPrivate *priv)
+set_modified (XfburnAudioCompositionPrivate *priv)
 {
   if (!(priv->modified)) {
     XfburnMainWindow *mainwin;
@@ -1000,18 +901,17 @@
 }
 
 static gboolean
-thread_add_file_to_list_with_name (const gchar *name, XfburnDataComposition * dc, 
+thread_add_file_to_list_with_name (const gchar *name, XfburnAudioComposition * dc, 
                                    GtkTreeModel * model, const gchar * path,
                                    GtkTreeIter * iter, GtkTreeIter * insertion, GtkTreeViewDropPosition position)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   
   struct stat s;
 
   if ((stat (path, &s) == 0)) {
     gchar *basename = NULL;
-    gchar *humansize = NULL;
-    GtkTreeIter *parent = NULL;
+    //gchar *humansize = NULL;
     GtkTreePath *tree_path = NULL;
 
     if (!S_ISDIR (s.st_mode) && !S_ISREG (s.st_mode)) {
@@ -1030,36 +930,9 @@
     
     xfburn_adding_progress_pulse (XFBURN_ADDING_PROGRESS (priv->progress));
     
-    /* find parent */
-    switch (position){
-      case GTK_TREE_VIEW_DROP_BEFORE:
-      case GTK_TREE_VIEW_DROP_AFTER:
-      if (insertion) {
-          GtkTreeIter iter_parent;
-          
-          gdk_threads_enter ();
-          if (gtk_tree_model_iter_parent (model, &iter_parent, insertion)) {
-            parent = g_new0 (GtkTreeIter, 1);
-            memcpy (parent, &iter_parent, sizeof (GtkTreeIter));
-          }
-          gdk_threads_leave ();
-        }
-        break;
-      case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
-      case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
-        parent = g_new0 (GtkTreeIter, 1);
-        memcpy (parent, insertion, sizeof (GtkTreeIter));
-        break;
-    }
-  
     /* check if the filename is valid */
     gdk_threads_enter ();
-    if (parent) {
-      tree_path = gtk_tree_model_get_path (model, parent);
-      gtk_tree_path_down (tree_path);
-    } else {
-      tree_path = gtk_tree_path_new_first ();
-    }
+    tree_path = gtk_tree_path_new_first ();
     gdk_threads_leave ();
     
     gdk_threads_enter ();
@@ -1068,7 +941,6 @@
 
       gtk_tree_path_free (tree_path);
       gdk_threads_leave ();
-      g_free (parent);
       return FALSE;
     }
     gtk_tree_path_free (tree_path);
@@ -1080,28 +952,20 @@
       GError *error = NULL;
       const gchar *filename = NULL;
       guint64 total_size = 4;
+      GtkTreeIter *iter_last;
 
       dir = g_dir_open (path, 0, &error);
       if (!dir) {
         g_warning ("unable to open directory : %s", error->message);
 
         g_error_free (error);
-        g_free (parent);
         
         return FALSE;
       }
 
-      gdk_threads_enter ();
-      gtk_tree_store_append (GTK_TREE_STORE (model), iter, parent);
+      /* FIXME: if insertion != NULL, we will overwrite its contents, is that OK? */
+      iter_last = insertion;
 
-      gtk_tree_store_set (GTK_TREE_STORE (model), iter,
-                          DATA_COMPOSITION_COLUMN_ICON, icon_directory,
-                          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);
-      gdk_threads_leave ();
-
       while ((filename = g_dir_read_name (dir))) {
         GtkTreeIter new_iter;
         gchar *new_path = NULL;
@@ -1110,79 +974,61 @@
         if (new_path) {
           guint64 size;
 
-          if (thread_add_file_to_list (dc, model, new_path, &new_iter, iter, GTK_TREE_VIEW_DROP_INTO_OR_AFTER)) {
+          if (thread_add_file_to_list (dc, model, new_path, &new_iter, iter_last, position)) {
             gdk_threads_enter ();
-            gtk_tree_model_get (model, &new_iter, DATA_COMPOSITION_COLUMN_SIZE, &size, -1);
+            gtk_tree_model_get (model, &new_iter, AUDIO_COMPOSITION_COLUMN_SIZE, &size, -1);
             gdk_threads_leave ();
             total_size += size; 
+            if (iter_last == NULL)
+              iter_last = g_new (GtkTreeIter, 1);
+            *iter_last = new_iter;
+            position = GTK_TREE_VIEW_DROP_AFTER;
           }
           
           g_free (new_path);
         }
       }
 
-      humansize = xfburn_humanreadable_filesize (total_size);
-      gdk_threads_enter ();
-      gtk_tree_store_set (GTK_TREE_STORE (model), iter,
-                          DATA_COMPOSITION_COLUMN_HUMANSIZE, humansize, DATA_COMPOSITION_COLUMN_SIZE, total_size, -1);
-      gdk_threads_leave ();
+      if (insertion == NULL)
+        g_free (iter_last);
 
       g_dir_close (dir);
     }
     /* new file */
     else if (S_ISREG (s.st_mode)) {
-#ifdef HAVE_THUNAR_VFS
-      GdkScreen *screen;
-      GtkIconTheme *icon_theme;
-      ThunarVfsMimeDatabase *mime_database = NULL;
-      ThunarVfsMimeInfo *mime_info = NULL;
-      const gchar *mime_icon_name = NULL;
-      GdkPixbuf *mime_icon = NULL;
-      gint x,y;
-	  
       gdk_threads_enter ();
-      screen = gtk_widget_get_screen (GTK_WIDGET (dc));
-      icon_theme = gtk_icon_theme_get_for_screen (screen);
-      
-      mime_database = thunar_vfs_mime_database_get_default ();
-      mime_info = thunar_vfs_mime_database_get_info_for_file (mime_database, path, NULL);
-          
-      gtk_icon_size_lookup (GTK_ICON_SIZE_SMALL_TOOLBAR, &x, &y);
-      mime_icon_name = thunar_vfs_mime_info_lookup_icon_name (mime_info, icon_theme);
-      mime_icon = gtk_icon_theme_load_icon (icon_theme, mime_icon_name, x, 0, NULL);
-#endif
-	
-      gtk_tree_store_append (GTK_TREE_STORE (model), iter, parent);
+      if (insertion != NULL) {
+        if (position == GTK_TREE_VIEW_DROP_AFTER)
+          gtk_tree_store_insert_after (GTK_TREE_STORE (model), iter, NULL, insertion);
+        else if (position == GTK_TREE_VIEW_DROP_BEFORE)
+          gtk_tree_store_insert_before (GTK_TREE_STORE (model), iter, NULL, insertion);
+        else
+          g_error ("I wasn't expecting this position!");
+      } else
+        gtk_tree_store_append (GTK_TREE_STORE (model), iter, NULL);
+      gdk_threads_leave ();
 
-      humansize = xfburn_humanreadable_filesize (s.st_size);
+      //humansize = xfburn_humanreadable_filesize (s.st_size);
 
-#ifdef HAVE_THUNAR_VFS
-      gtk_tree_store_set (GTK_TREE_STORE (model), iter,
-                          DATA_COMPOSITION_COLUMN_ICON, (G_IS_OBJECT (mime_icon) ? mime_icon : icon_file),
-                          DATA_COMPOSITION_COLUMN_CONTENT, name,
-                          DATA_COMPOSITION_COLUMN_HUMANSIZE, humansize,
-                          DATA_COMPOSITION_COLUMN_SIZE, (guint64) s.st_size, DATA_COMPOSITION_COLUMN_PATH, path,
-                          DATA_COMPOSITION_COLUMN_TYPE, DATA_COMPOSITION_TYPE_FILE, -1);
-#else
-      gtk_tree_store_set (GTK_TREE_STORE (model), iter,
-                          DATA_COMPOSITION_COLUMN_ICON, icon_file,
-                          DATA_COMPOSITION_COLUMN_CONTENT, name,
-                          DATA_COMPOSITION_COLUMN_HUMANSIZE, humansize,
-                          DATA_COMPOSITION_COLUMN_SIZE, (guint64) s.st_size, DATA_COMPOSITION_COLUMN_PATH, path,
-                          DATA_COMPOSITION_COLUMN_TYPE, DATA_COMPOSITION_TYPE_FILE, -1);
-#endif
+      if (priv->n_tracks == 99) {
+        gdk_threads_enter ();
+        xfce_err (_("You can only have a maximum of 99 tracks!"));
+        gdk_threads_leave ();
+        return FALSE;
+      }
 
-      xfburn_data_disc_usage_add_size (XFBURN_DATA_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);
-      thunar_vfs_mime_info_unref (mime_info);
-      g_object_unref (mime_database);
+      gdk_threads_enter ();
+      gtk_tree_store_set (GTK_TREE_STORE (model), iter,
+                          AUDIO_COMPOSITION_COLUMN_POS, ++priv->n_tracks,
+                          AUDIO_COMPOSITION_COLUMN_CONTENT, name,
+                          AUDIO_COMPOSITION_COLUMN_SIZE, (guint64) s.st_size, AUDIO_COMPOSITION_COLUMN_PATH, path,
+                          AUDIO_COMPOSITION_COLUMN_HUMANLENGTH, "00:00",
+                          AUDIO_COMPOSITION_COLUMN_TYPE, AUDIO_COMPOSITION_TYPE_RAW, -1);
       gdk_threads_leave ();
-#endif
+
+      //xfburn_disc_usage_add_size (XFBURN_DISC_USAGE (priv->disc_usage), s.st_size);
     }
-    g_free (humansize);
-    g_free (parent);
+    //g_free (humansize);
 
     set_modified (priv);
     return TRUE;
@@ -1195,7 +1041,7 @@
 static void
 thread_add_files_cli (ThreadAddFilesCLIParams *params)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (params->dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (params->dc);
   GtkTreeIter iter;
 
   GtkTreeModel *model;
@@ -1237,11 +1083,11 @@
 static void
 thread_add_files_action (ThreadAddFilesActionParams *params)
 {
-  XfburnDataComposition *dc = params->dc;
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioComposition *dc = params->dc;
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   GtkTreeModel *model = params->model;
   GtkTreeIter iter_where_insert = params->iter_where_insert;
-  GtkTreePath *path_where_insert = priv->path_where_insert;
+  //GtkTreePath *path_where_insert = priv->path_where_insert;
   const gchar * file = NULL;
 
 
@@ -1268,29 +1114,7 @@
     }
 
     /* add files to the disc content */
-    if (params->type == DATA_COMPOSITION_TYPE_DIRECTORY) {
-      guint64 old_size, size;
-      gchar *humansize = NULL;
-      
-      thread_add_file_to_list (dc, model, full_path, &iter, &iter_where_insert, GTK_TREE_VIEW_DROP_INTO_OR_AFTER);
-      gdk_threads_enter ();
-      gtk_tree_view_expand_row (GTK_TREE_VIEW (priv->content), path_where_insert, FALSE);
-      
-      /* update parent directory size */
-      gtk_tree_model_get (model, &iter_where_insert, DATA_COMPOSITION_COLUMN_SIZE, &old_size, -1);
-      gtk_tree_model_get (model, &iter, DATA_COMPOSITION_COLUMN_SIZE, &size, -1);
-      gdk_threads_leave ();
-      
-      humansize = xfburn_humanreadable_filesize (old_size + size);
-      
-      gdk_threads_enter ();
-      gtk_tree_store_set (GTK_TREE_STORE (model), &iter_where_insert, 
-                          DATA_COMPOSITION_COLUMN_HUMANSIZE, humansize,
-                          DATA_COMPOSITION_COLUMN_SIZE, old_size + size, -1);
-      gdk_threads_leave ();
-      
-      g_free (humansize);
-    } else if (params->type == DATA_COMPOSITION_TYPE_FILE) {
+    if (params->type == AUDIO_COMPOSITION_TYPE_RAW) {
       GtkTreeIter parent;
       gboolean has_parent;
 
@@ -1314,10 +1138,10 @@
 }
 
 static gboolean
-thread_add_file_to_list (XfburnDataComposition * dc, GtkTreeModel * model, 
+thread_add_file_to_list (XfburnAudioComposition * dc, GtkTreeModel * model, 
                          const gchar * path, GtkTreeIter * iter, GtkTreeIter * insertion, GtkTreeViewDropPosition position)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   struct stat s;
   gboolean ret = FALSE;
   
@@ -1341,42 +1165,52 @@
   return ret;
 }
 
-static gboolean
-copy_entry_to (XfburnDataComposition *dc, GtkTreeIter *src, GtkTreeIter *dest, GtkTreeViewDropPosition position)
+static GtkTreeIter * 
+copy_entry_to (XfburnAudioComposition *dc, GtkTreeIter *src, GtkTreeIter *dest, GtkTreeViewDropPosition position)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   
-  gboolean ret = FALSE;
-  
   GtkTreeModel *model;
-  GtkTreeIter iter_new;
+  GtkTreeIter *iter_new = g_new0 (GtkTreeIter, 1);
   
   GdkPixbuf *icon = NULL;
+  gint pos = 0;
   gchar *name = NULL;
-  gchar *humansize = NULL;
   guint64 size = 0;
   gchar *path = NULL;
-  DataCompositionEntryType type;
+  gchar *humanlength;
+  AudioCompositionEntryType type;
 
   GtkTreePath *path_level = NULL;
   
-  guint n_children = 0;
-  guint i;
+  //guint n_children = 0;
+  //guint i;
   GtkTreePath *path_src = NULL;
   
   model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
   
-  gtk_tree_model_get (model, src, DATA_COMPOSITION_COLUMN_ICON, &icon, DATA_COMPOSITION_COLUMN_CONTENT, &name,
-                      DATA_COMPOSITION_COLUMN_HUMANSIZE, &humansize, DATA_COMPOSITION_COLUMN_SIZE, &size,
-                      DATA_COMPOSITION_COLUMN_PATH, &path, DATA_COMPOSITION_COLUMN_TYPE, &type, -1);
+  gtk_tree_model_get (model, src, 
+                      AUDIO_COMPOSITION_COLUMN_POS, &pos, 
+                      AUDIO_COMPOSITION_COLUMN_CONTENT, &name,
+                      AUDIO_COMPOSITION_COLUMN_SIZE, &size,
+                      AUDIO_COMPOSITION_COLUMN_PATH, &path, 
+                      AUDIO_COMPOSITION_COLUMN_HUMANLENGTH, &humanlength, 
+                      AUDIO_COMPOSITION_COLUMN_TYPE, &type,
+                      -1);
   
-  switch (position) {
+  DBG ("dest = %p", dest);
+  if (dest == NULL)
+    gtk_tree_store_append (GTK_TREE_STORE (model), iter_new, dest);                          
+  else switch (position) {
     case GTK_TREE_VIEW_DROP_BEFORE:
+      gtk_tree_store_insert_before (GTK_TREE_STORE (model), iter_new, NULL, dest);
+      break;
     case GTK_TREE_VIEW_DROP_AFTER:
-      gtk_tree_store_insert_before (GTK_TREE_STORE (model), &iter_new, NULL, dest);
+      gtk_tree_store_insert_after (GTK_TREE_STORE (model), iter_new, NULL, dest);
       break;
     case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
     case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
+      /* FIXME: do we still need this case? */
       if (dest) {
         path_level = gtk_tree_model_get_path (model, dest);
         gtk_tree_path_down (path_level);
@@ -1384,65 +1218,71 @@
         path_level = gtk_tree_path_new_first ();
       }
     
+    /*
       if (file_exists_on_same_level (model, path_level, FALSE, name)) {
         xfce_warn (_("A file named \"%s\" already exists in this directory, the file hasn't been added"), name);
         goto cleanup;
       }
+      */
       
       gtk_tree_path_free (path_level);
       
-      gtk_tree_store_append (GTK_TREE_STORE (model), &iter_new, dest);                          
+      gtk_tree_store_append (GTK_TREE_STORE (model), iter_new, dest);                          
       break;
   }
   
-  gtk_tree_store_set (GTK_TREE_STORE (model), &iter_new, DATA_COMPOSITION_COLUMN_ICON, icon, 
-                      DATA_COMPOSITION_COLUMN_CONTENT, name, DATA_COMPOSITION_COLUMN_HUMANSIZE, humansize,
-                      DATA_COMPOSITION_COLUMN_SIZE, size, DATA_COMPOSITION_COLUMN_PATH, path,
-                      DATA_COMPOSITION_COLUMN_TYPE, type, -1);
+  gtk_tree_store_set (GTK_TREE_STORE (model), iter_new,
+                      AUDIO_COMPOSITION_COLUMN_POS, pos, 
+                      AUDIO_COMPOSITION_COLUMN_CONTENT, name,
+                      AUDIO_COMPOSITION_COLUMN_SIZE, size,
+                      AUDIO_COMPOSITION_COLUMN_PATH, path, 
+                      AUDIO_COMPOSITION_COLUMN_HUMANLENGTH, humanlength, 
+                      AUDIO_COMPOSITION_COLUMN_TYPE, type,
+                      -1);
     
   /* copy children */
+  /*
   n_children = gtk_tree_model_iter_n_children (model, src);
 
   for (i = 0; i < n_children; i++) {
     GtkTreeIter iter_child;
 
     if (gtk_tree_model_iter_nth_child (model, &iter_child, src, i))
-      copy_entry_to (dc, &iter_child, &iter_new, GTK_TREE_VIEW_DROP_INTO_OR_AFTER);
+      copy_entry_to (dc, &iter_child, iter_new, GTK_TREE_VIEW_DROP_INTO_OR_AFTER);
   }
 
   path_src = gtk_tree_model_get_path (model, src);
   if (n_children > 0 && gtk_tree_view_row_expanded (GTK_TREE_VIEW (priv->content), path_src)) {
     GtkTreePath *path_new = NULL;
     
-    path_new = gtk_tree_model_get_path (model, &iter_new);
+    path_new = gtk_tree_model_get_path (model, iter_new);
     gtk_tree_view_expand_row (GTK_TREE_VIEW (priv->content), path_new, FALSE);
     
     gtk_tree_path_free (path_new);
   }
+  */
   gtk_tree_path_free (path_src);
   
-  ret =  TRUE;
-  
-cleanup:
+//cleanup:
   if (G_LIKELY (G_IS_OBJECT (icon)))
     g_object_unref (icon);
   g_free (name);
-  g_free (humansize);
+  g_free (humanlength);
   g_free (path);
   
-  return ret;
+  return iter_new;
 }
 
 static void
 cb_content_drag_data_rcv (GtkWidget * widget, GdkDragContext * dc, guint x, guint y, GtkSelectionData * sd,
-                          guint info, guint t, XfburnDataComposition * composition)
+                          guint info, guint t, XfburnAudioComposition * composition)
 {    
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (composition);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (composition);
   
   GtkTreeModel *model;
   GtkTreePath *path_where_insert = NULL;
   GtkTreeViewDropPosition position;
-  GtkTreeIter iter_where_insert;
+  GtkTreeIter *iter_where_insert;
 
   g_return_if_fail (sd);
   g_return_if_fail (sd->data);
@@ -1457,26 +1297,29 @@
   if (sd->target == gdk_atom_intern ("XFBURN_TREE_PATHS", FALSE)) {
     GList *row = NULL, *selected_rows = NULL;
     GtkTreeIter *iter = NULL;
-    DataCompositionEntryType type_dest = -1;
+    GtkTreeIter *iter_prev = NULL;
+    AudioCompositionEntryType type_dest = -1;
     
     xfburn_adding_progress_show (XFBURN_ADDING_PROGRESS (priv->progress));
 
     row = selected_rows = *((GList **) sd->data);
     
-    if (path_where_insert) {      
-      gtk_tree_model_get_iter (model, &iter_where_insert, path_where_insert);
-      iter = &iter_where_insert;
+    if (path_where_insert) {
+      iter_where_insert = g_new0 (GtkTreeIter, 1);
+      gtk_tree_model_get_iter (model, iter_where_insert, path_where_insert);
+      iter_prev = iter_where_insert;
       
-      gtk_tree_model_get (model, &iter_where_insert, DATA_COMPOSITION_COLUMN_TYPE, &type_dest, -1);
+      gtk_tree_model_get (model, iter_where_insert, AUDIO_COMPOSITION_COLUMN_TYPE, &type_dest, -1);
       
-      if (type_dest == DATA_COMPOSITION_TYPE_FILE) {
+      if (type_dest == AUDIO_COMPOSITION_TYPE_RAW) {
         if (position == GTK_TREE_VIEW_DROP_INTO_OR_AFTER)
           position = GTK_TREE_VIEW_DROP_AFTER;
         else if (position == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE)
           position = GTK_TREE_VIEW_DROP_BEFORE;
       }      
     } else {
-      position = GTK_TREE_VIEW_DROP_INTO_OR_AFTER;
+      //position = GTK_TREE_VIEW_DROP_INTO_OR_AFTER;
+      position = GTK_TREE_VIEW_DROP_AFTER;
     }
     
     /* copy selection */
@@ -1484,7 +1327,7 @@
       GtkTreePath *path_src = NULL;
       GtkTreeIter iter_src;
       GtkTreeRowReference *reference = NULL;
-      DataCompositionEntryType type;
+      AudioCompositionEntryType type;
       guint64 size = 0;
       
       reference = (GtkTreeRowReference *) row->data;
@@ -1497,6 +1340,8 @@
         continue;
       }
       
+      /*
+      DBG ("path_where_insert = %p", path_where_insert);
       if (path_where_insert && (position == GTK_TREE_VIEW_DROP_AFTER || position == GTK_TREE_VIEW_DROP_BEFORE) 
           && (gtk_tree_path_get_depth (path_where_insert) == gtk_tree_path_get_depth (path_src))) {
           gtk_tree_path_free (path_src);
@@ -1505,41 +1350,16 @@
           row = g_list_next (row);
           continue;
       }
+      */
 
-      if (path_where_insert && type == DATA_COMPOSITION_TYPE_DIRECTORY 
-          && gtk_tree_path_is_descendant (path_where_insert, path_src)) {
-
-        gtk_tree_path_free (path_src);
-        gtk_tree_path_free (path_where_insert);
-        gtk_tree_row_reference_free (reference);
-            
-        gtk_drag_finish (dc, FALSE, FALSE, t);
-        return;
-      }
-
       gtk_tree_model_get_iter (model, &iter_src, path_src);
-      gtk_tree_model_get (model, &iter_src, DATA_COMPOSITION_COLUMN_TYPE, &type,
-                          DATA_COMPOSITION_COLUMN_SIZE, &size, -1);
+      gtk_tree_model_get (model, &iter_src, AUDIO_COMPOSITION_COLUMN_TYPE, &type,
+                          AUDIO_COMPOSITION_COLUMN_SIZE, &size, -1);
       
       /* copy entry */
-      if (copy_entry_to (composition, &iter_src, iter, position)) {                
+      if ((iter = copy_entry_to (composition, &iter_src, iter_prev, position)) != NULL) {
         GtkTreePath *path_parent = gtk_tree_path_copy (path_src);
         
-        /* update new parent size */
-        if (iter && (position == GTK_TREE_VIEW_DROP_INTO_OR_AFTER 
-                   || position == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE)) {
-          guint64 old_size = 0;
-          gchar *parent_humansize = NULL;
-
-          gtk_tree_model_get (model, iter, DATA_COMPOSITION_COLUMN_SIZE, &old_size, -1);
-            
-          parent_humansize = xfburn_humanreadable_filesize (old_size + size);
-          gtk_tree_store_set (GTK_TREE_STORE (model), iter, DATA_COMPOSITION_COLUMN_HUMANSIZE, parent_humansize,
-                              DATA_COMPOSITION_COLUMN_SIZE, old_size + size, -1);
-        
-          g_free (parent_humansize);
-        }
-          
         if (dc->action == GDK_ACTION_MOVE) {       
           /* remove source entry */
           if (gtk_tree_path_up (path_parent) && path_where_insert && 
@@ -1547,24 +1367,24 @@
             /* update parent size and humansize */
             GtkTreeIter iter_parent;          
             guint64 old_size;
-            gchar *parent_humansize = NULL;
             
             gtk_tree_model_iter_parent (model, &iter_parent, &iter_src);                
-            gtk_tree_model_get (model, &iter_parent, DATA_COMPOSITION_COLUMN_SIZE, &old_size, -1);
+            gtk_tree_model_get (model, &iter_parent, AUDIO_COMPOSITION_COLUMN_SIZE, &old_size, -1);
          
-            parent_humansize = xfburn_humanreadable_filesize (old_size - size);
             gtk_tree_store_set (GTK_TREE_STORE (model), &iter_parent, 
-                                DATA_COMPOSITION_COLUMN_HUMANSIZE, parent_humansize,
-                                DATA_COMPOSITION_COLUMN_SIZE, old_size - size, -1);
-            g_free (parent_humansize);
+                                AUDIO_COMPOSITION_COLUMN_SIZE, old_size - size, -1);
           }
         
           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);
+        g_free (iter_prev);
+        iter_prev = iter;
+        /* selection is in reverse order, so insert next item before */
+        position = GTK_TREE_VIEW_DROP_BEFORE;
       }
 
       gtk_tree_path_free (path_src);
@@ -1573,11 +1393,14 @@
       row = g_list_next (row);
     }
     
+    g_free (iter);
     g_list_free (selected_rows);    
     gtk_drag_finish (dc, TRUE, FALSE, t);
     
     if (path_where_insert)
       gtk_tree_path_free (path_where_insert);  
+
+    tracks_changed (composition);
     gtk_widget_hide (priv->progress);
     xfburn_default_cursor (priv->content);
   }
@@ -1686,8 +1509,8 @@
 static void
 thread_add_files_drag (ThreadAddFilesDragParams *params)
 {
-  XfburnDataComposition *composition = params->composition;
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (composition);
+  XfburnAudioComposition *composition = params->composition;
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (composition);
 
   GtkTreeViewDropPosition position = params->position;
   GtkWidget *widget = params->widget;
@@ -1727,84 +1550,13 @@
   xfburn_adding_progress_done (XFBURN_ADDING_PROGRESS (priv->progress));
 }
 
-static void
-fill_image_with_composition (GtkTreeModel *model, IsoImage *image, IsoDir * parent, GtkTreeIter *iter)
-{
-  do {
-      DataCompositionEntryType type;
-      gchar *name = NULL;
-      gchar *src = NULL;
-      IsoNode *node = NULL;
-      IsoDir *dir = NULL;
-      int r;
-      
-      gtk_tree_model_get (model, iter, DATA_COMPOSITION_COLUMN_TYPE, &type,
-			  DATA_COMPOSITION_COLUMN_CONTENT, &name, DATA_COMPOSITION_COLUMN_PATH, &src, -1);
-
-      if (type == DATA_COMPOSITION_TYPE_DIRECTORY)
-        r = iso_tree_add_new_dir (parent, name, &dir);
-      else
-        r = iso_tree_add_node (image, parent, src, &node);
-
-      if (r < 0) {
-        if (r == ISO_NULL_POINTER)
-          g_error ("Failed adding %s as a node to the image: null pointer!", src);
-        else if (r == ISO_NODE_NAME_NOT_UNIQUE)
-          g_error ("Failed adding %s as a node to the image: node name not unique!", src);
-        /* else if (r == ISO_MEM_ERROR)
-          g_error ("Failed adding %s as a node to the image: memory error!", src); */
-        else
-          g_error ("Failed adding %s as a node to the image: code %d!", src, r);
-      }
-
-      /* FIXME: do we need to call iso_node_ref on node? Probably not... */
-      if (type != DATA_COMPOSITION_TYPE_DIRECTORY)
-        iso_node_set_name (node, name);
-
-      g_free (name);
-      g_free (src);
-
-      if (type == DATA_COMPOSITION_TYPE_DIRECTORY && gtk_tree_model_iter_has_child (model, iter)) {
-	GtkTreeIter child;
-
-        /* FIXME: this should not cause a sigfault... 
-        if (iso_node_get_type(node) != LIBISO_DIR)
-            g_error ("Expected %s to be a directory, but it isn't...\n", src);
-        */
-
-	gtk_tree_model_iter_children (model, &child, iter);
-	fill_image_with_composition (model, image, dir, &child);
-      }
-  } while (gtk_tree_model_iter_next (model, iter));
-}
-
-static IsoImage *
-generate_iso_image (XfburnDataComposition * dc)
-{
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
-  IsoImage *image = NULL;
-  GtkTreeModel *model;
-  GtkTreeIter iter;
-
-  iso_image_new (gtk_entry_get_text (GTK_ENTRY (priv->entry_volume_name)), &image);
-  iso_image_set_application_id (image, "Xfburn");
-  iso_image_set_data_preparer_id (image, "Xfburn");
-
-  model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
-  if (gtk_tree_model_get_iter_first (model, &iter)) {
-    fill_image_with_composition (model, image, iso_image_get_root (image), &iter);
-  }
-
-  return image;
-}
-
 /****************/
 /* loading code */
 /****************/
 typedef struct
 {
   gboolean started;
-  XfburnDataComposition *dc;
+  XfburnAudioComposition *dc;
   GQueue *queue_iter;
 } LoadParserStruct;
 
@@ -1827,7 +1579,7 @@
                         gpointer data, GError ** error)
 {
   LoadParserStruct * parserinfo = (LoadParserStruct *) data;
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (parserinfo->dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (parserinfo->dc);
 
   
   if (!(parserinfo->started) && !strcmp (element_name, "xfburn-composition"))
@@ -1921,7 +1673,7 @@
   }
 
   parserinfo.started = FALSE;
-  parserinfo.dc = XFBURN_DATA_COMPOSITION (composition);
+  parserinfo.dc = XFBURN_AUDIO_COMPOSITION (composition);
   parserinfo.queue_iter = g_queue_new ();
   gpcontext = g_markup_parse_context_new (&gmparser, 0, &parserinfo, NULL);
   if (!g_markup_parse_context_parse (gpcontext, file_contents, st.st_size, &err)) {
@@ -1968,7 +1720,7 @@
   gint i;
   gchar *name = NULL;
   gchar *source_path = NULL;
-  DataCompositionEntryType type;
+  AudioCompositionEntryType type;
 
   space = g_strnfill (gtk_tree_path_get_depth (path), '\t');
   
@@ -1981,24 +1733,15 @@
     g_free (space2);
   }
   
-  gtk_tree_model_get (model, iter, DATA_COMPOSITION_COLUMN_CONTENT, &name,
-                      DATA_COMPOSITION_COLUMN_PATH, &source_path,
-                      DATA_COMPOSITION_COLUMN_TYPE, &type, -1);
+  gtk_tree_model_get (model, iter, AUDIO_COMPOSITION_COLUMN_CONTENT, &name,
+                      AUDIO_COMPOSITION_COLUMN_PATH, &source_path,
+                      AUDIO_COMPOSITION_COLUMN_TYPE, &type, -1);
   
   fprintf (info->file_content, "%s", space);
   switch (type) {
-  case DATA_COMPOSITION_TYPE_FILE:
+  case AUDIO_COMPOSITION_TYPE_RAW:
     fprintf (info->file_content, "<file name=\"%s\" source=\"%s\" />\n", name, source_path);
     break;
-  case DATA_COMPOSITION_TYPE_DIRECTORY:
-    fprintf (info->file_content, "<directory name=\"%s\" source=\"%s\"", name, source_path);
-  
-    if (gtk_tree_model_iter_has_child (model, iter))
-      fprintf (info->file_content, ">\n");
-    else
-      fprintf (info->file_content, "/>\n");
-
-    break;
   }
 
 
@@ -2014,7 +1757,7 @@
 static void
 save_to_file (XfburnComposition * composition)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (composition);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (composition);
   FILE *file_content;
   GtkTreeModel *model;
   CompositionSaveInfo info = {};
@@ -2052,15 +1795,15 @@
 /* public methods */
 /******************/
 GtkWidget *
-xfburn_data_composition_new (void)
+xfburn_audio_composition_new (void)
 {
-  return g_object_new (xfburn_data_composition_get_type (), NULL);
+  return g_object_new (xfburn_audio_composition_get_type (), NULL);
 }
 
 void 
-xfburn_data_composition_add_files (XfburnDataComposition *dc, int filec, char **filenames)
+xfburn_audio_composition_add_files (XfburnAudioComposition *dc, int filec, char **filenames)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (dc);
   ThreadAddFilesCLIParams *params;
   
   if (filec > 0) {
@@ -2079,17 +1822,17 @@
 }
 
 void
-xfburn_data_composition_hide_toolbar (XfburnDataComposition * composition)
+xfburn_audio_composition_hide_toolbar (XfburnAudioComposition * composition)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (composition);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (composition);
   
   gtk_widget_hide (priv->toolbar);
 }
 
 void
-xfburn_data_composition_show_toolbar (XfburnDataComposition * composition)
+xfburn_audio_composition_show_toolbar (XfburnAudioComposition * composition)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (composition);
+  XfburnAudioCompositionPrivate *priv = XFBURN_AUDIO_COMPOSITION_GET_PRIVATE (composition);
   
   gtk_widget_show (priv->toolbar);
 }

Modified: xfburn/trunk/xfburn/xfburn-audio-composition.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-audio-composition.h	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-audio-composition.h	2008-08-17 16:50:50 UTC (rev 5270)
@@ -17,8 +17,8 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#ifndef __XFBURN_DATA_COMPOSITION_H__
-#define __XFBURN_DATA_COMPOSITION_H__
+#ifndef __XFBURN_AUDIO_COMPOSITION_H__
+#define __XFBURN_AUDIO_COMPOSITION_H__
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -28,36 +28,36 @@
 
 G_BEGIN_DECLS
 
-#define XFBURN_TYPE_DATA_COMPOSITION            (xfburn_data_composition_get_type ())
-#define XFBURN_DATA_COMPOSITION(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFBURN_TYPE_DATA_COMPOSITION, XfburnDataComposition))
-#define XFBURN_DATA_COMPOSITION_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), XFBURN_TYPE_DATA_COMPOSITION, XfburnDataCompositionClass))
-#define XFBURN_IS_DATA_COMPOSITION(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFBURN_TYPE_DATA_COMPOSITION))
-#define XFBURN_IS_DATA_COMPOSITION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFBURN_TYPE_DATA_COMPOSITION))
-#define XFBURN_DATA_COMPOSITION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), XFBURN_TYPE_DATA_COMPOSITION, XfburnDataCompositionClass))
+#define XFBURN_TYPE_AUDIO_COMPOSITION            (xfburn_audio_composition_get_type ())
+#define XFBURN_AUDIO_COMPOSITION(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), XFBURN_TYPE_DATA_COMPOSITION, XfburnAudioComposition))
+#define XFBURN_AUDIO_COMPOSITION_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), XFBURN_TYPE_DATA_COMPOSITION, XfburnAudioCompositionClass))
+#define XFBURN_IS_AUDIO_COMPOSITION(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), XFBURN_TYPE_DATA_COMPOSITION))
+#define XFBURN_IS_AUDIO_COMPOSITION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), XFBURN_TYPE_DATA_COMPOSITION))
+#define XFBURN_AUDIO_COMPOSITION_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), XFBURN_TYPE_DATA_COMPOSITION, XfburnAudioCompositionClass))
   
 typedef struct
 {
   GtkVBox vbox;
-} XfburnDataComposition;
+} XfburnAudioComposition;
 
 typedef struct
 {
   GtkVBoxClass parent_class;
-} XfburnDataCompositionClass;
+} XfburnAudioCompositionClass;
 
 enum
 {
-  DATA_COMPOSITION_DND_TARGET_INSIDE,
-  DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN,
-  DATA_COMPOSITION_DND_TARGET_TEXT_URI_LIST,
+  AUDIO_COMPOSITION_DND_TARGET_INSIDE,
+  AUDIO_COMPOSITION_DND_TARGET_TEXT_PLAIN,
+  AUDIO_COMPOSITION_DND_TARGET_TEXT_URI_LIST,
 };
 
-GtkType xfburn_data_composition_get_type (void);
+GtkType xfburn_audio_composition_get_type (void);
 
-GtkWidget *xfburn_data_composition_new (void);
-void xfburn_data_composition_add_files (XfburnDataComposition *content, int filec, char **filenames);
-void xfburn_data_composition_hide_toolbar (XfburnDataComposition *content);
-void xfburn_data_composition_show_toolbar (XfburnDataComposition *content);
+GtkWidget *xfburn_audio_composition_new (void);
+void xfburn_audio_composition_add_files (XfburnAudioComposition *content, int filec, char **filenames);
+void xfburn_audio_composition_hide_toolbar (XfburnAudioComposition *content);
+void xfburn_audio_composition_show_toolbar (XfburnAudioComposition *content);
 
 
 G_END_DECLS

Modified: xfburn/trunk/xfburn/xfburn-compositions-notebook.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-compositions-notebook.c	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-compositions-notebook.c	2008-08-17 16:50:50 UTC (rev 5270)
@@ -30,6 +30,7 @@
 #include "xfburn-notebook-tab.h"
 #include "xfburn-welcome-tab.h"
 #include "xfburn-data-composition.h"
+#include "xfburn-audio-composition.h"
 
 #define XFBURN_COMPOSITIONS_NOTEBOOK_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), XFBURN_TYPE_COMPOSITIONS_NOTEBOOK, XfburnCompositionsNotebookPrivate))
 
@@ -168,7 +169,8 @@
       label_text = g_strdup_printf ("%s %d", _("Data composition"), ++i);
       break;
     case XFBURN_AUDIO_COMPOSITION:
-      DBG ("don't hurry ... it'll be implemented later");
+      composition = xfburn_audio_composition_new ();
+      label_text = g_strdup_printf ("%s %d", _("Audio composition"), ++i);
       break;
   }
   

Modified: xfburn/trunk/xfburn/xfburn-data-disc-usage.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-disc-usage.c	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-data-disc-usage.c	2008-08-17 16:50:50 UTC (rev 5270)
@@ -112,6 +112,7 @@
 static void
 xfburn_data_disc_usage_init (XfburnDataDiscUsage * disc_usage)
 {
+  gtk_progress_bar_set_text (GTK_PROGRESS_BAR ( XFBURN_DISC_USAGE (disc_usage)->progress_bar), "0 B");
 }
 
 /* internals */

Modified: xfburn/trunk/xfburn/xfburn-disc-usage.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-disc-usage.c	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-disc-usage.c	2008-08-17 16:50:50 UTC (rev 5270)
@@ -132,7 +132,7 @@
   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_progress_bar_set_text (GTK_PROGRESS_BAR (disc_usage->progress_bar), "0");
   gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->progress_bar, TRUE, TRUE, BORDER);
   gtk_widget_show (disc_usage->progress_bar);
 

Modified: xfburn/trunk/xfburn/xfburn-main-window.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-main-window.c	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-main-window.c	2008-08-17 16:50:50 UTC (rev 5270)
@@ -37,6 +37,7 @@
 #include "xfburn-copy-cd-dialog.h"
 #include "xfburn-copy-dvd-dialog.h"
 #include "xfburn-burn-image-dialog.h"
+#include "xfburn-audio-composition.h"
 #include "xfburn-progress-dialog.h"
 #include "xfburn-settings.h"
 #include "xfburn-main.h"
@@ -72,7 +73,7 @@
 static void action_preferences (GtkAction *, XfburnMainWindow *);
 
 static void action_new_data_composition (GtkAction *, XfburnMainWindow *);
-//static void action_new_audio_composition (GtkAction *, XfburnMainWindow *);
+static void action_new_audio_composition (GtkAction *, XfburnMainWindow *);
 
 /*
 static void action_load (GtkAction *, XfburnMainWindow *);
@@ -99,12 +100,12 @@
 static const GtkActionEntry action_entries[] = {
   {"file-menu", NULL, N_("_File"), NULL,},
   /*{"new-composition", GTK_STOCK_NEW, N_("_New composition"), "", N_("Create a new composition"),},*/
-  {"new-composition", GTK_STOCK_NEW, N_("_New composition"), NULL, N_("Create a new composition"), 
+  /*{"new-composition", GTK_STOCK_NEW, N_("_New composition"), NULL, N_("Create a new composition"), 
+    G_CALLBACK (action_new_data_composition),}, */
+  {"new-data-composition", GTK_STOCK_HARDDISK, N_("New data composition"), "<Control><Alt>e", N_("New data composition"),
     G_CALLBACK (action_new_data_composition),},
-  /*{"new-data-composition", GTK_STOCK_HARDDISK, N_("New data composition"), "<Control><Alt>e", N_("New data composition"),
-    G_CALLBACK (action_new_data_composition),},
   {"new-audio-composition", "audio-x-generic", N_("New audio composition"), "<Control><Alt>A", N_("New audio composition"),
-    G_CALLBACK (action_new_audio_composition),},*/
+    G_CALLBACK (action_new_audio_composition),},
   /*{"load-composition", GTK_STOCK_OPEN, N_("Load composition"), NULL, N_("Load composition"),
    G_CALLBACK (action_load),},
   {"save-composition", GTK_STOCK_SAVE, N_("Save composition"), NULL, N_("Save composition"), 
@@ -147,7 +148,8 @@
 };
 
 static const gchar *toolbar_actions[] = {
-  "new-composition",
+  "new-data-composition",
+  "new-audio-composition",
 /*  "load-composition",
   "save-composition",
   "close-composition",*/
@@ -475,14 +477,13 @@
   xfburn_main_window_add_data_composition_with_files (window, 0, NULL);
 }
 
-/*
 static void
 action_new_audio_composition (GtkAction *action, XfburnMainWindow * window)
 {
-  XfburnMainWindowPrivate *priv = XFBURN_MAIN_WINDOW_GET_PRIVATE (window);
+  //XfburnMainWindowPrivate *priv = XFBURN_MAIN_WINDOW_GET_PRIVATE (window);
  
+  xfburn_main_window_add_data_composition_with_files (window, 0, NULL);
 }
-*/
 
 static void
 action_quit (GtkAction * action, XfburnMainWindow * window)
@@ -722,6 +723,16 @@
   xfburn_data_composition_add_files (XFBURN_DATA_COMPOSITION (comp), filec, filenames);
 }
 
+void 
+xfburn_main_window_add_audio_composition_with_files (XfburnMainWindow *window, int filec, char **filenames)
+{
+  XfburnMainWindowPrivate *priv = XFBURN_MAIN_WINDOW_GET_PRIVATE (window);
+  XfburnComposition *comp;
+ 
+  comp = xfburn_compositions_notebook_add_composition (XFBURN_COMPOSITIONS_NOTEBOOK (priv->compositions_notebook), XFBURN_AUDIO_COMPOSITION);
+  xfburn_audio_composition_add_files (XFBURN_AUDIO_COMPOSITION (comp), filec, filenames);
+}
+
 gboolean
 xfburn_main_window_support_cdr (XfburnMainWindow *window)
 {

Modified: xfburn/trunk/xfburn/xfburn-main-window.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-main-window.h	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-main-window.h	2008-08-17 16:50:50 UTC (rev 5270)
@@ -57,6 +57,7 @@
 XfburnFileBrowser *xfburn_main_window_get_file_browser (XfburnMainWindow *window);
 
 void xfburn_main_window_add_data_composition_with_files (XfburnMainWindow *window, int filec, char **filenames);
+void xfburn_main_window_add_audio_composition_with_files (XfburnMainWindow *window, int filec, char **filenames);
 
 gboolean xfburn_main_window_support_cdr (XfburnMainWindow *window);
 gboolean xfburn_main_window_support_cdrw (XfburnMainWindow *window);

Modified: xfburn/trunk/xfburn/xfburn-main.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-main.c	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-main.c	2008-08-17 16:50:50 UTC (rev 5270)
@@ -57,6 +57,7 @@
 static gboolean other_action = FALSE;
 static gboolean show_main = FALSE;
 static gboolean add_data_composition = FALSE;
+static gboolean add_audio_composition = FALSE;
 static gboolean blank = FALSE;
 
 static GOptionEntry optionentries[] = {
@@ -66,6 +67,8 @@
     "Open the blank disc dialog.", NULL },
   { "data-composition", 'd', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &parse_option, 
     "Start a data composition. Optionally followed by files/directories to be added to the composition.", NULL },
+  { "audio-composition", 'a', G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, &parse_option, 
+    "Start an audio composition. Optionally followed by files/directories to be added to the composition.", NULL },
   { "version", 'V', G_OPTION_FLAG_NO_ARG , G_OPTION_ARG_NONE, &show_version, 
     "Display program version and exit", NULL },
   { "main", 'm', G_OPTION_FLAG_NO_ARG , G_OPTION_ARG_NONE, &show_main, 
@@ -83,6 +86,8 @@
       image_filename = g_strdup(value);
   } else if (strcmp (option_name, "-d") == 0 || strcmp (option_name, "--data-composition") == 0) {
     add_data_composition = TRUE;
+  } else if (strcmp (option_name, "-a") == 0 || strcmp (option_name, "--audio-composition") == 0) {
+    add_audio_composition = TRUE;
   } else if (strcmp (option_name, "-b") == 0 || strcmp (option_name, "--blank") == 0) {
     blank = TRUE;
   } else {
@@ -297,6 +302,9 @@
   
     if (add_data_composition)
       xfburn_main_window_add_data_composition_with_files (XFBURN_MAIN_WINDOW (mainwin), argc-1, argv+1);
+
+    if (add_audio_composition)
+      xfburn_main_window_add_audio_composition_with_files (XFBURN_MAIN_WINDOW (mainwin), argc-1, argv+1);
   }
 
   gtk_main ();

Modified: xfburn/trunk/xfburn/xfburn-welcome-tab.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-welcome-tab.c	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn/xfburn-welcome-tab.c	2008-08-17 16:50:50 UTC (rev 5270)
@@ -51,6 +51,7 @@
 
   GtkWidget *button_image;
   GtkWidget *button_data_comp;
+  GtkWidget *button_audio_comp;
   GtkWidget *button_blank;
 } XfburnWelcomeTabPrivate;
 
@@ -59,6 +60,7 @@
 
 static void burn_image (GtkButton *button, XfburnWelcomeTab *tab);
 static void new_data_composition (GtkButton *button, XfburnWelcomeTab *tab);
+static void new_audio_cd (GtkButton *button, XfburnWelcomeTab *tab);
 static void blank_disc (GtkButton *button, XfburnWelcomeTab *tab);
 
 
@@ -149,6 +151,11 @@
   gtk_table_attach_defaults (GTK_TABLE (table), priv->button_blank, 0, 1, 1, 2);
   gtk_widget_show (priv->button_blank);
   g_signal_connect (G_OBJECT(priv->button_blank), "clicked", G_CALLBACK(blank_disc), obj);
+
+  priv->button_audio_comp = create_welcome_button (GTK_STOCK_CDROM, _("<big>_Audio CD</big>"), _("Audio CD playable in regular stereos"));
+  gtk_table_attach_defaults (GTK_TABLE (table), priv->button_audio_comp, 1, 2, 1, 2);
+  gtk_widget_show (priv->button_audio_comp);
+  g_signal_connect (G_OBJECT(priv->button_audio_comp), "clicked", G_CALLBACK(new_audio_cd), obj);
 }
 
 static void
@@ -226,6 +233,14 @@
   xfburn_compositions_notebook_add_composition (XFBURN_COMPOSITIONS_NOTEBOOK (priv->notebook), XFBURN_DATA_COMPOSITION);
 }
 
+static void
+new_audio_cd (GtkButton *button, XfburnWelcomeTab *tab)
+{
+  XfburnWelcomeTabPrivate *priv = XFBURN_WELCOME_TAB_GET_PRIVATE (tab);
+ 
+  xfburn_compositions_notebook_add_composition (XFBURN_COMPOSITIONS_NOTEBOOK (priv->notebook), XFBURN_AUDIO_COMPOSITION);
+}
+
 /*        */
 /* public */
 /*        */
@@ -246,9 +261,12 @@
     action = gtk_action_group_get_action (action_group, "burn-image");
     gtk_widget_set_sensitive (priv->button_image, gtk_action_is_sensitive (action));
     
-    action = gtk_action_group_get_action (action_group, "new-composition");
+    action = gtk_action_group_get_action (action_group, "new-data-composition");
     gtk_widget_set_sensitive (priv->button_data_comp, gtk_action_is_sensitive (action));
     
+    action = gtk_action_group_get_action (action_group, "new-audio-composition");
+    gtk_widget_set_sensitive (priv->button_audio_comp, gtk_action_is_sensitive (action));
+    
     action = gtk_action_group_get_action (action_group, "blank-disc");
     gtk_widget_set_sensitive (priv->button_blank, gtk_action_is_sensitive (action));
   }

Modified: xfburn/trunk/xfburn-toolbars.ui
===================================================================
--- xfburn/trunk/xfburn-toolbars.ui	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn-toolbars.ui	2008-08-17 16:50:50 UTC (rev 5270)
@@ -3,7 +3,8 @@
 
 <toolbars>
   <toolbar name="main" style="both">
-    <toolitem id="new-composition" />
+    <toolitem id="new-data-composition" />
+    <toolitem id="new-audio-composition" />
 <!--    <toolitem id="load-composition" />-->
 <!--    <toolitem id="save-composition" /> -->
 <!--    <toolitem id="close-composition" />-->

Modified: xfburn/trunk/xfburn.ui
===================================================================
--- xfburn/trunk/xfburn.ui	2008-08-17 15:54:48 UTC (rev 5269)
+++ xfburn/trunk/xfburn.ui	2008-08-17 16:50:50 UTC (rev 5270)
@@ -10,11 +10,11 @@
   <!-- The main menu bar -->
   <menubar name="main-menu">
     <menu action="file-menu">
+      <!--
       <menuitem action="new-composition"/>
-      <!--
-        <menuitem action="new-data-composition"/>
-        <menuitem action="new-audio-composition"/>
       -->
+      <menuitem action="new-data-composition"/>
+      <menuitem action="new-audio-composition"/>
       <!-- <menuitem action="load-composition"/> -->
       <separator/>
       <!--




More information about the Goodies-commits mailing list