mirror of
https://github.com/aclist/dztui.git
synced 2026-08-29 11:17:12 +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:
|
if res.status != 200 or not res.parsed:
|
||||||
# TODO: pop warning dialog, create enum around various failure states
|
# TODO: pop warning dialog, create enum around various failure states
|
||||||
print("failed to parse/timeout error")
|
print("failed to parse/timeout error")
|
||||||
self.push_data(None, success=False)
|
self.push_data(None, FilterMode.INITIAL, success=False)
|
||||||
return
|
return
|
||||||
j = res.json
|
j = res.json
|
||||||
serv += j["response"]["servers"]
|
serv += j["response"]["servers"]
|
||||||
@ -654,6 +654,7 @@ class Controller(GObject.GObject):
|
|||||||
# TODO: init maps here
|
# TODO: init maps here
|
||||||
manager.filter(mode)
|
manager.filter(mode)
|
||||||
insert = manager.get_model()
|
insert = manager.get_model()
|
||||||
|
# TODO: should list store be set outside of this thread?
|
||||||
treeview.set_model(insert)
|
treeview.set_model(insert)
|
||||||
treeview.set_loaded(True)
|
treeview.set_loaded(True)
|
||||||
GLib.idle_add(self.cleanup)
|
GLib.idle_add(self.cleanup)
|
||||||
@ -751,7 +752,8 @@ class Controller(GObject.GObject):
|
|||||||
def get_player_count(self) -> str:
|
def get_player_count(self) -> str:
|
||||||
treeview = self.get_active_treeview()
|
treeview = self.get_active_treeview()
|
||||||
model = treeview.get_model()
|
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
|
return count
|
||||||
|
|
||||||
def get_statusbar(self) -> None:
|
def get_statusbar(self) -> None:
|
||||||
|
|||||||
@ -263,6 +263,9 @@ class FilteredModelManager:
|
|||||||
"""
|
"""
|
||||||
self.control_model = rows
|
self.control_model = rows
|
||||||
|
|
||||||
|
def get_control(self) -> list:
|
||||||
|
return self.control_model
|
||||||
|
|
||||||
def set_success(self, result: bool) -> None:
|
def set_success(self, result: bool) -> None:
|
||||||
self.success = result
|
self.success = result
|
||||||
|
|
||||||
|
|||||||
@ -4,8 +4,9 @@ from dzgui.util.localize import number
|
|||||||
from dzgui.util.strings import no_mods, no_servers, distance_suffix
|
from dzgui.util.strings import no_mods, no_servers, distance_suffix
|
||||||
|
|
||||||
import gi
|
import gi
|
||||||
|
|
||||||
gi.require_version("Gtk", "3.0")
|
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:
|
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}"
|
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
|
players = 0
|
||||||
hits: int
|
hits: int
|
||||||
status: str
|
status: str
|
||||||
@ -62,10 +63,9 @@ def format_player_count(model: Gtk.TreeModel | None) -> str:
|
|||||||
players += row[4]
|
players += row[4]
|
||||||
players_pretty = pluralize("players", players)
|
players_pretty = pluralize("players", players)
|
||||||
hits_pretty = pluralize("matches", hits)
|
hits_pretty = pluralize("matches", hits)
|
||||||
suffix = distance_suffix
|
control_total = len(control)
|
||||||
status = f"Found {hits:n} {hits_pretty} with {players:n} {players_pretty}"
|
status = f"Showing {hits:n}/{control_total:n} {hits_pretty} with {players:n} {players_pretty}"
|
||||||
return status
|
return status
|
||||||
return f"{status} | {suffix}"
|
|
||||||
|
|
||||||
|
|
||||||
def embolden(text: str) -> str:
|
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.set_mode(Gtk.SelectionMode.SINGLE)
|
||||||
self.selected_row.connect("changed", self._on_tree_selection_changed)
|
self.selected_row.connect("changed", self._on_tree_selection_changed)
|
||||||
self.connect("row-activated", self._on_row_activated)
|
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-press-event", self._on_keypress)
|
||||||
self.connect("key-release-event", self._on_key_release)
|
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:
|
if self.get_model() is None:
|
||||||
return
|
return
|
||||||
if self.sel_blocked is False:
|
if self.sel_blocked is False:
|
||||||
|
self.sel_blocked = True
|
||||||
self.controller.suppress_signal(
|
self.controller.suppress_signal(
|
||||||
self,
|
self,
|
||||||
self.selected_row,
|
self.selected_row,
|
||||||
@ -110,9 +114,10 @@ class TreeView(CursorMixin, Gtk.TreeView): # type: ignore
|
|||||||
return
|
return
|
||||||
if is_navkey(event.keyval):
|
if is_navkey(event.keyval):
|
||||||
if self.sel_blocked is True:
|
if self.sel_blocked is True:
|
||||||
|
self.sel_blocked = False
|
||||||
self.controller.suppress_signal(
|
self.controller.suppress_signal(
|
||||||
self.controller.mediator.treeview,
|
self,
|
||||||
self.controller.mediator.treeview.selected_row,
|
self.selected_row,
|
||||||
"_on_tree_selection_changed",
|
"_on_tree_selection_changed",
|
||||||
False,
|
False,
|
||||||
)
|
)
|
||||||
@ -120,6 +125,7 @@ class TreeView(CursorMixin, Gtk.TreeView): # type: ignore
|
|||||||
self._on_tree_selection_changed(selection)
|
self._on_tree_selection_changed(selection)
|
||||||
|
|
||||||
def _on_tree_selection_changed(self, selection: Gtk.TreeSelection) -> None:
|
def _on_tree_selection_changed(self, selection: Gtk.TreeSelection) -> None:
|
||||||
|
print("selection changed")
|
||||||
self.emit("generic_treesel_changed", selection)
|
self.emit("generic_treesel_changed", selection)
|
||||||
|
|
||||||
def toggle_selection(self, state: bool) -> None:
|
def toggle_selection(self, state: bool) -> None:
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import logging
|
import logging
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
from typing import Any, Self
|
import threading
|
||||||
|
from typing import Any
|
||||||
from warnings import deprecated
|
from warnings import deprecated
|
||||||
|
|
||||||
from dzgui.views.mixins.context_mixin import ContextMixin
|
from dzgui.views.mixins.context_mixin import ContextMixin
|
||||||
@ -71,6 +72,8 @@ class ServerTreeView(ContextMixin, TreeView):
|
|||||||
column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
|
column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
|
||||||
column.set_resizable(True)
|
column.set_resizable(True)
|
||||||
column.set_sort_column_id(i)
|
column.set_sort_column_id(i)
|
||||||
|
if column_title == "Ping":
|
||||||
|
column.set_cell_data_func(renderer, self._get_ping)
|
||||||
|
|
||||||
if valid_json:
|
if valid_json:
|
||||||
try:
|
try:
|
||||||
@ -109,6 +112,39 @@ class ServerTreeView(ContextMixin, TreeView):
|
|||||||
self.emitter.connect("statusbar_loaded", self.start_distcalc)
|
self.emitter.connect("statusbar_loaded", self.start_distcalc)
|
||||||
# self.emitter.connect("distcalc_started", self._on_distcalc_started)
|
# 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:
|
def start_timeout(self) -> None:
|
||||||
if self.queue_id:
|
if self.queue_id:
|
||||||
GLib.Source.remove(self.queue_id)
|
GLib.Source.remove(self.queue_id)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user