00001
00002
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
00015 import traceback
00016 traceback.print_tb( sys.exc_traceback )
00017
00018
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
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
00080 if master == None:
00081 master = Tkinter.Tk()
00082
00083
00084 Tkinter.Frame.__init__( self, master )
00085 self.master.title( 'Gaudi Object Browser' )
00086
00087
00088 initTreeItemsDispatch()
00089
00090
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
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
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