/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Control/BossCommon/BossCommon-01-04-19/share/ObjectBrowser.py

Go to the documentation of this file.
00001 # File: BossCommon/share/ObjectBrowser.py
00002 # Author: Wim Lavrijsen (LBNL, WLavrijsen@lbl.gov)
00003 
00004 import sys
00005 
00006 try:
00007    import idlelib.ObjectBrowser as ibrowser
00008 except ImportError, problem:
00009    print """It would appear that IDLE is not properly installed. IDLE, the python
00010 IDE, comes standard with python 2.3. For older pythons, please install
00011 it from http://sourceforge.net/projects/idlefork.
00012 """
00013 
00014  # detailed exception information follows:
00015    import traceback
00016    traceback.print_tb( sys.exc_traceback )
00017 
00018  # stop processing
00019    raise problem
00020 
00021 import Tkinter
00022 
00023 
00024 try:
00025    gmod = sys.modules[ 'gaudimodule' ]
00026 except KeyError:
00027    gmod = None
00028 
00029 
00030 class GaudiAlgTypeTreeItem( ibrowser.ObjectTreeItem ):
00031    def GetSubList( self ):
00032       props = self.object.properties()
00033 
00034       sublist = []
00035       for prop in props:
00036          item = ibrowser.make_objecttreeitem(
00037             str(prop) + " =",
00038             eval( 'self.object.%s' % prop ),
00039             lambda value, key=prop, object=self.object:
00040                setattr(object, key, value))
00041          sublist.append( item )
00042 
00043       return sublist
00044 
00045 GaudiSvcTypeTreeItem = GaudiAlgTypeTreeItem
00046 
00047 
00048 class TopTreeItem( ibrowser.ObjectTreeItem ):
00049    def __init__( self, title, names, values ):
00050       assert( len(names) == len(values) )
00051 
00052       ibrowser.ObjectTreeItem.__init__( self, title, names, None )
00053 
00054       self.names = names
00055       self.values = values
00056 
00057    def GetSubList( self ):
00058       sublist = []
00059 
00060       for i in range(len(self.names)):
00061          item = ibrowser.make_objecttreeitem( self.names[i], self.values[i] )
00062          sublist.append( item )
00063 
00064       return sublist
00065 
00066 
00067 def initTreeItemsDispatch():
00068    if gmod != None:
00069     ## add Gaudi specific tree items
00070       if not ibrowser.dispatch.has_key( gmod.Algorithm ):
00071          ibrowser.dispatch[ gmod.Algorithm ] = GaudiAlgTypeTreeItem
00072 
00073       if not ibrowser.dispatch.has_key( gmod.Service ):
00074          ibrowser.dispatch[ gmod.Service ] = GaudiSvcTypeTreeItem
00075 
00076 
00077 class Browser( Tkinter.Frame ):
00078    def __init__( self, master = None ):
00079     # setup Tk as necessary
00080       if master == None:
00081          master = Tkinter.Tk()
00082 
00083     # setup base
00084       Tkinter.Frame.__init__( self, master )
00085       self.master.title( 'Gaudi Object Browser' )
00086 
00087     # create dispatching as necessary
00088       initTreeItemsDispatch()
00089 
00090     # construct the browser
00091       sc = ibrowser.ScrolledCanvas( self,  height = 400, width = 640,
00092           bg = 'white', highlightthickness = 0, takefocus = 1 )
00093       sc.frame.pack( expand = 1, fill = 'both' )
00094 
00095     # fill the initial nodes
00096       dct = sys.modules[ '__main__' ].__dict__
00097 
00098       algs, svcs = {}, {}
00099       if gmod != None:
00100          algs = self.select( dct, gmod.Algorithm )
00101          svcs = self.select( dct, gmod.Service )
00102 
00103       top = TopTreeItem( 'objects',
00104          [ 'algorithms', 'services', 'globals' ],
00105          [ algs,         svcs,       dct       ] )
00106 
00107     # GUI stuff
00108       node = ibrowser.TreeNode( sc.canvas, None, top )
00109       node.expand()
00110       node.update()
00111 
00112       self.pack( expand = 1, fill = 'both' )
00113 
00114    def select( self, fromDict, whatType ):
00115       """Select objects of the requested type from the given dictionary."""
00116 
00117       selection = {}
00118       for name, value in fromDict.items():
00119          if type(value) == whatType:
00120             selection[ name ] = value
00121 
00122       return selection

Generated on Tue Nov 29 22:57:58 2016 for BOSS_7.0.2 by  doxygen 1.4.7