From 5c162d5ec82e97a0ae21f918f19b2db34e3bf96f Mon Sep 17 00:00:00 2001 From: Urban Wallasch Date: Sun, 23 May 2021 01:36:39 +0200 Subject: [PATCH] * Added 'Help & About' dialog. * Added screenshot to README. * Fixed some minor issues (mainly help text and comments). * Set version tag to 0.3+. --- README.md | 8 +++-- ffpreview.py | 91 +++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 93 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e564cbc..d022207 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ Ffpreview is a python script that acts as a front-end for ffmpeg to generate interactive thumbnail previews for video files. +![ffpreview_1r](https://user-images.githubusercontent.com/21294666/119243320-dedc4280-bb65-11eb-8343-29104805447c.png) ## Requirements @@ -20,8 +21,9 @@ Additionally, ffpreview will use `ffprobe` (if available) to perform the initial video file analysis, but will gracefully fall back to `ffmpeg` for that purpose too, should `ffprobe` fail. -**NOTE: Ffpreview has only been tested to work on Linux.** +Tested with Python 3.7.3, PyQt5 5.11.3. +**Ffpreview has only been tested to work on Linux.** ## Configuration @@ -79,12 +81,14 @@ window controls: Ctrl+G adjust window geometry for optimal fit Ctrl+O show open file dialog Ctrl+M open thumbnail manager + Ctrl+Alt+P open preferences dialog + Alt+H open about dialog Double-click, Return, Space open video at selected position in paused state Shift+dbl-click, Shift+Return play video starting at selected position Mouse-2, Menu, - Alt+Return open the context menu + Ctrl+Return open the context menu Up, Down, PgUp, PgDown, Home, End, diff --git a/ffpreview.py b/ffpreview.py index b073682..469fc31 100755 --- a/ffpreview.py +++ b/ffpreview.py @@ -3,18 +3,59 @@ """ ffpreview.py -Copyright 2021 Urban Wallasch +Copyright (c) 2021 Urban Wallasch Ffpreview is distributed under the Modified ("3-clause") BSD License. See `LICENSE` file for more information. """ -_FFPREVIEW_VERSION = '0.3' +_FFPREVIEW_VERSION = '0.3+' _FFPREVIEW_IDX = 'ffpreview.idx' _FF_DEBUG = False +_FFPREVIEW_HELP = """ + +

Keyboard Shortcuts

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Up, Down, PgUp, PgDown, Home, End, TAB, Shift+TABNavigate thumbnails
Double-click, Return, SpaceOpen video at selected position in paused state
Shift+dbl-click, Shift+ReturnPlay video starting at selected position
Mouse-2, Menu, Alt+ReturnOpen the context menu
ESCExit full screen view; quit application
Ctrl+Q, Ctrl-WQuit application
Alt+Return, FToggle full screen view
Ctrl+GAdjust window geometry for optimal fit
Ctrl+OShow open file dialog
Ctrl+MOpen thumbnail manager
+""" + import sys _PYTHON_VERSION = float("%d.%d" % (sys.version_info.major, sys.version_info.minor)) @@ -197,12 +238,13 @@ class ffConfig: ' Ctrl+O show open file dialog\n' ' Ctrl+M open thumbnail manager\n' ' Ctrl+Alt+P open preferences dialog\n' + ' Alt+H open about dialog\n' ' Double-click,\n' ' Return, Space open video at selected position in paused state\n' ' Shift+dbl-click,\n' ' Shift+Return play video starting at selected position\n' ' Mouse-2, Menu,\n' - ' Alt+Return open the context menu\n' + ' Ctrl+Return open the context menu\n' ' Up, Down,\n' ' PgUp, PgDown,\n' ' Home, End,\n' @@ -801,6 +843,40 @@ class tmDialog(QDialog): return self.loadfile +class aboutDialog(QDialog): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.setWindowTitle('Help & About') + self.setFixedSize(600, 600) + self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) + self.icon_label = QLabel() + self.icon_label.setPixmap(ffIcon.ffpreview_pxm) + self.tag_label = QLabel('ffpreview %s\n' + 'Copyright (c) 2021, Urban Wallasch\n' + 'BSD 3-Clause License' % _FFPREVIEW_VERSION) + self.tag_label.setAlignment(Qt.AlignCenter) + self.hdr_layout = QHBoxLayout() + self.hdr_layout.addWidget(self.icon_label, 1) + self.hdr_layout.addWidget(self.tag_label, 100) + self.help_pane = QTextEdit() + self.help_pane.setReadOnly(True) + self.help_pane.setStyleSheet('QTextEdit {border: none;}') + self.help_pane.setHtml(_FFPREVIEW_HELP) + self.qt_button = QPushButton('About Qt') + self.qt_button.clicked.connect(lambda: QMessageBox.aboutQt(self)) + self.close_button = QPushButton('Close') + self.close_button.setIcon(ffIcon.close) + self.close_button.clicked.connect(self.accept) + self.btn_layout = QHBoxLayout() + self.btn_layout.addWidget(self.qt_button) + self.btn_layout.addStretch() + self.btn_layout.addWidget(self.close_button) + self.dlg_layout = QVBoxLayout(self) + self.dlg_layout.addLayout(self.hdr_layout) + self.dlg_layout.addWidget(self.help_pane) + self.dlg_layout.addLayout(self.btn_layout) + + class cfgDialog(QDialog): ilist = [] outdir = '' @@ -1210,6 +1286,8 @@ class sMainWindow(QMainWindow): else: menu.addAction('Abort Operation', self.abort_build) menu.addSeparator() + menu.addAction('Help && About', self.about_dlg) + menu.addSeparator() menu.addAction('Quit', lambda: self.closeEvent(None)) menu.exec_(pos) @@ -1231,6 +1309,10 @@ class sMainWindow(QMainWindow): if res == QDialog.Accepted: self.load_view(self.fname) + def about_dlg(self): + dlg = aboutDialog(self) + res = dlg.exec_() + def _play_video(self, ts=None, paused=False): if self.view_locked: return @@ -1320,7 +1402,8 @@ class sMainWindow(QMainWindow): QShortcut('Return', self).activated.connect(lambda: self._play_video(paused=True)) QShortcut('Shift+Return', self).activated.connect(lambda: self._play_video()) QShortcut('Ctrl+Return', self).activated.connect(lambda: self.contextMenuEvent(None)) - QShortcut('Ctrl+Alt+P', self).activated.connect(lambda: self.config_dlg()) + QShortcut('Ctrl+Alt+P', self).activated.connect(self.config_dlg) + QShortcut('Alt+H', self).activated.connect(self.about_dlg) def show_progress(self, n, tot): -- 2.30.2