mirror of
https://github.com/aclist/dztui.git
synced 2026-10-30 06:32:53 +01:00
feat: filtered model WIP
This commit is contained in:
1 parent
da8722ec2a
commit
4f04d26231
4 files changed
+48
-19
No files matched your search
+42
-8
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user