Keep Card Info Dialog open even if no card is set

This commit is contained in:
RumovZ 2021-10-17 21:13:46 +02:00
parent 3c5e149176
commit ec02a4218e

View file

@ -30,7 +30,7 @@ class CardInfoDialog(QDialog):
self, self,
parent: QWidget | None, parent: QWidget | None,
mw: aqt.AnkiQt, mw: aqt.AnkiQt,
card: Card, card: Card | None,
on_close: Callable | None = None, on_close: Callable | None = None,
geometry_key: str | None = None, geometry_key: str | None = None,
window_title: str | None = None, window_title: str | None = None,
@ -41,10 +41,10 @@ class CardInfoDialog(QDialog):
self.GEOMETRY_KEY = geometry_key or self.GEOMETRY_KEY self.GEOMETRY_KEY = geometry_key or self.GEOMETRY_KEY
if window_title: if window_title:
self.setWindowTitle(window_title) self.setWindowTitle(window_title)
self._setup_ui(card.id) self._setup_ui(card and card.id)
self.show() self.show()
def _setup_ui(self, card_id: CardId) -> None: def _setup_ui(self, card_id: CardId | None) -> None:
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)
@ -69,8 +69,9 @@ class CardInfoDialog(QDialog):
) )
self.update_card(card_id) self.update_card(card_id)
def update_card(self, card_id: CardId) -> None: def update_card(self, card_id: CardId | None) -> None:
self.web.eval(f"cardInfo.then((c) => c.$set({{ cardId: {card_id} }}));") val = "undefined" if card_id is None else card_id
self.web.eval(f"cardInfo.then((c) => c.$set({{ cardId: {val} }}));")
def reject(self) -> None: def reject(self) -> None:
if self._on_close: if self._on_close:
@ -91,8 +92,9 @@ class CardInfoManager:
self._dialog: CardInfoDialog | None = None self._dialog: CardInfoDialog | None = None
def toggle(self) -> None: def toggle(self) -> None:
"""Opening requires a card to be set.""" if self._dialog:
if not self._dialog and self._card: self._dialog.reject()
else:
self._dialog = CardInfoDialog( self._dialog = CardInfoDialog(
None, None,
self.mw, self.mw,
@ -101,16 +103,11 @@ class CardInfoManager:
self.geometry_key, self.geometry_key,
self.window_title, self.window_title,
) )
elif self._dialog:
self._dialog.reject()
def set_card(self, card: Card | None) -> None: def set_card(self, card: Card | None) -> None:
"""Closes the dialog if card is None."""
self._card = card self._card = card
if self._dialog and self._card: if self._dialog:
self._dialog.update_card(card.id) self._dialog.update_card(card and card.id)
elif self._dialog:
self._dialog.reject()
def close(self) -> None: def close(self) -> None:
if self._dialog: if self._dialog: