Skip to content

Commit ef30092

Browse files
committed
Added most of the mechanism to change the strips from color variations
to color constants (i.e. red constant, green constant, blue constant). But I haven't hooked this up yet because the UI gets more crowded and the arrows don't reflect the correct values. Added "Go to Black" and "Go to White" buttons.
1 parent 6403991 commit ef30092

File tree

1 file changed

+101
-20
lines changed

1 file changed

+101
-20
lines changed

Tools/pynche/StripViewer.py

Lines changed: 101 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,21 @@ def constant(numchips):
5757
numchips = numchips - 1
5858
return seq
5959

60+
# red variations, green+blue = cyan constant
61+
def constant_red_generator(numchips, red, green, blue):
62+
seq = constant(numchips)
63+
return map(None, [red] * numchips, seq, seq)
64+
65+
# green variations, red+blue = magenta constant
66+
def constant_green_generator(numchips, red, green, blue):
67+
seq = constant(numchips)
68+
return map(None, seq, [green] * numchips, seq)
69+
70+
# blue variations, red+green = yellow constant
71+
def constant_blue_generator(numchips, red, green, blue):
72+
seq = constant(numchips)
73+
return map(None, seq, seq, [blue] * numchips)
74+
6075
# red variations, green+blue = cyan constant
6176
def constant_cyan_generator(numchips, red, green, blue):
6277
seq = constant(numchips)
@@ -73,7 +88,6 @@ def constant_yellow_generator(numchips, red, green, blue):
7388
return map(None, [red] * numchips, [green] * numchips, seq)
7489

7590

76-
7791

7892
class LeftArrow:
7993
_ARROWWIDTH = 30
@@ -293,49 +307,90 @@ def update_yourself(self, red, green, blue):
293307
# move the arrows around
294308
self.__trackarrow(chip, (red, green, blue))
295309

310+
def set(self, label, generator):
311+
self.__canvas.itemconfigure(self.__label, text=label)
312+
self.__generator = generator
313+
296314

297315
class StripViewer:
298316
def __init__(self, switchboard, master=None):
299317
self.__sb = switchboard
300318
optiondb = switchboard.optiondb()
301-
# create a frame inside the master
302-
self.__frame = Frame(master, relief=RAISED, borderwidth=1)
303-
self.__frame.grid(row=1, column=0, columnspan=2, sticky='EW')
319+
# create a frame inside the master.
320+
frame = Frame(master, relief=RAISED, borderwidth=1)
321+
frame.grid(row=1, column=0, columnspan=2, sticky='NSEW')
322+
# create the options to be used later
304323
uwd = self.__uwdvar = BooleanVar()
305324
uwd.set(optiondb.get('UPWHILEDRAG', 0))
306325
hexp = self.__hexpvar = BooleanVar()
307326
hexp.set(optiondb.get('HEXSTRIP', 0))
308-
self.__reds = StripWidget(switchboard, self.__frame,
327+
# create the red, green, blue strips inside their own frame
328+
frame1 = Frame(frame)
329+
frame1.pack(expand=YES, fill=BOTH)
330+
self.__reds = StripWidget(switchboard, frame1,
309331
generator=constant_cyan_generator,
310332
axis=0,
311333
label='Red Variations',
312334
uwdvar=uwd, hexvar=hexp)
313335

314-
self.__greens = StripWidget(switchboard, self.__frame,
336+
self.__greens = StripWidget(switchboard, frame1,
315337
generator=constant_magenta_generator,
316338
axis=1,
317339
label='Green Variations',
318340
uwdvar=uwd, hexvar=hexp)
319341

320-
self.__blues = StripWidget(switchboard, self.__frame,
342+
self.__blues = StripWidget(switchboard, frame1,
321343
generator=constant_yellow_generator,
322344
axis=2,
323345
label='Blue Variations',
324346
uwdvar=uwd, hexvar=hexp)
325347

326-
frame = self.__frame1 = Frame(self.__frame)
327-
frame.pack()
328-
329-
self.__uwd = Checkbutton(frame,
330-
text='Update while dragging',
331-
variable=uwd)
332-
self.__uwd.grid(row=0, column=0, sticky=W)
333-
334-
self.__hex = Checkbutton(frame,
335-
text='Hexadecimal',
336-
variable=hexp,
337-
command=self.__togglehex)
338-
self.__hex.grid(row=1, column=0, sticky=W)
348+
# create a frame to contain the controls
349+
frame2 = Frame(frame)
350+
frame2.pack(expand=YES, fill=BOTH)
351+
frame2.columnconfigure(0, weight=20)
352+
frame2.columnconfigure(2, weight=20)
353+
354+
padx = 8
355+
356+
# create the black button
357+
blackbtn = Button(frame2,
358+
text='<- Black',
359+
command=self.__toblack)
360+
blackbtn.grid(row=0, column=0, rowspan=2, sticky=W, padx=padx)
361+
362+
# create the controls
363+
uwdbtn = Checkbutton(frame2,
364+
text='Update while dragging',
365+
variable=uwd)
366+
uwdbtn.grid(row=0, column=1, sticky=W)
367+
hexbtn = Checkbutton(frame2,
368+
text='Hexadecimal',
369+
variable=hexp,
370+
command=self.__togglehex)
371+
hexbtn.grid(row=1, column=1, sticky=W)
372+
373+
# XXX: ignore this feature for now; it doesn't work quite right yet
374+
375+
## gentypevar = self.__gentypevar = IntVar()
376+
## self.__variations = Radiobutton(frame,
377+
## text='Variations',
378+
## variable=gentypevar,
379+
## value=0,
380+
## command=self.__togglegentype)
381+
## self.__variations.grid(row=0, column=1, sticky=W)
382+
## self.__constants = Radiobutton(frame,
383+
## text='Constants',
384+
## variable=gentypevar,
385+
## value=1,
386+
## command=self.__togglegentype)
387+
## self.__constants.grid(row=1, column=1, sticky=W)
388+
389+
# create the white button
390+
whitebtn = Button(frame2,
391+
text='White ->',
392+
command=self.__towhite)
393+
whitebtn.grid(row=0, column=2, rowspan=2, sticky=E, padx=padx)
339394

340395
def update_yourself(self, red, green, blue):
341396
self.__reds.update_yourself(red, green, blue)
@@ -346,6 +401,32 @@ def __togglehex(self, event=None):
346401
red, green, blue = self.__sb.current_rgb()
347402
self.update_yourself(red, green, blue)
348403

404+
def __togglegentype(self, event=None):
405+
which = self.__gentypevar.get()
406+
if which == 0:
407+
self.__reds.set(label='Red Variations',
408+
generator=constant_cyan_generator)
409+
self.__greens.set(label='Green Variations',
410+
generator=constant_magenta_generator)
411+
self.__blues.set(label='Blue Variations',
412+
generator=constant_yellow_generator)
413+
elif which == 1:
414+
self.__reds.set(label='Red Constant',
415+
generator=constant_red_generator)
416+
self.__greens.set(label='Green Constant',
417+
generator=constant_green_generator)
418+
self.__blues.set(label='Blue Constant',
419+
generator=constant_blue_generator)
420+
else:
421+
assert 0
422+
self.__sb.update_views_current()
423+
424+
def __toblack(self, event=None):
425+
self.__sb.update_views(0, 0, 0)
426+
427+
def __towhite(self, event=None):
428+
self.__sb.update_views(255, 255, 255)
429+
349430
def save_options(self, optiondb):
350431
optiondb['UPWHILEDRAG'] = self.__uwdvar.get()
351432
optiondb['HEXSTRIP'] = self.__hexpvar.get()

0 commit comments

Comments
 (0)