def __init__(self, instance): Gtk.Box.__init__(self) Loggable.__init__(self) self.app = instance self._drag_icon = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(get_pixmap_dir(), "effects", "defaultthumbnail.svg"), ICON_WIDTH, ICON_HEIGHT) self._star_icon_regular = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(get_pixmap_dir(), "star-regular.svg"), 15, 15) self._star_icon_solid = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(get_pixmap_dir(), "star-solid.svg"), 15, 15) self.set_orientation(Gtk.Orientation.VERTICAL) builder = Gtk.Builder() builder.add_from_file(os.path.join(get_ui_dir(), "effectslibrary.ui")) builder.connect_signals(self) toolbar = builder.get_object("effectslibrary_toolbar") toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_INLINE_TOOLBAR) self.search_entry = builder.get_object("search_entry") self.fav_view_toggle = builder.get_object("favourites_toggle") self.fav_view_toggle.set_image( Gtk.Image.new_from_pixbuf(self._star_icon_solid)) self.main_view = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.category_view = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) # Used for showing search results and favourites self.search_view = Gtk.ListBox(activate_on_single_click=False) self.search_view.connect("row-activated", self.effects_listbox_row_activated_cb) placeholder_text = Gtk.Label(_("No effects")) placeholder_text.props.visible = True self.search_view.set_placeholder(placeholder_text) self.main_view.pack_start(self.category_view, True, True, 0) self.main_view.pack_start(self.search_view, True, True, 0) scrollwin = Gtk.ScrolledWindow() scrollwin.props.hscrollbar_policy = Gtk.PolicyType.NEVER scrollwin.props.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC scrollwin.add(self.main_view) self.pack_start(toolbar, False, False, 0) self.pack_start(scrollwin, True, True, 0) # Delay the loading of the available effects so the application # starts faster. GLib.idle_add(self._load_available_effects_cb) scrollwin.show_all() toolbar.show_all() self.search_view.hide()
def __init__(self, app, project, pipeline=None): Loggable.__init__(self) GladeWindow.__init__(self) self.app = app self.project = project # clone the current project settings self.original_settings = self.project.getSettings() self.settings = self.original_settings.copy() self.project.setSettings(self.settings) # UI widgets self.window.set_icon_from_file(configure.get_pixmap_dir() + "/pitivi-render-16.png") Renderer.__init__(self, project, pipeline) ellipsize(self.muxercombobox) ellipsize(self.audio_encoder_combo) ellipsize(self.video_encoder_combo) self.timestarted = 0 self._displaySettings() self.window.connect("delete-event", self._deleteEventCb) self.settings.connect("settings-changed", self._settingsChanged) self.settings.connect("encoders-changed", self._settingsChanged)
def do_draw(self, cr): Gtk.EventBox.do_draw(self, cr) if TrimHandle.PIXBUF is None: TrimHandle.PIXBUF = GdkPixbuf.Pixbuf.new_from_file( os.path.join(configure.get_pixmap_dir(), "trimbar-focused.png")) Gdk.cairo_set_source_pixbuf(cr, TrimHandle.PIXBUF, 10, 10)
def __init__(self, app, project, pipeline=None): Loggable.__init__(self) GladeWindow.__init__(self) self.app = app # UI widgets self.progressbar = self.widgets["progressbar"] self.filebutton = self.widgets["filebutton"] self.settingsbutton = self.widgets["settingsbutton"] self.cancelbutton = self.widgets["cancelbutton"] self.recordbutton = self.widgets["recordbutton"] self.recordbutton.set_sensitive(False) self.vinfo = self.widgets["videoinfolabel"] self.ainfo = self.widgets["audioinfolabel"] self.window.set_icon_from_file(configure.get_pixmap_dir() + "/pitivi-render-16.png") # grab the Pipeline and settings self.project = project if pipeline != None: self.pipeline = pipeline else: self.pipeline = self.project.pipeline self.detectStreamTypes() self.outfile = None self.rendering = False self.renderaction = None self.settings = project.getSettings() self.timestarted = 0 self._displaySettings() self.window.connect("delete-event", self._deleteEventCb)
def __init__(self, app, parent): GObject.Object.__init__(self) self.app = app self.main_render_dialog = parent self.builder = Gtk.Builder() self.builder.add_from_file( os.path.join(configure.get_ui_dir(), "renderingprogress.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("render-progress") self.table1 = self.builder.get_object("table1") self.progressbar = self.builder.get_object("progressbar") self.play_pause_button = self.builder.get_object("play_pause_button") self.play_rendered_file_button = self.builder.get_object( "play_rendered_file_button") self.close_button = self.builder.get_object("close_button") self.cancel_button = self.builder.get_object("cancel_button") self._filesize_est_label = self.builder.get_object( "estimated_filesize_label") self._filesize_est_value_label = self.builder.get_object( "estimated_filesize_value_label") # Parent the dialog with mainwindow, since renderingdialog is hidden. # It allows this dialog to properly minimize together with mainwindow self.window.set_transient_for(self.app.gui) # UI widgets self.window.set_icon_from_file( configure.get_pixmap_dir() + "/pitivi-render-16.png") # We will only show the close/play buttons when the render is done: self.play_rendered_file_button.hide() self.close_button.hide()
def _makeUI(self): self.set_spacing(6) anim = gtk.gdk.PixbufAnimation(get_pixmap_dir() + "/busy.gif") self.busyanim = gtk.image_new_from_animation(anim) self.busyanim.show() self.erroricon = gtk.image_new_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_SMALL_TOOLBAR) self.erroricon.show() self.infolabel = gtk.Label(self._importingmessage) self.infolabel.set_alignment(0, 0.5) self.infolabel.show() self.questionbutton = gtk.Button() self.questionbutton.set_image( gtk.image_new_from_stock(gtk.STOCK_INFO, gtk.ICON_SIZE_SMALL_TOOLBAR)) self.questionbutton.connect("clicked", self._questionButtonClickedCb) self.questionbutton.show() self._questionshowing = False self.pack_start(self.busyanim, expand=False) self._busyshowing = True self.pack_start(self.infolabel, expand=True, fill=True)
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 _createUi(self): builder = Gtk.Builder() builder.add_from_file(os.path.join(configure.get_ui_dir(), "renderingdialog.ui")) builder.connect_signals(self) self.window = builder.get_object("render-dialog") self.selected_only_button = builder.get_object("selected_only_button") self.video_output_checkbutton = builder.get_object("video_output_checkbutton") self.audio_output_checkbutton = builder.get_object("audio_output_checkbutton") self.render_button = builder.get_object("render_button") self.video_settings_button = builder.get_object("video_settings_button") self.audio_settings_button = builder.get_object("audio_settings_button") self.frame_rate_combo = builder.get_object("frame_rate_combo") self.scale_spinbutton = builder.get_object("scale_spinbutton") self.channels_combo = builder.get_object("channels_combo") self.sample_rate_combo = builder.get_object("sample_rate_combo") self.muxercombobox = builder.get_object("muxercombobox") self.audio_encoder_combo = builder.get_object("audio_encoder_combo") self.video_encoder_combo = builder.get_object("video_encoder_combo") self.filebutton = builder.get_object("filebutton") self.fileentry = builder.get_object("fileentry") self.resolution_label = builder.get_object("resolution_label") self.render_preset_treeview = builder.get_object("render_preset_treeview") self.save_render_preset_button = builder.get_object("save_render_preset_button") self.remove_render_preset_button = builder.get_object("remove_render_preset_button") self.render_preset_infobar = builder.get_object("render-preset-infobar") icon = os.path.join(configure.get_pixmap_dir(), "pitivi-render-16.png") self.window.set_icon_from_file(icon) self.window.set_transient_for(self.app.gui) # Set the shading style in the toolbar below presets presets_toolbar = builder.get_object("render_presets_toolbar") presets_toolbar.get_style_context().add_class("inline-toolbar")
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 create_stock_icons(): """ Creates the pitivi-only stock icons """ gtk.stock_add([ ('pitivi-render', _('Render'), 0, 0, 'pitivi'), ('pitivi-split', _('Split'), 0, 0, 'pitivi'), ('pitivi-keyframe', _('Keyframe'), 0, 0, 'pitivi'), ('pitivi-unlink', _('Unlink'), 0, 0, 'pitivi'), # Translators: This is an action, the title of a button ('pitivi-link', _('Link'), 0, 0, 'pitivi'), ('pitivi-ungroup', _('Ungroup'), 0, 0, 'pitivi'), # Translators: This is an action, the title of a button ('pitivi-group', _('Group'), 0, 0, 'pitivi'), ]) pixmaps = { "pitivi-render" : "pitivi-render-24.png", "pitivi-split" : "pitivi-split-24.svg", "pitivi-keyframe" : "pitivi-keyframe-24.svg", "pitivi-unlink" : "pitivi-unlink-24.svg", "pitivi-link" : "pitivi-relink-24.svg", "pitivi-ungroup" : "pitivi-ungroup-24.svg", "pitivi-group" : "pitivi-group-24.svg", } factory = gtk.IconFactory() pmdir = get_pixmap_dir() for stockid, path in pixmaps.iteritems(): pixbuf = gtk.gdk.pixbuf_new_from_file(os.path.join(pmdir, path)) iconset = gtk.IconSet(pixbuf) factory.add(stockid, iconset) factory.add_default()
def __init__(self, timelineElement, isLeft): Clutter.Texture.__init__(self) self.isLeft = isLeft self.isSelected = False self.timelineElement = timelineElement self.dragAction = Clutter.DragAction() self.set_from_file( os.path.join(configure.get_pixmap_dir(), "trimbar-normal.png")) self.set_size(-1, EXPANDED_SIZE) self.hide() self.set_reactive(True) self.add_action(self.dragAction) self.dragAction.connect("drag-begin", self._dragBeginCb) self.dragAction.connect("drag-end", self._dragEndCb) self.dragAction.connect("drag-progress", self._dragProgressCb) self.connect("enter-event", self._enterEventCb) self.connect("leave-event", self._leaveEventCb) self.timelineElement.connect("enter-event", self._elementEnterEventCb) self.timelineElement.connect("leave-event", self._elementLeaveEventCb) self.timelineElement.bElement.selected.connect("selected-changed", self._selectedChangedCb)
def __init__(self, app, parent): self.app = app self.main_render_dialog = parent self.builder = Gtk.Builder() self.builder.add_from_file(os.path.join(configure.get_ui_dir(), "renderingprogress.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("render-progress") self.table1 = self.builder.get_object("table1") self.progressbar = self.builder.get_object("progressbar") self.play_pause_button = self.builder.get_object("play_pause_button") self.play_rendered_file_button = self.builder.get_object("play_rendered_file_button") self.close_button = self.builder.get_object("close_button") self.cancel_button = self.builder.get_object("cancel_button") # Parent the dialog with mainwindow, since renderingdialog is hidden. # It allows this dialog to properly minimize together with mainwindow self.window.set_transient_for(self.app.gui) # UI widgets self.window.set_icon_from_file(configure.get_pixmap_dir() + "/pitivi-render-16.png") # TODO: show this widget for rendering statistics (bug 637079) self.table1.hide() # We will only show the close/play buttons when the render is done: self.play_rendered_file_button.hide() self.close_button.hide()
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): object.__init__(self) self._pixdir = os.path.join(get_pixmap_dir(), "effects") self.video_effects = [] self.audio_effects = [] self._effect_factories_dict = {} self._setAllEffects()
def __init__(self, timelineElement, isLeft): Clutter.Texture.__init__(self) self.isLeft = isLeft self.isSelected = False self.timelineElement = timelineElement self.dragAction = Clutter.DragAction() self.set_from_file(os.path.join(configure.get_pixmap_dir(), "trimbar-normal.png")) self.set_size(-1, EXPANDED_SIZE) self.hide() self.set_reactive(True) self.add_action(self.dragAction) self.dragAction.connect("drag-begin", self._dragBeginCb) self.dragAction.connect("drag-end", self._dragEndCb) self.dragAction.connect("drag-progress", self._dragProgressCb) self.connect("enter-event", self._enterEventCb) self.connect("leave-event", self._leaveEventCb) self.timelineElement.connect("enter-event", self._elementEnterEventCb) self.timelineElement.connect("leave-event", self._elementLeaveEventCb) self.timelineElement.bElement.selected.connect("selected-changed", self._selectedChangedCb)
def __init__(self): object.__init__(self) self._pixdir = os.path.join(get_pixmap_dir(), "effects") self._audio_categories_effects = ((_("All effects"), ("")),) self._video_categories_effects = ( (_("All effects"), ("")), (_("Colors"), ("cogcolorspace", "alphacolor", "videobalance", "gamma", "alpha", "frei0r-filter-color-distance", "frei0r-filter-contrast0r", "frei0r-filter-invert0r", "frei0r-filter-saturat0r", "frei0r-filter-r", "frei0r-filter-white-balance", "frei0r-filter-brightness", "frei0r-filter-b", "frei0r-filter-gamma", "frei0r-filter-hueshift0r", "frei0r-filter-transparency", "frei0r-filter-equaliz0r", "frei0r-filter-glow", "frei0r-filter-g", "frei0r-filter-bw0r", "burn", "dodge", "coloreffects", "chromium", "exclusion", "glfiltersobel", "Solarize", "frei0r-filter-threshold0r", "frei0r-filter-twolay0r", ) ), (_("Noise"), ("videorate", "frei0r-filter-edgeglow", "gaussianblur", "diffuse", "dilate", "marble", )), (_("Analysis"), ("videoanalyse", "videodetect", "videomark", "revtv", "navigationtest", "frei0r-filter-rgb-parade", "frei0r-filter-vectorscope", "frei0r-filter-luminance", )), (_("Blur"), ("frei0r-filter-squareblur", "gaussianblur", "diffuse", "dilate", "marble", )), (_("Geometry"), ("cogscale", "aspectratiocrop", "cogdownsample", "videocrop", "videoflip", "videobox", "gdkpixbufscale", "frei0r-filter-letterb0xed", "frei0r-filter-k-means-clustering", "videoscale", "frei0r-filter-lens-correction", "frei0r-filter-perspective", "frei0r-filter-scale0tilt", "frei0r-filter-pixeliz0r", "frei0r-filter-flippo", "frei0r-filter-3dflippo", "frei0r-filter-letterb0xed", "bulge", "circle", "fisheye", "kaleidoscope", "mirror", "pinch", "sphere", "square", "stretch", "twirl", "waterriple", ) ), (_("Fancy"), ("rippletv", "streaktv", "radioactv", "optv", "quarktv", "vertigotv", "shagadelictv", "warptv", "dicetv", "agingtv", "edgetv", "frei0r-filter-cartoon", "frei0r-filter-water", "frei0r-filter-nosync0r", "frei0r-filter-k-means-clustering", "frei0r-filter-delay0r", "bulge", "circle", "fisheye", "kaleidoscope", "mirror", "pinch", "sphere", "square", "stretch", "twirl", "waterriple", ) ), (_("Time"), ("frei0r-filter-delay0r",)), (_("Uncategorized"), ("",)) ) self._audio_categories = set([]) self._video_categories = set([]) self.video_effects = [] self.audio_effects = [] self._effect_factories_dict = {} self._setAllEffects()
def __init__(self, instance): self.app = instance self._createUi() self.yt_service = gdata.youtube.service.YouTubeService() self.yt_service.ssl = False self.downloading = 0 self._packed = 0 self.toggled = 1 self.thumbnail_list = [] self.pixdir = os.path.join(get_pixmap_dir(),"YouTube/")
def _dragEndCb(self, action, actor, event_x, event_y, modifiers): self.timelineElement.setDragged(False) self._context.finish() self.timelineElement.set_reactive(True) for elem in self.timelineElement.get_children(): elem.set_reactive(True) self.set_from_file(os.path.join(configure.get_pixmap_dir(), "trimbar-normal.png")) self.timelineElement.timeline._container.embed.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.ARROW))
def _dragEndCb(self, unused_action, unused_actor, unused_event_x, unused_event_y, unused_modifiers): self.timelineElement.setDragged(False) self._context.finish() self.timelineElement.set_reactive(True) for elem in self.timelineElement.get_children(): elem.set_reactive(True) self.set_from_file(os.path.join(configure.get_pixmap_dir(), "trimbar-normal.png")) self.timelineElement.timeline._container.embed.get_window().set_cursor(NORMAL_CURSOR)
def __init__(self, app, parent): GladeWindow.__init__(self) self.app = app # Parent the dialog with mainwindow, since encodingdialog is hidden. # It allows this dialog to properly minimize together with mainwindow self.window.set_transient_for(self.app) # UI widgets self.window.set_icon_from_file(configure.get_pixmap_dir() + "/pitivi-render-16.png")
def _enterEventCb(self, unused_actor, unused_event): self.timelineElement.set_reactive(False) for elem in self.timelineElement.get_children(): elem.set_reactive(False) self.set_reactive(True) self.set_from_file(os.path.join(configure.get_pixmap_dir(), "trimbar-focused.png")) if self.isLeft: self.timelineElement.timeline._container.embed.get_window().set_cursor(DRAG_LEFT_HANDLEBAR_CURSOR) else: self.timelineElement.timeline._container.embed.get_window().set_cursor(DRAG_RIGHT_HANDLEBAR_CURSOR)
def _enterEventCb(self, actor, event): self.timelineElement.set_reactive(False) for elem in self.timelineElement.get_children(): elem.set_reactive(False) self.set_reactive(True) self.set_from_file(os.path.join(configure.get_pixmap_dir(), "trimbar-focused.png")) if self.isLeft: self.timelineElement.timeline._container.embed.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_SIDE)) else: self.timelineElement.timeline._container.embed.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.RIGHT_SIDE))
def icon(self): pixdir = os.path.join(get_pixmap_dir(), "effects") try: # We can afford to scale the images here, the impact is negligible icon = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(pixdir, self.effect_name + ".png"), ICON_WIDTH, ICON_WIDTH) except GLib.Error: icon = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(pixdir, "defaultthumbnail.svg"), ICON_WIDTH, ICON_HEIGHT) return icon
def _leaveEventCb(self, unused_actor, event): self.timelineElement.set_reactive(True) children = self.timelineElement.get_children() other_actor = self.timelineElement.timeline._container.stage.get_actor_at_pos(Clutter.PickMode.ALL, event.x, event.y) if other_actor not in children: self.timelineElement.hideHandles() for elem in children: elem.set_reactive(True) self.set_from_file(os.path.join(configure.get_pixmap_dir(), "trimbar-normal.png")) self.timelineElement.timeline._container.embed.get_window().set_cursor(NORMAL_CURSOR)
def _getIcon(self, iconname, alternate): icontheme = gtk.icon_theme_get_default() pixdir = get_pixmap_dir() icon = None try: icon = icontheme.load_icon(iconname, 32, 0) except: # empty except clause is bad but load_icon raises gio.Error. # Right, *gio*. if not icon: icon = gtk.gdk.pixbuf_new_from_file(os.path.join(pixdir, alternate)) return icon
def _dragEndCb(self, action, actor, event_x, event_y, modifiers): self.timelineElement.setDragged(False) self._context.finish() self.timelineElement.set_reactive(True) for elem in self.timelineElement.get_children(): elem.set_reactive(True) self.set_from_file( os.path.join(configure.get_pixmap_dir(), "trimbar-normal.png")) self.timelineElement.timeline._container.embed.get_window().set_cursor( Gdk.Cursor.new(Gdk.CursorType.ARROW))
def icon(self): pixdir = os.path.join(get_pixmap_dir(), "effects") try: # We can afford to scale the images here, the impact is negligible icon = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(pixdir, self.effect_name + ".png"), ICON_WIDTH, ICON_WIDTH) # An empty except clause is bad, but "gi._glib.GError" is not helpful. except: icon = GdkPixbuf.Pixbuf.new_from_file( os.path.join(pixdir, "defaultthumbnail.svg")) return icon
def _getIcon(self, iconname, alternate): icontheme = gtk.icon_theme_get_default() pixdir = get_pixmap_dir() icon = None try: icon = icontheme.load_icon(iconname, 32, 0) except: # empty except clause is bad but load_icon raises gio.Error. # Right, *gio*. if not icon: icon = gtk.gdk.pixbuf_new_from_file( os.path.join(pixdir, alternate)) return icon
def _getIcon(self, iconname, alternate=None): icontheme = Gtk.IconTheme.get_default() pixdir = get_pixmap_dir() icon = None try: icon = icontheme.load_icon(iconname, 48, 0) except: # empty except clause is bad but load_icon raises Gio.Error. # Right, *gio*. if alternate: icon = GdkPixbuf.Pixbuf.new_from_file(os.path.join(pixdir, alternate)) else: icon = icontheme.load_icon("dialog-question", 48, 0) return icon
def _createUi(self): builder = Gtk.Builder() builder.add_from_file( os.path.join(configure.get_ui_dir(), "renderingdialog.ui")) builder.connect_signals(self) self.window = builder.get_object("render-dialog") self.video_output_checkbutton = builder.get_object( "video_output_checkbutton") self.audio_output_checkbutton = builder.get_object( "audio_output_checkbutton") self.render_button = builder.get_object("render_button") self.video_settings_button = builder.get_object( "video_settings_button") self.audio_settings_button = builder.get_object( "audio_settings_button") self.frame_rate_combo = builder.get_object("frame_rate_combo") self.frame_rate_combo.set_model(frame_rates) self.scale_spinbutton = builder.get_object("scale_spinbutton") self.channels_combo = builder.get_object("channels_combo") self.channels_combo.set_model(audio_channels) self.sample_rate_combo = builder.get_object("sample_rate_combo") self.muxer_combo = builder.get_object("muxercombobox") self.audio_encoder_combo = builder.get_object("audio_encoder_combo") self.video_encoder_combo = builder.get_object("video_encoder_combo") self.filebutton = builder.get_object("filebutton") self.fileentry = builder.get_object("fileentry") self.resolution_label = builder.get_object("resolution_label") self.presets_combo = builder.get_object("presets_combo") self.preset_menubutton = builder.get_object("preset_menubutton") self.video_output_checkbutton.props.active = self.project.video_profile.is_enabled( ) self.audio_output_checkbutton.props.active = self.project.audio_profile.is_enabled( ) self.__automatically_use_proxies = builder.get_object( "automatically_use_proxies") self.__always_use_proxies = builder.get_object("always_use_proxies") self.__always_use_proxies.props.group = self.__automatically_use_proxies self.__never_use_proxies = builder.get_object("never_use_proxies") self.__never_use_proxies.props.group = self.__automatically_use_proxies self.render_presets.setupUi(self.presets_combo, self.preset_menubutton) icon = os.path.join(configure.get_pixmap_dir(), "pitivi-render-16.png") self.window.set_icon_from_file(icon) self.window.set_transient_for(self.app.gui)
def _enterEventCb(self, actor, event): self.timelineElement.set_reactive(False) for elem in self.timelineElement.get_children(): elem.set_reactive(False) self.set_reactive(True) self.set_from_file( os.path.join(configure.get_pixmap_dir(), "trimbar-focused.png")) if self.isLeft: self.timelineElement.timeline._container.embed.get_window( ).set_cursor(Gdk.Cursor.new(Gdk.CursorType.LEFT_SIDE)) else: self.timelineElement.timeline._container.embed.get_window( ).set_cursor(Gdk.Cursor.new(Gdk.CursorType.RIGHT_SIDE))
def __init__(self, app): Gtk.Expander.__init__(self) self.set_expanded(True) self.set_label(_("Effects")) Loggable.__init__(self) self.app = app self.clip = None self.effects_properties_manager = EffectsPropertiesManager(app) setup_custom_effect_widgets(self.effects_properties_manager) self.drag_lines_pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size( os.path.join(get_pixmap_dir(), "grip-lines-solid.svg"), 15, 15) self.expander_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) self.effects_listbox = Gtk.ListBox() placeholder_label = Gtk.Label( _("To apply an effect to the clip, drag it from the Effect Library " "or use the button below.")) placeholder_label.set_line_wrap(True) placeholder_label.show() self.effects_listbox.set_placeholder(placeholder_label) # Add effect popover button self.effect_popover = EffectsPopover(app) self.add_effect_button = Gtk.MenuButton(_("Add Effect")) self.add_effect_button.set_popover(self.effect_popover) self.add_effect_button.props.halign = Gtk.Align.CENTER self.drag_dest_set(Gtk.DestDefaults.DROP, [EFFECT_TARGET_ENTRY], Gdk.DragAction.COPY) self.expander_box.pack_start(self.effects_listbox, False, False, 0) self.expander_box.pack_start(self.add_effect_button, False, False, PADDING) self.add(self.expander_box) # Connect all the widget signals self.connect("drag-motion", self._drag_motion_cb) self.connect("drag-leave", self._drag_leave_cb) self.connect("drag-data-received", self._drag_data_received_cb) self.add_effect_button.connect("toggled", self._add_effect_button_cb) self.show_all()
def _createUi(self): builder = Gtk.Builder() builder.add_from_file( os.path.join(configure.get_ui_dir(), "renderingdialog.ui")) builder.connect_signals(self) self.window = builder.get_object("render-dialog") self.video_output_checkbutton = builder.get_object( "video_output_checkbutton") self.audio_output_checkbutton = builder.get_object( "audio_output_checkbutton") self.render_button = builder.get_object("render_button") self.video_settings_button = builder.get_object( "video_settings_button") self.audio_settings_button = builder.get_object( "audio_settings_button") self.frame_rate_combo = builder.get_object("frame_rate_combo") self.frame_rate_combo.set_model(frame_rates) self.scale_spinbutton = builder.get_object("scale_spinbutton") self.channels_combo = builder.get_object("channels_combo") self.channels_combo.set_model(audio_channels) self.sample_rate_combo = builder.get_object("sample_rate_combo") self.muxer_combo = builder.get_object("muxercombobox") self.audio_encoder_combo = builder.get_object("audio_encoder_combo") self.video_encoder_combo = builder.get_object("video_encoder_combo") self.filebutton = builder.get_object("filebutton") self.fileentry = builder.get_object("fileentry") self.resolution_label = builder.get_object("resolution_label") self.presets_combo = builder.get_object("presets_combo") self.preset_menubutton = builder.get_object("preset_menubutton") self.video_output_checkbutton.props.active = self.project.video_profile.is_enabled() self.audio_output_checkbutton.props.active = self.project.audio_profile.is_enabled() self.__automatically_use_proxies = builder.get_object( "automatically_use_proxies") self.__always_use_proxies = builder.get_object("always_use_proxies") self.__always_use_proxies.props.group = self.__automatically_use_proxies self.__never_use_proxies = builder.get_object("never_use_proxies") self.__never_use_proxies.props.group = self.__automatically_use_proxies self.render_presets.setupUi(self.presets_combo, self.preset_menubutton) icon = os.path.join(configure.get_pixmap_dir(), "pitivi-render-16.png") self.window.set_icon_from_file(icon) self.window.set_transient_for(self.app.gui)
def _leaveEventCb(self, actor, event): self.timelineElement.set_reactive(True) actor = self.timelineElement.timeline._container.stage.get_actor_at_pos(Clutter.PickMode.ALL, event.x, event.y) try: element = actor.bElement if element != self.timelineElement.bELement and not self.isSelected: self.timelineElement.hideHandles() except AttributeError: if not self.isSelected: self.timelineElement.hideHandles() for elem in self.timelineElement.get_children(): elem.set_reactive(True) self.set_from_file(os.path.join(configure.get_pixmap_dir(), "trimbar-normal.png")) self.timelineElement.timeline._container.embed.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.ARROW))
def getEffectIcon(self, effect_name): icontheme = gtk.icon_theme_get_default() pixdir = get_pixmap_dir() icon = None try: icon = icontheme.load_icon(effect_name, 32, 0) except: # empty except clause is bad but load_icon raises gio.Error. ## Right, *gio*. if not icon: effect_name = effect_name + ".png" try: icon = gtk.gdk.pixbuf_new_from_file(os.path.join(pixdir, effect_name)) except: return None return icon
def getEffectIcon(self, effect_name): icontheme = gtk.icon_theme_get_default() pixdir = get_pixmap_dir() icon = None try: icon = icontheme.load_icon(effect_name, 32, 0) except: # empty except clause is bad but load_icon raises gio.Error. ## Right, *gio*. if not icon: effect_name = effect_name + ".png" try: icon = gtk.gdk.pixbuf_new_from_file( os.path.join(pixdir, effect_name)) except: return None return icon
def __init__(self, app, project, pipeline=None): Loggable.__init__(self) self.app = app self.builder = gtk.Builder() self.builder.add_from_file(os.path.join(configure.get_ui_dir(), "encodingdialog.ui")) self._setProperties() self.builder.connect_signals(self) # UI widgets icon = os.path.join(configure.get_pixmap_dir(), "pitivi-render-16.png") self.window.set_icon_from_file(icon) # FIXME: re-enable this widget when bug #637078 is implemented self.selected_only_button.destroy() # The Render dialog and the Project Settings dialog have some # common settings, for example the audio sample rate. # When these common settings are changed in the Render dialog, # we don't want them to be saved, so we create a copy of the project's # settings to be used by the Render dialog for rendering. render_settings = project.getSettings().copy() # Note: render_settings will end up as self.settings. Renderer.__init__(self, project, pipeline=pipeline, settings=render_settings) # Directory and Filename self.filebutton.set_current_folder(self.app.settings.lastExportFolder) self.updateFilename(self.project.name) # We store these so that when the user tries various container formats, # (AKA muxers) we select these a/v encoders, if they are compatible with # the current container format. self.preferred_vencoder = self.settings.vencoder self.preferred_aencoder = self.settings.aencoder self._initializeComboboxModels() self._displaySettings() self._displayRenderSettings() self.window.connect("delete-event", self._deleteEventCb) self.settings.connect("settings-changed", self._settingsChanged)
def _createUi(self): builder = Gtk.Builder() builder.add_from_file( os.path.join(configure.get_ui_dir(), "renderingdialog.ui")) builder.connect_signals(self) self.window = builder.get_object("render-dialog") self.selected_only_button = builder.get_object("selected_only_button") self.video_output_checkbutton = builder.get_object( "video_output_checkbutton") self.audio_output_checkbutton = builder.get_object( "audio_output_checkbutton") self.render_button = builder.get_object("render_button") self.video_settings_button = builder.get_object( "video_settings_button") self.audio_settings_button = builder.get_object( "audio_settings_button") self.frame_rate_combo = builder.get_object("frame_rate_combo") self.scale_spinbutton = builder.get_object("scale_spinbutton") self.channels_combo = builder.get_object("channels_combo") self.sample_rate_combo = builder.get_object("sample_rate_combo") self.muxercombobox = builder.get_object("muxercombobox") self.audio_encoder_combo = builder.get_object("audio_encoder_combo") self.video_encoder_combo = builder.get_object("video_encoder_combo") self.filebutton = builder.get_object("filebutton") self.fileentry = builder.get_object("fileentry") self.resolution_label = builder.get_object("resolution_label") self.render_preset_treeview = builder.get_object( "render_preset_treeview") self.save_render_preset_button = builder.get_object( "save_render_preset_button") self.remove_render_preset_button = builder.get_object( "remove_render_preset_button") self.render_preset_infobar = builder.get_object( "render-preset-infobar") icon = os.path.join(configure.get_pixmap_dir(), "pitivi-render-16.png") self.window.set_icon_from_file(icon) self.window.set_transient_for(self.app.gui) # Set the shading style in the toolbar below presets presets_toolbar = builder.get_object("render_presets_toolbar") presets_toolbar.get_style_context().add_class( Gtk.STYLE_CLASS_INLINE_TOOLBAR)
def _leaveEventCb(self, actor, event): self.timelineElement.set_reactive(True) actor = self.timelineElement.timeline._container.stage.get_actor_at_pos( Clutter.PickMode.ALL, event.x, event.y) try: element = actor.bElement if element != self.timelineElement.bELement and not self.isSelected: self.timelineElement.hideHandles() except AttributeError: if not self.isSelected: self.timelineElement.hideHandles() for elem in self.timelineElement.get_children(): elem.set_reactive(True) self.set_from_file( os.path.join(configure.get_pixmap_dir(), "trimbar-normal.png")) self.timelineElement.timeline._container.embed.get_window().set_cursor( Gdk.Cursor.new(Gdk.CursorType.ARROW))
def __init__(self, app): self.builder = Gtk.Builder() self.builder.add_from_file(os.path.join(configure.get_ui_dir(), "alignmentprogress.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("align-progress") self.progressbar = self.builder.get_object("progressbar") # Parent this dialog with mainwindow # set_transient_for allows this dialog to properly # minimize together with the mainwindow. This method is # taken from RenderingProgressDialog. In both cases, it appears # to work correctly, although there is a known bug for Gnome 3 in # RenderingProgressDialog (bug #652917) self.window.set_transient_for(app.gui) # UI widgets # We currently reuse the render icon for this dialog. icon_path = os.path.join(configure.get_pixmap_dir(), "pitivi-render-16.png") self.window.set_icon_from_file(icon_path)
def __init__(self, app, parent): self.app = app self.builder = Gtk.Builder() self.builder.add_from_file(os.path.join(configure.get_ui_dir(), "renderingprogress.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("render-progress") self.table1 = self.builder.get_object("table1") self.progressbar = self.builder.get_object("progressbar") self.play_pause_button = self.builder.get_object("play_pause_button") # Parent the dialog with mainwindow, since renderingdialog is hidden. # It allows this dialog to properly minimize together with mainwindow self.window.set_transient_for(self.app.gui) # UI widgets self.window.set_icon_from_file(configure.get_pixmap_dir() + "/pitivi-render-16.png") # TODO: show this widget for rendering statistics (bug 637079) self.table1.hide()
def __init__(self, app): self.builder = Gtk.Builder() self.builder.add_from_file( os.path.join(configure.get_ui_dir(), "alignmentprogress.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("align-progress") self.progressbar = self.builder.get_object("progressbar") # Parent this dialog with mainwindow # set_transient_for allows this dialog to properly # minimize together with the mainwindow. This method is # taken from RenderingProgressDialog. In both cases, it appears # to work correctly, although there is a known bug for Gnome 3 in # RenderingProgressDialog (bug #652917) self.window.set_transient_for(app.gui) # UI widgets # We currently reuse the render icon for this dialog. icon_path = os.path.join(configure.get_pixmap_dir(), "pitivi-render-16.png") self.window.set_icon_from_file(icon_path)
def __init__(self, app, parent): self.app = app self.builder = gtk.Builder() self.builder.add_from_file(os.path.join(configure.get_ui_dir(), "encodingprogress.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("render-progress") self.table1 = self.builder.get_object("table1") self.progressbar = self.builder.get_object("progressbar") self.play_pause_button = self.builder.get_object("play_pause_button") # Parent the dialog with mainwindow, since encodingdialog is hidden. # It allows this dialog to properly minimize together with mainwindow self.window.set_transient_for(self.app) # UI widgets self.window.set_icon_from_file(configure.get_pixmap_dir() + "/pitivi-render-16.png") # FIXME: re-enable these widgets when bugs #650710 and 637079 are fixed self.play_pause_button.hide() self.table1.hide()
def _makeUI(self): self.set_spacing(6) anim = gtk.gdk.PixbufAnimation(get_pixmap_dir() + "/busy.gif") self.busyanim = gtk.image_new_from_animation(anim) self.busyanim.show() self.erroricon = gtk.image_new_from_stock(gtk.STOCK_DIALOG_WARNING, gtk.ICON_SIZE_SMALL_TOOLBAR) self.erroricon.show() self.infolabel = gtk.Label(self._importingmessage) self.infolabel.set_alignment(0, 0.5) self.infolabel.show() self.questionbutton = gtk.Button() self.questionbutton.set_image(gtk.image_new_from_stock(gtk.STOCK_INFO, gtk.ICON_SIZE_SMALL_TOOLBAR)) self.questionbutton.connect("clicked", self._questionButtonClickedCb) self.questionbutton.show() self._questionshowing = False self.pack_start(self.busyanim, expand=False) self._busyshowing = True self.pack_start(self.infolabel, expand=True, fill=True)
def __init__(self, app, parent): self.app = app self.builder = gtk.Builder() self.builder.add_from_file( os.path.join(configure.get_ui_dir(), "encodingprogress.ui")) self.builder.connect_signals(self) self.window = self.builder.get_object("render-progress") self.table1 = self.builder.get_object("table1") self.progressbar = self.builder.get_object("progressbar") self.play_pause_button = self.builder.get_object("play_pause_button") # Parent the dialog with mainwindow, since encodingdialog is hidden. # It allows this dialog to properly minimize together with mainwindow self.window.set_transient_for(self.app) # UI widgets self.window.set_icon_from_file(configure.get_pixmap_dir() + "/pitivi-render-16.png") # FIXME: re-enable these widgets when bugs #650710 and 637079 are fixed self.play_pause_button.hide() self.table1.hide()
def __init__(self, app, project, pipeline=None): Loggable.__init__(self) GladeWindow.__init__(self) self.app = app # UI widgets self.progressbar = self.widgets["progressbar"] self.filebutton = self.widgets["filebutton"] self.settingsbutton = self.widgets["settingsbutton"] self.cancelbutton = self.widgets["cancelbutton"] self.recordbutton = self.widgets["recordbutton"] self.recordbutton.set_sensitive(False) self.vinfo = self.widgets["videoinfolabel"] self.ainfo = self.widgets["audioinfolabel"] self.window.set_icon_from_file(configure.get_pixmap_dir() + "/pitivi-render-16.png") Renderer.__init__(self, project, pipeline) self.timestarted = 0 self._displaySettings() self.window.connect("delete-event", self._deleteEventCb)
.Marker { background-image: url('%(marker_unselected)s'); } .Marker:hover { background-image: url('%(marker_hovered)s'); } .Marker:selected { background-image: url('%(marker_hovered)s'); } """ % ({ 'clip_border_width': CLIP_BORDER_WIDTH, 'marker_hovered': os.path.join(get_pixmap_dir(), "marker-hover.png"), 'marker_unselected': os.path.join(get_pixmap_dir(), "marker-unselect.png"), 'trimbar_focused': os.path.join(get_pixmap_dir(), "trimbar-focused.png"), 'trimbar_normal': os.path.join(get_pixmap_dir(), "trimbar-normal.png")}) PREFERENCES_CSS = """ .sidebar list { background: @content_view_bg; } .sidebar row { padding: 10px 40px 10px 4px; } .prefs_list row {
def __init__(self, app): Gtk.Box.__init__(self) Loggable.__init__(self) self.app = app self.element = None self._pixdir = os.path.join(get_pixmap_dir(), "transitions") icon_theme = Gtk.IconTheme.get_default() self._question_icon = icon_theme.load_icon("dialog-question", 48, 0) self.set_orientation(Gtk.Orientation.VERTICAL) # Whether a child widget has the focus. self.container_focused = False # Tooltip handling self._current_transition_name = None self._current_tooltip_icon = None # Searchbox self.searchbar = Gtk.Box() self.searchbar.set_orientation(Gtk.Orientation.HORIZONTAL) # Prevents being flush against the notebook self.searchbar.set_border_width(3) self.searchEntry = Gtk.Entry() self.searchEntry.set_icon_from_icon_name( Gtk.EntryIconPosition.SECONDARY, "edit-clear-symbolic") self.searchEntry.set_placeholder_text(_("Search...")) self.searchbar.pack_end(self.searchEntry, True, True, 0) self.props_widgets = Gtk.Grid() self.props_widgets.props.margin = PADDING self.props_widgets.props.column_spacing = SPACING self.border_mode_normal = Gtk.RadioButton( group=None, label=_("Normal")) self.border_mode_normal.set_active(True) self.props_widgets.attach(self.border_mode_normal, 0, 0, 1, 1) self.border_mode_loop = Gtk.RadioButton( group=self.border_mode_normal, label=_("Loop")) self.props_widgets.attach(self.border_mode_loop, 0, 1, 1, 1) self.border_scale = Gtk.Scale.new(Gtk.Orientation.HORIZONTAL, None) self.border_scale.set_draw_value(False) self.props_widgets.attach(self.border_scale, 1, 0, 1, 2) self.invert_checkbox = Gtk.CheckButton(label=_("Reverse direction")) self.invert_checkbox.props.margin_top = SPACING self.props_widgets.attach(self.invert_checkbox, 1, 2, 1, 1) # Set the default values self.__updateBorderScale() self.infobar = Gtk.InfoBar() fix_infobar(self.infobar) self.infobar.props.message_type = Gtk.MessageType.OTHER txtlabel = Gtk.Label() txtlabel.set_line_wrap(True) txtlabel.set_text( _("Create a transition by overlapping two adjacent clips on the " "same layer. Click the transition on the timeline to change " "the transition type.")) self.infobar.get_content_area().add(txtlabel) self.storemodel = Gtk.ListStore(GES.Asset, str, str, GdkPixbuf.Pixbuf) self.iconview_scrollwin = Gtk.ScrolledWindow() self.iconview_scrollwin.set_shadow_type(Gtk.ShadowType.ETCHED_IN) # FIXME: the "never" horizontal scroll policy in GTK2 messes up iconview # Re-enable this when we switch to GTK3 # See also http://python.6.n6.nabble.com/Cannot-shrink-width-of-scrolled-textview-tp1945060.html # self.iconview_scrollwin.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) self.iconview = Gtk.IconView(model=self.storemodel) self.iconview.set_pixbuf_column(COL_ICON) # We don't show text because we have a searchbar and the names are ugly # self.iconview.set_text_column(COL_NAME_TEXT) self.iconview.set_item_width(48 + 10) self.iconview_scrollwin.add(self.iconview) self.iconview.set_property("has_tooltip", True) self.searchEntry.connect("changed", self._searchEntryChangedCb) self.searchEntry.connect("icon-press", self._searchEntryIconClickedCb) self.iconview.connect("query-tooltip", self._queryTooltipCb) # Speed-up startup by only checking available transitions on idle GLib.idle_add(self._loadAvailableTransitionsCb) self.pack_start(self.infobar, False, False, 0) self.pack_start(self.searchbar, False, False, 0) self.pack_start(self.iconview_scrollwin, True, True, 0) self.pack_start(self.props_widgets, False, False, 0) # Create the filterModel for searching self.modelFilter = self.storemodel.filter_new() self.iconview.set_model(self.modelFilter) self.infobar.show_all() self.iconview_scrollwin.show_all() self.iconview.hide() self.props_widgets.set_sensitive(False) self.props_widgets.hide() self.searchbar.hide()