mirror of
https://github.com/ankitects/anki.git
synced 2025-11-10 22:57:11 -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 ShowInMediaFolder(generic.String) returns (generic.Empty);
|
||||||
rpc RecordAudio(generic.Empty) returns (generic.String);
|
rpc RecordAudio(generic.Empty) returns (generic.String);
|
||||||
rpc CloseAddCards(generic.Bool) returns (generic.Empty);
|
rpc CloseAddCards(generic.Bool) returns (generic.Empty);
|
||||||
|
rpc CloseEditCurrent(generic.Empty) returns (generic.Empty);
|
||||||
|
|
||||||
// Profile config
|
// Profile config
|
||||||
rpc GetProfileConfigJson(generic.String) returns (generic.Json);
|
rpc GetProfileConfigJson(generic.String) returns (generic.Json);
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ class AddCards(QMainWindow):
|
||||||
def __init__(self, mw: AnkiQt) -> None:
|
def __init__(self, mw: AnkiQt) -> None:
|
||||||
super().__init__(None, Qt.WindowType.Window)
|
super().__init__(None, Qt.WindowType.Window)
|
||||||
self._close_event_has_cleaned_up = False
|
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.mw = mw
|
||||||
self.col = mw.col
|
self.col = mw.col
|
||||||
form = aqt.forms.addcards.Ui_Dialog()
|
form = aqt.forms.addcards.Ui_Dialog()
|
||||||
|
|
|
||||||
|
|
@ -32,13 +32,7 @@ class EditCurrent(QMainWindow):
|
||||||
self.editor.card = self.mw.reviewer.card
|
self.editor.card = self.mw.reviewer.card
|
||||||
self.editor.set_note(self.mw.reviewer.card.note(), focusTo=0)
|
self.editor.set_note(self.mw.reviewer.card.note(), focusTo=0)
|
||||||
restoreGeom(self, "editcurrent")
|
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)
|
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)
|
gui_hooks.operation_did_execute.append(self.on_operation_did_execute)
|
||||||
self.show()
|
self.show()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,16 +28,6 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QWidget" name="fieldsArea" native="true"/>
|
<widget class="QWidget" name="fieldsArea" native="true"/>
|
||||||
</item>
|
</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>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenuBar" name="menubar">
|
<widget class="QMenuBar" name="menubar">
|
||||||
|
|
@ -60,22 +50,4 @@
|
||||||
<resources>
|
<resources>
|
||||||
<include location="icons.qrc"/>
|
<include location="icons.qrc"/>
|
||||||
</resources>
|
</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>
|
</ui>
|
||||||
|
|
|
||||||
|
|
@ -818,6 +818,18 @@ def close_add_cards() -> bytes:
|
||||||
return b""
|
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 = [
|
post_handler_list = [
|
||||||
congrats_info,
|
congrats_info,
|
||||||
get_deck_configs_for_update,
|
get_deck_configs_for_update,
|
||||||
|
|
@ -850,6 +862,7 @@ post_handler_list = [
|
||||||
read_clipboard,
|
read_clipboard,
|
||||||
write_clipboard,
|
write_clipboard,
|
||||||
close_add_cards,
|
close_add_cards,
|
||||||
|
close_edit_current,
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1048,3 +1061,4 @@ def _extract_dynamic_get_request(path: str) -> DynamicRequest | None:
|
||||||
return legacy_page_data
|
return legacy_page_data
|
||||||
else:
|
else:
|
||||||
return None
|
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() });
|
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() {
|
export function saveOnPageHide() {
|
||||||
if (document.visibilityState === "hidden") {
|
if (document.visibilityState === "hidden") {
|
||||||
// will fire on session close and minimize
|
// 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,
|
addMediaFromPath,
|
||||||
updateEditorNotetype,
|
updateEditorNotetype,
|
||||||
closeAddCards as closeAddCardsBackend,
|
closeAddCards as closeAddCardsBackend,
|
||||||
|
closeEditCurrent as closeEditCurrentBackend,
|
||||||
} from "@generated/backend";
|
} from "@generated/backend";
|
||||||
import { wrapInternal } from "@tslib/wrap";
|
import { wrapInternal } from "@tslib/wrap";
|
||||||
import { getProfileConfig, getMeta, setMeta, getColConfig } from "@tslib/profile";
|
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 { NoteFieldsCheckResponse_State, type Note } from "@generated/anki/notes_pb";
|
||||||
import { setupContextMenu } from "./context-menu.svelte";
|
import { setupContextMenu } from "./context-menu.svelte";
|
||||||
import { registerShortcut } from "@tslib/shortcuts";
|
import { registerShortcut } from "@tslib/shortcuts";
|
||||||
|
import ActionButtons from "./ActionButtons.svelte";
|
||||||
|
|
||||||
$: isIOImageLoaded = false;
|
$: isIOImageLoaded = false;
|
||||||
$: ioImageLoadedStore.set(isIOImageLoaded);
|
$: ioImageLoadedStore.set(isIOImageLoaded);
|
||||||
|
|
@ -1221,6 +1236,7 @@ components and functionality for general note editing.
|
||||||
<Collapsible toggleDisplay collapse={$tagsCollapsed}>
|
<Collapsible toggleDisplay collapse={$tagsCollapsed}>
|
||||||
<TagEditor {tags} on:tagsupdate={saveTags} />
|
<TagEditor {tags} on:tagsupdate={saveTags} />
|
||||||
</Collapsible>
|
</Collapsible>
|
||||||
|
<ActionButtons {mode} {onClose} />
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<ContextMenu bind:this={contextMenu}>
|
<ContextMenu bind:this={contextMenu}>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue