Skip to content

Commit

Permalink
Refactoring: delegate_to_widget_mixin - use methods instead of proper…
Browse files Browse the repository at this point in the history
…ties

* in case of properties, static type checking is hard-fails
  due to re-definition method -> property -> method
  • Loading branch information
penguinolog committed Dec 11, 2023
1 parent d55f33b commit 2c91b03
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 31 deletions.
2 changes: 1 addition & 1 deletion urwid/widget/columns.py
Original file line number Diff line number Diff line change
Expand Up @@ -600,7 +600,7 @@ def render(self, size: tuple[int] | tuple[int, int], focus: bool = False) -> Sol
canv.pad_trim_left_right(0, size[0] - canv.cols())
return canv

def get_cursor_coords(self, size):
def get_cursor_coords(self, size: tuple[int] | tuple[int, int]) -> tuple[int, int] | None:
"""Return the cursor coordinates from the focus widget."""
w, (_t, _n, b) = self.contents[self.focus_position]

Expand Down
62 changes: 32 additions & 30 deletions urwid/widget/widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
from .constants import Sizing

if typing.TYPE_CHECKING:
from collections.abc import Callable, Hashable
from collections.abc import Hashable


class WidgetMeta(MetaSuper, signals.MetaSignals):
Expand Down Expand Up @@ -716,43 +716,45 @@ def render(self, size, focus: bool = False) -> CompositeCanvas:
canv = get_delegate(self).render(size, focus=focus)
return CompositeCanvas(canv)

@property
def selectable(self) -> Callable[[], bool]:
return get_delegate(self).selectable
def selectable(self) -> bool:
return get_delegate(self).selectable()

@property
def get_cursor_coords(self):
return get_delegate(self).get_cursor_coords
def get_cursor_coords(self, size: tuple[()] | tuple[int] | tuple[int, int]) -> tuple[int, int] | None:
return get_delegate(self).get_cursor_coords(size)

@property
def get_pref_col(self):
return get_delegate(self).get_pref_col
def get_pref_col(self, size: tuple[()] | tuple[int] | tuple[int, int]) -> int:
return get_delegate(self).get_pref_col(size)

@property
def keypress(self):
return get_delegate(self).keypress
def keypress(self, size: tuple[()] | tuple[int] | tuple[int, int], key: str) -> str | None:
return get_delegate(self).keypress(size, key)

@property
def move_cursor_to_coords(self):
return get_delegate(self).move_cursor_to_coords
def move_cursor_to_coords(
self,
size: tuple[()] | tuple[int] | tuple[int, int],
col: int,
row: int,
) -> bool:
return get_delegate(self).move_cursor_to_coords(size, col, row)

@property
def rows(self):
return get_delegate(self).rows
def rows(self, size: tuple[int], focus: bool = False) -> int:
return get_delegate(self).rows(size, focus=focus)

@property
def mouse_event(
self,
) -> Callable[[tuple[()] | tuple[int] | tuple[int, int], str, int, int, int, bool], bool | None,]:
return get_delegate(self).mouse_event

@property
def sizing(self):
return get_delegate(self).sizing

@property
def pack(self):
return get_delegate(self).pack
size: tuple[()] | tuple[int] | tuple[int, int],
event,
button: int,
col: int,
row: int,
focus: bool,
) -> bool | None:
return get_delegate(self).mouse_event(size, event, button, col, row, focus)

def sizing(self) -> frozenset[Sizing]:
return get_delegate(self).sizing()

def pack(self, size: tuple[()] | tuple[int] | tuple[int, int], focus: bool = False) -> tuple[int, int]:
return get_delegate(self).pack(size, focus)

return DelegateToWidgetMixin

Expand Down

0 comments on commit 2c91b03

Please sign in to comment.