[Xfce4-commits] r22644 - xfburn/trunk/xfburn

Jean-François Wauthy pollux at xfce.org
Thu Aug 3 20:07:00 UTC 2006


Author: pollux
Date: 2006-08-03 20:06:57 +0000 (Thu, 03 Aug 2006)
New Revision: 22644

Modified:
   xfburn/trunk/xfburn/xfburn-data-composition.c
   xfburn/trunk/xfburn/xfburn-data-disc-usage.c
   xfburn/trunk/xfburn/xfburn-directory-browser.c
   xfburn/trunk/xfburn/xfburn-directory-browser.h
   xfburn/trunk/xfburn/xfburn-file-browser.c
   xfburn/trunk/xfburn/xfburn-file-browser.h
   xfburn/trunk/xfburn/xfburn-fs-browser.c
   xfburn/trunk/xfburn/xfburn-fs-browser.h
   xfburn/trunk/xfburn/xfburn-main-window.c
   xfburn/trunk/xfburn/xfburn-main-window.h
Log:
implement the add button in the data composition toolbar

Modified: xfburn/trunk/xfburn/xfburn-data-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-composition.c	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-data-composition.c	2006-08-03 20:06:57 UTC (rev 22644)
@@ -72,9 +72,11 @@
 
 static void data_composition_action_clear (GtkAction *, XfburnDataComposition *);
 static void data_composition_action_remove_selection (GtkAction *, XfburnDataComposition *);
-static void data_composition_action_rename_selection (GtkAction * action, XfburnDataComposition * dc);
+static void data_composition_action_rename_selection (GtkAction *, XfburnDataComposition *);
+static void data_composition_action_add_selected_files (GtkAction *, XfburnDataComposition *);
 
 static gboolean cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnDataComposition * dc);
+static void cb_selection_changed (GtkTreeSelection *selection, XfburnDataComposition * dc);
 static void cb_begin_burn (XfburnDataDiscUsage * du, XfburnDataComposition * dc);
 static void cell_file_edited_cb (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnDataComposition * dc);
 
@@ -129,7 +131,8 @@
 static guint instances = 0;
 
 static const GtkActionEntry action_entries[] = {
-  {"add-file", GTK_STOCK_ADD, N_("Add"), NULL, N_("Add the selected file(s) to the CD"),},
+  {"add-file", GTK_STOCK_ADD, N_("Add"), NULL, N_("Add the selected file(s) to the CD"),
+   G_CALLBACK (data_composition_action_add_selected_files),},
   {"remove-file", GTK_STOCK_REMOVE, N_("Remove"), NULL, N_("Remove the selected file(s) from the CD"),
    G_CALLBACK (data_composition_action_remove_selection),},
   {"clear", GTK_STOCK_CLEAR, N_("Clear"), NULL, N_("Clear the content of the CD"),
@@ -219,7 +222,8 @@
   GtkTreeViewColumn *column_file;
   GtkCellRenderer *cell_icon, *cell_file;
   GtkTreeSelection *selection;
-
+  GtkAction *action = NULL;
+  
   const gchar ui_string[] = "<ui> <popup name=\"popup-menu\">"
     "<menuitem action=\"rename-file\"/>" "<menuitem action=\"remove-file\"/>" "</popup></ui>";
 
@@ -329,6 +333,7 @@
 
   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);
                     
 #if 0                    
   /* adding progress window */
@@ -350,6 +355,11 @@
                                         GDK_ACTION_COPY | GDK_ACTION_MOVE);
   g_signal_connect (G_OBJECT (priv->content), "drag-data-received", G_CALLBACK (content_drag_data_rcv_cb),
                     composition);
+                    
+  action = gtk_action_group_get_action (priv->action_group, "remove-file");
+  gtk_action_set_sensitive (GTK_ACTION (action), FALSE);
+  action = gtk_action_group_get_action (priv->action_group, "clear");
+  gtk_action_set_sensitive (GTK_ACTION (action), FALSE);  
 }
 
 static void
@@ -407,6 +417,38 @@
   g_free (tmpfile);
 }
 
