From 7a0e8f3afa84c575a912e491d7aa4b2ce3a515b2 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Fri, 22 Jun 2018 10:01:48 -0400 Subject: [PATCH 01/12] Remove tutorials array from manager class It's never used. --- src/windows/views/tutorial.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/windows/views/tutorial.py b/src/windows/views/tutorial.py index 4db4569153..56650d4769 100644 --- a/src/windows/views/tutorial.py +++ b/src/windows/views/tutorial.py @@ -321,7 +321,6 @@ def minimize(self): def __init__(self, win): """ Constructor """ - self.tutorials = [] self.win = win self.current_dialog = None From 76aead5fe6a1e202b434fc7049d7b548660e5471 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Sat, 23 Jun 2018 11:58:47 -0400 Subject: [PATCH 02/12] Add a QDockWidget for the tutorial popups --- src/windows/ui/main-window.ui | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/windows/ui/main-window.ui b/src/windows/ui/main-window.ui index 50d663d966..3af3e1af19 100644 --- a/src/windows/ui/main-window.ui +++ b/src/windows/ui/main-window.ui @@ -293,6 +293,50 @@ + + + + 0 + 0 + + + + + 10 + 10 + + + + Qt::ClickFocus + + + Qt::NoContextMenu + + + true + + + QDockWidget::DockWidgetFloatable + + + Qt::NoDockWidgetArea + + + Tutorial + + + false + + + false + + + false + + + 0 + + From e46e57e3dea7a3da3cef941375f9bbaa325c0c4b Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Sat, 23 Jun 2018 12:15:01 -0400 Subject: [PATCH 03/12] Re-work communication with child windows This does away with the main window's (expensive) event filter, which was previously used to communicate state to tutorial popups. Instead it reimplements QMainWindow's event processing methods `moveEvent()`, `resizeEvent()`, `showEvent()`, and `hideEvent()` to propagate certain events to ALL floating QDockWidgets. This way, if (for example) Properties is floating and OpenShot is minimized, the floating dock will minimize with it, and it will restore again when the application is unminimized. By turning the tutorial popups into floating QDockWidgets (separate commit), they will also benefit from this change. Move and Resize events on the main window trigger a call to the tutorial manager's `re_position_dialog()`, which updates the placement of the tutorial popup (if visible). --- src/windows/main_window.py | 37 +++++++++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/windows/main_window.py b/src/windows/main_window.py index a0a8606d4d..42325ed5ef 100644 --- a/src/windows/main_window.py +++ b/src/windows/main_window.py @@ -2053,17 +2053,37 @@ def foundCurrentVersion(self, version): def moveEvent(self, event): """ Move tutorial dialogs also (if any)""" + QMainWindow.moveEvent(self, event) if self.tutorial_manager: + #log.info("Sending move event to tutorial manager") self.tutorial_manager.re_position_dialog() - def eventFilter(self, object, e): - """ Filter out certain types of window events """ - if e.type() == QEvent.WindowActivate: - self.tutorial_manager.re_show_dialog() - elif e.type() == QEvent.WindowStateChange and self.isMinimized(): - self.tutorial_manager.minimize() + def resizeEvent(self, event): + QMainWindow.resizeEvent(self, event) + if self.tutorial_manager: + #log.info("Sending resize event to tutorial manager") + self.tutorial_manager.re_position_dialog() + + def showEvent(self, event): + """ Have any child windows follow main-window state """ + #log.info("Showing main window") + QMainWindow.showEvent(self, event) + for child in self.findChildren(QDockWidget): + if child.isFloating() and child.isEnabled(): + # child.setWindowState(self.windowState()) + #log.info("Showing child {}".format(child.windowTitle())) + child.raise_() + child.show() + + def hideEvent(self, event): + """ Have any child windows hide with main window """ + #log.info("Hiding main window") + QMainWindow.hideEvent(self, event) + for child in self.findChildren(QDockWidget): + if child.isFloating() and child.isVisible(): + #log.info("Hiding child {}".format(child.windowTitle())) + child.hide() - return False def show_property_timeout(self): """Callback for show property timer""" @@ -2316,9 +2336,6 @@ def __init__(self, mode=None): self.ExportFrame.connect(self.FrameExported) self.ExportEnded.connect(self.ExportFinished) - # Install event filter - self.installEventFilter(self) - # Save settings s.save() From 6e0e88adce69d3b144bc3710de9ee1ff07160aac Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Sat, 23 Jun 2018 12:26:07 -0400 Subject: [PATCH 04/12] Convert tutorial popups into floating QDockWidget This commit radically alters the structure of the tutorial system, based on some research and a half-formed suggestion I saw on some StackOverflow question related to Qt window management. It uses the same floating, non-dockable QDockWidget (initially hidden) to display all of the popups. The widget contained within that dock is replaced for each tutorial step. The dock has no titlebar or frame, and should appear identical to the previous tutorial popup windows. Because the tutorials are held in a QDockWidget, Qt automatically takes care of keeping the tutorial popups in front of the main application window. The event filter is once again done away with, and calls to the `show()` and `raise_()` methods are tightly managed to prevent unnecessary interface updates. My hope is that this will dramatically reduce the flicker and GUI unresponsiveness that some users have encountered. This is not quite complete, and requires extensive testing on platforms other than Linux especially. I'm making this WIP commit in order to test the current code under Windows. Currently unresolved: * Qt will keep the tutorial boxes above the QMainWindow, but I'm having trouble keeping the tutorial popups from ending up behind OTHER floating QDockWidgets, especially after a minimize/restore cycle. --- src/windows/views/tutorial.py | 95 ++++++++++++++--------------------- 1 file changed, 39 insertions(+), 56 deletions(-) diff --git a/src/windows/views/tutorial.py b/src/windows/views/tutorial.py index 56650d4769..6e31560a01 100644 --- a/src/windows/views/tutorial.py +++ b/src/windows/views/tutorial.py @@ -29,7 +29,7 @@ from PyQt5.QtCore import Qt, QPoint, QRectF, QEvent from PyQt5.QtGui import * -from PyQt5.QtWidgets import QLabel, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QToolButton, QCheckBox +from PyQt5.QtWidgets import QLabel, QWidget, QDockWidget, QVBoxLayout, QHBoxLayout, QPushButton, QToolButton, QCheckBox from classes.logger import log from classes.settings import get_settings @@ -38,7 +38,7 @@ class TutorialDialog(QWidget): - """ A QWidget used to instruct a user how to use a certain feature """ + """ A customized QWidget used to instruct a user how to use a certain feature """ def paintEvent(self, event, *args): """ Custom paint event """ @@ -71,26 +71,6 @@ def paintEvent(self, event, *args): painter.fillPath(path, QColor("#53a0ed")) painter.drawPath(path) - def eventFilter(self, object, e): - if e.type() == QEvent.WindowActivate: - # Raise parent window, and then this tutorial - #log.info("Raising main app and tutorial popup") - get_app().window.show() - get_app().window.raise_() - self.moveWidget() - self.show() - self.raise_() - # Filter event out (prevent further handling) - return True - else: - return False - - def moveWidget(self): - """ Move widget next to its position widget """ - x = self.position_widget.mapToGlobal(self.position_widget.pos()).x() - y = self.position_widget.mapToGlobal(self.position_widget.pos()).y() - self.move(QPoint(x + self.x_offset, y + self.y_offset)) - def checkbox_metrics_callback(self, state): """ Callback for error and anonymous usage checkbox""" s = get_settings() @@ -107,7 +87,7 @@ def checkbox_metrics_callback(self, state): # Disable metric sending s.set("send_metrics", False) - def __init__(self, id, text, position_widget, x_offset, y_offset, arrow, *args): + def __init__(self, id, text, arrow, *args): # Invoke parent init QWidget.__init__(self, *args) @@ -117,9 +97,6 @@ def __init__(self, id, text, position_widget, x_offset, y_offset, arrow, *args): # Keep track of widget to position next to self.id = id - self.position_widget = position_widget - self.x_offset = x_offset - self.y_offset = y_offset self.arrow = arrow # Create vertical box @@ -173,17 +150,9 @@ def __init__(self, id, text, position_widget, x_offset, y_offset, arrow, *args): self.setMinimumWidth(350) self.setMinimumHeight(100) - # Make it's own window - self.setWindowTitle("Tutorial") - self.setWindowFlags(Qt.Dialog | Qt.FramelessWindowHint) + # Make transparent self.setAttribute(Qt.WA_TranslucentBackground, True) - self.setFocusPolicy(Qt.ClickFocus) - - # Position window next to other widget - self.moveWidget() - - # Install event filter - self.installEventFilter(self) + #self.setWindowFlags(Qt.FramelessWindowHint) class TutorialManager(object): @@ -191,11 +160,12 @@ class TutorialManager(object): def process(self, parent_name=None): """ Process and show the first non-completed tutorial """ - log.info("process tutorial dialogs") # Do nothing if a tutorial is already visible if self.current_dialog: - self.re_show_dialog() + # XXX: Respond to possible dock floats/moves + self.dock.raise_() + self.re_position_dialog() return # Loop through and add each tutorial dialog @@ -216,15 +186,25 @@ def process(self, parent_name=None): continue # Create tutorial - tutorial_dialog = TutorialDialog(tutorial_id, tutorial_text, tutorial_object, tutorial_x_offset, tutorial_y_offset, turorial_arrow) + self.position_widget = tutorial_object + self.x_offset = tutorial_x_offset + self.y_offset = tutorial_y_offset + tutorial_dialog = TutorialDialog(tutorial_id, tutorial_text, turorial_arrow) # Connect signals tutorial_dialog.btn_next_tip.clicked.connect(functools.partial(self.next_tip, tutorial_id)) tutorial_dialog.btn_close_tips.clicked.connect(functools.partial(self.hide_tips, tutorial_id, True)) - # Show dialog + # Insert into tutorial dock + self.dock.setWidget(tutorial_dialog) self.current_dialog = tutorial_dialog - self.current_dialog.show() + + # Show dialog + self.dock.adjustSize() + self.dock.setEnabled(True) + self.re_position_dialog() + #self.current_dialog.show() + self.dock.show() break def get_object(self, object_id): @@ -250,17 +230,14 @@ def get_object(self, object_id): def next_tip(self, tid): """ Mark the current tip completed, and show the next one """ - log.info("next_tip") - # Hide matching tutorial self.hide_tips(tid) - # Process the next type + # Advance to the next one self.process() def hide_tips(self, tid, user_clicked=False): """ Hide the current tip, and don't show anymore """ - log.info("hide_tips") s = get_settings() # Loop through and find current tid @@ -284,7 +261,8 @@ def hide_tips(self, tid, user_clicked=False): def close_dialogs(self): """ Close any open tutorial dialogs """ if self.current_dialog: - self.current_dialog.hide() + self.dock.hide() + self.dock.setEnabled(False) self.current_dialog = None def exit_manager(self): @@ -305,23 +283,21 @@ def exit_manager(self): def re_show_dialog(self): """ Re show an active dialog """ if self.current_dialog: - self.current_dialog.showNormal() - self.current_dialog.raise_() + self.dock.raise_() + self.dock.show() def re_position_dialog(self): """ Reposition a tutorial dialog next to another widget """ if self.current_dialog: - self.current_dialog.moveWidget() - - def minimize(self): - """ Minimize any visible tutorial dialog """ - log.info("minimize tutorial") - if self.current_dialog: - self.current_dialog.showMinimized() + """ Move widget next to its position widget """ + x = self.position_widget.mapToGlobal(self.position_widget.pos()).x() + y = self.position_widget.mapToGlobal(self.position_widget.pos()).y() + self.dock.move(QPoint(x + self.x_offset, y + self.y_offset)) def __init__(self, win): """ Constructor """ self.win = win + self.dock = win.dockTutorial self.current_dialog = None # get translations @@ -344,7 +320,14 @@ def __init__(self, win): {"id":"7", "x":-265, "y":-22, "object_id":"export_button", "text":_("Export Video: When you are ready to create your finished video, click this button to export your timeline as a single video file."), "arrow":True} ] - # Connect to dock widgets + # Configure tutorial frame + self.dock.setTitleBarWidget(QWidget()) # Prevents window decoration + self.dock.setAttribute(Qt.WA_TranslucentBackground, True) + self.dock.setWindowFlags(Qt.FramelessWindowHint) + self.dock.setFloating(True) + + + # Connect to interface dock widgets self.win.dockFiles.visibilityChanged.connect(functools.partial(self.process, "dockFiles")) self.win.dockTransitions.visibilityChanged.connect(functools.partial(self.process, "dockTransitions")) self.win.dockEffects.visibilityChanged.connect(functools.partial(self.process, "dockEffects")) From d0ce5e6cbffe49d7eec2d6ea69bd7a719c55c1b9 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Thu, 28 Jun 2018 14:45:20 -0400 Subject: [PATCH 05/12] Use palette color for tutorial background The tutorial windows were previously being painted with a hardcoded background color of dark gray. When the theme was switched from Humanity:Dark to Humanity, the background color stayed the same, but the foreground text turned from white to black, making it difficult to read. This change uses the QPalette.Window color for the tutorial background, which respects the current theme. Humanity:Dark's tutorials will now be _slightly_ darker than the previously-hardcoded background color, but not to a glaring degree (though it is noticeable). --- src/windows/views/tutorial.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/windows/views/tutorial.py b/src/windows/views/tutorial.py index 6e31560a01..14ebe0ce6b 100644 --- a/src/windows/views/tutorial.py +++ b/src/windows/views/tutorial.py @@ -45,19 +45,20 @@ def paintEvent(self, event, *args): # Paint custom frame image on QWidget painter = QPainter(self) painter.setRenderHint(QPainter.Antialiasing) + frameColor = QColor("#53a0ed") # Paint blue rounded rectangle path = QPainterPath() path.addRoundedRect(QRectF(31, 0, self.width()-31, self.height()), 10, 10) painter.setPen(Qt.NoPen) - painter.fillPath(path, QColor("#53a0ed")) + painter.fillPath(path, frameColor) painter.drawPath(path) # Paint gray rounded rectangle path = QPainterPath() path.addRoundedRect(QRectF(32, 1, self.width()-33, self.height()-2), 10, 10) painter.setPen(Qt.NoPen) - painter.fillPath(path, QColor("#424242")) + painter.fillPath(path, self.palette().color(QPalette.Window)) painter.drawPath(path) # Paint blue triangle (if needed) @@ -68,7 +69,7 @@ def paintEvent(self, event, *args): path.lineTo (31, 35 - arrow_height) path.lineTo (31, (35 - arrow_height) + (arrow_height * 2)) path.lineTo (0, 35) - painter.fillPath(path, QColor("#53a0ed")) + painter.fillPath(path, frameColor) painter.drawPath(path) def checkbox_metrics_callback(self, state): From 1af40943192ce2fddd5b06e3d1a0083a6191be69 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Fri, 6 Jul 2018 06:21:33 -0400 Subject: [PATCH 06/12] Set NoSystemBackground on tutorial dock --- src/windows/views/tutorial.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/windows/views/tutorial.py b/src/windows/views/tutorial.py index 14ebe0ce6b..65f83119b1 100644 --- a/src/windows/views/tutorial.py +++ b/src/windows/views/tutorial.py @@ -323,6 +323,7 @@ def __init__(self, win): # Configure tutorial frame self.dock.setTitleBarWidget(QWidget()) # Prevents window decoration + self.dock.setAttribute(Qt.WA_NoSystemBackground, True) self.dock.setAttribute(Qt.WA_TranslucentBackground, True) self.dock.setWindowFlags(Qt.FramelessWindowHint) self.dock.setFloating(True) From 249d18fed3af78f642ff4837c4b7f23cba0d35b4 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Fri, 6 Jul 2018 06:34:15 -0400 Subject: [PATCH 07/12] Also set NoSystemBackground on widget --- src/windows/views/tutorial.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/windows/views/tutorial.py b/src/windows/views/tutorial.py index 65f83119b1..3578323e23 100644 --- a/src/windows/views/tutorial.py +++ b/src/windows/views/tutorial.py @@ -152,6 +152,7 @@ def __init__(self, id, text, arrow, *args): self.setMinimumHeight(100) # Make transparent + self.setAttribute(Qt.WA_NoSystemBackground, True) self.setAttribute(Qt.WA_TranslucentBackground, True) #self.setWindowFlags(Qt.FramelessWindowHint) From 43783861861120287d8090caf168059ffcc18112 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Tue, 10 Jul 2018 21:23:05 -0400 Subject: [PATCH 08/12] Add contents widget to dockTutorial This should whack the opaque-background problem some users have reported. --- src/windows/ui/main-window.ui | 2986 +++++++++++++++++---------------- 1 file changed, 1537 insertions(+), 1449 deletions(-) diff --git a/src/windows/ui/main-window.ui b/src/windows/ui/main-window.ui index 3af3e1af19..d3cdec4920 100644 --- a/src/windows/ui/main-window.ui +++ b/src/windows/ui/main-window.ui @@ -1,1449 +1,1537 @@ - - - MainWindow - - - - 0 - 0 - 808 - 631 - - - - - 0 - 0 - - - - Qt::StrongFocus - - - OpenShot Video Editor - - - - ../../images/openshot.svg../../images/openshot.svg - - - false - - - QTabWidget::Rounded - - - true - - - - - 0 - 0 - - - - false - - - - 5 - - - 5 - - - 5 - - - 5 - - - 3 - - - - - - - - - - 0 - 0 - 808 - 25 - - - - - &File - - - - - - - - - - - - - - - - - &Edit - - - - - - - - - - - Title - - - - - - - View - - - - Views - - - - - - - - - - - - - - - - - Help - - - - - - - - - - - - - - - - - - - - - Toolbar - - - TopToolBarArea - - - false - - - - - - - - - - - - - - - - - - 0 - 0 - - - - Project Files - - - 4 - - - - - 9 - - - - - - - - - - - 0 - 0 - - - - Video Preview - - - 4 - - - - - 9 - - - - - - - - - - Transitions - - - 4 - - - - - 9 - - - - - - - - - - Effects - - - 4 - - - - - 9 - - - - - - - - - - false - - - Qt::AllDockWidgetAreas - - - Properties - - - 1 - - - - - 9 - - - - - - - - - - - Filter - - - - - - - - - - 0 - 0 - - - - - 10 - 10 - - - - Qt::ClickFocus - - - Qt::NoContextMenu - - - true - - - QDockWidget::DockWidgetFloatable - - - Qt::NoDockWidgetArea - - - Tutorial - - - false - - - false - - - false - - - 0 - - - - - - :/icons/Humanity/actions/16/document-new.svg:/icons/Humanity/actions/16/document-new.svg - - - New Project... - - - New Project - - - Ctrl+N - - - - - - :/icons/Humanity/actions/16/document-open.svg:/icons/Humanity/actions/16/document-open.svg - - - Open Project... - - - Open Project - - - Ctrl+O - - - - - - :/icons/Humanity/actions/16/document-save.svg:/icons/Humanity/actions/16/document-save.svg - - - Save Project - - - Save Project - - - Ctrl+S - - - - - - :/icons/Humanity/actions/16/edit-undo.svg:/icons/Humanity/actions/16/edit-undo.svg - - - Undo - - - Undo - - - Ctrl+Z - - - - - - :/icons/Humanity/actions/16/document-save-as.svg:/icons/Humanity/actions/16/document-save-as.svg - - - Save Project As... - - - Save Project As... - - - Ctrl+Shift+S - - - - - - :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg - - - Import Files... - - - Import Files - - - Ctrl+F - - - - - - :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg - - - Import Image Sequence... - - - Import Image Sequence - - - Ctrl+I - - - - - - :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg - - - Import New Transition... - - - Import New Transition - - - Ctrl+W - - - - - - :/icons/Humanity/actions/16/edit-redo.svg:/icons/Humanity/actions/16/edit-redo.svg - - - Redo - - - Redo - - - Ctrl+Y - - - - - - :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg - - - Remove Clip - - - Remove Clip - - - - - - :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg - - - Remove Transition - - - Remove Transition - - - - - - :/icons/Humanity/actions/16/media-record.svg:/icons/Humanity/actions/16/media-record.svg - - - Export Video - - - Export Video - - - Ctrl+Shift+E - - - - - - :/icons/Humanity/places/16/folder-remote.svg:/icons/Humanity/places/16/folder-remote.svg - - - Upload Video - - - Upload Video - - - Ctrl+U - - - - - - :/icons/Humanity/actions/16/system-shutdown.svg:/icons/Humanity/actions/16/system-shutdown.svg - - - &Quit - - - Quit - - - Ctrl+Q - - - QAction::QuitRole - - - - - - :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg - - - Add Track - - - Add Track - - - - - - :/icons/Humanity/actions/16/document-properties.svg:/icons/Humanity/actions/16/document-properties.svg - - - &Preferences - - - Preferences - - - Ctrl+Shift+P - - - QAction::PreferencesRole - - - - - - :/icons/Humanity/actions/16/media-playback-start.svg:/icons/Humanity/actions/16/media-playback-start.svg - - - Play - - - Play - - - - - - :/icons/Humanity/actions/16/media-skip-backward.svg:/icons/Humanity/actions/16/media-skip-backward.svg - - - Jump To Start - - - Jump To Start - - - - - - :/icons/Humanity/actions/16/media-seek-backward.svg:/icons/Humanity/actions/16/media-seek-backward.svg - - - Rewind - - - Rewind - - - - - - :/icons/Humanity/actions/16/media-seek-forward.svg:/icons/Humanity/actions/16/media-seek-forward.svg - - - Fast Forward - - - Fast Forward - - - - - - :/icons/Humanity/actions/16/media-skip-forward.svg:/icons/Humanity/actions/16/media-skip-forward.svg - - - Jump To End - - - Jump To End - - - - - true - - - - :/icons/Humanity/actions/custom/arrow.png:/icons/Humanity/actions/custom/arrow.png - - - Arrow Tool - - - Arrow Tool - - - - - true - - - - :/icons/Humanity/actions/16/edit-cut.svg:/icons/Humanity/actions/16/edit-cut.svg - - - Razor Tool - - - Razor Tool - - - - - true - - - true - - - - :/icons/Humanity/actions/custom/snap.png:/icons/Humanity/actions/custom/snap.png - - - Snapping Enabled - - - Snapping Enabled - - - - - - :/icons/Humanity/actions/custom/add_marker.png:/icons/Humanity/actions/custom/add_marker.png - - - Add Marker - - - Add Marker - - - Ctrl+M - - - - - - :/icons/Humanity/actions/16/go-first.svg:/icons/Humanity/actions/16/go-first.svg - - - Previous Marker - - - Previous Marker - - - - - - :/icons/Humanity/actions/16/go-last.svg:/icons/Humanity/actions/16/go-last.svg - - - Next Marker - - - Next Marker - - - - - true - - - Show All - - - Show All - - - - - true - - - Video - - - Video - - - - - true - - - Audio - - - Audio - - - - - true - - - Image - - - Image - - - - - - :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg - - - Clear - - - Clear - - - - - true - - - Show All - - - Show All - - - - - true - - - Common - - - Common - - - - - - :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg - - - Clear - - - Clear - - - - - true - - - Show All - - - Show All - - - - - true - - - Video - - - Video - - - - - true - - - Audio - - - Audio - - - - - - :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg - - - Clear - - - Clear - - - - - - :/icons/Humanity/actions/16/zoom-in.png:/icons/Humanity/actions/16/zoom-in.png - - - Zoom In - - - Zoom In - - - = - - - - - - :/icons/Humanity/actions/16/zoom-out.png:/icons/Humanity/actions/16/zoom-out.png - - - Zoom Out - - - Zoom Out - - - - - - - - - - :/icons/Humanity/mimes/16/font-x-generic.svg:/icons/Humanity/mimes/16/font-x-generic.svg - - - Title - - - Title - - - Ctrl+T - - - - - - :/icons/Humanity/mimes/16/video-x-generic.svg:/icons/Humanity/mimes/16/video-x-generic.svg - - - Animated Title - - - Animated Title - - - Ctrl+B - - - - - false - - - - :/icons/Humanity/actions/16/view-fullscreen.svg:/icons/Humanity/actions/16/view-fullscreen.svg - - - Fullscreen - - - Fullscreen - - - F11 - - - - - true - - - - :/icons/Humanity/actions/16/zoom-in.png:/icons/Humanity/actions/16/zoom-in.png - - - View Toolbar - - - View Toolbar - - - - - - :/icons/Humanity/actions/16/gtk-info.svg:/icons/Humanity/actions/16/gtk-info.svg - - - About OpenShot - - - About OpenShot - - - Ctrl+H - - - QAction::AboutRole - - - - - - :/icons/Humanity/actions/16/view-list-icons.png:/icons/Humanity/actions/16/view-list-icons.png - - - Thumbnail View - - - Thumbnail View - - - Ctrl+E - - - - - - :/icons/Humanity/actions/16/view-list-details.png:/icons/Humanity/actions/16/view-list-details.png - - - Details View - - - Details View - - - Ctrl+D - - - - - - :/icons/Humanity/status/16/dialog-error.svg:/icons/Humanity/status/16/dialog-error.svg - - - Report a Bug... - - - - - - :/icons/Humanity/actions/16/im-message-new.svg:/icons/Humanity/actions/16/im-message-new.svg - - - Ask a Question... - - - - - - :/icons/Humanity/stock/16/stock_person.svg:/icons/Humanity/stock/16/stock_person.svg - - - Translate this Application... - - - - - - :/icons/Humanity/actions/16/bookmark-new.svg:/icons/Humanity/actions/16/bookmark-new.svg - - - Donate - - - - - - :/icons/Humanity/actions/16/help-contents.svg:/icons/Humanity/actions/16/help-contents.svg - - - Contents - - - Open Help Contents - - - - - - :/icons/Humanity/actions/16/go-home.svg:/icons/Humanity/actions/16/go-home.svg - - - Simple View - - - - - - :/icons/Humanity/actions/16/get-hot-new-stuff.png:/icons/Humanity/actions/16/get-hot-new-stuff.png - - - Advanced View - - - - - - :/icons/Humanity/actions/16/locked.svg:/icons/Humanity/actions/16/locked.svg - - - Freeze View - - - - - - :/icons/Humanity/actions/16/locked.svg:/icons/Humanity/actions/16/locked.svg - - - Un-Freeze View - - - false - - - - - - :/icons/Humanity/actions/16/zoom-in.png:/icons/Humanity/actions/16/zoom-in.png - - - Show All - - - - - false - - - - :/icons/Humanity/actions/16/document-open-recent.svg:/icons/Humanity/actions/16/document-open-recent.svg - - - Recent Placeholder - - - false - - - - - - :/icons/Humanity/mimes/16/video-x-generic.svg:/icons/Humanity/mimes/16/video-x-generic.svg - - - Choose Profile - - - Choose Profile - - - Ctrl+P - - - - - - :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg - - - Add to Timeline - - - Add to Timeline - - - Ctrl+A - - - - - - :/icons/Humanity/actions/16/media-playback-start.svg:/icons/Humanity/actions/16/media-playback-start.svg - - - Preview File - - - Preview File - - - - - - :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg - - - Remove from Project - - - Remove from - - - - - - :/icons/Humanity/mimes/16/video-x-generic.svg:/icons/Humanity/mimes/16/video-x-generic.svg - - - File Properties - - - File Properties - - - - - - :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg - - - Clear - - - Clear - - - - - - :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg - - - Remove Track - - - Remove Track - - - - - - :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg - - - Remove Marker - - - Remove Marker - - - - - - :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg - - - Add Track Above - - - Add Track Above - - - - - - :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg - - - Add Track Below - - - Add Track Below - - - - - - :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg - - - Remove Effect - - - Remove Effect - - - - - - :/icons/Humanity/actions/16/edit-cut.svg:/icons/Humanity/actions/16/edit-cut.svg - - - Split Clip... - - - Split Clip - - - Ctrl+X - - - - - - :/icons/Humanity/actions/16/document-properties.svg:/icons/Humanity/actions/16/document-properties.svg - - - &Properties - - - Properties - - - QAction::PreferencesRole - - - - - - :/icons/Humanity/actions/16/gtk-edit.svg:/icons/Humanity/actions/16/gtk-edit.svg - - - Rename Track - - - Rename Track - - - - - - :/icons/Humanity/actions/16/package-upgrade.svg:/icons/Humanity/actions/16/package-upgrade.svg - - - Update Available - - - Update Available - - - false - - - true - - - - - - :/icons/Humanity/actions/16/im-message-new.svg:/icons/Humanity/actions/16/im-message-new.svg - - - Tutorial - - - Launch Tutorial - - - - - - :/icons/Humanity/mimes/16/video-x-generic.svg:/icons/Humanity/mimes/16/video-x-generic.svg - - - Create Animation - - - Create Animation - - - - - - :/icons/Humanity/actions/custom/lock.png:/icons/Humanity/actions/custom/lock.png - - - Lock Track - - - Lock Track - - - - - - :/icons/Humanity/actions/custom/lock.png:/icons/Humanity/actions/custom/lock.png - - - Unlock Track - - - Unlock Track - - - - - - :/icons/Humanity/actions/16/transform-move.png:/icons/Humanity/actions/16/transform-move.png - - - Transform - - - Transform - - - - - - :/icons/Humanity/actions/16/gtk-edit.svg:/icons/Humanity/actions/16/gtk-edit.svg - - - Edit Title - - - Edit Title - - - Ctrl+Shift+T - - - - - - :/icons/Humanity/actions/16/edit-copy.svg:/icons/Humanity/actions/16/edit-copy.svg - - - Duplicate Title - - - Duplicate Title - - - Ctrl+Shift+T - - - - - - :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg - - - Clear History - - - Clear History - - - - - - - - - actionQuit - triggered() - MainWindow - close() - - - -1 - -1 - - - 403 - 314 - - - - - actionView_Toolbar - triggered(bool) - toolBar - setVisible(bool) - - - -1 - -1 - - - 403 - 44 - - - - - + + + MainWindow + + + + 0 + 0 + 808 + 631 + + + + + 0 + 0 + + + + Qt::StrongFocus + + + OpenShot Video Editor + + + + ../../images/openshot.svg../../images/openshot.svg + + + false + + + QTabWidget::Rounded + + + true + + + + + 0 + 0 + + + + false + + + + 5 + + + 5 + + + 5 + + + 5 + + + 3 + + + + + + + + + + 0 + 0 + 808 + 25 + + + + + &File + + + + + + + + + + + + + + + + + &Edit + + + + + + + + + + + Title + + + + + + + View + + + + Views + + + + + + + + + + + + + + + + + Help + + + + + + + + + + + + + + + + + + + + + Toolbar + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + + 0 + 0 + + + + Project Files + + + 4 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + + + + + + 0 + 0 + + + + Video Preview + + + 4 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + + + + + Transitions + + + 4 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + + + + + Effects + + + 4 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + + + + + false + + + Qt::AllDockWidgetAreas + + + Properties + + + 1 + + + + + 9 + + + 9 + + + 9 + + + 9 + + + + + + + + + + + Filter + + + + + + + + + false + + + + 0 + 0 + + + + + 10 + 10 + + + + ForbiddenCursor + + + Qt::ClickFocus + + + Qt::NoContextMenu + + + true + + + false + + + true + + + QDockWidget::DockWidgetFloatable + + + Qt::NoDockWidgetArea + + + Tutorial + + + false + + + false + + + false + + + 0 + + + + Qt::ClickFocus + + + Qt::NoContextMenu + + + false + + + false + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + :/icons/Humanity/actions/16/document-new.svg:/icons/Humanity/actions/16/document-new.svg + + + New Project... + + + New Project + + + Ctrl+N + + + + + + :/icons/Humanity/actions/16/document-open.svg:/icons/Humanity/actions/16/document-open.svg + + + Open Project... + + + Open Project + + + Ctrl+O + + + + + + :/icons/Humanity/actions/16/document-save.svg:/icons/Humanity/actions/16/document-save.svg + + + Save Project + + + Save Project + + + Ctrl+S + + + + + + :/icons/Humanity/actions/16/edit-undo.svg:/icons/Humanity/actions/16/edit-undo.svg + + + Undo + + + Undo + + + Ctrl+Z + + + + + + :/icons/Humanity/actions/16/document-save-as.svg:/icons/Humanity/actions/16/document-save-as.svg + + + Save Project As... + + + Save Project As... + + + Ctrl+Shift+S + + + + + + :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg + + + Import Files... + + + Import Files + + + Ctrl+F + + + + + + :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg + + + Import Image Sequence... + + + Import Image Sequence + + + Ctrl+I + + + + + + :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg + + + Import New Transition... + + + Import New Transition + + + Ctrl+W + + + + + + :/icons/Humanity/actions/16/edit-redo.svg:/icons/Humanity/actions/16/edit-redo.svg + + + Redo + + + Redo + + + Ctrl+Y + + + + + + :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg + + + Remove Clip + + + Remove Clip + + + + + + :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg + + + Remove Transition + + + Remove Transition + + + + + + :/icons/Humanity/actions/16/media-record.svg:/icons/Humanity/actions/16/media-record.svg + + + Export Video + + + Export Video + + + Ctrl+Shift+E + + + + + + :/icons/Humanity/places/16/folder-remote.svg:/icons/Humanity/places/16/folder-remote.svg + + + Upload Video + + + Upload Video + + + Ctrl+U + + + + + + :/icons/Humanity/actions/16/system-shutdown.svg:/icons/Humanity/actions/16/system-shutdown.svg + + + &Quit + + + Quit + + + Ctrl+Q + + + QAction::QuitRole + + + + + + :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg + + + Add Track + + + Add Track + + + + + + :/icons/Humanity/actions/16/document-properties.svg:/icons/Humanity/actions/16/document-properties.svg + + + &Preferences + + + Preferences + + + Ctrl+Shift+P + + + QAction::PreferencesRole + + + + + + :/icons/Humanity/actions/16/media-playback-start.svg:/icons/Humanity/actions/16/media-playback-start.svg + + + Play + + + Play + + + + + + :/icons/Humanity/actions/16/media-skip-backward.svg:/icons/Humanity/actions/16/media-skip-backward.svg + + + Jump To Start + + + Jump To Start + + + + + + :/icons/Humanity/actions/16/media-seek-backward.svg:/icons/Humanity/actions/16/media-seek-backward.svg + + + Rewind + + + Rewind + + + + + + :/icons/Humanity/actions/16/media-seek-forward.svg:/icons/Humanity/actions/16/media-seek-forward.svg + + + Fast Forward + + + Fast Forward + + + + + + :/icons/Humanity/actions/16/media-skip-forward.svg:/icons/Humanity/actions/16/media-skip-forward.svg + + + Jump To End + + + Jump To End + + + + + true + + + + :/icons/Humanity/actions/custom/arrow.png:/icons/Humanity/actions/custom/arrow.png + + + Arrow Tool + + + Arrow Tool + + + + + true + + + + :/icons/Humanity/actions/16/edit-cut.svg:/icons/Humanity/actions/16/edit-cut.svg + + + Razor Tool + + + Razor Tool + + + + + true + + + true + + + + :/icons/Humanity/actions/custom/snap.png:/icons/Humanity/actions/custom/snap.png + + + Snapping Enabled + + + Snapping Enabled + + + + + + :/icons/Humanity/actions/custom/add_marker.png:/icons/Humanity/actions/custom/add_marker.png + + + Add Marker + + + Add Marker + + + Ctrl+M + + + + + + :/icons/Humanity/actions/16/go-first.svg:/icons/Humanity/actions/16/go-first.svg + + + Previous Marker + + + Previous Marker + + + + + + :/icons/Humanity/actions/16/go-last.svg:/icons/Humanity/actions/16/go-last.svg + + + Next Marker + + + Next Marker + + + + + true + + + Show All + + + Show All + + + + + true + + + Video + + + Video + + + + + true + + + Audio + + + Audio + + + + + true + + + Image + + + Image + + + + + + :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg + + + Clear + + + Clear + + + + + true + + + Show All + + + Show All + + + + + true + + + Common + + + Common + + + + + + :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg + + + Clear + + + Clear + + + + + true + + + Show All + + + Show All + + + + + true + + + Video + + + Video + + + + + true + + + Audio + + + Audio + + + + + + :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg + + + Clear + + + Clear + + + + + + :/icons/Humanity/actions/16/zoom-in.png:/icons/Humanity/actions/16/zoom-in.png + + + Zoom In + + + Zoom In + + + = + + + + + + :/icons/Humanity/actions/16/zoom-out.png:/icons/Humanity/actions/16/zoom-out.png + + + Zoom Out + + + Zoom Out + + + - + + + + + + :/icons/Humanity/mimes/16/font-x-generic.svg:/icons/Humanity/mimes/16/font-x-generic.svg + + + Title + + + Title + + + Ctrl+T + + + + + + :/icons/Humanity/mimes/16/video-x-generic.svg:/icons/Humanity/mimes/16/video-x-generic.svg + + + Animated Title + + + Animated Title + + + Ctrl+B + + + + + false + + + + :/icons/Humanity/actions/16/view-fullscreen.svg:/icons/Humanity/actions/16/view-fullscreen.svg + + + Fullscreen + + + Fullscreen + + + F11 + + + + + true + + + + :/icons/Humanity/actions/16/zoom-in.png:/icons/Humanity/actions/16/zoom-in.png + + + View Toolbar + + + View Toolbar + + + + + + :/icons/Humanity/actions/16/gtk-info.svg:/icons/Humanity/actions/16/gtk-info.svg + + + About OpenShot + + + About OpenShot + + + Ctrl+H + + + QAction::AboutRole + + + + + + :/icons/Humanity/actions/16/view-list-icons.png:/icons/Humanity/actions/16/view-list-icons.png + + + Thumbnail View + + + Thumbnail View + + + Ctrl+E + + + + + + :/icons/Humanity/actions/16/view-list-details.png:/icons/Humanity/actions/16/view-list-details.png + + + Details View + + + Details View + + + Ctrl+D + + + + + + :/icons/Humanity/status/16/dialog-error.svg:/icons/Humanity/status/16/dialog-error.svg + + + Report a Bug... + + + + + + :/icons/Humanity/actions/16/im-message-new.svg:/icons/Humanity/actions/16/im-message-new.svg + + + Ask a Question... + + + + + + :/icons/Humanity/stock/16/stock_person.svg:/icons/Humanity/stock/16/stock_person.svg + + + Translate this Application... + + + + + + :/icons/Humanity/actions/16/bookmark-new.svg:/icons/Humanity/actions/16/bookmark-new.svg + + + Donate + + + + + + :/icons/Humanity/actions/16/help-contents.svg:/icons/Humanity/actions/16/help-contents.svg + + + Contents + + + Open Help Contents + + + + + + :/icons/Humanity/actions/16/go-home.svg:/icons/Humanity/actions/16/go-home.svg + + + Simple View + + + + + + :/icons/Humanity/actions/16/get-hot-new-stuff.png:/icons/Humanity/actions/16/get-hot-new-stuff.png + + + Advanced View + + + + + + :/icons/Humanity/actions/16/locked.svg:/icons/Humanity/actions/16/locked.svg + + + Freeze View + + + + + + :/icons/Humanity/actions/16/locked.svg:/icons/Humanity/actions/16/locked.svg + + + Un-Freeze View + + + false + + + + + + :/icons/Humanity/actions/16/zoom-in.png:/icons/Humanity/actions/16/zoom-in.png + + + Show All + + + + + false + + + + :/icons/Humanity/actions/16/document-open-recent.svg:/icons/Humanity/actions/16/document-open-recent.svg + + + Recent Placeholder + + + false + + + + + + :/icons/Humanity/mimes/16/video-x-generic.svg:/icons/Humanity/mimes/16/video-x-generic.svg + + + Choose Profile + + + Choose Profile + + + Ctrl+P + + + + + + :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg + + + Add to Timeline + + + Add to Timeline + + + Ctrl+A + + + + + + :/icons/Humanity/actions/16/media-playback-start.svg:/icons/Humanity/actions/16/media-playback-start.svg + + + Preview File + + + Preview File + + + + + + :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg + + + Remove from Project + + + Remove from + + + + + + :/icons/Humanity/mimes/16/video-x-generic.svg:/icons/Humanity/mimes/16/video-x-generic.svg + + + File Properties + + + File Properties + + + + + + :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg + + + Clear + + + Clear + + + + + + :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg + + + Remove Track + + + Remove Track + + + + + + :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg + + + Remove Marker + + + Remove Marker + + + + + + :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg + + + Add Track Above + + + Add Track Above + + + + + + :/icons/Humanity/actions/16/list-add.svg:/icons/Humanity/actions/16/list-add.svg + + + Add Track Below + + + Add Track Below + + + + + + :/icons/Humanity/actions/16/list-remove.svg:/icons/Humanity/actions/16/list-remove.svg + + + Remove Effect + + + Remove Effect + + + + + + :/icons/Humanity/actions/16/edit-cut.svg:/icons/Humanity/actions/16/edit-cut.svg + + + Split Clip... + + + Split Clip + + + Ctrl+X + + + + + + :/icons/Humanity/actions/16/document-properties.svg:/icons/Humanity/actions/16/document-properties.svg + + + &Properties + + + Properties + + + QAction::PreferencesRole + + + + + + :/icons/Humanity/actions/16/gtk-edit.svg:/icons/Humanity/actions/16/gtk-edit.svg + + + Rename Track + + + Rename Track + + + + + + :/icons/Humanity/actions/16/package-upgrade.svg:/icons/Humanity/actions/16/package-upgrade.svg + + + Update Available + + + Update Available + + + false + + + true + + + + + + :/icons/Humanity/actions/16/im-message-new.svg:/icons/Humanity/actions/16/im-message-new.svg + + + Tutorial + + + Launch Tutorial + + + + + + :/icons/Humanity/mimes/16/video-x-generic.svg:/icons/Humanity/mimes/16/video-x-generic.svg + + + Create Animation + + + Create Animation + + + + + + :/icons/Humanity/actions/custom/lock.png:/icons/Humanity/actions/custom/lock.png + + + Lock Track + + + Lock Track + + + + + + :/icons/Humanity/actions/custom/lock.png:/icons/Humanity/actions/custom/lock.png + + + Unlock Track + + + Unlock Track + + + + + + :/icons/Humanity/actions/16/transform-move.png:/icons/Humanity/actions/16/transform-move.png + + + Transform + + + Transform + + + + + + :/icons/Humanity/actions/16/gtk-edit.svg:/icons/Humanity/actions/16/gtk-edit.svg + + + Edit Title + + + Edit Title + + + Ctrl+Shift+T + + + + + + :/icons/Humanity/actions/16/edit-copy.svg:/icons/Humanity/actions/16/edit-copy.svg + + + Duplicate Title + + + Duplicate Title + + + Ctrl+Shift+T + + + + + + :/icons/Humanity/actions/16/edit-clear.svg:/icons/Humanity/actions/16/edit-clear.svg + + + Clear History + + + Clear History + + + + + + + + + actionQuit + triggered() + MainWindow + close() + + + -1 + -1 + + + 403 + 314 + + + + + actionView_Toolbar + triggered(bool) + toolBar + setVisible(bool) + + + -1 + -1 + + + 403 + 44 + + + + + From 50dbfe5a22d94381ec0881c90ed7e817fa0af66d Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Tue, 10 Jul 2018 21:54:35 -0400 Subject: [PATCH 09/12] Resize main window geometry to 1200x800 This allows the Timeline to remain tall enough in Simple View that the tutorial popups are (just barely) able to fit within the window. --- src/windows/ui/main-window.ui | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/windows/ui/main-window.ui b/src/windows/ui/main-window.ui index d3cdec4920..5236322522 100644 --- a/src/windows/ui/main-window.ui +++ b/src/windows/ui/main-window.ui @@ -6,8 +6,8 @@ 0 0 - 808 - 631 + 1200 + 800 From c9d7ed7087c9da012b88095a738bb43e7c6cf770 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Tue, 10 Jul 2018 22:37:26 -0400 Subject: [PATCH 10/12] Shift Video Preview tutorial popup right. --- src/windows/views/tutorial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windows/views/tutorial.py b/src/windows/views/tutorial.py index 3578323e23..2537d0aac6 100644 --- a/src/windows/views/tutorial.py +++ b/src/windows/views/tutorial.py @@ -315,7 +315,7 @@ def __init__(self, win): self.tutorial_objects = [ {"id":"0", "x":400, "y":0, "object_id":"filesTreeView", "text":_("Welcome! OpenShot Video Editor is an award-winning, open-source video editing application! This tutorial will walk you through the basics.

Would you like to automatically send errors and metrics to help improve OpenShot?"), "arrow":False}, {"id":"1", "x":20, "y":0, "object_id":"filesTreeView", "text":_("Project Files: Get started with your project by adding video, audio, and image files here. Drag and drop files from your file system."), "arrow":True}, {"id":"2", "x":200, "y":-15, "object_id":"timeline", "text":_("Timeline: Arrange your clips on the timeline here. Overlap clips to create automatic transitions. Access lots of fun presets and options by right-clicking on clips."), "arrow":True}, - {"id":"3", "x":150, "y":100, "object_id":"dockVideoContents", "text":_("Video Preview: Watch your timeline video preview here. Use the buttons (play, rewind, fast-forward) to control the video playback."), "arrow":True}, + {"id":"3", "x":200, "y":100, "object_id":"dockVideoContents", "text":_("Video Preview: Watch your timeline video preview here. Use the buttons (play, rewind, fast-forward) to control the video playback."), "arrow":True}, {"id":"4", "x":20, "y":-35, "object_id":"propertyTableView", "text":_("Properties: View and change advanced properties of clips and effects here. Right-clicking on clips is usually faster than manually changing properties."), "arrow":True}, {"id":"5", "x":20, "y":10, "object_id":"transitionsTreeView", "text":_("Transitions: Create a gradual fade from one clip to another. Drag and drop a transition onto the timeline and position it on top of a clip (usually at the beginning or ending)."), "arrow":True}, {"id":"6", "x":20, "y":20, "object_id":"effectsTreeView", "text":_("Effects: Adjust brightness, contrast, saturation, and add exciting special effects. Drag and drop an effect onto the timeline and position it on top of a clip (or track)"), "arrow":True}, From 361b7ae0be8e5e19e9a3f23f57b4eac92651670c Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Tue, 10 Jul 2018 23:34:37 -0400 Subject: [PATCH 11/12] Files end in NEWLINES dammit! --- src/windows/ui/main-window.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windows/ui/main-window.ui b/src/windows/ui/main-window.ui index ed57c8f263..5236322522 100644 --- a/src/windows/ui/main-window.ui +++ b/src/windows/ui/main-window.ui @@ -1534,4 +1534,4 @@ - \ No newline at end of file + From b224ee2659df9ed76a4baec0e6b53a5510509b92 Mon Sep 17 00:00:00 2001 From: "FeRD (Frank Dana)" Date: Wed, 11 Jul 2018 07:12:24 -0400 Subject: [PATCH 12/12] Fix damage I caused to main_window.ui --- src/windows/ui/main-window.ui | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/windows/ui/main-window.ui b/src/windows/ui/main-window.ui index 5236322522..9456c345e7 100644 --- a/src/windows/ui/main-window.ui +++ b/src/windows/ui/main-window.ui @@ -722,6 +722,18 @@ Jump To End
+ + + + :/icons/Humanity/actions/custom/camera-photo-symbolic.svg:/icons/Humanity/actions/custom/camera-photo-symbolic.svg + + + Save Current Frame + + + Save Current Frame + + true