[dconf-editor] Introduce BaseView.



commit 67ab54bc32af3b24d5bbfb1b6419e2d9c91168fa
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date:   Sat Dec 15 13:58:39 2018 +0100

    Introduce BaseView.

 editor/{browser-view.ui => base-view.ui} |  12 +--
 editor/base-view.vala                    |  94 ++++++++++++++++++++++
 editor/browser-view.vala                 | 132 +++++++++++--------------------
 editor/browser-window.vala               |   2 +-
 editor/dconf-editor.gresource.xml        |   2 +-
 editor/dconf-window.vala                 |   4 +-
 editor/meson.build                       |   3 +-
 7 files changed, 146 insertions(+), 103 deletions(-)
---
diff --git a/editor/browser-view.ui b/editor/base-view.ui
similarity index 54%
rename from editor/browser-view.ui
rename to editor/base-view.ui
index f5f96a8..eadc265 100644
--- a/editor/browser-view.ui
+++ b/editor/base-view.ui
@@ -1,23 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <interface domain="dconf-editor">
   <!-- interface-requires gtk+ 3.0 -->
-  <template class="BrowserView" parent="GtkStack">
+  <template class="BaseView" parent="GtkStack">
     <property name="transition-type">over-down-up</property>
     <property name="transition-duration">300</property>
     <child>
       <object class="GtkGrid" id="current_child_grid">
         <property name="visible">True</property>
         <property name="orientation">vertical</property>
-        <child>
-          <object class="BrowserInfoBar" id="info_bar">
-            <property name="visible">True</property>
-          </object>
-        </child>
-        <child>
-          <object class="BrowserStack" id="current_child">
-            <property name="visible">True</property>
-          </object>
-        </child>
       </object>
     </child>
   </template>
diff --git a/editor/base-view.vala b/editor/base-view.vala
new file mode 100644
index 0000000..c8bda6b
--- /dev/null
+++ b/editor/base-view.vala
@@ -0,0 +1,94 @@
+/*
+  This file is part of Dconf Editor
+
+  Dconf Editor is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  Dconf Editor is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with Dconf Editor.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+using Gtk;
+
+[GtkTemplate (ui = "/ca/desrt/dconf-editor/ui/base-view.ui")]
+private class BaseView : Stack, AdaptativeWidget
+{
+    [GtkChild] protected Grid current_child_grid;
+
+    internal virtual string? get_copy_text ()
+    {
+        if (in_window_about)
+            return about_list.get_copy_text (); // TODO copying logo...
+        return null;
+    }
+
+    /*\
+    * * adaptative stuff
+    \*/
+
+    protected AdaptativeWidget.WindowSize saved_window_size { protected get; private set; default = 
AdaptativeWidget.WindowSize.START_SIZE; }
+    protected virtual void set_window_size (AdaptativeWidget.WindowSize new_size)
+    {
+        saved_window_size = new_size;
+        if (about_list_created)
+            about_list.set_window_size (new_size);
+    }
+
+    /*\
+    * * in-window modes
+    \*/
+
+    internal virtual void show_default_view ()
+    {
+        if (in_window_about)
+        {
+            in_window_about = false;
+            set_visible_child (current_child_grid);
+        }
+        else
+            assert_not_reached ();
+    }
+
+    internal virtual bool is_in_in_window_mode ()
+    {
+        return in_window_about;
+    }
+
+    /*\
+    * * in-window about
+    \*/
+
+    protected bool in_window_about { protected get; private set; default = false; }
+
+    private bool about_list_created = false;
+    private AboutList about_list;
+
+    private void create_about_list ()
+    {
+        about_list = new AboutList (/* needs shadows   */ false,
+                                    /* big placeholder */ true);
+        about_list.set_window_size (saved_window_size);
+        about_list.show ();
+        add (about_list);
+        about_list_created = true;
+    }
+
+    internal void show_in_window_about ()
+        requires (in_window_about == false)
+    {
+        if (about_list_created)
+            about_list.reset ();
+        else
+            create_about_list ();
+
+        set_visible_child (about_list);
+        in_window_about = true;
+    }
+}
diff --git a/editor/browser-view.vala b/editor/browser-view.vala
index 3445d3e..c294e70 100644
--- a/editor/browser-view.vala
+++ b/editor/browser-view.vala
@@ -48,28 +48,23 @@ private class SimpleSettingObject : Object
     }
 }
 
-[GtkTemplate (ui = "/ca/desrt/dconf-editor/ui/browser-view.ui")]
-private class BrowserView : Stack, AdaptativeWidget
+private class BrowserView : BaseView, AdaptativeWidget
 {
     [CCode (notify = false)] internal uint16 last_context_id { get; private set; default = 
ModelUtils.undefined_context_id; }
 
-    [GtkChild] private BrowserInfoBar   info_bar;
-    [GtkChild] private BrowserStack     current_child;
-    [GtkChild] private Grid             current_child_grid;
+    private BrowserInfoBar  info_bar;
+    private BrowserStack    current_child;
 
     private SortingOptions sorting_options;
     private GLib.ListStore? key_model = null;
 
-    private AdaptativeWidget.WindowSize window_size = AdaptativeWidget.WindowSize.START_SIZE;
-    private void set_window_size (AdaptativeWidget.WindowSize new_size)
+    protected override void set_window_size (AdaptativeWidget.WindowSize new_size)
     {
-        window_size = new_size;
+        base.set_window_size (new_size);
         current_child.set_window_size (new_size);
         bookmarks_list.set_window_size (new_size);
         if (modifications_list_created)
             modifications_list.set_window_size (new_size);
-        if (about_list_created)
-            about_list.set_window_size (new_size);
     }
 
     private ModificationsHandler _modifications_handler;
@@ -98,19 +93,44 @@ private class BrowserView : Stack, AdaptativeWidget
     {
         install_action_entries ();
 
-        create_bookmarks_list ();
-
+        info_bar = new BrowserInfoBar ();
         info_bar.add_label ("soft-reload-folder", _("Sort preferences have changed. Do you want to refresh 
the view?"),
                                                   _("Refresh"), "bro.refresh-folder");
         info_bar.add_label ("hard-reload-folder", _("This folder content has changed. Do you want to reload 
the view?"),
                                                   _("Reload"), "browser.reload-folder");
         info_bar.add_label ("hard-reload-object", _("This key’s properties have changed. Do you want to 
reload the view?"),
                                                   _("Reload"), "browser.reload-object");   // TODO also for 
key removing?
+        info_bar.show ();
+        current_child_grid.add (info_bar);
+
+        current_child = new BrowserStack ();
+        current_child.show ();
+        current_child_grid.add (current_child);
+
+        create_bookmarks_list ();
     }
 
-    internal bool is_in_in_window_mode ()
+    internal override bool is_in_in_window_mode ()
     {
-        return (in_window_bookmarks || in_window_modifications || in_window_about);
+        return (in_window_bookmarks || in_window_modifications || base.is_in_in_window_mode ());
+    }
+
+    internal override void show_default_view ()
+    {
+        if (in_window_bookmarks)
+        {
+            if (in_window_bookmarks_edit_mode)
+                leave_bookmarks_edit_mode ();
+            in_window_bookmarks = false;
+            set_visible_child (current_child_grid);
+        }
+        else if (in_window_modifications)
+        {
+            in_window_modifications = false;
+            set_visible_child (current_child_grid);
+        }
+        else
+            base.show_default_view ();
     }
 
     /*\
@@ -210,48 +230,6 @@ private class BrowserView : Stack, AdaptativeWidget
             modifications_handler.set_gsettings_key_value (full_name, context_id, new Variant.boolean 
(key_value_request));
     }
 
-    /*\
-    * * in-window about
-    \*/
-
-    private bool in_window_about = false;
-
-    private bool about_list_created = false;
-    private AboutList about_list;
-
-    private void create_about_list ()
-    {
-        about_list = new AboutList (/* needs shadows   */ false,
-                                    /* big placeholder */ true);
-        about_list.set_window_size (window_size);
-        about_list.show ();
-        add (about_list);
-        about_list_created = true;
-    }
-
-    internal void show_in_window_about ()
-    {
-        if (in_window_bookmarks)
-            hide_in_window_bookmarks ();
-        else if (in_window_modifications)
-            hide_in_window_modifications ();
-
-        if (about_list_created)
-            about_list.reset ();
-        else
-            create_about_list ();
-
-        set_visible_child (about_list);
-        in_window_about = true;
-    }
-
-    internal void hide_in_window_about ()
-        requires (in_window_about == true)
-    {
-        in_window_about = false;
-        set_visible_child (current_child_grid);
-    }
-
     /*\
     * * modifications
     \*/
@@ -265,7 +243,7 @@ private class BrowserView : Stack, AdaptativeWidget
     {
         modifications_list = new ModificationsList (/* needs shadows   */ false,
                                                     /* big placeholder */ true);
-        modifications_list.set_window_size (window_size);
+        modifications_list.set_window_size (saved_window_size);
         // modifications_list.selection_changed.connect (() => ...);
         modifications_list.show ();
         add (modifications_list);
@@ -275,10 +253,8 @@ private class BrowserView : Stack, AdaptativeWidget
     internal void show_in_window_modifications ()
         requires (modifications_list_created == true)
     {
-        if (in_window_bookmarks)
-            hide_in_window_bookmarks ();
-        else if (in_window_about)
-            hide_in_window_about ();
+        if (in_window_bookmarks || in_window_about)
+            show_default_view ();
 
         modifications_list.reset ();
 
@@ -286,13 +262,6 @@ private class BrowserView : Stack, AdaptativeWidget
         in_window_modifications = true;
     }
 
-    internal void hide_in_window_modifications ()
-        requires (in_window_modifications == true)
-    {
-        in_window_modifications = false;
-        set_visible_child (current_child_grid);
-    }
-
     private void update_in_window_modifications ()
     {
         if (!modifications_list_created)
@@ -302,7 +271,7 @@ private class BrowserView : Stack, AdaptativeWidget
         modifications_list.bind_model (modifications_liststore, delayed_setting_row_create);
 
         if (in_window_modifications && modifications_handler.mode == ModificationsMode.NONE)
-            hide_in_window_modifications ();
+            show_default_view ();
     }
     private Widget delayed_setting_row_create (Object object)
     {
@@ -335,10 +304,8 @@ private class BrowserView : Stack, AdaptativeWidget
 
     internal void show_in_window_bookmarks (string [] bookmarks)
     {
-        if (in_window_modifications)
-            hide_in_window_modifications ();
-        else if (in_window_about)
-            hide_in_window_about ();
+        if (in_window_modifications || in_window_about)
+            show_default_view ();
 
         bookmarks_list.reset ();
 
@@ -358,15 +325,6 @@ private class BrowserView : Stack, AdaptativeWidget
         bookmarks_list.update_bookmark_icon (bookmark, icon);
     }
 
-    internal void hide_in_window_bookmarks ()
-        requires (in_window_bookmarks == true)
-    {
-        if (in_window_bookmarks_edit_mode)
-            leave_bookmarks_edit_mode ();
-        in_window_bookmarks = false;
-        set_visible_child (current_child_grid);
-    }
-
     internal void enter_bookmarks_edit_mode ()
         requires (in_window_bookmarks == true)
     {
@@ -572,16 +530,16 @@ private class BrowserView : Stack, AdaptativeWidget
 
     // current row property
     internal string get_selected_row_name () { return current_child.get_selected_row_name (); }
-    internal string? get_copy_text ()
+    internal override string? get_copy_text ()
     {
         if (in_window_bookmarks)
             return bookmarks_list.get_copy_text ();
         if (in_window_modifications)
             return modifications_list.get_copy_text ();
-        if (in_window_about)
-            return about_list.get_copy_text (); // TODO copying logo...
-        else
-            return current_child.get_copy_text ();
+        string? base_copy_text = base.get_copy_text ();
+        if (base_copy_text != null)
+            return base_copy_text;
+        return current_child.get_copy_text ();
     }
     internal string? get_copy_path_text ()   { return current_child.get_copy_path_text ();    }
 
diff --git a/editor/browser-window.vala b/editor/browser-window.vala
index 8dc31c4..ec9b67c 100644
--- a/editor/browser-window.vala
+++ b/editor/browser-window.vala
@@ -769,7 +769,7 @@ private abstract class BrowserWindow : AdaptativeWindow, AdaptativeWidget
         {
             in_window_about = false;
             headerbar.show_default_view ();
-            browser_view.hide_in_window_about ();
+            browser_view.show_default_view ();
         }
         else
             assert_not_reached ();
diff --git a/editor/dconf-editor.gresource.xml b/editor/dconf-editor.gresource.xml
index 31e132b..1cbd569 100644
--- a/editor/dconf-editor.gresource.xml
+++ b/editor/dconf-editor.gresource.xml
@@ -2,12 +2,12 @@
 <gresources>
   <gresource prefix="/ca/desrt/dconf-editor/ui">
     <file preprocess="xml-stripblanks">base-headerbar.ui</file>
+    <file preprocess="xml-stripblanks">base-view.ui</file>
     <file preprocess="xml-stripblanks">bookmark.ui</file>
     <file preprocess="xml-stripblanks">bookmarks.ui</file>
     <file preprocess="xml-stripblanks">bookmarks-controller.ui</file>
     <file preprocess="xml-stripblanks">browser-infobar.ui</file>
     <file preprocess="xml-stripblanks">browser-stack.ui</file>
-    <file preprocess="xml-stripblanks">browser-view.ui</file>
     <file preprocess="xml-stripblanks">browser-window.ui</file>
     <file preprocess="xml-stripblanks">config-list-box-row.ui</file>
     <file>dconf-editor.css</file>
diff --git a/editor/dconf-window.vala b/editor/dconf-window.vala
index 516df8f..8c8e880 100644
--- a/editor/dconf-window.vala
+++ b/editor/dconf-window.vala
@@ -503,12 +503,12 @@ private class DConfWindow : BrowserWindow
             if (browser_view.in_window_bookmarks_edit_mode)
                 leave_edit_mode ();     // TODO place after
             headerbar.show_default_view ();
-            browser_view.hide_in_window_bookmarks ();
+            browser_view.show_default_view ();
         }
         else if (browser_view.in_window_modifications)
         {
             headerbar.show_default_view ();
-            browser_view.hide_in_window_modifications ();
+            browser_view.show_default_view ();
         }
         else
             base.show_default_view ();
diff --git a/editor/meson.build b/editor/meson.build
index d48ff5a..8475a02 100644
--- a/editor/meson.build
+++ b/editor/meson.build
@@ -70,6 +70,7 @@ sources = files(
   'adaptative-pathbar.vala',
   'adaptative-window.vala',
   'base-headerbar.vala',
+  'base-view.vala',
   'bookmarks.vala',
   'bookmarks-controller.vala',
   'bookmarks-list.vala',
@@ -108,12 +109,12 @@ sources = files(
 
 resource_data = files(
   'base-headerbar.ui',
+  'base-view.ui',
   'bookmarks.ui',
   'bookmarks-controller.ui',
   'bookmark.ui',
   'browser-infobar.ui',
   'browser-stack.ui',
-  'browser-view.ui',
   'browser-window.ui',
   'config-list-box-row.ui',
   'dconf-editor.css',


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