
import sys
import wx
import wx.lib.agw.customtreectrl as CT
import time


class CustomTreeCtrl(CT.CustomTreeCtrl):

    def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition,
                 size=wx.DefaultSize,
                 style=wx.SUNKEN_BORDER|wx.WANTS_CHARS,
                 agwStyle=CT.TR_HAS_BUTTONS|CT.TR_HAS_VARIABLE_ROW_HEIGHT,
                 log=None):

        CT.CustomTreeCtrl.__init__(self, parent, id, pos, size, style, agwStyle)

        self.SetBackgroundColour(wx.WHITE)

        self.log = log

        self.root = self.AddRoot("The Root Item")

        for x in range(150):
            child = self.AppendItem(self.root, "Item %d" % x)
            self.SetPyData(child, None)
            self.SetItemImage(child, 24, CT.TreeItemIcon_Normal)
            self.SetItemImage(child, 13, CT.TreeItemIcon_Expanded)


class TestPanel(wx.Panel):

    def __init__(self, parent, log):
        wx.Panel.__init__(self, parent)

        self.log = log

        self.tree = CustomTreeCtrl(self, -1, log=self.log,
                                   style=wx.SUNKEN_BORDER,
                                   agwStyle=CT.TR_HAS_BUTTONS|CT.TR_HAS_VARIABLE_ROW_HEIGHT|CT.TR_HIDE_ROOT)

        sizer = wx.BoxSizer()
        sizer.Add(self.tree, 1, wx.EXPAND)
        self.SetSizer(sizer)

        self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self._onSelChanged)

    def _onSelChanged(self, event=None):
        ''' item change event '''

        # simulate procedure
        time.sleep(0.1)
        event.Skip()


#----------------------------------------------------------------------

def main():

    app = wx.App()
    frm = wx.Frame(None, title="CustomTreeControl sample", size=(700, 500))
    pnl = TestPanel(frm, sys.stdout)
    frm.Show()
    app.MainLoop()


#----------------------------------------------------------------------

if __name__ == '__main__':
    main()
