Added generic static text control

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16089 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2002-07-08 20:06:13 +00:00
parent 9baafdaadf
commit 5fea3204c9
3 changed files with 158 additions and 14 deletions

View 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 tstates for it's own callbacks it ended up using garbage after
win32com got rid of the tstate... 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.

View 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): class TestPanel(wxPanel):
def __init__(self, parent): def __init__(self, parent):
wxPanel.__init__(self, parent, -1) wxPanel.__init__(self, parent, -1)
wxStaticText(self, -1, "This is an example of static text", wxStaticText(self, -1, "This is an example of static text", (20, 10))
wxPoint(20, 10))
wxStaticText(self, -1, "using the wxStaticText Control.", wxStaticText(self, -1, "using the wxStaticText Control.", (20, 30))
wxPoint(20, 30))
wxStaticText(self, -1, "Is this yellow?", wxStaticText(self, -1, "Is this yellow?", (20, 70), (90, -1)).SetBackgroundColour('Yellow')
wxPoint(20, 70)).SetBackgroundColour('Yellow')
wxStaticText(self, -1, "align center", (120, 70), (90, -1), wxALIGN_CENTER).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)) text = wxStaticText(self, -1, str, (20, 100))
font = wxFont(20, wxSWISS, wxNORMAL, wxNORMAL, false, "Arial") font = wxFont(18, wxSWISS, wxNORMAL, wxNORMAL, false, "Arial")
w, h, d, e = self.GetFullTextExtent(str, font) w, h, d, e = self.GetFullTextExtent(str, font)
text.SetFont(font) text.SetFont(font)
text.SetSize(wxSize(w, h)) 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 = '''\ overview = '''\
A static text control displays one or more lines of read-only text. 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])])

View File

@@ -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
#----------------------------------------------------------------------