Main Page | Class List | Directories | File List | Class Members | File Members

baobab-treeview.c File Reference

#include <config.h>
#include <gtk/gtk.h>
#include <glib/gi18n.h>
#include <string.h>
#include "baobab.h"
#include "baobab-treeview.h"
#include "baobab-utils.h"
#include "callbacks.h"

Go to the source code of this file.

Functions

static GtkTreeStore * create_model (void)
static GtkListStore * create_search_model (void)
static void on_tv_row_expanded (GtkTreeView *treeview, GtkTreeIter *arg1, GtkTreePath *arg2, gpointer data)
static void on_tv_cur_changed (GtkTreeView *treeview, gpointer data)
static gboolean on_tv_button_press (GtkWidget *widget, GdkEventButton *event, gpointer data)
GtkWidget * create_directory_treeview (void)
GtkWidget * create_filesearch_treeview (void)


Function Documentation

GtkWidget* create_directory_treeview void   ) 
 

Definition at line 226 of file baobab-treeview.c.

References baobab, COL_BAR, COL_DIR_NAME, COL_DIR_SIZE, COL_ELEMENTS, COL_HARDLINK, COL_PERC, create_model(), _baobab_application::main_xml, _baobab_application::model, on_tv_button_press(), on_tv_cur_changed(), and on_tv_row_expanded().

Referenced by main().

00227 {
00228         GtkCellRenderer *cell;
00229         GtkTreeViewColumn *col;
00230         GtkWidget *scrolled;
00231 
00232         GtkWidget *tvw = glade_xml_get_widget (baobab.main_xml, "treeview1");
00233 
00234         g_signal_connect (tvw, "row-expanded",
00235                           G_CALLBACK (on_tv_row_expanded), NULL);
00236         g_signal_connect (tvw, "cursor-changed",
00237                           G_CALLBACK (on_tv_cur_changed), NULL);
00238         g_signal_connect (tvw, "button-press-event",
00239                           G_CALLBACK (on_tv_button_press), NULL);
00240 
00241         /* dir name column */
00242         cell = gtk_cell_renderer_text_new ();
00243         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "markup",
00244                                                         COL_DIR_NAME, "text",
00245                                                         COL_DIR_NAME, NULL);
00246         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00247 
00248         /* percentage bar column */
00249         cell = gtk_cell_renderer_pixbuf_new ();
00250         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "pixbuf",
00251                                                         COL_BAR, NULL);
00252         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00253 
00254         /* directory size column */
00255         cell = gtk_cell_renderer_text_new ();
00256         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "markup",
00257                                                         COL_DIR_SIZE, "text",
00258                                                         COL_DIR_SIZE, NULL);
00259         g_object_set (G_OBJECT (cell), "xalign", (gfloat) 1.0, NULL);
00260         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00261 
00262         /* percentage column */
00263         cell = gtk_cell_renderer_text_new ();
00264         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "markup",
00265                                                         COL_PERC, "text",
00266                                                         COL_PERC, NULL);
00267         g_object_set (G_OBJECT (cell), "xalign", (gfloat) 1.0, NULL);
00268         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00269 
00270         /* objects column */
00271         cell = gtk_cell_renderer_text_new ();
00272         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "markup",
00273                                                         COL_ELEMENTS, "text",
00274                                                         COL_ELEMENTS, NULL);
00275         g_object_set (G_OBJECT (cell), "xalign", (gfloat) 1.0, NULL);
00276         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00277 
00278         /* hardlink column */
00279         cell = gtk_cell_renderer_text_new ();
00280         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "markup",
00281                                                         COL_HARDLINK, "text",
00282                                                         COL_HARDLINK, NULL);
00283         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00284 
00285         gtk_tree_view_collapse_all (GTK_TREE_VIEW (tvw));
00286         gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tvw), FALSE);
00287         scrolled = glade_xml_get_widget (baobab.main_xml, "scrolledwindow1");
00288         gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
00289                                         GTK_POLICY_NEVER,
00290                                         GTK_POLICY_AUTOMATIC);
00291 
00292         baobab.model = create_model ();
00293 
00294         gtk_tree_view_set_model (GTK_TREE_VIEW (tvw),
00295                                  GTK_TREE_MODEL (baobab.model));
00296         g_object_unref (baobab.model);
00297 
00298         return tvw;
00299 }

