Add filters page ui

This commit is contained in:
heliguy
2024-07-10 14:53:52 -04:00
parent b566e76120
commit e00ec3f86a
7 changed files with 169 additions and 11 deletions

View File

@@ -0,0 +1,118 @@
using Gtk 4.0;
using Adw 1;
template $FiltersPage : Adw.NavigationPage {
title: _("Filter Packages");
Adw.ToolbarView {
[top]
Adw.HeaderBar {}
ScrolledWindow {
Adw.Clamp {
Box {
margin-start: 12;
margin-end: 12;
margin-bottom: 12;
orientation: vertical;
halign: fill;
spacing: 24;
Adw.PreferencesGroup {
title: _("Package Type");
description: _("Show packages of these types");
header-suffix:
Button all_types_button {
Adw.ButtonContent {
label: _("Select All");
icon-name: "selection-mode-symbolic";
}
valign: center;
styles ["flat"]
}
;
Adw.ActionRow application_row {
title: _("Applications");
subtitle: _("Packages that can be opened");
CheckButton app_check {
styles["selection-mode"]
}
activatable-widget: app_check;
}
Adw.ActionRow runtime_row {
title: _("Runtimes");
subtitle: _("Packages that applications depend on");
CheckButton runtime-check {
styles["selection-mode"]
}
activatable-widget: runtime-check;
}
}
Adw.PreferencesGroup {
title: _("Remotes");
description: _("Show packages from these remotes");
header-suffix:
Button all_remotes_button {
Adw.ButtonContent {
label: _("Select All");
icon-name: "selection-mode-symbolic";
}
valign: center;
styles ["flat"]
}
;
Adw.ActionRow {
title: _("Flathub");
subtitle: _("Installation: User");
CheckButton {
styles["selection-mode"]
}
}
Adw.ActionRow {
title: _("Flathub");
subtitle: _("Installation: System");
CheckButton {
styles["selection-mode"]
}
}
}
Adw.PreferencesGroup {
title: _("Runtimes");
description: _("Show apps that use these runtimes");
header-suffix:
Button all_runtimes_button {
Adw.ButtonContent {
label: _("Select All");
icon-name: "selection-mode-symbolic";
}
valign: center;
styles ["flat"]
}
;
Adw.ActionRow {
title: _("org.freedesktop.Platform.ffmpeg-full/x86_64/23.08");
CheckButton {
styles["selection-mode"]
}
}
Adw.ActionRow {
title: _("org.gnome.Platform/x86_64/44");
CheckButton {
styles["selection-mode"]
}
}
Adw.ActionRow {
title: _("org.gnome.Platform/x86_64/45");
CheckButton {
styles["selection-mode"]
}
}
Adw.ActionRow {
title: _("org.freedesktop.Platform.Compat.i386/x86_64/23.08");
CheckButton {
styles["selection-mode"]
}
}
}
}
}
}
}
}

View File

@@ -0,0 +1,11 @@
from gi.repository import Adw, Gtk, GLib#, Gio, Pango
from .host_info import HostInfo
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/filters_page/filters_page.ui")
class FiltersPage(Adw.NavigationPage):
__gtype_name__ = 'FiltersPage'
gtc = Gtk.Template.Child
def __init__(self, main_window, packages_page, **kwargs):
super().__init__(**kwargs)
# self.connect("hidden", lambda *_: packages_page.filter_button.set_active(False))

View File

@@ -9,6 +9,7 @@ blueprints = custom_target('blueprints',
'gtk/help-overlay.blp',
'main_window/window.blp',
'packages_page/packages_page.blp',
'filters_page/filters_page.blp',
'properties_page/properties_page.blp',
'change_version_page/change_version_page.blp',
),
@@ -58,6 +59,7 @@ warehouse_sources = [
'widgets/status_box.py',
'main_window/window.py',
'packages_page/packages_page.py',
'filters_page/filters_page.py',
'properties_page/properties_page.py',
'change_version_page/change_version_page.py',
'../data/style.css',

View File

@@ -11,6 +11,7 @@ template $PackagesPage : Adw.BreakpointBin {
setters {
packages_split.collapsed: true;
packages_split.show-content: false;
content_stack.transition-duration: 9999999;
}
}
@@ -42,16 +43,16 @@ template $PackagesPage : Adw.BreakpointBin {
tooltip-text: _("Search Packages");
}
[start]
Button filter_button {
icon-name: "funnel-symbolic";
tooltip-text: _("Filter Packages");
}
[end]
Button refresh_button {
icon-name: "arrow-circular-top-right-symbolic";
tooltip-text: _("Refresh List");
}
[end]
ToggleButton filter_button {
icon-name: "funnel-symbolic";
tooltip-text: _("Filter Packages");
}
[end]
ToggleButton select_button {
icon-name: "selection-mode-symbolic";
tooltip-text: _("Select Packages");
@@ -108,6 +109,14 @@ template $PackagesPage : Adw.BreakpointBin {
}
}
;
content:
Adw.NavigationPage {
title: "Content Stack";
Stack content_stack {
transition-type: slide_left_right;
}
}
;
}
}
}

