summaryrefslogtreecommitdiff
path: root/baobab/src/callbacks.c
diff options
context:
space:
mode:
Diffstat (limited to 'baobab/src/callbacks.c')
-rw-r--r--baobab/src/callbacks.c394
1 files changed, 394 insertions, 0 deletions
diff --git a/baobab/src/callbacks.c b/baobab/src/callbacks.c
new file mode 100644
index 00000000..3dc8ede4
--- /dev/null
+++ b/baobab/src/callbacks.c
@@ -0,0 +1,394 @@
+/*
+ * callbacks.c
+ * This file is part of baobab
+ *
+ * Copyright (C) 2005-2006 Fabio Marzocca <[email protected]>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <mateconf/mateconf-client.h>
+#include <gio/gio.h>
+
+#include "baobab.h"
+#include "baobab-treeview.h"
+#include "baobab-utils.h"
+#include "callbacks.h"
+#include "baobab-prefs.h"
+#include "baobab-remote-connect-dialog.h"
+#include "baobab-chart.h"
+
+void
+on_menuscanhome_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ baobab_scan_home ();
+}
+
+void
+on_menuallfs_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ baobab_scan_root ();
+}
+
+void
+on_menuscandir_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ dir_select (FALSE, baobab.window);
+}
+
+void
+on_esci1_activate (GtkObject *menuitem, gpointer user_data)
+{
+ baobab_stop_scan ();
+ gtk_main_quit ();
+}
+
+void on_about_activate(GtkMenuItem* menuitem, gpointer user_data)
+{
+ const gchar* const authors[] = {
+ "Fabio Marzocca <[email protected]>",
+ "Paolo Borelli <[email protected]>",
+ "BenoĆ®t Dejean <[email protected]>",
+ "Igalia (rings-chart and treemap widget) <www.igalia.com>",
+ NULL
+ };
+
+ const gchar* license[] = {
+ N_("This program is free software; you can redistribute it and/or "
+ "modify it under the terms of the GNU General Public License as "
+ "published by the Free Software Foundation; either version 2 of "
+ "the License, or (at your option) any later version."),
+
+ N_("This program is distributed in the hope that it will be useful, "
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU "
+ "General Public License for more details."),
+
+ N_("You should have received a copy of the GNU General Public License "
+ "along with this program; if not, write to the Free Software Foundation, Inc., 51 "
+ "Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA")
+ };
+
+
+ gchar* license_trans = g_strjoin("\n\n", _(license[0]), _(license[1]), _(license[2]), NULL);
+
+ static const gchar copyright[] = "Copyright \xc2\xa9 2005-2010 Fabio Marzocca";
+
+ gtk_show_about_dialog (NULL,
+ "name", _("Baobab"),
+ "comments", _("A graphical tool to analyze disk usage."),
+ "version", VERSION,
+ "copyright", copyright,
+ "logo-icon-name", "baobab",
+ "license", license_trans,
+ "authors", authors,
+ "translator-credits", _("translator-credits"),
+ "wrap-license", TRUE,
+ NULL);
+
+ g_free(license_trans);
+}
+
+void
+on_menu_expand_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ gtk_tree_view_expand_all (GTK_TREE_VIEW (baobab.tree_view));
+}
+
+void
+on_menu_collapse_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ gtk_tree_view_collapse_all (GTK_TREE_VIEW (baobab.tree_view));
+}
+
+void
+on_menu_stop_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ baobab_stop_scan ();
+}
+
+void
+on_menu_rescan_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ baobab_rescan_current_dir ();
+}
+
+void
+on_tbscandir_clicked (GtkToolButton *toolbutton, gpointer user_data)
+{
+ dir_select (FALSE, baobab.window);
+}
+
+void
+on_tbscanhome_clicked (GtkToolButton *toolbutton, gpointer user_data)
+{
+ baobab_scan_home ();
+}
+
+void
+on_tbscanall_clicked (GtkToolButton *toolbutton, gpointer user_data)
+{
+ baobab_scan_root ();
+}
+
+void
+on_tb_scan_remote_clicked (GtkToolButton *toolbutton, gpointer user_data)
+{
+ GtkWidget *dlg;
+
+ dlg = baobab_remote_connect_dialog_new (GTK_WINDOW (baobab.window),
+ NULL);
+ gtk_dialog_run (GTK_DIALOG (dlg));
+
+ gtk_widget_destroy (dlg);
+}
+
+void
+on_menu_scan_rem_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ on_tb_scan_remote_clicked (NULL, NULL);
+}
+
+void
+on_tbstop_clicked (GtkToolButton *toolbutton, gpointer user_data)
+{
+ baobab_stop_scan ();
+}
+
+void
+on_tbrescan_clicked (GtkToolButton *toolbutton, gpointer user_data)
+{
+ baobab_rescan_current_dir ();
+}
+
+gboolean
+on_delete_activate (GtkWidget *widget,
+ GdkEvent *event, gpointer user_data)
+{
+ on_esci1_activate (NULL, NULL);
+ return TRUE;
+}
+
+void
+open_file_cb (GtkMenuItem *pmenu, gpointer dummy)
+{
+ GFile *file;
+
+ g_assert (!dummy);
+ g_assert (baobab.selected_path);
+
+ file = g_file_parse_name (baobab.selected_path);
+
+ if (!g_file_query_exists (file, NULL)) {
+ message (_("The document does not exist."), "",
+ GTK_MESSAGE_INFO, baobab.window);
+ g_object_unref (file);
+ return;
+ }
+
+ open_file_with_application (file);
+ g_object_unref (file);
+}
+
+void
+trash_dir_cb (GtkMenuItem *pmenu, gpointer dummy)
+{
+ GFile *file;
+
+ g_assert (!dummy);
+ g_assert (baobab.selected_path);
+
+ file = g_file_parse_name (baobab.selected_path);
+
+ if (trash_file (file)) {
+ GtkTreeIter iter;
+ guint64 filesize;
+ GtkTreeSelection *selection;
+
+ selection =
+ gtk_tree_view_get_selection ((GtkTreeView *) baobab.
+ tree_view);
+ gtk_tree_selection_get_selected (selection, NULL, &iter);
+ gtk_tree_model_get ((GtkTreeModel *) baobab.model, &iter,
+ 5, &filesize, -1);
+ gtk_tree_store_remove (GTK_TREE_STORE (baobab.model),
+ &iter);
+ }
+
+ g_object_unref (file);
+}
+
+void
+on_pref_menu (GtkAction *a, gpointer user_data)
+{
+ baobab_prefs_dialog ();
+}
+
+void
+on_ck_allocated_activate (GtkToggleAction *action,
+ gpointer user_data)
+{
+ if (!baobab.is_local)
+ return;
+
+ baobab.show_allocated = gtk_toggle_action_get_active (action);
+
+ baobab_treeview_show_allocated_size (baobab.tree_view,
+ baobab.show_allocated);
+
+ baobab_set_busy (TRUE);
+ baobab_set_statusbar (_("Calculating percentage bars..."));
+ gtk_tree_model_foreach (GTK_TREE_MODEL (baobab.model),
+ show_bars, NULL);
+ baobab_set_busy (FALSE);
+ baobab_set_statusbar (_("Ready"));
+}
+
+void
+on_view_tb_activate (GtkToggleAction *action,
+ gpointer user_data)
+{
+ gboolean visible;
+
+ visible = gtk_toggle_action_get_active (action);
+ baobab_set_toolbar_visible (visible);
+
+ mateconf_client_set_bool (baobab.mateconf_client,
+ BAOBAB_TOOLBAR_VISIBLE_KEY,
+ visible,
+ NULL);
+}
+
+void
+on_view_sb_activate (GtkToggleAction *action,
+ gpointer user_data)
+{
+ gboolean visible;
+
+ visible = gtk_toggle_action_get_active (action);
+ baobab_set_statusbar_visible (visible);
+
+ mateconf_client_set_bool (baobab.mateconf_client,
+ BAOBAB_STATUSBAR_VISIBLE_KEY,
+ visible,
+ NULL);
+}
+
+void
+on_helpcontents_activate (GtkAction *a, gpointer user_data)
+{
+ baobab_help_display (GTK_WINDOW (baobab.window), "baobab", NULL);
+}
+
+void
+scan_folder_cb (GtkMenuItem *pmenu, gpointer dummy)
+{
+ GFile *file;
+
+ g_assert (!dummy);
+ g_assert (baobab.selected_path);
+
+ file = g_file_parse_name (baobab.selected_path);
+
+ if (!g_file_query_exists (file, NULL)) {
+ message (_("The folder does not exist."), "", GTK_MESSAGE_INFO, baobab.window);
+ }
+
+ baobab_scan_location (file);
+ g_object_unref (file);
+}
+
+void
+on_tv_selection_changed (GtkTreeSelection *selection, gpointer user_data)
+{
+ GtkTreeIter iter;
+
+ if (gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+ GtkTreePath *path;
+
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (baobab.model), &iter);
+
+ baobab_chart_set_root (baobab.rings_chart, path);
+ baobab_chart_set_root (baobab.treemap_chart, path);
+
+ gtk_tree_path_free (path);
+ }
+}
+
+void
+on_move_upwards_cb (GtkCheckMenuItem *checkmenuitem, gpointer user_data)
+{
+ baobab_chart_move_up_root (baobab.current_chart);
+}
+
+void
+on_zoom_in_cb (GtkCheckMenuItem *checkmenuitem, gpointer user_data)
+{
+ baobab_chart_zoom_in (baobab.current_chart);
+}
+
+void
+on_zoom_out_cb (GtkCheckMenuItem *checkmenuitem, gpointer user_data)
+{
+ baobab_chart_zoom_out (baobab.current_chart);
+}
+
+void
+on_chart_snapshot_cb (GtkCheckMenuItem *checkmenuitem, gpointer user_data)
+{
+ baobab_chart_save_snapshot (baobab.current_chart);
+}
+
+void
+on_chart_type_change (GtkWidget *combo, gpointer user_data)
+{
+ GtkWidget *chart;
+ GtkWidget *frame;
+
+ guint active;
+
+ active = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
+
+ switch (active) {
+ case 0:
+ chart = baobab.rings_chart;
+ break;
+ case 1:
+ chart = baobab.treemap_chart;
+ break;
+ default:
+ g_return_if_reached ();
+ }
+
+ frame = gtk_widget_get_parent (baobab.current_chart);
+
+ baobab_chart_freeze_updates (baobab.current_chart);
+ baobab_chart_thaw_updates (chart);
+
+ g_object_ref_sink (baobab.current_chart);
+ gtk_container_remove (GTK_CONTAINER (frame), baobab.current_chart);
+ gtk_container_add (GTK_CONTAINER (frame), chart);
+
+ baobab.current_chart = chart;
+}
+