[gnome-games/wip/exalm/preferences: 2/5] preferences-window: Use a view switcher instead of sidebar



commit 22888e9eb413b7ff7b58584bc2593bd395343941
Author: Alexander Mikhaylenko <alexm gnome org>
Date:   Tue Jun 2 16:54:19 2020 +0500

    preferences-window: Use a view switcher instead of sidebar
    
    Simplify the layout and make it more similar to HdyPreferencesWindow.
    We cannot use the actual HdyPreferencesWindow yet because of:
    
    https://gitlab.gnome.org/GNOME/libhandy/-/issues/272

 data/ui/preferences-window.ui  | 196 +++++++++--------------------------------
 src/ui/preferences-window.vala |  58 +-----------
 2 files changed, 47 insertions(+), 207 deletions(-)
---
diff --git a/data/ui/preferences-window.ui b/data/ui/preferences-window.ui
index 694a9320..1c9f3ab2 100644
--- a/data/ui/preferences-window.ui
+++ b/data/ui/preferences-window.ui
@@ -3,7 +3,7 @@
   <requires lib="gtk+" version="3.24"/>
   <template class="GamesPreferencesWindow" parent="HdyWindow">
     <property name="title" translatable="yes">Preferences</property>
-    <property name="default-width">800</property>
+    <property name="default-width">650</property>
     <property name="default-height">500</property>
     <property name="window-position">center-on-parent</property>
     <child>
@@ -12,172 +12,78 @@
         <signal name="notify::transition-running" handler="subpage_transition_finished"/>
         <signal name="notify::visible-child" handler="on_visible_child_changed"/>
         <child>
-          <object class="HdyLeaflet" id="content_leaflet">
+          <object class="GtkBox" id="main_box">
             <property name="visible">True</property>
-            <property name="can-swipe-back">True</property>
-            <signal name="notify::folded" handler="on_folded_changed" after="yes"/>
-            <signal name="notify::visible-child" handler="update_header_group"/>
+            <property name="orientation">vertical</property>
             <child>
-              <object class="GtkBox">
+              <object class="HdyHeaderBar">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <child>
-                  <object class="HdyWindowHandle">
-                    <property name="visible">True</property>
-                    <child>
-                      <object class="GtkHeaderBar" id="left_header_bar">
-                        <property name="visible">True</property>
-                        <property name="title" translatable="yes">Preferences</property>
-                        <property name="show-close-button">True</property>
-                        <style>
-                          <class name="titlebar"/>
-                        </style>
-                        <child>
-                          <object class="GtkButton" id="window_back_button">
-                            <property name="visible">False</property>
-                            <signal name="clicked" handler="on_back_clicked"/>
-                            <style>
-                              <class name="image-button"/>
-                            </style>
-                            <child internal-child="accessible">
-                              <object class="AtkObject">
-                                <property name="accessible-name" translatable="yes">Back</property>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkImage">
-                                <property name="visible">True</property>
-                                <property name="icon-name">go-previous-symbolic</property>
-                                <property name="icon-size">1</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="pack-type">start</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-                <child>
-                  <object class="GamesPreferencesSidebar" id="sidebar">
+                <property name="title" translatable="yes">Preferences</property>
+                <property name="show-close-button">True</property>
+                <property name="centering-policy">strict</property>
+                <child type="title">
+                  <object class="HdyViewSwitcherTitle" id="switcher_title">
                     <property name="visible">True</property>
+                    <property name="title" bind-source="GamesPreferencesWindow" bind-property="title"/>
                     <property name="stack">stack</property>
-                    <property name="vexpand">True</property>
-                    <property name="width-request">150</property>
-                    <signal name="row-selected" handler="sidebar_row_selected"/>
+                    <property name="policy">narrow</property>
                   </object>
                 </child>
               </object>
             </child>
             <child>
-              <object class="GtkBox">
+              <object class="GtkStack" id="stack">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <property name="vexpand">True</property>
+                <property name="expand">True</property>
+                <property name="visible-child">video_page</property>
+                <property name="transition-type">crossfade</property>
+                <property name="width-request">300</property>
+                <signal name="notify::visible-child" handler="update_ui"/>
                 <child>