GtkWidget* create_filesearch_treeview void   ) 
 

Definition at line 302 of file baobab-treeview.c.

References baobab, COL0_ICON, COL1_STRING, COL2_STRING, create_search_model(), _baobab_application::main_xml, _baobab_application::model_search, on_tv_button_press(), and on_tv_cur_changed().

Referenced by main().

00303 {
00304         GtkWidget *tvw;
00305         GtkCellRenderer *cell;
00306         GtkTreeViewColumn *col;
00307 
00308         tvw = glade_xml_get_widget (baobab.main_xml, "tree_search");
00309 
00310         g_signal_connect (tvw, "cursor-changed",
00311                           G_CALLBACK (on_tv_cur_changed), NULL);
00312         g_signal_connect (tvw, "button-press-event",
00313                           G_CALLBACK (on_tv_button_press), NULL);
00314 
00315         /* icons column */
00316         cell = gtk_cell_renderer_pixbuf_new ();
00317         g_object_set (cell, "stock-size", GTK_ICON_SIZE_LARGE_TOOLBAR,
00318                       NULL);
00319         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "pixbuf",
00320                                                         COL0_ICON, NULL);
00321         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00322 
00323         /* First text column */
00324         cell = gtk_cell_renderer_text_new ();
00325         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "markup",
00326                                                         COL1_STRING, "text",
00327                                                         COL1_STRING, NULL);
00328         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00329 
00330         /* second text column */
00331         cell = gtk_cell_renderer_text_new ();
00332         col = gtk_tree_view_column_new_with_attributes (NULL, cell, "markup",
00333                                                         COL2_STRING, "text",
00334                                                         COL2_STRING, NULL);
00335         gtk_tree_view_append_column (GTK_TREE_VIEW (tvw), col);
00336 
00337         baobab.model_search = create_search_model ();
00338         gtk_tree_view_set_model (GTK_TREE_VIEW (tvw),
00339                                  GTK_TREE_MODEL (baobab.model_search));
00340         g_object_unref (baobab.model_search);
00341 
00342         return tvw;
00343 }

static GtkTreeStore* create_model void   )  [static]
 

Definition at line 35 of file baobab-treeview.c.

References COL_H_SIZE, and NUM_TREE_COLUMNS.

Referenced by create_directory_treeview().

00036 {
00037         GtkTreeStore *mdl = gtk_tree_store_new (NUM_TREE_COLUMNS,
00038                                                 G_TYPE_STRING,  /* COL_DIR_NAME */
00039                                                 G_TYPE_STRING,  /* COL_H_FULLPATH */
00040                                                 GDK_TYPE_PIXBUF,/* COL_BAR */
00041                                                 G_TYPE_FLOAT,   /* COL_H_PERC */
00042                                                 G_TYPE_STRING,  /* COL_DIR_SIZE */
00043                                                 G_TYPE_UINT64,  /* COL_H_SIZE */
00044                                                 G_TYPE_STRING,  /* COL_PERC */
00045                                                 G_TYPE_UINT64,  /* COL_H_ALLOCSIZE */
00046                                                 G_TYPE_STRING,  /* COL_ELEMENTS */
00047                                                 G_TYPE_INT,     /* COL_H_ELEMENTS */
00048                                                 G_TYPE_STRING,  /* COL_HARDLINK */
00049                                                 G_TYPE_UINT64   /* COL_H_HARDLINK */
00050                                                 );
00051 
00052         /* Defaults to sort-by-size */
00053         gtk_tree_sortable_set_sort_column_id ((GtkTreeSortable *) mdl,
00054                                               COL_H_SIZE,
00055                                               GTK_SORT_DESCENDING);
00056 
00057         return mdl;
00058 }

