Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
break
assert i < len(last), repr((on, maxcol))
la, ln = last[i]
if i < len(last):
o += [(la, ln)] + last[i + 1:]
last = o
y_count += 1
if y_count:
rowsets.append((y_count, last))
return rowsets
class GraphVScale(Widget):
_sizing = frozenset([BOX])
def __init__(self, labels, top):
"""
GraphVScale( [(label1 position, label1 markup),...], top )
label position -- 0 < position < top for the y position
label markup -- text markup for this label
top -- top y position
This widget is a vertical scale for the BarGraph widget that
can correspond to the BarGraph's horizontal lines
"""
self.set_scale(labels, top)
def set_scale(self, labels, top):
"""
self.focus_position = i
if not hasattr(w, 'mouse_event'):
return False
tsize = self.get_item_size(size, i, focus, item_rows)
return w.mouse_event(tsize, event, button, col, row-wrow,
focus)
class ColumnsError(Exception):
pass
class Columns(Widget, WidgetContainerMixin, WidgetContainerListContentsMixin):
"""
Widgets arranged horizontally in columns from left to right
"""
_sizing = frozenset([FLOW, BOX])
def __init__(self, widget_list, dividechars=0, focus_column=None,
min_width=1, box_columns=None):
"""
:param widget_list: iterable of flow or box widgets
:param dividechars: number of blank characters between columns
:param focus_column: index into widget_list of column in focus,
if ``None`` the first selectable widget will be chosen.
:param min_width: minimum width for each column which is not
calling widget.pack() in *widget_list*.
:param box_columns: a list of column indexes containing box widgets
whose height is set to the maximum of the rows
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Urwid web site: http://excess.org/urwid/
from __future__ import division, print_function
from ..urwid.util import int_scale
from ..urwid.widget import (Widget, WidgetError,
BOX, FLOW, LEFT, CENTER, RIGHT, PACK, CLIP, GIVEN, RELATIVE, RELATIVE_100,
TOP, MIDDLE, BOTTOM, delegate_to_widget_mixin)
from ..urwid.split_repr import remove_defaults
from ..urwid.canvas import CompositeCanvas, SolidCanvas
from ..urwid.widget import Divider, Edit, Text, SolidFill # doctests
class WidgetDecoration(Widget): # "decorator" was already taken
"""
original_widget -- the widget being decorated
This is a base class for decoration widgets, widgets
that contain one or more widgets and only ever have
a single focus. This type of widget will affect the
display or behaviour of the original_widget but it is
not part of determining a chain of focus.
Don't actually do this -- use a WidgetDecoration subclass
instead, these are not real widgets:
>>> WidgetDecoration(Text(u"hi"))
>
"""
def __init__(self, original_widget):
self.get_display_widget(size)
self.__super.mouse_event(size, event, button, col, row, focus)
self._set_focus_from_display_widget()
return True # at a minimum we adjusted our focus
def get_pref_col(self, size):
"""Return pref col from display widget."""
self.get_display_widget(size)
return self.__super.get_pref_col(size)
class OverlayError(Exception):
pass
class Overlay(Widget, WidgetContainerMixin, WidgetContainerListContentsMixin):
"""
Overlay contains two box widgets and renders one on top of the other
"""
_selectable = True
_sizing = frozenset([BOX])
_DEFAULT_BOTTOM_OPTIONS = (
LEFT, None, RELATIVE, 100, None, 0, 0,
TOP, None, RELATIVE, 100, None, 0, 0)
def __init__(self, top_w, bottom_w, align, width, valign, height,
min_width=None, min_height=None, left=0, right=0, top=0, bottom=0):
"""
:param top_w: a flow, box or fixed widget to overlay "on top"
:type top_w: Widget
:param bottom_w: a box widget to appear "below" previous widget
def content(self, trim_left=0, trim_right=0, cols=None, rows=None,
attr_map=None):
if self.scrolling_up == 0:
for line in self.term:
yield line
else:
buf = self.scrollback_buffer + self.term
for line in buf[-(self.height+self.scrolling_up):-self.scrolling_up]:
yield line
def content_delta(self, other):
if other is self:
return [self.cols()]*self.rows()
return self.content()
class Terminal(Widget):
_selectable = True
_sizing = frozenset([BOX])
signals = ['closed', 'beep', 'leds', 'title']
def __init__(self, command, env=None, main_loop=None, escape_sequence=None):
"""
A terminal emulator within a widget.
'command' is the command to execute inside the terminal, provided as a
list of the command followed by its arguments. If 'command' is None,
the command is the current user's shell. You can also provide a callable
instead of a command, which will be executed in the subprocess.
'env' can be used to pass custom environment variables. If omitted,
os.environ is used.
lambda self: self._get_data,
nocache_bargraph_get_data)
def nocache_bargraph_get_data(self, get_data_fn):
"""
Disable caching on this bargraph because get_data_fn needs
to be polled to get the latest data.
"""
self.render = nocache_widget_render_instance(self)
self._get_data = get_data_fn
class BarGraphError(Exception):
pass
class BarGraph(with_metaclass(BarGraphMeta, Widget)):
_sizing = frozenset([BOX])
ignore_focus = True
eighths = u' ▁▂▃▄▅▆▇'
hlines = u'_⎺⎻─⎼⎽'
def __init__(self, attlist, hatt=None, satt=None):
"""
Create a bar graph with the passed display characteristics.
see set_segment_attributes for a description of the parameters.
"""
self.set_segment_attributes(attlist, hatt, satt)
self.set_data([], 1, None)
self.set_bar_width(None)
All widgets must implement this function.
"""
raise NotImplementedError()
def fixed_size(size):
"""
raise ValueError if size != ().
Used by FixedWidgets to test size parameter.
"""
if size != ():
raise ValueError("FixedWidget takes only () for size." \
"passed: %r" % (size,))
class FixedWidget(Widget):
"""
Deprecated. Inherit from Widget and add:
_sizing = frozenset(['fixed'])
at the top of your class definition instead.
Base class of widgets that know their width and height and
cannot be resized
"""
_sizing = frozenset([FIXED])
def render(self, size, focus=False):
"""
All widgets must implement this function.
"""
def _repr_words(self):
words = []
if self.selectable():
words = ["selectable"] + words
if self.sizing() and self.sizing() != frozenset([FLOW, BOX, FIXED]):
sizing_modes = list(self.sizing())
sizing_modes.sort()
words.append("/".join(sizing_modes))
return words + ["widget"]
def _repr_attrs(self):
return {}
class FlowWidget(Widget):
"""
Deprecated. Inherit from Widget and add:
_sizing = frozenset(['flow'])
at the top of your class definition instead.
Base class of widgets that determine their rows from the number of
columns available.
"""
_sizing = frozenset([FLOW])
def rows(self, size, focus=False):
"""
All flow widgets must implement this function.
"""
_sizing = frozenset([FIXED])
def render(self, size, focus=False):
"""
All widgets must implement this function.
"""
raise NotImplementedError()
def pack(self, size=None, focus=False):
"""
All fixed widgets must implement this function.
"""
raise NotImplementedError()
class Divider(Widget):
"""
Horizontal divider widget
"""
_sizing = frozenset([FLOW])
ignore_focus = True
def __init__(self,div_char=u" ",top=0,bottom=0):
"""
:param div_char: character to repeat across line
:type div_char: bytes or unicode
:param top: number of blank lines above
:type top: int
:param bottom: number of blank lines below
c = CanvasCombine(combinelist)
if maxrow - rows:
c.pad_trim_top_bottom(0, maxrow - rows)
return c
def scale_bar_values( bar, top, maxrow ):
"""
Return a list of bar values aliased to integer values of maxrow.
"""
return [maxrow - int(float(v) * maxrow / top + 0.5) for v in bar]
class ProgressBar(Widget):
_sizing = frozenset([FLOW])
eighths = u' ▏▎▍▌▋▊▉'
text_align = CENTER
def __init__(self, normal, complete, current=0, done=100, satt=None):
"""
:param normal: display attribute for incomplete part of progress bar
:param complete: display attribute for complete part of progress bar
:param current: current progress
:param done: progress amount at 100%
:param satt: display attribute for smoothed part of bar where the
foreground of satt corresponds to the normal part and the
background corresponds to the complete part. If satt
is ``None`` then no smoothing will be done.