-                  <object class="HdyWindowHandle">
+                  <object class="GamesPreferencesPageVideo" id="video_page">
                     <property name="visible">True</property>
-                    <child>
-                      <object class="GtkSeparator" id="header_separator">
-                        <property name="orientation">vertical</property>
-                        <property name="visible">True</property>
-                        <style>
-                          <class name="sidebar"/>
-                        </style>
-                      </object>
-                    </child>
                   </object>
+                  <packing>
+                    <property name="title" translatable="yes">Video</property>
+                    <property name="icon-name">video-display-symbolic</property>
+                  </packing>
                 </child>
                 <child>
-                  <object class="GtkSeparator">
-                    <property name="orientation">vertical</property>
+                  <object class="GamesPreferencesPageControllers" id="controllers_page">
                     <property name="visible">True</property>
-                    <property name="vexpand">True</property>
-                    <style>
-                      <class name="sidebar"/>
-                    </style>
                   </object>
+                  <packing>
+                    <property name="title" translatable="yes">Controllers</property>
+                    <property name="icon-name">applications-games-symbolic</property>
+                  </packing>
                 </child>
-              </object>
-              <packing>
-                <property name="allow-visible">False</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkBox">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
                 <child>
-                  <object class="HdyWindowHandle">
+                  <object class="GamesPreferencesPagePlatforms" id="platforms_page">
                     <property name="visible">True</property>
-                    <child>
-                      <object class="GtkHeaderBar" id="right_header_bar">
-                        <property name="visible">True</property>
-                        <property name="show-close-button">True</property>
-                        <style>
-                          <class name="titlebar"/>
-                        </style>
-                        <child>
-                          <object class="GtkButton" id="page_back_button">
-                            <property name="visible">False</property>
-                            <signal name="clicked" handler="on_back_clicked"/>
-                            <style>
-                              <class name="image-button"/>
-                            </style>
-                            <child internal-child="accessible">
-                              <object class="AtkObject">
-                                <property name="accessible-name" translatable="yes">Back</property>
-                              </object>
-                            </child>
-                            <child>
-                              <object class="GtkImage">
-                                <property name="visible">True</property>
-                                <property name="icon-name">go-previous-symbolic</property>
-                                <property name="icon-size">1</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="pack-type">start</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
                   </object>
+                  <packing>
+                    <property name="title" translatable="yes">Platforms</property>
+                    <property name="icon-name">view-list-bullet-symbolic</property>
+                  </packing>
                 </child>
                 <child>
-                  <object class="GtkStack" id="stack">
+                  <object class="GamesPreferencesPageImportExport" id="import_export_page">
                     <property name="visible">True</property>
-                    <property name="expand">True</property>
-                    <property name="visible-child">video_page</property>
-                    <property name="transition-type">crossfade</property>
-                    <property name="width-request">300</property>
-                    <child>
-                      <object class="GamesPreferencesPageVideo" id="video_page">
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GamesPreferencesPageControllers" id="controllers_page">
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GamesPreferencesPagePlatforms" id="platforms_page">
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GamesPreferencesPageImportExport" id="import_export_page">
-                        <property name="visible">True</property>
-                      </object>
-                    </child>
                   </object>
+                  <packing>
+                    <property name="title" translatable="yes">Import &amp; Export</property>
+                    <property name="icon-name">package-x-generic-symbolic</property>
+                  </packing>
                 </child>
               </object>
             </child>
+            <child>
+              <object class="HdyViewSwitcherBar">
+                <property name="visible">True</property>
+                <property name="stack">stack</property>
+                <property name="reveal" bind-source="switcher_title" bind-property="title-visible"/>
+              </object>
+            </child>
           </object>
         </child>
         <child>
@@ -189,18 +95,4 @@
       </object>
     </child>
   </template>
