def actionNextMarker_trigger(self, event): log.info("actionNextMarker_trigger") log.info(self.preview_thread.current_frame) # Calculate current position (in seconds) fps = get_app().project.get(["fps"]) fps_float = float(fps["num"]) / float(fps["den"]) current_position = self.preview_thread.current_frame / fps_float # Loop through all markers, and find the closest one to the right closest_position = None for marker in Marker.filter(): marker_position = marker.data["position"] # Is marker smaller than position? if marker_position > current_position: # Is marker larger than previous marker if closest_position and marker_position < closest_position: # Set a new closest marker closest_position = marker_position elif not closest_position: # First one found closest_position = marker_position # Seek to marker position (if any) if closest_position: # Seek frame_to_seek = int(closest_position * fps_float) self.preview_thread.player.Seek(frame_to_seek)
def actionRemoveMarker_trigger(self, event): log.info('actionRemoveMarker_trigger') for marker_id in self.selected_markers: marker = Marker.filter(id=marker_id) for m in marker: # Remove track m.delete()
def actionAddMarker_trigger(self, event): log.info("actionAddMarker_trigger") # Get player object player = self.preview_thread.player # Calculate frames per second fps = get_app().project.get(["fps"]) fps_float = float(fps["num"]) / float(fps["den"]) # Calculate position in seconds position = player.Position() / fps_float # Look for existing Marker marker = Marker() marker.data = {"position": position, "icon": "blue.png"} marker.save()
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()