diff --git a/data/gtk/window.blp b/data/gtk/window.blp index 92cdfc2..a8d4909 100644 --- a/data/gtk/window.blp +++ b/data/gtk/window.blp @@ -45,65 +45,132 @@ Adw.StatusPage hidden_notice_empty { template $CartridgesWindow : Adw.ApplicationWindow { title: _("Cartridges"); + width-request: 281; + height-request: 100; + + Adw.Breakpoint { + condition ("max-width: 564px") + setters { + overlay_split_view.collapsed: true; + details_view_box.orientation: vertical; + details_view_box.margin-top: 12; + details_view_box.margin-start: 12; + details_view_box.margin-end: 12; + details_view_details_box.margin-start: 0; + details_view_details_box.margin-end: 0; + details_view_title.margin-top: 30; + details_view_title.halign: center; + details_view_developer.halign: center; + details_view_date_box.halign: center; + details_view_toolbar.halign: center; + details_view_toolbar.orientation: vertical; + details_view_play_button.halign: center; + details_view_toolbar_buttons.margin-start: 0; + } + } Adw.ToastOverlay toast_overlay { Adw.NavigationView navigation_view { Adw.NavigationPage library_page { title: _("Cartridges"); - Adw.ToolbarView library_view { - [top] - Adw.HeaderBar header_bar { - [start] - MenuButton { - tooltip-text: _("Add Game"); - icon-name: "list-add-symbolic"; - menu-model: add_games; - } + Adw.OverlaySplitView overlay_split_view { + [sidebar] + Adw.NavigationPage { + title: _("Sources"); + Adw.ToolbarView { + [top] + Adw.HeaderBar { + [start] + Button { + icon-name: "sidebar-show-symbolic"; + action-name: "win.show_sidebar"; + } + } - [end] - MenuButton primary_menu_button { - tooltip-text: _("Main Menu"); - icon-name: "open-menu-symbolic"; - menu-model: primary_menu; - } - - [end] - ToggleButton search_button { - tooltip-text: _("Search"); - icon-name: "system-search-symbolic"; - action-name: "win.toggle_search"; - } - } - - [top] - SearchBar search_bar { - search-mode-enabled: bind-property search_button.active bidirectional; - key-capture-widget: library_view; - - Adw.Clamp { - maximum-size: 500; - tightening-threshold: 500; - - SearchEntry search_entry { - hexpand: true; + ListBox { + Box { + Image { + icon-name: "view-grid"; + margin-start: 3; + margin-end: 9; + } + Label { + halign: start; + label: _("All"); + } + } + styles ["navigation-sidebar"] } } } - Overlay library_overlay { - ScrolledWindow scrolledwindow { - FlowBox library { - homogeneous: true; - halign: center; - valign: start; - column-spacing: 12; - row-spacing: 12; - margin-top: 15; - margin-bottom: 15; - margin-start: 15; - margin-end: 15; - selection-mode: none; + Adw.ToolbarView library_view { + + [top] + Adw.HeaderBar header_bar { + + [start] + Revealer { + transition-type: slide_right; + reveal-child: bind-property overlay_split_view.show-sidebar inverted; + Button show_sidebar_button { + icon-name: "sidebar-show-symbolic"; + action-name: "win.show_sidebar"; + } + } + + [start] + MenuButton { + tooltip-text: _("Add Game"); + icon-name: "list-add-symbolic"; + menu-model: add_games; + } + + [end] + MenuButton primary_menu_button { + tooltip-text: _("Main Menu"); + icon-name: "open-menu-symbolic"; + menu-model: primary_menu; + } + + [end] + ToggleButton search_button { + tooltip-text: _("Search"); + icon-name: "system-search-symbolic"; + action-name: "win.toggle_search"; + } + } + + [top] + SearchBar search_bar { + search-mode-enabled: bind-property search_button.active bidirectional; + key-capture-widget: library_view; + + Adw.Clamp { + maximum-size: 500; + tightening-threshold: 500; + + SearchEntry search_entry { + hexpand: true; + } + } + } + + Overlay library_overlay { + ScrolledWindow scrolledwindow { + FlowBox library { + homogeneous: true; + halign: center; + valign: start; + column-spacing: 12; + row-spacing: 12; + margin-top: 15; + margin-bottom: 15; + margin-start: 15; + margin-end: 15; + selection-mode: none; + } } } } @@ -185,190 +252,163 @@ Adw.NavigationPage details_page { Adw.HeaderBar { } - Adw.BreakpointBin { - hexpand: true; - vexpand: true; - width-request: 229; - height-request: 54; + ScrolledWindow { + Box details_view_box { + halign: center; + valign: center; + margin-start: 24; + margin-end: 24; + margin-top: 24; + margin-bottom: 24; - Adw.Breakpoint { - condition ("max-width: 564px") - setters { - details_view_box.orientation: vertical; - details_view_box.margin-top: 12; - details_view_box.margin-start: 12; - details_view_box.margin-end: 12; - details_view_details_box.margin-start: 0; - details_view_details_box.margin-end: 0; - details_view_title.margin-top: 30; - details_view_title.halign: center; - details_view_developer.halign: center; - details_view_date_box.halign: center; - details_view_toolbar.halign: center; - details_view_toolbar.orientation: vertical; - details_view_play_button.halign: center; - details_view_toolbar_buttons.margin-start: 0; + Adw.Clamp { + maximum-size: 200; + + Overlay { + [overlay] + Spinner details_view_spinner { + margin-start: 72; + margin-end: 72; + } + + Picture details_view_cover { + halign: end; + valign: start; + width-request: 200; + height-request: 300; + + styles [ + "card", + ] + } + } } - } - ScrolledWindow { - Box details_view_box { - halign: center; + Box details_view_details_box { + orientation: vertical; + margin-start: 48; + vexpand: true; valign: center; - margin-start: 24; - margin-end: 24; - margin-top: 24; - margin-bottom: 24; - Adw.Clamp { - maximum-size: 200; + Label details_view_title { + label: _("Game Title"); + hexpand: true; + halign: start; + max-width-chars: 24; + wrap: true; + wrap-mode: word_char; + natural-wrap-mode: word; - Overlay { - [overlay] - Spinner details_view_spinner { - margin-start: 72; - margin-end: 72; - } + styles [ + "title-1", + ] + } - Picture details_view_cover { - halign: end; - valign: start; - width-request: 200; - height-request: 300; + Label details_view_developer { + margin-top: 6; + hexpand: true; + halign: start; + max-width-chars: 36; + wrap: true; + wrap-mode: word_char; + natural-wrap-mode: word; - styles [ - "card", - ] - } + styles [ + "heading", + ] + } + + Box details_view_date_box { + orientation: horizontal; + margin-top: 15; + hexpand: true; + halign: start; + + Label details_view_added { + wrap: true; + wrap-mode: word_char; + natural-wrap-mode: word; + justify: center; + } + + Label details_view_last_played { + margin-start: 12; + wrap: true; + wrap-mode: word_char; + natural-wrap-mode: word; + justify: center; } } - Box details_view_details_box { - orientation: vertical; - margin-start: 48; + Box details_view_toolbar { + hexpand: true; vexpand: true; valign: center; - Label details_view_title { - label: _("Game Title"); - hexpand: true; + Button details_view_play_button { + name: "details_view_play_button"; + action-name: "app.launch_game"; + label: _("Play"); halign: start; - max-width-chars: 24; - wrap: true; - wrap-mode: word_char; - natural-wrap-mode: word; + margin-top: 24; styles [ - "title-1", + "opaque", + "pill", ] } - Label details_view_developer { - margin-top: 6; - hexpand: true; + Box details_view_toolbar_buttons { halign: start; - max-width-chars: 36; - wrap: true; - wrap-mode: word_char; - natural-wrap-mode: word; - - styles [ - "heading", - ] - } - - Box details_view_date_box { - orientation: horizontal; - margin-top: 15; - hexpand: true; - halign: start; - - Label details_view_added { - wrap: true; - wrap-mode: word_char; - natural-wrap-mode: word; - justify: center; - } - - Label details_view_last_played { - margin-start: 12; - wrap: true; - wrap-mode: word_char; - natural-wrap-mode: word; - justify: center; - } - } - - Box details_view_toolbar { - hexpand: true; - vexpand: true; valign: center; + margin-top: 24; + margin-start: 9; - Button details_view_play_button { - name: "details_view_play_button"; - action-name: "app.launch_game"; - label: _("Play"); - halign: start; - margin-top: 24; + Button { + icon-name: "document-edit-symbolic"; + action-name: "app.edit_game"; + tooltip-text: _("Edit"); styles [ - "opaque", - "pill", + "raised", + "circular", ] } - Box details_view_toolbar_buttons { - halign: start; - valign: center; - margin-top: 24; - margin-start: 9; - - Button { - icon-name: "document-edit-symbolic"; - action-name: "app.edit_game"; - tooltip-text: _("Edit"); - - styles [ - "raised", - "circular", - ] - } - - Button details_view_hide_button { - action-name: "app.hide_game"; - - styles [ - "raised", - "circular", - ] - } - - Button { - icon-name: "user-trash-symbolic"; - action-name: "app.remove_game"; - tooltip-text: _("Remove"); - - styles [ - "raised", - "circular", - ] - } - - MenuButton { - icon-name: "system-search-symbolic"; - menu-model: search; - tooltip-text: _("Search"); - - styles [ - "raised", - "circular", - ] - } + Button details_view_hide_button { + action-name: "app.hide_game"; styles [ - "toolbar", + "raised", + "circular", ] } + + Button { + icon-name: "user-trash-symbolic"; + action-name: "app.remove_game"; + tooltip-text: _("Remove"); + + styles [ + "raised", + "circular", + ] + } + + MenuButton { + icon-name: "system-search-symbolic"; + menu-model: search; + tooltip-text: _("Search"); + + styles [ + "raised", + "circular", + ] + } + + styles [ + "toolbar", + ] } } } diff --git a/data/hu.kramo.Cartridges.gschema.xml.in b/data/hu.kramo.Cartridges.gschema.xml.in index 8468ac5..ea7295d 100644 --- a/data/hu.kramo.Cartridges.gschema.xml.in +++ b/data/hu.kramo.Cartridges.gschema.xml.in @@ -106,6 +106,12 @@ "a-z" + + false + + + "all" + "[]" diff --git a/data/hu.kramo.Cartridges.metainfo.xml.in b/data/hu.kramo.Cartridges.metainfo.xml.in index c43227f..60d29b5 100644 --- a/data/hu.kramo.Cartridges.metainfo.xml.in +++ b/data/hu.kramo.Cartridges.metainfo.xml.in @@ -22,7 +22,7 @@ touch - 229 + 280 diff --git a/src/main.py b/src/main.py index 4b06667..811f92c 100644 --- a/src/main.py +++ b/src/main.py @@ -113,6 +113,7 @@ class CartridgesApplication(Adw.Application): ("protondb_search",), ("lutris_search",), ("hltb_search",), + ("show_sidebar", ("F9",), self.win), ("show_hidden", ("h",), self.win), ("go_to_parent", ("Up",), self.win), ("go_home", ("Home",), self.win), diff --git a/src/window.py b/src/window.py index 8986ceb..85767f4 100644 --- a/src/window.py +++ b/src/window.py @@ -27,9 +27,11 @@ from src.utils.relative_date import relative_date class CartridgesWindow(Adw.ApplicationWindow): __gtype_name__ = "CartridgesWindow" + overlay_split_view = Gtk.Template.Child() navigation_view = Gtk.Template.Child() toast_overlay = Gtk.Template.Child() primary_menu_button = Gtk.Template.Child() + show_sidebar_button = Gtk.Template.Child() details_view = Gtk.Template.Child() library_page = Gtk.Template.Child() library_view = Gtk.Template.Child() @@ -88,6 +90,8 @@ class CartridgesWindow(Adw.ApplicationWindow): self.notice_empty.set_icon_name(shared.APP_ID + "-symbolic") + self.overlay_split_view.set_show_sidebar(shared.state_schema.get_boolean("show-sidebar")) + if shared.PROFILE == "development": self.add_css_class("devel") @@ -147,6 +151,9 @@ class CartridgesWindow(Adw.ApplicationWindow): remove_from_overlay(self.hidden_notice_no_results) def filter_func(self, child): + if shared.state_schema.get_string("filter") != "all": + pass + game = child.get_child() text = ( ( @@ -260,6 +267,12 @@ class CartridgesWindow(Adw.ApplicationWindow): widget.get_visible_page() == self.library_page ) + def on_show_sidebar_action(self, *_args): + shared.state_schema.set_boolean( + "show-sidebar", (value := not self.overlay_split_view.get_show_sidebar()) + ) + self.overlay_split_view.set_show_sidebar(value) + def on_go_to_parent_action(self, *_args): if self.navigation_view.get_visible_page() == self.details_page: self.navigation_view.pop()