From 8b57938339613b2d50cbc589a754c4f457a4e980 Mon Sep 17 00:00:00 2001 From: heliguy Date: Sun, 21 Jul 2024 15:32:18 -0400 Subject: [PATCH] Add UI for new remotes --- src/remotes_page/remote_row.blp | 2 +- src/remotes_page/remote_row.py | 4 +- src/remotes_page/remotes_page.blp | 9 ---- src/remotes_page/remotes_page.py | 80 ++++++++++++++++++++++++++++++- 4 files changed, 83 insertions(+), 12 deletions(-) diff --git a/src/remotes_page/remote_row.blp b/src/remotes_page/remote_row.blp index b9ee25c..257701a 100644 --- a/src/remotes_page/remote_row.blp +++ b/src/remotes_page/remote_row.blp @@ -12,7 +12,7 @@ template $RemoteRow : Adw.ActionRow { justify: right; } [suffix] - Button { + Button filter_button { styles ["flat"] valign: center; icon-name: "funnel-symbolic"; diff --git a/src/remotes_page/remote_row.py b/src/remotes_page/remote_row.py index 22ca980..6786c36 100644 --- a/src/remotes_page/remote_row.py +++ b/src/remotes_page/remote_row.py @@ -7,6 +7,7 @@ class RemoteRow(Adw.ActionRow): gtc = Gtk.Template.Child suffix_label = gtc() + filter_button = gtc() menu_pop = gtc() menu_listbox = gtc() @@ -43,4 +44,5 @@ class RemoteRow(Adw.ActionRow): GLib.idle_add(lambda *_: self.idle_stuff()) # Connections - self.menu_listbox.connect("row-activated", self.on_menu_action) \ No newline at end of file + self.menu_listbox.connect("row-activated", self.on_menu_action) + self.filter_button.connect("clicked", lambda *_: parent_page.filter_remote(self)) \ No newline at end of file diff --git a/src/remotes_page/remotes_page.blp b/src/remotes_page/remotes_page.blp index 54c102a..a6549f8 100644 --- a/src/remotes_page/remotes_page.blp +++ b/src/remotes_page/remotes_page.blp @@ -67,15 +67,6 @@ template $RemotesPage : Adw.NavigationPage { Adw.PreferencesGroup new_remotes_group { title: _("Add Remotes"); description: _("Add new remotes to get more software"); - Adw.ActionRow { - title: "test"; - } - Adw.ActionRow { - title: "test"; - } - Adw.ActionRow { - title: "test"; - } } } } diff --git a/src/remotes_page/remotes_page.py b/src/remotes_page/remotes_page.py index 710ff5d..b3b01e5 100644 --- a/src/remotes_page/remotes_page.py +++ b/src/remotes_page/remotes_page.py @@ -4,6 +4,21 @@ from .error_toast import ErrorToast from .remote_row import RemoteRow import subprocess +class NewRemoteRow(Adw.ActionRow): + __gtype_name__ = "NewRemoteRow" + + def idle_stuff(self, *args): + self.set_title(self.info["title"]) + self.set_subtitle(self.info["description"]) + self.add_suffix(Gtk.Image.new_from_icon_name("plus-large-symbolic")) + + def __init__(self, info, **kwargs): + super().__init__(**kwargs) + self.info = info + GLib.idle_add(self.idle_stuff) + self.set_activatable(True) + self.connect("activated", lambda *_: print(info["name"])) + @Gtk.Template(resource_path="/io/github/flattool/Warehouse/remotes_page/remotes_page.ui") class RemotesPage(Adw.NavigationPage): __gtype_name__ = 'RemotesPage' @@ -21,6 +36,52 @@ class RemotesPage(Adw.NavigationPage): no_remotes = gtc() content_page = gtc() + # Preselected Remotes + new_remotes = [ + { + "title": "AppCenter", + "name": "appcenter", + "link": "https://flatpak.elementary.io/repo.flatpakrepo", + "description": _("The open source, pay-what-you-want app store from elementary") + }, + { + "title": "Flathub", + "name": "flathub", + "link": "https://dl.flathub.org/repo/flathub.flatpakrepo", + "description": _("Central repository of Flatpak applications"), + }, + { + "title": "Flathub beta", + "name": "flathub-beta", + "link": "https://flathub.org/beta-repo/flathub-beta.flatpakrepo", + "description": _("Beta builds of Flatpak applications"), + }, + { + "title": "Fedora", + "name": "fedora", + "link": "oci+https://registry.fedoraproject.org", + "description": _("Flatpaks packaged by Fedora Linux"), + }, + { + "title": "GNOME Nightly", + "name": "gnome-nightly", + "link": "https://nightly.gnome.org/gnome-nightly.flatpakrepo", + "description": _("The latest beta GNOME Apps and Runtimes"), + }, + { + "title": "KDE Testing Applications", + "name": "kdeapps", + "link": "https://distribute.kde.org/kdeapps.flatpakrepo", + "description": _("Beta KDE Apps and Runtimes"), + }, + { + "title": "WebKit Developer SDK", + "name": "webkit-sdk", + "link": "https://software.igalia.com/flatpak-refs/webkit-sdk.flatpakrepo", + "description": _("Central repository of the WebKit Developer and Runtime SDK"), + } + ] + # Referred to in the main window # It is used to determine if a new page should be made or not # This must be set to the created object from within the class's __init__ method @@ -40,15 +101,32 @@ class RemotesPage(Adw.NavigationPage): self.current_remotes_group.add(row) self.current_remote_rows.append(row) + def filter_remote(self, row): + self.filter_setting.set_boolean("show-apps", True) + self.filter_setting.set_boolean("show-runtimes", True) + self.filter_setting.set_string("remotes-list", f"{row.remote.name}<>{row.installation};") + self.filter_setting.reset("runtimes-list") + packages_page = self.main_window.pages[self.main_window.packages_row] + packages_page.filters_page.generate_filters() + packages_page.apply_filters() + GLib.idle_add(lambda *_: self.main_window.activate_row(self.main_window.packages_row)) + def __init__(self, main_window, **kwargs): super().__init__(**kwargs) # Extra Object Creation self.__class__.instance = self + self.main_window = main_window ms = main_window.main_split self.search_bar.set_key_capture_widget(main_window) self.current_remote_rows = [] + self.filter_setting = Gio.Settings.new("io.github.flattool.Warehouse.filter") # Connections ms.connect("notify::show-sidebar", lambda *_: self.sidebar_button.set_active(ms.get_show_sidebar())) - self.sidebar_button.connect("toggled", lambda *_: ms.set_show_sidebar(self.sidebar_button.get_active())) \ No newline at end of file + self.sidebar_button.connect("toggled", lambda *_: ms.set_show_sidebar(self.sidebar_button.get_active())) + + # Apply + for item in self.new_remotes: + row = NewRemoteRow(item) + self.new_remotes_group.add(row) \ No newline at end of file