mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00
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:
parent
4653873db9
commit
4b9b923775
8 changed files with 47 additions and 36 deletions
|
@ -673,19 +673,22 @@ class Browser(QMainWindow):
|
||||||
cids = self.table.get_selected_card_ids()
|
cids = self.table.get_selected_card_ids()
|
||||||
did = self.mw.col.db.scalar("select did from cards where id = ?", cids[0])
|
did = self.mw.col.db.scalar("select did from cards where id = ?", cids[0])
|
||||||
current = self.mw.col.decks.get(did)["name"]
|
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,
|
self.mw,
|
||||||
current=current,
|
current=current,
|
||||||
accept=tr.browsing_move_cards(),
|
accept=tr.browsing_move_cards(),
|
||||||
title=tr.browsing_change_deck(),
|
title=tr.browsing_change_deck(),
|
||||||
help=HelpPage.BROWSING,
|
help=HelpPage.BROWSING,
|
||||||
parent=self,
|
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
|
# legacy
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,9 @@ class CustomStudy(QDialog):
|
||||||
self.created_custom_study = False
|
self.created_custom_study = False
|
||||||
f.setupUi(self)
|
f.setupUi(self)
|
||||||
disable_help_button(self)
|
disable_help_button(self)
|
||||||
self.setWindowModality(Qt.WindowModality.WindowModal)
|
|
||||||
self.setupSignals()
|
self.setupSignals()
|
||||||
f.radioNew.click()
|
f.radioNew.click()
|
||||||
self.exec()
|
self.open()
|
||||||
|
|
||||||
def setupSignals(self) -> None:
|
def setupSignals(self) -> None:
|
||||||
f = self.form
|
f = self.form
|
||||||
|
|
|
@ -91,23 +91,28 @@ class DeckChooser(QHBoxLayout):
|
||||||
from aqt.studydeck import StudyDeck
|
from aqt.studydeck import StudyDeck
|
||||||
|
|
||||||
current = self.selected_deck_name()
|
current = self.selected_deck_name()
|
||||||
ret = StudyDeck(
|
|
||||||
self.mw,
|
def callback(ret: StudyDeck) -> None:
|
||||||
current=current,
|
if not ret.name:
|
||||||
accept=tr.actions_choose(),
|
return
|
||||||
title=tr.qt_misc_choose_deck(),
|
|
||||||
help=HelpPage.EDITING,
|
|
||||||
cancel=False,
|
|
||||||
parent=self._widget,
|
|
||||||
geomKey="selectDeck",
|
|
||||||
)
|
|
||||||
if ret.name:
|
|
||||||
new_selected_deck_id = self.mw.col.decks.by_name(ret.name)["id"]
|
new_selected_deck_id = self.mw.col.decks.by_name(ret.name)["id"]
|
||||||
if self.selected_deck_id != new_selected_deck_id:
|
if self.selected_deck_id != new_selected_deck_id:
|
||||||
self.selected_deck_id = new_selected_deck_id
|
self.selected_deck_id = new_selected_deck_id
|
||||||
if func := self.on_deck_changed:
|
if func := self.on_deck_changed:
|
||||||
func(new_selected_deck_id)
|
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(
|
def on_operation_did_execute(
|
||||||
self, changes: OpChanges, handler: object | None
|
self, changes: OpChanges, handler: object | None
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
|
@ -40,7 +40,6 @@ class DeckConf(QDialog):
|
||||||
self.mw.checkpoint(tr.actions_options())
|
self.mw.checkpoint(tr.actions_options())
|
||||||
self.setupCombos()
|
self.setupCombos()
|
||||||
self.setupConfs()
|
self.setupConfs()
|
||||||
self.setWindowModality(Qt.WindowModality.WindowModal)
|
|
||||||
qconnect(
|
qconnect(
|
||||||
self.form.buttonBox.helpRequested, lambda: openHelp(HelpPage.DECK_OPTIONS)
|
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
|
# qt doesn't size properly with altered fonts otherwise
|
||||||
restoreGeom(self, "deckconf", adjustSize=True)
|
restoreGeom(self, "deckconf", adjustSize=True)
|
||||||
gui_hooks.deck_conf_will_show(self)
|
gui_hooks.deck_conf_will_show(self)
|
||||||
self.show()
|
self.open()
|
||||||
self.exec()
|
|
||||||
saveGeom(self, "deckconf")
|
saveGeom(self, "deckconf")
|
||||||
|
|
||||||
def setupCombos(self) -> None:
|
def setupCombos(self) -> None:
|
||||||
|
|
|
@ -1439,14 +1439,18 @@ title="{}" {}>{}</button>""".format(
|
||||||
def onStudyDeck(self) -> None:
|
def onStudyDeck(self) -> None:
|
||||||
from aqt.studydeck import StudyDeck
|
from aqt.studydeck import StudyDeck
|
||||||
|
|
||||||
ret = StudyDeck(self, dyn=True, current=self.col.decks.current()["name"])
|
def callback(ret: StudyDeck) -> None:
|
||||||
if ret.name:
|
if not ret.name:
|
||||||
# fixme: this is silly, it should be returning an ID
|
return
|
||||||
deck_id = self.col.decks.id(ret.name)
|
deck_id = self.col.decks.id(ret.name)
|
||||||
set_current_deck(parent=self, deck_id=deck_id).success(
|
set_current_deck(parent=self, deck_id=deck_id).success(
|
||||||
lambda out: self.moveToState("overview")
|
lambda out: self.moveToState("overview")
|
||||||
).run_in_background()
|
).run_in_background()
|
||||||
|
|
||||||
|
StudyDeck(
|
||||||
|
self, dyn=True, current=self.col.decks.current()["name"], callback=callback
|
||||||
|
)
|
||||||
|
|
||||||
def onEmptyCards(self) -> None:
|
def onEmptyCards(self) -> None:
|
||||||
show_empty_cards(self)
|
show_empty_cards(self)
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ class Models(QDialog):
|
||||||
parent = parent or mw
|
parent = parent or mw
|
||||||
self.fromMain = fromMain
|
self.fromMain = fromMain
|
||||||
self.selected_notetype_id = selected_notetype_id
|
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()
|
self.col = mw.col.weakref()
|
||||||
assert self.col
|
assert self.col
|
||||||
self.mm = self.col.models
|
self.mm = self.col.models
|
||||||
|
@ -61,7 +61,7 @@ class Models(QDialog):
|
||||||
self.models: Sequence[NotetypeNameIdUseCount] = []
|
self.models: Sequence[NotetypeNameIdUseCount] = []
|
||||||
self.setupModels()
|
self.setupModels()
|
||||||
restoreGeom(self, "models")
|
restoreGeom(self, "models")
|
||||||
self.exec()
|
self.show()
|
||||||
|
|
||||||
# Models
|
# Models
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
|
@ -105,7 +105,14 @@ class NotetypeChooser(QHBoxLayout):
|
||||||
def nameFunc() -> list[str]:
|
def nameFunc() -> list[str]:
|
||||||
return sorted(n.name for n in self.mw.col.models.all_names_and_ids())
|
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,
|
self.mw,
|
||||||
names=nameFunc,
|
names=nameFunc,
|
||||||
accept=tr.actions_choose(),
|
accept=tr.actions_choose(),
|
||||||
|
@ -116,13 +123,8 @@ class NotetypeChooser(QHBoxLayout):
|
||||||
buttons=[edit],
|
buttons=[edit],
|
||||||
cancel=True,
|
cancel=True,
|
||||||
geomKey="selectModel",
|
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
|
@property
|
||||||
def selected_notetype_id(self) -> NotetypeId:
|
def selected_notetype_id(self) -> NotetypeId:
|
||||||
|
|
|
@ -81,7 +81,7 @@ class StudyDeck(QDialog):
|
||||||
self.ok = self.form.buttonBox.addButton(
|
self.ok = self.form.buttonBox.addButton(
|
||||||
accept or tr.decks_study(), QDialogButtonBox.ButtonRole.AcceptRole
|
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.buttonBox.helpRequested, lambda: openHelp(help))
|
||||||
qconnect(self.form.filter.textEdited, self.redraw)
|
qconnect(self.form.filter.textEdited, self.redraw)
|
||||||
qconnect(self.form.list.itemDoubleClicked, self.accept)
|
qconnect(self.form.list.itemDoubleClicked, self.accept)
|
||||||
|
@ -90,7 +90,7 @@ class StudyDeck(QDialog):
|
||||||
self.redraw("", current)
|
self.redraw("", current)
|
||||||
self.callback = callback
|
self.callback = callback
|
||||||
if callback:
|
if callback:
|
||||||
self.open()
|
self.show()
|
||||||
else:
|
else:
|
||||||
self.exec()
|
self.exec()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue