[dconf-editor] Introduce BaseView.
- From: Arnaud B. <arnaudb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dconf-editor] Introduce BaseView.
- Date: Wed, 19 Dec 2018 17:19:51 +0000 (UTC)
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]