@@ -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
6176def 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
7892class 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
297315class 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