+static void
+cb_selection_changed (GtkTreeSelection *selection, XfburnDataComposition * dc)
+{
+  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  gint n_selected_rows;
+  GtkAction *action = NULL;
+  
+  
+  n_selected_rows = gtk_tree_selection_count_selected_rows (selection);
+  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, "remove-file");
+    gtk_action_set_sensitive (GTK_ACTION (action), FALSE);
+    action = gtk_action_group_get_action (priv->action_group, "clear");
+    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, "remove-file");
+    gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
+    action = gtk_action_group_get_action (priv->action_group, "clear");
+    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, "remove-file");
+    gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
+    action = gtk_action_group_get_action (priv->action_group, "clear");
+    gtk_action_set_sensitive (GTK_ACTION (action), TRUE);      
+  }
+}
 
 static gboolean
 cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnDataComposition * dc)
@@ -630,6 +672,72 @@
 }
 
 static void
+data_composition_action_add_selected_files (GtkAction *action, XfburnDataComposition *dc)
+{
+  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+  XfburnFileBrowser *browser = xfburn_main_window_get_file_browser (xfburn_main_window_get_instance ());
+  
+  gchar *selected_files = NULL;
+  
+  selected_files = xfburn_file_browser_get_selection (browser);
+  
+  if (selected_files) {
+    GtkTreeModel *model;
+    const gchar * file = NULL;
+    GtkTreeSelection *selection;
+    GList *selected_paths = NULL;
+    GtkTreePath *path_where_insert = NULL;
+    GtkTreeIter iter_where_insert;
+    DataCompositionType type = DATA_COMPOSITION_TYPE_FILE;
+    
+    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);
+    }
+    
+    file = strtok (selected_files, "\n");
+    while (file) {
+      GtkTreeIter iter;
+      gchar *full_path = NULL;
+      
+      if (g_str_has_prefix (file, "file://"))
+        full_path = g_build_filename (&file[7], NULL);
+      else if (g_str_has_prefix (file, "file:"))
+        full_path = g_build_filename (&file[5], NULL);
+      else
+        full_path = g_build_filename (file, NULL);
+
+      if (full_path[strlen (full_path) - 1] == '\r')
+        full_path[strlen (full_path) - 1] = '\0';
+
+      /* add files to the disc content */
+      if (type == DATA_COMPOSITION_TYPE_DIRECTORY) {
+        add_file_to_list (dc, model, full_path, &iter, &iter_where_insert, GTK_TREE_VIEW_DROP_INTO_OR_AFTER);
+        gtk_tree_view_expand_row (GTK_TREE_VIEW (priv->content), path_where_insert, FALSE);
+      } else {
+        add_file_to_list (dc, model, full_path, &iter, NULL, GTK_TREE_VIEW_DROP_AFTER);  
+      }
+      
+      g_free (full_path);
+
+      file = strtok (NULL, "\n");
+    }
+    
+    g_list_foreach (selected_paths, (GFunc) gtk_tree_path_free, NULL);
+    g_list_free (selected_paths);
+    
+    g_free (selected_files);
+  }
+  
+}
+
+static void
 data_composition_action_clear (GtkAction * action, XfburnDataComposition * dc)
 {
   XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);

Modified: xfburn/trunk/xfburn/xfburn-data-disc-usage.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-disc-usage.c	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-data-disc-usage.c	2006-08-03 20:06:57 UTC (rev 22644)
@@ -126,7 +126,7 @@
   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 (GTK_STOCK_CDROM, _("Burn Data CD"));
+  disc_usage->button = xfce_create_mixed_button (GTK_STOCK_CDROM, _("Burn composition"));
   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);

Modified: xfburn/trunk/xfburn/xfburn-directory-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-directory-browser.c	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-directory-browser.c	2006-08-03 20:06:57 UTC (rev 22644)
@@ -189,38 +189,10 @@
                           GtkSelectionData * data, guint info, guint time, gpointer user_data)
 {
   if (info == DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN) {
-    GtkTreeSelection *selection;
-    GtkTreeModel *model;
-    GList *selected_rows;
-    gchar *full_paths;
+    gchar *full_paths = NULL;
 
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
-
-    full_paths = g_strdup ("");
-    selected_rows = gtk_tree_selection_get_selected_rows (selection, &model);
-    selected_rows = g_list_last (selected_rows);
-    while (selected_rows) {
-      GtkTreeIter iter;
-      gchar *current_path;
-      gchar *temp;
-      
-      gtk_tree_model_get_iter (model, &iter, (GtkTreePath *) selected_rows->data);
-      gtk_tree_model_get (model, &iter, DIRECTORY_BROWSER_COLUMN_PATH, &current_path, -1);
-
-      temp = g_strdup_printf ("file://%s\n%s", current_path, full_paths);
-      g_free (current_path);
-      g_free (full_paths);
-      full_paths = temp;
-
-      selected_rows = g_list_previous (selected_rows);
-    }
-
-    selected_rows = g_list_first (selected_rows);
-    g_list_foreach (selected_rows, (GFunc) gtk_tree_path_free, NULL);
-    g_list_free (selected_rows);
-
+    full_paths = xfburn_directory_browser_get_selection (XFBURN_DIRECTORY_BROWSER (widget));
     gtk_selection_data_set_text (data, full_paths, -1);
-
     g_free (full_paths);
   }
 }
