Update of /cvsroot/freevo/freevo/src/gui In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25173
Modified Files: InputBox.py LetterBoxGroup.py __init__.py Removed Files: LetterBox.py PasswordInputBox.py PasswordLetterBox.py Log Message: enhance input box, merge password and normal input Index: InputBox.py =================================================================== RCS file: /cvsroot/freevo/freevo/src/gui/InputBox.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** InputBox.py 18 Feb 2004 21:52:04 -0000 1.14 --- InputBox.py 21 Feb 2004 19:33:24 -0000 1.15 *************** *** 11,14 **** --- 11,17 ---- # ----------------------------------------------------------------------- # $Log$ + # Revision 1.15 2004/02/21 19:33:24 dischi + # enhance input box, merge password and normal input + # # Revision 1.14 2004/02/18 21:52:04 dischi # Major GUI update: *************** *** 66,69 **** --- 69,73 ---- height Integer text String to print. + type 'normal' or 'password' icon icon text_prop A dict of 3 elements composing text proprieties: *************** *** 74,78 **** """ ! def __init__(self, text, handler=None, x=None, y=None, width=0, height=0, icon=None, vertical_expansion=1, text_prop=None, parent='osd'): --- 78,82 ---- """ ! def __init__(self, text, handler=None, type='text', x=None, y=None, width=0, height=0, icon=None, vertical_expansion=1, text_prop=None, parent='osd'): *************** *** 80,118 **** icon, vertical_expansion, text_prop, parent) ! self.lbg = LetterBoxGroup() self.add_child(self.lbg) ! def eventhandler(self, event): ! if event == INPUT_LEFT: ! self.lbg.change_selected_box('left') ! self.draw(update=True) ! ! elif event == INPUT_RIGHT: ! self.lbg.change_selected_box('right') ! self.draw(update=True) ! ! elif event == INPUT_ENTER: self.destroy() ! if self.handler: self.handler(self.lbg.get_word()) ! elif event == INPUT_EXIT: self.destroy() ! elif event == INPUT_UP: ! self.lbg.get_selected_box().charUp() ! self.draw(update=True) ! ! elif event == INPUT_DOWN: ! self.lbg.get_selected_box().charDown() ! self.draw(update=True) ! ! elif event in (INPUT_0, INPUT_1, INPUT_2, INPUT_3, ! INPUT_4, INPUT_5, INPUT_6, INPUT_7, ! INPUT_8, INPUT_9, INPUT_0 ): ! self.lbg.get_selected_box().cycle_phone_char(event.arg) ! self.draw(update=True) ! else: ! return self.parent.eventhandler(event) ! --- 84,105 ---- icon, vertical_expansion, text_prop, parent) ! self.lbg = LetterBoxGroup(type=type) self.add_child(self.lbg) ! def eventhandler(self, event): + if self.lbg.eventhandler(event): + self.draw() + return True ! if event == INPUT_ENTER: self.destroy() ! if self.handler: ! self.handler(self.lbg.get_word()) ! return True ! if event == INPUT_EXIT: self.destroy() + return True ! return self.parent.eventhandler(event) Index: LetterBoxGroup.py =================================================================== RCS file: /cvsroot/freevo/freevo/src/gui/LetterBoxGroup.py,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** LetterBoxGroup.py 18 Feb 2004 21:52:04 -0000 1.14 --- LetterBoxGroup.py 21 Feb 2004 19:33:24 -0000 1.15 *************** *** 11,14 **** --- 11,17 ---- # ----------------------------------------------------------------------- # $Log$ + # Revision 1.15 2004/02/21 19:33:24 dischi + # enhance input box, merge password and normal input + # # Revision 1.14 2004/02/18 21:52:04 dischi # Major GUI update: *************** *** 53,66 **** import config ! from Container import Container ! from LayoutManagers import LayoutManager ! from LetterBox import * ! from PasswordLetterBox import * ! class LetterBoxGroup(Container): """ ! left x coordinate. Integer ! top y coordinate. Integer width Integer height Integer --- 56,69 ---- import config ! from GUIObject import Align ! from Container import Container ! from LayoutManagers import LayoutManager ! from Button import Button ! from event import * class LetterBoxGroup(Container): """ ! x x coordinate. Integer ! y y coordinate. Integer width Integer height Integer *************** *** 73,84 **** bd_width Border width Integer """ - - def __init__(self, numboxes=7, text=None, handler=None, type=None, ! left=None, top=None, width=None, height=None, bg_color=None, fg_color=None, selected_bg_color=None, selected_fg_color=None, border=None, bd_color=None, bd_width=None): ! Container.__init__(self, 'widget', left, top, width, height, bg_color, fg_color, selected_bg_color, selected_fg_color, border, bd_color, bd_width) --- 76,85 ---- bd_width Border width Integer """ def __init__(self, numboxes=7, text=None, handler=None, type=None, ! x=None, y=None, width=None, height=None, bg_color=None, fg_color=None, selected_bg_color=None, selected_fg_color=None, border=None, bd_color=None, bd_width=None): ! Container.__init__(self, 'widget', x, y, width, height, bg_color, fg_color, selected_bg_color, selected_fg_color, border, bd_color, bd_width) *************** *** 99,110 **** h = 0 for i in range(self.numboxes): ! if self.type == 'password': ! lb = PasswordLetterBox() ! else: ! lb = LetterBox() if self.text and len(self.text) > i: lb.set_text(self.text[i]) ! l = l + lb.width if lb.height > h: h = lb.height if i == 0: --- 100,109 ---- 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: *************** *** 113,120 **** self.boxes.append(lb) ! self.width = l self.height = h self.set_h_align(Align.CENTER) --- 112,120 ---- self.boxes.append(lb) ! self.width = l + self.bd_width self.height = h self.set_h_align(Align.CENTER) + self.last_key = None *************** *** 149,154 **** word = '' for box in self.boxes: ! if isinstance(box, PasswordLetterBox): ! word += box.real_char else: word = word + box.get_text() --- 149,154 ---- word = '' for box in self.boxes: ! if hasattr(box, 'real_text'): ! word += box.real_text else: word = word + box.get_text() *************** *** 163,167 **** --- 163,314 ---- Container._draw(self) + + def eventhandler(self, event): + """ + Handle basic events for this widget. Returns True when the event + was used and a redraw is needed. + """ + if self.type == 'password': + if event == INPUT_LEFT or event == INPUT_UP: + the_box = self.get_selected_box() + if self.boxes.index(the_box) != 0: + self.change_selected_box('left') + the_box = self.get_selected_box() + the_box.set_text(' ') + the_box.real_text = '' + return True + + if event in INPUT_ALL_NUMBERS: + the_box = self.get_selected_box() + the_box.real_text = str(event.arg) + the_box.set_text('*') + if self.boxes.index(the_box) != len(self.boxes)-1: + self.change_selected_box('right') + return True + + 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 + + if event == INPUT_UP: + self.get_selected_box().charUp() + self.last_key = None + return True + + if event == INPUT_DOWN: + self.get_selected_box().charDown() + self.last_key = None + return True + + if event in INPUT_ALL_NUMBERS: + if self.last_key and self.last_key != event: + self.change_selected_box('right') + self.last_key = event + self.get_selected_box().cycle_phone_char(event.arg) + return True + + return False + + + class LetterBox(Button): + """ + x x coordinate. Integer + y y coordinate. Integer + width Integer + height Integer + text Letter to hold. + 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', + 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', + 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + '-', '.', ' ' ] + + phoneChars = ([ " ", "-", ".", "0" ], + [ "1", ], + [ "A", "B", "C", "2" ], + [ "D", "E", "F", "3" ], + [ "G", "H", "I", "4" ], + [ "J", "K", "L", "5" ], + [ "M", "N", "O", "6" ], + [ "P", "Q", "R", "S", "7" ], + [ "T", "U", "V" "8"], + [ "W", "X", "Y", "Z" ,"9"]) + + + 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 + self.v_margin = 0 + self.h_spacing = 0 + self.v_spacing = 0 + self.set_v_align(Align.BOTTOM) + self.set_h_align(Align.CENTER) + self.label.set_v_align(Align.CENTER) + 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 + + self.set_text(self.ourChars[charNext]) + + + 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]) + + + def cycle_phone_char(self, number): + 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): *************** *** 171,178 **** def layout(self): ! top = l = 0 for box in self.container.boxes: ! left = l ! l = l + box.width ! box.set_position(left, top) --- 318,325 ---- 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) Index: __init__.py =================================================================== RCS file: /cvsroot/freevo/freevo/src/gui/__init__.py,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** __init__.py 18 Feb 2004 21:52:04 -0000 1.12 --- __init__.py 21 Feb 2004 19:33:24 -0000 1.13 *************** *** 25,28 **** --- 25,31 ---- #----------------------------------------------------------------------- # $Log$ + # Revision 1.13 2004/02/21 19:33:24 dischi + # enhance input box, merge password and normal input + # # Revision 1.12 2004/02/18 21:52:04 dischi # Major GUI update: *************** *** 70,80 **** from Label import * from Button import * - from LetterBox import * - from PasswordLetterBox import * from LetterBoxGroup import * from RegionScroller import * from Scrollbar import * from InputBox import * - from PasswordInputBox import * from LayoutManagers import * from exceptions import * --- 73,80 ---- --- LetterBox.py DELETED --- --- PasswordInputBox.py DELETED --- --- PasswordLetterBox.py DELETED --- ------------------------------------------------------- SF.Net is sponsored by: Speed Start Your Linux Apps Now. Build and deploy apps & Web services for Linux with a free DVD software kit from IBM. Click Now! http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click _______________________________________________ Freevo-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-cvslog