From 46670a2d4238700a7b7244a1bcd83422c6690c80 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Thu, 1 Oct 1998 21:40:48 +0000 Subject: *** empty log message *** --- Tools/pynche/ListViewer.py | 98 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 Tools/pynche/ListViewer.py diff --git a/Tools/pynche/ListViewer.py b/Tools/pynche/ListViewer.py new file mode 100644 index 0000000..61b2f27 --- /dev/null +++ b/Tools/pynche/ListViewer.py @@ -0,0 +1,98 @@ +import sys +from Tkinter import * +from pynche import __version__ +import ColorDB + +class ListViewer: + def __init__(self, switchboard, parent=None): + self.__sb = switchboard + self.__lastbox = None + root = self.__root = Toplevel(parent, class_='Pynche') + root.protocol('WM_DELETE_WINDOW', self.__withdraw) + root.title('Pynche %s' % __version__) + root.iconname('Pynche Color List') + root.bind('', self.__quit) + root.bind('', self.__quit) + # + # create the canvas which holds everything, and its scrollbar + # + canvas = self.__canvas = Canvas(root, width=160, height=300) + self.__scrollbar = Scrollbar(root) + self.__scrollbar.pack(fill=Y, side=RIGHT) + canvas.pack(fill=BOTH, expand=1) + canvas.configure(yscrollcommand=(self.__scrollbar, 'set')) + self.__scrollbar.configure(command=(canvas, 'yview')) + # + # create all the buttons + colordb = switchboard.colordb() + row = 0 + names = colordb.all_names() + names.sort() + widest = 0 + bboxes = self.__bboxes = [] + for name in names: + exactcolor = ColorDB.triplet_to_rrggbb(colordb.find_byname(name)) + canvas.create_rectangle(5, row*20 + 5, + 20, row*20 + 20, + fill=exactcolor) + textid = canvas.create_text(25, row*20 + 13, + text=name, + anchor=W) + x1, y1, textend, y2 = canvas.bbox(textid) + boxid = canvas.create_rectangle(3, row*20+3, + textend+3, row*20 + 23, + outline='', + tags=(exactcolor,)) + canvas.tag_bind(boxid, '', self.__onselection) + bboxes.append(boxid) + if textend+3 > widest: + widest = textend+3 + row = row + 1 + canvheight = (row-1)*20 + 25 + canvas.config(scrollregion=(0, 0, 150, canvheight)) + for box in bboxes: + x1, y1, x2, y2 = canvas.coords(box) + canvas.coords(box, x1, y1, widest, y2) + + def __onselection(self, event=None): + canvas = self.__canvas + # find the current box + x = canvas.canvasx(event.x) + y = canvas.canvasy(event.y) + ids = canvas.find_overlapping(x, y, x, y) + for boxid in ids: + if boxid in self.__bboxes: + break + else: + print 'No box found!' + return + tags = canvas.gettags(boxid) + for t in tags: + if t[0] == '#': + break + else: + print 'No color tag found!' + return + red, green, blue = ColorDB.rrggbb_to_triplet(t) + self.__sb.update_views(red, green, blue) + + def __selectbox(self, boxid): + canvas = self.__canvas + # turn off the last box + if self.__lastbox: + canvas.itemconfigure(self.__lastbox, outline='') + self.__lastbox = boxid + canvas.itemconfigure(boxid, outline='black') + + def __quit(self, event=None): + sys.exit(0) + + def __withdraw(self, event=None): + self.__root.withdraw() + + def deiconify(self, event=None): + self.__root.deiconify() + + def update_yourself(self, red, green, blue): + colorname = ColorDB.triplet_to_rrggbb((red, green, blue)) + self.__selectbox(colorname) -- cgit v0.12