-  <object class="GtkSizeGroup">
-    <property name="mode">vertical</property>
-    <widgets>
-      <widget name="left_header_bar"/>
-      <widget name="header_separator"/>
-      <widget name="right_header_bar"/>
-    </widgets>
-  </object>
-  <object class="HdyHeaderGroup" id="header_group">
-    <headerbars>
-      <headerbar name="left_header_bar"/>
-      <headerbar name="right_header_bar"/>
-    </headerbars>
-  </object>
 </interface>
diff --git a/src/ui/preferences-window.vala b/src/ui/preferences-window.vala
index 5ff4def4..348c95f1 100644
--- a/src/ui/preferences-window.vala
+++ b/src/ui/preferences-window.vala
@@ -2,24 +2,14 @@
 
 [GtkTemplate (ui = "/org/gnome/Games/ui/preferences-window.ui")]
 private class Games.PreferencesWindow : Hdy.Window {
-       [GtkChild]
-       private Gtk.HeaderBar right_header_bar;
        [GtkChild]
        private Hdy.Deck content_deck;
        [GtkChild]
-       private Hdy.Leaflet content_leaflet;
+       private Gtk.Box main_box;
        [GtkChild]
        private Gtk.Box content_subpage_box;
        [GtkChild]
-       private PreferencesSidebar sidebar;
-       [GtkChild]
        private Gtk.Stack stack;
-       [GtkChild]
-       private Hdy.HeaderGroup header_group;
-       [GtkChild]
-       private Gtk.Button page_back_button;
-       [GtkChild]
-       private Gtk.Button window_back_button;
 
        private PreferencesSubpage _subpage;
        public PreferencesSubpage subpage {
@@ -41,7 +31,6 @@ private class Games.PreferencesWindow : Hdy.Window {
                                                                          BindingFlags.SYNC_CREATE);
 
                                content_deck.navigate (Hdy.NavigationDirection.FORWARD);
-                               content_leaflet.navigate (Hdy.NavigationDirection.FORWARD);
                        }
 
                        _subpage = value;
@@ -56,12 +45,6 @@ private class Games.PreferencesWindow : Hdy.Window {
        }
 
        [GtkCallback]
-       private void sidebar_row_selected () {
-               content_leaflet.navigate (Hdy.NavigationDirection.FORWARD);
-
-               update_ui ();
-       }
-
        private void update_ui () {
                var page = stack.visible_child as PreferencesPage;
 
@@ -71,14 +54,11 @@ private class Games.PreferencesWindow : Hdy.Window {
                }
 
                if (page == null) {
-                       right_header_bar.title = "";
                        subpage = null;
 
                        return;
                }
 
-               right_header_bar.title = page.title;
-
                subpage_binding = page.bind_property ("subpage", this, "subpage",
                                                      BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
        }
@@ -91,9 +71,9 @@ private class Games.PreferencesWindow : Hdy.Window {
        }
 
        [GtkCallback]
-       public void subpage_transition_finished (Object object, ParamSpec param) {
+       public void subpage_transition_finished () {
                if (content_deck.transition_running ||
-                   content_deck.visible_child != content_leaflet)
+                   content_deck.visible_child != main_box)
                        return;
 
                remove_subpage ();
@@ -106,36 +86,4 @@ private class Games.PreferencesWindow : Hdy.Window {
 
                remove_subpage ();
        }
-
-       [GtkCallback]
-       private void on_back_clicked () {
-               if (!content_leaflet.navigate (Hdy.NavigationDirection.BACK))
-                       close ();
-       }
-
-       [GtkCallback]
-       private void on_folded_changed () {
-               var folded = content_leaflet.folded;
-
-               update_header_group ();
-               page_back_button.visible = folded;
-               window_back_button.visible = folded;
-               sidebar.show_selection = !folded;
-
-               if (folded)
-                       stack.transition_type = Gtk.StackTransitionType.NONE;
-               else
-                       stack.transition_type = Gtk.StackTransitionType.CROSSFADE;
-       }
-
-       [GtkCallback]
-       private void update_header_group () {
-               var folded = content_leaflet.folded;
-               var visible_header_bar = content_leaflet.visible_child as Gtk.HeaderBar;
-
-               if (folded)
-                       header_group.focus = visible_header_bar;
-               else
-                       header_group.focus = null;
-       }
 }


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