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:
@@ -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.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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])])
|
||||||
|
|
||||||
|
130
wxPython/wxPython/lib/stattext.py
Normal file
130
wxPython/wxPython/lib/stattext.py
Normal 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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user