Kaydet (Commit) ee6d8a5b authored tarafından Barry Warsaw's avatar Barry Warsaw

No update while dragging still tracks the arrows

üst 96c07fef
...@@ -16,6 +16,11 @@ proc setcolor {canv colors} { ...@@ -16,6 +16,11 @@ proc setcolor {canv colors} {
} }
''' '''
# Tcl event types
BTNDOWN = 4
BTNUP = 5
BTNDRAG = 6
class LeftArrow: class LeftArrow:
...@@ -89,6 +94,8 @@ class StripWidget(Pmw.MegaWidget): ...@@ -89,6 +94,8 @@ class StripWidget(Pmw.MegaWidget):
_NUMCHIPS = 40 _NUMCHIPS = 40
def __init__(self, parent=None, **kw): def __init__(self, parent=None, **kw):
self.__lastchip = None
options = (('color', (128, 128, 128), self.__set_color), options = (('color', (128, 128, 128), self.__set_color),
('delegate', None, self.__set_delegate), ('delegate', None, self.__set_delegate),
('chipwidth', self._CHIPWIDTH, Pmw.INITOPT), ('chipwidth', self._CHIPWIDTH, Pmw.INITOPT),
...@@ -122,8 +129,9 @@ class StripWidget(Pmw.MegaWidget): ...@@ -122,8 +129,9 @@ class StripWidget(Pmw.MegaWidget):
) )
canvas.pack() canvas.pack()
canvas.bind('<ButtonPress-1>', self.__select_chip)
canvas.bind('<ButtonRelease-1>', self.__select_chip) canvas.bind('<ButtonRelease-1>', self.__select_chip)
canvas.bind('<B1-Motion>', self.__drag_select_chip) canvas.bind('<B1-Motion>', self.__select_chip)
# Load a proc into the Tcl interpreter. This is used in the # Load a proc into the Tcl interpreter. This is used in the
# set_color() method to speed up setting the chip colors. # set_color() method to speed up setting the chip colors.
...@@ -175,46 +183,33 @@ class StripWidget(Pmw.MegaWidget): ...@@ -175,46 +183,33 @@ class StripWidget(Pmw.MegaWidget):
return (x1 + x0) / 2.0 return (x1 + x0) / 2.0
def __select_chip(self, event=None): def __select_chip(self, event=None):
if self.__delegate: if self.__delegate:
x = event.x x = event.x
y = event.y y = event.y
canvas = self.__canvas canvas = self.__canvas
chip = canvas.find_overlapping(x, y, x, y) chip = canvas.find_overlapping(x, y, x, y)
if chip and (1 <= chip[0] <= self.__numchips): if chip and (1 <= chip[0] <= self.__numchips):
color = self.__chips[chip[0]-1] color = self.__chips[chip[0]-1]
rgbtuple = ColorDB.rrggbb_to_triplet(color) rgbtuple = ColorDB.rrggbb_to_triplet(color)
self.__delegate.set_color(self, rgbtuple) etype = int(event.type)
if (etype == BTNUP or self.__update_while_dragging):
def __drag_select_chip(self, event=None): # update everyone
if self.__update_while_dragging: self.__delegate.set_color(self, rgbtuple)
self.__select_chip(event) else:
# just track the arrows
self.__trackarrow(chip[0], rgbtuple)
def __set_delegate(self): def __set_delegate(self):
self.__delegate = self['delegate'] self.__delegate = self['delegate']
# def __trackarrow(self, chip, rgbtuple):
# public interface # invert the last chip
# if self.__lastchip is not None:
color = self.__canvas.itemcget(self.__lastchip, 'fill')
def set_color(self, obj, rgbtuple): self.__canvas.itemconfigure(self.__lastchip, outline=color)
red, green, blue = rgbtuple self.__lastchip = chip
assert self.__generator
i = 1
chip = 0
chips = self.__chips = []
tclcmd = []
tk = self.__canvas.tk
for t in self.__generator(self.__numchips, rgbtuple):
rrggbb = ColorDB.triplet_to_rrggbb(t)
chips.append(rrggbb)
tred, tgreen, tblue = t
if tred <= red and tgreen <= green and tblue <= blue:
chip = i
i = i + 1
# call the raw tcl script
colors = string.join(chips)
tk.eval('setcolor %s {%s}' % (self.__canvas._w, colors))
# get the arrow's text # get the arrow's text
coloraxis = rgbtuple[self.__axis] coloraxis = rgbtuple[self.__axis]
...@@ -240,5 +235,33 @@ class StripWidget(Pmw.MegaWidget): ...@@ -240,5 +235,33 @@ class StripWidget(Pmw.MegaWidget):
outline = 'black' outline = 'black'
self.__canvas.itemconfigure(chip, outline=outline) self.__canvas.itemconfigure(chip, outline=outline)
#
# public interface
#
def set_color(self, obj, rgbtuple):
red, green, blue = rgbtuple
assert self.__generator
i = 1
chip = 0
chips = self.__chips = []
tclcmd = []
tk = self.__canvas.tk
for t in self.__generator(self.__numchips, rgbtuple):
rrggbb = ColorDB.triplet_to_rrggbb(t)
chips.append(rrggbb)
tred, tgreen, tblue = t
if tred <= red and tgreen <= green and tblue <= blue:
chip = i
i = i + 1
# call the raw tcl script
colors = string.join(chips)
tk.eval('setcolor %s {%s}' % (self.__canvas._w, colors))
# move the arrows around
self.__trackarrow(chip, rgbtuple)
def set_update_while_dragging(self, flag): def set_update_while_dragging(self, flag):
self.__update_while_dragging = flag self.__update_while_dragging = flag
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment