def test_intersect(self): """ Test special filter argument 'intersect' """ trans = Transition.get(id=self.transition_ids[0]) self.assertTrue(trans) pos = trans.data.get("position", -1.0) duration = trans.data.get("duration", -1.0) self.assertTrue(pos >= 0.0) self.assertTrue(duration >= 0.0) time = pos + (duration / 2) def get_times(item): pos = item.data.get("position", -1.0) end = pos + item.data.get("duration", -1.0) return (pos, end) t_intersect = Transition.filter(intersect=time) t_ids = [t.id for t in t_intersect] t_all = Transition.filter() t_rest = [x for x in t_all if x.id not in t_ids] c_intersect = Clip.filter(intersect=time) c_ids = [c.id for c in c_intersect] c_all = Clip.filter() c_rest = [x for x in c_all if x.id not in c_ids] for item in t_intersect + c_intersect: item_id = item.id pos, end = get_times(item) self.assertTrue(pos <= time) self.assertTrue(time <= end) for item in t_rest + c_rest: item_id = item.id pos, end = get_times(item) if pos < time: self.assertTrue(end <= time) if end > time: self.assertTrue(pos >= time)
def actionRemoveTransition_trigger(self, event): log.info('actionRemoveTransition_trigger') # Loop through selected clips for tran_id in self.selected_transitions: # Find matching file transitions = Transition.filter(id=tran_id) for t in transitions: # Clear selected clips self.removeSelection(tran_id, "transition") # Remove transition t.delete()
def changed(self, action): # Clear previous rects self.clip_rects.clear() self.clip_rects_selected.clear() self.marker_rects.clear() # Get layer lookup layers = {} for count, layer in enumerate(reversed(sorted(Track.filter()))): layers[layer.data.get('number')] = count # Wait for timeline object and valid scrollbar positions if hasattr(get_app().window, "timeline") and self.scrollbar_position[2] != 0.0: # Get max width of timeline project_duration = get_app().project.get("duration") pixels_per_second = self.width() / project_duration # Determine scale factor vertical_factor = self.height() / len(layers.keys()) for clip in Clip.filter(): # Calculate clip geometry (and cache it) clip_x = (clip.data.get('position', 0.0) * pixels_per_second) clip_y = layers.get(clip.data.get('layer', 0), 0) * vertical_factor clip_width = ( (clip.data.get('end', 0.0) - clip.data.get('start', 0.0)) * pixels_per_second) clip_rect = QRectF(clip_x, clip_y, clip_width, 1.0 * vertical_factor) if clip.id in get_app().window.selected_clips: # selected clip self.clip_rects_selected.append(clip_rect) else: # un-selected clip self.clip_rects.append(clip_rect) for clip in Transition.filter(): # Calculate clip geometry (and cache it) clip_x = (clip.data.get('position', 0.0) * pixels_per_second) clip_y = layers.get(clip.data.get('layer', 0), 0) * vertical_factor clip_width = ( (clip.data.get('end', 0.0) - clip.data.get('start', 0.0)) * pixels_per_second) clip_rect = QRectF(clip_x, clip_y, clip_width, 1.0 * vertical_factor) if clip.id in get_app().window.selected_transitions: # selected clip self.clip_rects_selected.append(clip_rect) else: # un-selected clip self.clip_rects.append(clip_rect) for marker in Marker.filter(): # Calculate clip geometry (and cache it) marker_x = (marker.data.get('position', 0.0) * pixels_per_second) marker_rect = QRectF(marker_x, 0, 0.5, len(layers) * vertical_factor) self.marker_rects.append(marker_rect) # Force re-paint self.update()