annotate flax/Submaster.py @ 138:304152488ed7

Timeline: new methods to make editing easier Timeline: new methods to make editing easier Submaster: fix level-clobbering bug, skip CVS files, better __repr__ KeyboardClient: tiny cleanups
author dmcc
date Sat, 14 Jun 2003 16:01:31 +0000
parents 5670f66845ce
children 1fe54442db38
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
1 from __future__ import division
45b12307c695 Initial revision
drewp
parents:
diff changeset
2 from TLUtility import dict_scale, dict_max
45b12307c695 Initial revision
drewp
parents:
diff changeset
3
45b12307c695 Initial revision
drewp
parents:
diff changeset
4 import sys
45b12307c695 Initial revision
drewp
parents:
diff changeset
5 sys.path.append('../light8')
45b12307c695 Initial revision
drewp
parents:
diff changeset
6
45b12307c695 Initial revision
drewp
parents:
diff changeset
7 import Patch
45b12307c695 Initial revision
drewp
parents:
diff changeset
8
45b12307c695 Initial revision
drewp
parents:
diff changeset
9 class Submaster:
45b12307c695 Initial revision
drewp
parents:
diff changeset
10 "Contain a dictionary of levels, but you didn't need to know that"
135
5670f66845ce - results of work from 6.13 rehearsal
dmcc
parents: 0
diff changeset
11 def __init__(self, name, leveldict=None):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
12 self.name = name
45b12307c695 Initial revision
drewp
parents:
diff changeset
13 if leveldict:
45b12307c695 Initial revision
drewp
parents:
diff changeset
14 self.levels = leveldict
45b12307c695 Initial revision
drewp
parents:
diff changeset
15 else:
45b12307c695 Initial revision
drewp
parents:
diff changeset
16 self.levels = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
17 self.reload()
45b12307c695 Initial revision
drewp
parents:
diff changeset
18 def reload(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
19 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
20 self.levels.clear()
45b12307c695 Initial revision
drewp
parents:
diff changeset
21 subfile = file("subs/%s" % self.name)
45b12307c695 Initial revision
drewp
parents:
diff changeset
22 for line in subfile.readlines():
45b12307c695 Initial revision
drewp
parents:
diff changeset
23 if not line.strip(): # if line is only whitespace
45b12307c695 Initial revision
drewp
parents:
diff changeset
24 continue # "did i say newspace?"
45b12307c695 Initial revision
drewp
parents:
diff changeset
25
45b12307c695 Initial revision
drewp
parents:
diff changeset
26 try:
45b12307c695 Initial revision
drewp
parents:
diff changeset
27 name, val = line.split(':')
45b12307c695 Initial revision
drewp
parents:
diff changeset
28 name = name.strip()
45b12307c695 Initial revision
drewp
parents:
diff changeset
29 self.levels[name] = float(val)
45b12307c695 Initial revision
drewp
parents:
diff changeset
30 except ValueError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
31 print "(%s) Error with this line: %s" % (self.name,
45b12307c695 Initial revision
drewp
parents:
diff changeset
32 line[:-1])
45b12307c695 Initial revision
drewp
parents:
diff changeset
33 except IOError:
45b12307c695 Initial revision
drewp
parents:
diff changeset
34 print "Can't read file for sub: %s" % self.name
45b12307c695 Initial revision
drewp
parents:
diff changeset
35 def save(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
36 subfile = file("subs/%s" % self.name, 'w')
45b12307c695 Initial revision
drewp
parents:
diff changeset
37 names = self.levels.keys()
45b12307c695 Initial revision
drewp
parents:
diff changeset
38 names.sort()
45b12307c695 Initial revision
drewp
parents:
diff changeset
39 for name in names:
45b12307c695 Initial revision
drewp
parents:
diff changeset
40 val = self.levels[name]
45b12307c695 Initial revision
drewp
parents:
diff changeset
41 subfile.write("%s : %s\n" % (name, val))
45b12307c695 Initial revision
drewp
parents:
diff changeset
42 def set_level(self, channelname, level, save=1):
45b12307c695 Initial revision
drewp
parents:
diff changeset
43 self.levels[Patch.resolve_name(channelname)] = level
45b12307c695 Initial revision
drewp
parents:
diff changeset
44 if save:
45b12307c695 Initial revision
drewp
parents:
diff changeset
45 self.save()
45b12307c695 Initial revision
drewp
parents:
diff changeset
46 def set_all_levels(self, leveldict):
45b12307c695 Initial revision
drewp
parents:
diff changeset
47 self.levels.clear()
45b12307c695 Initial revision
drewp
parents:
diff changeset
48 for k, v in leveldict.items():
45b12307c695 Initial revision
drewp
parents:
diff changeset
49 self.set_level(k, v, save=0)
45b12307c695 Initial revision
drewp
parents:
diff changeset
50 self.save()
45b12307c695 Initial revision
drewp
parents:
diff changeset
51 def get_levels(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
52 return self.levels
45b12307c695 Initial revision
drewp
parents:
diff changeset
53 def __mul__(self, scalar):
45b12307c695 Initial revision
drewp
parents:
diff changeset
54 return Submaster("%s*%s" % (self.name, scalar),
135
5670f66845ce - results of work from 6.13 rehearsal
dmcc
parents: 0
diff changeset
55 dict_scale(self.levels, scalar))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
56 __rmul__ = __mul__
45b12307c695 Initial revision
drewp
parents:
diff changeset
57 def max(self, *othersubs):
45b12307c695 Initial revision
drewp
parents:
diff changeset
58 return sub_maxes(self, *othersubs)
45b12307c695 Initial revision
drewp
parents:
diff changeset
59 def __repr__(self):
138
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
60 levels = ' '.join(["%s:%.2f" % item for item in self.levels.items()])
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
61 return "<'%s': [%s]>" % (self.name, levels)
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
62 def get_dmx_list(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
63 leveldict = self.get_levels() # gets levels of sub contents
45b12307c695 Initial revision
drewp
parents:
diff changeset
64
45b12307c695 Initial revision
drewp
parents:
diff changeset
65 levels = [0] * 68
45b12307c695 Initial revision
drewp
parents:
diff changeset
66 for k, v in leveldict.items():
138
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
67 dmxchan = Patch.get_dmx_channel(k) - 1
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
68 levels[dmxchan] = max(v, levels[dmxchan])
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
69
45b12307c695 Initial revision
drewp
parents:
diff changeset
70 return levels
138
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
71 def normalize_patch_names(self):
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
72 # possibly busted -- don't use unless you know what you're doing
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
73 self.set_all_levels(self.levels.copy())
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
74
45b12307c695 Initial revision
drewp
parents:
diff changeset
75 def sub_maxes(*subs):
45b12307c695 Initial revision
drewp
parents:
diff changeset
76 return Submaster("max(%r)" % (subs,),
135
5670f66845ce - results of work from 6.13 rehearsal
dmcc
parents: 0
diff changeset
77 dict_max(*[sub.levels for sub in subs]))
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
78
45b12307c695 Initial revision
drewp
parents:
diff changeset
79 class Submasters:
45b12307c695 Initial revision
drewp
parents:
diff changeset
80 "Collection o' Submaster objects"
45b12307c695 Initial revision
drewp
parents:
diff changeset
81 def __init__(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
82 self.submasters = {}
45b12307c695 Initial revision
drewp
parents:
diff changeset
83
45b12307c695 Initial revision
drewp
parents:
diff changeset
84 import os
45b12307c695 Initial revision
drewp
parents:
diff changeset
85 files = os.listdir('subs')
45b12307c695 Initial revision
drewp
parents:
diff changeset
86
45b12307c695 Initial revision
drewp
parents:
diff changeset
87 for filename in files:
138
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
88 # we don't want these files
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
89 if filename.startswith('.') or filename.endswith('~') or \
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
90 filename.startswith('CVS'):
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
91 continue
45b12307c695 Initial revision
drewp
parents:
diff changeset
92 self.submasters[filename] = Submaster(filename)
45b12307c695 Initial revision
drewp
parents:
diff changeset
93 def get_all_subs(self):
45b12307c695 Initial revision
drewp
parents:
diff changeset
94 "All Submaster objects"
135
5670f66845ce - results of work from 6.13 rehearsal
dmcc
parents: 0
diff changeset
95 return self.submasters.values()
0
45b12307c695 Initial revision
drewp
parents:
diff changeset
96 def get_sub_by_name(self, name):
45b12307c695 Initial revision
drewp
parents:
diff changeset
97 "Makes a new sub if there isn't one."
45b12307c695 Initial revision
drewp
parents:
diff changeset
98 return self.submasters.get(name, Submaster(name))
45b12307c695 Initial revision
drewp
parents:
diff changeset
99 __getitem__ = get_sub_by_name
45b12307c695 Initial revision
drewp
parents:
diff changeset
100
45b12307c695 Initial revision
drewp
parents:
diff changeset
101 if __name__ == "__main__":
45b12307c695 Initial revision
drewp
parents:
diff changeset
102 Patch.reload_data()
45b12307c695 Initial revision
drewp
parents:
diff changeset
103 s = Submasters()
45b12307c695 Initial revision
drewp
parents:
diff changeset
104 print s.get_all_subs()
138
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
105 if 0: # turn this on to normalize all subs
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
106 for sub in s.get_all_subs():
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
107 print "before", sub
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
108 sub.normalize_patch_names()
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
109 sub.save()
304152488ed7 Timeline: new methods to make editing easier
dmcc
parents: 135
diff changeset
110 print "after", sub