def __init__(self, instance, uimap): Loggable.__init__(self) Signallable.__init__(self) self.app = instance self.bt = {} self.settings = {} self.source = None self.created = False self.seeker = Seeker() #Drag attributes self._drag_events = [] self._signals_connected = False self._createUI() self.textbuffer = Gtk.TextBuffer() self.pangobuffer = InteractivePangoBuffer() self.textarea.set_buffer(self.pangobuffer) self.textbuffer.connect("changed", self._updateSourceText) self.pangobuffer.connect("changed", self._updateSourceText) #Connect buttons self.pangobuffer.setup_widget_from_pango(self.bt["bold"], "<b>bold</b>") self.pangobuffer.setup_widget_from_pango(self.bt["italic"], "<i>italic</i>")
def __init__(self, settings=None, realizedCb=None): # Prevent black frames and flickering while resizing or changing focus: # The aspect ratio gets overridden by setDisplayAspectRatio. Gtk.AspectFrame.__init__(self, xalign=0.5, yalign=1.0, ratio=4.0 / 3.0, obey_child=False) Loggable.__init__(self) self.drawing_area = GtkClutter.Embed() self.drawing_area.set_double_buffered(False) # We keep the ViewerWidget hidden initially, or the desktop wallpaper # would show through the non-double-buffered widget! if realizedCb: self.drawing_area.connect("realize", realizedCb, self) self.add(self.drawing_area) layout_manager = Clutter.BinLayout(x_align=Clutter.BinAlignment.FILL, y_align=Clutter.BinAlignment.FILL) self.drawing_area.get_stage().set_layout_manager(layout_manager) self.texture = Clutter.Texture() # This is a trick to make the viewer appear darker at the start. self.texture.set_from_rgb_data(data=[0] * 3, has_alpha=False, width=1, height=1, rowstride=3, bpp=3, flags=Clutter.TextureFlags.NONE) self.drawing_area.get_stage().add_child(self.texture) self.drawing_area.show() self.seeker = Seeker() self.settings = settings self.box = None self.stored = False self.area = None self.zoom = 1.0 self.sink = None self.pixbuf = None self.pipeline = None self.transformation_properties = None
def __init__(self, ges_elem, max_cpu_usage): Previewer.__init__(self, GES.TrackType.AUDIO, max_cpu_usage) Zoomable.__init__(self) Loggable.__init__(self) self.pipeline = None self._wavebin = None self.discovered = False self.ges_elem = ges_elem self.timeline = ges_elem.get_parent().get_timeline().ui asset = self.ges_elem.get_parent().get_asset() self.n_samples = asset.get_duration() / SAMPLE_DURATION self.samples = None self.peaks = None self._start = 0 self._end = 0 self._surface_x = 0 # Guard against malformed URIs self.wavefile = None self._uri = quote_uri(get_proxy_target(ges_elem).props.id) self._num_failures = 0 self.adapter = None self.surface = None self._force_redraw = True self.ges_elem.connect("notify::in-point", self._inpoint_changed_cb) self.connect("notify::height-request", self._height_changed_cb) self.becomeControlled()
def __init__(self, app): # Pulseaudio "role" # (http://0pointer.de/blog/projects/tagging-audio.htm) os.environ["PULSE_PROP_media.role"] = "production" os.environ["PULSE_PROP_application.icon_name"] = "pitivi" Gtk.IconTheme.get_default().append_search_path(get_pixmap_dir()) Gtk.ApplicationWindow.__init__(self) Loggable.__init__(self) self.log("Creating main window") self.app = app self.greeter = GreeterPerspective(app) self.editor = EditorPerspective(app) self.__placed = False self.__perspective = None self.__wanted_perspective = None self.app.settings.connect("useDarkThemeChanged", self.__use_dark_theme_changed_cb) self.update_use_dark_theme() app.project_manager.connect("new-project-loading", self.__new_project_loading_cb) app.project_manager.connect("new-project-failed", self.__new_project_failed_cb) app.project_manager.connect("project-closed", self.__project_closed_cb)
def __init__(self, app): Gtk.Box.__init__(self) self.app = app self.settings = app.settings Loggable.__init__(self) self.log("New ViewerContainer") self.project = None self.trim_pipeline = None self.trim_pipelines_cache = collections.OrderedDict() self.docked = True self.target = None self.overlay_stack = None self.guidelines_popover = None self._create_ui() self._create_actions() if not self.settings.viewerDocked: self.undock() self.__cursor = None self.__translation = None pm = self.app.project_manager pm.connect("project-closed", self._project_manager_project_closed_cb)
def __init__(self, app): Gtk.ScrolledWindow.__init__(self) Loggable.__init__(self) self.app = app self.settings = app.settings self._project = None self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) viewport = Gtk.Viewport() viewport.show() self.add(viewport) vbox = Gtk.VBox() vbox.set_spacing(SPACING) vbox.show() viewport.add(vbox) self.infobar_box = Gtk.VBox() self.infobar_box.show() vbox.pack_start(self.infobar_box, False, True, 0) # Transformation boxed DISABLED # self.transformation_expander = TransformationProperties(instance, instance.action_log) # self.transformation_expander.set_vexpand(False) # vbox.pack_start(self.transformation_expander, False, True, 0) effects_properties_manager = EffectsPropertiesManager(app) self.effect_expander = EffectProperties(app, effects_properties_manager, self) self.effect_expander.set_vexpand(False) vbox.pack_start(self.effect_expander, True, True, 0)
def __init__(self, app): GObject.Object.__init__(self) Loggable.__init__(self) self.app = app self._total_time_to_transcode = 0 self._total_transcoded_time = 0 self._start_proxying_time = 0 self._estimated_time = 0 self.__running_transcoders = [] self.__pending_transcoders = [] self.__encoding_target_file = None self.proxyingUnsupported = False for encoding_format in [ENCODING_FORMAT_JPEG, ENCODING_FORMAT_PRORES]: self.__encoding_profile = self.__getEncodingProfile(encoding_format) if self.__encoding_profile: self.__encoding_target_file = encoding_format self.info("Using %s as proxying format", encoding_format) break if not self.__encoding_profile: self.proxyingUnsupported = True self.error("Not supporting any proxy formats!") return
def __init__(self, app, sink_widget): Gtk.Overlay.__init__(self) Loggable.__init__(self) self.__overlays = {} self.__visible_overlays = [] self.__hide_all_overlays = False self.__last_allocation = None self.app = app self.window_size = numpy.array([1, 1]) self.click_position = None self.hovered_overlay = None self.selected_overlay = None self.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.SCROLL_MASK | Gdk.EventMask.ENTER_NOTIFY_MASK | Gdk.EventMask.LEAVE_NOTIFY_MASK | Gdk.EventMask.ALL_EVENTS_MASK) self.add(sink_widget) self.connect("size-allocate", self.__on_size_allocate) # Whether to show the percent of the size relative to the project size. # It is set to false initially because the viewer gets resized # while the project is loading and we don't want to show the percent # in this case. self.__show_resize_status = False # ID of resizing timeout callback, so it can be delayed. self.__resizing_id = 0 self.revealer = Gtk.Revealer(transition_type=Gtk.RevealerTransitionType.CROSSFADE) self.resize_status = Gtk.Label(name="resize_status") self.revealer.add(self.resize_status) self.add_overlay(self.revealer) sink_widget.connect("size-allocate", self.__sink_widget_size_allocate_cb)
def __init__(self, app): Loggable.__init__(self) self.app = app self.app.shortcuts.connect("accel-changed", self.__accel_changed_cb) self.settings = app.settings self.widgets = {} self.resets = {} self.original_values = {} self.action_ids = {} # Identify the widgets we'll need builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "preferences.ui")) builder.connect_signals(self) self.dialog = builder.get_object("dialog1") self.sidebar = builder.get_object("sidebar") self.stack = builder.get_object("stack") self.revert_button = builder.get_object("revertButton") self.factory_settings = builder.get_object("resetButton") self.restart_warning = builder.get_object("restartWarning") for section_id in self.settings_sections: self.add_settings_page(section_id) self.factory_settings.set_sensitive(self._canReset()) self.__add_shortcuts_section() self.__add_plugin_manager_section() self.dialog.set_transient_for(app.gui)
def __init__(self): Gtk.Application.__init__(self, application_id="org.pitivi", flags=Gio.ApplicationFlags.HANDLES_OPEN) Loggable.__init__(self) self.settings = None self.threads = None self.effects = None self.system = None self.project_manager = ProjectManager(self) self.action_log = None self.project_observer = None self._last_action_time = Gst.util_get_timestamp() self.gui = None self.__welcome_wizard = None self._version_information = {} self._scenario_file = None self._first_action = True Zoomable.app = self self.shortcuts = ShortcutsManager(self)
def __init__(self, default_path=None, user_path=None, system=None): GObject.Object.__init__(self) Loggable.__init__(self) self.default_path = default_path self.user_path = user_path self.presets = {} self.widget_map = {} self.ordered = Gtk.ListStore(str, object) def sortme(store, i1, i2, unused_udata): name1 = store[i1][0] name2 = store[i2][0] if name1 > name2: return 1 return -1 self.ordered.set_sort_func(0, sortme) self.ordered.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.cur_preset = None # Whether to ignore the updateValue calls. self.ignore_update_requests = False self.system = system
def stepFrame(self, framerate, frames_offset): """Seeks backwards or forwards the specified amount of frames. This clamps the playhead to the project frames. Args: frames_offsets (int): The number of frames to step. Negative number for stepping backwards. """ try: position = self.getPosition() except PipelineError: self.warning( "Couldn't get position (you're framestepping too quickly), ignoring this request") return cur_frame = int( round(position * framerate.num / float(Gst.SECOND * framerate.denom), 2)) new_frame = cur_frame + frames_offset new_pos = int(new_frame * Gst.SECOND * framerate.denom / framerate.num) + \ int((Gst.SECOND * framerate.denom / framerate.num) / 2) Loggable.info(self, "From frame %d to %d at %f fps, seek to %s s", cur_frame, new_frame, framerate.num / framerate.denom, new_pos / float(Gst.SECOND)) self.simple_seek(new_pos)
def __init__(self, app, undock_action=None): Gtk.VBox.__init__(self) self.set_border_width(SPACING) self.app = app self.settings = app.settings self.system = app.system Loggable.__init__(self) self.log("New ViewerContainer") self.pipeline = None self.docked = True self.seeker = Seeker() # Only used for restoring the pipeline position after a live clip trim preview: self._oldTimelinePos = None self._haveUI = False self._createUi() self.undock_action = undock_action if undock_action: self.undock_action.connect("activate", self._toggleDocked) if not self.settings.viewerDocked: self.undock()
def __init__(self, timeline): Gtk.DrawingArea.__init__(self) Zoomable.__init__(self) Loggable.__init__(self) self.log("Creating new ScaleRuler") self.timeline = timeline self._pipeline = None hadj = timeline.timeline.hadj hadj.connect("value-changed", self._hadj_value_changed_cb) self.add_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.SCROLL_MASK) self.pixbuf = None # all values are in pixels self.pixbuf_offset = 0 self.pixbuf_offset_painted = 0 self.position = 0 # In nanoseconds self.frame_rate = Gst.Fraction(1 / 1) self.ns_per_frame = float(1 / self.frame_rate) * Gst.SECOND self.scales = SCALES
def __init__(self): Gtk.Application.__init__(self, application_id="org.pitivi", flags=Gio.ApplicationFlags.HANDLES_OPEN) Loggable.__init__(self) self.settings = None self.threads = None self.effects = None self.system = None self.project_manager = ProjectManager(self) self.action_log = UndoableActionLog(self) self.timeline_log_observer = None self.project_log_observer = None self._last_action_time = Gst.util_get_timestamp() self.gui = None self.welcome_wizard = None self._version_information = {} self._scenario_file = None self._first_action = True Zoomable.app = self self.connect("startup", self._startupCb) self.connect("activate", self._activateCb) self.connect("open", self.openCb)
def __init__(self): Gtk.Application.__init__(self, application_id="org.pitivi.Pitivi", flags=Gio.ApplicationFlags.NON_UNIQUE | Gio.ApplicationFlags.HANDLES_OPEN) Loggable.__init__(self) self.settings = None self.threads = None self.effects = None self.system = None self.project_manager = ProjectManager(self) self.action_log = None self.project_observer = None self._last_action_time = Gst.util_get_timestamp() self.gui = None self.recent_manager = Gtk.RecentManager.get_default() self.__inhibit_cookies = {} self._version_information = {} self._scenario_file = None self._first_action = True Zoomable.app = self self.shortcuts = ShortcutsManager(self)
def __init__(self, bElement, timeline): Clutter.Actor.__init__(self) PreviewGenerator.__init__(self, GES.TrackType.AUDIO) Zoomable.__init__(self) Loggable.__init__(self) self.pipeline = None self.discovered = False self.bElement = bElement self._uri = quote_uri(bElement.props.uri) # Guard against malformed URIs self.timeline = timeline self.actors = [] self.set_content_scaling_filters(Clutter.ScalingFilter.NEAREST, Clutter.ScalingFilter.NEAREST) self.canvas = Clutter.Canvas() self.set_content(self.canvas) self.width = 0 self._num_failures = 0 self.lastUpdate = None self.current_geometry = (-1, -1) self.adapter = None self.surface = None self.timeline.connect("scrolled", self._scrolledCb) self.canvas.connect("draw", self._drawContentCb) self.canvas.invalidate() self._callback_id = 0
def __init__(self, instance, hadj): Gtk.DrawingArea.__init__(self) Zoomable.__init__(self) Loggable.__init__(self) self.log("Creating new ScaleRuler") self.app = instance self._seeker = Seeker() self.hadj = hadj hadj.connect("value-changed", self._hadjValueChangedCb) self.add_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.SCROLL_MASK) self.pixbuf = None # all values are in pixels self.pixbuf_offset = 0 self.pixbuf_offset_painted = 0 # This is the number of width we allocate for the pixbuf self.pixbuf_multiples = 4 self.position = 0 # In nanoseconds self.pressed = False self.min_frame_spacing = 5.0 self.frame_height = 5.0 self.frame_rate = Gst.Fraction(1 / 1) self.ns_per_frame = float(1 / self.frame_rate) * Gst.SECOND self.connect('draw', self.drawCb) self.connect('configure-event', self.configureEventCb) self.callback_id = None self.callback_id_scroll = None
def __init__(self, bElement, timeline): Clutter.Actor.__init__(self) Zoomable.__init__(self) Loggable.__init__(self) PreviewGenerator.__init__(self, GES.TrackType.AUDIO) self.pipeline = None self.discovered = False self.bElement = bElement self._uri = quote_uri(bElement.props.uri) # Guard against malformed URIs self.timeline = timeline self.actors = [] self.set_content_scaling_filters(Clutter.ScalingFilter.NEAREST, Clutter.ScalingFilter.NEAREST) self.canvas = Clutter.Canvas() self.set_content(self.canvas) self.width = 0 self._num_failures = 0 self.lastUpdate = datetime.now() self.interval = timedelta(microseconds=INTERVAL) self.current_geometry = (-1, -1) self.adapter = None self.surface = None self.timeline.connect("scrolled", self._scrolledCb) self.canvas.connect("draw", self._drawContentCb) self.canvas.invalidate() self._callback_id = 0
def __init__(self, app, undock_action=None): Gtk.VBox.__init__(self) self.set_border_width(SPACING) self.app = app self.settings = app.settings self.system = app.system Loggable.__init__(self) self.log("New PitiviViewer") self.pipeline = None self._tmp_pipeline = None # Used for displaying a preview when trimming self.sink = None self.docked = True # Only used for restoring the pipeline position after a live clip trim preview: self._oldTimelinePos = None self._haveUI = False self._createUi() self.target = self.internal self.undock_action = undock_action if undock_action: self.undock_action.connect("activate", self._toggleDocked) if not self.settings.viewerDocked: self.undock()
def __init__(self, app): Gtk.ScrolledWindow.__init__(self) Loggable.__init__(self) self.app = app self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) viewport = Gtk.Viewport() viewport.set_shadow_type(Gtk.ShadowType.ETCHED_IN) viewport.show() self.add(viewport) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) vbox.show() viewport.add(vbox) self.infobar_box = Gtk.Box() self.infobar_box.set_orientation(Gtk.Orientation.VERTICAL) self.infobar_box.show() vbox.pack_start(self.infobar_box, False, False, 0) transformation_expander = TransformationProperties(app) transformation_expander.set_vexpand(False) vbox.pack_start(transformation_expander, False, False, 0) self.effect_expander = EffectProperties(app, self) self.effect_expander.set_vexpand(False) vbox.pack_start(self.effect_expander, False, False, 0)
def __init__(self, widget): # Prevent black frames and flickering while resizing or changing focus: # The aspect ratio gets overridden by setDisplayAspectRatio. Gtk.AspectFrame.__init__(self, xalign=0.5, yalign=0.5, ratio=4.0 / 3.0, obey_child=False) Loggable.__init__(self) self.add(widget)
def __init__(self): Gtk.Button.__init__(self) Loggable.__init__(self) self.image = Gtk.Image() self.add(self.image) self.playing = False self.setPlay()
def __init__(self, app): GObject.Object.__init__(self) Loggable.__init__(self) self.app = app # Total time to transcode in seconds. self._total_time_to_transcode = 0 # Transcoded time per asset in seconds. self._transcoded_durations = {} self._start_proxying_time = 0 self.__running_transcoders = [] self.__pending_transcoders = [] # The scaled proxy transcoders waiting for their corresponding shadow # HQ proxy transcoder to finish. self.__waiting_transcoders = [] self.__encoding_target_file = None self.proxying_unsupported = False for encoding_format in [ENCODING_FORMAT_JPEG, ENCODING_FORMAT_PRORES]: self.__encoding_profile = self.__get_encoding_profile( encoding_format) if self.__encoding_profile: self.__encoding_target_file = encoding_format self.info("Using %s as proxying format", encoding_format) break if not self.__encoding_profile: self.proxying_unsupported = True self.error("Not supporting any proxy formats!") return
def __init__(self, app): Gtk.Box.__init__(self) self.set_border_width(SPACING) self.app = app self.settings = app.settings Loggable.__init__(self) self.log("New ViewerContainer") self.pipeline = None self.docked = True self.target = None self._compactMode = False # Only used for restoring the pipeline position after a live clip trim # preview: self._oldTimelinePos = None self._haveUI = False self._createUi() self.__owning_pipeline = False if not self.settings.viewerDocked: self.undock()
def __init__(self, timeline, hadj): Gtk.DrawingArea.__init__(self) Zoomable.__init__(self) Loggable.__init__(self) self.log("Creating new ScaleRuler") self.timeline = timeline self._pipeline = None self.hadj = hadj hadj.connect("value-changed", self._hadjValueChangedCb) self.add_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK | Gdk.EventMask.SCROLL_MASK) self.pixbuf = None # all values are in pixels self.pixbuf_offset = 0 self.pixbuf_offset_painted = 0 self.position = 0 # In nanoseconds self.frame_rate = Gst.Fraction(1 / 1) self.ns_per_frame = float(1 / self.frame_rate) * Gst.SECOND self.playhead_pixbuf = GdkPixbuf.Pixbuf.new_from_file( os.path.join(configure.get_pixmap_dir(), "pitivi-playhead.svg")) self.scales = SCALES
def __init__(self, ges_elem, max_cpu_usage): Previewer.__init__(self, GES.TrackType.AUDIO, max_cpu_usage) Zoomable.__init__(self) Loggable.__init__(self) self.pipeline = None self._wavebin = None self.ges_elem = ges_elem self.samples = None self.peaks = None self.surface = None # The zoom level when self.surface has been created. self._surface_zoom_level = 0 # The samples range used when self.surface has been created. self._surface_start_ns = 0 self._surface_end_ns = 0 # Guard against malformed URIs self.wavefile = None self._uri = quote_uri(get_proxy_target(ges_elem).props.id) self._num_failures = 0 self.become_controlled()
def __init__(self): Loggable.__init__(self) # Init logging as early as possible so we can log startup code enable_color = not os.environ.get('PITIVI_DEBUG_NO_COLOR', '0') in ('', '1') # Let's show a human-readable pitivi debug output by default, and only # show a crazy unreadable mess when surrounded by gst debug statements. enable_crack_output = "GST_DEBUG" in os.environ log.init('PITIVI_DEBUG', enable_color, enable_crack_output) self.info('starting up') self.settings = GlobalSettings() self.threads = ThreadMaster() self.effects = EffectsHandler() self.system = getSystem() self.current_project = None self.projectManager = ProjectManager(self) self._connectToProjectManager(self.projectManager) self.action_log = UndoableActionLog() self.debug_action_log_observer = DebugActionLogObserver() self.debug_action_log_observer.startObserving(self.action_log) # TODO reimplement the observing after GES port #self.timelineLogObserver = TimelineLogObserver(self.action_log) self.projectLogObserver = ProjectLogObserver(self.action_log) self._version_information = {} self._checkVersion()
def __init__(self, pipeline): Loggable.__init__(self) Signallable.__init__(self) self._pipeline = pipeline self._bus = self._pipeline.get_bus() self._bus.add_signal_watch() self._bus.connect("message", self._busMessageCb) self._listening = False # for the position handler self._listeningInterval = 300 # default 300ms self._listeningSigId = 0 self._duration = Gst.CLOCK_TIME_NONE self.lastPosition = int(0 * Gst.SECOND) self.pendingRecovery = False self._attempted_recoveries = 0 self._waiting_for_async_done = True self._next_seek = None self._timeout_async_id = 0 # Create a cluttersink element used for display. Subclasses must connect # it to self._pipeline themselves self._clutter_sink = Gst.ElementFactory.make("cluttersink", None) if isinstance(pipeline, GES.Pipeline): self._pipeline.preview_set_video_sink(self._clutter_sink) else: self._pipeline.set_property("video_sink", self._clutter_sink)
def __init__(self, app): Loggable.__init__(self) self.app = app self.app.shortcuts.connect("accel-changed", self.__accel_changed_cb) self.settings = app.settings self.widgets = {} self.resets = {} self.original_values = {} self.action_ids = {} # Identify the widgets we'll need builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "preferences.ui")) builder.connect_signals(self) self.dialog = builder.get_object("dialog1") self.sidebar = builder.get_object("sidebar") self.stack = builder.get_object("stack") self.revert_button = builder.get_object("revertButton") self.factory_settings = builder.get_object("resetButton") self.restart_warning = builder.get_object("restartWarning") for section_id in self.settings_sections: self.add_settings_page(section_id) self.factory_settings.set_sensitive(self._canReset()) self.__add_shortcuts_section() self.__add_plugin_manager_section() self.__setup_css() self.dialog.set_transient_for(app.gui)
def __init__(self, name="", uri=None, **kwargs): """ @param name: the name of the project @param uri: the uri of the project """ Loggable.__init__(self) self.log("name:%s, uri:%s", name, uri) self.name = name self.author = "" self.year = "" self.settings = None self.description = "" self.uri = uri self.urichanged = False self.format = None self.medialibrary = MediaLibrary() self._dirty = False self.timeline = ges.timeline_new_audio_video() # We add a Selection to the timeline as there is currently # no such feature in GES self.timeline.selection = Selection() self.pipeline = Pipeline() self.pipeline.add_timeline(self.timeline) self.seeker = Seeker() self.settings = MultimediaSettings()
def __init__(self, default_path=None, user_path=None, system=None): GObject.Object.__init__(self) Loggable.__init__(self) self.default_path = default_path self.user_path = user_path self.presets = {} self.widget_map = {} self.ordered = Gtk.ListStore(str, object) def sortme(store, i1, i2, unused_udata): name1 = store[i1][0] name2 = store[i2][0] if name1 > name2: return 1 return -1 self.ordered.set_sort_func(0, sortme) self.ordered.set_sort_column_id(0, Gtk.SortType.ASCENDING) self.cur_preset = None # Whether to ignore the update_value calls. self.ignore_update_requests = False self.system = system
def __init__(self, app): Gtk.Box.__init__(self) Loggable.__init__(self) self.app = app self.settings = app.settings self._project = None self.set_orientation(Gtk.Orientation.VERTICAL) self.infobar_box = Gtk.Box() self.infobar_box.set_orientation(Gtk.Orientation.VERTICAL) self.infobar_box.show() self.pack_start(self.infobar_box, False, False, 0) # Transformation boxed DISABLED # self.transformation_expander = TransformationProperties(instance, instance.action_log) # self.transformation_expander.set_vexpand(False) # vbox.pack_start(self.transformation_expander, False, False, 0) effects_properties_manager = EffectsPropertiesManager(app) self.effect_expander = EffectProperties( app, effects_properties_manager, self) self.effect_expander.set_vexpand(False) viewport = Gtk.ScrolledWindow() viewport.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) viewport.set_shadow_type(Gtk.ShadowType.ETCHED_IN) viewport.set_visible(True) viewport.add(self.effect_expander) self.pack_start(viewport, True, True, 0)
def __init__(self): gtk.VBox.__init__(self) Loggable.__init__(self) self.element = None self.ignore = None self.properties = None self.buttons = {}
def __init__(self, video_widget): Gtk.AspectFrame.__init__(self, xalign=0.5, yalign=0.5, ratio=4 / 3, border_width=SPACING, obey_child=False) Loggable.__init__(self) # The width and height used when snapping the child widget size. self.videowidth = 0 self.videoheight = 0 # Sequence of floats representing sizes where the viewer size snaps. # The project natural video size is 1, double size is 2, etc. self.snaps = [] # Set the shadow to None, otherwise it will take space and the # child widget size snapping will be a bit off. self.set_shadow_type(Gtk.ShadowType.NONE) self.add(video_widget) # We keep the ViewerWidget hidden initially, or the desktop wallpaper # would show through the non-double-buffered widget! self.hide()
def __init__(self, ges_elem, max_cpu_usage): Previewer.__init__(self, GES.TrackType.AUDIO, max_cpu_usage) Zoomable.__init__(self) Loggable.__init__(self) self.pipeline = None self._wavebin = None self.discovered = False self.ges_elem = ges_elem asset = self.ges_elem.get_parent().get_asset() self.n_samples = asset.get_duration() / SAMPLE_DURATION self.samples = None self.peaks = None self._start = 0 self._end = 0 self._surface_x = 0 # Guard against malformed URIs self.wavefile = None self._uri = quote_uri(get_proxy_target(ges_elem).props.id) self._num_failures = 0 self.adapter = None self.surface = None self._force_redraw = True self.ges_elem.connect("notify::in-point", self._inpoint_changed_cb) self.connect("notify::height-request", self._height_changed_cb) self.become_controlled()
def __init__(self, app): Gtk.Expander.__init__(self) Loggable.__init__(self) self.app = app self._project = None self._selection = None self.source = None self._selected_clip = None self.spin_buttons = {} self.spin_buttons_handler_ids = {} self.set_label(_("Transformation")) self.builder = Gtk.Builder() self.builder.add_from_file( os.path.join(get_ui_dir(), "cliptransformation.ui")) self.__control_bindings = {} # Used to make sure self.__control_bindings_changed doesn't get called # when bindings are changed from this class self.__own_bindings_change = False self.add(self.builder.get_object("transform_box")) self._initButtons() self.show_all() self.hide() self.app.project_manager.connect_after("new-project-loaded", self._newProjectLoadedCb)
def __init__(self, app): Gtk.Box.__init__(self) self.app = app self.settings = app.settings Loggable.__init__(self) self.log("New ViewerContainer") self.project = None self.trim_pipeline = None self.trim_pipelines_cache = collections.OrderedDict() self.docked = True self.target = None self._compactMode = False self._haveUI = False self._createUi() if not self.settings.viewerDocked: self.undock() self.__cursor = None self.__translation = None pm = self.app.project_manager pm.connect("new-project-loaded", self._project_manager_new_project_loaded_cb) pm.connect("project-closed", self._projectManagerProjectClosedCb)
def __init__(self, app, hadj=None): Gtk.EventBox.__init__(self) Zoomable.__init__(self) Loggable.__init__(self) self.layout = Gtk.Layout() self.add(self.layout) self.get_style_context().add_class("MarkersBox") self.app = app if hadj: hadj.connect("value-changed", self._hadj_value_changed_cb) self.props.hexpand = True self.props.valign = Gtk.Align.START self.offset = 0 self.props.height_request = MARKER_WIDTH self.__markers_container = None self.marker_moving = None self.marker_new = None self.add_events(Gdk.EventMask.POINTER_MOTION_MASK | Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.BUTTON_RELEASE_MASK) self._create_actions()
def __init__(self, log): self.log = log self.clip_property_trackers = {} self.control_source_keyframe_trackers = {} self.children_props_tracker = TrackElementChildPropertyTracker(log) self._pipeline = None Loggable.__init__(self)
def __init__(self, ges_layer, timeline): Gtk.EventBox.__init__(self) Zoomable.__init__(self) Loggable.__init__(self) self.ges_layer = ges_layer self.ges_layer.ui = self self.timeline = timeline self.app = timeline.app self.ges_layer.connect("clip-added", self._clipAddedCb) self.ges_layer.connect("clip-removed", self._clipRemovedCb) # FIXME Make the layer height user setable with 'Paned' self.props.height_request = ui.LAYER_HEIGHT / 2 self.props.valign = Gtk.Align.START self._layout = LayerLayout(self.timeline) self._layout.connect("remove", self.__childWidgetRemovedCb) self.add(self._layout) self.media_types = GES.TrackType(0) for clip in ges_layer.get_clips(): self._addClip(clip) self.before_sep = SpacedSeparator(Gtk.PositionType.TOP) self.after_sep = SpacedSeparator(Gtk.PositionType.BOTTOM)
def __init__(self): Gtk.VBox.__init__(self) Loggable.__init__(self) self.element = None self.ignore = None self.properties = None self.buttons = {}
def __init__(self, app): gtksettings = Gtk.Settings.get_default() gtksettings.set_property("gtk-application-prefer-dark-theme", True) theme = gtksettings.get_property("gtk-theme-name") os.environ["GTK_THEME"] = theme + ":dark" # Pulseaudio "role" # (http://0pointer.de/blog/projects/tagging-audio.htm) os.environ["PULSE_PROP_media.role"] = "production" os.environ["PULSE_PROP_application.icon_name"] = "pitivi" Gtk.IconTheme.get_default().append_search_path(get_pixmap_dir()) Gtk.ApplicationWindow.__init__(self) Loggable.__init__(self) self.log("Creating main window") self.app = app self.greeter = GreeterPerspective(app) self.editor = EditorPerspective(app) self.__perspective = None self.help_action = None self.about_action = None self.main_menu_action = None app.project_manager.connect("new-project-loading", self.__new_project_loading_cb) app.project_manager.connect("new-project-failed", self.__new_project_failed_cb) app.project_manager.connect("project-closed", self.__project_closed_cb)
def __init__(self, app): Gtk.Popover.__init__(self) Loggable.__init__(self) self.app = app vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, margin=PADDING) self.search_entry = Gtk.SearchEntry() self.search_entry.connect("search-changed", self._search_entry_cb) scroll_window = Gtk.ScrolledWindow() scroll_window.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) scroll_window.props.max_content_height = 350 scroll_window.props.propagate_natural_height = True self.listbox = Gtk.ListBox() self.listbox.connect("row-activated", self._effect_row_activate_cb) self.listbox.set_filter_func(self._search_filter) placeholder_text = Gtk.Label(_("No effects")) placeholder_text.props.visible = True self.listbox.set_placeholder(placeholder_text) self.app.gui.editor.effectlist.add_effects_to_listbox(self.listbox, only_text=True) scroll_window.add(self.listbox) vbox.pack_start(self.search_entry, False, False, 0) vbox.pack_end(scroll_window, True, True, 0) vbox.show_all() self.add(vbox)
def __init__(self, app): Loggable.__init__(self) self.settings = app.settings self.widgets = {} self.resets = {} self._current = None # Identify the widgets we'll need builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "preferences.ui")) builder.connect_signals(self) self.dialog = builder.get_object("dialog1") self.model = builder.get_object("liststore1") self.treeview = builder.get_object("treeview1") self.contents = builder.get_object("box1") self.revert_button = builder.get_object("revertButton") self.factory_settings = builder.get_object("resetButton") self.restart_warning = builder.get_object("restartWarning") self.sections = {} self.__fillContents() req = self.contents.get_preferred_size()[0] min_width = req.width min_height = req.height width = max(min_width, self.settings.prefsDialogWidth) height = max(min_height, self.settings.prefsDialogHeight) self.dialog.set_transient_for(app.gui) self.dialog.set_default_size(width, height)
def __init__(self, focus, timeline, mode, edge, app, log_actions): GObject.Object.__init__(self) Loggable.__init__(self) if isinstance(focus, GES.TrackElement): self.focus = focus.get_parent() else: self.focus = focus self.with_video = GES.TrackType.VIDEO & self.focus.get_track_types() self.old_position = self.focus.get_start() if edge == GES.Edge.EDGE_END and mode == GES.EditMode.EDIT_TRIM: self.old_position += self.focus.get_duration() self.old_priority = self.focus.get_priority() self.new_position = None self.new_priority = None self.timeline = timeline self.app = app self.edge = edge self.mode = mode from pitivi.undo.timeline import CommitTimelineFinalizingAction self.__log_actions = log_actions if log_actions: self.app.action_log.begin( "move-clip", finalizing_action=CommitTimelineFinalizingAction( self.timeline.get_asset().pipeline), toplevel=True)
def __init__(self, instance, uiman): Gtk.ScrolledWindow.__init__(self) Loggable.__init__(self) self.app = instance self.settings = instance.settings self._project = None self.infobar_box = Gtk.VBox() effect_properties_handling = EffectsPropertiesManager(instance) self.effect_expander = EffectProperties(instance, effect_properties_handling, self) self.effect_expander.set_vexpand(False) # Transformation boxed DISABLED #self.transformation_expander = TransformationProperties(instance, instance.action_log) #self.transformation_expander.set_vexpand(False) vbox = Gtk.VBox() vbox.set_spacing(SPACING) vbox.pack_start(self.infobar_box, False, True, 0) # Transformation boxed DISABLED #vbox.pack_start(self.transformation_expander, False, True, 0) vbox.pack_start(self.effect_expander, True, True, 0) viewport = Gtk.Viewport() viewport.add(vbox) self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.add(viewport) viewport.show() vbox.show() self.infobar_box.show()
def __init__(self, settings=None, realizedCb=None): # Prevent black frames and flickering while resizing or changing focus: # The aspect ratio gets overridden by setDisplayAspectRatio. Gtk.AspectFrame.__init__(self, xalign=0.5, yalign=1.0, ratio=4.0 / 3.0, obey_child=False) Loggable.__init__(self) self.drawing_area = Gtk.DrawingArea() self.drawing_area.set_double_buffered(False) self.drawing_area.connect("draw", self._drawCb, None) # We keep the ViewerWidget hidden initially, or the desktop wallpaper # would show through the non-double-buffered widget! if realizedCb: self.drawing_area.connect("realize", realizedCb, self) self.add(self.drawing_area) self.drawing_area.show() self.seeker = Seeker() self.settings = settings self.box = None self.stored = False self.area = None self.zoom = 1.0 self.sink = None self.pixbuf = None self.pipeline = None self.transformation_properties = None
def __init__(self, instance, hadj): gtk.DrawingArea.__init__(self) Zoomable.__init__(self) Loggable.__init__(self) self.log("Creating new ScaleRuler") self.app = instance self._seeker = Seeker() self.hadj = hadj hadj.connect("value-changed", self._hadjValueChangedCb) self.add_events(gtk.gdk.POINTER_MOTION_MASK | gtk.gdk.BUTTON_PRESS_MASK | gtk.gdk.BUTTON_RELEASE_MASK) self.pixbuf = None # all values are in pixels self.pixbuf_offset = 0 self.pixbuf_offset_painted = 0 # This is the number of width we allocate for the pixbuf self.pixbuf_multiples = 4 self.position = 0 # In nanoseconds self.pressed = False self.need_update = True self.min_frame_spacing = 5.0 self.frame_height = 5.0 self.frame_rate = gst.Fraction(1 / 1)