diff --git a/qt/aqt/browser.py b/qt/aqt/browser.py
index c673cc93c..0cdadce6b 100644
--- a/qt/aqt/browser.py
+++ b/qt/aqt/browser.py
@@ -624,12 +624,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)
@@ -874,7 +868,30 @@ QTableView {{ gridline-color: {grid} }}
self.singleCard = False
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(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)
+ gui_hooks.editor_did_init_left_buttons.remove(add_preview_button)
def onRowChanged(self, current, previous):
"Update current note and hide/show editor."
@@ -1567,7 +1584,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:
@@ -1575,6 +1595,8 @@ where id in %s"""
self._previewer.close()
def _on_preview_closed(self):
+ if self.editor.web:
+ 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..c1bff5cf0 100644
--- a/qt/aqt/data/web/css/editor.scss
+++ b/qt/aqt/data/web/css/editor.scss
@@ -65,15 +65,33 @@ 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 {
- border-bottom: 3px solid #000;
+ .nightMode #topbutsleft & {
+ background: linear-gradient(0deg, #333333 0%, #434343 100%);
+ }
+
+ #topbutsleft & {
+ background-color: lightgrey;
+ }
+
+ #topbutsright & {
+ border-bottom: 3px solid #000;
+ }
}
#fields {
@@ -88,12 +106,6 @@ button.highlighted {
color: var(--link);
}
-.nightMode {
- button.linkb > img {
- filter: invert(180);
- }
-}
-
.drawing {
zoom: 50%;
}
diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py
index 64c3ebbde..3f69f068e 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
@@ -251,12 +252,29 @@ class Editor:
"""Assign func to bridge cmd, register shortcut, return button"""
if func:
self._links[cmd] = func
- if keys:
- QShortcut( # type: ignore
- QKeySequence(keys),
- self.widget,
- activated=lambda s=self: func(s),
- )
+
+ 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=on_hotkey,
+ )
+
btn = self._addButton(
icon,
cmd,
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..6a1164bbf 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()
@@ -305,10 +309,6 @@ class BrowserPreviewer(MultiCardPreviewer):
self._last_card_id = c.id
return changed
- def _on_finished(self, ok):
- super()._on_finished(ok)
- self._parent.form.previewButton.setChecked(False)
-
def _on_prev_card(self):
self._parent.editor.saveNow(
lambda: self._parent._moveCur(QAbstractItemView.MoveUp)