From f5d429a5ca0a0c7f4229ef1cad8ee479c7f70295 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sat, 9 Jan 2021 22:34:53 +0100 Subject: [PATCH 01/11] Put Preview button into editor inside browser --- qt/aqt/browser.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 3c448f89b..24b8bd925 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -872,7 +872,20 @@ QTableView {{ gridline-color: {grid} }} self.singleCard = False def setupEditor(self): + def add_preview_button(leftbuttons, editor): + leftbuttons.insert(0, editor.addButton( + None, + "preview", + lambda _editor: self.onTogglePreview(), + "Preview Selected Card", + "Preview", + disables=False, + rightside=False, + )) + + gui_hooks.editor_did_init_left_buttons.append(add_preview_button) self.editor = aqt.editor.Editor(self.mw, self.form.fieldsArea, self) + gui_hooks.editor_did_init_left_buttons.remove(add_preview_button) def onRowChanged(self, current, previous): "Update current note and hide/show editor." From ece753991e88bf5aa5424a649a6bea52d7def899 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sat, 9 Jan 2021 23:16:01 +0100 Subject: [PATCH 02/11] Make button show its toggle state --- qt/aqt/browser.py | 3 +++ qt/aqt/data/web/css/editor.scss | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 24b8bd925..b1f712a40 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -879,8 +879,10 @@ QTableView {{ gridline-color: {grid} }} lambda _editor: self.onTogglePreview(), "Preview Selected Card", "Preview", + id="previewButton", disables=False, rightside=False, + toggleable=True, )) gui_hooks.editor_did_init_left_buttons.append(add_preview_button) @@ -1579,6 +1581,7 @@ where id in %s""" self._previewer.close() def _on_preview_closed(self): + self.editor.web.eval("$('#previewButton').removeClass('highlighted')") self._previewer = None # Card deletion diff --git a/qt/aqt/data/web/css/editor.scss b/qt/aqt/data/web/css/editor.scss index 8f768e96c..8957a8101 100644 --- a/qt/aqt/data/web/css/editor.scss +++ b/qt/aqt/data/web/css/editor.scss @@ -73,7 +73,13 @@ button.linkb:disabled { } button.highlighted { - border-bottom: 3px solid #000; + #topbutsleft & { + box-shadow: inset 0px 0px 5px #222; + } + + #topbutsright & { + border-bottom: 3px solid #000; + } } #fields { From 28278fcc40936f8254d9892914b210500187c490 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sat, 9 Jan 2021 23:25:56 +0100 Subject: [PATCH 03/11] Remove preview button from browser.py top bar --- qt/aqt/browser.py | 10 ++-------- qt/aqt/forms/browser.ui | 13 ------------- qt/aqt/previewer.py | 1 - 3 files changed, 2 insertions(+), 22 deletions(-) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index b1f712a40..8c8e28c66 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -622,12 +622,6 @@ class Browser(QMainWindow): # pylint: disable=unnecessary-lambda # actions f = self.form - qconnect(f.previewButton.clicked, self.onTogglePreview) - f.previewButton.setToolTip( - tr(TR.BROWSING_PREVIEW_SELECTED_CARD, val=shortcut("Ctrl+Shift+P")) - ) - f.previewButton.setShortcut("Ctrl+Shift+P") - qconnect(f.filter.clicked, self.onFilterButton) # edit qconnect(f.actionUndo.triggered, self.mw.onUndo) @@ -877,8 +871,8 @@ QTableView {{ gridline-color: {grid} }} None, "preview", lambda _editor: self.onTogglePreview(), - "Preview Selected Card", - "Preview", + tr(TR.BROWSING_PREVIEW_SELECTED_CARD, val=shortcut("Ctrl+Shift+P")), + tr(TR.ACTIONS_PREVIEW), id="previewButton", disables=False, rightside=False, diff --git a/qt/aqt/forms/browser.ui b/qt/aqt/forms/browser.ui index 575371cb1..8d8b005a8 100644 --- a/qt/aqt/forms/browser.ui +++ b/qt/aqt/forms/browser.ui @@ -114,19 +114,6 @@ - - - - ACTIONS_PREVIEW - - - Ctrl+Shift+P - - - true - - - diff --git a/qt/aqt/previewer.py b/qt/aqt/previewer.py index 29e63251d..71fdbe2c8 100644 --- a/qt/aqt/previewer.py +++ b/qt/aqt/previewer.py @@ -307,7 +307,6 @@ class BrowserPreviewer(MultiCardPreviewer): def _on_finished(self, ok): super()._on_finished(ok) - self._parent.form.previewButton.setChecked(False) def _on_prev_card(self): self._parent.editor.saveNow( From fe118197a33f829490c4f41b384e113c72c3bf93 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sat, 9 Jan 2021 23:55:39 +0100 Subject: [PATCH 04/11] Improve styling of new preview button on light and nightMode --- qt/aqt/data/web/css/editor.scss | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/qt/aqt/data/web/css/editor.scss b/qt/aqt/data/web/css/editor.scss index 8957a8101..c1bff5cf0 100644 --- a/qt/aqt/data/web/css/editor.scss +++ b/qt/aqt/data/web/css/editor.scss @@ -65,16 +65,28 @@ button.linkb { box-shadow: none; padding: 0px 2px; background: transparent; + + &:disabled { + opacity: 0.3; + cursor: not-allowed; + } + + .nightMode & > img { + filter: invert(180); + } } -button.linkb:disabled { - opacity: 0.3; - cursor: not-allowed; +button:focus { + outline: none; } button.highlighted { + .nightMode #topbutsleft & { + background: linear-gradient(0deg, #333333 0%, #434343 100%); + } + #topbutsleft & { - box-shadow: inset 0px 0px 5px #222; + background-color: lightgrey; } #topbutsright & { @@ -94,12 +106,6 @@ button.highlighted { color: var(--link); } -.nightMode { - button.linkb > img { - filter: invert(180); - } -} - .drawing { zoom: 50%; } From 59d0e8f03695a90a482c286f47ee4f47ad64c47b Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sun, 10 Jan 2021 00:00:19 +0100 Subject: [PATCH 05/11] Add shortcut to new preview button --- qt/aqt/browser.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 8c8e28c66..7ea3393be 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -867,13 +867,15 @@ QTableView {{ gridline-color: {grid} }} def setupEditor(self): def add_preview_button(leftbuttons, editor): + preview_shortcut = "Ctrl+Shift+P" leftbuttons.insert(0, editor.addButton( None, "preview", lambda _editor: self.onTogglePreview(), - tr(TR.BROWSING_PREVIEW_SELECTED_CARD, val=shortcut("Ctrl+Shift+P")), + tr(TR.BROWSING_PREVIEW_SELECTED_CARD, val=preview_shortcut), tr(TR.ACTIONS_PREVIEW), id="previewButton", + keys=preview_shortcut, disables=False, rightside=False, toggleable=True, From 6afc49503557d98b043602e3b973bf446de916b8 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sun, 10 Jan 2021 01:10:23 +0100 Subject: [PATCH 06/11] Activate toggle on hotkey invocation --- qt/aqt/editor.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index 64c3ebbde..03626ab6e 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -11,6 +11,7 @@ import urllib.error import urllib.parse import urllib.request import warnings +from random import randrange from typing import Callable, List, Optional, Tuple import bs4 @@ -252,10 +253,23 @@ class Editor: if func: self._links[cmd] = func if keys: + def on_activated(): + func(self) + + if toggleable: + # generate a random id for triggering toggle + id = id or str(randrange(1_000_000)) + + def on_hotkey(): + on_activated() + self.web.eval(f'toggleEditorButton("#{id}");') + else: + on_hotkey = on_activated + QShortcut( # type: ignore QKeySequence(keys), self.widget, - activated=lambda s=self: func(s), + activated=on_hotkey, ) btn = self._addButton( icon, From 6431f0b6b1bd483d4cc1cca2e06dd46c622dccbc Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sun, 10 Jan 2021 01:21:52 +0100 Subject: [PATCH 07/11] Prevent error when browser is closed with previewer open --- qt/aqt/browser.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 7ea3393be..0fc9530fc 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -1577,7 +1577,8 @@ where id in %s""" self._previewer.close() def _on_preview_closed(self): - self.editor.web.eval("$('#previewButton').removeClass('highlighted')") + if self.editor.web: + self.editor.web.eval("$('#previewButton').removeClass('highlighted')") self._previewer = None # Card deletion From 097fa16783a331a9b381a2c9dd986c87b91faa7b Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sun, 10 Jan 2021 01:34:59 +0100 Subject: [PATCH 08/11] Allow closing the Preview Dialog with Ctrl+Shift+P --- qt/aqt/previewer.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/qt/aqt/previewer.py b/qt/aqt/previewer.py index 71fdbe2c8..8d8f01bd3 100644 --- a/qt/aqt/previewer.py +++ b/qt/aqt/previewer.py @@ -16,6 +16,7 @@ from aqt.qt import ( QIcon, QKeySequence, QPixmap, + QShortcut, Qt, QVBoxLayout, QWidget, @@ -63,6 +64,9 @@ class Previewer(QDialog): def _create_gui(self): self.setWindowTitle(tr(TR.ACTIONS_PREVIEW)) + self.close_shortcut = QShortcut(QKeySequence("Ctrl+Shift+P"), self) + qconnect(self.close_shortcut.activated, self.close) + qconnect(self.finished, self._on_finished) self.silentlyClose = True self.vbox = QVBoxLayout() From ace61835de704ad68d9c651c1a732665c13f67d2 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sun, 10 Jan 2021 01:44:08 +0100 Subject: [PATCH 09/11] Fix formatting, use shortcut on preview before displaying --- qt/aqt/browser.py | 30 ++++++++++++++++++------------ qt/aqt/editor.py | 2 ++ qt/aqt/previewer.py | 3 --- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 0fc9530fc..8bb09f14f 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -868,18 +868,24 @@ QTableView {{ gridline-color: {grid} }} def setupEditor(self): def add_preview_button(leftbuttons, editor): preview_shortcut = "Ctrl+Shift+P" - leftbuttons.insert(0, editor.addButton( - None, - "preview", - lambda _editor: self.onTogglePreview(), - tr(TR.BROWSING_PREVIEW_SELECTED_CARD, val=preview_shortcut), - tr(TR.ACTIONS_PREVIEW), - id="previewButton", - keys=preview_shortcut, - disables=False, - rightside=False, - toggleable=True, - )) + leftbuttons.insert( + 0, + editor.addButton( + None, + "preview", + lambda _editor: self.onTogglePreview(), + tr( + TR.BROWSING_PREVIEW_SELECTED_CARD, + val=shortcut(preview_shortcut), + ), + tr(TR.ACTIONS_PREVIEW), + id="previewButton", + keys=preview_shortcut, + disables=False, + rightside=False, + toggleable=True, + ), + ) gui_hooks.editor_did_init_left_buttons.append(add_preview_button) self.editor = aqt.editor.Editor(self.mw, self.form.fieldsArea, self) diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index 03626ab6e..8294e90a3 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -253,6 +253,7 @@ class Editor: if func: self._links[cmd] = func if keys: + def on_activated(): func(self) @@ -263,6 +264,7 @@ class Editor: def on_hotkey(): on_activated() self.web.eval(f'toggleEditorButton("#{id}");') + else: on_hotkey = on_activated diff --git a/qt/aqt/previewer.py b/qt/aqt/previewer.py index 8d8f01bd3..6a1164bbf 100644 --- a/qt/aqt/previewer.py +++ b/qt/aqt/previewer.py @@ -309,9 +309,6 @@ class BrowserPreviewer(MultiCardPreviewer): self._last_card_id = c.id return changed - def _on_finished(self, ok): - super()._on_finished(ok) - def _on_prev_card(self): self._parent.editor.saveNow( lambda: self._parent._moveCur(QAbstractItemView.MoveUp) From fce536f20541a4dc27e9aa322b6026b861d29c2b Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sun, 10 Jan 2021 02:01:24 +0100 Subject: [PATCH 10/11] Close previewer if there is no card to render --- qt/aqt/browser.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py index 8bb09f14f..1b4608f08 100644 --- a/qt/aqt/browser.py +++ b/qt/aqt/browser.py @@ -1575,7 +1575,10 @@ where id in %s""" def _renderPreview(self): if self._previewer: - self._previewer.render_card() + if self.singleCard: + self._previewer.render_card() + else: + self.onTogglePreview() def _cleanup_preview(self): if self._previewer: From cf1240bb18bec783d2e474283bd4354deb5f47b9 Mon Sep 17 00:00:00 2001 From: Henrik Giesel Date: Sun, 10 Jan 2021 13:38:20 +0100 Subject: [PATCH 11/11] Make keys parameter requiring func parameter in _addButton explicit --- qt/aqt/editor.py | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index 8294e90a3..3f69f068e 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -252,27 +252,29 @@ class Editor: """Assign func to bridge cmd, register shortcut, return button""" if func: self._links[cmd] = func - if keys: - def on_activated(): - func(self) + if keys: - if toggleable: - # generate a random id for triggering toggle - id = id or str(randrange(1_000_000)) + def on_activated(): + func(self) - def on_hotkey(): - on_activated() - self.web.eval(f'toggleEditorButton("#{id}");') + if toggleable: + # generate a random id for triggering toggle + id = id or str(randrange(1_000_000)) - else: - on_hotkey = on_activated + def on_hotkey(): + on_activated() + self.web.eval(f'toggleEditorButton("#{id}");') + + else: + on_hotkey = on_activated + + QShortcut( # type: ignore + QKeySequence(keys), + self.widget, + activated=on_hotkey, + ) - QShortcut( # type: ignore - QKeySequence(keys), - self.widget, - activated=on_hotkey, - ) btn = self._addButton( icon, cmd,