mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
fix cases where we used the wrong type sig to connect to gui hook
This commit is contained in:
parent
8310cb7a0e
commit
886536d78f
6 changed files with 41 additions and 25 deletions
|
@ -18,6 +18,8 @@ from anki.cards import Card
|
||||||
from anki.collection import _Collection
|
from anki.collection import _Collection
|
||||||
from anki.consts import *
|
from anki.consts import *
|
||||||
from anki.lang import _, ngettext
|
from anki.lang import _, ngettext
|
||||||
|
from anki.notes import Note
|
||||||
|
from anki.types import NoteType
|
||||||
from anki.utils import (
|
from anki.utils import (
|
||||||
bodyClass,
|
bodyClass,
|
||||||
fmtTimeSpan,
|
fmtTimeSpan,
|
||||||
|
@ -656,7 +658,7 @@ class Browser(QMainWindow):
|
||||||
m.addSeparator()
|
m.addSeparator()
|
||||||
for act in self.form.menu_Notes.actions():
|
for act in self.form.menu_Notes.actions():
|
||||||
m.addAction(act)
|
m.addAction(act)
|
||||||
gui_hooks.browser_will_show_context_menu(self)
|
gui_hooks.browser_will_show_context_menu(self, m)
|
||||||
qtMenuShortcutWorkaround(m)
|
qtMenuShortcutWorkaround(m)
|
||||||
m.exec_(QCursor.pos())
|
m.exec_(QCursor.pos())
|
||||||
|
|
||||||
|
@ -844,13 +846,13 @@ class Browser(QMainWindow):
|
||||||
else:
|
else:
|
||||||
self.editor.setNote(self.card.note(reload=True), focusTo=self.focusTo)
|
self.editor.setNote(self.card.note(reload=True), focusTo=self.focusTo)
|
||||||
self.focusTo = None
|
self.focusTo = None
|
||||||
self.editor.card = self.card # type: ignore
|
self.editor.card = self.card # type: ignore
|
||||||
self.singleCard = True
|
self.singleCard = True
|
||||||
self._updateFlagsMenu()
|
self._updateFlagsMenu()
|
||||||
gui_hooks.browser_did_change_row(self)
|
gui_hooks.browser_did_change_row(self)
|
||||||
self._renderPreview(True)
|
self._renderPreview(True)
|
||||||
|
|
||||||
def refreshCurrentCard(self, note):
|
def refreshCurrentCard(self, note: Note) -> None:
|
||||||
self.model.refreshNote(note)
|
self.model.refreshNote(note)
|
||||||
self._renderPreview(False)
|
self._renderPreview(False)
|
||||||
|
|
||||||
|
@ -1533,7 +1535,7 @@ where id in %s"""
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
_previewTimer = None
|
_previewTimer = None
|
||||||
_lastPreviewRender: Union[int,float] = 0
|
_lastPreviewRender: Union[int, float] = 0
|
||||||
_lastPreviewState = None
|
_lastPreviewState = None
|
||||||
_previewCardChanged = False
|
_previewCardChanged = False
|
||||||
|
|
||||||
|
@ -2019,7 +2021,7 @@ update cards set usn=?, mod=?, did=? where id in """
|
||||||
self.form.tableView.selectAll()
|
self.form.tableView.selectAll()
|
||||||
sm.select(items, QItemSelectionModel.Deselect | QItemSelectionModel.Rows)
|
sm.select(items, QItemSelectionModel.Deselect | QItemSelectionModel.Rows)
|
||||||
|
|
||||||
# Edit: undo
|
# Hooks
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
def setupHooks(self) -> None:
|
def setupHooks(self) -> None:
|
||||||
|
@ -2027,20 +2029,27 @@ update cards set usn=?, mod=?, did=? where id in """
|
||||||
gui_hooks.state_did_reset.append(self.onReset)
|
gui_hooks.state_did_reset.append(self.onReset)
|
||||||
gui_hooks.editor_did_fire_typing_timer.append(self.refreshCurrentCard)
|
gui_hooks.editor_did_fire_typing_timer.append(self.refreshCurrentCard)
|
||||||
gui_hooks.editor_did_load_note.append(self.onLoadNote)
|
gui_hooks.editor_did_load_note.append(self.onLoadNote)
|
||||||
gui_hooks.editor_did_unfocus_field.append(self.refreshCurrentCard)
|
gui_hooks.editor_did_unfocus_field.append(self.on_unfocus_field)
|
||||||
hooks.tag_added.append(self.maybeRefreshSidebar)
|
hooks.tag_added.append(self.on_item_added)
|
||||||
hooks.note_type_added.append(self.maybeRefreshSidebar)
|
hooks.note_type_added.append(self.on_item_added)
|
||||||
hooks.deck_added.append(self.maybeRefreshSidebar)
|
hooks.deck_added.append(self.on_item_added)
|
||||||
|
|
||||||
def teardownHooks(self) -> None:
|
def teardownHooks(self) -> None:
|
||||||
gui_hooks.undo_state_did_change.remove(self.onUndoState)
|
gui_hooks.undo_state_did_change.remove(self.onUndoState)
|
||||||
gui_hooks.state_did_reset.remove(self.onReset)
|
gui_hooks.state_did_reset.remove(self.onReset)
|
||||||
gui_hooks.editor_did_fire_typing_timer.remove(self.refreshCurrentCard)
|
gui_hooks.editor_did_fire_typing_timer.remove(self.refreshCurrentCard)
|
||||||
gui_hooks.editor_did_load_note.remove(self.onLoadNote)
|
gui_hooks.editor_did_load_note.remove(self.onLoadNote)
|
||||||
gui_hooks.editor_did_unfocus_field.remove(self.refreshCurrentCard)
|
gui_hooks.editor_did_unfocus_field.remove(self.on_unfocus_field)
|
||||||
hooks.tag_added.remove(self.maybeRefreshSidebar)
|
hooks.tag_added.remove(self.on_item_added)
|
||||||
hooks.note_type_added.remove(self.maybeRefreshSidebar)
|
hooks.note_type_added.remove(self.on_item_added)
|
||||||
hooks.deck_added.remove(self.maybeRefreshSidebar)
|
hooks.deck_added.remove(self.on_item_added)
|
||||||
|
|
||||||
|
def onUnfocusCard(self, changed: bool, note: Note, field_idx: int):
|
||||||
|
self.refreshCurrentCard(note)
|
||||||
|
|
||||||
|
# covers the tag, note and deck case
|
||||||
|
def on_item_added(self, item):
|
||||||
|
self.maybeRefreshSidebar()
|
||||||
|
|
||||||
def onUndoState(self, on):
|
def onUndoState(self, on):
|
||||||
self.form.actionUndo.setEnabled(on)
|
self.form.actionUndo.setEnabled(on)
|
||||||
|
@ -2275,9 +2284,12 @@ class ChangeModel(QDialog):
|
||||||
self.setup()
|
self.setup()
|
||||||
restoreGeom(self, "changeModel")
|
restoreGeom(self, "changeModel")
|
||||||
gui_hooks.state_did_reset.append(self.onReset)
|
gui_hooks.state_did_reset.append(self.onReset)
|
||||||
gui_hooks.current_note_type_did_change.append(self.onReset)
|
gui_hooks.current_note_type_did_change.append(self.on_note_type_change)
|
||||||
self.exec_()
|
self.exec_()
|
||||||
|
|
||||||
|
def on_note_type_change(self, notetype: NoteType) -> None:
|
||||||
|
self.onReset()
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
# maps
|
# maps
|
||||||
self.flayout = QHBoxLayout()
|
self.flayout = QHBoxLayout()
|
||||||
|
@ -2399,7 +2411,7 @@ class ChangeModel(QDialog):
|
||||||
|
|
||||||
def cleanup(self) -> None:
|
def cleanup(self) -> None:
|
||||||
gui_hooks.state_did_reset.remove(self.onReset)
|
gui_hooks.state_did_reset.remove(self.onReset)
|
||||||
gui_hooks.current_note_type_did_change.remove(self.onReset)
|
gui_hooks.current_note_type_did_change.remove(self.on_note_type_change)
|
||||||
self.modelChooser.cleanup()
|
self.modelChooser.cleanup()
|
||||||
saveGeom(self, "changeModel")
|
saveGeom(self, "changeModel")
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ from aqt.utils import shortcut
|
||||||
class DeckChooser(QHBoxLayout):
|
class DeckChooser(QHBoxLayout):
|
||||||
def __init__(self, mw, widget: QWidget, label=True, start=None) -> None:
|
def __init__(self, mw, widget: QWidget, label=True, start=None) -> None:
|
||||||
QHBoxLayout.__init__(self)
|
QHBoxLayout.__init__(self)
|
||||||
self.widget = widget # type: ignore
|
self.widget = widget # type: ignore
|
||||||
self.mw = mw
|
self.mw = mw
|
||||||
self.deck = mw.col
|
self.deck = mw.col
|
||||||
self.label = label
|
self.label = label
|
||||||
|
@ -19,7 +19,7 @@ class DeckChooser(QHBoxLayout):
|
||||||
self.setSpacing(8)
|
self.setSpacing(8)
|
||||||
self.setupDecks()
|
self.setupDecks()
|
||||||
self.widget.setLayout(self)
|
self.widget.setLayout(self)
|
||||||
gui_hooks.current_note_type_did_change.append(self.onModelChange)
|
gui_hooks.current_note_type_did_change.append(self.onModelChangeNew)
|
||||||
|
|
||||||
def setupDecks(self):
|
def setupDecks(self):
|
||||||
if self.label:
|
if self.label:
|
||||||
|
@ -64,7 +64,10 @@ class DeckChooser(QHBoxLayout):
|
||||||
self.widget.hide()
|
self.widget.hide()
|
||||||
|
|
||||||
def cleanup(self) -> None:
|
def cleanup(self) -> None:
|
||||||
gui_hooks.current_note_type_did_change.remove(self.onModelChange)
|
gui_hooks.current_note_type_did_change.remove(self.onModelChangeNew)
|
||||||
|
|
||||||
|
def onModelChangeNew(self, unused):
|
||||||
|
self.onModelChange()
|
||||||
|
|
||||||
def onModelChange(self):
|
def onModelChange(self):
|
||||||
if not self.mw.col.conf.get("addToCur", True):
|
if not self.mw.col.conf.get("addToCur", True):
|
||||||
|
|
|
@ -160,7 +160,7 @@ class Editor:
|
||||||
fldsTitle=_("Customize Fields"),
|
fldsTitle=_("Customize Fields"),
|
||||||
cardsTitle=shortcut(_("Customize Card Templates (Ctrl+L)")),
|
cardsTitle=shortcut(_("Customize Card Templates (Ctrl+L)")),
|
||||||
)
|
)
|
||||||
bgcol = self.mw.app.palette().window().color().name() # type: ignore
|
bgcol = self.mw.app.palette().window().color().name() # type: ignore
|
||||||
# then load page
|
# then load page
|
||||||
self.web.stdHtml(
|
self.web.stdHtml(
|
||||||
_html % (bgcol, bgcol, topbuts, _("Show Duplicates")),
|
_html % (bgcol, bgcol, topbuts, _("Show Duplicates")),
|
||||||
|
@ -293,7 +293,7 @@ class Editor:
|
||||||
fn = self._addFocusCheck(fn)
|
fn = self._addFocusCheck(fn)
|
||||||
else:
|
else:
|
||||||
keys, fn, _ = row
|
keys, fn, _ = row
|
||||||
QShortcut(QKeySequence(keys), self.widget, activated=fn) # type: ignore
|
QShortcut(QKeySequence(keys), self.widget, activated=fn) # type: ignore
|
||||||
|
|
||||||
def _addFocusCheck(self, fn):
|
def _addFocusCheck(self, fn):
|
||||||
def checkFocus():
|
def checkFocus():
|
||||||
|
@ -427,7 +427,7 @@ class Editor:
|
||||||
)
|
)
|
||||||
self.web.evalWithCallback(js, oncallback)
|
self.web.evalWithCallback(js, oncallback)
|
||||||
|
|
||||||
def fonts(self) -> List[Tuple[str,int,bool]]:
|
def fonts(self) -> List[Tuple[str, int, bool]]:
|
||||||
return [
|
return [
|
||||||
(gui_hooks.editor_will_use_font_for_field(f["font"]), f["size"], f["rtl"])
|
(gui_hooks.editor_will_use_font_for_field(f["font"]), f["size"], f["rtl"])
|
||||||
for f in self.note.model()["flds"]
|
for f in self.note.model()["flds"]
|
||||||
|
|
|
@ -11,7 +11,7 @@ from aqt.utils import shortcut
|
||||||
class ModelChooser(QHBoxLayout):
|
class ModelChooser(QHBoxLayout):
|
||||||
def __init__(self, mw, widget, label=True) -> None:
|
def __init__(self, mw, widget, label=True) -> None:
|
||||||
QHBoxLayout.__init__(self)
|
QHBoxLayout.__init__(self)
|
||||||
self.widget = widget # type: ignore
|
self.widget = widget # type: ignore
|
||||||
self.mw = mw
|
self.mw = mw
|
||||||
self.deck = mw.col
|
self.deck = mw.col
|
||||||
self.label = label
|
self.label = label
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
|
from typing import Callable
|
||||||
|
|
||||||
from PyQt5.Qt import * # type: ignore
|
from PyQt5.Qt import * # type: ignore
|
||||||
from PyQt5.QtCore import *
|
from PyQt5.QtCore import *
|
||||||
|
@ -14,7 +15,6 @@ from PyQt5.QtCore import pyqtRemoveInputHook # pylint: disable=no-name-in-modul
|
||||||
from PyQt5.QtGui import * # type: ignore
|
from PyQt5.QtGui import * # type: ignore
|
||||||
from PyQt5.QtWebEngineWidgets import * # type: ignore
|
from PyQt5.QtWebEngineWidgets import * # type: ignore
|
||||||
from PyQt5.QtWidgets import *
|
from PyQt5.QtWidgets import *
|
||||||
from typing import Callable
|
|
||||||
|
|
||||||
from anki.utils import isMac, isWin
|
from anki.utils import isMac, isWin
|
||||||
|
|
||||||
|
@ -54,6 +54,7 @@ qtpoint = QT_VERSION & 0xFF
|
||||||
if qtmajor != 5 or qtminor < 9 or qtminor == 10:
|
if qtmajor != 5 or qtminor < 9 or qtminor == 10:
|
||||||
raise Exception("Anki does not support your Qt version.")
|
raise Exception("Anki does not support your Qt version.")
|
||||||
|
|
||||||
|
|
||||||
def qconnect(signal: Callable, func: Callable) -> None:
|
def qconnect(signal: Callable, func: Callable) -> None:
|
||||||
"Helper to work around type checking not working with signal.connect(func)."
|
"Helper to work around type checking not working with signal.connect(func)."
|
||||||
signal.connect(func) # type: ignore
|
signal.connect(func) # type: ignore
|
||||||
|
|
|
@ -181,7 +181,7 @@ class AnkiWebView(QWebEngineView): # type: ignore
|
||||||
def contextMenuEvent(self, evt) -> None:
|
def contextMenuEvent(self, evt) -> None:
|
||||||
m = QMenu(self)
|
m = QMenu(self)
|
||||||
a = m.addAction(_("Copy"))
|
a = m.addAction(_("Copy"))
|
||||||
a.triggered.connect(self.onCopy) # type: ignore
|
a.triggered.connect(self.onCopy) # type: ignore
|
||||||
gui_hooks.webview_will_show_context_menu(self, m)
|
gui_hooks.webview_will_show_context_menu(self, m)
|
||||||
m.popup(QCursor.pos())
|
m.popup(QCursor.pos())
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue