Mercurial > cpython-lru_cache-weakref
annotate Lib/idlelib/ObjectBrowser.py @ 79691:05c8928362ee
Merge __next__ method link fixes with 3.3.
| author | Ezio Melotti <ezio.melotti@gmail.com> |
|---|---|
| date | Fri, 12 Oct 2012 13:46:37 +0300 |
| parents | ef4cca2d6171 |
| children |
| rev | line source |
|---|---|
| 13975 | 1 # XXX TO DO: |
| 2 # - popup menu | |
| 3 # - support partial or total redisplay | |
| 4 # - more doc strings | |
| 5 # - tooltips | |
| 6 | |
| 7 # object browser | |
| 8 | |
| 9 # XXX TO DO: | |
| 10 # - for classes/modules, add "open source" to object browser | |
| 11 | |
|
42714
2ec16b6b4d04
Switch to absolute imports to support direct execution of modules. Many
Kurt B. Kaiser <kbk@shore.net>
parents:
42324
diff
changeset
|
12 from idlelib.TreeWidget import TreeItem, TreeNode, ScrolledCanvas |
| 13975 | 13 |
|
47088
4f1a079df427
Rename the repr module to reprlib.
Alexandre Vassalotti <alexandre@peadrop.com>
parents:
42725
diff
changeset
|
14 from reprlib import Repr |
| 13975 | 15 |
| 16 myrepr = Repr() | |
| 17 myrepr.maxstring = 100 | |
| 18 myrepr.maxother = 100 | |
| 19 | |
| 20 class ObjectTreeItem(TreeItem): | |
| 21 def __init__(self, labeltext, object, setfunction=None): | |
| 22 self.labeltext = labeltext | |
| 23 self.object = object | |
| 24 self.setfunction = setfunction | |
| 25 def GetLabelText(self): | |
| 26 return self.labeltext | |
| 27 def GetText(self): | |
| 28 return myrepr.repr(self.object) | |
| 29 def GetIconName(self): | |
| 30 if not self.IsExpandable(): | |
| 31 return "python" | |
| 32 def IsEditable(self): | |
| 33 return self.setfunction is not None | |
| 34 def SetText(self, text): | |
| 35 try: | |
| 36 value = eval(text) | |
| 37 self.setfunction(value) | |
| 38 except: | |
| 39 pass | |
| 40 else: | |
| 41 self.object = value | |
| 42 def IsExpandable(self): | |
| 43 return not not dir(self.object) | |
| 44 def GetSubList(self): | |
| 45 keys = dir(self.object) | |
| 46 sublist = [] | |
| 47 for key in keys: | |
| 48 try: | |
| 49 value = getattr(self.object, key) | |
| 50 except AttributeError: | |
| 51 continue | |
| 52 item = make_objecttreeitem( | |
| 53 str(key) + " =", | |
| 54 value, | |
| 55 lambda value, key=key, object=self.object: | |
| 56 setattr(object, key, value)) | |
| 57 sublist.append(item) | |
| 58 return sublist | |
| 59 | |
| 60 class ClassTreeItem(ObjectTreeItem): | |
| 61 def IsExpandable(self): | |
| 25296 | 62 return True |
| 13975 | 63 def GetSubList(self): |
| 64 sublist = ObjectTreeItem.GetSubList(self) | |
| 65 if len(self.object.__bases__) == 1: | |
| 66 item = make_objecttreeitem("__bases__[0] =", | |
| 67 self.object.__bases__[0]) | |
| 68 else: | |
| 69 item = make_objecttreeitem("__bases__ =", self.object.__bases__) | |
| 70 sublist.insert(0, item) | |
| 71 return sublist | |
| 72 | |
| 73 class AtomicObjectTreeItem(ObjectTreeItem): | |
| 74 def IsExpandable(self): | |
| 75 return 0 | |
| 76 | |
| 77 class SequenceTreeItem(ObjectTreeItem): | |
| 78 def IsExpandable(self): | |
| 79 return len(self.object) > 0 | |
| 80 def keys(self): | |
| 81 return range(len(self.object)) | |
| 82 def GetSubList(self): | |
| 83 sublist = [] | |
| 84 for key in self.keys(): | |
| 85 try: | |
| 86 value = self.object[key] | |
| 87 except KeyError: | |
| 88 continue | |
| 89 def setfunction(value, key=key, object=self.object): | |
| 90 object[key] = value | |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
25296
diff
changeset
|
91 item = make_objecttreeitem("%r:" % (key,), value, setfunction) |
| 13975 | 92 sublist.append(item) |
| 93 return sublist | |
| 94 | |
| 95 class DictTreeItem(SequenceTreeItem): | |
| 96 def keys(self): | |
|
42725
fa9a40ef0780
Conform to py3k dict.{keys, items, values} with some advice from 2b3
Kurt B. Kaiser <kbk@shore.net>
parents:
42714
diff
changeset
|
97 keys = list(self.object.keys()) |
| 13975 | 98 try: |
| 99 keys.sort() | |
| 100 except: | |
| 101 pass | |
| 102 return keys | |
| 103 | |
| 104 dispatch = { | |
|
41986
6464cc638faa
Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41437
diff
changeset
|
105 int: AtomicObjectTreeItem, |
|
6464cc638faa
Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41437
diff
changeset
|
106 float: AtomicObjectTreeItem, |
|
6464cc638faa
Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41437
diff
changeset
|
107 str: AtomicObjectTreeItem, |
|
6464cc638faa
Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41437
diff
changeset
|
108 tuple: SequenceTreeItem, |
|
6464cc638faa
Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41437
diff
changeset
|
109 list: SequenceTreeItem, |
|
6464cc638faa
Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41437
diff
changeset
|
110 dict: DictTreeItem, |
|
6464cc638faa
Merged revisions 55795-55816 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41437
diff
changeset
|
111 type: ClassTreeItem, |
| 13975 | 112 } |
| 113 | |
| 114 def make_objecttreeitem(labeltext, object, setfunction=None): | |
| 115 t = type(object) | |
|
39634
d91585b2cdc1
Remove has_key() references from idlelib. IDLE still doesn't run due
Guido van Rossum <guido@python.org>
parents:
31515
diff
changeset
|
116 if t in dispatch: |
| 13975 | 117 c = dispatch[t] |
| 118 else: | |
| 119 c = ObjectTreeItem | |
| 120 return c(labeltext, object, setfunction) | |
| 121 | |
| 122 # Test script | |
| 123 | |
|
18550
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
124 def _test(): |
| 13975 | 125 import sys |
|
47130
ef4cca2d6171
Tkinter, step 2: adapt imports.
Georg Brandl <georg@python.org>
parents:
47088
diff
changeset
|
126 from tkinter import Tk |
|
18550
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
127 root = Tk() |
| 13975 | 128 root.configure(bd=0, bg="yellow") |
| 129 root.focus_set() | |
| 130 sc = ScrolledCanvas(root, bg="white", highlightthickness=0, takefocus=1) | |
| 131 sc.frame.pack(expand=1, fill="both") | |
| 132 item = make_objecttreeitem("sys", sys) | |
| 133 node = TreeNode(sc.canvas, None, item) | |
|
18550
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
134 node.update() |
|
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
135 root.mainloop() |
| 13975 | 136 |
| 137 if __name__ == '__main__': | |
|
18550
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
138 _test() |
