window: Add status pages

This commit is contained in:
Jamie Gravendeel
2025-12-01 15:53:05 +01:00
parent 963efa0bc9
commit 99adcea647
2 changed files with 90 additions and 46 deletions

View File

@@ -47,6 +47,10 @@ template $Window: Adw.ApplicationWindow {
Adw.NavigationPage { Adw.NavigationPage {
title: bind template.title; title: bind template.title;
styles [
"view",
]
child: Adw.ToolbarView { child: Adw.ToolbarView {
[top] [top]
Adw.HeaderBar { Adw.HeaderBar {
@@ -125,7 +129,14 @@ template $Window: Adw.ApplicationWindow {
} }
} }
content: ScrolledWindow { content: Adw.ViewStack {
enable-transitions: true;
visible-child-name: bind $_if_else(grid.model as <NoSelection>.n-items, "grid", $_if_else(template.search-text, "empty-search", $_if_else(template.show-hidden, "empty-hidden", "empty") as <string>) as <string>) as <string>;
Adw.ViewStackPage {
name: "grid";
child: ScrolledWindow {
hscrollbar-policy: never; hscrollbar-policy: never;
child: GridView grid { child: GridView grid {
@@ -183,10 +194,37 @@ template $Window: Adw.ApplicationWindow {
}; };
}; };
}; };
}
styles [ Adw.ViewStackPage {
"view", name: "empty-search";
]
child: Adw.StatusPage {
icon-name: "edit-find-symbolic";
title: _("No Games Found");
description: _("Try a different search");
};
}
Adw.ViewStackPage {
name: "empty-hidden";
child: Adw.StatusPage {
icon-name: "view-conceal-symbolic";
title: _("No Hidden Games");
description: _("Games you hide will appear here");
};
}
Adw.ViewStackPage {
name: "empty";
child: Adw.StatusPage {
icon-name: bind template.application as <Application>.application-id;
title: _("No Games");
};
}
};
}; };
} }

View File

@@ -6,7 +6,7 @@ import locale
from collections.abc import Generator from collections.abc import Generator
from datetime import UTC, datetime from datetime import UTC, datetime
from gettext import gettext as _ from gettext import gettext as _
from typing import Any from typing import Any, TypeVar
from gi.repository import Adw, Gdk, Gio, GLib, GObject, Gtk from gi.repository import Adw, Gdk, Gio, GLib, GObject, Gtk
@@ -25,6 +25,8 @@ SORT_MODES = {
"oldest": ("added", True), "oldest": ("added", True),
} }
_T = TypeVar("_T")
@Gtk.Template.from_resource(f"{PREFIX}/window.ui") @Gtk.Template.from_resource(f"{PREFIX}/window.ui")
class Window(Adw.ApplicationWindow): class Window(Adw.ApplicationWindow):
@@ -83,6 +85,10 @@ class Window(Adw.ApplicationWindow):
), ),
)) ))
@Gtk.Template.Callback()
def _if_else(self, _obj, condition: bool, first: _T, second: _T) -> _T:
return first if condition else second
@Gtk.Template.Callback() @Gtk.Template.Callback()
def _activate_game(self, grid: Gtk.GridView, position: int): def _activate_game(self, grid: Gtk.GridView, position: int):
if isinstance(model := grid.props.model, Gio.ListModel): if isinstance(model := grid.props.model, Gio.ListModel):