From: <Blu...@us...> - 2010-08-19 20:12:43
|
Revision: 366 http://virtplayground.svn.sourceforge.net/virtplayground/?rev=366&view=rev Author: BlueWolf_ Date: 2010-08-19 20:12:36 +0000 (Thu, 19 Aug 2010) Log Message: ----------- Added a button. Sort off. Not finished but looks like it's working so far Modified Paths: -------------- trunk/client/gui.py trunk/client/playground.py Added Paths: ----------- trunk/client/images/gui/button_login.png Modified: trunk/client/gui.py =================================================================== --- trunk/client/gui.py 2010-08-09 17:30:56 UTC (rev 365) +++ trunk/client/gui.py 2010-08-19 20:12:36 UTC (rev 366) @@ -210,10 +210,13 @@ # Release mousebutton after we've clicked on an object pos = (ev.pos[0] - self.mousedown[0][0], \ ev.pos[1] - self.mousedown[0][1]) - self.mousedown[1].click(2, pos) + + obj = self.mousedown[1] + obj.frozen = True + obj.click(2, pos) self.mousedown = None - self.update_mouse() + obj.unfreeze() return True @@ -235,9 +238,16 @@ return None, None def focus_next(self, current): - pos = self.children.index(current) + 1 + startpos = self.children.index(current) + pos = startpos + 1 if pos == len(self.children): pos = 0 + while self.children[pos].cangetfocus == False: + pos += 1 + if pos == len(self.children): pos = 0 + + if pos == startpos: return + self.give_focus(self.children[pos]) @@ -300,18 +310,16 @@ # Send a message to our parent, telling them this rect needs to be # updated - self.needs_update = True if self.frozen: return if rect == None: - rect = self.rect.move(0, 0) - - else: - # We need to calculate our relative position - rect.move_ip(self.rect.left, self.rect.top) + rect = Rect(0, 0, self.rect.width, self.rect.height) + # We need to calculate our relative position + rect = rect.move(self.rect.left, self.rect.top) + self.parent.update(rect) def blit(self, rect, surf, onto): @@ -345,7 +353,7 @@ if isparent: self.main_parent.update_mouse() self.frozen = False - self.update(self.rect) + self.update() else: self.frozen = False @@ -376,6 +384,8 @@ class Textbox(Object): def __defaults__(self): + self.cangetfocus = True + self.input = "" self.cursorpos = 0 self.style = None @@ -511,7 +521,6 @@ self.cursorpos = 0 else: - print pygame.key.name(ev.key) if ev.key == K_LEFT: # Cursorpos change if self.cursorpos > 0: self.cursorpos -= 1 @@ -547,7 +556,97 @@ self.update() if self.cb_keypress: self.cb_keypress(self, ev) - + +class Button(Object): + + def __defaults__(self): + self.cangetfocus = False + + self.caption = "" + self.style = None + + self.mousedown = False + self.ispressed = False + + self.font = None + self.backgroundsurf = pygame.Surface((self.rect.width, \ + self.rect.height*3), SRCALPHA).convert_alpha() + + def set_style(self, style): + """ + Change the stle for this textbox + Possible styles: + * login + """ + if style == "login": + + # Check the requirements + if self.rect.width != 151: + raise GuiError("Width should be 151") + if self.rect.height != 34: + raise GuiError("Height should be 34") + + # Load the background images + self.backgroundsurf = load_image(True, "images", "gui", "button_login.png") + + else: + raise GuiError("Style '%s' has not been found" % style) + + self.style = style + self.update() + + def render(self): + """ + Render our surface, as requested from the all mighty Container + """ + if self.backgroundsurf == None: return + + self.surf.fill([0,0,0,0]) + + if self.style == "login": + # Which state do we need? + if self.mousedown: + if self.ispressed: + top = 68 + else: + top = 0 + elif self.hover: + top = 34 + else: + top = 0 + + self.surf.blit(self.backgroundsurf, (0,0), \ + (0, top, self.rect.width, self.rect.height)) + + def hovering(self, value): + self.update() + + def click(self, state, pos): + if state == 0: + self.mousedown = True + self.ispressed = True + self.update() + + elif state == 1: + hover = bool(Rect(0, 0, self.rect.width, self.rect.height).collidepoint(pos)) + if hover != self.ispressed: + self.ispressed = hover + self.update() + + elif state == 2: + self.mousedown = False + self.update() + + def got_focus(self): + pass + + def lost_focus(self): + pass + + def keypress(self, ev): + pass + + class GuiError(Exception): pass Added: trunk/client/images/gui/button_login.png =================================================================== (Binary files differ) Property changes on: trunk/client/images/gui/button_login.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/client/playground.py =================================================================== --- trunk/client/playground.py 2010-08-09 17:30:56 UTC (rev 365) +++ trunk/client/playground.py 2010-08-19 20:12:36 UTC (rev 366) @@ -111,7 +111,9 @@ password.set_type("password") password.cb_keypress = self.logingui_keypress - #login = gui.Button("login", (0, 100, 417, 50)) + login = self.logingui.add("button", "login", (425, 398, 151, 34)) + login.set_style("login") + self.logingui.give_focus(username) self.logingui.unfreeze() @@ -135,5 +137,5 @@ def logingui_keypress(self, obj, ev): if ev.type == KEYDOWN: if ev.unicode == "\r": - if obj.name == "usr": - self.logingui.give_focus("pwd") + if obj.name == "pwd": + self.logingui.give_focus("usr") # [TODO] Not working? This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |