feat: filtered model WIP

This commit is contained in:
aclist committed 2026-01-25 10:48:57 +09:00
1 parent da8722ec2a
commit 4f04d26231
4 files changed
+48 -19

No files matched your search

+42 -8
View File
@@ -392,7 +392,7 @@ class Controller(GObject.GObject):
# TODO: ping column pass # TODO: ping column pass
parsed = Servers.parse_json(serv) parsed = Servers.parse_json(serv)
self.push_data(parsed) self.push_data(parsed, FilterMode.INITIAL)
def get_help_row(self) -> str: def get_help_row(self) -> str:
tv = self.mediator.menu tv = self.mediator.menu
@@ -600,7 +600,7 @@ class Controller(GObject.GObject):
) )
self.push_data(data) self.push_data(data)
def push_data(self, data: tuple) -> None: def push_data(self, data: tuple, mode: FilterMode) -> None:
def cleanup(): def cleanup():
# TODO: rename signal # TODO: rename signal
self.mediator.statusbar.emit("server_page_changed", context) self.mediator.statusbar.emit("server_page_changed", context)
@@ -615,12 +615,11 @@ class Controller(GObject.GObject):
insert = None insert = None
else: else:
manager = treeview.get_filter_man() manager = treeview.get_filter_man()
manager.set_control(data) # TODO: consolidate into filter manager
manager.filter(FilterMode.INITIAL) if mode == FilterMode.INITIAL:
#for row in data: manager.set_control(data)
# manager.append_row(row) manager.filter(mode)
insert = manager.get_model() insert = manager.get_model()
print(insert)
treeview.set_model(insert) treeview.set_model(insert)
treeview.set_loaded(True) treeview.set_loaded(True)
GLib.idle_add(cleanup) GLib.idle_add(cleanup)
@@ -635,6 +634,26 @@ class Controller(GObject.GObject):
# thread = threading.Thread(target=func, args=args) # thread = threading.Thread(target=func, args=args)
# thread.start() # thread.start()
#def filter_cleanup(self) -> None:
# tv = self.get_active_treeview()
# m = tv.filter_man.get_model()
# # TODO: model should not be getting updated in this thread
# # delegate to self.push_data()
# # keeping in mind that server refresh button has to wipe control model
# tv.set_model(m)
#@call_on_thread
#def filter_threaded(self, mode: FilterMode, label: str) -> None:
# tv = self.get_active_treeview()
# tv.filter_man.filter(mode, label)
# self.set_callback(self.filter_cleanup)
# self.destroy_on_idle()
#def filter_model(self, mode: FilterMode, label: str) -> None:
# tv = self.get_active_treeview()
# tv.set_model(None)
# self.filter_threaded(mode, label)
def get_callback(self) -> Callable | None: def get_callback(self) -> Callable | None:
return self.callback["func"] return self.callback["func"]
@@ -733,6 +752,21 @@ class Controller(GObject.GObject):
def thread_data_func(self, func: Callable) -> None: def thread_data_func(self, func: Callable) -> None:
func() func()
@call_on_thread
def filter_threaded(self, mode: FilterMode, label: str) -> None:
print(mode)
tv = self.get_active_treeview()
tv.filter_man.filter(mode, label)
self.push_data("", mode)
def refilter_model(self, mode: FilterMode, label: str) -> None:
print(mode)
tv = self.get_active_treeview()
tv.set_model(None)
self.set_callback(None, None)
self.filter_threaded(mode, label)
def populate_model(self) -> None: def populate_model(self) -> None:
treeview = self.get_active_treeview() treeview = self.get_active_treeview()
if treeview.get_loaded() is True: if treeview.get_loaded() is True:
@@ -745,7 +779,7 @@ class Controller(GObject.GObject):
return return
# TODO: on legacy version, model clearing happens in thread # TODO: on legacy version, model clearing happens in thread
treeview.set_model(None) treeview.set_model(None)
manager = treeview.get_filter_man() # manager = treeview.get_filter_man()
# manager.clear_model() # manager.clear_model()
self.set_callback(None, None) self.set_callback(None, None)
self.thread_data_func(func) self.thread_data_func(func)
+4 -5
View File
@@ -77,9 +77,9 @@ class FilteredModelManager:
cache = self.filter_cache[filters] cache = self.filter_cache[filters]
self.set_model(cache[0]) self.set_model(cache[0])
self.set_filtered(cache[1]) self.set_filtered(cache[1])
GLib.idle_add( # GLib.idle_add(
self.controller.mediator.get_active_treeview()._filter_cleanup # self.controller.mediator.get_active_treeview()._filter_cleanup
) # )
return return
match mode: match mode:
@@ -139,8 +139,7 @@ class FilteredModelManager:
Multi-filtration for any context starts by narrowing by map Multi-filtration for any context starts by narrowing by map
""" """
rows = self.filtered rows = self.filtered
panel = self.controller.get_map() sel_map = self.controller.get_map()
sel_map = panel.get_selected_map()
if sel_map == "All maps": if sel_map == "All maps":
return rows return rows
+2 -2
View File
@@ -246,7 +246,7 @@ class FilterPanel(Gtk.Box):
check.set_active(not state) check.set_active(not state)
def _on_check_toggled(self, button: Gtk.CheckButton) -> None: def _on_check_toggled(self, button: Gtk.CheckButton) -> None:
treeview = self.controller.get_active_treeview() # treeview = self.controller.get_active_treeview()
label = button.get_label() label = button.get_label()
state = button.get_active() state = button.get_active()
logger.info(f"User toggled button '{label}' to {state}") logger.info(f"User toggled button '{label}' to {state}")
@@ -256,7 +256,7 @@ class FilterPanel(Gtk.Box):
mode = FilterMode.TOGGLE_OFF mode = FilterMode.TOGGLE_OFF
self.enabled_filters[label] = state self.enabled_filters[label] = state
treeview.filter(mode, label) self.controller.refilter_model(mode, label)
def _on_map_changed(self, combo: Gtk.ComboBox) -> None: def _on_map_changed(self, combo: Gtk.ComboBox) -> None:
treeview = self.controller.get_active_treeview() treeview = self.controller.get_active_treeview()
-4
View File
@@ -116,10 +116,6 @@ class ServerTreeView(TreeView):
def distcalc_started(self) -> None: def distcalc_started(self) -> None:
pass pass
def filter(self, mode: FilterMode, label: str) -> None:
print("TOGGLE:", mode)
print("LABEL: ", label)
def get_filter_man(self) -> FilteredModelManager: def get_filter_man(self) -> FilteredModelManager:
return self.filter_man return self.filter_man