"""Applet that lets the user look in the cache. NB This uses secret knowledge about Grail internals that may change or become inaccessible to applets. Still, it's a cool applet! """ from Tkinter import * import tktools import string class CacheLook: def __init__(self, parent): self.parent=parent self.viewer = parent.grail_viewer self.browser = parent.grail_browser self.app = parent.grail_app self.keys = self.app.get_cache_keys() self.keys.sort() self.list, self.frame = tktools.make_list_box( parent, width=60, height=min(20, len(self.keys)+1), hbar=1, vbar=1) self.list.config(exportselection=0) for key in self.keys: self.list.insert(END, key) self.new_browser = None self.list.bind('', self.open_item_event) self.control_frame = Frame(self.parent) self.control_frame.pack(expand=1, fill=BOTH) self.refresh_button = Button(self.control_frame, text="Refresh List", command=self.refresh_command) self.refresh_button.pack(side=RIGHT) self.view_button = Button(self.control_frame, text="View", command=self.view_command) self.view_button.pack(side=LEFT) self.view_source_button = Button(self.control_frame, text="View Source", command=self.view_source_command) self.view_source_button.pack(side=LEFT) def view_command(self): self.open_item() def view_source_command(self): self.open_item(show_source=1) def refresh_command(self): self.refresh() def open_item_event(self, event): self.open_item() def open_item(self, show_source=0): items = self.list.curselection() if not items: self.list.bell() return i = string.atoi(items[0]) url = self.list.get(i) if not self.new_browser or not self.new_browser.valid(): self.new_browser = self.browser.new_command() self.new_browser.context.load(url, show_source=show_source) def check(self, event=None): keys = self.app.get_cache_keys() keys.sort() if keys != self.keys: self.refresh(keys=keys) def refresh(self, event=None, keys=None): if keys: self.keys = keys else: self.keys = self.app.get_cache_keys() self.keys.sort() self.list.delete(0, END) for key in self.keys: self.list.insert(END, key)