@@ -57,6 +57,21 @@ def constant(numchips):
57
57
numchips = numchips - 1
58
58
return seq
59
59
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
+
60
75
# red variations, green+blue = cyan constant
61
76
def constant_cyan_generator (numchips , red , green , blue ):
62
77
seq = constant (numchips )
@@ -73,7 +88,6 @@ def constant_yellow_generator(numchips, red, green, blue):
73
88
return map (None , [red ] * numchips , [green ] * numchips , seq )
74
89
75
90
76
-
77
91
78
92
class LeftArrow :
79
93
_ARROWWIDTH = 30
@@ -293,49 +307,90 @@ def update_yourself(self, red, green, blue):
293
307
# move the arrows around
294
308
self .__trackarrow (chip , (red , green , blue ))
295
309
310
+ def set (self , label , generator ):
311
+ self .__canvas .itemconfigure (self .__label , text = label )
312
+ self .__generator = generator
313
+
296
314
297
315
class StripViewer :
298
316
def __init__ (self , switchboard , master = None ):
299
317
self .__sb = switchboard
300
318
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
304
323
uwd = self .__uwdvar = BooleanVar ()
305
324
uwd .set (optiondb .get ('UPWHILEDRAG' , 0 ))
306
325
hexp = self .__hexpvar = BooleanVar ()
307
326
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 ,
309
331
generator = constant_cyan_generator ,
310
332
axis = 0 ,
311
333
label = 'Red Variations' ,
312
334
uwdvar = uwd , hexvar = hexp )
313
335
314
- self .__greens = StripWidget (switchboard , self . __frame ,
336
+ self .__greens = StripWidget (switchboard , frame1 ,
315
337
generator = constant_magenta_generator ,
316
338
axis = 1 ,
317
339
label = 'Green Variations' ,
318
340
uwdvar = uwd , hexvar = hexp )
319
341
320
- self .__blues = StripWidget (switchboard , self . __frame ,
342
+ self .__blues = StripWidget (switchboard , frame1 ,
321
343
generator = constant_yellow_generator ,
322
344
axis = 2 ,
323
345
label = 'Blue Variations' ,
324
346
uwdvar = uwd , hexvar = hexp )
325
347
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 )
339
394
340
395
def update_yourself (self , red , green , blue ):
341
396
self .__reds .update_yourself (red , green , blue )
@@ -346,6 +401,32 @@ def __togglehex(self, event=None):
346
401
red , green , blue = self .__sb .current_rgb ()
347
402
self .update_yourself (red , green , blue )
348
403
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
+
349
430
def save_options (self , optiondb ):
350
431
optiondb ['UPWHILEDRAG' ] = self .__uwdvar .get ()
351
432
optiondb ['HEXSTRIP' ] = self .__hexpvar .get ()
0 commit comments