static GtkListStore* create_search_model void   )  [static]
 

Definition at line 61 of file baobab-treeview.c.

References COL1_STRING, COL_FULLPATH, COL_SIZE, message(), and NUM_COLUMNS.

Referenced by create_filesearch_treeview().

00062 {
00063         GtkListStore *mdl;
00064         GtkTreeIter iter;
00065         gchar *escaped;
00066         const gchar *message = N_("Use the Edit->Find menu item "
00067                                   "or the search toolbar button.");
00068 
00069         escaped = g_markup_printf_escaped ("<i>%s</i>", _(message));
00070 
00071         mdl = gtk_list_store_new (NUM_COLUMNS,
00072                                   GDK_TYPE_PIXBUF,      /* icon */
00073                                   G_TYPE_STRING,
00074                                   G_TYPE_STRING,
00075                                   G_TYPE_STRING,        /* fullpath */
00076                                   G_TYPE_LONG,          /* last access */
00077                                   G_TYPE_DOUBLE,        /* size */
00078                                   G_TYPE_STRING,        /* filetype */
00079                                   G_TYPE_UINT           /* owner id (gushort) */
00080                                   );
00081 
00082         gtk_list_store_append (mdl, &iter);
00083         gtk_list_store_set (mdl, &iter,
00084                             COL1_STRING, " ", COL_FULLPATH, "", -1);
00085         gtk_list_store_append (mdl, &iter);
00086         gtk_list_store_set (mdl, &iter,
00087                             COL1_STRING, escaped,
00088                             COL_FULLPATH, "", -1);
00089 
00090         g_free (escaped);
00091 
00092         /* Defaults to sort-by-size */
00093         gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (mdl),
00094                                               COL_SIZE,
00095                                               GTK_SORT_DESCENDING);
00096 
00097         return mdl;
00098 }

static gboolean on_tv_button_press GtkWidget *  widget,
GdkEventButton *  event,
gpointer  data
[static]
 

Definition at line 148 of file baobab-treeview.c.

References baobab, COL_FULLPATH, COL_H_FULLPATH, contents_changed(), _baobab_application::CONTENTS_CHANGED_DELAYED, get_NB_page(), get_trash_path(), _baobab_application::model, _baobab_application::model_search, popupmenu_list(), popupmenu_list_search(), _baobab_application::selected_path, set_glade_widget_sens(), _baobab_application::STOP_SCANNING, VIEW_SEARCH, and VIEW_TREE.

Referenced by create_directory_treeview(), and create_filesearch_treeview().

