mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-15 00:34:42 +09:00
Add filters page ui
This commit is contained in:
118
src/filters_page/filters_page.blp
Normal file
118
src/filters_page/filters_page.blp
Normal 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"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
src/filters_page/filters_page.py
Normal file
11
src/filters_page/filters_page.py
Normal 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))
|
||||
@@ -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',
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
@@ -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");
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user