Package libxyz :: Package ui :: Module separator
[hide private]
[frames] | no frames]

Source Code for Module libxyz.ui.separator

  1  #-*- coding: utf8 -* 
  2  # 
  3  # Max E. Kuznecov ~syhpoon <syhpoon@syhpoon.name> 2008 
  4  # 
  5  # This file is part of XYZCommander. 
  6  # XYZCommander is free software: you can redistribute it and/or modify 
  7  # it under the terms of the GNU Lesser Public License as published by 
  8  # the Free Software Foundation, either version 3 of the License, or 
  9  # (at your option) any later version. 
 10  # XYZCommander is distributed in the hope that it will be useful, 
 11  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
 12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
 13  # GNU Lesser Public License for more details. 
 14  # You should have received a copy of the GNU Lesser Public License 
 15  # along with XYZCommander. If not, see <http://www.gnu.org/licenses/>. 
 16   
 17  from libxyz.ui import lowui 
 18   
19 -class Separator(lowui.FlowWidget):
20 """ 21 Horizontal separator widget 22 """ 23 24 ignore_focus = True 25
26 - def __init__(self, title=None, div_char=None, title_attr=None, 27 div_attr=None, top=0, bottom=0):
28 """ 29 @param title: Title 30 @param div_char: Character to repeat across line 31 @param title_attr: Attribute of title text 32 @param div_attr: Attribute of divider line 33 @param top: number of blank lines above 34 @param bottom: number of blank lines below 35 """ 36 37 super(Separator, self).__init__() 38 39 self.set_text(title, title_attr) 40 41 self.div_char = lowui.escape.utf8decode("─") 42 self.div_attr = div_attr 43 self.top = top 44 self.bottom = bottom
45 46 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 47
48 - def set_text(self, title, title_attr=None):
49 """ 50 Set some text in the middle of seprator 51 """ 52 53 if title is not None: 54 _title = " %s " % title 55 self.title_len = len(_title) 56 57 if title_attr is not None: 58 self.text = lowui.Text((title_attr, _title)) 59 else: 60 self.text = lowui.Text(_title) 61 else: 62 self.text = None 63 self.title_len = 0 64 65 self._invalidate()
66 67 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 68
69 - def clear_text(self):
70 """ 71 Remove text if any 72 """ 73 74 self.text = None 75 self.title_len = 0 76 77 self._invalidate()
78 79 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 80
81 - def rows(self, (maxcol,), focus=False):
82 """ 83 Return the number of lines that will be rendered. 84 """ 85 86 return self.top + 1 + self.bottom
87 88 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 89
90 - def render(self, (maxcol,), focus=False):
91 """ 92 Render the separator as canvas and return it. 93 """ 94 95 sep_len = (maxcol - self.title_len) / 2 96 _len = sep_len * 2 + self.title_len 97 98 if _len != maxcol: 99 _offset = abs(maxcol - _len) 100 else: 101 _offset = 0 102 103 _list = [] 104 105 canv_begin = lowui.Text((self.div_attr, self.div_char * sep_len)) 106 canv_begin = canv_begin.render((maxcol,)) 107 _list.append((canv_begin, None, False, sep_len)) 108 109 if self.text is not None: 110 canv_text = self.text.render((maxcol,)) 111 _list.append((canv_text, None, False, self.title_len)) 112 113 canv_end = lowui.Text((self.div_attr, self.div_char *(sep_len+_offset))) 114 canv_end = canv_end.render((maxcol,)) 115 _list.append((canv_end, None, False, sep_len + _offset)) 116 117 canv = lowui.CanvasJoin(_list) 118 119 if self.top or self.bottom: 120 canv.pad_trim_top_bottom(self.top, self.bottom) 121 122 return canv
123