annotate flax/dmxchanedit.py @ 15:c76b62eccdec

put **kw back in, they now go to the scale and can override the defaults. put **kw back in, they now go to the scale and can override the defaults. for our purposes, we probably want to edit the defaults so we don't have them in every call.
author dmcc
date Sun, 07 Jul 2002 06:18:40 +0000
parents 45b12307c695
children 6dfe10a54fc4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 """
45b12307c695 Initial revision
drewp
parents:
diff changeset
2
45b12307c695 Initial revision
drewp
parents:
diff changeset
3 widget to show all dmx channel levels and allow editing. levels might
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 not actually match what dmxserver is outputting.
45b12307c695 Initial revision
drewp
parents:
diff changeset
5
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 """
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 from __future__ import nested_scopes,division
45b12307c695 Initial revision
drewp
parents:
diff changeset
8 import Tkinter as tk
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 import sys
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 sys.path.append("../light8")
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 import Patch
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 from uihelpers import make_frame, colorlabel, eventtoparent
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 from dispatch import dispatcher
45b12307c695 Initial revision
drewp
parents:
diff changeset
14
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 stdfont = ('Arial', 10)
45b12307c695 Initial revision
drewp
parents:
diff changeset
16
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 class Onelevel(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 """a name/level pair"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 def __init__(self, parent, channelnum):
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 """channelnum is 1..68, like the real dmx"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 tk.Frame.__init__(self,parent)
45b12307c695 Initial revision
drewp
parents:
diff changeset
22
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 self.channelnum=channelnum
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 self.currentlevel=0 # the level we're displaying, 0..1
45b12307c695 Initial revision
drewp
parents:
diff changeset
25
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 # 3 widgets, left-to-right:
45b12307c695 Initial revision
drewp
parents:
diff changeset
27
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 # channel number -- will turn yellow when being altered
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.num_lab = tk.Label(self, text=str(channelnum),
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 width=3, bg='grey40',
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 fg='white', font=stdfont,
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 padx=0, pady=0, bd=0, height=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 self.num_lab.pack(side='left')
45b12307c695 Initial revision
drewp
parents:
diff changeset
34
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 # text description of channel
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 self.desc_lab=tk.Label(self, text=Patch.get_channel_name(channelnum),
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 width=14, font=stdfont, anchor='w',
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 padx=0, pady=0, bd=0,
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 height=1, bg='black', fg='white')
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 self.desc_lab.pack(side='left')
45b12307c695 Initial revision
drewp
parents:
diff changeset
41
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 # current level of channel, shows intensity with color
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 self.level_lab = tk.Label(self, width=3, bg='lightBlue',
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 font=stdfont, anchor='e',
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 padx=1, pady=0, bd=0, height=1)
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 self.level_lab.pack(side='left')
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 self.setlevel(0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 self.setupmousebindings()
45b12307c695 Initial revision
drewp
parents:
diff changeset
50
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 def setupmousebindings(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 def b1down(ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 self.desc_lab.config(bg='cyan')
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 self._start_y=ev.y
45b12307c695 Initial revision
drewp
parents:
diff changeset
55 self._start_lev=self.currentlevel
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 # self.bind("<ButtonPress-1>",b1down)
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 def b1motion(ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 delta=self._start_y-ev.y
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 self.changelevel(self._start_lev+delta*.005)
45b12307c695 Initial revision
drewp
parents:
diff changeset
60 # self.bind("<B1-Motion>",b1motion)
45b12307c695 Initial revision
drewp
parents:
diff changeset
61 def b1up(ev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 self.desc_lab.config(bg='black')
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 # self.bind("<B1-ButtonRelease>",b1up)
45b12307c695 Initial revision
drewp
parents:
diff changeset
64
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 # make the buttons work in the child windows
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 for w in self.winfo_children():
45b12307c695 Initial revision
drewp
parents:
diff changeset
67 for e,func in (('<ButtonPress-1>',b1down),
45b12307c695 Initial revision
drewp
parents:
diff changeset
68 ('<B1-Motion>',b1motion),
45b12307c695 Initial revision
drewp
parents:
diff changeset
69 ('<ButtonRelease-1>',b1up)):
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 w.bind(e,func)
45b12307c695 Initial revision
drewp
parents:
diff changeset
71 # w.bind(e,lambda ev,e=e: eventtoparent(ev,e))
45b12307c695 Initial revision
drewp
parents:
diff changeset
72
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 def colorlabel(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 """color the level label based on its own text (which is 0..100)"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 txt=self.level_lab['text'] or "0"
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 lev=float(txt)/100
45b12307c695 Initial revision
drewp
parents:
diff changeset
77 low=(80,80,180)
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 high=(255,55,050)
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 out = [int(l+lev*(h-l)) for h,l in zip(high,low)]
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 col="#%02X%02X%02X" % tuple(out)
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 self.level_lab.config(bg=col)
45b12307c695 Initial revision
drewp
parents:
diff changeset
82
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 def setlevel(self,newlev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 """the main program is telling us to change our
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 display. newlev is 0..1"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 self.currentlevel=newlev
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 newlev="%d"%(newlev*100)
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 olddisplay=self.level_lab.cget('text')
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 if newlev!=olddisplay:
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 self.level_lab.config(text=newlev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 self.colorlabel()
45b12307c695 Initial revision
drewp
parents:
diff changeset
92
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 def getlevel(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 """returns currently displayed level, 0..1"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 return self.currentlevel
45b12307c695 Initial revision
drewp
parents:
diff changeset
96
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 def changelevel(self,newlev):
45b12307c695 Initial revision
drewp
parents:
diff changeset
98
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 """the user is adjusting the level on this widget. the main
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 program needs to hear about it. then the main program will
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 call setlevel()"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
102
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 dispatcher.send("levelchanged",channel=self.channelnum,newlevel=newlev)
45b12307c695 Initial revision
drewp
parents:
diff changeset
104
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 class Levelbox(tk.Frame):
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 def __init__(self, parent, num_channels=68):
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 tk.Frame.__init__(self,parent)
45b12307c695 Initial revision
drewp
parents:
diff changeset
108
45b12307c695 Initial revision
drewp
parents:
diff changeset
109 self.levels = [] # Onelevel objects
45b12307c695 Initial revision
drewp
parents:
diff changeset
110
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 frames = (make_frame(self), make_frame(self))
45b12307c695 Initial revision
drewp
parents:
diff changeset
112
45b12307c695 Initial revision
drewp
parents:
diff changeset
113 for channel in range(1, num_channels+1):
45b12307c695 Initial revision
drewp
parents:
diff changeset
114
45b12307c695 Initial revision
drewp
parents:
diff changeset
115 # frame for this channel
45b12307c695 Initial revision
drewp
parents:
diff changeset
116 f = Onelevel(frames[channel > (num_channels/2)],channel)
45b12307c695 Initial revision
drewp
parents:
diff changeset
117
45b12307c695 Initial revision
drewp
parents:
diff changeset
118 self.levels.append(f)
45b12307c695 Initial revision
drewp
parents:
diff changeset
119 f.pack(side='top')
45b12307c695 Initial revision
drewp
parents:
diff changeset
120
45b12307c695 Initial revision
drewp
parents:
diff changeset
121 #dispatcher.connect(setalevel,"setlevel")
45b12307c695 Initial revision
drewp
parents:
diff changeset
122
45b12307c695 Initial revision
drewp
parents:
diff changeset
123 def setlevels(self,newlevels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
124 """sets levels to the new list of dmx levels (0..1). list can
45b12307c695 Initial revision
drewp
parents:
diff changeset
125 be any length"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
126 for l,newlev in zip(self.levels,newlevels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
127 l.setlevel(newlev)