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)