mirror of
https://github.com/morgan9e/warehouse
synced 2026-04-14 00:04:08 +09:00
Overhaul filters to use gschema (NOT FINISHED)
This commit is contained in:
@@ -14,4 +14,18 @@
|
||||
<default>false</default>
|
||||
</key>
|
||||
</schema>
|
||||
<schema id="io.github.flattool.Warehouse.filter" path="/io/github/flattool/Warehouse/filter/">
|
||||
<key name="show-apps" type="b">
|
||||
<default>true</default>
|
||||
</key>
|
||||
<key name="show-runtimes" type="b">
|
||||
<default>false</default>
|
||||
</key>
|
||||
<key name="ids-list" type="s">
|
||||
<default>""</default>
|
||||
</key>
|
||||
<key name="remotes-list" type="s">
|
||||
<default>""</default>
|
||||
</key>
|
||||
</schema>
|
||||
</schemalist>
|
||||
|
||||
@@ -81,13 +81,13 @@ template $FilterWindow: Adw.Window {
|
||||
}
|
||||
}
|
||||
|
||||
// Button remove_filters_button {
|
||||
// visible: false;
|
||||
// margin-bottom: 18;
|
||||
// halign: center;
|
||||
// label: _("Clear Filters");
|
||||
// styles ["pill"]
|
||||
// }
|
||||
Button reset_button {
|
||||
visible: true;
|
||||
margin-bottom: 18;
|
||||
halign: center;
|
||||
label: _("Reset Filters");
|
||||
styles ["pill"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ template $WarehouseWindow: Adw.ApplicationWindow {
|
||||
}
|
||||
|
||||
[start]
|
||||
ToggleButton filter_button {
|
||||
Button filter_button {
|
||||
icon-name: "funnel-symbolic";
|
||||
tooltip-text: _("Filter List");
|
||||
}
|
||||
|
||||
@@ -20,29 +20,31 @@ class FilterWindow(Adw.Window):
|
||||
if event == Gdk.KEY_Escape:
|
||||
self.close()
|
||||
|
||||
# Unused for now. !!!! Don't forget!
|
||||
def is_list_applicable(self):
|
||||
self.apply_button.set_sensitive(True)
|
||||
# self.apply_button.set_sensitive(True)
|
||||
|
||||
if not self.filter_list[0] == True and not self.filter_list[1] == True:
|
||||
self.apply_button.set_sensitive(False)
|
||||
return
|
||||
# if not self.filter_list[0] == True and not self.filter_list[1] == True:
|
||||
# self.apply_button.set_sensitive(False)
|
||||
# return
|
||||
|
||||
if self.filter_list[3] == []:
|
||||
self.apply_button.set_sensitive(False)
|
||||
return
|
||||
# if self.filter_list[3] == []:
|
||||
# self.apply_button.set_sensitive(False)
|
||||
# return
|
||||
|
||||
if self.filter_list[4] == []:
|
||||
self.apply_button.set_sensitive(False)
|
||||
return
|
||||
# if self.filter_list[4] == []:
|
||||
# self.apply_button.set_sensitive(False)
|
||||
# return
|
||||
|
||||
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)
|
||||
return
|
||||
# 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)
|
||||
# return
|
||||
pass
|
||||
|
||||
def apps_handler(self, switch, _a):
|
||||
self.filter_list[0] = switch.get_active()
|
||||
@@ -164,18 +166,30 @@ class FilterWindow(Adw.Window):
|
||||
if not self.runtimes_expander_switch.get_active():
|
||||
self.filter_list[4] = "all"
|
||||
|
||||
def disable_filter_toggle(self, _widget):
|
||||
self.app_window.filter_button.set_active(self.has_apply_button_been_clicked)
|
||||
|
||||
def __init__(self, main_window, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.present()
|
||||
|
||||
|
||||
|
||||
def gschema_bool_setter(key, state):
|
||||
self.settings.set_boolean(key, state)
|
||||
|
||||
self.settings = Gio.Settings.new("io.github.flattool.Warehouse.filter")
|
||||
|
||||
self.apps_switch.set_active(self.settings.get_boolean("show-apps"))
|
||||
self.apps_switch.connect("state-set", lambda switch, state: gschema_bool_setter("show-apps", state))
|
||||
self.runtimes_switch.set_active(self.settings.get_boolean("show-runtimes"))
|
||||
self.runtimes_switch.connect("state-set", lambda switch, state: gschema_bool_setter("show-runtimes", state))
|
||||
|
||||
|
||||
|
||||
# Create Variables
|
||||
event_controller = Gtk.EventControllerKey()
|
||||
self.my_utils = myUtils(self)
|
||||
self.host_remotes = self.my_utils.get_host_remotes()
|
||||
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
|
||||
|
||||
@@ -187,21 +201,18 @@ class FilterWindow(Adw.Window):
|
||||
self.apply_button.connect(
|
||||
"clicked", lambda *_: self.set_has_apply_button_been_clicked(True)
|
||||
)
|
||||
self.apply_button.connect(
|
||||
"clicked", lambda *_: main_window.apply_filter(self.filter_list)
|
||||
)
|
||||
self.apply_button.connect("clicked", lambda *_: self.close())
|
||||
# self.apply_button.connect(
|
||||
# "clicked", lambda *_: main_window.apply_filter(self.filter_list)
|
||||
# )
|
||||
# self.apply_button.connect("clicked", lambda *_: self.close())
|
||||
|
||||
self.cancel_button.connect("clicked", lambda *_: self.close())
|
||||
|
||||
self.connect("close-request", self.disable_filter_toggle)
|
||||
|
||||
self.apps_switch.connect("state-set", self.apps_handler)
|
||||
self.runtimes_switch.connect("state-set", self.runtimes_handler)
|
||||
# self.apps_switch.connect("state-set", self.apps_handler)
|
||||
# self.runtimes_switch.connect("state-set", self.runtimes_handler)
|
||||
event_controller.connect("key-pressed", self.key_handler)
|
||||
|
||||
# Calls
|
||||
self.apps_switch.set_active(True)
|
||||
self.set_size_request(260, 230)
|
||||
if not self.host_remotes[0][0] == "":
|
||||
self.generate_list()
|
||||
|
||||
@@ -80,11 +80,6 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
currently_uninstalling = False
|
||||
is_result = False
|
||||
is_empty = False
|
||||
selected_rows = []
|
||||
flatpak_rows = []
|
||||
# ^ {Row visibility, Row selected, the row itself, properties, row menu, select, the flatpak row from `flatpak list`, mask label}
|
||||
default_filter = [True, False, ["all"], ["all"], ["all"]]
|
||||
total_selected = 0
|
||||
|
||||
def filter_func(self, row):
|
||||
if (self.search_entry.get_text().lower() in row.get_title().lower()) or (
|
||||
@@ -93,11 +88,6 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
self.is_result = True
|
||||
return True
|
||||
|
||||
def remove_row(self, row):
|
||||
row[5].set_active(False)
|
||||
row[0] = False
|
||||
row[2].set_visible(False)
|
||||
|
||||
def uninstall_buttons_enable(self, should_enable):
|
||||
if self.currently_uninstalling:
|
||||
return
|
||||
@@ -345,10 +335,9 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
for index in range(len(self.host_flatpaks)):
|
||||
self.create_row(index)
|
||||
|
||||
self.apply_filter()
|
||||
|
||||
# self.windowSetEmpty(not self.flatpaks_list_box.get_row_at_index(0))
|
||||
self.batch_actions_enable(False)
|
||||
self.main_stack.set_visible_child(self.main_box)
|
||||
|
||||
def refresh_list_of_flatpaks(self, widget, should_toast):
|
||||
if self.currently_uninstalling:
|
||||
@@ -687,68 +676,6 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
self.clipboard.set(to_copy)
|
||||
self.toast_overlay.add_toast(Adw.Toast.new(_("Copied selected app refs")))
|
||||
|
||||
def filter_window_handler(self, widget):
|
||||
if widget.get_active() and self.should_open_filter_window:
|
||||
filtwin = FilterWindow(self)
|
||||
filtwin.present()
|
||||
else:
|
||||
self.apply_filter()
|
||||
|
||||
def filter_window_keyboard_handler(self, widget):
|
||||
self.filter_button.set_active(not self.filter_button.get_active())
|
||||
|
||||
def apply_filter(self, filter=default_filter):
|
||||
for i in range(len(self.filter_list)):
|
||||
current = self.filter_list[i]
|
||||
if "user" == current:
|
||||
self.filter_list[i] = "user"
|
||||
else:
|
||||
self.filter_list[i] = "system"
|
||||
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
|
||||
self.batch_select_all_button.set_active(False)
|
||||
self.set_select_all(False)
|
||||
|
||||
index = 0
|
||||
while self.flatpaks_list_box.get_row_at_index(index) != None:
|
||||
current = self.flatpaks_list_box.get_row_at_index(index)
|
||||
visible = True
|
||||
|
||||
if show_apps == False and current.is_runtime == False:
|
||||
visible = False
|
||||
|
||||
if show_runtimes == False and current.is_runtime == True:
|
||||
visible = False
|
||||
|
||||
if not "all" in filter_install_type:
|
||||
if not current.install_type in filter_install_type:
|
||||
visible = False
|
||||
|
||||
if not "all" in filter_remotes_list:
|
||||
if not current.origin_remote in filter_remotes_list:
|
||||
visible = False
|
||||
|
||||
if not "all" in filter_runtimes_list:
|
||||
if not current.dependent_runtime in filter_runtimes_list:
|
||||
visible = False
|
||||
|
||||
if visible == True:
|
||||
total_visible += 1
|
||||
|
||||
current.set_visible(visible)
|
||||
index += 1
|
||||
|
||||
if total_visible == 0:
|
||||
self.main_stack.set_visible_child(self.no_matches)
|
||||
self.search_button.set_sensitive(False)
|
||||
else:
|
||||
self.main_stack.set_visible_child(self.main_box)
|
||||
self.search_button.set_sensitive(True)
|
||||
|
||||
def install_callback(self, _a, _b):
|
||||
self.main_stack.set_visible_child(self.main_box)
|
||||
self.search_button.set_sensitive(True)
|
||||
@@ -855,7 +782,6 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.my_utils = myUtils(self)
|
||||
self.filter_list = [True, False, ["all"], ["all"], ["all"]]
|
||||
self.set_size_request(0, 230)
|
||||
self.settings = Gio.Settings.new("io.github.flattool.Warehouse")
|
||||
self.settings.bind(
|
||||
@@ -870,6 +796,8 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
self.settings.bind(
|
||||
"is-fullscreen", self, "fullscreened", Gio.SettingsBindFlags.DEFAULT
|
||||
)
|
||||
other = Gio.Settings.new("io.github.flattool.Warehouse.filter")
|
||||
print(other.get_boolean("show-apps"))
|
||||
|
||||
self.new_env = dict(os.environ)
|
||||
self.new_env["LC_ALL"] = "C"
|
||||
@@ -889,6 +817,7 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
self.search_bar.connect_entry(self.search_entry)
|
||||
self.search_bar.connect("notify", self.on_change)
|
||||
self.refresh_button.connect("clicked", self.refresh_list_of_flatpaks, True)
|
||||
self.filter_button.connect("clicked", lambda *_: FilterWindow(self))
|
||||
self.batch_mode_button.connect("toggled", self.batch_mode_handler)
|
||||
self.batch_clean_button.connect("clicked", self.batch_clean_handler)
|
||||
self.batch_uninstall_button.connect(
|
||||
@@ -901,14 +830,11 @@ class WarehouseWindow(Adw.ApplicationWindow):
|
||||
event_controller.connect("key-pressed", self.batch_key_handler)
|
||||
self.add_controller(event_controller)
|
||||
self.main_overlay.add_overlay(self.main_progress_bar)
|
||||
self.should_open_filter_window = True
|
||||
|
||||
self.create_action("copy-names", self.copy_names)
|
||||
self.create_action("copy-ids", self.copy_IDs)
|
||||
self.create_action("copy-refs", self.copy_refs)
|
||||
|
||||
self.filter_button.connect("toggled", self.filter_window_handler)
|
||||
|
||||
file_drop = Gtk.DropTarget.new(Gio.File, Gdk.DragAction.COPY)
|
||||
file_drop.connect("drop", self.drop_callback)
|
||||
self.scrolled_window.add_controller(file_drop)
|
||||
|
||||
Reference in New Issue
Block a user