]> git.saurik.com Git - wxWidgets.git/commitdiff
Added generic static text control
authorRobin Dunn <robin@alldunn.com>
Mon, 8 Jul 2002 20:06:13 +0000 (20:06 +0000)
committerRobin Dunn <robin@alldunn.com>
Mon, 8 Jul 2002 20:06:13 +0000 (20:06 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16089 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/CHANGES.txt
wxPython/demo/wxStaticText.py
wxPython/wxPython/lib/stattext.py [new file with mode: 0644]

index b1f331622202526b2bd5cd4ee3819315d0ee5aac..355c5c2a45d5c1e4b18e3fa624f8452c28706c2f 100644 (file)
@@ -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.
+
 
 
 
index ff3d3c70eea7184eb4cdf46ba230368333f419e9..dc558eed08e9015074ed3f759a2db585814d59bf 100644 (file)
@@ -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 (file)
index 0000000..c5a89e9
--- /dev/null
@@ -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
+
+
+
+
+#----------------------------------------------------------------------
+
+