mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-15 00:34:42 +09:00
Make filter button deactivate when closing window
Make the filter button deactivate if the filter window is closed with a keyboard shortcut
This commit is contained in:
@@ -25,8 +25,8 @@ template FilterWindow : Adw.Window {
|
||||
content:
|
||||
Adw.ToastOverlay toast_overlay {
|
||||
Stack main_stack {
|
||||
Box main_box {
|
||||
orientation: vertical;
|
||||
//Box main_box {
|
||||
//orientation: vertical;
|
||||
Overlay main_overlay {
|
||||
ScrolledWindow scrolled_window {
|
||||
vexpand: true;
|
||||
@@ -35,8 +35,8 @@ template FilterWindow : Adw.Window {
|
||||
orientation: vertical;
|
||||
|
||||
ListBox install_type_list {
|
||||
margin-top: 6;
|
||||
margin-bottom: 6;
|
||||
margin-top: 18;
|
||||
margin-bottom: 18;
|
||||
margin-start: 12;
|
||||
margin-end: 12;
|
||||
hexpand: true;
|
||||
@@ -62,60 +62,20 @@ template FilterWindow : Adw.Window {
|
||||
|
||||
activatable-widget: runtimes_switch;
|
||||
}
|
||||
}
|
||||
// ListBox install_type_list {
|
||||
// margin-top: 6;
|
||||
// margin-bottom: 6;
|
||||
// margin-start: 12;
|
||||
// margin-end: 12;
|
||||
// hexpand: true;
|
||||
// valign: start;
|
||||
// selection-mode: none;
|
||||
// styles["boxed-list"]
|
||||
|
||||
// Adw.ActionRow user {
|
||||
// title: _("User wide");
|
||||
// subtitle: _("Apps only available to you");
|
||||
|
||||
// [suffix]
|
||||
// CheckButton user_check {
|
||||
// }
|
||||
|
||||
// activatable-widget: user_check;
|
||||
// }
|
||||
// Adw.ActionRow system {
|
||||
// title: _("System wide");
|
||||
// subtitle: _("Apps available to everyone on this system");
|
||||
|
||||
// [suffix]
|
||||
// CheckButton system_check {
|
||||
// }
|
||||
|
||||
// activatable-widget: system_check;
|
||||
// }
|
||||
// }
|
||||
Label header_label {
|
||||
margin-top: 6;
|
||||
margin-bottom: 3;
|
||||
margin-start: 12;
|
||||
halign: start;
|
||||
label: _("Show Flatpaks from these remotes");
|
||||
}
|
||||
ListBox remotes_list {
|
||||
margin-top: 6;
|
||||
margin-bottom: 6;
|
||||
margin-start: 12;
|
||||
margin-end: 12;
|
||||
hexpand: true;
|
||||
valign: start;
|
||||
selection-mode: none;
|
||||
styles["boxed-list"]
|
||||
Adw.ExpanderRow remotes_expander {
|
||||
enable-expansion: false;
|
||||
title: _("Filter Apps by Remotes");
|
||||
}
|
||||
Adw.ExpanderRow runtimes_expander {
|
||||
enable-expansion: false;
|
||||
title: _("Filter Apps by Runtime");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//}
|
||||
Adw.StatusPage no_data {
|
||||
icon-name: "check-plain-symbolic";
|
||||
title: _("No Leftover Data");
|
||||
|
||||
@@ -10,10 +10,11 @@ class FilterWindow(Adw.Window):
|
||||
|
||||
cancel_button = Gtk.Template.Child()
|
||||
apply_button = Gtk.Template.Child()
|
||||
remotes_list = Gtk.Template.Child()
|
||||
apps_switch = Gtk.Template.Child()
|
||||
runtimes_switch = Gtk.Template.Child()
|
||||
header_label = Gtk.Template.Child()
|
||||
remotes_expander = Gtk.Template.Child()
|
||||
runtimes_expander = Gtk.Template.Child()
|
||||
|
||||
|
||||
def key_handler(self, _a, event, _c, _d):
|
||||
if event == Gdk.KEY_Escape:
|
||||
@@ -23,9 +24,23 @@ class FilterWindow(Adw.Window):
|
||||
self.apply_button.set_sensitive(False)
|
||||
|
||||
if self.filter_list[0] == True or self.filter_list[1] == True:
|
||||
if not self.filter_list[3] == []:
|
||||
if self.filter_list[3] == []:
|
||||
self.apply_button.set_sensitive(False)
|
||||
return
|
||||
else:
|
||||
self.apply_button.set_sensitive(True)
|
||||
|
||||
if self.filter_list[4] == []:
|
||||
self.apply_button.set_sensitive(False)
|
||||
return
|
||||
else:
|
||||
self.apply_button.set_sensitive(True)
|
||||
|
||||
print(self.filter_list[4])
|
||||
|
||||
# if self.apps_switch.get_active() and not self.runtimes_switch.get_active() and not self.remotes_expander_switch.get_active() and not self.runtimes_expander_switch.get_active():
|
||||
# self.apply_button.set_sensitive(False)
|
||||
|
||||
def appsHandler(self, switch, _a):
|
||||
self.filter_list[0] = switch.get_active()
|
||||
self.isListApplicable()
|
||||
@@ -34,6 +49,12 @@ class FilterWindow(Adw.Window):
|
||||
self.filter_list[1] = switch.get_active()
|
||||
self.isListApplicable()
|
||||
|
||||
def remotesEnableHandler(self, switch, is_enabled):
|
||||
self.remotes_expander.set_enable_expansion(is_enabled)
|
||||
|
||||
for i in range(len(self.remote_checkboxes)):
|
||||
self.remote_checkboxes[i].set_active(not is_enabled)
|
||||
|
||||
def remoteCheckHandler(self, checkbox, install_type, remote):
|
||||
if checkbox.get_active():
|
||||
self.filter_list[2].append(install_type)
|
||||
@@ -42,11 +63,42 @@ class FilterWindow(Adw.Window):
|
||||
self.filter_list[2].remove(install_type)
|
||||
self.filter_list[3].remove(remote)
|
||||
|
||||
def runtimesEnableHandler(self, switch, is_enabled):
|
||||
self.runtimes_expander.set_enable_expansion(is_enabled)
|
||||
|
||||
if is_enabled:
|
||||
self.filter_list[4] = []
|
||||
else:
|
||||
self.filter_list[4] = "all"
|
||||
|
||||
for i in range(len(self.runtime_checkboxes)):
|
||||
self.runtime_checkboxes[i].set_active(not is_enabled)
|
||||
|
||||
self.isListApplicable()
|
||||
|
||||
def runtimeCheckHandler(self, checkbox, runtime):
|
||||
if checkbox.get_active():
|
||||
self.filter_list[4].append(runtime)
|
||||
else:
|
||||
self.filter_list[4].remove(runtime)
|
||||
|
||||
self.isListApplicable()
|
||||
|
||||
def generateList(self):
|
||||
Gtk.Label.set_markup(self.header_label, ("<b>{}</b>").format(self.header_label.get_label()))
|
||||
|
||||
dependant_runtimes = []
|
||||
for i in range(len(self.host_flatpaks)):
|
||||
current = self.host_flatpaks[i]
|
||||
if current[13] not in dependant_runtimes and current[13] != "":
|
||||
dependant_runtimes.append(current[13])
|
||||
|
||||
if len(self.host_remotes) < 2: # Don't give the ability to filter by remotes if there is only 1
|
||||
self.remotes_expander.set_visible(False)
|
||||
|
||||
if len(dependant_runtimes) < 2: # Don't give the ability to filter by runtimes if there is only 1
|
||||
self.runtimes_expander.set_visible(False)
|
||||
|
||||
self.remote_checkboxes = []
|
||||
for i in range(len(self.host_remotes)):
|
||||
name = self.host_remotes[i][0]
|
||||
title = self.host_remotes[i][1]
|
||||
@@ -55,16 +107,41 @@ class FilterWindow(Adw.Window):
|
||||
remote_row = Adw.ActionRow(title=title, subtitle=url)
|
||||
if title == "-":
|
||||
remote_row.set_title(name)
|
||||
self.remotes_list.append(remote_row)
|
||||
self.remotes_expander.add_row(remote_row)
|
||||
label = Gtk.Label(label=("{} wide").format(install_type))
|
||||
label.add_css_class("subtitle")
|
||||
remote_check = Gtk.CheckButton()
|
||||
remote_row.add_suffix(label)
|
||||
remote_row.add_suffix(remote_check)
|
||||
remote_row.set_activatable_widget(remote_check)
|
||||
|
||||
remote_check.connect("toggled", self.remoteCheckHandler, install_type, name)
|
||||
self.remote_checkboxes.append(remote_check)
|
||||
remote_check.set_active(True)
|
||||
self.remotes_expander_switch = Gtk.Switch(valign=Gtk.Align.CENTER)
|
||||
self.remotes_expander_switch.connect("state-set", self.remotesEnableHandler)
|
||||
self.remotes_expander.add_suffix(self.remotes_expander_switch)
|
||||
|
||||
self.runtime_checkboxes = []
|
||||
for i in range(len(dependant_runtimes)):
|
||||
current = dependant_runtimes[i]
|
||||
runtime_row = Adw.ActionRow(title=current)
|
||||
runtime_check = Gtk.CheckButton()
|
||||
runtime_check.connect("toggled", self.runtimeCheckHandler, current)
|
||||
runtime_check.set_active(True)
|
||||
self.runtime_checkboxes.append(runtime_check)
|
||||
runtime_row.add_suffix(runtime_check)
|
||||
runtime_row.set_activatable_widget(runtime_check)
|
||||
self.runtimes_expander.add_row(runtime_row)
|
||||
self.runtimes_expander_switch = Gtk.Switch(valign=Gtk.Align.CENTER)
|
||||
self.runtimes_expander_switch.connect("state-set", self.runtimesEnableHandler)
|
||||
self.runtimes_expander.add_suffix(self.runtimes_expander_switch)
|
||||
|
||||
def setHas_apply_button_been_clicked(self, is_clicked):
|
||||
self.has_apply_button_been_clicked = is_clicked
|
||||
|
||||
def disableFilterToggle(self, _widget):
|
||||
print(self.has_apply_button_been_clicked)
|
||||
self.app_window.filter_button.set_active(self.has_apply_button_been_clicked)
|
||||
|
||||
def __init__(self, main_window, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
@@ -72,9 +149,11 @@ class FilterWindow(Adw.Window):
|
||||
# Create Variables
|
||||
self.my_utils = myUtils(self)
|
||||
self.host_remotes = self.my_utils.getHostRemotes()
|
||||
self.filter_list = [False, False, [], []]
|
||||
self.host_flatpaks = main_window.host_flatpaks
|
||||
self.filter_list = [False, False, [], [], []]
|
||||
event_controller = Gtk.EventControllerKey()
|
||||
self.app_window = main_window
|
||||
self.has_apply_button_been_clicked = False
|
||||
|
||||
# Window Things
|
||||
self.set_transient_for(main_window)
|
||||
@@ -82,11 +161,14 @@ class FilterWindow(Adw.Window):
|
||||
|
||||
# Connections
|
||||
self.apply_button.connect("clicked", lambda *_: main_window.applyFilter(self.filter_list))
|
||||
self.apply_button.connect("clicked", lambda *_: self.setHas_apply_button_been_clicked(True))
|
||||
self.apply_button.connect("clicked", lambda *_: self.close())
|
||||
|
||||
self.cancel_button.connect("clicked", lambda *_: main_window.filter_button.set_active(False))
|
||||
#self.cancel_button.connect("clicked", lambda *_: main_window.filter_button.set_active(False))
|
||||
self.cancel_button.connect("clicked", lambda *_: self.close())
|
||||
|
||||
self.connect("close-request", self.disableFilterToggle)
|
||||
|
||||
self.apps_switch.connect("state-set", self.appsHandler)
|
||||
self.runtimes_switch.connect("state-set", self.runtimesHandler)
|
||||
event_controller.connect("key-pressed", self.key_handler)
|
||||
@@ -97,9 +179,10 @@ class FilterWindow(Adw.Window):
|
||||
if not self.host_remotes[0][0] == '':
|
||||
self.generateList()
|
||||
else:
|
||||
self.header_label.set_visible(False)
|
||||
self.remotes_list.set_visible(False)
|
||||
self.remotes_expander.set_visible(False)
|
||||
self.runtimes_expander.set_visible(False)
|
||||
self.filter_list[2] = "all"
|
||||
self.filter_list[3] = "all"
|
||||
self.filter_list[4] = "all"
|
||||
|
||||
|
||||
|
||||
@@ -467,14 +467,15 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
self.filter_button.set_active(not self.filter_button.get_active())
|
||||
|
||||
def resetFilterList(self):
|
||||
self.filter_list = [True, False, ["all"], ["all"]]
|
||||
self.filter_list = [True, False, ["all"], ["all"], ["all"]]
|
||||
|
||||
def applyFilter(self, filter=[True, False, ["all"], ["all"]]):
|
||||
def applyFilter(self, filter=[True, False, ["all"], ["all"], ["all"]]):
|
||||
self.filter_list = filter
|
||||
show_apps = filter[0]
|
||||
show_runtimes = filter[1]
|
||||
filter_install_type = filter[2]
|
||||
filter_remotes_list = filter[3]
|
||||
filter_runtimes_list = filter[4]
|
||||
total_visible = 0
|
||||
|
||||
for i in range(len(self.flatpak_rows)):
|
||||
@@ -486,10 +487,13 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
if (not show_runtimes) and "runtime" in self.flatpak_rows[i][6][12]:
|
||||
self.flatpak_rows[i][0] = False
|
||||
|
||||
if (not 'all' in filter_install_type) and (not self.host_flatpaks[i][7] in filter_install_type):
|
||||
if (not 'all' in filter_install_type) and (not self.flatpak_rows[i][6][7] in filter_install_type):
|
||||
self.flatpak_rows[i][0] = False
|
||||
|
||||
if (not 'all' in filter_remotes_list) and (not self.host_flatpaks[i][6] in filter_remotes_list):
|
||||
if (not 'all' in filter_remotes_list) and (not self.flatpak_rows[i][6][6] in filter_remotes_list):
|
||||
self.flatpak_rows[i][0] = False
|
||||
|
||||
if (not 'all' in filter_runtimes_list) and (not self.flatpak_rows[i][6][13] in filter_runtimes_list):
|
||||
self.flatpak_rows[i][0] = False
|
||||
|
||||
self.flatpak_rows[i][2].set_visible(self.flatpak_rows[i][0])
|
||||
@@ -508,7 +512,7 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.my_utils = myUtils(self)
|
||||
self.filter_list = [True, False, ["all"], ["all"]]
|
||||
self.filter_list = [True, False, ["all"], ["all"], ["all"]]
|
||||
self.host_flatpaks = self.my_utils.getHostFlatpaks()
|
||||
self.set_size_request(0, 230)
|
||||
self.settings = Gio.Settings.new("io.github.flattool.Warehouse")
|
||||
|
||||
Reference in New Issue
Block a user