Make Card Info Dialog non-modal

This commit is contained in:
RumovZ 2021-10-16 23:33:58 +02:00
parent a47453d5f3
commit 859b1d1a39

View File

@ -3,6 +3,8 @@
from __future__ import annotations from __future__ import annotations
from typing import Callable
import aqt import aqt
from anki.cards import Card, CardId from anki.cards import Card, CardId
from aqt.qt import * from aqt.qt import *
@ -21,18 +23,32 @@ class CardInfoDialog(QDialog):
GEOMETRY_KEY = "revlog" GEOMETRY_KEY = "revlog"
silentlyClose = True silentlyClose = True
def __init__(self, parent: QWidget, mw: aqt.AnkiQt, card: Card) -> None: def __init__(
self,
parent: QWidget | None,
mw: aqt.AnkiQt,
card: Card,
on_close: Callable | None = None,
geometry_key: str | None = None,
window_title: str | None = None,
) -> None:
super().__init__(parent) super().__init__(parent)
self.mw = mw self.mw = mw
self._on_close = on_close
self.GEOMETRY_KEY = geometry_key or self.GEOMETRY_KEY
if window_title:
self.setWindowTitle(window_title)
self._setup_ui(card.id) self._setup_ui(card.id)
self.show() self.show()
def _setup_ui(self, card_id: CardId) -> None: def _setup_ui(self, card_id: CardId) -> None:
self.setWindowModality(Qt.WindowModality.ApplicationModal)
self.mw.garbage_collect_on_dialog_finish(self) self.mw.garbage_collect_on_dialog_finish(self)
disable_help_button(self) disable_help_button(self)
restoreGeom(self, self.GEOMETRY_KEY) restoreGeom(self, self.GEOMETRY_KEY)
addCloseShortcut(self) addCloseShortcut(self)
icon = QIcon()
icon.addPixmap(QPixmap("icons:anki.png"), QIcon.Mode.Normal, QIcon.State.Off)
self.setWindowIcon(icon)
self.web = AnkiWebView(title=self.TITLE) self.web = AnkiWebView(title=self.TITLE)
self.web.setVisible(False) self.web.setVisible(False)
@ -47,10 +63,15 @@ class CardInfoDialog(QDialog):
self.setLayout(layout) self.setLayout(layout)
self.web.eval( self.web.eval(
f"anki.cardInfo(document.getElementById('main'), {card_id}, true);" f"let cardInfo = anki.cardInfo(document.getElementById('main'), {card_id}, true);"
) )
def update_card(self, card_id: CardId) -> None:
self.web.eval(f"anki.updateCardInfo(cardInfo, {card_id}, true);")
def reject(self) -> None: def reject(self) -> None:
if self._on_close:
self._on_close()
self.web = None self.web = None
saveGeom(self, self.GEOMETRY_KEY) saveGeom(self, self.GEOMETRY_KEY)
return QDialog.reject(self) return QDialog.reject(self)