@@ -351,3 +323,38 @@
   xfburn_directory_browser_load_path (browser, (const gchar*) temp);
   g_free (temp);
 }
+
+gchar *
+xfburn_directory_browser_get_selection (XfburnDirectoryBrowser * browser)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GList *selected_rows;
+  gchar *full_paths = NULL;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (browser));
+
+  selected_rows = gtk_tree_selection_get_selected_rows (selection, &model);
+  selected_rows = g_list_last (selected_rows);
+  while (selected_rows) {
+    GtkTreeIter iter;
+    gchar *current_path = NULL;
+    gchar *temp = NULL;
+    
+    gtk_tree_model_get_iter (model, &iter, (GtkTreePath *) selected_rows->data);
+    gtk_tree_model_get (model, &iter, DIRECTORY_BROWSER_COLUMN_PATH, &current_path, -1);
+
+    temp = g_strdup_printf ("file://%s\n%s", current_path, full_paths ? full_paths : "");
+    g_free (current_path);
+    g_free (full_paths);
+    full_paths = temp;
+
+    selected_rows = g_list_previous (selected_rows);
+  }
+
+  selected_rows = g_list_first (selected_rows);
+  g_list_foreach (selected_rows, (GFunc) gtk_tree_path_free, NULL);
+  g_list_free (selected_rows);
+
+  return full_paths;
+}

Modified: xfburn/trunk/xfburn/xfburn-directory-browser.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-directory-browser.h	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-directory-browser.h	2006-08-03 20:06:57 UTC (rev 22644)
@@ -60,9 +60,13 @@
 
 
 GtkType xfburn_directory_browser_get_type (void);
+
 GtkWidget *xfburn_directory_browser_new (void);
+
 void xfburn_directory_browser_load_path (XfburnDirectoryBrowser * browser, const gchar * path);
 void xfburn_directory_browser_refresh (XfburnDirectoryBrowser * browser);
 
+gchar *xfburn_directory_browser_get_selection (XfburnDirectoryBrowser * browser);
+
 G_END_DECLS
 #endif

Modified: xfburn/trunk/xfburn/xfburn-file-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-file-browser.c	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-file-browser.c	2006-08-03 20:06:57 UTC (rev 22644)
@@ -111,6 +111,7 @@
   xfburn_directory_browser_load_path (XFBURN_DIRECTORY_BROWSER (file_browser->directory_browser), xfce_get_homedir ());
 
   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (file_browser->fs_browser));
+  
   g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (cb_fs_browser_selection_changed), file_browser);
 
   g_signal_connect (G_OBJECT (file_browser->directory_browser), "row-activated",
@@ -201,3 +202,14 @@
   // TODO refresh fs browser
   xfburn_directory_browser_refresh (XFBURN_DIRECTORY_BROWSER (browser->directory_browser));
 }
+
+gchar *
+xfburn_file_browser_get_selection (XfburnFileBrowser *browser)
+{
+  if (GTK_WIDGET_HAS_FOCUS (browser->fs_browser))
+    return xfburn_fs_browser_get_selection (browser->fs_browser);
+  else if (GTK_WIDGET_HAS_FOCUS (browser->directory_browser))
+    return xfburn_directory_browser_get_selection (browser->directory_browser);
+  
+  return NULL;
+}

Modified: xfburn/trunk/xfburn/xfburn-file-browser.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-file-browser.h	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-file-browser.h	2006-08-03 20:06:57 UTC (rev 22644)
@@ -50,8 +50,11 @@
 };
 
 GtkType xfburn_file_browser_get_type (void);
+
 GtkWidget *xfburn_file_browser_new (void);
+
 void xfburn_file_browser_refresh (XfburnFileBrowser *browser);
+gchar *xfburn_file_browser_get_selection (XfburnFileBrowser *browser);
 
 G_END_DECLS
 #endif

