Update of /cvsroot/freevo/freevo/src/gui In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18665
Modified Files: LetterBoxGroup.py Log Message: Improve input handling: o support upper and lower case o variable box width up to a length of 60 chars o keyboard input Index: LetterBoxGroup.py =================================================================== RCS file: /cvsroot/freevo/freevo/src/gui/LetterBoxGroup.py,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** LetterBoxGroup.py 21 Feb 2004 19:33:24 -0000 1.15 --- LetterBoxGroup.py 13 Mar 2004 22:32:44 -0000 1.16 *************** *** 11,14 **** --- 11,20 ---- # ----------------------------------------------------------------------- # $Log$ + # Revision 1.16 2004/03/13 22:32:44 dischi + # Improve input handling: + # o support upper and lower case + # o variable box width up to a length of 60 chars + # o keyboard input + # # Revision 1.15 2004/02/21 19:33:24 dischi # enhance input box, merge password and normal input *************** *** 55,58 **** --- 61,65 ---- import config + import copy from GUIObject import Align *************** *** 60,63 **** --- 67,71 ---- from LayoutManagers import LayoutManager from Button import Button + from Border import Border from event import * *************** *** 85,89 **** border, bd_color, bd_width) ! self.h_margin = 0 self.v_margin = 0 self.h_spacing = 0 --- 93,97 ---- border, bd_color, bd_width) ! self.h_margin = 5 self.v_margin = 0 self.h_spacing = 0 *************** *** 92,120 **** self.text = text self.type = type - self.numboxes = numboxes self.boxes = [] self.set_layout(LetterBoxLayout(self)) l = 0 h = 0 ! for i in range(self.numboxes): ! lb = LetterBox(border=None) if self.type != 'password': if self.text and len(self.text) > i: ! lb.set_text(self.text[i]) - l = l + lb.width - self.bd_width - if lb.height > h: h = lb.height - if i == 0: - lb.toggle_selected() self.add_child(lb) self.boxes.append(lb) ! self.width = l + self.bd_width self.height = h self.set_h_align(Align.CENTER) self.last_key = None --- 100,143 ---- self.text = text self.type = type self.boxes = [] self.set_layout(LetterBoxLayout(self)) + bw = 0 + for c in ('M', 'A', 'm'): + bw = max(bw, self.content_layout.types['button'].font.stringsize(c), + self.content_layout.types['button selected'].font.stringsize(c)) + + bw += 2 + l = 0 h = 0 ! ! for i in range(numboxes or 60): ! lb = LetterBox(width=bw) ! if self.type != 'password': if self.text and len(self.text) > i: ! lb.set_text(self.text[i], fix_case=False) ! else: ! lb.set_text(' ') ! l = l + lb.width ! h = max(lb.height, h) self.add_child(lb) + if self.boxes: + lb.upper_case = False self.boxes.append(lb) ! self.width = min(self.width, l + self.bd_width + 2 * self.h_margin) self.height = h self.set_h_align(Align.CENTER) self.last_key = None + + if self.type != 'password' and self.text and len(self.text) < len(self.boxes): + self.boxes[len(self.text)].toggle_selected() + else: + self.boxes[0].toggle_selected() *************** *** 125,147 **** ! def change_selected_box(self, dir=None): ! boxNow = self.boxes.index(self.get_selected_box()) ! ! if not dir: ! dir = 'right' if dir == 'right': if boxNow < len(self.boxes)-1: boxNext = boxNow + 1 ! else: boxNext = 0 else: if boxNow > 0: boxNext = boxNow - 1 ! else: ! boxNext = len(self.boxes)-1 ! self.boxes[boxNow].toggle_selected() ! self.boxes[boxNext].toggle_selected() --- 148,176 ---- ! def change_selected_box(self, dir='right', allow_roundtrip=False): ! boxNow = self.boxes.index(self.get_selected_box()) ! boxNext = boxNow if dir == 'right': if boxNow < len(self.boxes)-1: boxNext = boxNow + 1 ! if self.boxes[boxNow].text == ' ': ! self.boxes[boxNext].upper_case = True ! if not self.boxes[boxNext].visible and allow_roundtrip: ! boxNext = 0 ! elif allow_roundtrip: boxNext = 0 + else: if boxNow > 0: boxNext = boxNow - 1 ! elif allow_roundtrip: ! for x in range(len(self.boxes)): ! if self.boxes[x].visible: ! boxNext = x ! if self.boxes[boxNext].visible and boxNext != boxNow: ! self.boxes[boxNow].toggle_selected() ! self.boxes[boxNext].toggle_selected() *************** *** 149,164 **** word = '' for box in self.boxes: ! if hasattr(box, 'real_text'): ! word += box.real_text ! else: ! word = word + box.get_text() return word.rstrip() def _draw(self): """ The actual internal draw function. """ self.surface = self.get_surface() Container._draw(self) --- 178,203 ---- word = '' for box in self.boxes: ! if box.visible: ! if hasattr(box, 'real_text'): ! word += box.real_text ! else: ! word = word + box.get_text() return word.rstrip() + def set_word(self, text): + for i in range(min(len(self.boxes), len(text))): + self.boxes[i].set_text(text[i], fix_case=False) + + def _draw(self): """ The actual internal draw function. """ + + rect = self.content_layout.types['button'].rectangle self.surface = self.get_surface() + self.osd.drawroundbox(0, 0, self.width, self.height, rect.bgcolor, 0, rect.color, + 0, self.surface) Container._draw(self) *************** *** 189,198 **** else: if event == INPUT_LEFT: ! self.change_selected_box('left') self.last_key = None return True if event == INPUT_RIGHT: ! self.change_selected_box('right') self.last_key = None return True --- 228,237 ---- else: if event == INPUT_LEFT: ! self.change_selected_box('left', allow_roundtrip=True) self.last_key = None return True if event == INPUT_RIGHT: ! self.change_selected_box('right', allow_roundtrip=True) self.last_key = None return True *************** *** 215,218 **** --- 254,263 ---- return True + if event == BUTTON: + # direct key input (I hope) + self.get_selected_box().set_text(event.arg, fix_case=False) + self.change_selected_box('right') + return True + return False *************** *** 228,234 **** bg_color Background color (Color) fg_color Foreground color (Color) - border Border - bd_color Border color (Color) - bd_width Border width Integer """ ourChars = [ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', --- 273,276 ---- *************** *** 251,260 **** def __init__(self, text=' ', x=None, y=None, width=35, height=35, bg_color=None, fg_color=None, selected_bg_color=None, ! selected_fg_color=None, border=None, bd_color=None, ! bd_width=None): Button.__init__(self, text, None, x, y, width, height, bg_color, ! fg_color, selected_bg_color, selected_fg_color, ! border, bd_color, bd_width) self.h_margin = 0 --- 293,303 ---- def __init__(self, text=' ', x=None, y=None, width=35, height=35, bg_color=None, fg_color=None, selected_bg_color=None, ! selected_fg_color=None): ! ! self.upper_case = True ! self.max_width = width Button.__init__(self, text, None, x, y, width, height, bg_color, ! fg_color, selected_bg_color, selected_fg_color, border=None) self.h_margin = 0 *************** *** 267,285 **** self.label.set_h_align(Align.CENTER) ! def set_text(self, text): ! text = text.upper() Button.set_text(self, text) - self.label.width = self.width - self.label.height = self.height self.label.set_v_align(Align.CENTER) self.label.set_h_align(Align.CENTER) def charUp(self): ! charNow = self.ourChars.index(self.text) ! if charNow < len(self.ourChars)-1: ! charNext = charNow + 1 ! else: charNext = 0 --- 310,352 ---- self.label.set_h_align(Align.CENTER) + for c in copy.copy(self.children): + if isinstance(c, Border): + self.children.remove(c) + + self.border = -1 + ! def draw(self): ! if self.left + self.max_width <= self.parent.width - self.parent.bd_width - \ ! 2 * self.parent.h_margin: ! self.visible = True ! else: ! self.visible = False ! Button.draw(self) ! ! ! def set_text(self, text, fix_case=True): ! if fix_case: ! if self.upper_case: ! text = text.upper() ! else: ! text = text.lower() Button.set_text(self, text) self.label.set_v_align(Align.CENTER) self.label.set_h_align(Align.CENTER) + if self.label.font: + self.label.width = self.max_width + self.width = self.label.get_rendered_size()[0] or self.max_width + self.width += 4 def charUp(self): ! try: ! charNow = self.ourChars.index(self.text.upper()) ! if charNow < len(self.ourChars)-1: ! charNext = charNow + 1 ! else: ! charNext = 0 ! except: charNext = 0 *************** *** 288,296 **** def charDown(self): ! charNow = self.ourChars.index(self.text) ! if charNow > 0: ! charNext = charNow - 1 ! else: ! charNext = len(self.ourChars)-1 self.set_text(self.ourChars[charNext]) --- 355,366 ---- def charDown(self): ! try: ! charNow = self.ourChars.index(self.text.upper()) ! if charNow > 0: ! charNext = charNow - 1 ! else: ! charNext = len(self.ourChars)-1 ! except: ! charNext = 0 self.set_text(self.ourChars[charNext]) *************** *** 300,314 **** letters = self.phoneChars[number] ! if not self.text in letters: self.set_text(letters[0]) else: ! i = letters.index(self.text) if i < len(letters)-1: i = i + 1 else: i = 0 self.set_text(letters[i]) class LetterBoxLayout(LayoutManager): --- 370,386 ---- letters = self.phoneChars[number] ! if not self.text.upper() in letters: self.set_text(letters[0]) else: ! i = letters.index(self.text.upper()) if i < len(letters)-1: i = i + 1 else: i = 0 + self.upper_case = not self.upper_case self.set_text(letters[i]) + class LetterBoxLayout(LayoutManager): *************** *** 316,325 **** self.container = container - def layout(self): ! y = l = 0 for box in self.container.boxes: x = l ! l = l + box.width - self.container.bd_width box.set_position(x, y) - --- 388,397 ---- self.container = container def layout(self): ! y = 0 ! l = self.container.h_margin ! for box in self.container.boxes: x = l ! l = l + box.width box.set_position(x, y) ------------------------------------------------------- This SF.Net email is sponsored by: IBM Linux Tutorials Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click _______________________________________________ Freevo-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog