4 from pygame.locals import *
9 class Input(widget.Widget):
10 """A single line text input.
13 w = Input(value="Cuzco the Goat",size=20)
20 def __init__(self,value="",size=20,**params):
21 """Create a new Input widget.
25 size -- size for the text box, in characters
28 params.setdefault('cls','input')
29 widget.Widget.__init__(self,**params)
31 self.pos = len(str(value))
33 self.font = self.style.font
34 w,h = self.font.size("e"*size)
35 if not self.style.height: self.style.height = h
36 if not self.style.width: self.style.width = w
37 #self.style.height = max(self.style.height,h)
38 #self.style.width = max(self.style.width,w)
39 #self.rect.w=w+self.style.padding_left+self.style.padding_right;
40 #self.rect.h=h+self.style.padding_top+self.style.padding_bottom;
43 r = pygame.Rect(0,0,self.rect.w,self.rect.h)
45 cs = 2 #NOTE: should be in a style
47 w,h = self.font.size(self.value[0:self.pos])
49 if x < 0: self.vpos -= -x
50 if x+cs > s.get_width(): self.vpos += x+cs-s.get_width()
52 s.blit(self.font.render(self.value, 1, self.style.color),(-self.vpos,0))
54 if self.container.myfocus is self:
55 w,h = self.font.size(self.value[0:self.pos])
59 s.fill(self.style.color,r)
61 def _setvalue(self,v):
62 #self.__dict__['value'] = v
69 if e.key == K_BACKSPACE:
71 self._setvalue(self.value[:self.pos-1] + self.value[self.pos:])
73 elif e.key == K_DELETE:
74 if len(self.value) > self.pos:
75 self._setvalue(self.value[:self.pos] + self.value[self.pos+1:])
79 self.pos = len(self.value)
81 if self.pos > 0: self.pos -= 1
83 elif e.key == K_RIGHT:
84 if self.pos < len(self.value): self.pos += 1
86 elif e.key == K_RETURN:
92 if (type(e.unicode) == str):
95 c = (e.unicode).encode('latin-1')
99 self._setvalue(self.value[:self.pos] + c + self.value[self.pos:])
101 except: #ignore weird characters
104 elif e.type == FOCUS:
110 if self.container.myfocus is self: self.pcls = "focus"
119 def value(self, val):
131 class Password(Input):
132 """A password input, in which text is rendered with '*' characters."""
136 show=len(self.value)*hidden
138 #print "self.value:",self.value
140 if self.pos == None: self.pos = len(self.value)
142 r = pygame.Rect(0,0,self.rect.w,self.rect.h)
144 cs = 2 #NOTE: should be in a style
146 w,h = self.font.size(show)
148 if x < 0: self.vpos -= -x
149 if x+cs > s.get_width(): self.vpos += x+cs-s.get_width()
151 s.blit(self.font.render(show, 1, self.style.color),(-self.vpos,0))
153 if self.container.myfocus is self:
154 #w,h = self.font.size(self.value[0:self.pos])
155 w,h = self.font.size(show[0:self.pos])
159 s.fill(self.style.color,r)