comparison flax/Timeline.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 83e2c4ceb79a
comparison
equal deleted inserted replaced
137:7d768d04b9f0 138:304152488ed7
135 return self.linear_blend(startframe, endframe, blendtime) 135 return self.linear_blend(startframe, endframe, blendtime)
136 136
137 class Strobe(Blender): 137 class Strobe(Blender):
138 "Strobes the frame on the right side between offlevel and onlevel." 138 "Strobes the frame on the right side between offlevel and onlevel."
139 def __init__(self, ontime, offtime, onlevel=1, offlevel=0): 139 def __init__(self, ontime, offtime, onlevel=1, offlevel=0):
140 "times are in seconds" 140 "times are in seconds (floats)"
141 make_attributes_from_args('ontime', 'offtime', 'onlevel', 'offlevel') 141 make_attributes_from_args('ontime', 'offtime', 'onlevel', 'offlevel')
142 self.cycletime = ontime + offtime 142 self.cycletime = ontime + offtime
143 def __call__(self, startframe, endframe, blendtime, time_since_startframe): 143 def __call__(self, startframe, endframe, blendtime, time_since_startframe):
144 # time into the current period 144 # time into the current period
145 period_time = time_since_startframe % self.cycletime 145 period_time = time_since_startframe % self.cycletime
157 if kw.get('default_frame'): 157 if kw.get('default_frame'):
158 self.default_frame = kw['default_frame'] 158 self.default_frame = kw['default_frame']
159 else: 159 else:
160 self.default_frame = None 160 self.default_frame = None
161 self.name = name 161 self.name = name
162 self.events = list(timedevents) 162 self.set_events(list(timedevents))
163 def set_events(self, events):
164 """This is given a list of TimedEvents. They need not be sorted."""
165 self.events = events
166 self._cleaup_events()
167 def _cleaup_events(self):
168 """This makes sure all events are in the right order and have defaults
169 filled in if they have missing frames."""
163 self.events.sort() 170 self.events.sort()
164 self.fill_in_missing_subs() 171 self.fill_in_missing frames()
165 def fill_in_missing_subs(self): 172 def add_event(self, event):
173 """Add a TimedEvent object to this TimelineTrack"""
174 self.events.append(event)
175 self._cleaup_events(self.events)
176 def delete_event(self, event):
177 """Delete event by TimedEvent object"""
178 self.events.remove(event)
179 self._cleaup_events(self.events)
180 def delete_event_by_name(self, name):
181 """Deletes all events matching a certain name"""
182 self.events = [e for e in self.events if e.name is not name]
183 self._cleaup_events(self.events)
184 def delete_event_by_time(self, starttime, endtime=None):
185 """Deletes all events within a certain time range, inclusive. endtime
186 is optional."""
187 endtime = endtime or starttime
188 self.events = [e for e in self.events
189 if e.time >= starttime and e.time <= endtime]
190 self._cleaup_events(self.events)
191 def fill_in_missing frames(self):
192 """Runs through all events and sets TimedEvent with missing frames to
193 the default frame."""
166 for event in self.events: 194 for event in self.events:
167 if event.frame == MISSING: 195 if event.frame == MISSING:
168 event.frame = self.default_frame 196 event.frame = self.default_frame
169 def __str__(self): 197 def __str__(self):
170 return "<TimelineTrack with events: %r>" % self.events 198 return "<TimelineTrack with events: %r>" % self.events