From: <Blu...@us...> - 2010-09-06 19:38:03
|
Revision: 393 http://virtplayground.svn.sourceforge.net/virtplayground/?rev=393&view=rev Author: BlueWolf_ Date: 2010-09-06 19:37:54 +0000 (Mon, 06 Sep 2010) Log Message: ----------- A GUI-window can now be closed, among other small fixes Modified Paths: -------------- trunk/client/gui.py trunk/client/playground.py Modified: trunk/client/gui.py =================================================================== --- trunk/client/gui.py 2010-09-06 16:00:32 UTC (rev 392) +++ trunk/client/gui.py 2010-09-06 19:37:54 UTC (rev 393) @@ -58,6 +58,11 @@ raise KeyError(key) + def has(self, key): + for child in self.children: + if child.name == key: return True + return False + def add(self, Obj, name, rect, feedback = None): """ Append a child to this object @@ -114,21 +119,25 @@ if pygame.mouse.get_focused(): # Get the current hovered object rect, hover = self.this_pos(pos) - + # Is it different from the previous check? if hover != self.hover: # De-hover the previous one if self.hover: self.hover.hover = False - self.hover.hovering(False) + self.hover.hovering(state=False) self.hover = hover # Hover the current one if self.hover: self.hover.hover = True - self.hover.hovering(True) + pos = (pos[0] - rect[0], pos[1] - rect[1]) + self.hover.hovering(state=True, pos=pos) + elif hover != None: + pos = (pos[0] - rect[0], pos[1] - rect[1]) + self.hover.hovering(pos=pos) if hover: return True # Disable events further down the interface @@ -136,7 +145,7 @@ # Remove the previous hover if self.hover: self.hover.hover = False - self.hover.hovering(False) + self.hover.hovering(state=False) self.hover = None def give_focus(self, *obj): @@ -296,11 +305,16 @@ def __defaults__(self): pass - + + def has(self, key): + for child in self.children: + if child.name == key: return True + return False + def render(self): pass - def hovering(self, value): + def hovering(self, state=None, pos=None): pass def click(self, state, pos): @@ -411,6 +425,11 @@ if pos == len(self.children): pos = 0 self.give_focus(self.children[pos]) + + def remove(self): + # Remove this object + self.parent.children.remove(self) + self.update() @@ -428,7 +447,10 @@ self.backgroundsurf = self.surf.copy() self.font = pygame.font.Font(real_path("fonts", \ "DejaVuSans-Bold.ttf"), 14) - self.buttonstate = 0 # 0 = Nothing, 1 = Hover, 2 = Click + self.closehover = False # If the mouse is hovering above the X + self.closedown = False # If the mouse is clicking the X + self.closedown_visible = False # If the button should be seen as pressed + self.mousepos = None # Mouse position when clicking the title self.pos = { @@ -541,12 +563,12 @@ # Create button if self.canclose: - if self.buttonstate == 0: + if self.closedown_visible: + img = self.pos['closeC_img'] + elif self.closehover or self.closedown: + img = self.pos['closeH_img'] + else: img = self.pos['close_img'] - elif self.buttonstate == 1: - img = self.pos['closeH_img'] - elif self.buttonstate == 2: - img = self.pos['closeC_img'] rect = self.calculate_pos(self.pos['close_pos']) self.surf.blit(self.gui, rect, img) @@ -555,20 +577,66 @@ if state == 0: if self.canclose: border = Rect(9, 9, self.rect.width-51, 28) + close = self.calculate_pos(self.pos['close_pos']) else: border = Rect(9, 9, self.rect.width-18, 28) - if border.collidepoint(pos): + if border.collidepoint(pos): # Move the window # Get the REAL pos, not the one relative to self.rect self.mousepos = (pos[0]-self.rect[0], pos[1]-self.rect[1]) + + elif self.canclose and close.collidepoint(pos): # Close window + self.closedown_visible = True + self.closedown = True + self.update(close) elif state == 1: if self.mousepos != None: movepos = [pos[0]-self.mousepos[0], pos[1]-self.mousepos[1]] self.move(movepos) + + if self.closedown: + close = self.calculate_pos(self.pos['close_pos']) + inside = close.collidepoint(pos) + if self.closedown_visible and not inside: + self.closedown_visible = False + self.update(close) + elif self.closedown_visible == False and inside: + self.closedown_visible = True + self.update(close) elif state == 2: self.mousepos = None + + if self.closedown: + close = self.calculate_pos(self.pos['close_pos']) + if self.closedown_visible: + self.remove() + return + + self.closedown_visible = False + self.closedown = False + self.update(close) + + + def hovering(self, state=None, pos=None): + if state == False and self.closehover: + close = self.calculate_pos(self.pos['close_pos']) + self.closehover = 0 + self.update(close) + elif pos != None: + close = self.calculate_pos(self.pos['close_pos']) + inside = close.collidepoint(pos) + if self.closehover == False and inside: + self.closehover = True + self.update(close) + elif self.closehover and not inside: + self.closehover = False + self.update(close) + + + + def move(self, newpos): # Move the current window oldrect = self.rect.move(0,0) # Where is .copy? @@ -849,8 +917,9 @@ self.surf.blit(font, pos) - def hovering(self, value): - self.update() + def hovering(self, state=None, pos=None): + if state != None: + self.update() def click(self, state, pos): if state == 0: @@ -983,8 +1052,9 @@ self.surf.blit(font, (pos, 0)) - def hovering(self, state): - self.update() + def hovering(self, state=None, pos=None): + if state != None: + self.update() def click(self, state, pos): if state == 0: Modified: trunk/client/playground.py =================================================================== --- trunk/client/playground.py 2010-09-06 16:00:32 UTC (rev 392) +++ trunk/client/playground.py 2010-09-06 19:37:54 UTC (rev 393) @@ -170,7 +170,7 @@ usrlabel.color = [177, 93, 39] usrlabel.set_font(("fonts", "DejaVuSans-Bold.ttf"), 15) - usr = self.logingui.add(gui.Textbox, "usr", (345, 285, 310, 37)) + usr = self.logingui.add(gui.Textbox, "usrtextbox", (345, 285, 310, 37)) usr.set_style("login") pwdlabel = self.logingui.add(gui.Label, "pwdlabel", \ @@ -180,15 +180,15 @@ pwdlabel.color = [177, 93, 39] pwdlabel.set_font(("fonts", "DejaVuSans-Bold.ttf"), 15) - pwd = self.logingui.add(gui.Textbox, "pwd", (345, 350, 310, 37)) + pwd = self.logingui.add(gui.Textbox, "pwdtextbox", (345, 350, 310, 37)) pwd.set_style("login") pwd.set_type("password") - login = self.logingui.add(gui.Button, "login", (425, 398, 151, 34)) + login = self.logingui.add(gui.Button, "loginbutton", (425, 398, 151, 34)) login.caption = "Log in!" login.set_style("login") - signup = self.logingui.add(gui.Link, "signup", (345, 470, 310, 18)) + signup = self.logingui.add(gui.Link, "signuplink", (345, 470, 310, 18)) signup.caption = "Don't have an account yet?" signup.align = 1 signup.color = [140, 74, 31] @@ -316,26 +316,26 @@ self.parent = parent def keypress(self, obj, ev): - if obj.name == "usr": + if obj.name == "usrtextbox": # Using the enter key in the username field if ev.type == KEYUP and ev.key == K_RETURN: - self.parent.logingui.give_focus("pwd") + self.parent.logingui.give_focus("pwdtextbox") - elif obj.name == "pwd": + elif obj.name == "pwdtextbox": # Using the enter key in the password field if ev.type == KEYDOWN and ev.key == K_RETURN: - self.parent.logingui['login'].manualpush(True) + self.parent.logingui['loginbutton'].manualpush(True) elif ev.type == KEYUP and ev.key == K_RETURN: - self.parent.logingui['login'].manualpush(False) - self.parent.logingui['login'].submit() + self.parent.logingui['loginbutton'].manualpush(False) + self.parent.logingui['loginbutton'].submit() def submit(self, obj): # Clicking the login button - if obj.name == "login": - usr = self.parent.logingui['usr'].input - pwd = sha1(self.parent.logingui['pwd'].input).hexdigest() + if obj.name == "loginbutton": + usr = self.parent.logingui['usrtextbox'].input + pwd = sha1(self.parent.logingui['pwdtextbox'].input).hexdigest() self.parent.logingui = None sh['main'].call("status", { @@ -348,8 +348,10 @@ sh['client'].login(usr, pwd) - elif obj.name == "signup": + elif obj.name == "signuplink": + if self.parent.logingui.has("signup"): return + # Create signup window window = self.parent.logingui.add(gui.Window, "signup", \ Rect(50, 50, 200, 200), SignupFeedback()) @@ -360,10 +362,10 @@ def mousedown(self, obj): if obj.name == "usrlabel": - self.parent.logingui.give_focus('usr') + self.parent.logingui.give_focus('usrtextbox') elif obj.name == "pwdlabel": - self.parent.logingui.give_focus('pwd') + self.parent.logingui.give_focus('pwdtextbox') class SignupFeedback(gui.Feedback): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |