[gitg] Add expanders to ref list
- From: Jesse van den Kieboom <jessevdk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Add expanders to ref list
- Date: Sat, 8 Aug 2015 17:35:12 +0000 (UTC)
commit 55be1f32febb0daf2268a66f66c96b2f5db8f607
Author: Jesse van den Kieboom <jessevdk gnome org>
Date: Sat Aug 8 19:34:42 2015 +0200
Add expanders to ref list
https://bugzilla.gnome.org/show_bug.cgi?id=702600
gitg/history/gitg-history-refs-list.vala | 106 ++++++++++++++++++++++++-
gitg/resources/ui/gitg-history-ref-header.ui | 18 +++--
2 files changed, 113 insertions(+), 11 deletions(-)
---
diff --git a/gitg/history/gitg-history-refs-list.vala b/gitg/history/gitg-history-refs-list.vala
index 3a8d1f0..b0b8053 100644
--- a/gitg/history/gitg-history-refs-list.vala
+++ b/gitg/history/gitg-history-refs-list.vala
@@ -347,15 +347,20 @@ private class RefHeader : RefTyped, Gtk.ListBoxRow
private Gitg.Remote? d_remote;
- [GtkChild]
+ [GtkChild( name = "progress_bin" )]
private Gitg.ProgressBin d_progress_bin;
- [GtkChild]
+ [GtkChild( name = "expander" )]
+ private Gtk.Expander d_expander;
+
+ [GtkChild( name = "label" )]
private Gtk.Label d_label;
- [GtkChild]
+ [GtkChild( name = "icon" )]
private Gtk.Image d_icon;
+ public bool expanded { get; set; default = true; }
+
public Gitg.RefType ref_type
{
get { return d_rtype; }
@@ -369,20 +374,29 @@ private class RefHeader : RefTyped, Gtk.ListBoxRow
public RefHeader(Gitg.RefType rtype, string name)
{
var escaped = Markup.escape_text(name);
-
d_label.set_markup(@"<b>$escaped</b>");
+ bind_property("expanded", d_expander, "expanded", BindingFlags.BIDIRECTIONAL |
BindingFlags.SYNC_CREATE);
+
+ d_expander.button_press_event.connect(on_expander_pressed);
+
d_name = name;
d_rtype = rtype;
}
+ private bool on_expander_pressed(Gdk.EventButton event)
+ {
+ d_expander.expanded = !d_expander.expanded;
+ return true;
+ }
+
public RefHeader.remote(string name, Gitg.Remote? remote)
{
this(Gitg.RefType.REMOTE, name);
d_remote = remote;
d_is_sub_header_remote = true;
- d_label.margin_start += 12;
+ d_expander.margin_start += 12;
if (d_remote != null)
{
@@ -480,6 +494,79 @@ public class RefsList : Gtk.ListBox
d_remotes = new Gitg.Remote[0];
set_sort_func(sort_rows);
+ set_filter_func(filter_func);
+ }
+
+ private RefHeader? find_header(Gtk.ListBoxRow row)
+ {
+ var children = get_children();
+ unowned List<weak Gtk.Widget> found = children.find(row);
+
+ if (found == null)
+ {
+ return null;
+ }
+
+ while (found.prev != null)
+ {
+ found = found.prev;
+
+ var header = found.data as RefHeader;
+
+ if (header != null)
+ {
+ return header;
+ }
+ }
+
+ return null;
+ }
+
+ private bool filter_func(Gtk.ListBoxRow row)
+ {
+ var header = row as RefHeader;
+
+ if (header != null)
+ {
+ if (!header.is_sub_header_remote)
+ {
+ return true;
+ }
+ else
+ {
+ while (header != null && header.is_sub_header_remote)
+ {
+ header = find_header(header);
+ }
+
+ if (header == null)
+ {
+ return true;
+ }
+ }
+ }
+ else
+ {
+ header = find_header(row);
+ }
+
+ if (header == null)
+ {
+ return true;
+ }
+ else if (!header.is_sub_header_remote || !header.expanded)
+ {
+ return header.expanded;
+ }
+ else
+ {
+ while (header != null && header.is_sub_header_remote)
+ {
+ header = find_header(header);
+ }
+
+ return header == null || header.expanded;
+ }
}
private int sort_rows(Gtk.ListBoxRow row1, Gtk.ListBoxRow row2)
@@ -607,11 +694,18 @@ public class RefsList : Gtk.ListBox
reselect_row(row);
}
+ private void expanded_changed()
+ {
+ invalidate_filter();
+ }
+
private RefHeader add_header(Gitg.RefType ref_type, string name)
{
var header = new RefHeader(ref_type, name);
header.show();
+ header.notify["expanded"].connect(expanded_changed);
+
add(header);
return header;
}
@@ -678,6 +772,8 @@ public class RefsList : Gtk.ListBox
var header = new RefHeader.remote(name, remote);
header.show();
+ header.notify["expanded"].connect(expanded_changed);
+
d_header_map[name] = new RemoteHeader(header);
add(header);
diff --git a/gitg/resources/ui/gitg-history-ref-header.ui b/gitg/resources/ui/gitg-history-ref-header.ui
index 6915dbe..ac04ed8 100644
--- a/gitg/resources/ui/gitg-history-ref-header.ui
+++ b/gitg/resources/ui/gitg-history-ref-header.ui
@@ -9,25 +9,31 @@
<class name="sidebar"/>
</style>
<child>
- <object class="GitgProgressBin" id="d_progress_bin">
+ <object class="GitgProgressBin" id="progress_bin">
<property name="visible">True</property>
<child>
- <object class="GtkBox" id="d_box">
+ <object class="GtkBox" id="box">
<property name="visible">True</property>
<property name="orientation">horizontal</property>
<property name="spacing">6</property>
<child>
- <object class="GtkLabel" id="d_label">
+ <object class="GtkExpander" id="expander">
<property name="visible">True</property>
<property name="margin_top">3</property>
<property name="margin_bottom">3</property>
- <property name="margin_start">16</property>
+ <property name="margin_start">6</property>
+ <property name="expanded">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
<property name="halign">start</property>
- <property name="hexpand">true</property>
+ <property name="hexpand">True</property>
</object>
</child>
<child>
- <object class="GtkImage" id="d_icon">
+ <object class="GtkImage" id="icon">
<property name="visible">False</property>
<property name="halign">end</property>
</object>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]