mirror of
https://github.com/aclist/dztui.git
synced 2026-08-27 02:07:18 +02:00
fix: signal supression on keyup
This commit is contained in:
parent
2ef62416c0
commit
fc6e958c09
@ -380,7 +380,7 @@ class Controller(GObject.GObject):
|
||||
if res.status != 200 or not res.parsed:
|
||||
# TODO: pop warning dialog, create enum around various failure states
|
||||
print("failed to parse/timeout error")
|
||||
self.push_data(None, success=False)
|
||||
self.push_data(None, FilterMode.INITIAL, success=False)
|
||||
return
|
||||
j = res.json
|
||||
serv += j["response"]["servers"]
|
||||
@ -654,6 +654,7 @@ class Controller(GObject.GObject):
|
||||
# TODO: init maps here
|
||||
manager.filter(mode)
|
||||
insert = manager.get_model()
|
||||
# TODO: should list store be set outside of this thread?
|
||||
treeview.set_model(insert)
|
||||
treeview.set_loaded(True)
|
||||
GLib.idle_add(self.cleanup)
|
||||
@ -751,7 +752,8 @@ class Controller(GObject.GObject):
|
||||
def get_player_count(self) -> str:
|
||||
treeview = self.get_active_treeview()
|
||||
model = treeview.get_model()
|
||||
count = format_player_count(model)
|
||||
control_model = treeview.filter_man.get_control()
|
||||
count = format_player_count(model, control_model)
|
||||
return count
|
||||
|
||||
def get_statusbar(self) -> None:
|
||||
|
||||
@ -263,6 +263,9 @@ class FilteredModelManager:
|
||||
"""
|
||||
self.control_model = rows
|
||||
|
||||
def get_control(self) -> list:
|
||||
return self.control_model
|
||||
|
||||
def set_success(self, result: bool) -> None:
|
||||
self.success = result
|
||||
|
||||
|
||||
@ -4,8 +4,9 @@ from dzgui.util.localize import number
|
||||
from dzgui.util.strings import no_mods, no_servers, distance_suffix
|
||||
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk # noqa E402
|
||||
from gi.repository import Gtk # noqa E402
|
||||
|
||||
|
||||
def format_pango(text: str) -> str:
|
||||
@ -50,7 +51,7 @@ def format_mods(size: int, mods: int) -> str:
|
||||
return f"Found {mods:n} {plural} taking up {l_size} MiB. {suffix}"
|
||||
|
||||
|
||||
def format_player_count(model: Gtk.TreeModel | None) -> str:
|
||||
def format_player_count(model: Gtk.TreeModel | None, control: list) -> str:
|
||||
players = 0
|
||||
hits: int
|
||||
status: str
|
||||
@ -62,10 +63,9 @@ def format_player_count(model: Gtk.TreeModel | None) -> str:
|
||||
players += row[4]
|
||||
players_pretty = pluralize("players", players)
|
||||
hits_pretty = pluralize("matches", hits)
|
||||
suffix = distance_suffix
|
||||
status = f"Found {hits:n} {hits_pretty} with {players:n} {players_pretty}"
|
||||
control_total = len(control)
|
||||
status = f"Showing {hits:n}/{control_total:n} {hits_pretty} with {players:n} {players_pretty}"
|
||||
return status
|
||||
return f"{status} | {suffix}"
|
||||
|
||||
|
||||
def embolden(text: str) -> str:
|
||||
|
||||
@ -38,6 +38,9 @@ class TreeView(CursorMixin, Gtk.TreeView): # type: ignore
|
||||
self.selected_row.set_mode(Gtk.SelectionMode.SINGLE)
|
||||
self.selected_row.connect("changed", self._on_tree_selection_changed)
|
||||
self.connect("row-activated", self._on_row_activated)
|
||||
|
||||
self.connect("button-press-event", lambda x, y: print(self.sel_blocked))
|
||||
|
||||
self.connect("key-press-event", self._on_keypress)
|
||||
self.connect("key-release-event", self._on_key_release)
|
||||
|
||||
@ -84,6 +87,7 @@ class TreeView(CursorMixin, Gtk.TreeView): # type: ignore
|
||||
if self.get_model() is None:
|
||||
return
|
||||
if self.sel_blocked is False:
|
||||
self.sel_blocked = True
|
||||
self.controller.suppress_signal(
|
||||
self,
|
||||
self.selected_row,
|
||||
@ -110,9 +114,10 @@ class TreeView(CursorMixin, Gtk.TreeView): # type: ignore
|
||||
return
|
||||
if is_navkey(event.keyval):
|
||||
if self.sel_blocked is True:
|
||||
self.sel_blocked = False
|
||||
self.controller.suppress_signal(
|
||||
self.controller.mediator.treeview,
|
||||
self.controller.mediator.treeview.selected_row,
|
||||
self,
|
||||
self.selected_row,
|
||||
"_on_tree_selection_changed",
|
||||
False,
|
||||
)
|
||||
@ -120,6 +125,7 @@ class TreeView(CursorMixin, Gtk.TreeView): # type: ignore
|
||||
self._on_tree_selection_changed(selection)
|
||||
|
||||
def _on_tree_selection_changed(self, selection: Gtk.TreeSelection) -> None:
|
||||
print("selection changed")
|
||||
self.emit("generic_treesel_changed", selection)
|
||||
|
||||
def toggle_selection(self, state: bool) -> None:
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
import logging
|
||||
import multiprocessing
|
||||
from typing import Any, Self
|
||||
import threading
|
||||
from typing import Any
|
||||
from warnings import deprecated
|
||||
|
||||
from dzgui.views.mixins.context_mixin import ContextMixin
|
||||
@ -71,6 +72,8 @@ class ServerTreeView(ContextMixin, TreeView):
|
||||
column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
|
||||
column.set_resizable(True)
|
||||
column.set_sort_column_id(i)
|
||||
if column_title == "Ping":
|
||||
column.set_cell_data_func(renderer, self._get_ping)
|
||||
|
||||
if valid_json:
|
||||
try:
|
||||
@ -109,6 +112,39 @@ class ServerTreeView(ContextMixin, TreeView):
|
||||
self.emitter.connect("statusbar_loaded", self.start_distcalc)
|
||||
# self.emitter.connect("distcalc_started", self._on_distcalc_started)
|
||||
|
||||
def _get_ping(
|
||||
self,
|
||||
column: Gtk.TreeViewColumn,
|
||||
cell: Gtk.CellRendererText,
|
||||
model: Gtk.TreeModel,
|
||||
it: Gtk.TreeIter,
|
||||
data: Any,
|
||||
):
|
||||
def ping(model, it, ip: str):
|
||||
# TODO: use a2s to ping server
|
||||
# a2s.info -> "ping" key
|
||||
# Servers.ping() -> this accepts a whole row
|
||||
# try, if failure just abort
|
||||
self.res = ip.replace(":", "%")
|
||||
num = 11111
|
||||
GLib.idle_add(lambda: model.set(it, 9, num))
|
||||
|
||||
addr = model.get_value(it, 7).split(":")[0]
|
||||
qport = model.get_value(it, 8)
|
||||
ip = f"{addr}:{qport}"
|
||||
|
||||
thread = threading.Thread(
|
||||
daemon=True,
|
||||
target=ping,
|
||||
args=(
|
||||
model,
|
||||
it,
|
||||
ip,
|
||||
),
|
||||
)
|
||||
thread.start()
|
||||
pass
|
||||
|
||||
def start_timeout(self) -> None:
|
||||
if self.queue_id:
|
||||
GLib.Source.remove(self.queue_id)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user