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

Reply via email to