summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefano Facchini <stefano.facchini@gmail.com>2013-07-21 19:04:24 +0200
committerStefano Facchini <stefano.facchini@gmail.com>2013-07-21 19:19:54 +0200
commit8bee1ab2b6ae7a944d38c2633aaec241f4c19a2e (patch)
treee5d34f422c325d0734432c16c0e56db33c88fb58
parent1965cae684e5380e092d36191f3ef173844c03f0 (diff)
downloadbaobab-8bee1ab2b6ae7a944d38c2633aaec241f4c19a2e.tar.gz
Rework treeview behavior
-rw-r--r--src/baobab-chart.vala9
-rw-r--r--src/baobab-main-window.ui3
-rw-r--r--src/baobab-window.vala66
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) {