be runnable in certain conditions git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@30229 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			152 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# 11/13/2003 - Jeff Grimmett (grimmtooth@softhome.net)
 | 
						|
#
 | 
						|
# o Updated for wx namespace
 | 
						|
#
 | 
						|
# 11/26/2003 - Jeff Grimmett (grimmtooth@softhome.net)
 | 
						|
#
 | 
						|
# o Bigtime errors on startup. Blows up with a program error.
 | 
						|
#   Error:
 | 
						|
#
 | 
						|
#   21:04:11: Debug: ..\..\src\msw\treectrl.cpp(1508): assert "IsVisible(item)" 
 | 
						|
#   failed: The item you call GetNextVisible() for must be visible itself!
 | 
						|
#
 | 
						|
#   I suspect this error is in the lib itself.
 | 
						|
#
 | 
						|
 | 
						|
import  wx
 | 
						|
import  wx.gizmos as gizmos
 | 
						|
 | 
						|
import  images
 | 
						|
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
class TestTree(gizmos.RemotelyScrolledTreeCtrl):
 | 
						|
    def __init__(self, parent, style=wx.TR_HAS_BUTTONS):
 | 
						|
        gizmos.RemotelyScrolledTreeCtrl.__init__(self, parent, -1, style=style)
 | 
						|
 | 
						|
        # make an image list
 | 
						|
        im1 = im2 = -1
 | 
						|
        self.il = wx.ImageList(16, 16)
 | 
						|
        im1 = self.il.Add(images.getFolder1Bitmap())
 | 
						|
        im2 = self.il.Add(images.getFile1Bitmap())
 | 
						|
        self.SetImageList(self.il)
 | 
						|
 | 
						|
        # Add some items
 | 
						|
        root = self.AddRoot("Root")
 | 
						|
 | 
						|
        for i in range(30):
 | 
						|
            item = self.AppendItem(root, "Item %d" % i, im1)
 | 
						|
 | 
						|
            for j in range(10):
 | 
						|
                child = self.AppendItem(item, "Child %d" % j, im2)
 | 
						|
 | 
						|
        self.Expand(root)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class TestValueWindow(gizmos.TreeCompanionWindow):
 | 
						|
    def __init__(self, parent, style=0):
 | 
						|
        gizmos.TreeCompanionWindow.__init__(self, parent, -1, style=style)
 | 
						|
        self.SetBackgroundColour("WHITE")
 | 
						|
        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OEB)
 | 
						|
 | 
						|
    def OEB(self, evt):
 | 
						|
        pass
 | 
						|
 | 
						|
    # This method is called to draw each item in the value window
 | 
						|
    def DrawItem(self, dc, itemId, rect):
 | 
						|
        tree = self.GetTreeCtrl()
 | 
						|
 | 
						|
        if tree:
 | 
						|
            text = "This is "
 | 
						|
            parent = tree.GetItemParent(itemId)
 | 
						|
 | 
						|
            if parent.IsOk():
 | 
						|
                ptext = tree.GetItemText(parent)
 | 
						|
                text = text + ptext + " --> "
 | 
						|
 | 
						|
            text = text + tree.GetItemText(itemId)
 | 
						|
            pen = wx.Pen(
 | 
						|
                wx.SystemSettings_GetColour(wx.SYS_COLOUR_3DLIGHT), 
 | 
						|
                1, wx.SOLID
 | 
						|
                )
 | 
						|
 | 
						|
            dc.SetPen(pen)
 | 
						|
            dc.SetBrush(wx.Brush(self.GetBackgroundColour(), wx.SOLID))
 | 
						|
            dc.DrawRectangle(rect.x, rect.y, rect.width+1, rect.height+1)
 | 
						|
            dc.SetTextForeground("BLACK")
 | 
						|
            dc.SetBackgroundMode(wx.TRANSPARENT)
 | 
						|
            tw, th = dc.GetTextExtent(text)
 | 
						|
            x = 5
 | 
						|
            y = rect.y + max(0, (rect.height - th) / 2)
 | 
						|
            dc.DrawText(text, x, y)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class TestPanel(wx.Panel):
 | 
						|
    def __init__(self, parent, log):
 | 
						|
        wx.Panel.__init__(self, parent, -1)
 | 
						|
        self.log = log
 | 
						|
 | 
						|
        scroller = gizmos.SplitterScrolledWindow(
 | 
						|
            self, -1, style=wx.NO_BORDER | wx.CLIP_CHILDREN | wx.VSCROLL
 | 
						|
            )
 | 
						|
 | 
						|
        splitter = gizmos.ThinSplitterWindow(
 | 
						|
            scroller, -1, style=wx.SP_3DBORDER | wx.CLIP_CHILDREN
 | 
						|
            )
 | 
						|
            
 | 
						|
        splitter.SetSashSize(2)
 | 
						|
        tree = TestTree(splitter, style = wx.TR_HAS_BUTTONS |
 | 
						|
                                          wx.TR_NO_LINES |
 | 
						|
                                          wx.TR_ROW_LINES |
 | 
						|
                                          #wx.TR_HIDE_ROOT |
 | 
						|
                                          wx.NO_BORDER )
 | 
						|
 | 
						|
        valueWindow = TestValueWindow(splitter, style=wx.NO_BORDER)
 | 
						|
 | 
						|
        splitter.SplitVertically(tree, valueWindow, 150)
 | 
						|
        scroller.SetTargetWindow(tree)
 | 
						|
        scroller.EnableScrolling(False, False)
 | 
						|
 | 
						|
        valueWindow.SetTreeCtrl(tree)
 | 
						|
        tree.SetCompanionWindow(valueWindow)
 | 
						|
 | 
						|
        sizer = wx.BoxSizer(wx.VERTICAL)
 | 
						|
        sizer.Add(scroller, 1, wx.EXPAND|wx.ALL, 25)
 | 
						|
        self.SetAutoLayout(True)
 | 
						|
        self.SetSizer(sizer)
 | 
						|
 | 
						|
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
def runTest(frame, nb, log):
 | 
						|
    if wx.Platform == "__WXMAC__":
 | 
						|
        from Main import MessagePanel
 | 
						|
        win = MessagePanel(nb, 'This demo currently fails on the Mac. The problem is being looked into...',
 | 
						|
                           'Sorry', wx.ICON_WARNING)
 | 
						|
        return win
 | 
						|
 | 
						|
    win = TestPanel(nb, log)
 | 
						|
    return win
 | 
						|
 | 
						|
 | 
						|
#----------------------------------------------------------------------
 | 
						|
 | 
						|
 | 
						|
overview = """\
 | 
						|
This demo shows a collection of classes that were designed to operate
 | 
						|
together and provide a tree control with additional columns for each
 | 
						|
item.  The classes are wx.RemotelyScrolledTreeCtrl, wx.TreeCompanionWindow,
 | 
						|
wx.ThinSplitterWindow, and wx.SplitterScrolledWindow, some of which may
 | 
						|
also be useful by themselves.
 | 
						|
"""
 | 
						|
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    import sys,os
 | 
						|
    import run
 | 
						|
    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
 | 
						|
 |