diff --git a/dzgui/controllers/mc.py b/dzgui/controllers/mc.py index 90064ac..09be8ca 100644 --- a/dzgui/controllers/mc.py +++ b/dzgui/controllers/mc.py @@ -392,7 +392,7 @@ class Controller(GObject.GObject): # TODO: ping column pass parsed = Servers.parse_json(serv) - self.push_data(parsed) + self.push_data(parsed, FilterMode.INITIAL) def get_help_row(self) -> str: tv = self.mediator.menu @@ -600,7 +600,7 @@ class Controller(GObject.GObject): ) self.push_data(data) - def push_data(self, data: tuple) -> None: + def push_data(self, data: tuple, mode: FilterMode) -> None: def cleanup(): # TODO: rename signal self.mediator.statusbar.emit("server_page_changed", context) @@ -615,12 +615,11 @@ class Controller(GObject.GObject): insert = None else: manager = treeview.get_filter_man() - manager.set_control(data) - manager.filter(FilterMode.INITIAL) - #for row in data: - # manager.append_row(row) + # TODO: consolidate into filter manager + if mode == FilterMode.INITIAL: + manager.set_control(data) + manager.filter(mode) insert = manager.get_model() - print(insert) treeview.set_model(insert) treeview.set_loaded(True) GLib.idle_add(cleanup) @@ -635,6 +634,26 @@ class Controller(GObject.GObject): # thread = threading.Thread(target=func, args=args) # 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: return self.callback["func"] @@ -733,6 +752,21 @@ class Controller(GObject.GObject): def thread_data_func(self, func: Callable) -> None: 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: treeview = self.get_active_treeview() if treeview.get_loaded() is True: @@ -745,7 +779,7 @@ class Controller(GObject.GObject): return # TODO: on legacy version, model clearing happens in thread treeview.set_model(None) - manager = treeview.get_filter_man() + # manager = treeview.get_filter_man() # manager.clear_model() self.set_callback(None, None) self.thread_data_func(func) diff --git a/dzgui/model/filtered_model.py b/dzgui/model/filtered_model.py index 8825aa0..f15a77e 100644 --- a/dzgui/model/filtered_model.py +++ b/dzgui/model/filtered_model.py @@ -77,9 +77,9 @@ class FilteredModelManager: cache = self.filter_cache[filters] self.set_model(cache[0]) self.set_filtered(cache[1]) - GLib.idle_add( - self.controller.mediator.get_active_treeview()._filter_cleanup - ) + # GLib.idle_add( + # self.controller.mediator.get_active_treeview()._filter_cleanup + # ) return match mode: @@ -139,8 +139,7 @@ class FilteredModelManager: Multi-filtration for any context starts by narrowing by map """ rows = self.filtered - panel = self.controller.get_map() - sel_map = panel.get_selected_map() + sel_map = self.controller.get_map() if sel_map == "All maps": return rows diff --git a/dzgui/views/components/filter_panel.py b/dzgui/views/components/filter_panel.py index e5d87df..5c07755 100644 --- a/dzgui/views/components/filter_panel.py +++ b/dzgui/views/components/filter_panel.py @@ -246,7 +246,7 @@ class FilterPanel(Gtk.Box): check.set_active(not state) 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() state = button.get_active() logger.info(f"User toggled button '{label}' to {state}") @@ -256,7 +256,7 @@ class FilterPanel(Gtk.Box): mode = FilterMode.TOGGLE_OFF self.enabled_filters[label] = state - treeview.filter(mode, label) + self.controller.refilter_model(mode, label) def _on_map_changed(self, combo: Gtk.ComboBox) -> None: treeview = self.controller.get_active_treeview() diff --git a/dzgui/views/trees/tree_servers.py b/dzgui/views/trees/tree_servers.py index b17be9f..50e0565 100644 --- a/dzgui/views/trees/tree_servers.py +++ b/dzgui/views/trees/tree_servers.py @@ -116,10 +116,6 @@ class ServerTreeView(TreeView): def distcalc_started(self) -> None: pass - def filter(self, mode: FilterMode, label: str) -> None: - print("TOGGLE:", mode) - print("LABEL: ", label) - def get_filter_man(self) -> FilteredModelManager: return self.filter_man