Make dialogs non-blocking (#1650)

* Call StudyDeck with callback

* StudyDeck w/ callback, remove redundant assignment

* Replace exec() with show() for various dialogs

* Update super init args for Models.__init__

* Make StudyDialog ApplicationModal
This commit is contained in:
roxgib 2022-02-10 10:53:13 +11:00 committed by GitHub
parent 4653873db9
commit 4b9b923775
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 47 additions and 36 deletions

View file

@ -673,19 +673,22 @@ class Browser(QMainWindow):
cids = self.table.get_selected_card_ids()
did = self.mw.col.db.scalar("select did from cards where id = ?", cids[0])
current = self.mw.col.decks.get(did)["name"]
ret = StudyDeck(
def callback(ret: StudyDeck) -> None:
if not ret.name:
return
did = self.col.decks.id(ret.name)
set_card_deck(parent=self, card_ids=cids, deck_id=did).run_in_background()
StudyDeck(
self.mw,
current=current,
accept=tr.browsing_move_cards(),
title=tr.browsing_change_deck(),
help=HelpPage.BROWSING,
parent=self,
callback=callback,
)
if not ret.name:
return
did = self.col.decks.id(ret.name)
set_card_deck(parent=self, card_ids=cids, deck_id=did).run_in_background()
# legacy

View file

@ -32,10 +32,9 @@ class CustomStudy(QDialog):
self.created_custom_study = False
f.setupUi(self)
disable_help_button(self)
self.setWindowModality(Qt.WindowModality.WindowModal)
self.setupSignals()
f.radioNew.click()
self.exec()
self.open()
def setupSignals(self) -> None:
f = self.form

View file

@ -91,23 +91,28 @@ class DeckChooser(QHBoxLayout):
from aqt.studydeck import StudyDeck
current = self.selected_deck_name()
ret = StudyDeck(
self.mw,
current=current,
accept=tr.actions_choose(),
title=tr.qt_misc_choose_deck(),
help=HelpPage.EDITING,
cancel=False,
parent=self._widget,
geomKey="selectDeck",
)
if ret.name:
def callback(ret: StudyDeck) -> None:
if not ret.name:
return
new_selected_deck_id = self.mw.col.decks.by_name(ret.name)["id"]
if self.selected_deck_id != new_selected_deck_id:
self.selected_deck_id = new_selected_deck_id
if func := self.on_deck_changed:
func(new_selected_deck_id)
StudyDeck(
self.mw,
current=current,
accept=tr.actions_choose(),
title=tr.qt_misc_choose_deck(),
help=HelpPage.EDITING,
cancel=True,
parent=self._widget,
geomKey="selectDeck",
callback=callback,
)
def on_operation_did_execute(
self, changes: OpChanges, handler: object | None
) -> None:

View file

@ -40,7 +40,6 @@ class DeckConf(QDialog):
self.mw.checkpoint(tr.actions_options())
self.setupCombos()
self.setupConfs()
self.setWindowModality(Qt.WindowModality.WindowModal)
qconnect(
self.form.buttonBox.helpRequested, lambda: openHelp(HelpPage.DECK_OPTIONS)
)
@ -58,8 +57,7 @@ class DeckConf(QDialog):
# qt doesn't size properly with altered fonts otherwise
restoreGeom(self, "deckconf", adjustSize=True)
gui_hooks.deck_conf_will_show(self)
self.show()
self.exec()
self.open()
saveGeom(self, "deckconf")
def setupCombos(self) -> None:

View file

@ -1439,14 +1439,18 @@ title="{}" {}>{}</button>""".format(
def onStudyDeck(self) -> None:
from aqt.studydeck import StudyDeck
ret = StudyDeck(self, dyn=True, current=self.col.decks.current()["name"])
if ret.name:
# fixme: this is silly, it should be returning an ID
def callback(ret: StudyDeck) -> None:
if not ret.name:
return
deck_id = self.col.decks.id(ret.name)
set_current_deck(parent=self, deck_id=deck_id).success(
lambda out: self.moveToState("overview")
).run_in_background()
StudyDeck(
self, dyn=True, current=self.col.decks.current()["name"], callback=callback
)
def onEmptyCards(self) -> None:
show_empty_cards(self)

View file

@ -48,7 +48,7 @@ class Models(QDialog):
parent = parent or mw
self.fromMain = fromMain
self.selected_notetype_id = selected_notetype_id
QDialog.__init__(self, parent, Qt.WindowType.Window)
QDialog.__init__(self, parent or mw)
self.col = mw.col.weakref()
assert self.col
self.mm = self.col.models
@ -61,7 +61,7 @@ class Models(QDialog):
self.models: Sequence[NotetypeNameIdUseCount] = []
self.setupModels()
restoreGeom(self, "models")
self.exec()
self.show()
# Models
##########################################################################

View file

@ -105,7 +105,14 @@ class NotetypeChooser(QHBoxLayout):
def nameFunc() -> list[str]:
return sorted(n.name for n in self.mw.col.models.all_names_and_ids())
ret = StudyDeck(
def callback(ret: StudyDeck) -> None:
if not ret.name:
return
notetype = self.mw.col.models.by_name(ret.name)
if (id := notetype["id"]) != self._selected_notetype_id:
self.selected_notetype_id = id
StudyDeck(
self.mw,
names=nameFunc,
accept=tr.actions_choose(),
@ -116,13 +123,8 @@ class NotetypeChooser(QHBoxLayout):
buttons=[edit],
cancel=True,
geomKey="selectModel",
callback=callback,
)
if not ret.name:
return
notetype = self.mw.col.models.by_name(ret.name)
if (id := notetype["id"]) != self._selected_notetype_id:
self.selected_notetype_id = id
@property
def selected_notetype_id(self) -> NotetypeId:

View file

@ -81,7 +81,7 @@ class StudyDeck(QDialog):
self.ok = self.form.buttonBox.addButton(
accept or tr.decks_study(), QDialogButtonBox.ButtonRole.AcceptRole
)
self.setWindowModality(Qt.WindowModality.WindowModal)
self.setModal(True)
qconnect(self.form.buttonBox.helpRequested, lambda: openHelp(help))
qconnect(self.form.filter.textEdited, self.redraw)
qconnect(self.form.list.itemDoubleClicked, self.accept)
@ -90,7 +90,7 @@ class StudyDeck(QDialog):
self.redraw("", current)
self.callback = callback
if callback:
self.open()
self.show()
else:
self.exec()