py-cvs-2001_07_13 (Rev 1.16) merge

"Refactored, with some future plans in mind. This now uses the new
gotofileline() method defined in FileList.py"  --GvR
diff --git a/Lib/idlelib/StackViewer.py b/Lib/idlelib/StackViewer.py
index ab09db0..d70658b 100644
--- a/Lib/idlelib/StackViewer.py
+++ b/Lib/idlelib/StackViewer.py
@@ -1,24 +1,27 @@
+import os
+import sys
 import string
-from Tkinter import *
 import linecache
 
 from TreeWidget import TreeNode, TreeItem, ScrolledCanvas
 from ObjectBrowser import ObjectTreeItem, make_objecttreeitem
 from OldStackViewer import StackViewer, NamespaceViewer
 
-def StackBrowser(root, flist=None, stack=None):
-    top = Toplevel(root)
+def StackBrowser(root, flist=None, tb=None, top=None):
+    if top is None:
+        from Tkinter import Toplevel
+        top = Toplevel(root)
     sc = ScrolledCanvas(top, bg="white", highlightthickness=0)
     sc.frame.pack(expand=1, fill="both")
-    item = StackTreeItem(flist)
+    item = StackTreeItem(flist, tb)
     node = TreeNode(sc.canvas, None, item)
     node.expand()
 
 class StackTreeItem(TreeItem):
 
-    def __init__(self, flist=None):
+    def __init__(self, flist=None, tb=None):
         self.flist = flist
-        self.stack = get_stack()
+        self.stack = get_stack(tb)
         self.text = get_exception()
 
     def GetText(self):
@@ -71,8 +74,8 @@
         if self.flist:
             frame, lineno = self.info
             filename = frame.f_code.co_filename
-            edit = self.flist.open(filename)
-            edit.gotoline(lineno)
+            if os.path.isfile(filename):
+                self.flist.gotofileline(filename, lineno)
 
 class VariablesTreeItem(ObjectTreeItem):
 
@@ -129,7 +132,16 @@
         s = s + ": " + str(value)
     return s
 
-if __name__ == "__main__":
+def _test():
+    try:
+        import testcode
+        reload(testcode)
+    except:
+        sys.last_type, sys.last_value, sys.last_traceback = sys.exc_info()
+    from Tkinter import Tk
     root = Tk()
-    root.withdraw()
-    StackBrowser(root)
+    StackBrowser(None, top=root)
+    root.mainloop()
+
+if __name__ == "__main__":
+    _test()