diff --git a/pacman_mirrors/pacman_mirrors_gui.py b/pacman_mirrors/pacman_mirrors_gui.py index f6cd12700da8dc4f509b48dc4a00fd8aa97cc046..d114cbe0f2ff55a3025483c5dc2445c6d11fba09 100644 --- a/pacman_mirrors/pacman_mirrors_gui.py +++ b/pacman_mirrors/pacman_mirrors_gui.py @@ -29,14 +29,11 @@ _ = i18n.language.gettext class PacmanMirrors(Gtk.Window): def __init__(self, server_list): - Gtk.Window.__init__(self, title=_("Mirrors list sorted by response time")) + Gtk.Window.__init__(self, title=_("List of mirrors sorted by response time")) self.set_size_request(700, 350) self.set_border_width(10) self.set_position(Gtk.WindowPosition.CENTER) - self.stack = Gtk.Stack() - self.stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT) - mirrors_list = [] for server in server_list: mirrors_list.append((False, @@ -61,34 +58,15 @@ class PacmanMirrors(Gtk.Window): scrolled_tree.add(self.treeview) header = Gtk.Label(_("Tick mirrors to prepare your custom list")) - buttonShow = Gtk.Button(_("Show custom list")) - buttonShow.connect("clicked", self.show_list) - - page1 = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) - page1.add(header) - page1.add(scrolled_tree) - page1.add(buttonShow) - - scrolled_window = Gtk.ScrolledWindow() - scrolled_window.set_vexpand(True) - self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) - scrolled_window.add(self.box) - buttonBack = Gtk.Button(_("Back to main list")) - buttonBack.connect("clicked", self.back_list) - self.buttonDone = Gtk.Button(_("Done")) + self.buttonDone = Gtk.Button(_("Confirm selection")) self.buttonDone.connect("clicked", self.done) - page2 = Gtk.Grid() - page2.set_column_homogeneous(True) - page2.set_row_spacing(10) - page2.set_column_spacing(10) - page2.attach(scrolled_window, 0, 0, 2, 1) - page2.attach(buttonBack, 0, 1, 1, 1) - page2.attach(self.buttonDone, 1, 1, 1, 1) + box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=10) + box.add(header) + box.add(scrolled_tree) + box.add(self.buttonDone) - self.stack.add_named(page1, "choice") - self.stack.add_named(page2, "confirm") - self.add(self.stack) + self.add(box) # Server lists self.server_list = server_list @@ -99,36 +77,44 @@ class PacmanMirrors(Gtk.Window): def on_toggle(self, widget, path): self.mirrors_liststore[path][0] = not self.mirrors_liststore[path][0] - def show_list(self, button): + def done(self, button): # Reset custom list self.custom_list = [] - for element in self.box.get_children(): - self.box.remove(element) - # Get selected elementqs + # Get selected servers for row in self.mirror_filter: if row[0]: for server in self.server_list: if server["url"][:-20] == row[2]: self.custom_list.append(server) - self.box.add(Gtk.Label("- " + row[2])) - # Check if at least a server is selected - if not self.custom_list: - self.box.add(Gtk.Label(_("Please select at least one server"))) - self.buttonDone.set_sensitive(self.custom_list) - # Show selected servers - self.box.show_all() - self.stack.set_visible_child_name("confirm") - self.set_title(_("List of selected mirrors")) - - def back_list(self, button): - # Return to the choice page - self.stack.set_visible_child_name("choice") - self.set_title(_("Mirrors list sorted by response time")) - - def done(self, button): - # Confirm the action - self.is_done = True - Gtk.main_quit() + if self.custom_list: + # If at least one server is selected + dialog = Gtk.Dialog("Are you sure?", None, 0, + (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, + Gtk.STOCK_OK, Gtk.ResponseType.OK)) + dialog.set_transient_for(self) + dialog.set_border_width(10) + box = dialog.get_content_area() + box.set_spacing(10) + box.add(Gtk.Label("Are you sure to replace your list of mirrors?")) + dialog.show_all() + response = dialog.run() + + if response == Gtk.ResponseType.OK: + # Quit GUI + dialog.destroy() + self.is_done = True + Gtk.main_quit() + elif response == Gtk.ResponseType.CANCEL: + # Go back to selection + dialog.destroy() + else: + # No selected server + dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.ERROR, + Gtk.ButtonsType.OK, _("No selected server")) + dialog.format_secondary_text(_("Please select at least one server")) + dialog.set_title(_("An error occured")) + dialog.run() + dialog.destroy() def launch(server_list): window = PacmanMirrors(server_list)