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 )
Ejemplo n.º 2
0
    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()
Ejemplo n.º 4
0
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()