diff options
author | Guido van Rossum <guido@python.org> | 2003-04-29 11:15:38 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2003-04-29 11:15:38 (GMT) |
commit | 767d9fedc797fcddb16cdba8ce0268b503ee13d1 (patch) | |
tree | 2172c2452dc9b68e0b3b55ea3fde621771ca8f8f /Tools/idle/MultiScrolledLists.py | |
parent | 57cd21fde285d25021ee978cd09ed58159166bf8 (diff) | |
download | cpython-767d9fedc797fcddb16cdba8ce0268b503ee13d1.zip cpython-767d9fedc797fcddb16cdba8ce0268b503ee13d1.tar.gz cpython-767d9fedc797fcddb16cdba8ce0268b503ee13d1.tar.bz2 |
Add back files that were accidentally deleted on the trunk rather than
on the idlefork-merge-branch as intended.
Diffstat (limited to 'Tools/idle/MultiScrolledLists.py')
-rw-r--r-- | Tools/idle/MultiScrolledLists.py | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/Tools/idle/MultiScrolledLists.py b/Tools/idle/MultiScrolledLists.py new file mode 100644 index 0000000..6398b86 --- /dev/null +++ b/Tools/idle/MultiScrolledLists.py @@ -0,0 +1,137 @@ +# One or more ScrolledLists with HSeparators between them. +# There is a hierarchical relationship between them: +# the right list displays the substructure of the selected item +# in the left list. + +from Tkinter import * +from WindowList import ListedToplevel +from Separator import HSeparator +from ScrolledList import ScrolledList + +class MultiScrolledLists: + + def __init__(self, root, nlists=2): + assert nlists >= 1 + self.root = root + self.nlists = nlists + self.path = [] + # create top + self.top = top = ListedToplevel(root) + top.protocol("WM_DELETE_WINDOW", self.close) + top.bind("<Escape>", self.close) + self.settitle() + # create frames and separators in between + self.frames = [] + self.separators = [] + last = top + for i in range(nlists-1): + sepa = HSeparator(last) + self.separators.append(sepa) + frame, last = sepa.parts() + self.frames.append(frame) + self.frames.append(last) + # create labels and lists + self.labels = [] + self.lists = [] + for i in range(nlists): + frame = self.frames[i] + label = Label(frame, text=self.subtitle(i), + relief="groove", borderwidth=2) + label.pack(fill="x") + self.labels.append(label) + list = ScrolledList(frame, width=self.width(i), + height=self.height(i)) + self.lists.append(list) + list.on_select = \ + lambda index, i=i, self=self: self.on_select(index, i) + list.on_double = \ + lambda index, i=i, self=self: self.on_double(index, i) + # fill leftmost list (rest get filled on demand) + self.fill(0) + # XXX one after_idle isn't enough; two are... + top.after_idle(self.call_pack_propagate_1) + + def call_pack_propagate_1(self): + self.top.after_idle(self.call_pack_propagate) + + def call_pack_propagate(self): + for frame in self.frames: + frame.pack_propagate(0) + + def close(self, event=None): + self.top.destroy() + + def settitle(self): + short = self.shorttitle() + long = self.longtitle() + if short and long: + title = short + " - " + long + elif short: + title = short + elif long: + title = long + else: + title = "Untitled" + icon = short or long or title + self.top.wm_title(title) + self.top.wm_iconname(icon) + + def longtitle(self): + # override this + return "Multi Scrolled Lists" + + def shorttitle(self): + # override this + return None + + def width(self, i): + # override this + return 20 + + def height(self, i): + # override this + return 10 + + def subtitle(self, i): + # override this + return "Column %d" % i + + def fill(self, i): + for k in range(i, self.nlists): + self.lists[k].clear() + self.labels[k].configure(text=self.subtitle(k)) + list = self.lists[i] + l = self.items(i) + for s in l: + list.append(s) + + def on_select(self, index, i): + item = self.lists[i].get(index) + del self.path[i:] + self.path.append(item) + if i+1 < self.nlists: + self.fill(i+1) + + def items(self, i): + # override this + l = [] + for k in range(10): + s = str(k) + if i > 0: + s = self.path[i-1] + "." + s + l.append(s) + return l + + def on_double(self, index, i): + pass + + +def main(): + root = Tk() + quit = Button(root, text="Exit", command=root.destroy) + quit.pack() + MultiScrolledLists(root, 4) + root.mainloop() + +if __name__ == "__main__": + main() |