def rows(self, size, focus=False): if self.wrap: return len(self._get_text(size)) if (self.value_str is not None and self.var_label is not None and len(self.prefix) + text_width(self.var_label) > self.SIZE_LIMIT): return 2 else: return 1
def rows(self, size, focus=False): if self.wrap: return len(self._get_text(size)) if (self.value_str is not None and self.var_label is not None and len(self.prefix) + text_width(self.var_label) > self.SIZE_LIMIT): return 2 else: return 1
def _get_text(self, size): maxcol = size[0] - len(self.prefix) # self.prefix is a padding var_label = self.var_label or '' value_str = self.value_str or '' alltext = var_label + ": " + value_str # The first line is not indented firstline = self.prefix + alltext[:maxcol] if not alltext[maxcol:]: return [firstline] fulllines, rest = divmod(text_width(alltext) - maxcol, maxcol - 2) restlines = [alltext[(maxcol - 2)*i + maxcol:(maxcol - 2)*i + 2*maxcol - 2] for i in xrange(fulllines + bool(rest))] return [firstline] + [" " + self.prefix + i for i in restlines]
def _get_text(self, size): maxcol = size[0] - len(self.prefix) # self.prefix is a padding var_label = self.var_label or '' value_str = self.value_str or '' alltext = var_label + ": " + value_str # The first line is not indented firstline = self.prefix + alltext[:maxcol] if not alltext[maxcol:]: return [firstline] fulllines, rest = divmod(text_width(alltext) - maxcol, maxcol - 2) restlines = [alltext[(maxcol - 2)*i + maxcol:(maxcol - 2)*i + 2*maxcol - 2] for i in xrange(fulllines + bool(rest))] return [firstline] + [" " + self.prefix + i for i in restlines]
def _get_wrapped_lines(self, maxcol: int) -> List[str]: """ :param maxcol: the number of columns available to this widget :return: list of string lines, including prefixes, wrapped to fit in the available space """ maxcol -= len(self.prefix) # self.prefix is padding var_label = self.var_label or "" value_str = self.value_str or "" alltext = var_label + ": " + value_str # The first line is not indented firstline = self.prefix + alltext[:maxcol] if not alltext[maxcol:]: return [firstline] fulllines, rest = divmod(text_width(alltext) - maxcol, maxcol - 2) restlines = [alltext[(maxcol - 2)*i + maxcol:(maxcol - 2)*i + 2*maxcol - 2] for i in xrange(fulllines + bool(rest))] return [firstline] + [self.prefix + " " + i for i in restlines]
def render(self, size, focus=False): from pudb.ui_tools import make_canvas maxcol = size[0] if focus: apfx = "focused "+self.attr_prefix+" " else: apfx = self.attr_prefix+" " var_label = self.var_label or '' if self.wrap: text = self._get_text(size) extralabel_full, extralabel_rem = divmod( text_width(var_label[maxcol:]), maxcol) totallen = sum([text_width(i) for i in text]) labellen = ( len(self.prefix) # Padding of first line + (len(self.prefix) + 2) # Padding of subsequent lines * (extralabel_full + bool(extralabel_rem)) + text_width(var_label) + 2 # for ": " ) _attr = [(apfx+"label", labellen), (apfx+"value", totallen - labellen)] from urwid.util import rle_subseg fullcols, rem = divmod(totallen, maxcol) attr = [rle_subseg(_attr, i*maxcol, (i + 1)*maxcol) for i in xrange(fullcols + bool(rem))] return make_canvas(text, attr, maxcol, apfx+"value") lprefix = len(self.prefix) if self.value_str is not None: if self.var_label is not None: if len(self.prefix) + text_width(self.var_label) > self.SIZE_LIMIT: # label too long? generate separate value line text = [self.prefix + self.var_label, self.prefix+" " + self.value_str] attr = [ [(apfx+"label", lprefix+text_width(self.var_label))], [(apfx+"value", lprefix+2+text_width(self.value_str))] ] else: text = [self.prefix + self.var_label + ": " + self.value_str] attr = [[ (apfx+"label", lprefix+text_width(self.var_label)+2), (apfx+"value", text_width(self.value_str)), ]] else: text = [self.prefix + self.value_str] attr = [[ (apfx+"label", len(self.prefix)), (apfx+"value", text_width(self.value_str)), ]] else: text = [self.prefix + self.var_label] attr = [[(apfx+"label", lprefix + text_width(self.var_label)), ]] # Ellipses to show text was cut off #encoding = urwid.util.detected_encoding if False: # encoding[:3] == "UTF": # Unicode is supported, use single character ellipsis for i in xrange(len(text)): if len(text[i]) > maxcol: text[i] = (unicode(text[i][:maxcol-1]) # noqa: F821 + ELLIPSIS + unicode(text[i][maxcol:])) # noqa: F821 # XXX: This doesn't work. It just gives a ? # Strangely, the following does work (it gives the … # three characters from the right): # # text[i] = (unicode(text[i][:maxcol-3]) # + unicode(u'…')) + unicode(text[i][maxcol-2:]) else: for i in xrange(len(text)): if text_width(text[i]) > maxcol: text[i] = text[i][:maxcol-3] + "..." return make_canvas(text, attr, maxcol, apfx+"value")
def render(self, size, focus=False): from pudb.ui_tools import make_canvas maxcol = size[0] if focus: apfx = "focused " + self.attr_prefix + " " else: apfx = self.attr_prefix + " " var_label = self.var_label or '' if self.wrap: text = self._get_text(size) extralabel_full, extralabel_rem = divmod( text_width(var_label[maxcol:]), maxcol) totallen = sum([text_width(i) for i in text]) labellen = ( len(self.prefix) # Padding of first line + (len(self.prefix) + 2) # Padding of subsequent lines * (extralabel_full + bool(extralabel_rem)) + text_width(var_label) + 2 # for ": " ) _attr = [(apfx + "label", labellen), (apfx + "value", totallen - labellen)] from urwid.util import rle_subseg fullcols, rem = divmod(totallen, maxcol) attr = [ rle_subseg(_attr, i * maxcol, (i + 1) * maxcol) for i in xrange(fullcols + bool(rem)) ] return make_canvas(text, attr, maxcol, apfx + "value") lprefix = len(self.prefix) if self.value_str is not None: if self.var_label is not None: if len(self.prefix) + text_width( self.var_label) > self.SIZE_LIMIT: # label too long? generate separate value line text = [ self.prefix + self.var_label, self.prefix + " " + self.value_str ] attr = [[(apfx + "label", lprefix + text_width(self.var_label))], [(apfx + "value", lprefix + 2 + text_width(self.value_str))]] else: text = [ self.prefix + self.var_label + ": " + self.value_str ] attr = [[ (apfx + "label", lprefix + text_width(self.var_label) + 2), (apfx + "value", text_width(self.value_str)), ]] else: text = [self.prefix + self.value_str] attr = [[ (apfx + "label", len(self.prefix)), (apfx + "value", text_width(self.value_str)), ]] else: text = [self.prefix + self.var_label] attr = [[ (apfx + "label", lprefix + text_width(self.var_label)), ]] # Ellipses to show text was cut off #encoding = urwid.util.detected_encoding if False: # encoding[:3] == "UTF": # Unicode is supported, use single character ellipsis for i in xrange(len(text)): if len(text[i]) > maxcol: text[i] = ( unicode(text[i][:maxcol - 1]) # noqa: F821 + ELLIPSIS + unicode(text[i][maxcol:])) # noqa: F821 # XXX: This doesn't work. It just gives a ? # Strangely, the following does work (it gives the … # three characters from the right): # # text[i] = (unicode(text[i][:maxcol-3]) # + unicode(u'…')) + unicode(text[i][maxcol-2:]) else: for i in xrange(len(text)): if text_width(text[i]) > maxcol: text[i] = text[i][:maxcol - 3] + "..." return make_canvas(text, attr, maxcol, apfx + "value")
def render(self, size: Tuple[int], focus: bool = False) -> urwid.Canvas: """ :param size: (maxcol,) the number of columns available to this widget :param focus: True if this widget or one of its children is in focus :return: A Canvas subclass instance containing the rendered content of this widget """ from pudb.ui_tools import make_canvas maxcol = size[0] if focus: apfx = "focused " + self.attr_prefix + " " else: apfx = self.attr_prefix + " " var_label = self.var_label or "" if self.wrap: text = self._get_wrapped_lines(maxcol) extralabel_full, extralabel_rem = divmod( text_width(var_label[maxcol:]), maxcol) totallen = sum([text_width(i) for i in text]) labellen = ( len(self.prefix) # Padding of first line + (len(self.prefix) + 2) # Padding of subsequent lines * (extralabel_full + bool(extralabel_rem)) + text_width(var_label) + 2 # for ": " ) _attr = [(apfx + "label", labellen), (apfx + "value", totallen - labellen)] from urwid.util import rle_subseg fullcols, rem = divmod(totallen, maxcol) attr = [ rle_subseg(_attr, i * maxcol, (i + 1) * maxcol) for i in xrange(fullcols + bool(rem)) ] return make_canvas(text, attr, maxcol, apfx + "value") lprefix = len(self.prefix) if self.value_str is not None: if self.var_label is not None: if len(self._get_wrapped_lines(maxcol)) > 1: # label too long? generate separate value line text = [ self.prefix + self.var_label + ":", self.prefix + " " + self.value_str ] attr = [[(apfx + "label", lprefix + text_width(self.var_label) + 1)], [(apfx + "value", lprefix + 2 + text_width(self.value_str))]] else: text = [ self.prefix + self.var_label + ": " + self.value_str ] attr = [[ (apfx + "label", lprefix + text_width(self.var_label) + 2), (apfx + "value", text_width(self.value_str)), ]] else: text = [self.prefix + self.value_str] attr = [[ (apfx + "label", len(self.prefix)), (apfx + "value", text_width(self.value_str)), ]] else: text = [self.prefix + self.var_label] attr = [[ (apfx + "label", lprefix + text_width(self.var_label)), ]] # Ellipses to show text was cut off #encoding = urwid.util.detected_encoding if False: # encoding[:3] == "UTF": # Unicode is supported, use single character ellipsis for i in xrange(len(text)): if len(text[i]) > maxcol: text[i] = ( unicode(text[i][:maxcol - 1]) # noqa: F821 + ELLIPSIS + unicode(text[i][maxcol:])) # noqa: F821 # XXX: This doesn't work. It just gives a ? # Strangely, the following does work (it gives the … # three characters from the right): # # text[i] = (unicode(text[i][:maxcol-3]) # + unicode(u'…')) + unicode(text[i][maxcol-2:]) else: for i in xrange(len(text)): if text_width(text[i]) > maxcol: text[i] = text[i][:maxcol - 3] + "..." return make_canvas(text, attr, maxcol, apfx + "value")
def render(self, size: Tuple[int], focus: bool = False) -> urwid.Canvas: """ :param size: (maxcol,) the number of columns available to this widget :param focus: True if this widget or one of its children is in focus :return: A Canvas subclass instance containing the rendered content of this widget """ from pudb.ui_tools import make_canvas maxcol = size[0] if focus: apfx = "focused " + self.attr_prefix + " " else: apfx = self.attr_prefix + " " var_label = self.var_label or "" if self.wrap: text = self._get_wrapped_lines(maxcol) extralabel_full, extralabel_rem = divmod( text_width(var_label[maxcol:]), maxcol) totallen = sum([text_width(i) for i in text]) labellen = ( len(self.prefix) # Padding of first line + (len(self.prefix) + 2) # Padding of subsequent lines * (extralabel_full + bool(extralabel_rem)) + text_width(var_label) + 2 # for ": " ) _attr = [(apfx + "label", labellen), (apfx + "value", totallen - labellen)] from urwid.util import rle_subseg fullcols, rem = divmod(totallen, maxcol) attr = [ rle_subseg(_attr, i * maxcol, (i + 1) * maxcol) for i in range(fullcols + bool(rem)) ] return make_canvas(text, attr, maxcol, apfx + "value") lprefix = len(self.prefix) if self.value_str is not None: if self.var_label is not None: if len(self._get_wrapped_lines(maxcol)) > 1: # label too long? generate separate value line text = [ self.prefix + self.var_label + ":", self.prefix + " " + self.value_str ] attr = [[(apfx + "label", lprefix + text_width(self.var_label) + 1)], [(apfx + "value", lprefix + 2 + text_width(self.value_str))]] else: text = [ self.prefix + self.var_label + ": " + self.value_str ] attr = [[ (apfx + "label", lprefix + text_width(self.var_label) + 2), (apfx + "value", text_width(self.value_str)), ]] else: text = [self.prefix + self.value_str] attr = [[ (apfx + "label", len(self.prefix)), (apfx + "value", text_width(self.value_str)), ]] else: text = [self.prefix + self.var_label] attr = [[ (apfx + "label", lprefix + text_width(self.var_label)), ]] # Ellipses to show text was cut off #encoding = urwid.util.detected_encoding for i in range(len(text)): if text_width(text[i]) > maxcol: text[i] = text[i][:maxcol - 3] + "..." return make_canvas(text, attr, maxcol, apfx + "value")