00151 {
00152         GtkTreePath *path;
00153         GtkTreeIter iter;
00154         gchar *trash_path, *dir_path;
00155         gboolean is_trash = FALSE;
00156 
00157         if (get_NB_page () == VIEW_TREE) {
00158                 if (baobab.CONTENTS_CHANGED_DELAYED) {
00159                         baobab.CONTENTS_CHANGED_DELAYED = FALSE;
00160                         if (baobab.STOP_SCANNING) {
00161                                 contents_changed ();
00162                         }
00163                 }
00164         }
00165 
00166         gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
00167                                                event->x, event->y,
00168                                                &path, NULL, NULL, NULL);
00169         if (!path)
00170                 return TRUE;            
00171 
00172         /* check if a valid and scanned folder has been selected */
00173         if (baobab.selected_path) {
00174                 g_free (baobab.selected_path);
00175                 baobab.selected_path = NULL;
00176         }
00177 
00178         if (get_NB_page () == VIEW_TREE) {
00179                 gtk_tree_model_get_iter (GTK_TREE_MODEL (baobab.model), &iter,
00180                                          path);
00181                 gtk_tree_model_get (GTK_TREE_MODEL (baobab.model), &iter,
00182                                     COL_H_FULLPATH, &baobab.selected_path, -1);
00183 
00184         }
00185         else {
00186                 gtk_tree_model_get_iter (GTK_TREE_MODEL (baobab.model_search),
00187                                  &iter, path);
00188                 gtk_tree_model_get (GTK_TREE_MODEL (baobab.model_search), &iter,
00189                             COL_FULLPATH, &baobab.selected_path, -1);
00190         }
00191         
00192         if (strcmp (baobab.selected_path, "") == 0) {
00193                 set_glade_widget_sens("menu_treemap",FALSE);
00194                 gtk_tree_path_free (path);
00195                 return FALSE;
00196         }
00197         
00198         if (get_NB_page () == VIEW_SEARCH)
00199                 set_glade_widget_sens("menu_treemap",FALSE);
00200         else
00201                 set_glade_widget_sens("menu_treemap",TRUE);
00202 
00203         /* right-click */
00204         if (event->button == 3) {
00205                 trash_path = get_trash_path(baobab.selected_path);
00206                 dir_path = g_path_get_dirname(baobab.selected_path);
00207                 if (trash_path)
00208                         if (strcmp(trash_path, dir_path)==0)
00209                                 is_trash = TRUE;
00210                 if (get_NB_page () == VIEW_TREE)
00211                         popupmenu_list (path, event, is_trash);
00212                 if (get_NB_page () == VIEW_SEARCH)
00213                         popupmenu_list_search (path, event, is_trash);
00214 
00215                 g_free(trash_path);
00216                 g_free(dir_path);
00217                 return FALSE;
00218         }
00219 
00220         gtk_tree_path_free (path);
00221 
00222         return FALSE;
00223 }

static void on_tv_cur_changed GtkTreeView *  treeview,
gpointer  data
[static]
 

Definition at line 110 of file baobab-treeview.c.

References baobab, COL_FULLPATH, COL_H_FULLPATH, get_NB_page(), _baobab_application::model, _baobab_application::model_search, set_glade_widget_sens(), set_statusbar(), VIEW_SEARCH, and VIEW_TREE.

Referenced by create_directory_treeview(), and create_filesearch_treeview().

00111 {
00112 
00113         GtkTreeIter iter;
00114         gchar *text = NULL;
00115 
00116         gtk_tree_selection_get_selected (gtk_tree_view_get_selection (treeview), NULL, &iter);
00117 
00118         if (get_NB_page () == VIEW_TREE) {
00119                 if (gtk_tree_store_iter_is_valid (baobab.model, &iter)) {
00120                         gtk_tree_model_get (GTK_TREE_MODEL (baobab.model), &iter,
00121                                     COL_H_FULLPATH, &text, -1);
00122                 }
00123         }
00124         else if (get_NB_page () == VIEW_SEARCH) {
00125                 if (gtk_list_store_iter_is_valid (baobab.model_search, &iter)) {
00126                         gtk_tree_model_get (GTK_TREE_MODEL (baobab.model_search),
00127                                             &iter, COL_FULLPATH, &text, -1);
00128                 }
00129         }
00130 
00131         set_glade_widget_sens("menu_treemap",FALSE);
00132         if (text) {
00133                 gchar *msg;
00134 
00135                 /* make sure it is utf8 */
00136                 msg = g_filename_display_name (text);
00137 
00138                 set_statusbar (msg);
00139                 if (get_NB_page () == VIEW_TREE && strcmp (text, "") != 0 )
00140                         set_glade_widget_sens("menu_treemap",TRUE);
00141 
00142                 g_free (msg);
00143                 g_free (text);
00144         }
00145 }

static void on_tv_row_expanded GtkTreeView *  treeview,
GtkTreeIter *  arg1,
GtkTreePath *  arg2,
gpointer  data
[static]
 

Definition at line 101 of file baobab-treeview.c.

Referenced by create_directory_treeview().

00105 {
00106         gtk_tree_view_columns_autosize (treeview);
00107 }


© sourcejam.com 2005-2008