]> granicus.if.org Git - python/commitdiff
*** empty log message ***
authorBarry Warsaw <barry@python.org>
Thu, 1 Oct 1998 21:40:48 +0000 (21:40 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 1 Oct 1998 21:40:48 +0000 (21:40 +0000)
Tools/pynche/ListViewer.py [new file with mode: 0644]

diff --git a/Tools/pynche/ListViewer.py b/Tools/pynche/ListViewer.py
new file mode 100644 (file)
index 0000000..61b2f27
--- /dev/null
@@ -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('<Alt-q>', self.__quit)
+        root.bind('<Alt-Q>', 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, '<ButtonPress>', 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)