Author: bugman Date: Tue Dec 28 20:46:32 2010 New Revision: 11998 URL: http://svn.gna.org/viewcvs/relax?rev=11998&view=rev Log: URL positions and text are now stored globally in list structures to allow for multiple URLs. Modified: branches/bieri_gui/gui_bieri/about.py Modified: branches/bieri_gui/gui_bieri/about.py URL: http://svn.gna.org/viewcvs/relax/branches/bieri_gui/gui_bieri/about.py?rev=11998&r1=11997&r2=11998&view=diff ============================================================================== --- branches/bieri_gui/gui_bieri/about.py (original) +++ branches/bieri_gui/gui_bieri/about.py Tue Dec 28 20:46:32 2010 @@ -78,6 +78,10 @@ self.total_y = self.dim_y + 2*self.border self.SetSize((self.total_x, self.total_y)) + # Initialise URL data structures. + self.url_text = [] + self.url_pos = [] + # Create the buffered device context. self.create_buffered_dc() @@ -154,17 +158,15 @@ event.Skip() - def draw_link(self, link_text=None, point_size=11, family=wx.FONTFAMILY_ROMAN): - """Draw a hyperlink. - - @keyword link_text: The text of the link. - @type link_text: str + def draw_url(self, url_text=None, point_size=11, family=wx.FONTFAMILY_ROMAN): + """Draw a URL as a hyperlink. + + @keyword url_text: The text of the url. + @type url_text: str @keyword point_size: The size of the text in points. @type point_size: int @keyword family: The font family. @type family: int - @return: The position of the hyperlink, with index 0 giving the x range, and index 1 giving the y range. - @rtype: rank-2, 2D numpy array """ # Set the font. @@ -173,21 +175,21 @@ self.dc.SetTextForeground('#0017aa') # The text extent. - x, y = self.dc.GetTextExtent(link_text) + x, y = self.dc.GetTextExtent(url_text) # Draw the text, with a spacer. - text = self.dc.DrawText(link_text, self.border + (self.dim_x - x)/2, self.offset()) + text = self.dc.DrawText(url_text, self.border + (self.dim_x - x)/2, self.offset()) # Store the position of the text (and shift the offset down). - link_pos = zeros((2, 2), int) - link_pos[0] = [self.border + (self.dim_x - x)/2, self.border + (self.dim_x + x)/2] - link_pos[1] = [self.offset(), self.offset(y)] + self.url_pos.append(zeros((2, 2), int)) + self.url_pos[-1][0] = [self.border + (self.dim_x - x)/2, self.border + (self.dim_x + x)/2] + self.url_pos[-1][1] = [self.offset(), self.offset(y)] + + # Store the URL. + self.url_text.append(url_text) # Restore the old font colour (black). self.dc.SetTextForeground('black') - - # Return the link position box. - return link_pos def draw_title(self, text, point_size=14, family=wx.FONTFAMILY_ROMAN): @@ -243,7 +245,7 @@ for i in range(len(text_elements)): # URL text. if url[i]: - self.draw_link(link_text=text_elements[i]) + self.draw_url(url_text=text_elements[i]) # Add the text. else: @@ -444,39 +446,45 @@ self.draw_description() self.draw_copyright() self.offset(10) - self.link_pos = self.draw_link(link_text=self.info.website) + self.draw_url(url_text=self.info.website) self.draw_icon() self.draw_desc_long() self.draw_licence() def cursor_style(self, event): - """Change the mouse cursor when over the link.""" + """Change the mouse cursor when over the url.""" # Determine the mouse position. x = event.GetX() y = event.GetY() # Selection cursor. - if x > self.link_pos[0, 0] and x < self.link_pos[0, 1] and y > self.link_pos[1, 0] and y < self.link_pos[1, 1]: - # Only change if needed. - if self.cursor_type == 'normal': - # Build the cursor. - select_cursor = wx.StockCursor(wx.CURSOR_HAND) - - # Set the cursor. - self.window.SetCursor(select_cursor) - - # Reset the cursor type. - self.cursor_type = 'select' + over_url = False + for i in range(len(self.url_pos)): + if x > self.url_pos[i][0, 0] and x < self.url_pos[i][0, 1] and y
self.url_pos[i][1, 0] and y < self.url_pos[i][1, 1]:
+ over_url = True + + # Only change if needed. + if over_url and self.cursor_type == 'normal': + # Build the cursor. + select_cursor = wx.StockCursor(wx.CURSOR_HAND) + + # Set the cursor. + self.window.SetCursor(select_cursor) + + # Reset the cursor type. + self.cursor_type = 'select' + + # The flag. # Normal cursor. - elif self.cursor_type == 'select': + if not over_url and self.cursor_type == 'select': # Build the cursor. select_cursor = wx.StockCursor(wx.CURSOR_ARROW) # Set the cursor. - self.SetCursor(select_cursor) + self.window.SetCursor(select_cursor) # Reset the cursor type. self.cursor_type = 'normal' @@ -551,9 +559,10 @@ x = event.GetX() y = event.GetY() - # A click on the relax link. - if x > self.link_pos[0, 0] and x < self.link_pos[0, 1] and y > self.link_pos[1, 0] and y < self.link_pos[1, 1]: - webbrowser.open_new(self.info.website) + # A click on a URL. + for i in range(len(self.url_pos)): + if x > self.url_pos[i][0, 0] and x < self.url_pos[i][0, 1] and y
self.url_pos[i][1, 0] and y < self.url_pos[i][1, 1]:
+ webbrowser.open_new(self.url_text[i]) # Close the dialog on all clicks. if self.DESTROY_ON_CLICK: