diff --git a/Tools/idle/ClassBrowser.py b/Tools/idle/ClassBrowser.py new file mode 100644 index 00000000000..289d6f6716d --- /dev/null +++ b/Tools/idle/ClassBrowser.py @@ -0,0 +1,70 @@ +from Tkinter import * +import string +import pyclbr + +class ClassBrowser: + + def __init__(self, root, name): + try: + dict = pyclbr.readmodule(name) + except ImportError, msg: + tkMessageBox.showerror("Import error", str(msg), parent=root) + return + if not dict: + tkMessageBox.showerror("Nothing to browse", + "Module %s defines no classes" % name, parent=root) + return + self.root = root + self.top = top = Toplevel(root) + # Create help label + self.helplabel = Label(top, + text="Classes in module %s" % name, + borderwidth=2, relief="groove") + self.helplabel.pack(fill="x") + # Create top frame, with scrollbar and listbox + self.topframe = Frame(top) + self.topframe.pack(fill="both", expand=1) + self.vbar = Scrollbar(self.topframe, name="vbar") + self.vbar.pack(side="right", fill="y") + self.listbox = Listbox(self.topframe, exportselection=0, + takefocus=1, width=60) + self.listbox.pack(expand=1, fill="both") + # Tie listbox and scrollbar together + self.vbar["command"] = self.listbox.yview + self.listbox["yscrollcommand"] = self.vbar.set + # Bind events to the list box + self.listbox.bind("", self.click_event) + self.listbox.bind("", self.double_click_event) + ##self.listbox.bind("", self.popup_event) + self.listbox.bind("", self.up_event) + self.listbox.bind("", self.down_event) + # Load the classes + self.loadclasses(dict) + + def loadclasses(self, dict): + items = dict.items() + items.sort() + l = self.listbox + for key, value in items: + s = key + if value.super: + super = [] + for sup in value.super: + name = sup.name + if sup.module != value.module: + name = "%s.%s" % (sup.module, name) + super.append(name) + s = s + "(%s)" % string.join(super, ", ") + l.insert(END, s) + + def click_event(self, event): + pass + + def double_click_event(self, event): + pass + + def up_event(self, event): + pass + + def down_event(self, event): + pass