def __init__(self, parent, object = None, rootName = "Root", autoVisible = False, onUpdate = None, id = wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style= wx.TAB_TRAVERSAL, name='InfoTree'): super(InfoTree, self).__init__(parent, id, pos, size, style, name) self._infoTreeBasic = InfoTreeBasic( self, object, rootName, autoVisible, onUpdate ) self._sashWindow = wx.SashWindow( self ) self._sashWindow.SetSashVisible( wx.SASH_TOP, True ) self._infoTable = wx.ScrolledWindow(self._sashWindow, style = wx.VSCROLL ) self._infoTable.SetBackgroundColour( (255,255,255) ) self._infoTable.SetScrollRate(0,10) self._infoTable.SetMinSize( (-1,70) ) self._infoTableSizer = wx.FlexGridSizer(0,2,0,8) self._infoTableSizer.AddGrowableCol(1) self._infoTable.SetSizer( self._infoTableSizer ) self._vBoxSashWindow = wx.BoxSizer(wx.VERTICAL) self._vBoxSashWindow.Add( self._infoTable, 1, wx.EXPAND ) self._vBoxSashWindow.SetMinSize( (-1,100) ) self._sashWindow.SetSizer( self._vBoxSashWindow ) self._sashWindow.Bind( wx.EVT_SASH_DRAGGED, self.sashWindowResize ) self._vBox = wx.BoxSizer(wx.VERTICAL) self._vBox.Add( self._infoTreeBasic, 1, wx.EXPAND ) self._vBox.Add( self._sashWindow, 0, wx.EXPAND ) self.SetSizerAndFit( self._vBox ) self._memberDisplay = MemberDisplay(self._infoTable, self._infoTableSizer) self._infoTreeBasic.Bind( wx.EVT_TREE_SEL_CHANGED, self.selectionChanged ) self.Bind( wx.EVT_PAINT, self.onPaint )
def __init__(self, parent, object=None, rootName="Root", autoVisible=False, onUpdate=None, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.TAB_TRAVERSAL, name='InfoTree'): super(InfoTree, self).__init__(parent, id, pos, size, style, name) self._infoTreeBasic = InfoTreeBasic(self, object, rootName, autoVisible, onUpdate) self._sashWindow = wx.SashWindow(self) self._sashWindow.SetSashVisible(wx.SASH_TOP, True) self._infoTable = wx.ScrolledWindow(self._sashWindow, style=wx.VSCROLL) self._infoTable.SetBackgroundColour((255, 255, 255)) self._infoTable.SetScrollRate(0, 10) self._infoTable.SetMinSize((-1, 70)) self._infoTableSizer = wx.FlexGridSizer(0, 2, 0, 8) self._infoTableSizer.AddGrowableCol(1) self._infoTable.SetSizer(self._infoTableSizer) self._vBoxSashWindow = wx.BoxSizer(wx.VERTICAL) self._vBoxSashWindow.Add(self._infoTable, 1, wx.EXPAND) self._vBoxSashWindow.SetMinSize((-1, 100)) self._sashWindow.SetSizer(self._vBoxSashWindow) self._sashWindow.Bind(wx.EVT_SASH_DRAGGED, self.sashWindowResize) self._vBox = wx.BoxSizer(wx.VERTICAL) self._vBox.Add(self._infoTreeBasic, 1, wx.EXPAND) self._vBox.Add(self._sashWindow, 0, wx.EXPAND) self.SetSizerAndFit(self._vBox) self._memberDisplay = MemberDisplay(self._infoTable, self._infoTableSizer) self._infoTreeBasic.Bind(wx.EVT_TREE_SEL_CHANGED, self.selectionChanged) self.Bind(wx.EVT_PAINT, self.onPaint)
class InfoTree(wx.Panel): """A complete tree attached to an info box.""" def __init__(self, parent, object = None, rootName = "Root", autoVisible = False, onUpdate = None, id = wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style= wx.TAB_TRAVERSAL, name='InfoTree'): super(InfoTree, self).__init__(parent, id, pos, size, style, name) self._infoTreeBasic = InfoTreeBasic( self, object, rootName, autoVisible, onUpdate ) self._sashWindow = wx.SashWindow( self ) self._sashWindow.SetSashVisible( wx.SASH_TOP, True ) self._infoTable = wx.ScrolledWindow(self._sashWindow, style = wx.VSCROLL ) self._infoTable.SetBackgroundColour( (255,255,255) ) self._infoTable.SetScrollRate(0,10) self._infoTable.SetMinSize( (-1,70) ) self._infoTableSizer = wx.FlexGridSizer(0,2,0,8) self._infoTableSizer.AddGrowableCol(1) self._infoTable.SetSizer( self._infoTableSizer ) self._vBoxSashWindow = wx.BoxSizer(wx.VERTICAL) self._vBoxSashWindow.Add( self._infoTable, 1, wx.EXPAND ) self._vBoxSashWindow.SetMinSize( (-1,100) ) self._sashWindow.SetSizer( self._vBoxSashWindow ) self._sashWindow.Bind( wx.EVT_SASH_DRAGGED, self.sashWindowResize ) self._vBox = wx.BoxSizer(wx.VERTICAL) self._vBox.Add( self._infoTreeBasic, 1, wx.EXPAND ) self._vBox.Add( self._sashWindow, 0, wx.EXPAND ) self.SetSizerAndFit( self._vBox ) self._memberDisplay = MemberDisplay(self._infoTable, self._infoTableSizer) self._infoTreeBasic.Bind( wx.EVT_TREE_SEL_CHANGED, self.selectionChanged ) self.Bind( wx.EVT_PAINT, self.onPaint ) # # Private methods # def _adjustSashSize(self): """Private. Make sure sash size is not too large.""" height = self._vBoxSashWindow.GetMinSize()[1] maxHeight = self.GetSize()[1] - 80 if height > maxHeight : if maxHeight <= 0 : maxHeight = -1 currMaxHeight = self._vBoxSashWindow.GetMinSize().height if currMaxHeight == maxHeight : return self._vBoxSashWindow.SetMinSize( (-1,maxHeight) ) self._refreshAll() def _refreshAll(self): """Private. Make sure everything is laid-out correctly.""" self.Fit() self.GetParent().Layout() def _displayInfo(self, object): """Display info on the passed object.""" self._memberDisplay.attachObject(object) # # Public methods # def attachToObject(self, object): self._infoTreeBasic.attachToObject(object) def getTree(self): return self._infoTreeBasic # # Callbacks # def onPaint(self, event): self._adjustSashSize() event.Skip() def sashWindowResize(self, event): """Called whenever the sash window is resized""" if event.GetDragStatus() == wx.SASH_STATUS_OUT_OF_RANGE : return self._vBoxSashWindow.SetMinSize( (-1,event.GetDragRect().height) ) self._adjustSashSize() self._refreshAll() def selectionChanged(self, event): nodeData = self._infoTreeBasic.GetItemPyData(event.GetItem()) try: object = nodeData.getObject() except (AttributeError, TypeError): object = nodeData self._displayInfo( object ) event.Skip()
class InfoTree(wx.Panel): """A complete tree attached to an info box.""" def __init__(self, parent, object=None, rootName="Root", autoVisible=False, onUpdate=None, id=wx.ID_ANY, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.TAB_TRAVERSAL, name='InfoTree'): super(InfoTree, self).__init__(parent, id, pos, size, style, name) self._infoTreeBasic = InfoTreeBasic(self, object, rootName, autoVisible, onUpdate) self._sashWindow = wx.SashWindow(self) self._sashWindow.SetSashVisible(wx.SASH_TOP, True) self._infoTable = wx.ScrolledWindow(self._sashWindow, style=wx.VSCROLL) self._infoTable.SetBackgroundColour((255, 255, 255)) self._infoTable.SetScrollRate(0, 10) self._infoTable.SetMinSize((-1, 70)) self._infoTableSizer = wx.FlexGridSizer(0, 2, 0, 8) self._infoTableSizer.AddGrowableCol(1) self._infoTable.SetSizer(self._infoTableSizer) self._vBoxSashWindow = wx.BoxSizer(wx.VERTICAL) self._vBoxSashWindow.Add(self._infoTable, 1, wx.EXPAND) self._vBoxSashWindow.SetMinSize((-1, 100)) self._sashWindow.SetSizer(self._vBoxSashWindow) self._sashWindow.Bind(wx.EVT_SASH_DRAGGED, self.sashWindowResize) self._vBox = wx.BoxSizer(wx.VERTICAL) self._vBox.Add(self._infoTreeBasic, 1, wx.EXPAND) self._vBox.Add(self._sashWindow, 0, wx.EXPAND) self.SetSizerAndFit(self._vBox) self._memberDisplay = MemberDisplay(self._infoTable, self._infoTableSizer) self._infoTreeBasic.Bind(wx.EVT_TREE_SEL_CHANGED, self.selectionChanged) self.Bind(wx.EVT_PAINT, self.onPaint) # # Private methods # def _adjustSashSize(self): """Private. Make sure sash size is not too large.""" height = self._vBoxSashWindow.GetMinSize()[1] maxHeight = self.GetSize()[1] - 80 if height > maxHeight: if maxHeight <= 0: maxHeight = -1 currMaxHeight = self._vBoxSashWindow.GetMinSize().height if currMaxHeight == maxHeight: return self._vBoxSashWindow.SetMinSize((-1, maxHeight)) self._refreshAll() def _refreshAll(self): """Private. Make sure everything is laid-out correctly.""" self.Fit() self.GetParent().Layout() def _displayInfo(self, object): """Display info on the passed object.""" self._memberDisplay.attachObject(object) # # Public methods # def attachToObject(self, object): self._infoTreeBasic.attachToObject(object) def getTree(self): return self._infoTreeBasic # # Callbacks # def onPaint(self, event): self._adjustSashSize() event.Skip() def sashWindowResize(self, event): """Called whenever the sash window is resized""" if event.GetDragStatus() == wx.SASH_STATUS_OUT_OF_RANGE: return self._vBoxSashWindow.SetMinSize((-1, event.GetDragRect().height)) self._adjustSashSize() self._refreshAll() def selectionChanged(self, event): nodeData = self._infoTreeBasic.GetItemPyData(event.GetItem()) try: object = nodeData.getObject() except (AttributeError, TypeError): object = nodeData self._displayInfo(object) event.Skip()