View File

@@ -4,15 +4,18 @@ from .app_row import AppRow
from .error_toast import ErrorToast
from .properties_page import PropertiesPage
from .status_box import StatusBox
from .filters_page import FiltersPage
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/packages_page/packages_page.ui")
class PackagesPage(Adw.BreakpointBin):
__gtype_name__ = 'PackagesPage'
gtc = Gtk.Template.Child
packages_bpt = gtc()
packages_toast_overlay = gtc()
stack = gtc()
scrolled_window = gtc()
sidebar_button = gtc()
filter_button = gtc()
refresh_button = gtc()
search_bar = gtc()
search_entry = gtc()
@@ -21,6 +24,7 @@ class PackagesPage(Adw.BreakpointBin):
select_button = gtc()
packages_navpage = gtc()
status_view = gtc()
content_stack = gtc()
# Referred to in the main window
# It is used to determine if a new page should be made or not
@@ -52,6 +56,7 @@ class PackagesPage(Adw.BreakpointBin):
self.properties_page.set_properties(row.package)
self.properties_page.nav_view.pop()
self.packages_split.set_show_content(True)
self.filter_button.set_active(False)
def filter_func(self, row):
search_text = self.search_entry.get_text().lower()
@@ -80,18 +85,32 @@ class PackagesPage(Adw.BreakpointBin):
def select_button_handler(self, button):
self.set_selection_mode(button.get_active())
def filter_button_handler(self, button):
if button.get_active():
self.content_stack.set_visible_child(self.filters_page)
self.packages_split.set_show_content(True)
else:
self.content_stack.set_visible_child(self.properties_page)
def filter_page_handler(self, *args):
if self.packages_split.get_collapsed() and not self.packages_split.get_show_content():
self.filter_button.set_active(False)
def __init__(self, main_window, **kwargs):
super().__init__(**kwargs)
# Extra Object Creation
self.main_window = main_window
self.properties_page = PropertiesPage(main_window)
self.filters_page = FiltersPage(main_window, self)
self.loading_status = StatusBox(_("Fetching Packages"), _("This should only take a moment"))
# Apply
HostInfo.get_flatpaks(callback=self.generate_list)
self.packages_list_box.set_filter_func(self.filter_func)
self.packages_split.set_content(self.properties_page)
self.content_stack.add_child(self.properties_page)
self.content_stack.add_child(self.filters_page)
self.__class__.instance = self
# Connections
@@ -103,7 +122,7 @@ class PackagesPage(Adw.BreakpointBin):
self.search_bar.set_key_capture_widget(main_window)
self.packages_list_box.connect("row-activated", self.row_select_handler)
self.refresh_button.connect("clicked", self.refresh_button_handler)
self.select_button.connect("clicked", self.select_button_handler)
self.loading_status = StatusBox(_("Fetching Packages"), _("This should only take a moment"))
self.filter_button.connect("toggled", self.filter_button_handler)
self.packages_split.connect("notify::show-content", self.filter_page_handler)
self.packages_bpt.connect("apply", self.filter_page_handler)

View File

@@ -51,7 +51,6 @@ template $PropertiesPage : Adw.NavigationPage {
margin-bottom: 12;
orientation: vertical;
halign: fill;
hexpand: true;
Image app_icon {
pixel-size: 100;
@@ -147,7 +146,6 @@ template $PropertiesPage : Adw.NavigationPage {
Adw.ExpanderRow version_row {
title: _("Version");
styles ["property"]
expanded: true;
[suffix]
Label mask_label {
label: _("Updates Disabled");

View File

@@ -6,6 +6,7 @@
<file preprocess="xml-stripblanks">widgets/app_row.ui</file>
<file preprocess="xml-stripblanks">main_window/window.ui</file>
<file preprocess="xml-stripblanks">packages_page/packages_page.ui</file>
<file preprocess="xml-stripblanks">filters_page/filters_page.ui</file>
<file preprocess="xml-stripblanks">properties_page/properties_page.ui</file>
<file preprocess="xml-stripblanks">change_version_page/change_version_page.ui</file>
<file preprocess="xml-stripblanks">widgets/status_box.ui</file>