Modified: xfburn/trunk/xfburn/xfburn-fs-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-fs-browser.c	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-fs-browser.c	2006-08-03 20:06:57 UTC (rev 22644)
@@ -38,7 +38,7 @@
 
 static void cb_browser_row_expanded (GtkTreeView *, GtkTreeIter *, GtkTreePath *, gpointer);
 static void cb_browser_row_activated (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data);
-static void cb_browser_drag_data_get (GtkWidget *, GdkDragContext *, GtkSelectionData *, guint, guint, gpointer);
+static void cb_browser_drag_data_get (GtkWidget *, GdkDragContext *, GtkSelectionData *, guint, guint, XfburnFsBrowser *);
 
 /* globals */
 static GtkTreeViewClass *parent_class = NULL;
@@ -203,25 +203,13 @@
 
 static void
 cb_browser_drag_data_get (GtkWidget * widget, GdkDragContext * dc,
-                          GtkSelectionData * data, guint info, guint time, gpointer user_data)
+                          GtkSelectionData * data, guint info, guint time, XfburnFsBrowser *browser)
 {
   if (info == DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN) {
-    GtkTreeSelection *selection;
-    GtkTreeModel *model;
-    GtkTreeIter iter;
-    gchar *path;
-    gchar *full_path;
-
-    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
-    gtk_tree_selection_get_selected (selection, &model, &iter);
-
-    gtk_tree_model_get (model, &iter, FS_BROWSER_COLUMN_PATH, &path, -1);
-
-    full_path = g_strdup_printf ("file://%s", path);
-    g_free (path);
-
+    gchar *full_path = NULL;
+    
+    full_path = xfburn_fs_browser_get_selection (browser);
     gtk_selection_data_set_text (data, full_path, -1);
-
     g_free (full_path);
   }
 }
@@ -283,3 +271,25 @@
   gtk_tree_view_expand_row (GTK_TREE_VIEW (browser), path, FALSE);
   gtk_tree_path_free (path);
 }
+
+gchar *
+xfburn_fs_browser_get_selection (XfburnFsBrowser *browser)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+
+  gchar *full_path = NULL;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (browser));
+  if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+    gchar *path = NULL;
+   
+    gtk_tree_model_get (model, &iter, FS_BROWSER_COLUMN_PATH, &path, -1);
+
+    full_path = g_strdup_printf ("file://%s", path);
+    g_free (path);
+  }
+  
+  return full_path;
+}

Modified: xfburn/trunk/xfburn/xfburn-fs-browser.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-fs-browser.h	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-fs-browser.h	2006-08-03 20:06:57 UTC (rev 22644)
@@ -52,8 +52,11 @@
 };
 
 GType xfburn_fs_browser_get_type ();
+
 GtkWidget *xfburn_fs_browser_new ();
-void xfburn_fs_browser_refresh (XfburnFsBrowser *);
 
+void xfburn_fs_browser_refresh (XfburnFsBrowser *browser);
+gchar * xfburn_fs_browser_get_selection (XfburnFsBrowser *browser);
+
 G_END_DECLS
 #endif /* __XFBURN_FS_BROWSER_H__ */

Modified: xfburn/trunk/xfburn/xfburn-main-window.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-main-window.c	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-main-window.c	2006-08-03 20:06:57 UTC (rev 22644)
@@ -595,3 +595,11 @@
   
   return priv->ui_manager;
 }
+
+XfburnFileBrowser *
+xfburn_main_window_get_file_browser (XfburnMainWindow *window)
+{
+  XfburnMainWindowPrivate *priv = XFBURN_MAIN_WINDOW_GET_PRIVATE (window);
+  
+  return XFBURN_FILE_BROWSER (priv->file_browser);
+}

Modified: xfburn/trunk/xfburn/xfburn-main-window.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-main-window.h	2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-main-window.h	2006-08-03 20:06:57 UTC (rev 22644)
@@ -27,6 +27,7 @@
 #include <gtk/gtk.h>
 
 #include "xfburn-data-composition.h"
+#include "xfburn-file-browser.h"
 
 G_BEGIN_DECLS
 #define XFBURN_TYPE_MAIN_WINDOW            (xfburn_main_window_get_type ())
@@ -54,6 +55,7 @@
 XfburnMainWindow *xfburn_main_window_get_instance (void);
 
 GtkUIManager *xfburn_main_window_get_ui_manager (XfburnMainWindow *window);
+XfburnFileBrowser *xfburn_main_window_get_file_browser (XfburnMainWindow *window);
 
 G_END_DECLS
 #endif



More information about the Xfce4-commits mailing list