diff --git a/src/gtk/attempt_install_dialog.blp b/src/gtk/attempt_install_dialog.blp
new file mode 100644
index 0000000..27baf36
--- /dev/null
+++ b/src/gtk/attempt_install_dialog.blp
@@ -0,0 +1,15 @@
+using Gtk 4.0;
+using Adw 1;
+
+template $AttemptInstallDialog : Adw.AlertDialog {
+ heading: _("Attempt an Install?");
+ body: _("Warehouse will try to install the matching packages.");
+ responses [
+ cancel: _("Cancel"),
+ continue: _("Install") suggested,
+ ]
+ Adw.PreferencesGroup preferences_group {
+ title: _("Choose a Remote");
+ description: _("Select a remote to attempt to install from");
+ }
+}
diff --git a/src/gtk/attempt_install_dialog.py b/src/gtk/attempt_install_dialog.py
new file mode 100644
index 0000000..36e96ce
--- /dev/null
+++ b/src/gtk/attempt_install_dialog.py
@@ -0,0 +1,51 @@
+from gi.repository import Adw, Gtk
+from .host_info import HostInfo
+from .error_toast import ErrorToast
+
+@Gtk.Template(resource_path="/io/github/flattool/Warehouse/gtk/attempt_install_dialog.ui")
+class AttemptInstallDialog(Adw.AlertDialog):
+ __gtype_name__ = "AttemptInstallDialog"
+ gtc = Gtk.Template.Child
+
+ preferences_group = gtc()
+
+ def generate_list(self):
+ for installation, remotes in HostInfo.remotes.items():
+ for remote in remotes:
+ if remote.disabled:
+ continue
+
+ row = Adw.ActionRow(title=remote.title, subtitle=_("Installation: {}").format(installation))
+ row.remote_name = remote.name
+ row.remote_installation = installation
+ button = Gtk.CheckButton()
+ row.add_prefix(button)
+ row.check_button = button
+ row.set_activatable_widget(button)
+ self.rows.append(row)
+ self.preferences_group.add(row)
+ if len(self.rows) > 1:
+ button.set_group(self.rows[0].check_button)
+
+ def on_response(self, dialog, response):
+ if response != "continue":
+ return
+
+ for row in self.rows:
+ if row.check_button.get_active():
+ print(row.remote_installation, row.remote_name)
+ return
+
+ def __init__(self, callback, **kwargs):
+ super().__init__(**kwargs)
+
+ # Extra Object Creation
+ self.rows = []
+ self.callback = callback
+
+ # Apply
+ self.generate_list()
+ self.present(HostInfo.main_window)
+
+ # Connections
+ self.connect("response", self.on_response)
diff --git a/src/meson.build b/src/meson.build
index 49546e0..e2c679d 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -8,6 +8,7 @@ blueprints = custom_target('blueprints',
'gtk/help-overlay.blp',
'gtk/loading_status.blp',
'gtk/installation_chooser.blp',
+ 'gtk/attempt_install_dialog.blp',
'main_window/window.blp',
'packages_page/packages_page.blp',
'packages_page/filters_page.blp',
@@ -77,6 +78,7 @@ warehouse_sources = [
'gtk/loading_status.py',
'gtk/installation_chooser.py',
'gtk/app_row.py',
+ 'gtk/attempt_install_dialog.py',
'main_window/window.py',
'package_install_worker.py',
'packages_page/uninstall_dialog.py',
diff --git a/src/remotes_page/remote_row.blp b/src/remotes_page/remote_row.blp
index 914b535..c32c455 100644
--- a/src/remotes_page/remote_row.blp
+++ b/src/remotes_page/remote_row.blp
@@ -8,6 +8,8 @@ template $RemoteRow : Adw.ActionRow {
margin-end: 6;
wrap: true;
wrap-mode: word_char;
+ natural-wrap-mode: none;
+ halign: end;
hexpand: true;
justify: right;
}
@@ -52,4 +54,4 @@ Popover menu_pop {
halign: start;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/user_data_page/user_data_page.blp b/src/user_data_page/user_data_page.blp
index f0aefc0..e53b8ea 100644
--- a/src/user_data_page/user_data_page.blp
+++ b/src/user_data_page/user_data_page.blp
@@ -47,6 +47,12 @@ template $UserDataPage : Adw.BreakpointBin {
icon-name: "folder-open-symbolic";
tooltip-text: _("Open User Data Folder");
}
+
+ [start]
+ Button test_button {
+ label: "test";
+ }
+
[end]
MenuButton sort_button {
popover: sort_pop;
diff --git a/src/user_data_page/user_data_page.py b/src/user_data_page/user_data_page.py
index 1f87207..98f5292 100644
--- a/src/user_data_page/user_data_page.py
+++ b/src/user_data_page/user_data_page.py
@@ -5,6 +5,7 @@ from .data_subpage import DataSubpage
from .host_info import HostInfo
from .sidebar_button import SidebarButton
from .loading_status import LoadingStatus
+from .attempt_install_dialog import AttemptInstallDialog
import os, subprocess
@Gtk.Template(resource_path="/io/github/flattool/Warehouse/user_data_page/user_data_page.ui")
@@ -37,6 +38,8 @@ class UserDataPage(Adw.BreakpointBin):
select_all_button = gtc()
copy_button = gtc()
trash_button = gtc()
+
+ test_button = gtc()
# Referred to in the main window
# It is used to determine if a new page should be made or not
@@ -243,6 +246,8 @@ class UserDataPage(Adw.BreakpointBin):
self.sort_size.connect("clicked", self.sort_button_handler)
self.bpt.connect("apply", self.breakpoint_handler, True)
self.bpt.connect("unapply", self.breakpoint_handler, False)
+
+ self.test_button.connect("clicked", lambda *_: AttemptInstallDialog(None))
# Apply again
self.loading_view.set_content(LoadingStatus(_("Loading User Data"), _("This should only take a moment")))
diff --git a/src/warehouse.gresource.xml b/src/warehouse.gresource.xml
index ebcacc8..0275988 100644
--- a/src/warehouse.gresource.xml
+++ b/src/warehouse.gresource.xml
@@ -6,6 +6,7 @@
gtk/loading_status.ui
gtk/app_row.ui
gtk/installation_chooser.ui
+ gtk/attempt_install_dialog.ui
main_window/window.ui
packages_page/packages_page.ui
packages_page/filters_page.ui