git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41466 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			164 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
 | 
						|
import wx
 | 
						|
from wx.lib.expando import ExpandoTextCtrl, EVT_ETC_LAYOUT_NEEDED
 | 
						|
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
class TestFrame(wx.Frame):
 | 
						|
    def __init__(self, parent, log):
 | 
						|
        wx.Frame.__init__(self, parent, title="Test ExpandoTextCtrl")
 | 
						|
        self.log = log
 | 
						|
        self.pnl = p = wx.Panel(self)
 | 
						|
        self.eom = ExpandoTextCtrl(p, size=(250,-1),
 | 
						|
                                   value="This control will expand as you type")
 | 
						|
        self.Bind(EVT_ETC_LAYOUT_NEEDED, self.OnRefit, self.eom)
 | 
						|
 | 
						|
        # create some buttons and sizers to use in testing some
 | 
						|
        # features and also the layout
 | 
						|
        vBtnSizer = wx.BoxSizer(wx.VERTICAL)
 | 
						|
 | 
						|
        btn = wx.Button(p, -1, "Set MaxHeight")
 | 
						|
        self.Bind(wx.EVT_BUTTON, self.OnSetMaxHeight, btn)
 | 
						|
        vBtnSizer.Add(btn, 0, wx.ALL|wx.EXPAND, 5)
 | 
						|
 | 
						|
        btn = wx.Button(p, -1, "Set Font")
 | 
						|
        self.Bind(wx.EVT_BUTTON, self.OnSetFont, btn)
 | 
						|
        vBtnSizer.Add(btn, 0, wx.ALL|wx.EXPAND, 5)
 | 
						|
 | 
						|
        btn = wx.Button(p, -1, "Write Text")
 | 
						|
        self.Bind(wx.EVT_BUTTON, self.OnWriteText, btn)
 | 
						|
        vBtnSizer.Add(btn, 0, wx.ALL|wx.EXPAND, 5)
 | 
						|
 | 
						|
        btn = wx.Button(p, -1, "Append Text")
 | 
						|
        self.Bind(wx.EVT_BUTTON, self.OnAppendText, btn)
 | 
						|
        vBtnSizer.Add(btn, 0, wx.ALL|wx.EXPAND, 5)
 | 
						|
 | 
						|
        btn = wx.Button(p, -1, "Set Value")
 | 
						|
        self.Bind(wx.EVT_BUTTON, self.OnSetValue, btn)
 | 
						|
        vBtnSizer.Add(btn, 0, wx.ALL|wx.EXPAND, 5)
 | 
						|
 | 
						|
        btn = wx.Button(p, -1, "Get Value")
 | 
						|
        self.Bind(wx.EVT_BUTTON, self.OnGetValue, btn)
 | 
						|
        vBtnSizer.Add(btn, 0, wx.ALL|wx.EXPAND, 5)
 | 
						|
 | 
						|
        for x in range(3):
 | 
						|
            btn = wx.Button(p, -1, " ")
 | 
						|
            vBtnSizer.Add(btn, 0, wx.ALL|wx.EXPAND, 5)
 | 
						|
            self.Bind(wx.EVT_BUTTON, self.OnOtherBtn, btn)
 | 
						|
 | 
						|
        hBtnSizer = wx.BoxSizer(wx.HORIZONTAL)
 | 
						|
        for x in range(3):
 | 
						|
            btn = wx.Button(p, -1, " ")
 | 
						|
            hBtnSizer.Add(btn, 0, wx.ALL, 5)
 | 
						|
            self.Bind(wx.EVT_BUTTON, self.OnOtherBtn, btn)
 | 
						|
 | 
						|
        sizer = wx.BoxSizer(wx.HORIZONTAL)
 | 
						|
        col1 = wx.BoxSizer(wx.VERTICAL)
 | 
						|
        col1.Add(self.eom, 0, wx.ALL, 10)
 | 
						|
        col1.Add(hBtnSizer)
 | 
						|
        sizer.Add(col1)
 | 
						|
        sizer.Add(vBtnSizer)
 | 
						|
        p.SetSizer(sizer)
 | 
						|
 | 
						|
        # Put the panel in a sizer for the frame so we can use self.Fit()
 | 
						|
        frameSizer = wx.BoxSizer()
 | 
						|
        frameSizer.Add(p, 1, wx.EXPAND)
 | 
						|
        self.SetSizer(frameSizer)
 | 
						|
        
 | 
						|
        self.Fit()
 | 
						|
 | 
						|
 | 
						|
    def OnRefit(self, evt):
 | 
						|
        # The Expando control will redo the layout of the
 | 
						|
        # sizer it belongs to, but sometimes this may not be
 | 
						|
        # enough, so it will send us this event so we can do any
 | 
						|
        # other layout adjustments needed.  In this case we'll
 | 
						|
        # just resize the frame to fit the new needs of the sizer.
 | 
						|
        self.Fit()
 | 
						|
 | 
						|
 | 
						|
    def OnSetMaxHeight(self, evt):
 | 
						|
        mh = self.eom.GetMaxHeight()
 | 
						|
        dlg = wx.NumberEntryDialog(self, "", "Enter new max height:",
 | 
						|
                                   "MaxHeight", mh, -1, 1000)
 | 
						|
        if dlg.ShowModal() == wx.ID_OK:
 | 
						|
            self.eom.SetMaxHeight(dlg.GetValue())
 | 
						|
        dlg.Destroy()
 | 
						|
        
 | 
						|
        
 | 
						|
    def OnSetFont(self, evt):
 | 
						|
        dlg = wx.FontDialog(self, wx.FontData())
 | 
						|
        dlg.GetFontData().SetInitialFont(self.eom.GetFont())
 | 
						|
        if dlg.ShowModal() == wx.ID_OK:
 | 
						|
            self.eom.SetFont(dlg.GetFontData().GetChosenFont())
 | 
						|
        dlg.Destroy()
 | 
						|
        
 | 
						|
        
 | 
						|
    def OnWriteText(self, evt):
 | 
						|
        self.eom.WriteText("\nThis is a test...  Only a test.  If this had "
 | 
						|
                           "been a real emergency you would have seen the "
 | 
						|
                           "quick brown fox jump over the lazy dog.\n")
 | 
						|
    
 | 
						|
    def OnAppendText(self, evt):
 | 
						|
        self.eom.AppendText("\nAppended text.")
 | 
						|
 | 
						|
    def OnSetValue(self, evt):
 | 
						|
        self.eom.SetValue("A new value.")
 | 
						|
 | 
						|
    def OnGetValue(self, evt):
 | 
						|
        self.log.write("-----------------\n" + self.eom.GetValue())
 | 
						|
 | 
						|
    def OnOtherBtn(self, evt):
 | 
						|
        # just for testing...
 | 
						|
        #print self.eom.numLines,
 | 
						|
        self.eom._adjustCtrl()
 | 
						|
        #print self.eom.numLines
 | 
						|
        
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
class TestPanel(wx.Panel):
 | 
						|
    def __init__(self, parent, log):
 | 
						|
        self.log = log
 | 
						|
        wx.Panel.__init__(self, parent, -1)
 | 
						|
 | 
						|
        b = wx.Button(self, -1, " Test ExpandoTextCtrl ", (50,50))
 | 
						|
        self.Bind(wx.EVT_BUTTON, self.OnButton, b)
 | 
						|
 | 
						|
 | 
						|
    def OnButton(self, evt):
 | 
						|
        self.win = TestFrame(self, self.log)
 | 
						|
        self.win.Show(True)
 | 
						|
 | 
						|
  
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
def runTest(frame, nb, log):
 | 
						|
    win = TestPanel(nb, log)
 | 
						|
    return win
 | 
						|
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
 | 
						|
overview = """<html><body>
 | 
						|
<h2><center>ExpandoTextCtrl</center></h2>
 | 
						|
 | 
						|
The ExpandoTextCtrl is a multi-line wx.TextCtrl that will
 | 
						|
adjust its height on the fly as needed to accomodate the number of
 | 
						|
lines needed to display the current content of the control.  It is
 | 
						|
assumed that the width of the control will be a fixed value and
 | 
						|
that only the height will be adjusted automatically.  If the
 | 
						|
control is used in a sizer then the width should be set as part of
 | 
						|
the initial or min size of the control.
 | 
						|
 | 
						|
</body></html>
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    import sys,os
 | 
						|
    import run
 | 
						|
    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
 | 
						|
 |