[gnome-games/wip/exalm/preferences: 2/5] preferences-window: Use a view switcher instead of sidebar
- From: Alexander Mikhaylenko <alexm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/wip/exalm/preferences: 2/5] preferences-window: Use a view switcher instead of sidebar
- Date: Tue, 2 Jun 2020 12:01:43 +0000 (UTC)
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 & 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]