diff --git a/proto/anki/frontend.proto b/proto/anki/frontend.proto index b57709836..1a95d343d 100644 --- a/proto/anki/frontend.proto +++ b/proto/anki/frontend.proto @@ -43,6 +43,8 @@ service FrontendService { rpc OpenLink(generic.String) returns (generic.Empty); rpc AskUser(AskUserRequest) returns (generic.Bool); rpc ShowMessageBox(ShowMessageBoxRequest) returns (generic.Empty); + rpc OpenFieldsDialog(generic.Empty) returns (generic.Empty); + rpc OpenCardsDialog(generic.Empty) returns (generic.Empty); // Profile config rpc GetProfileConfigJson(generic.String) returns (generic.Json); diff --git a/qt/aqt/editor.py b/qt/aqt/editor.py index 28f3d9673..4862cd960 100644 --- a/qt/aqt/editor.py +++ b/qt/aqt/editor.py @@ -300,9 +300,6 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too return checkFocus def onFields(self) -> None: - self.call_after_note_saved(self._onFields) - - def _onFields(self) -> None: from aqt.fields import FieldDialog def on_note_info(note_info: NoteInfo) -> None: @@ -313,9 +310,6 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too self.get_note_info(on_note_info) def onCardLayout(self) -> None: - self.call_after_note_saved(self._onCardLayout) - - def _onCardLayout(self) -> None: from aqt.clayout import CardLayout if self.card: @@ -539,8 +533,6 @@ require("anki/ui").loaded.then(() => require("anki/NoteEditor").instances[0].too def _init_links(self) -> None: self._links: dict[str, Callable] = dict( - fields=NewEditor.onFields, - cards=NewEditor.onCardLayout, paste=NewEditor.onPaste, cut=NewEditor.onCut, copy=NewEditor.onCopy, diff --git a/qt/aqt/mediasrv.py b/qt/aqt/mediasrv.py index 7a028b002..a8628bbbe 100644 --- a/qt/aqt/mediasrv.py +++ b/qt/aqt/mediasrv.py @@ -882,6 +882,32 @@ async def show_message_box() -> bytes: return generic_pb2.Bool(val=answer).SerializeToString() +def open_fields_dialog() -> bytes: + def handle_on_main() -> None: + from aqt.editor import NewEditor + + window = aqt.mw.app.activeWindow() + assert window is not None + if hasattr(window, "editor") and isinstance(window.editor, NewEditor): + window.editor.onFields() + + aqt.mw.taskman.run_on_main(handle_on_main) + return b"" + + +def open_cards_dialog() -> bytes: + def handle_on_main() -> None: + from aqt.editor import NewEditor + + window = aqt.mw.app.activeWindow() + assert window is not None + if hasattr(window, "editor") and isinstance(window.editor, NewEditor): + window.editor.onCardLayout() + + aqt.mw.taskman.run_on_main(handle_on_main) + return b"" + + def save_custom_colours() -> bytes: colors = [ QColorDialog.customColor(i).name(QColor.NameFormat.HexRgb) @@ -919,6 +945,8 @@ post_handler_list = [ open_link, ask_user, show_message_box, + open_fields_dialog, + open_cards_dialog, save_custom_colours, ] diff --git a/ts/routes/editor/editor-toolbar/EditorToolbar.svelte b/ts/routes/editor/editor-toolbar/EditorToolbar.svelte index 10e731d27..65328429a 100644 --- a/ts/routes/editor/editor-toolbar/EditorToolbar.svelte +++ b/ts/routes/editor/editor-toolbar/EditorToolbar.svelte @@ -102,7 +102,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html - + diff --git a/ts/routes/editor/editor-toolbar/NotetypeButtons.svelte b/ts/routes/editor/editor-toolbar/NotetypeButtons.svelte index 0ca571494..4213cbbae 100644 --- a/ts/routes/editor/editor-toolbar/NotetypeButtons.svelte +++ b/ts/routes/editor/editor-toolbar/NotetypeButtons.svelte @@ -17,9 +17,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import LabelButton from "$lib/components/LabelButton.svelte"; import Shortcut from "$lib/components/Shortcut.svelte"; import type { NoteEditorAPI } from "../NoteEditor.svelte"; + import { openFieldsDialog, openCardsDialog } from "@generated/backend"; export let api = {}; export let noteEditor: NoteEditorAPI; + export let isLegacy = false; const keyCombination = "Control+L"; @@ -37,7 +39,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html tooltip={tr.editingCustomizeFields()} on:click={async () => { await noteEditor.saveNow(); - bridgeCommand("fields"); + if (isLegacy) { + bridgeCommand("fields"); + } else { + await openFieldsDialog({}); + } }} > {tr.editingFields()}... @@ -51,7 +57,11 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html )})" on:click={async () => { await noteEditor.saveNow(); - bridgeCommand("cards"); + if (isLegacy) { + bridgeCommand("cards"); + } else { + await openCardsDialog({}); + } }} > {tr.editingCards()}...