def render(self, size, focus=False): """ Render GraphVScale. """ (maxcol, maxrow) = size pl = scale_bar_values(self.pos, self.top, maxrow) combinelist = [] rows = 0 for p, t in zip(pl, self.txt): p -= 1 if p >= maxrow: break if p < rows: continue c = t.render((maxcol, )) if p > rows: run = p - rows c = CompositeCanvas(c) c.pad_trim_top_bottom(run, 0) rows += c.rows() combinelist.append((c, None, False)) if not combinelist: return SolidCanvas(" ", size[0], size[1]) c = CanvasCombine(combinelist) if maxrow - rows: c.pad_trim_top_bottom(0, maxrow - rows) return c
def render(self, size, focus=False): """ Render BarGraph. """ (maxcol, maxrow) = size self.maxcol = maxcol disp = self.calculate_display((maxcol, maxrow)) combinelist = [] for row in disp: l = [] for _, currLoc in enumerate(row, start=0): if currLoc == 'X': # bar a = self.attr[1] t = self.char[0] elif currLoc == ' ': a = None t = currLoc else: a = None t = currLoc # this would likely be printing the scale on the left hand side l.append((a, t)) c = Text(l).render((maxcol, )) assert c.rows() == 1, "Invalid characters in BarGraph!" combinelist += [(c, None, False)] canv = CanvasCombine(combinelist) return canv
def render(self, size, focus=False): """ Render BarGraph. """ (maxcol, maxrow) = size disp = self.calculate_display((maxcol, maxrow)) combinelist = [] for y_count, row in disp: l = [] for bar_type, width in row: if type(bar_type) == tuple: if len(bar_type) == 3: # vertical eighths fg, bg, k = bar_type a = self.satt[(fg, bg)] t = self.eighths[k] * width else: # horizontal lines bg, k = bar_type a = self.hatt[bg] t = self.hlines[k] * width else: a = self.attr[bar_type] t = self.char[bar_type] * width l.append((a, t)) c = Text(l).render((maxcol, )) assert c.rows() == 1, "Invalid characters in BarGraph!" combinelist += [(c, None, False)] * y_count canv = CanvasCombine(combinelist) return canv
def render(self, size, focus=False): """ Render all widgets in self.widget_list and return the results stacked one on top of the next. """ maxcol = size[0] item_rows = None combinelist = [] for i, (w, (f, height)) in enumerate(self.contents): item_focus = self.focus_item == w canv = None if f == 'fixed': canv = w.render((maxcol, height), focus=focus and item_focus) elif f == 'flow' or len(size) == 1: canv = w.render((maxcol, ), focus=focus and item_focus) else: if item_rows is None: item_rows = self.get_item_rows(size, focus) rows = item_rows[i] if rows > 0: canv = w.render((maxcol, rows), focus=focus and item_focus) if canv: combinelist.append((canv, i, item_focus)) if not combinelist: return SolidCanvas(" ", size[0], (size[1:] + (0, ))[0]) out = CanvasCombine(combinelist) if len(size) == 2 and size[1] < out.rows(): # flow/fixed widgets rendered too large out = CompositeCanvas(out) out.pad_trim_top_bottom(0, size[1] - out.rows()) return out
def render(self, size, focus=False): """ Render all widgets in self.widget_list and return the results stacked one on top of the next. """ maxcol = size[0] item_rows = None combinelist = [] for i, (w, (f, height)) in enumerate(self.contents): item_focus = self.focus_item == w canv = None if f == "fixed": canv = w.render((maxcol, height), focus=focus and item_focus) elif f == "flow" or len(size) == 1: canv = w.render((maxcol,), focus=focus and item_focus) else: if item_rows is None: item_rows = self.get_item_rows(size, focus) rows = item_rows[i] if rows > 0: canv = w.render((maxcol, rows), focus=focus and item_focus) if canv: combinelist.append((canv, i, item_focus)) if not combinelist: return SolidCanvas(" ", size[0], (size[1:] + (0,))[0]) out = CanvasCombine(combinelist) if len(size) == 2 and size[1] < out.rows(): # flow/fixed widgets rendered too large out = CompositeCanvas(out) out.pad_trim_top_bottom(0, size[1] - out.rows()) return out
def render(self, size, focus=False): """Render frame and return it.""" (maxcol, maxrow) = size (htrim, ftrim),(hrows, frows) = self.frame_top_bottom( (maxcol, maxrow), focus) combinelist = [] depends_on = [] head = None if htrim and htrim < hrows: head = Filler(self.header, 'top').render( (maxcol, htrim), focus and self.focus_part == 'header') elif htrim: head = self.header.render((maxcol,), focus and self.focus_part == 'header') assert head.rows() == hrows, "rows, render mismatch" if head: combinelist.append((head, 'header', self.focus_part == 'header')) depends_on.append(self.header) if ftrim+htrim < maxrow: body = self.body.render((maxcol, maxrow-ftrim-htrim), focus and self.focus_part == 'body') combinelist.append((body, 'body', self.focus_part == 'body')) depends_on.append(self.body) foot = None if ftrim and ftrim < frows: foot = Filler(self.footer, 'bottom').render( (maxcol, ftrim), focus and self.focus_part == 'footer') elif ftrim: foot = self.footer.render((maxcol,), focus and self.focus_part == 'footer') assert foot.rows() == frows, "rows, render mismatch" if foot: combinelist.append((foot, 'footer', self.focus_part == 'footer')) depends_on.append(self.footer) return CanvasCombine(combinelist)
def render(self, size, focus=False ): """ Render listbox and return canvas. """ (maxcol, maxrow) = size middle, top, bottom = self.calculate_visible( (maxcol, maxrow), focus=focus) if middle is None: return SolidCanvas(" ", maxcol, maxrow) _ignore, focus_widget, focus_pos, focus_rows, cursor = middle trim_top, fill_above = top trim_bottom, fill_below = bottom combinelist = [] rows = 0 fill_above.reverse() # fill_above is in bottom-up order for widget,w_pos,w_rows in fill_above: canvas = widget.render((maxcol,)) if w_rows != canvas.rows(): raise ListBoxError, "Widget %r at position %r within listbox calculated %d rows but rendered %d!"% (widget,w_pos,w_rows, canvas.rows()) rows += w_rows combinelist.append((canvas, w_pos, False)) focus_canvas = focus_widget.render((maxcol,), focus=focus) if focus_canvas.rows() != focus_rows: raise ListBoxError, "Focus Widget %r at position %r within listbox calculated %d rows but rendered %d!"% (focus_widget,focus_pos,focus_rows, focus_canvas.rows()) c_cursor = focus_canvas.cursor if cursor != c_cursor: raise ListBoxError, "Focus Widget %r at position %r within listbox calculated cursor coords %r but rendered cursor coords %r!" %(focus_widget,focus_pos,cursor,c_cursor) rows += focus_rows combinelist.append((focus_canvas, focus_pos, True)) for widget,w_pos,w_rows in fill_below: canvas = widget.render((maxcol,)) if w_rows != canvas.rows(): raise ListBoxError, "Widget %r at position %r within listbox calculated %d rows but rendered %d!"% (widget,w_pos,w_rows, canvas.rows()) rows += w_rows combinelist.append((canvas, w_pos, False)) final_canvas = CanvasCombine(combinelist) if trim_top: final_canvas.trim(trim_top) rows -= trim_top if trim_bottom: final_canvas.trim_end(trim_bottom) rows -= trim_bottom assert rows <= maxrow, "Listbox contents too long! Probably urwid's fault (please report): %r" % ((top,middle,bottom),) if rows < maxrow: bottom_pos = focus_pos if fill_below: bottom_pos = fill_below[-1][1] assert trim_bottom==0 and self.body.get_next(bottom_pos) == (None,None), "Listbox contents too short! Probably urwid's fault (please report): %r" % ((top,middle,bottom),) final_canvas.pad_trim_top_bottom(0, maxrow - rows) return final_canvas
def render(self, size, focus=False): """ Render listbox and return canvas. """ (maxcol, maxrow) = size middle, top, bottom = self.calculate_visible((maxcol, maxrow), focus=focus) if middle is None: return SolidCanvas(" ", maxcol, maxrow) _ignore, focus_widget, focus_pos, focus_rows, cursor = middle trim_top, fill_above = top trim_bottom, fill_below = bottom combinelist = [] rows = 0 fill_above.reverse() # fill_above is in bottom-up order for widget, w_pos, w_rows in fill_above: canvas = widget.render((maxcol, )) if w_rows != canvas.rows(): raise ListBoxError, "Widget %r at position %r within listbox calculated %d rows but rendered %d!" % ( widget, w_pos, w_rows, canvas.rows()) rows += w_rows combinelist.append((canvas, w_pos, False)) focus_canvas = focus_widget.render((maxcol, ), focus=focus) if focus_canvas.rows() != focus_rows: raise ListBoxError, "Focus Widget %r at position %r within listbox calculated %d rows but rendered %d!" % ( focus_widget, focus_pos, focus_rows, focus_canvas.rows()) c_cursor = focus_canvas.cursor if cursor != c_cursor: raise ListBoxError, "Focus Widget %r at position %r within listbox calculated cursor coords %r but rendered cursor coords %r!" % ( focus_widget, focus_pos, cursor, c_cursor) rows += focus_rows combinelist.append((focus_canvas, focus_pos, True)) for widget, w_pos, w_rows in fill_below: canvas = widget.render((maxcol, )) if w_rows != canvas.rows(): raise ListBoxError, "Widget %r at position %r within listbox calculated %d rows but rendered %d!" % ( widget, w_pos, w_rows, canvas.rows()) rows += w_rows combinelist.append((canvas, w_pos, False)) final_canvas = CanvasCombine(combinelist) if trim_top: final_canvas.trim(trim_top) rows -= trim_top if trim_bottom: final_canvas.trim_end(trim_bottom) rows -= trim_bottom assert rows <= maxrow, "Listbox contents too long! Probably urwid's fault (please report): %r" % ( (top, middle, bottom), ) if rows < maxrow: bottom_pos = focus_pos if fill_below: bottom_pos = fill_below[-1][1] assert trim_bottom == 0 and self.body.get_next(bottom_pos) == ( None, None ), "Listbox contents too short! Probably urwid's fault (please report): %r" % ( (top, middle, bottom), ) final_canvas.pad_trim_top_bottom(0, maxrow - rows) return final_canvas