annotate light8/subediting.py @ 1307:8863b4485fd4

collector uses rdfdb Ignore-this: 4625537c6624950e03cbab896356a5d4
author Drew Perttula <drewp@bigasterisk.com>
date Mon, 30 May 2016 21:42:49 +0000
parents ddd3c8f04640
children
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 from Patch import get_dmx_channel
45b12307c695 Initial revision
drewp
parents:
diff changeset
3
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 class Subediting:
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 """this class accepts input from Stage and edits subs. the
45b12307c695 Initial revision
drewp
parents:
diff changeset
6 Subpanels have widgets to tell us what subs to edit and when to
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 save them. this Subediting object has no UI of its own.
45b12307c695 Initial revision
drewp
parents:
diff changeset
8
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 20:41:10 drewp: there are some funny rules
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 20:41:37 drewp: if you drag a light that's in the sub you're editing, you'll adjust it from it's position in the sub (Even if that sub is not visialbe, or if the light is doing someting else)
45b12307c695 Initial revision
drewp
parents:
diff changeset
11 20:41:57 drewp: but if you touch a light that wasnt in the sub, the current light brightness from the stage gets copied into the sub, and then you adjust frmo there
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 20:42:05 drewp: i dont know any other rules; but these seem odd
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
13 20:42:29 drewp: it may be necessary to highluight which lights are already in the sub, so you know what you're doing as soon as you click on one
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 """
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 def __init__(self,currentoutputlevels):
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 self.sub=None
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 self.currentoutputlevels = currentoutputlevels
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
18 self.widgets={} # subname : widget list
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
19 self.oldcolors={} # widget : bgcolor
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
20
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
21 def refresh(self):
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
22 self.sub=None # this wouldn't last even if we wanted it to;
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
23 # the Sub objects are rebuilt upon reload
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
24 self.widgets={}
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
25 self.oldcolors={}
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
26
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
27 def register(self,subname,widget):
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
28 """tell subediting about any widgets that should be highlighted
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
29 when a sub is being edited"""
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
30 if subname not in self.widgets:
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
31 self.widgets[subname]=[]
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
32 self.widgets[subname].append(widget)
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
33 self.oldcolors[widget] = widget.cget('bg')
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
34
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 def setsub(self,sub):
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 """sets which (one) sub object should the stage be editing.
45b12307c695 Initial revision
drewp
parents:
diff changeset
37
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 this is called by widgets that are set up in the Subpanels interfaces.
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 """
45b12307c695 Initial revision
drewp
parents:
diff changeset
40
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 print "subedit: editing ",sub.name
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 self.sub = sub
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
43 self.highlighteditsub()
103
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
44 def highlighteditsub(self, color='red'):
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
45 """based on how widgets got self.register'd, we highlight
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
46 just the row that's being edited"""
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
47
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
48 # highlight that row only
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
49 for n,wl in self.widgets.items():
103
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
50 if n == self.sub.name:
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
51 self.colorsub(n, color)
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
52 else:
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
53 self.colorsub(n, 'restore')
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
54
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
55 '''
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
56 # highlight that row only
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
57 for n,wl in self.widgets.items():
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
58 if n==self.sub.name:
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
59 for w in wl:
103
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
60 w.config(bg=color)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
61 else:
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
62 for w in wl:
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
63 w.config(bg=self.oldcolors[w])
103
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
64 '''
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
65 def colorsub(self, name, color):
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
66 for w in self.widgets[name]:
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
67 if color == 'restore':
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
68 w.config(bg=self.oldcolors[w])
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
69 else:
ddd3c8f04640 more untested code, ready for production: colors for slider mapping
dmcc
parents: 53
diff changeset
70 w.config(bg=color)
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
71
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
72 #
45b12307c695 Initial revision
drewp
parents:
diff changeset
73 # next two methods are called by the Stage
45b12307c695 Initial revision
drewp
parents:
diff changeset
74 #
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 def startlevelchange(self):
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
76 """stage is about to send some level changes. this method is
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
77 called by the Stage."""
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
78 print "subedit: start-------"
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 if self.sub is None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 print "not editing any sub!"
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
82
45b12307c695 Initial revision
drewp
parents:
diff changeset
83 self.startlevels = self.sub.getlevels()
45b12307c695 Initial revision
drewp
parents:
diff changeset
84
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 def getcurrentlevel(self,lightname):
45b12307c695 Initial revision
drewp
parents:
diff changeset
86 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 ch = get_dmx_channel(lightname)
45b12307c695 Initial revision
drewp
parents:
diff changeset
88 except ValueError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
89 return None
45b12307c695 Initial revision
drewp
parents:
diff changeset
90 return self.currentoutputlevels[ch]
45b12307c695 Initial revision
drewp
parents:
diff changeset
91
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 def levelchange(self,lightnames,delta):
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 """stage sends this message with its light names and a delta
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 0..1 measured from the last startlevelchange call. this method is
45b12307c695 Initial revision
drewp
parents:
diff changeset
95 called by the Stage"""
45b12307c695 Initial revision
drewp
parents:
diff changeset
96
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
97 # print "subedit: level change",lightnames,delta
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 if self.sub is None:
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 print "not editing any sub!"
45b12307c695 Initial revision
drewp
parents:
diff changeset
100 return
45b12307c695 Initial revision
drewp
parents:
diff changeset
101
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 updatelevels={}
45b12307c695 Initial revision
drewp
parents:
diff changeset
103
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 for l in lightnames:
45b12307c695 Initial revision
drewp
parents:
diff changeset
105 if l not in self.startlevels:
45b12307c695 Initial revision
drewp
parents:
diff changeset
106 # level was not in the sub
45b12307c695 Initial revision
drewp
parents:
diff changeset
107 cl = self.getcurrentlevel(l)
45b12307c695 Initial revision
drewp
parents:
diff changeset
108 if cl is None:
44
6540879e336e fixed Stage a lot: ctrl-drag subtracts from selection; ctrl-a/ctrl-A select all/none;
drewp
parents: 42
diff changeset
109 print "light '%s' isn't even in the patch! skipping" % l
53
032b2b67bc10 result of July 7th on-site editing
dmcc
parents: 44
diff changeset
110 continue
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
111 print "copying current light level",cl,"into the sub"
45b12307c695 Initial revision
drewp
parents:
diff changeset
112 self.startlevels[l] = cl
45b12307c695 Initial revision
drewp
parents:
diff changeset
113
45b12307c695 Initial revision
drewp
parents:
diff changeset
114 updatelevels[l] = min(100,max(0,self.startlevels[l]+delta))
45b12307c695 Initial revision
drewp
parents:
diff changeset
115
45b12307c695 Initial revision
drewp
parents:
diff changeset
116 self.sub.reviselevels(updatelevels)
45b12307c695 Initial revision
drewp
parents:
diff changeset
117