mirror of
https://github.com/ankitects/anki.git
synced 2025-11-10 14:47:12 -05:00
Implement close button
This commit is contained in:
parent
01fd4df9cb
commit
a8a2e4ee32
8 changed files with 87 additions and 35 deletions
|
|
@ -42,6 +42,7 @@ service FrontendService {
|
|||
rpc ShowInMediaFolder(generic.String) returns (generic.Empty);
|
||||
rpc RecordAudio(generic.Empty) returns (generic.String);
|
||||
rpc CloseAddCards(generic.Bool) returns (generic.Empty);
|
||||
rpc CloseEditCurrent(generic.Empty) returns (generic.Empty);
|
||||
|
||||
// Profile config
|
||||
rpc GetProfileConfigJson(generic.String) returns (generic.Json);
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class AddCards(QMainWindow):
|
|||
def __init__(self, mw: AnkiQt) -> None:
|
||||
super().__init__(None, Qt.WindowType.Window)
|
||||
self._close_event_has_cleaned_up = False
|
||||
self._close_callback: Callable[[], None] | None = None
|
||||
self._close_callback: Callable[[], None] = self._close
|
||||
self.mw = mw
|
||||
self.col = mw.col
|
||||
form = aqt.forms.addcards.Ui_Dialog()
|
||||
|
|
|
|||
|
|
@ -32,13 +32,7 @@ class EditCurrent(QMainWindow):
|
|||
self.editor.card = self.mw.reviewer.card
|
||||
self.editor.set_note(self.mw.reviewer.card.note(), focusTo=0)
|
||||
restoreGeom(self, "editcurrent")
|
||||
close_button = self.form.buttonBox.button(QDialogButtonBox.StandardButton.Close)
|
||||
assert close_button is not None
|
||||
close_button.setShortcut(QKeySequence("Ctrl+Return"))
|
||||
add_close_shortcut(self)
|
||||
# qt5.14+ doesn't handle numpad enter on Windows
|
||||
self.compat_add_shorcut = QShortcut(QKeySequence("Ctrl+Enter"), self)
|
||||
qconnect(self.compat_add_shorcut.activated, close_button.click)
|
||||
gui_hooks.operation_did_execute.append(self.on_operation_did_execute)
|
||||
self.show()
|
||||
|
||||
|
|
|
|||
|
|
@ -28,16 +28,6 @@
|
|||
<item>
|
||||
<widget class="QWidget" name="fieldsArea" native="true"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Close</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QMenuBar" name="menubar">
|
||||
|
|
@ -60,22 +50,4 @@
|
|||
<resources>
|
||||
<include location="icons.qrc"/>
|
||||
</resources>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>Dialog</receiver>
|
||||
<slot>close()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
||||
|
|
|
|||
|
|
@ -818,6 +818,18 @@ def close_add_cards() -> bytes:
|
|||
return b""
|
||||
|
||||
|
||||
def close_edit_current() -> bytes:
|
||||
def handle_on_main() -> None:
|
||||
from aqt.editcurrent import EditCurrent
|
||||
|
||||
window = aqt.mw.app.activeWindow()
|
||||
if isinstance(window, EditCurrent):
|
||||
window.close()
|
||||
|
||||
aqt.mw.taskman.run_on_main(lambda: QTimer.singleShot(0, handle_on_main))
|
||||
return b""
|
||||
|
||||
|
||||
post_handler_list = [
|
||||
congrats_info,
|
||||
get_deck_configs_for_update,
|
||||
|
|
@ -850,6 +862,7 @@ post_handler_list = [
|
|||
read_clipboard,
|
||||
write_clipboard,
|
||||
close_add_cards,
|
||||
close_edit_current,
|
||||
]
|
||||
|
||||
|
||||
|
|
@ -1048,3 +1061,4 @@ def _extract_dynamic_get_request(path: str) -> DynamicRequest | None:
|
|||
return legacy_page_data
|
||||
else:
|
||||
return None
|
||||
return None
|
||||
|
|
|
|||
23
ts/routes/editor/ActionButtons.svelte
Normal file
23
ts/routes/editor/ActionButtons.svelte
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!--
|
||||
Copyright: Ankitects Pty Ltd and contributors
|
||||
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
-->
|
||||
<script lang="ts">
|
||||
import CloseButton from "./CloseButton.svelte";
|
||||
import type { EditorMode } from "./types";
|
||||
|
||||
export let mode: EditorMode;
|
||||
export let onClose: () => void;
|
||||
</script>
|
||||
|
||||
<div class="action-buttons d-flex flex-row-reverse">
|
||||
{#if mode === "add" || mode === "current"}
|
||||
<CloseButton {onClose} />
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<style lang="scss">
|
||||
.action-buttons {
|
||||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
32
ts/routes/editor/CloseButton.svelte
Normal file
32
ts/routes/editor/CloseButton.svelte
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
<!--
|
||||
Copyright: Ankitects Pty Ltd and contributors
|
||||
License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
||||
-->
|
||||
<script lang="ts">
|
||||
import * as tr from "@generated/ftl";
|
||||
import { getPlatformString } from "@tslib/shortcuts";
|
||||
import LabelButton from "$lib/components/LabelButton.svelte";
|
||||
import Shortcut from "$lib/components/Shortcut.svelte";
|
||||
|
||||
const rtl: boolean = window.getComputedStyle(document.body).direction == "rtl";
|
||||
|
||||
export let onClose: () => void;
|
||||
const closeKeyCombination = "Control+Enter";
|
||||
</script>
|
||||
|
||||
<LabelButton
|
||||
primary
|
||||
on:click={onClose}
|
||||
tooltip={getPlatformString(closeKeyCombination)}
|
||||
--border-left-radius={!rtl ? "var(--border-radius)" : "0"}
|
||||
--border-right-radius={rtl ? "var(--border-radius)" : "0"}
|
||||
>
|
||||
<div class="close">{tr.actionsClose()}</div>
|
||||
</LabelButton>
|
||||
<Shortcut keyCombination={closeKeyCombination} on:action={onClose} />
|
||||
|
||||
<style lang="scss">
|
||||
.close {
|
||||
margin: 0 0.75rem;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -397,6 +397,19 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
await closeAddCardsBackend({ val: await shouldPromptBeforeClosing() });
|
||||
}
|
||||
|
||||
async function closeEditCurrent() {
|
||||
saveNow();
|
||||
await closeEditCurrentBackend({});
|
||||
}
|
||||
|
||||
async function onClose() {
|
||||
if (mode === "add") {
|
||||
await closeAddCards();
|
||||
} else if (mode == "current") {
|
||||
await closeEditCurrent();
|
||||
}
|
||||
}
|
||||
|
||||
export function saveOnPageHide() {
|
||||
if (document.visibilityState === "hidden") {
|
||||
// will fire on session close and minimize
|
||||
|
|
@ -588,6 +601,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
addMediaFromPath,
|
||||
updateEditorNotetype,
|
||||
closeAddCards as closeAddCardsBackend,
|
||||
closeEditCurrent as closeEditCurrentBackend,
|
||||
} from "@generated/backend";
|
||||
import { wrapInternal } from "@tslib/wrap";
|
||||
import { getProfileConfig, getMeta, setMeta, getColConfig } from "@tslib/profile";
|
||||
|
|
@ -611,6 +625,7 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|||
import { NoteFieldsCheckResponse_State, type Note } from "@generated/anki/notes_pb";
|
||||
import { setupContextMenu } from "./context-menu.svelte";
|
||||
import { registerShortcut } from "@tslib/shortcuts";
|
||||
import ActionButtons from "./ActionButtons.svelte";
|
||||
|
||||
$: isIOImageLoaded = false;
|
||||
$: ioImageLoadedStore.set(isIOImageLoaded);
|
||||
|
|
@ -1221,6 +1236,7 @@ components and functionality for general note editing.
|
|||
<Collapsible toggleDisplay collapse={$tagsCollapsed}>
|
||||
<TagEditor {tags} on:tagsupdate={saveTags} />
|
||||
</Collapsible>
|
||||
<ActionButtons {mode} {onClose} />
|
||||
{/if}
|
||||
|
||||
<ContextMenu bind:this={contextMenu}>
|
||||
|
|
|
|||
Loading…
Reference in a new issue