diff options
author | Stefano Facchini <stefano.facchini@gmail.com> | 2013-07-21 19:04:24 +0200 |
---|---|---|
committer | Stefano Facchini <stefano.facchini@gmail.com> | 2013-07-21 19:19:54 +0200 |
commit | 8bee1ab2b6ae7a944d38c2633aaec241f4c19a2e (patch) | |
tree | e5d34f422c325d0734432c16c0e56db33c88fb58 | |
parent | 1965cae684e5380e092d36191f3ef173844c03f0 (diff) | |
download | baobab-8bee1ab2b6ae7a944d38c2633aaec241f4c19a2e.tar.gz |
Rework treeview behavior
-rw-r--r-- | src/baobab-chart.vala | 9 | ||||
-rw-r--r-- | src/baobab-main-window.ui | 3 | ||||
-rw-r--r-- | src/baobab-window.vala | 66 |
3 files changed, 53 insertions, 25 deletions
diff --git a/src/baobab-chart.vala b/src/baobab-chart.vala index ec26102..2348c42 100644 --- a/src/baobab-chart.vala +++ b/src/baobab-chart.vala @@ -260,6 +260,15 @@ namespace Baobab { } } + public void set_highlighted (Gtk.TreeIter iter) { + foreach (var item in items) { + if (item.iter == iter) { + highlighted_item = item; + break; + } + } + } + public override bool motion_notify_event (Gdk.EventMotion event) { bool found = false; diff --git a/src/baobab-main-window.ui b/src/baobab-main-window.ui index 804c8a4..0f3ec39 100644 --- a/src/baobab-main-window.ui +++ b/src/baobab-main-window.ui @@ -248,6 +248,9 @@ <object class="GtkTreeView" id="treeview"> <property name="visible">True</property> <property name="can_focus">True</property> + <property name="hover-selection">True</property> + <property name="activate-on-single-click">True</property> + <property name="show-expanders">False</property> <child internal-child="selection"> <object class="GtkTreeSelection" id="treeview_selection1"/> </child> diff --git a/src/baobab-window.vala b/src/baobab-window.vala index 82fe105..7e5c667 100644 --- a/src/baobab-window.vala +++ b/src/baobab-window.vala @@ -339,14 +339,24 @@ namespace Baobab { null); } - void on_chart_item_activated (Chart chart, Gtk.TreeIter iter) { - var path = active_location.scanner.get_path (iter); + void set_root (Gtk.TreePath path) { + var filter = new Gtk.TreeModelFilter (active_location.scanner, path); + treeview.model = filter; - if (!treeview.is_row_expanded (path)) { - treeview.expand_to_path (path); - } + Gtk.TreeIter iter; + active_location.scanner.get_iter (out iter, path); + string title = ""; + do { + string name; + active_location.scanner.get (iter, Scanner.Columns.DISPLAY_NAME, out name); + title = name + (title == "" ? null : " > ") + title; + } while (active_location.scanner.iter_parent (out iter, iter)); + header_bar.title = title; + } - treeview.set_cursor (path, null, false); + void on_chart_item_activated (Chart chart, Gtk.TreeIter iter) { + var path = active_location.scanner.get_path (iter); + set_root (path); } void on_drag_data_received (Gtk.Widget widget, Gdk.DragContext context, int x, int y, @@ -443,24 +453,30 @@ namespace Baobab { treeview_popup_open.activate.connect (() => { var selection = treeview.get_selection (); - Gtk.TreeIter iter; + Gtk.TreeIter iter, real_iter; if (selection.get_selected (null, out iter)) { + var filter = treeview.model as Gtk.TreeModelFilter; + filter.convert_iter_to_child_iter (out real_iter, iter); open_item (iter); } }); treeview_popup_copy.activate.connect (() => { var selection = treeview.get_selection (); - Gtk.TreeIter iter; + Gtk.TreeIter iter, real_iter; if (selection.get_selected (null, out iter)) { + var filter = treeview.model as Gtk.TreeModelFilter; + filter.convert_iter_to_child_iter (out real_iter, iter); copy_path (iter); } }); treeview_popup_trash.activate.connect (() => { var selection = treeview.get_selection (); - Gtk.TreeIter iter; + Gtk.TreeIter iter, real_iter; if (selection.get_selected (null, out iter)) { + var filter = treeview.model as Gtk.TreeModelFilter; + filter.convert_iter_to_child_iter (out real_iter, iter); trash_file (iter); } }); @@ -469,11 +485,21 @@ namespace Baobab { selection.changed.connect (() => { Gtk.TreeIter iter; if (selection.get_selected (null, out iter)) { - var path = active_location.scanner.get_path (iter); - rings_chart.root = path; - treemap_chart.root = path; + Gtk.TreeIter real_iter; + var filter = treeview.model as Gtk.TreeModelFilter; + filter.convert_iter_to_child_iter (out real_iter, iter); + rings_chart.set_highlighted (real_iter); + treemap_chart.set_highlighted (real_iter); } }); + + treeview.row_activated.connect ((path, column) => { + var filter = treeview.model as Gtk.TreeModelFilter; + var real_path = filter.convert_path_to_child_path (path); + set_root (real_path); + rings_chart.root = real_path; + treemap_chart.root = real_path; + }); } void message (string primary_msg, string secondary_msg, Gtk.MessageType type) { @@ -539,16 +565,6 @@ namespace Baobab { treeview.expand_row (path, false); } - void expand_first_row () { - Gtk.TreeIter first; - - if (treeview.model.get_iter_first (out first) && treeview.model.iter_has_child (first)) { - treeview.expand_row (treeview.model.get_path (first), false); - } else { - treeview.model.row_has_child_toggled.connect (first_row_has_child); - } - } - void set_chart_model (Gtk.TreeModel model, bool show_allocated_size) { model.bind_property ("max-depth", rings_chart, "max-depth", BindingFlags.SYNC_CREATE); model.bind_property ("max-depth", treemap_chart, "max-depth", BindingFlags.SYNC_CREATE); @@ -593,6 +609,9 @@ namespace Baobab { bool show_allocated_size = alloc_size > 0; size_column_size_renderer.show_allocated_size = show_allocated_size; size_column.sort_column_id = show_allocated_size ? Scanner.Columns.ALLOC_SIZE : Scanner.Columns.SIZE; + + treeview.model = new Gtk.TreeModelFilter (scanner, new Gtk.TreePath.first ()); + set_chart_model (active_location.scanner, show_allocated_size); set_ui_state (result_page, false); @@ -602,9 +621,6 @@ namespace Baobab { set_ui_state (result_page, true); scanner.scan (force); - - treeview.model = scanner; - expand_first_row (); } public void scan_directory (File directory) { |