[gitg] Use GdStackSwitcher to handle stack elements
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gitg] Use GdStackSwitcher to handle stack elements
- Date: Mon, 25 Feb 2013 20:58:11 +0000 (UTC)
commit 0e2bd426c36f3df7c0fcbf0d440104a4867a8ea8
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Mon Feb 25 21:57:52 2013 +0100
Use GdStackSwitcher to handle stack elements
gitg/gitg-ui-elements.vala | 165 ++++-----------------------------
gitg/gitg-window.vala | 8 +-
gitg/resources/ui/gitg-window.ui | 5 +-
libgd | 2 +-
libgitg-ext/gitg-ext-ui-element.vala | 2 +-
plugins/dash/gitg-dash.vala | 4 +-
plugins/diff/gitg-diff.vala | 6 +-
plugins/files/gitg-files.vala | 4 +-
plugins/history/gitg-history.vala | 4 +-
9 files changed, 39 insertions(+), 161 deletions(-)
---
diff --git a/gitg/gitg-ui-elements.vala b/gitg/gitg-ui-elements.vala
index 1d25fc8..7a78819 100644
--- a/gitg/gitg-ui-elements.vala
+++ b/gitg/gitg-ui-elements.vala
@@ -22,76 +22,21 @@ namespace Gitg
public class UIElements<T>
{
- private class ActiveUIElement
- {
- public GitgExt.UIElement element;
- public Gtk.RadioButton? navigation_button;
-
- public ActiveUIElement(GitgExt.UIElement e)
- {
- element = e;
- }
- }
-
private Peas.ExtensionSet d_extensions;
- private HashTable<string, ActiveUIElement> d_available_elements;
+ private HashTable<string, GitgExt.UIElement> d_available_elements;
private HashTable<string, GitgExt.UIElement> d_elements;
- private List<ActiveUIElement> d_available_sorted;
- private Gtk.Box? d_box;
- private ActiveUIElement? d_current;
+ private GitgExt.UIElement? d_current;
private Gd.Stack d_stack;
public signal void activated(GitgExt.UIElement element);
- private Gtk.RadioButton? create_header_button(GitgExt.UIElement e)
- {
- if (d_box == null)
- {
- return null;
- }
-
- Icon? icon = e.icon;
-
- if (icon == null)
- {
- return null;
- }
-
- var img = new Gtk.Image.from_gicon(icon, Gtk.IconSize.MENU);
- img.show();
-
- Gtk.RadioButton button;
-
- if (d_box.get_children().length() != 0)
- {
- var ic = d_box.get_children();
- button = new Gtk.RadioButton.from_widget(ic.data as Gtk.RadioButton);
- }
- else
- {
- button = new Gtk.RadioButton(null);
- }
-
- e.bind_property("enabled", button, "sensitive", BindingFlags.DEFAULT |
BindingFlags.SYNC_CREATE);
-
- button.set_mode(false);
- button.set_image(img);
-
- var context = button.get_style_context();
- context.add_class("image-button");
-
- button.show();
-
- return button;
- }
-
public T? current
{
get
{
if (d_current != null)
{
- return (T)d_current.element;
+ return (T)d_current;
}
else
{
@@ -125,15 +70,15 @@ public class UIElements<T>
// Note that this will also set elem to current if needed
add_available(elem);
}
- else if (wasavail != null && wasavail.navigation_button != null)
+ else if (wasavail != null)
{
- if (!wasavail.element.enabled && d_current == wasavail)
+ if (!wasavail.enabled && d_current == wasavail)
{
d_current = null;
}
- else if (wasavail.element.enabled && d_current == null)
+ else if (wasavail.enabled && d_current == null)
{
- set_current_impl(wasavail.element);
+ set_current_impl(wasavail);
}
}
});
@@ -148,88 +93,48 @@ public class UIElements<T>
{
if (!element.available ||
!element.enabled ||
- (d_current != null && d_current.element == element))
+ (d_current != null && d_current == element))
{
return;
}
- ActiveUIElement? el = d_available_elements.lookup(element.id);
+ GitgExt.UIElement? el = d_available_elements.lookup(element.id);
if (el != null)
{
- if (d_current != null)
- {
- if (d_current.navigation_button != null)
- {
- d_current.navigation_button.active = false;
- }
- }
-
d_current = el;
- if (el.navigation_button != null)
- {
- el.navigation_button.active = true;
- }
-
if (d_stack != null)
{
- d_stack.set_visible_child(el.element.widget);
+ d_stack.set_visible_child(el.widget);
}
- activated(el.element);
+ activated(el);
}
}
private void remove_available(GitgExt.UIElement e)
{
- ActiveUIElement ae;
+ GitgExt.UIElement ae;
if (d_available_elements.lookup_extended(e.id, null, out ae))
{
- if (ae.navigation_button != null)
- {
- d_available_sorted.remove(ae);
- ae.navigation_button.destroy();
- }
-
if (ae == d_current)
{
d_current = null;
}
- d_stack.remove(ae.element.widget);
+ d_stack.remove(ae.widget);
d_available_elements.remove(e.id);
}
}
private void add_available(GitgExt.UIElement e)
{
- Gtk.RadioButton? button = create_header_button(e);
- ActiveUIElement ae = new ActiveUIElement(e);
-
- ae.navigation_button = button;
-
- if (button != null)
- {
- d_available_sorted.insert_sorted(ae, (a, b) => {
- return a.element.negotiate_order(b.element);
- });
-
- d_box.pack_start(button);
- d_box.reorder_child(button, d_available_sorted.index(ae));
- update_visibility();
-
- button.toggled.connect((b) => {
- if (b.active)
- {
- set_current_impl(ae.element);
- }
- });
- }
-
- d_stack.add(ae.element.widget);
- d_available_elements.insert(e.id, ae);
+ d_stack.add_with_properties(e.widget,
+ "title", e.display_name,
+ "symbolic-icon-name", e.icon);
+ d_available_elements.insert(e.id, e);
}
private void available_changed(Object o, ParamSpec spec)
@@ -272,17 +177,6 @@ public class UIElements<T>
remove_ui_element(obj as GitgExt.UIElement);
}
- private void on_box_add_remove(Gtk.Widget box,
- Gtk.Widget item)
- {
- update_visibility();
- }
-
- private void update_visibility()
- {
- d_box.visible = (d_box.get_children().length() > 1);
- }
-
public delegate bool ForeachUIElementFunc(GitgExt.UIElement element);
public void foreach(ForeachUIElementFunc func)
@@ -291,7 +185,7 @@ public class UIElements<T>
foreach (var val in vals)
{
- if (!func(val.element))
+ if (!func(val))
{
break;
}
@@ -299,37 +193,18 @@ public class UIElements<T>
}
public UIElements(Peas.ExtensionSet extensions,
- Gd.Stack? stack = null,
- Gtk.Box? box = null)
+ Gd.Stack? stack = null)
{
d_extensions = extensions;
- d_box = box;
d_stack = stack;
- d_available_elements = new HashTable<string, ActiveUIElement>(str_hash, str_equal);
+ d_available_elements = new HashTable<string, GitgExt.UIElement>(str_hash, str_equal);
d_elements = new HashTable<string, GitgExt.UIElement>(str_hash, str_equal);
- if (d_box != null)
- {
- var context = d_box.get_style_context();
- context.add_class("linked");
- context.add_class("raised");
-
- d_box.add.connect(on_box_add_remove);
- d_box.remove.connect(on_box_add_remove);
-
- update_visibility();
- }
-
// Add all the extensions
d_extensions.foreach(extension_added);
d_extensions.extension_added.connect(extension_added);
d_extensions.extension_removed.connect(extension_removed);
-
- if (d_current == null && d_available_sorted != null)
- {
- set_current_impl(d_available_sorted.data.element);
- }
}
}
diff --git a/gitg/gitg-window.vala b/gitg/gitg-window.vala
index 8104173..ed1901e 100644
--- a/gitg/gitg-window.vala
+++ b/gitg/gitg-window.vala
@@ -35,7 +35,7 @@ public class Window : Gtk.ApplicationWindow, GitgExt.Application, Initable, Gtk.
private Gd.HeaderBar d_header_bar;
private Gtk.MenuButton d_config;
- private Gtk.Box d_header_box;
+ private Gd.StackSwitcher d_commit_view_switcher;
private Gtk.Paned d_paned_views;
private Gtk.Paned d_paned_panels;
@@ -80,13 +80,14 @@ public class Window : Gtk.ApplicationWindow, GitgExt.Application, Initable, Gtk.
{
// Extract widgets from the builder
d_header_bar = builder.get_object("header-bar") as Gd.HeaderBar;
- d_header_box = builder.get_object("header-bar-box") as Gtk.Box;
d_paned_views = builder.get_object("paned_views") as Gtk.Paned;
d_paned_panels = builder.get_object("paned_panels") as Gtk.Paned;
d_stack_view = builder.get_object("stack_view") as Gd.Stack;
d_stack_panel = builder.get_object("stack_panel") as Gd.Stack;
+ d_commit_view_switcher = builder.get_object("commit-view-switcher") as Gd.StackSwitcher;
+ d_commit_view_switcher.stack = d_stack_panel;
d_navigation = builder.get_object("tree_view_navigation") as GitgExt.NavigationTreeView;
d_config = builder.get_object("button_config") as Gtk.MenuButton;
@@ -189,8 +190,7 @@ public class Window : Gtk.ApplicationWindow, GitgExt.Application, Initable, Gtk.
typeof(GitgExt.Panel),
"application",
this),
- d_stack_panel,
- d_header_box);
+ d_stack_panel);
d_panels.activated.connect(on_panel_activated);
diff --git a/gitg/resources/ui/gitg-window.ui b/gitg/resources/ui/gitg-window.ui
index d896e1f..1af75bf 100644
--- a/gitg/resources/ui/gitg-window.ui
+++ b/gitg/resources/ui/gitg-window.ui
@@ -17,6 +17,7 @@
<object class="GdHeaderBar" id="header-bar">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="vexpand">False</property>
<child>
<object class="GdHeaderToggleButton" id="search-button">
<property name="visible">True</property>
@@ -28,7 +29,9 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="header-bar-box"/>
+ <object class="GdStackSwitcher" id="commit-view-switcher">
+ <property name="visible">True</property>
+ </object>
<packing>
<property name="pack_type">end</property>
</packing>
diff --git a/libgd b/libgd
index 34da80e..6bcecf5 160000
--- a/libgd
+++ b/libgd
@@ -1 +1 @@
-Subproject commit 34da80eaebfe28ee4913840a45d799577de28b97
+Subproject commit 6bcecf53ab1abfef4239ca7d26ea6e5fd1943706
diff --git a/libgitg-ext/gitg-ext-ui-element.vala b/libgitg-ext/gitg-ext-ui-element.vala
index 865b2ca..0ff435c 100644
--- a/libgitg-ext/gitg-ext-ui-element.vala
+++ b/libgitg-ext/gitg-ext-ui-element.vala
@@ -70,7 +70,7 @@ public interface UIElement : Object
* If provided, the icon will be used in navigation toolbars
* so that users can switch to the ui element.
*/
- public abstract Icon? icon { owned get; }
+ public abstract string? icon { owned get; }
/**
* The ui element widget.
diff --git a/plugins/dash/gitg-dash.vala b/plugins/dash/gitg-dash.vala
index 2036011..32a57c4 100644
--- a/plugins/dash/gitg-dash.vala
+++ b/plugins/dash/gitg-dash.vala
@@ -69,11 +69,11 @@ namespace GitgDash
owned get { return _("Dashboard"); }
}
- public Icon? icon
+ public string? icon
{
owned get
{
- return new ThemedIcon("document-open-recent-symbolic");
+ return "document-open-recent-symbolic";
}
}
diff --git a/plugins/diff/gitg-diff.vala b/plugins/diff/gitg-diff.vala
index 94b48a0..579da48 100644
--- a/plugins/diff/gitg-diff.vala
+++ b/plugins/diff/gitg-diff.vala
@@ -68,15 +68,15 @@ namespace GitgDiff
owned get { return _("Diff"); }
}
- public Icon? icon
+ public string? icon
{
- owned get { return new ThemedIcon("diff-symbolic"); }
+ owned get { return "diff-symbolic"; }
}
private void on_selection_changed(GitgExt.ObjectSelection selection)
{
selection.foreach_selected((commit) => {
- var c = commit as Ggit.Commit;
+ var c = commit as Gitg.Commit;
if (c != null)
{
diff --git a/plugins/files/gitg-files.vala b/plugins/files/gitg-files.vala
index b077c50..53d9e4c 100644
--- a/plugins/files/gitg-files.vala
+++ b/plugins/files/gitg-files.vala
@@ -75,9 +75,9 @@ namespace GitgFiles
owned get { return _("Files"); }
}
- public Icon? icon
+ public string? icon
{
- owned get { return new ThemedIcon("system-file-manager-symbolic"); }
+ owned get { return "system-file-manager-symbolic"; }
}
private void on_selection_changed(GitgExt.ObjectSelection selection)
diff --git a/plugins/history/gitg-history.vala b/plugins/history/gitg-history.vala
index 96457bf..89387d2 100644
--- a/plugins/history/gitg-history.vala
+++ b/plugins/history/gitg-history.vala
@@ -135,9 +135,9 @@ namespace GitgHistory
owned get { return _("History"); }
}
- public Icon? icon
+ public string? icon
{
- owned get { return new ThemedIcon("view-list-symbolic"); }
+ owned get { return "view-list-symbolic"; }
}
public Gtk.Widget? widget
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]