[gnome-boxes] Seperate user categories from default list



commit 0a1c2539fc0f5b4666c97839ee7956ddae6cfd58
Author: Marc-Andrà Lureau <marcandre lureau gmail com>
Date:   Fri Oct 21 12:05:04 2011 +0200

    Seperate user categories from default list

 data/gtk-style.css                  |    6 +++
 data/org.gnome.boxes.gschema.xml.in |    9 ++++
 src/app.vala                        |    2 +-
 src/sidebar.vala                    |   70 ++++++++++++++++++++++++----------
 4 files changed, 65 insertions(+), 22 deletions(-)
---
diff --git a/data/gtk-style.css b/data/gtk-style.css
index b948eca..ab25927 100644
--- a/data/gtk-style.css
+++ b/data/gtk-style.css
@@ -7,6 +7,12 @@
     font-weight: bold;
 }
 
+#CollectionLabel {
+    font-size: 11;
+    font-weight: bold;
+    background-color: red;
+}
+
 .view {
     background-color: @theme_bg_color;
 }
diff --git a/data/org.gnome.boxes.gschema.xml.in b/data/org.gnome.boxes.gschema.xml.in
index 5d670f2..16ad322 100644
--- a/data/org.gnome.boxes.gschema.xml.in
+++ b/data/org.gnome.boxes.gschema.xml.in
@@ -11,6 +11,15 @@
       <default>[ 'qemu+unix:///session' ]</default>
     </key>
 
+    <key name="collections" type="as">
+      <summary>Collections</summary>
+      <description>
+        The list of boxes collections. The default value is:
+        Work.
+      </description>
+      <default>[ 'Work', 'Research', 'Gaming' ]</default>
+    </key>
+
     <key name="screenshot-interval" type="i">
       <summary>Screenshot interval</summary>
       <description>
diff --git a/src/app.vala b/src/app.vala
index 212b148..2ebddf6 100644
--- a/src/app.vala
+++ b/src/app.vala
@@ -81,7 +81,7 @@ private class Boxes.App: Boxes.UI {
     }
 
     private async void setup_brokers () {
-        foreach (var uri in settings.get_strv("broker-uris")) {
+        foreach (var uri in settings.get_strv ("broker-uris")) {
             setup_broker.begin (uri);
         }
     }
diff --git a/src/sidebar.vala b/src/sidebar.vala
index faf12d5..2b9e64f 100644
--- a/src/sidebar.vala
+++ b/src/sidebar.vala
@@ -11,7 +11,8 @@ private enum Boxes.SidebarPage {
 private class Boxes.Sidebar: Boxes.UI {
     public override Clutter.Actor actor { get { return gtk_actor; } }
     public Notebook notebook;
-    public TreeView tree_view;
+    public TreeView default_tree_view;
+    public TreeView user_tree_view;
 
     private App app;
     private uint width;
@@ -71,17 +72,10 @@ private class Boxes.Sidebar: Boxes.UI {
         listmodel.set (iter, 4, category);
     }
 
-    private void setup_sidebar () {
-        notebook = new Gtk.Notebook ();
-        notebook.get_style_context ().add_class ("boxes-sidebar-bg");
-        notebook.set_size_request ((int) width, 100);
-
-        /* SidebarPage.COLLECTION */
-        var vbox = new Gtk.VBox (false, 0);
-        notebook.append_page (vbox, null);
-
-        tree_view = new Gtk.TreeView ();
+    private Gtk.TreeView make_tree_view () {
+        var tree_view = new Gtk.TreeView ();
         var selection = tree_view.get_selection ();
+        selection.set_mode (Gtk.SelectionMode.BROWSE);
         selection.set_select_function (selection_func);
         tree_view_activate_on_single_click (tree_view, true);
         tree_view.row_activated.connect ( (treeview, path, column) => {
@@ -96,12 +90,9 @@ private class Boxes.Sidebar: Boxes.UI {
 
             if (selectable)
                 app.set_category (category);
-        });
-
-        vbox.pack_start (tree_view, true, true, 0);
-        notebook.show_tabs = false;
 
-        gtk_actor = new GtkClutter.Actor.with_contents (notebook);
+            (treeview == default_tree_view ? user_tree_view : default_tree_view).get_selection ().unselect_all ();
+        });
 
         var listmodel = new ListStore (5,
                                        typeof (string),
@@ -111,6 +102,7 @@ private class Boxes.Sidebar: Boxes.UI {
                                        typeof (Category));
         tree_view.set_model (listmodel);
         tree_view.headers_visible = false;
+
         var pixbuf_renderer = new CellRendererPixbuf ();
         // pixbuf_renderer.width = 20;
         // pixbuf_renderer.mode = CellRendererMode.INERT;
@@ -120,15 +112,51 @@ private class Boxes.Sidebar: Boxes.UI {
         var renderer = new CellRendererText ();
         tree_view.insert_column_with_attributes (-1, "", renderer, "text", 0, "height", 1, "sensitive", 2);
 
+        return tree_view;
+    }
+
+    private void update_user_tree () {
+        var listmodel = user_tree_view.get_model () as Gtk.ListStore;
+
+        listmodel.clear ();
+        foreach (var collection in app.settings.get_strv ("collections"))
+            list_append (listmodel, new Category (_(collection)));
+    }
+
+    private void setup_sidebar () {
+        notebook = new Gtk.Notebook ();
+        gtk_actor = new GtkClutter.Actor.with_contents (notebook);
+        notebook.get_style_context ().add_class ("boxes-sidebar-bg");
+        notebook.set_size_request ((int) width, 100);
+        notebook.show_tabs = false;
+
+        /* SidebarPage.COLLECTION */
+        var vbox = new Gtk.VBox (false, 0);
+        notebook.append_page (vbox, null);
+
+        default_tree_view = make_tree_view ();
+        vbox.pack_start (default_tree_view, false, false, 0);
+
+        var listmodel = default_tree_view.get_model () as Gtk.ListStore;
         list_append (listmodel, new Category (_("New and Recent")));
-        selection.select_path (new Gtk.TreePath.from_string ("0"));
         list_append (listmodel, new Category (_("Favorites")), "emblem-favorite-symbolic");
         list_append (listmodel, new Category (_("Private")), "channel-secure-symbolic");
         list_append (listmodel, new Category (_("Shared with you")), "emblem-shared-symbolic");
-        list_append (listmodel, new Category (_("Collections")), null, 40, false);
-        // TODO: make it dynamic
-        list_append (listmodel, new Category (_("Work")));
-        list_append (listmodel, new Category (_("Game")));
+        default_tree_view.get_selection ().select_path (new Gtk.TreePath.from_string ("0"));
+
+        var label = new Gtk.Label (_("Collections"));
+        label.name = "CollectionLabel";
+        label.xalign = 0.0f;
+        label.margin = 10;
+        label.margin_top = 20;
+        var labelw = new Gtk.EventBox ();
+        labelw.visible_window = true;
+        labelw.add (label);
+        vbox.pack_start (labelw, false, false, 0);
+
+        user_tree_view = make_tree_view ();
+        vbox.pack_start (user_tree_view, true, true, 0);
+        update_user_tree ();
 
         var create = new Gtk.Button.with_label (_("Create"));
         create.margin = 5;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]