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

Reply via email to