]> granicus.if.org Git - python/commitdiff
Lots of good UI working, but not yet update-while-dragging
authorBarry Warsaw <barry@python.org>
Thu, 1 Oct 1998 22:03:25 +0000 (22:03 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 1 Oct 1998 22:03:25 +0000 (22:03 +0000)
Tools/pynche/ListViewer.py

index 61b2f270aa665ed45b2e286f52440a3f3f43e62c..d347b0fc881cbca56fd1b2c38f8bbeccca80451e 100644 (file)
@@ -16,8 +16,10 @@ class ListViewer:
         #
         # create the canvas which holds everything, and its scrollbar
         #
-        canvas = self.__canvas = Canvas(root, width=160, height=300)
-        self.__scrollbar = Scrollbar(root)
+        frame = self.__frame = Frame(root)
+        frame.pack()
+        canvas = self.__canvas = Canvas(frame, width=160, height=300)
+        self.__scrollbar = Scrollbar(frame)
         self.__scrollbar.pack(fill=Y, side=RIGHT)
         canvas.pack(fill=BOTH, expand=1)
         canvas.configure(yscrollcommand=(self.__scrollbar, 'set'))
@@ -43,7 +45,8 @@ class ListViewer:
                                             textend+3, row*20 + 23,
                                             outline='',
                                             tags=(exactcolor,))
-            canvas.tag_bind(boxid, '<ButtonPress>', self.__onselection)
+            canvas.bind('<ButtonRelease>', self.__onrelease)
+            canvas.bind('<Motion>', self.__onmotion)
             bboxes.append(boxid)
             if textend+3 > widest:
                 widest = textend+3
@@ -53,8 +56,16 @@ class ListViewer:
         for box in bboxes:
             x1, y1, x2, y2 = canvas.coords(box)
             canvas.coords(box, x1, y1, widest, y2)
+        #
+        # Update while dragging?
+        #
+        self.__uwd = BooleanVar()
+        self.__uwdbtn = Checkbutton(root,
+                                    text='Update while dragging',
+                                    variable=self.__uwd)
+        self.__uwdbtn.pack()
 
-    def __onselection(self, event=None):
+    def __onmotion(self, event=None):
         canvas = self.__canvas
         # find the current box
         x = canvas.canvasx(event.x)
@@ -64,17 +75,12 @@ class ListViewer:
             if boxid in self.__bboxes:
                 break
         else:
-            print 'No box found!'
+##            print 'No box found!'
             return
-        tags = canvas.gettags(boxid)
-        for t in tags:
-            if t[0] == '#':
-                break
+        if self.__uwd.get():
+            self.__onrelease(event)
         else:
-            print 'No color tag found!'
-            return
-        red, green, blue = ColorDB.rrggbb_to_triplet(t)
-        self.__sb.update_views(red, green, blue)
+            self.__selectbox(boxid)
 
     def __selectbox(self, boxid):
         canvas = self.__canvas
@@ -84,6 +90,18 @@ class ListViewer:
         self.__lastbox = boxid
         canvas.itemconfigure(boxid, outline='black')
 
+    def __onrelease(self, event=None):
+        if self.__lastbox:
+            tags = self.__canvas.gettags(self.__lastbox)
+            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 __quit(self, event=None):
         sys.exit(0)