From: Robin Dunn Date: Mon, 8 Jul 2002 20:06:13 +0000 (+0000) Subject: Added generic static text control X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/5fea3204c9e6d3c28ffabecca54d971b8205abe2?ds=inline Added generic static text control git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16089 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/wxPython/CHANGES.txt b/wxPython/CHANGES.txt index b1f3316222..355c5c2a45 100644 --- a/wxPython/CHANGES.txt +++ b/wxPython/CHANGES.txt @@ -148,6 +148,10 @@ transient thread state structure. Since wxPython is now saving tstates for it's own callbacks it ended up using garbage after win32com got rid of the tstate... +Added a generic static text control to wxPython.lib.stattext. This is +so things like Boa and PythonCard can have a static text that can +respond to mouse events and etc. + diff --git a/wxPython/demo/wxStaticText.py b/wxPython/demo/wxStaticText.py index ff3d3c70ee..dc558eed08 100644 --- a/wxPython/demo/wxStaticText.py +++ b/wxPython/demo/wxStaticText.py @@ -1,28 +1,37 @@ from wxPython.wx import * +USE_GENERIC = 1 + +if USE_GENERIC: + from wxPython.lib.stattext import wxGenStaticText as wxStaticText + #--------------------------------------------------------------------------- class TestPanel(wxPanel): def __init__(self, parent): wxPanel.__init__(self, parent, -1) - wxStaticText(self, -1, "This is an example of static text", - wxPoint(20, 10)) + wxStaticText(self, -1, "This is an example of static text", (20, 10)) + + wxStaticText(self, -1, "using the wxStaticText Control.", (20, 30)) + + wxStaticText(self, -1, "Is this yellow?", (20, 70), (90, -1)).SetBackgroundColour('Yellow') - wxStaticText(self, -1, "using the wxStaticText Control.", - wxPoint(20, 30)) + wxStaticText(self, -1, "align center", (120, 70), (90, -1), wxALIGN_CENTER).SetBackgroundColour('Yellow') - wxStaticText(self, -1, "Is this yellow?", - wxPoint(20, 70)).SetBackgroundColour('Yellow') + wxStaticText(self, -1, "align right", (220, 70), (90, -1), wxALIGN_RIGHT).SetBackgroundColour('Yellow') str = "This is a different font." - text = wxStaticText(self, -1, str, wxPoint(20, 100)) - font = wxFont(20, wxSWISS, wxNORMAL, wxNORMAL, false, "Arial") + text = wxStaticText(self, -1, str, (20, 100)) + font = wxFont(18, wxSWISS, wxNORMAL, wxNORMAL, false, "Arial") w, h, d, e = self.GetFullTextExtent(str, font) text.SetFont(font) text.SetSize(wxSize(w, h)) + wxStaticText(self, -1, "Multi-line wxStaticText\nline 2\nline 3\n\nafter empty line", (20,150)) + wxStaticText(self, -1, "Align right multi-line\nline 2\nline 3\n\nafter empty line", (220,150), style=wxALIGN_RIGHT) + #--------------------------------------------------------------------------- @@ -35,14 +44,15 @@ def runTest(frame, nb, log): - - - - - overview = '''\ A static text control displays one or more lines of read-only text. ''' -#--------------------------------------------------------------------------- + + +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])]) + diff --git a/wxPython/wxPython/lib/stattext.py b/wxPython/wxPython/lib/stattext.py new file mode 100644 index 0000000000..c5a89e9f45 --- /dev/null +++ b/wxPython/wxPython/lib/stattext.py @@ -0,0 +1,130 @@ +#---------------------------------------------------------------------- +# Name: wxPython.lib.stattext +# Purpose: A generic wxGenStaticText class. Using this should +# eliminate some of the platform differences in wxStaticText, +# such as background colours and mouse sensitivity. +# +# Author: Robin Dunn +# +# Created: 8-July-2002 +# RCS-ID: $Id$ +# Copyright: (c) 2002 by Total Control Software +# Licence: wxWindows license +#---------------------------------------------------------------------- + +""" +""" + +from wxPython.wx import * +import string + +#---------------------------------------------------------------------- + +class wxGenStaticText(wxPyControl): + labelDelta = 1 + + def __init__(self, parent, ID, label, + pos = wxDefaultPosition, size = wxDefaultSize, + style = 0, + name = "genstattext"): + wxPyControl.__init__(self, parent, ID, pos, size, style, wxDefaultValidator, name) + + wxPyControl.SetLabel(self, label) # don't check wxST_NO_AUTORESIZE yet + self.SetPosition(pos) + font = parent.GetFont() + if not font.Ok(): + font = wxSystemSettings_GetSystemFont(wxSYS_DEFAULT_GUI_FONT) + wxPyControl.SetFont(self, font) # same here + + clr = parent.GetBackgroundColour() + if not clr.Ok(): + clr = wxSystemSettings_GetSystemColour(wxSYS_COLOUR_BTNFACE) + self.SetBackgroundColour(clr) + + clr = parent.GetForegroundColour() + if not clr.Ok(): + clr = wxSystemSettings_GetSystemColour(wxSYS_COLOUR_BTNTEXT) + self.SetForegroundColour(clr) + + rw, rh = size + bw, bh = self.GetBestSize() + if rw == -1: rw = bw + if rh == -1: rh = bh + self.SetSize(wxSize(rw, rh)) + + EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) + EVT_PAINT(self, self.OnPaint) + + + def SetLabel(self, label): + """ + Sets the static text label and updates the control's size to exactly + fit the label unless the control has wxST_NO_AUTORESIZE flag. + """ + wxPyControl.SetLabel(self, label) + style = self.GetWindowStyleFlag() + if not style & wxST_NO_AUTORESIZE: + self.SetSize(self.GetBestSize()) + + def SetFont(self, font): + """ + Sets the static text font and updates the control's size to exactly + fit the label unless the control has wxST_NO_AUTORESIZE flag. + """ + wxPyControl.SetFont(self, font) + style = self.GetWindowStyleFlag() + if not style & wxST_NO_AUTORESIZE: + self.SetSize(self.GetBestSize()) + + + def DoGetBestSize(self): + """Overridden base class virtual. Determines the best size of the + button based on the label and bezel size.""" + label = self.GetLabel() + maxWidth = totalHeight = 0 + for line in label.split('\n'): + if line == '': + w, h = self.GetTextExtent('W') # empty lines have height too + else: + w, h = self.GetTextExtent(line) + totalHeight += h + maxWidth = max(maxWidth, w) + return wxSize(maxWidth, totalHeight) + + + def AcceptsFocus(self): + """Overridden base class virtual.""" + return false + + + def OnPaint(self, event): + width, height = self.GetClientSize() + dc = wxBufferedPaintDC(self) + dc.SetBackground(wxBrush(self.GetBackgroundColour(), wxSOLID)) + dc.Clear() + dc.SetFont(self.GetFont()) + label = self.GetLabel() + style = self.GetWindowStyleFlag() + x = y = 0 + for line in label.split('\n'): + if line == '': + w, h = self.GetTextExtent('W') # empty lines have height too + else: + w, h = self.GetTextExtent(line) + if style & wxALIGN_RIGHT: + x = width - w + if style & wxALIGN_CENTER: + x = (width - w)/2 + dc.DrawText(line, x, y) + y += h + + + def OnEraseBackground(self, event): + pass + + + + +#---------------------------------------------------------------------- + +