urwid 2.5.0__cp312-cp312-win32.whl → 2.5.1__cp312-cp312-win32.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of urwid might be problematic. Click here for more details.
- urwid/canvas.py +19 -12
- urwid/command_map.py +6 -4
- urwid/display/_posix_raw_display.py +15 -4
- urwid/display/_raw_display_base.py +32 -26
- urwid/display/_win32_raw_display.py +15 -4
- urwid/str_util.pyd +0 -0
- urwid/version.py +2 -2
- urwid/vterm.py +3 -3
- urwid/widget/attr_map.py +5 -3
- urwid/widget/bar_graph.py +7 -7
- urwid/widget/box_adapter.py +6 -7
- urwid/widget/columns.py +14 -7
- urwid/widget/divider.py +2 -2
- urwid/widget/edit.py +1 -1
- urwid/widget/filler.py +8 -7
- urwid/widget/frame.py +9 -1
- urwid/widget/grid_flow.py +4 -6
- urwid/widget/line_box.py +15 -10
- urwid/widget/overlay.py +1 -1
- urwid/widget/padding.py +6 -5
- urwid/widget/pile.py +10 -7
- urwid/widget/popup.py +16 -6
- urwid/widget/progress_bar.py +1 -1
- urwid/widget/scrollable.py +7 -4
- urwid/widget/solid_fill.py +3 -1
- urwid/widget/text.py +1 -1
- urwid/widget/widget.py +8 -8
- urwid/widget/widget_decoration.py +21 -12
- urwid/widget/wimp.py +4 -4
- {urwid-2.5.0.dist-info → urwid-2.5.1.dist-info}/METADATA +6 -2
- {urwid-2.5.0.dist-info → urwid-2.5.1.dist-info}/RECORD +34 -34
- {urwid-2.5.0.dist-info → urwid-2.5.1.dist-info}/COPYING +0 -0
- {urwid-2.5.0.dist-info → urwid-2.5.1.dist-info}/WHEEL +0 -0
- {urwid-2.5.0.dist-info → urwid-2.5.1.dist-info}/top_level.txt +0 -0
urwid/widget/grid_flow.py
CHANGED
|
@@ -23,7 +23,7 @@ class GridFlowError(WidgetError):
|
|
|
23
23
|
pass
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
class GridFlow(WidgetWrap, WidgetContainerMixin, WidgetContainerListContentsMixin):
|
|
26
|
+
class GridFlow(WidgetWrap[Pile], WidgetContainerMixin, WidgetContainerListContentsMixin):
|
|
27
27
|
"""
|
|
28
28
|
The GridFlow widget is a flow widget that renders all the widgets it
|
|
29
29
|
contains the same width and it arranges them from left to right and top to
|
|
@@ -73,10 +73,8 @@ class GridFlow(WidgetWrap, WidgetContainerMixin, WidgetContainerListContentsMixi
|
|
|
73
73
|
self.h_sep = h_sep
|
|
74
74
|
self.v_sep = v_sep
|
|
75
75
|
self.align = align
|
|
76
|
-
self._cache_maxcol =
|
|
77
|
-
super().__init__(
|
|
78
|
-
# set self._w to something other than None
|
|
79
|
-
self.get_display_widget(((h_sep + cell_width) * len(self._contents),))
|
|
76
|
+
self._cache_maxcol = self._get_maxcol(())
|
|
77
|
+
super().__init__(self.generate_display_widget((self._cache_maxcol,)))
|
|
80
78
|
|
|
81
79
|
def _invalidate(self) -> None:
|
|
82
80
|
self._cache_maxcol = None
|
|
@@ -525,7 +523,7 @@ class GridFlow(WidgetWrap, WidgetContainerMixin, WidgetContainerListContentsMixi
|
|
|
525
523
|
def mouse_event(
|
|
526
524
|
self,
|
|
527
525
|
size: tuple[int] | tuple[()],
|
|
528
|
-
event,
|
|
526
|
+
event: str,
|
|
529
527
|
button: int,
|
|
530
528
|
col: int,
|
|
531
529
|
row: int,
|
urwid/widget/line_box.py
CHANGED
|
@@ -8,19 +8,22 @@ from .divider import Divider
|
|
|
8
8
|
from .pile import Pile
|
|
9
9
|
from .solid_fill import SolidFill
|
|
10
10
|
from .text import Text
|
|
11
|
-
from .
|
|
12
|
-
from .widget_decoration import WidgetDecoration
|
|
11
|
+
from .widget_decoration import WidgetDecoration, delegate_to_widget_mixin
|
|
13
12
|
|
|
14
13
|
if typing.TYPE_CHECKING:
|
|
15
14
|
from typing_extensions import Literal
|
|
16
15
|
|
|
16
|
+
from .widget import Widget
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
WrappedWidget = typing.TypeVar("WrappedWidget")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class LineBox(WidgetDecoration[WrappedWidget], delegate_to_widget_mixin("_wrapped_widget")):
|
|
19
22
|
Symbols = BOX_SYMBOLS
|
|
20
23
|
|
|
21
24
|
def __init__(
|
|
22
25
|
self,
|
|
23
|
-
original_widget:
|
|
26
|
+
original_widget: WrappedWidget,
|
|
24
27
|
title: str = "",
|
|
25
28
|
title_align: Literal["left", "center", "right"] | Align = Align.CENTER,
|
|
26
29
|
title_attr=None,
|
|
@@ -155,15 +158,17 @@ class LineBox(WidgetDecoration, WidgetWrap):
|
|
|
155
158
|
|
|
156
159
|
pile_widgets = []
|
|
157
160
|
if top:
|
|
158
|
-
pile_widgets.append((
|
|
161
|
+
pile_widgets.append((WHSettings.PACK, top))
|
|
159
162
|
pile_widgets.append(middle)
|
|
160
|
-
focus_pos = len(pile_widgets) - 1
|
|
161
163
|
if bottom:
|
|
162
|
-
pile_widgets.append((
|
|
163
|
-
|
|
164
|
+
pile_widgets.append((WHSettings.PACK, bottom))
|
|
165
|
+
|
|
166
|
+
self._wrapped_widget = Pile(pile_widgets, focus_item=middle)
|
|
167
|
+
|
|
168
|
+
super().__init__(original_widget)
|
|
164
169
|
|
|
165
|
-
|
|
166
|
-
|
|
170
|
+
def _w(self) -> Pile:
|
|
171
|
+
return self._wrapped_widget
|
|
167
172
|
|
|
168
173
|
def format_title(self, text: str) -> str:
|
|
169
174
|
if text:
|
urwid/widget/overlay.py
CHANGED
urwid/widget/padding.py
CHANGED
|
@@ -22,7 +22,8 @@ from .widget_decoration import WidgetDecoration, WidgetError, WidgetWarning
|
|
|
22
22
|
if typing.TYPE_CHECKING:
|
|
23
23
|
from typing_extensions import Literal
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
|
|
26
|
+
WrappedWidget = typing.TypeVar("WrappedWidget")
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class PaddingError(WidgetError):
|
|
@@ -33,10 +34,10 @@ class PaddingWarning(WidgetWarning):
|
|
|
33
34
|
"""Padding related warnings."""
|
|
34
35
|
|
|
35
36
|
|
|
36
|
-
class Padding(WidgetDecoration):
|
|
37
|
+
class Padding(WidgetDecoration[WrappedWidget]):
|
|
37
38
|
def __init__(
|
|
38
39
|
self,
|
|
39
|
-
w:
|
|
40
|
+
w: WrappedWidget,
|
|
40
41
|
align: (
|
|
41
42
|
Literal["left", "center", "right"] | Align | tuple[Literal["relative", WHSettings.RELATIVE], int]
|
|
42
43
|
) = Align.LEFT,
|
|
@@ -48,7 +49,7 @@ class Padding(WidgetDecoration):
|
|
|
48
49
|
min_width: int | None = None,
|
|
49
50
|
left: int = 0,
|
|
50
51
|
right: int = 0,
|
|
51
|
-
):
|
|
52
|
+
) -> None:
|
|
52
53
|
"""
|
|
53
54
|
:param w: a box, flow or fixed widget to pad on the left and/or right
|
|
54
55
|
this widget is stored as self.original_widget
|
|
@@ -473,7 +474,7 @@ class Padding(WidgetDecoration):
|
|
|
473
474
|
def mouse_event(
|
|
474
475
|
self,
|
|
475
476
|
size: tuple[()] | tuple[int] | tuple[int, int],
|
|
476
|
-
event,
|
|
477
|
+
event: str,
|
|
477
478
|
button: int,
|
|
478
479
|
x: int,
|
|
479
480
|
y: int,
|
urwid/widget/pile.py
CHANGED
|
@@ -5,6 +5,7 @@ import warnings
|
|
|
5
5
|
from itertools import chain, repeat
|
|
6
6
|
|
|
7
7
|
from urwid.canvas import CanvasCombine, CompositeCanvas, SolidCanvas
|
|
8
|
+
from urwid.command_map import Command
|
|
8
9
|
from urwid.monitored_list import MonitoredFocusList, MonitoredList
|
|
9
10
|
from urwid.util import is_mouse_press
|
|
10
11
|
|
|
@@ -852,7 +853,9 @@ class Pile(Widget, WidgetContainerMixin, WidgetContainerListContentsMixin):
|
|
|
852
853
|
|
|
853
854
|
def keypress(self, size: tuple[()] | tuple[int] | tuple[int, int], key: str) -> str | None:
|
|
854
855
|
"""Pass the keypress to the widget in focus.
|
|
855
|
-
|
|
856
|
+
|
|
857
|
+
Unhandled 'up' and 'down' keys may cause a focus change.
|
|
858
|
+
"""
|
|
856
859
|
if not self.contents:
|
|
857
860
|
return key
|
|
858
861
|
|
|
@@ -860,10 +863,10 @@ class Pile(Widget, WidgetContainerMixin, WidgetContainerListContentsMixin):
|
|
|
860
863
|
_widths, heights, size_args = self.get_rows_sizes(size, focus=self.selectable())
|
|
861
864
|
if self.selectable():
|
|
862
865
|
key = self.focus.keypress(size_args[i], key)
|
|
863
|
-
if self._command_map[key] not in {
|
|
866
|
+
if self._command_map[key] not in {Command.UP, Command.DOWN}:
|
|
864
867
|
return key
|
|
865
868
|
|
|
866
|
-
if self._command_map[key] ==
|
|
869
|
+
if self._command_map[key] == Command.UP:
|
|
867
870
|
candidates = tuple(range(i - 1, -1, -1)) # count backwards to 0
|
|
868
871
|
else: # self._command_map[key] == 'cursor down'
|
|
869
872
|
candidates = tuple(range(i + 1, len(self.contents)))
|
|
@@ -878,7 +881,7 @@ class Pile(Widget, WidgetContainerMixin, WidgetContainerListContentsMixin):
|
|
|
878
881
|
return None
|
|
879
882
|
|
|
880
883
|
rows = heights[j]
|
|
881
|
-
if self._command_map[key] ==
|
|
884
|
+
if self._command_map[key] == Command.UP:
|
|
882
885
|
rowlist = tuple(range(rows - 1, -1, -1))
|
|
883
886
|
else: # self._command_map[key] == 'cursor down'
|
|
884
887
|
rowlist = tuple(range(rows))
|
|
@@ -934,14 +937,14 @@ class Pile(Widget, WidgetContainerMixin, WidgetContainerListContentsMixin):
|
|
|
934
937
|
def mouse_event(
|
|
935
938
|
self,
|
|
936
939
|
size: tuple[()] | tuple[int] | tuple[int, int],
|
|
937
|
-
event,
|
|
940
|
+
event: str,
|
|
938
941
|
button: int,
|
|
939
942
|
col: int,
|
|
940
943
|
row: int,
|
|
941
944
|
focus: bool,
|
|
942
945
|
) -> bool | None:
|
|
943
|
-
"""
|
|
944
|
-
|
|
946
|
+
"""Pass the event to the contained widget.
|
|
947
|
+
|
|
945
948
|
May change focus on button 1 press.
|
|
946
949
|
"""
|
|
947
950
|
wrow = 0
|
urwid/widget/popup.py
CHANGED
|
@@ -34,13 +34,15 @@ if typing.TYPE_CHECKING:
|
|
|
34
34
|
|
|
35
35
|
from .widget import Widget
|
|
36
36
|
|
|
37
|
+
WrappedWidget = typing.TypeVar("WrappedWidget")
|
|
37
38
|
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
|
|
40
|
+
class PopUpLauncher(delegate_to_widget_mixin("_original_widget"), WidgetDecoration[WrappedWidget]):
|
|
41
|
+
def __init__(self, original_widget: [WrappedWidget]) -> None:
|
|
40
42
|
super().__init__(original_widget)
|
|
41
43
|
self._pop_up_widget = None
|
|
42
44
|
|
|
43
|
-
def create_pop_up(self):
|
|
45
|
+
def create_pop_up(self) -> Widget:
|
|
44
46
|
"""
|
|
45
47
|
Subclass must override this method and return a widget
|
|
46
48
|
to be used for the pop-up. This method is called once each time
|
|
@@ -74,13 +76,13 @@ class PopUpLauncher(delegate_to_widget_mixin("_original_widget"), WidgetDecorati
|
|
|
74
76
|
return canv
|
|
75
77
|
|
|
76
78
|
|
|
77
|
-
class PopUpTarget(WidgetDecoration):
|
|
79
|
+
class PopUpTarget(WidgetDecoration[WrappedWidget]):
|
|
78
80
|
# FIXME: this whole class is a terrible hack and must be fixed
|
|
79
81
|
# when layout and rendering are separated
|
|
80
82
|
_sizing = frozenset((Sizing.BOX,))
|
|
81
83
|
_selectable = True
|
|
82
84
|
|
|
83
|
-
def __init__(self, original_widget:
|
|
85
|
+
def __init__(self, original_widget: WrappedWidget) -> None:
|
|
84
86
|
super().__init__(original_widget)
|
|
85
87
|
self._pop_up = None
|
|
86
88
|
self._current_widget = self._original_widget
|
|
@@ -132,7 +134,15 @@ class PopUpTarget(WidgetDecoration):
|
|
|
132
134
|
self._update_overlay(size, True)
|
|
133
135
|
return self._current_widget.move_cursor_to_coords(size, x, y)
|
|
134
136
|
|
|
135
|
-
def mouse_event(
|
|
137
|
+
def mouse_event(
|
|
138
|
+
self,
|
|
139
|
+
size: tuple[int, int],
|
|
140
|
+
event: str,
|
|
141
|
+
button: int,
|
|
142
|
+
x: int,
|
|
143
|
+
y: int,
|
|
144
|
+
focus: bool,
|
|
145
|
+
) -> bool | None:
|
|
136
146
|
self._update_overlay(size, focus)
|
|
137
147
|
return self._current_widget.mouse_event(size, event, button, x, y, focus)
|
|
138
148
|
|
urwid/widget/progress_bar.py
CHANGED
urwid/widget/scrollable.py
CHANGED
|
@@ -43,6 +43,9 @@ if typing.TYPE_CHECKING:
|
|
|
43
43
|
__all__ = ("ScrollbarSymbols", "ScrollBar", "Scrollable", "ScrollableError")
|
|
44
44
|
|
|
45
45
|
|
|
46
|
+
WrappedWidget = typing.TypeVar("WrappedWidget")
|
|
47
|
+
|
|
48
|
+
|
|
46
49
|
class ScrollableError(WidgetError):
|
|
47
50
|
"""Scrollable specific widget errors."""
|
|
48
51
|
|
|
@@ -119,14 +122,14 @@ class SupportsScroll(Protocol):
|
|
|
119
122
|
def rows_max(self, size: tuple[int, int] | None = None, focus: bool = False) -> int: ...
|
|
120
123
|
|
|
121
124
|
|
|
122
|
-
class Scrollable(WidgetDecoration):
|
|
125
|
+
class Scrollable(WidgetDecoration[WrappedWidget]):
|
|
123
126
|
def sizing(self) -> frozenset[Sizing]:
|
|
124
127
|
return frozenset((Sizing.BOX,))
|
|
125
128
|
|
|
126
129
|
def selectable(self) -> bool:
|
|
127
130
|
return True
|
|
128
131
|
|
|
129
|
-
def __init__(self, widget:
|
|
132
|
+
def __init__(self, widget: WrappedWidget, force_forward_keypress: bool = False) -> None:
|
|
130
133
|
"""Box widget that makes a fixed or flow widget vertically scrollable
|
|
131
134
|
|
|
132
135
|
.. note::
|
|
@@ -420,7 +423,7 @@ class Scrollable(WidgetDecoration):
|
|
|
420
423
|
return self._rows_max_cached
|
|
421
424
|
|
|
422
425
|
|
|
423
|
-
class ScrollBar(WidgetDecoration):
|
|
426
|
+
class ScrollBar(WidgetDecoration[WrappedWidget]):
|
|
424
427
|
Symbols = ScrollbarSymbols
|
|
425
428
|
|
|
426
429
|
def sizing(self):
|
|
@@ -431,7 +434,7 @@ class ScrollBar(WidgetDecoration):
|
|
|
431
434
|
|
|
432
435
|
def __init__(
|
|
433
436
|
self,
|
|
434
|
-
widget:
|
|
437
|
+
widget: WrappedWidget,
|
|
435
438
|
thumb_char: str = ScrollbarSymbols.FULL_BLOCK,
|
|
436
439
|
trough_char: str = " ",
|
|
437
440
|
side: Literal["left", "right"] = SCROLLBAR_RIGHT,
|
urwid/widget/solid_fill.py
CHANGED
|
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
from urwid.canvas import SolidCanvas
|
|
4
4
|
|
|
5
|
-
from .constants import Sizing
|
|
5
|
+
from .constants import SHADE_SYMBOLS, Sizing
|
|
6
6
|
from .widget import Widget
|
|
7
7
|
|
|
8
8
|
|
|
@@ -15,6 +15,8 @@ class SolidFill(Widget):
|
|
|
15
15
|
ignore_focus = True
|
|
16
16
|
_sizing = frozenset([Sizing.BOX])
|
|
17
17
|
|
|
18
|
+
Symbols = SHADE_SYMBOLS
|
|
19
|
+
|
|
18
20
|
def __init__(self, fill_char: str = " ") -> None:
|
|
19
21
|
"""
|
|
20
22
|
:param fill_char: character to fill area with
|
urwid/widget/text.py
CHANGED
|
@@ -294,7 +294,7 @@ class Text(Widget):
|
|
|
294
294
|
self._update_cache_translation(maxcol, ta)
|
|
295
295
|
return self._cache_translation
|
|
296
296
|
|
|
297
|
-
def _update_cache_translation(self, maxcol: int, ta):
|
|
297
|
+
def _update_cache_translation(self, maxcol: int, ta) -> None:
|
|
298
298
|
if ta:
|
|
299
299
|
text, _attr = ta
|
|
300
300
|
else:
|
urwid/widget/widget.py
CHANGED
|
@@ -37,7 +37,7 @@ from .constants import Sizing
|
|
|
37
37
|
if typing.TYPE_CHECKING:
|
|
38
38
|
from collections.abc import Callable, Hashable
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
WrappedWidget = typing.TypeVar("WrappedWidget")
|
|
41
41
|
LOGGER = logging.getLogger(__name__)
|
|
42
42
|
|
|
43
43
|
|
|
@@ -172,7 +172,7 @@ def cache_widget_rows(cls):
|
|
|
172
172
|
fn = cls.rows
|
|
173
173
|
|
|
174
174
|
@functools.wraps(fn)
|
|
175
|
-
def cached_rows(self, size, focus=False):
|
|
175
|
+
def cached_rows(self, size: tuple[int], focus: bool = False) -> int:
|
|
176
176
|
focus = focus and not ignore_focus
|
|
177
177
|
canv = CanvasCache.fetch(self, cls, size, focus)
|
|
178
178
|
if canv:
|
|
@@ -455,7 +455,7 @@ class Widget(metaclass=WidgetMeta):
|
|
|
455
455
|
"""
|
|
456
456
|
return split_repr(self)
|
|
457
457
|
|
|
458
|
-
def _repr_words(self):
|
|
458
|
+
def _repr_words(self) -> list[str]:
|
|
459
459
|
words = []
|
|
460
460
|
if self.selectable():
|
|
461
461
|
words = ["selectable", *words]
|
|
@@ -766,8 +766,8 @@ class WidgetWrapError(Exception):
|
|
|
766
766
|
pass
|
|
767
767
|
|
|
768
768
|
|
|
769
|
-
class WidgetWrap(delegate_to_widget_mixin("_wrapped_widget")):
|
|
770
|
-
def __init__(self, w:
|
|
769
|
+
class WidgetWrap(delegate_to_widget_mixin("_wrapped_widget"), typing.Generic[WrappedWidget]):
|
|
770
|
+
def __init__(self, w: WrappedWidget) -> None:
|
|
771
771
|
"""
|
|
772
772
|
w -- widget to wrap, stored as self._w
|
|
773
773
|
|
|
@@ -792,11 +792,11 @@ class WidgetWrap(delegate_to_widget_mixin("_wrapped_widget")):
|
|
|
792
792
|
self._wrapped_widget = w
|
|
793
793
|
|
|
794
794
|
@property
|
|
795
|
-
def _w(self) ->
|
|
795
|
+
def _w(self) -> WrappedWidget:
|
|
796
796
|
return self._wrapped_widget
|
|
797
797
|
|
|
798
798
|
@_w.setter
|
|
799
|
-
def _w(self, new_widget:
|
|
799
|
+
def _w(self, new_widget: WrappedWidget) -> None:
|
|
800
800
|
"""
|
|
801
801
|
Change the wrapped widget. This is meant to be called
|
|
802
802
|
only by subclasses.
|
|
@@ -816,7 +816,7 @@ class WidgetWrap(delegate_to_widget_mixin("_wrapped_widget")):
|
|
|
816
816
|
self._wrapped_widget = new_widget
|
|
817
817
|
self._invalidate()
|
|
818
818
|
|
|
819
|
-
def _set_w(self, w):
|
|
819
|
+
def _set_w(self, w: WrappedWidget) -> None:
|
|
820
820
|
"""
|
|
821
821
|
Change the wrapped widget. This is meant to be called
|
|
822
822
|
only by subclasses.
|
|
@@ -13,10 +13,19 @@ if typing.TYPE_CHECKING:
|
|
|
13
13
|
from .constants import Sizing
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
__all__ = (
|
|
16
|
+
__all__ = (
|
|
17
|
+
"WidgetDecoration",
|
|
18
|
+
"WidgetDisable",
|
|
19
|
+
"WidgetError",
|
|
20
|
+
"WidgetPlaceholder",
|
|
21
|
+
"WidgetWarning",
|
|
22
|
+
"delegate_to_widget_mixin",
|
|
23
|
+
)
|
|
17
24
|
|
|
25
|
+
WrappedWidget = typing.TypeVar("WrappedWidget")
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
|
|
28
|
+
class WidgetDecoration(Widget, typing.Generic[WrappedWidget]): # "decorator" was already taken
|
|
20
29
|
"""
|
|
21
30
|
original_widget -- the widget being decorated
|
|
22
31
|
|
|
@@ -34,7 +43,7 @@ class WidgetDecoration(Widget): # "decorator" was already taken
|
|
|
34
43
|
<WidgetDecoration fixed/flow widget <Text fixed/flow widget 'hi'>>
|
|
35
44
|
"""
|
|
36
45
|
|
|
37
|
-
def __init__(self, original_widget:
|
|
46
|
+
def __init__(self, original_widget: WrappedWidget) -> None:
|
|
38
47
|
# TODO(Aleksei): reduce amount of multiple inheritance usage
|
|
39
48
|
# Special case: subclasses with multiple inheritance causes `super` call wrong way
|
|
40
49
|
# Call parent __init__ explicit
|
|
@@ -48,19 +57,19 @@ class WidgetDecoration(Widget): # "decorator" was already taken
|
|
|
48
57
|
)
|
|
49
58
|
self._original_widget = original_widget
|
|
50
59
|
|
|
51
|
-
def _repr_words(self):
|
|
60
|
+
def _repr_words(self) -> list[str]:
|
|
52
61
|
return [*super()._repr_words(), repr(self._original_widget)]
|
|
53
62
|
|
|
54
63
|
@property
|
|
55
|
-
def original_widget(self) ->
|
|
64
|
+
def original_widget(self) -> WrappedWidget:
|
|
56
65
|
return self._original_widget
|
|
57
66
|
|
|
58
67
|
@original_widget.setter
|
|
59
|
-
def original_widget(self, original_widget:
|
|
68
|
+
def original_widget(self, original_widget: WrappedWidget) -> None:
|
|
60
69
|
self._original_widget = original_widget
|
|
61
70
|
self._invalidate()
|
|
62
71
|
|
|
63
|
-
def _get_original_widget(self) ->
|
|
72
|
+
def _get_original_widget(self) -> WrappedWidget:
|
|
64
73
|
warnings.warn(
|
|
65
74
|
f"Method `{self.__class__.__name__}._get_original_widget` is deprecated, "
|
|
66
75
|
f"please use property `{self.__class__.__name__}.original_widget`",
|
|
@@ -69,7 +78,7 @@ class WidgetDecoration(Widget): # "decorator" was already taken
|
|
|
69
78
|
)
|
|
70
79
|
return self.original_widget
|
|
71
80
|
|
|
72
|
-
def _set_original_widget(self, original_widget):
|
|
81
|
+
def _set_original_widget(self, original_widget: WrappedWidget) -> None:
|
|
73
82
|
warnings.warn(
|
|
74
83
|
f"Method `{self.__class__.__name__}._set_original_widget` is deprecated, "
|
|
75
84
|
f"please use property `{self.__class__.__name__}.original_widget`",
|
|
@@ -99,7 +108,7 @@ class WidgetDecoration(Widget): # "decorator" was already taken
|
|
|
99
108
|
w = w._original_widget
|
|
100
109
|
return w
|
|
101
110
|
|
|
102
|
-
def _get_base_widget(self):
|
|
111
|
+
def _get_base_widget(self) -> Widget:
|
|
103
112
|
warnings.warn(
|
|
104
113
|
f"Method `{self.__class__.__name__}._get_base_widget` is deprecated, "
|
|
105
114
|
f"please use property `{self.__class__.__name__}.base_widget`",
|
|
@@ -115,7 +124,7 @@ class WidgetDecoration(Widget): # "decorator" was already taken
|
|
|
115
124
|
return self._original_widget.sizing()
|
|
116
125
|
|
|
117
126
|
|
|
118
|
-
class WidgetPlaceholder(delegate_to_widget_mixin("_original_widget"), WidgetDecoration):
|
|
127
|
+
class WidgetPlaceholder(delegate_to_widget_mixin("_original_widget"), WidgetDecoration[WrappedWidget]):
|
|
119
128
|
"""
|
|
120
129
|
This is a do-nothing decoration widget that can be used for swapping
|
|
121
130
|
between widgets without modifying the container of this widget.
|
|
@@ -130,7 +139,7 @@ class WidgetPlaceholder(delegate_to_widget_mixin("_original_widget"), WidgetDeco
|
|
|
130
139
|
pass
|
|
131
140
|
|
|
132
141
|
|
|
133
|
-
class WidgetDisable(WidgetDecoration):
|
|
142
|
+
class WidgetDisable(WidgetDecoration[WrappedWidget]):
|
|
134
143
|
"""
|
|
135
144
|
A decoration widget that disables interaction with the widget it
|
|
136
145
|
wraps. This widget always passes focus=False to the wrapped widget,
|
|
@@ -143,7 +152,7 @@ class WidgetDisable(WidgetDecoration):
|
|
|
143
152
|
def selectable(self) -> Literal[False]:
|
|
144
153
|
return False
|
|
145
154
|
|
|
146
|
-
def rows(self, size, focus: bool = False) -> int:
|
|
155
|
+
def rows(self, size: tuple[int], focus: bool = False) -> int:
|
|
147
156
|
return self._original_widget.rows(size, False)
|
|
148
157
|
|
|
149
158
|
def sizing(self) -> frozenset[Sizing]:
|
urwid/widget/wimp.py
CHANGED
|
@@ -134,7 +134,7 @@ class CheckBoxError(WidgetError):
|
|
|
134
134
|
pass
|
|
135
135
|
|
|
136
136
|
|
|
137
|
-
class CheckBox(WidgetWrap):
|
|
137
|
+
class CheckBox(WidgetWrap[Columns]):
|
|
138
138
|
states: typing.ClassVar[dict[bool | Literal["mixed"], SelectableIcon]] = {
|
|
139
139
|
True: SelectableIcon("[X]", 1),
|
|
140
140
|
False: SelectableIcon("[ ]", 1),
|
|
@@ -430,7 +430,7 @@ class CheckBox(WidgetWrap):
|
|
|
430
430
|
elif self.state == "mixed":
|
|
431
431
|
self.set_state(False)
|
|
432
432
|
|
|
433
|
-
def mouse_event(self, size: tuple[int], event, button: int, x: int, y: int, focus: bool) -> bool:
|
|
433
|
+
def mouse_event(self, size: tuple[int], event: str, button: int, x: int, y: int, focus: bool) -> bool:
|
|
434
434
|
"""
|
|
435
435
|
Toggle state on button 1 press.
|
|
436
436
|
|
|
@@ -593,7 +593,7 @@ class RadioButton(CheckBox):
|
|
|
593
593
|
self.set_state(True)
|
|
594
594
|
|
|
595
595
|
|
|
596
|
-
class Button(WidgetWrap):
|
|
596
|
+
class Button(WidgetWrap[Columns]):
|
|
597
597
|
button_left = Text("<")
|
|
598
598
|
button_right = Text(">")
|
|
599
599
|
|
|
@@ -754,7 +754,7 @@ class Button(WidgetWrap):
|
|
|
754
754
|
self._emit("click")
|
|
755
755
|
return None
|
|
756
756
|
|
|
757
|
-
def mouse_event(self, size: tuple[int], event, button: int, x: int, y: int, focus: bool) -> bool:
|
|
757
|
+
def mouse_event(self, size: tuple[int], event: str, button: int, x: int, y: int, focus: bool) -> bool:
|
|
758
758
|
"""
|
|
759
759
|
Send 'click' signal on button 1 press.
|
|
760
760
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: urwid
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.1
|
|
4
4
|
Summary: A full-featured console (xterm et al.) user interface library
|
|
5
5
|
Home-page: https://urwid.org/
|
|
6
6
|
Author-email: Ian Ward <ian@excess.org>
|
|
@@ -56,7 +56,7 @@ Requires-Dist: zmq ; extra == 'zmq'
|
|
|
56
56
|
|
|
57
57
|
Urwid
|
|
58
58
|
=====
|
|
59
|
-
|pypi| |docs| |ci| |coveralls|
|
|
59
|
+
|pypi| |docs| |gitter| |ci| |coveralls|
|
|
60
60
|
|
|
61
61
|
About
|
|
62
62
|
=====
|
|
@@ -314,6 +314,10 @@ Contributors
|
|
|
314
314
|
:alt: Documentation Status
|
|
315
315
|
:target: https://urwid.org
|
|
316
316
|
|
|
317
|
+
.. |gitter| image:: https://img.shields.io/gitter/room/urwid/community
|
|
318
|
+
:alt: Gitter
|
|
319
|
+
:target: https://gitter.im/urwid/community
|
|
320
|
+
|
|
317
321
|
.. |ci| image:: https://github.com/urwid/urwid/actions/workflows/pythonpackage.yml/badge.svg?branch=master
|
|
318
322
|
:target: https://github.com/urwid/urwid/actions
|
|
319
323
|
:alt: CI status
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
urwid/__init__.py,sha256=TPZoQfunkUROBnDjzoY7Tmhj5k1v0rL74IgK7IbJcNc,8331
|
|
2
|
-
urwid/canvas.py,sha256=
|
|
3
|
-
urwid/command_map.py,sha256=
|
|
2
|
+
urwid/canvas.py,sha256=6JHe2v6xJFvyMVvSMBBTrqxaUzDY9RmB_coWavd7M74,47938
|
|
3
|
+
urwid/command_map.py,sha256=7IUTnSGS6Pi5WV3uJh_SJj-0kSOQznssqS027H7ZjkA,4411
|
|
4
4
|
urwid/container.py,sha256=PrgT28jXiuT8xmjnNeQ2ZsX0SUui-NMoNXutXGUWjZU,1648
|
|
5
5
|
urwid/decoration.py,sha256=FSn-is91LbdbN6zE3D8Q8OS1JYRpyB1VpmBbyEn32Us,1837
|
|
6
6
|
urwid/font.py,sha256=itOZrpaWCFKP5TherpuzkepbH7879LxNtFOYVAYZ0EI,32631
|
|
@@ -12,20 +12,20 @@ urwid/numedit.py,sha256=OyWjdTZQBJhAEiGd0iE9OBGbOuHuuhkEeQQo0HyaDBU,13693
|
|
|
12
12
|
urwid/old_str_util.py,sha256=3XSLH6ZtG2A6Arsd2uGtKvHaK7u6xYzuWqpjPQTo1XA,11873
|
|
13
13
|
urwid/signals.py,sha256=a3PMBTZZroFL1N_it9Ww6JdeCt1fuoKPp53O9cBxDfA,13512
|
|
14
14
|
urwid/split_repr.py,sha256=O9fIlyQ_o-JF8JS_rWfs1v5_IWk_zUL4YhcqjIodqf8,4029
|
|
15
|
-
urwid/str_util.pyd,sha256=
|
|
15
|
+
urwid/str_util.pyd,sha256=9YS1-BxKJioa1e7LrHa1rOsB5wSGTkmUc5XRNvGDRBE,15872
|
|
16
16
|
urwid/text_layout.py,sha256=UVrWI4MUQZFh1CdtIMuombplKcpvkP__pkjVFtek-tM,19749
|
|
17
17
|
urwid/treetools.py,sha256=n3NhKhNXeUpK-Cx0UIORU9oPKle0vbd8wRZKASbvBj0,16021
|
|
18
18
|
urwid/util.py,sha256=fqbVa1sQQU36rdJxFjQ5mpGwHP3qtl2200QZ7EL3Fn0,16249
|
|
19
|
-
urwid/version.py,sha256=
|
|
20
|
-
urwid/vterm.py,sha256=
|
|
19
|
+
urwid/version.py,sha256=VmH1ygdsGBfrRYSzC_oT5UH9icFjENCi7HUxJD1lGOU,427
|
|
20
|
+
urwid/vterm.py,sha256=qd7iV2sv8n46G2jKF8yUPQ-KsCQ8wR4fKgb6M0t-oYA,59840
|
|
21
21
|
urwid/wimp.py,sha256=NUT61M_tJJFwX2REUa1SyIj91BIdGDseyYNQwbRyhwI,590
|
|
22
22
|
urwid/display/__init__.py,sha256=Zzc-g4vAwjCA5rtv4cI2oheX_AvTtZm1ETNkpYAko5A,1829
|
|
23
|
-
urwid/display/_posix_raw_display.py,sha256=
|
|
24
|
-
urwid/display/_raw_display_base.py,sha256=
|
|
23
|
+
urwid/display/_posix_raw_display.py,sha256=DriDtgxa-xa5byySzAIbHwSSBwo7iZy8J4opbvJaNZ8,14864
|
|
24
|
+
urwid/display/_raw_display_base.py,sha256=swB4LQermtlVc8RNPSLgK4cFt7M5AtZTxg8mHptZ3jY,33347
|
|
25
25
|
urwid/display/_web.css,sha256=Bu_r90b-HqcS8lV_LTa08F3cJuUvTW_vP7OR6LgNJhQ,371
|
|
26
26
|
urwid/display/_web.js,sha256=ZFTx-WYBGII2JHvc4WcRocgvhg217i3JC7FndAyBJE4,13409
|
|
27
27
|
urwid/display/_win32.py,sha256=ZbzMi_JcpAf2NKPD7JyhFPILbEEJWsmXc9cUjRoh2D8,5572
|
|
28
|
-
urwid/display/_win32_raw_display.py,sha256=
|
|
28
|
+
urwid/display/_win32_raw_display.py,sha256=7g3lTSAgXt6GOwm6U8kTstbe7zk_tUGUc-O31TWNEcw,9494
|
|
29
29
|
urwid/display/common.py,sha256=KwH9b7Scey8YTEU-SMYcV96QrsLuhUgTnM3umvUX5TU,40669
|
|
30
30
|
urwid/display/curses.py,sha256=Uew0_5OACPmLs4okfs1w7zBRM92wtMitTJHslOspJnE,23164
|
|
31
31
|
urwid/display/escape.py,sha256=QzUWFKCX4WOJ_NdLJmF6mCWqsu_Zvf0qlt0a_pVRBys,18639
|
|
@@ -44,33 +44,33 @@ urwid/event_loop/trio_loop.py,sha256=H_DxlPmH73WBukCP20Pux0rIuMYsLnpkaBvSw6rMILA
|
|
|
44
44
|
urwid/event_loop/twisted_loop.py,sha256=4tuJBbhaZw3uBg6EK7WfzQRzcVXSE5ysDiE3YqJnFEY,9150
|
|
45
45
|
urwid/event_loop/zmq_loop.py,sha256=dBZ3jLcs1TDh7DzbN8cVXIHMqywiK59nzT0yp2ohY6k,9133
|
|
46
46
|
urwid/widget/__init__.py,sha256=-30CgnCmCHBGhQqFrWOsRGQaAhBcQf4tR2WYKCqpem8,4263
|
|
47
|
-
urwid/widget/attr_map.py,sha256=
|
|
47
|
+
urwid/widget/attr_map.py,sha256=P1lm7Wp_1iSctuW-yYe9yrvyL4RcavqxTfSPOm0DUfU,6197
|
|
48
48
|
urwid/widget/attr_wrap.py,sha256=w8svXy5pJIcOBi_YrvIu2J_jbYowF9R4ETsmrsDJFac,4860
|
|
49
|
-
urwid/widget/bar_graph.py,sha256=
|
|
49
|
+
urwid/widget/bar_graph.py,sha256=OgGthQmNTRBB4b7cvOu_5U9RrpzvpB4EGoBg4mrL-BU,22105
|
|
50
50
|
urwid/widget/big_text.py,sha256=_uEBamRAsyHAMihstsIEshquLW0MhxR9BGZshJIsrfU,2269
|
|
51
|
-
urwid/widget/box_adapter.py,sha256=
|
|
52
|
-
urwid/widget/columns.py,sha256=
|
|
51
|
+
urwid/widget/box_adapter.py,sha256=FgBy0xPDcym8HW6rUoKZeQojPW-gsZ-wkSxZwcfiOAw,4261
|
|
52
|
+
urwid/widget/columns.py,sha256=3xqKGwZEPFsDCWAtUYifw-jsdlWssz-cKO_gbg6nUdY,44306
|
|
53
53
|
urwid/widget/constants.py,sha256=k3pw6MOwrAeQ_WQ-dfN6eulS_7KEzfwk04rNPY36EB4,16212
|
|
54
54
|
urwid/widget/container.py,sha256=-q058gyrcotVwt95GugT4uP9Uo5e3b7yKB_70n6mjak,7368
|
|
55
|
-
urwid/widget/divider.py,sha256=
|
|
56
|
-
urwid/widget/edit.py,sha256=
|
|
57
|
-
urwid/widget/filler.py,sha256=
|
|
58
|
-
urwid/widget/frame.py,sha256=
|
|
59
|
-
urwid/widget/grid_flow.py,sha256=
|
|
60
|
-
urwid/widget/line_box.py,sha256=
|
|
61
|
-
urwid/widget/overlay.py,sha256=
|
|
62
|
-
urwid/widget/padding.py,sha256=
|
|
63
|
-
urwid/widget/pile.py,sha256=
|
|
64
|
-
urwid/widget/popup.py,sha256=
|
|
65
|
-
urwid/widget/progress_bar.py,sha256=
|
|
66
|
-
urwid/widget/scrollable.py,sha256=
|
|
67
|
-
urwid/widget/solid_fill.py,sha256
|
|
68
|
-
urwid/widget/text.py,sha256=
|
|
69
|
-
urwid/widget/widget.py,sha256=
|
|
70
|
-
urwid/widget/widget_decoration.py,sha256
|
|
71
|
-
urwid/widget/wimp.py,sha256=
|
|
72
|
-
urwid-2.5.
|
|
73
|
-
urwid-2.5.
|
|
74
|
-
urwid-2.5.
|
|
75
|
-
urwid-2.5.
|
|
76
|
-
urwid-2.5.
|
|
55
|
+
urwid/widget/divider.py,sha256=h_ithPFtHtnSkmXNkUyrvgAN6WuIRhwfBK9R_b2jB-4,3304
|
|
56
|
+
urwid/widget/edit.py,sha256=uZcwFB7-onONytOZQo8YIh-EDcnHgwy9V1Udq-5Zn5A,24039
|
|
57
|
+
urwid/widget/filler.py,sha256=BnKAQEjFDDwZRcDwF-IIQaf2LBhZB2XeStaQYHA_Uy8,14963
|
|
58
|
+
urwid/widget/frame.py,sha256=KRd3nd_bAUG4uuoIdVtC0XSgTsReTrC-kLlnHLswKN4,19710
|
|
59
|
+
urwid/widget/grid_flow.py,sha256=6kDjOImxoOo_89MEGtm6v3i30Qtls_bKbqsQIwdKQ80,20321
|
|
60
|
+
urwid/widget/line_box.py,sha256=KwE_VOZPS78g19I2pWtbrX5IIJGV992kJ1QufeII43w,7063
|
|
61
|
+
urwid/widget/overlay.py,sha256=JyCQAIvF6m3LZecMa3rZSWrRqp9T4nGV1aRV32BEqzE,31375
|
|
62
|
+
urwid/widget/padding.py,sha256=qN_JmzdlczzNXUS9AjLn3Lb2KEVK4G2BHzRKt_0fluE,21106
|
|
63
|
+
urwid/widget/pile.py,sha256=QvdbkJR6XoJpZRTYFiVidH3QUaVP98PShE0-KoOsvYA,36995
|
|
64
|
+
urwid/widget/popup.py,sha256=Ehs0g8VU_e1fzD-NqqViu0CXQ9kPxSRlbCCN4Gu0Ojo,5763
|
|
65
|
+
urwid/widget/progress_bar.py,sha256=oA8tOxnrI2daEWseJrFLUSvpYuS4aMbAaxPBg-g4pL0,4826
|
|
66
|
+
urwid/widget/scrollable.py,sha256=r7BXK1KDpq9js6yWP67WzyYQhGi1rrWEJHrpuzNQ3BQ,22382
|
|
67
|
+
urwid/widget/solid_fill.py,sha256=jjwTnjcxWli-3pAuCImPjXUzDIaCIPxn_La9QbKl6hQ,1247
|
|
68
|
+
urwid/widget/text.py,sha256=5Wdahn9ob9Fe3EF7wMymVWY5ruHFBL0Xtfc-WloHnWA,11809
|
|
69
|
+
urwid/widget/widget.py,sha256=GxVrvcrJpGk1mffGMf9vyK23prLVa3BRufxOKM-zZp4,30237
|
|
70
|
+
urwid/widget/widget_decoration.py,sha256=uYhbtwiOPsc9SEdzJ_I-mGOuzLYoqSUk5iP9tqoqaU8,5674
|
|
71
|
+
urwid/widget/wimp.py,sha256=4zseWfSus_Q5VFcD24m1QRcBLQA5B_8cns5AN6UJ_bc,27032
|
|
72
|
+
urwid-2.5.1.dist-info/COPYING,sha256=0u_In7t1M1cqRy004HlklRgQo6T40xWezC3KoUUsXCY,26938
|
|
73
|
+
urwid-2.5.1.dist-info/METADATA,sha256=-dWTkChlI3l8n7K1D87tXJYOftY2X2zcUmuvcemmIrM,11164
|
|
74
|
+
urwid-2.5.1.dist-info/WHEEL,sha256=Q5m5OU7k24Q9oJcD9pbryDsMdvQYL1N4fomXgd4i1qg,98
|
|
75
|
+
urwid-2.5.1.dist-info/top_level.txt,sha256=AwxQA43kNkjHbhYELXHBKrQ01X5CR2KnDzU07cVqilY,6
|
|
76
|
+
urwid-2.5.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|