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()