Browse Source

*** empty log message ***

Mark Mine 24 years ago
parent
commit
42add2a951
1 changed files with 46 additions and 9 deletions
  1. 46 9
      direct/src/tkpanels/Inspector.py

+ 46 - 9
direct/src/tkpanels/Inspector.py

@@ -96,6 +96,9 @@ class Inspector:
 
 
     def getLastPartNumber(self):
     def getLastPartNumber(self):
         return self.lastPartNumber
         return self.lastPartNumber
+
+    def selectedPart(self):
+        return self.partNumber(self.getLastPartNumber())
         
         
     def namedParts(self):
     def namedParts(self):
         return dir(self.object)
         return dir(self.object)
@@ -224,6 +227,9 @@ class InspectorWindow:
     def topInspector(self):
     def topInspector(self):
         return self.inspectors[len(self.inspectors) - 1]
         return self.inspectors[len(self.inspectors) - 1]
 
 
+    def selectedPart(self):
+        return self.topInspector().selectedPart()
+
     def inspectedObject(self):
     def inspectedObject(self):
         return self.topInspector().object
         return self.topInspector().object
 
 
@@ -239,7 +245,7 @@ class InspectorWindow:
         # Paned widget for dividing two halves
         # Paned widget for dividing two halves
         self.framePane = Pmw.PanedWidget(self.top, orient = HORIZONTAL)
         self.framePane = Pmw.PanedWidget(self.top, orient = HORIZONTAL)
         self.createListWidget()
         self.createListWidget()
-        self.createTextWidget()
+        self.createTextWidgets()
         self.framePane.pack(expand = 1, fill = BOTH)
         self.framePane.pack(expand = 1, fill = BOTH)
 
 
     def setTitle(self):
     def setTitle(self):
@@ -264,13 +270,22 @@ class InspectorWindow:
         listbox.bind('<KeyRelease-Right>', lambda e, s = self: s.dive())
         listbox.bind('<KeyRelease-Right>', lambda e, s = self: s.dive())
         listbox.bind('<Return>',  self.popOrDive)
         listbox.bind('<Return>',  self.popOrDive)
 
 
-    def createTextWidget(self):
-        textFrame = self.framePane.add('text')
+    def createTextWidgets(self):
+        textWidgetsFrame = self.framePane.add('textWidgets')
+        self.textPane = Pmw.PanedWidget(textWidgetsFrame, orient = VERTICAL)
+        textFrame = self.textPane.add('text', size = 200)
         self.textWidget = Pmw.ScrolledText(
         self.textWidget = Pmw.ScrolledText(
-            textFrame, vscrollmode = 'static')
+            textFrame, vscrollmode = 'static', text_state = 'disabled')
         self.textWidget.pack(fill=BOTH, expand=1)
         self.textWidget.pack(fill=BOTH, expand=1)
-        # self.textWidget.grid(row=0, column=1, columnspan=2, sticky=N+W+S+E)
-
+        commandFrame = self.textPane.add('command')
+        self.commandWidget = Pmw.ScrolledText(
+            commandFrame, vscrollmode = 'static')
+        self.commandWidget.insert(1.0, '>>> ')
+        self.commandWidget.pack(fill = BOTH, expand = 1)
+        self.commandWidget.component('text').bind(
+            '<KeyRelease-Return>', self.evalCommand)
+        self.textPane.pack(expand = 1, fill = BOTH)
+        
     def createMenus(self):
     def createMenus(self):
         self.menuBar = Menu(self.top)
         self.menuBar = Menu(self.top)
         self.top.config(menu=self.menuBar)
         self.top.config(menu=self.menuBar)
@@ -295,17 +310,36 @@ class InspectorWindow:
         if partNumber == None:
         if partNumber == None:
             partNumber = 0
             partNumber = 0
         string = self.topInspector().stringForPartNumber(partNumber)
         string = self.topInspector().stringForPartNumber(partNumber)
+        self.textWidget.component('text').configure(state = 'normal')
         self.textWidget.delete('1.0', END)
         self.textWidget.delete('1.0', END)
         self.textWidget.insert(END, string)
         self.textWidget.insert(END, string)
+        self.textWidget.component('text').configure(state = 'disabled')
 
 
     def popOrDive(self, event):
     def popOrDive(self, event):
-        '''The list has been double-clicked. If the selection is 'self' then pop,
-        otherwise dive into the selected part'''
+        """The list has been double-clicked. If the selection is 'self' then pop,
+        otherwise dive into the selected part"""
         if self.selectedIndex() == 0:
         if self.selectedIndex() == 0:
             self.pop()
             self.pop()
         else:
         else:
             self.dive()
             self.dive()
 
 
+    def evalCommand(self, event):
+        """Eval text in commandWidget"""
+        insertPt = self.commandWidget.index(INSERT)
+        commandLineStart = self.commandWidget.search(
+            '>>> ', INSERT, backwards = 1)
+        if commandLineStart:
+            commandStart = self.commandWidget.index(
+                commandLineStart + ' + 4 chars')
+            command = self.commandWidget.get(commandStart,
+                                             commandStart + ' lineend')
+            if command:
+                partDict = { 'this' : self.selectedPart(),
+                             'object' : self.topInspector().object }
+                result = eval(command, partDict)
+                self.commandWidget.insert(INSERT, `result` + '\n>>> ')
+                self.commandWidget.see(INSERT)
+
     # Menu Events
     # Menu Events
     def inspect(self):
     def inspect(self):
         inspector = self.inspectorForSelectedPart()
         inspector = self.inspectorForSelectedPart()
@@ -346,7 +380,10 @@ class InspectorWindow:
         help.title("Inspector Help")
         help.title("Inspector Help")
         frame = Frame(help)
         frame = Frame(help)
         frame.pack()
         frame.pack()
-        text = Label(frame, text="Double click an instance variable to dive down\nDouble click self to pop back up")
+        text = Label(
+            frame, justify = LEFT,
+            text = "ListBox shows selected object's attributes\nDouble click or use right arrow on an instance variable to dive down.\nDouble click self or use left arrow to pop back up.\nUse up and down arrow keys to move from item to item in the current level.\n\nnResult box (upper right) shows current value of selected item\n\nCommand box (lower right) is used to evaluate python commands\nLocal variables 'object' and 'this' are defined as the current object being inspected\nand the current attribute selected."
+            )
         text.pack()
         text.pack()
 
 
     #Private
     #Private