]> 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...
 
 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 *
 
 
 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)
 
 #---------------------------------------------------------------------------
 
 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."
 
         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))
 
         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.
 
 '''
 
 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
+
+
+
+
+#----------------------------------------------------------------------
+
+