fix cases where we used the wrong type sig to connect to gui hook

This commit is contained in:
Damien Elmes 2020-01-16 07:53:12 +10:00
parent 8310cb7a0e
commit 886536d78f
6 changed files with 41 additions and 25 deletions

View file

@ -18,6 +18,8 @@ from anki.cards import Card
from anki.collection import _Collection
from anki.consts import *
from anki.lang import _, ngettext
from anki.notes import Note
from anki.types import NoteType
from anki.utils import (
bodyClass,
fmtTimeSpan,
@ -656,7 +658,7 @@ class Browser(QMainWindow):
m.addSeparator()
for act in self.form.menu_Notes.actions():
m.addAction(act)
gui_hooks.browser_will_show_context_menu(self)
gui_hooks.browser_will_show_context_menu(self, m)
qtMenuShortcutWorkaround(m)
m.exec_(QCursor.pos())
@ -844,13 +846,13 @@ class Browser(QMainWindow):
else:
self.editor.setNote(self.card.note(reload=True), focusTo=self.focusTo)
self.focusTo = None
self.editor.card = self.card # type: ignore
self.editor.card = self.card # type: ignore
self.singleCard = True
self._updateFlagsMenu()
gui_hooks.browser_did_change_row(self)
self._renderPreview(True)
def refreshCurrentCard(self, note):
def refreshCurrentCard(self, note: Note) -> None:
self.model.refreshNote(note)
self._renderPreview(False)
@ -1533,7 +1535,7 @@ where id in %s"""
######################################################################
_previewTimer = None
_lastPreviewRender: Union[int,float] = 0
_lastPreviewRender: Union[int, float] = 0
_lastPreviewState = None
_previewCardChanged = False
@ -2019,7 +2021,7 @@ update cards set usn=?, mod=?, did=? where id in """
self.form.tableView.selectAll()
sm.select(items, QItemSelectionModel.Deselect | QItemSelectionModel.Rows)
# Edit: undo
# Hooks
######################################################################
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.editor_did_fire_typing_timer.append(self.refreshCurrentCard)
gui_hooks.editor_did_load_note.append(self.onLoadNote)
gui_hooks.editor_did_unfocus_field.append(self.refreshCurrentCard)
hooks.tag_added.append(self.maybeRefreshSidebar)
hooks.note_type_added.append(self.maybeRefreshSidebar)
hooks.deck_added.append(self.maybeRefreshSidebar)
gui_hooks.editor_did_unfocus_field.append(self.on_unfocus_field)
hooks.tag_added.append(self.on_item_added)
hooks.note_type_added.append(self.on_item_added)
hooks.deck_added.append(self.on_item_added)
def teardownHooks(self) -> None:
gui_hooks.undo_state_did_change.remove(self.onUndoState)
gui_hooks.state_did_reset.remove(self.onReset)
gui_hooks.editor_did_fire_typing_timer.remove(self.refreshCurrentCard)
gui_hooks.editor_did_load_note.remove(self.onLoadNote)
gui_hooks.editor_did_unfocus_field.remove(self.refreshCurrentCard)
hooks.tag_added.remove(self.maybeRefreshSidebar)
hooks.note_type_added.remove(self.maybeRefreshSidebar)
hooks.deck_added.remove(self.maybeRefreshSidebar)
gui_hooks.editor_did_unfocus_field.remove(self.on_unfocus_field)
hooks.tag_added.remove(self.on_item_added)
hooks.note_type_added.remove(self.on_item_added)
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):
self.form.actionUndo.setEnabled(on)
@ -2275,9 +2284,12 @@ class ChangeModel(QDialog):
self.setup()
restoreGeom(self, "changeModel")
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_()
def on_note_type_change(self, notetype: NoteType) -> None:
self.onReset()
def setup(self):
# maps
self.flayout = QHBoxLayout()
@ -2399,7 +2411,7 @@ class ChangeModel(QDialog):
def cleanup(self) -> None:
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()
saveGeom(self, "changeModel")

View file

@ -11,7 +11,7 @@ from aqt.utils import shortcut
class DeckChooser(QHBoxLayout):
def __init__(self, mw, widget: QWidget, label=True, start=None) -> None:
QHBoxLayout.__init__(self)
self.widget = widget # type: ignore
self.widget = widget # type: ignore
self.mw = mw
self.deck = mw.col
self.label = label
@ -19,7 +19,7 @@ class DeckChooser(QHBoxLayout):
self.setSpacing(8)
self.setupDecks()
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):
if self.label:
@ -64,7 +64,10 @@ class DeckChooser(QHBoxLayout):
self.widget.hide()
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):
if not self.mw.col.conf.get("addToCur", True):

View file

@ -160,7 +160,7 @@ class Editor:
fldsTitle=_("Customize Fields"),
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
self.web.stdHtml(
_html % (bgcol, bgcol, topbuts, _("Show Duplicates")),
@ -293,7 +293,7 @@ class Editor:
fn = self._addFocusCheck(fn)
else:
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 checkFocus():
@ -427,7 +427,7 @@ class Editor:
)
self.web.evalWithCallback(js, oncallback)
def fonts(self) -> List[Tuple[str,int,bool]]:
def fonts(self) -> List[Tuple[str, int, bool]]:
return [
(gui_hooks.editor_will_use_font_for_field(f["font"]), f["size"], f["rtl"])
for f in self.note.model()["flds"]

View file

@ -11,7 +11,7 @@ from aqt.utils import shortcut
class ModelChooser(QHBoxLayout):
def __init__(self, mw, widget, label=True) -> None:
QHBoxLayout.__init__(self)
self.widget = widget # type: ignore
self.widget = widget # type: ignore
self.mw = mw
self.deck = mw.col
self.label = label

View file

@ -7,6 +7,7 @@
import os
import sys
import traceback
from typing import Callable
from PyQt5.Qt import * # type: ignore
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.QtWebEngineWidgets import * # type: ignore
from PyQt5.QtWidgets import *
from typing import Callable
from anki.utils import isMac, isWin
@ -54,6 +54,7 @@ qtpoint = QT_VERSION & 0xFF
if qtmajor != 5 or qtminor < 9 or qtminor == 10:
raise Exception("Anki does not support your Qt version.")
def qconnect(signal: Callable, func: Callable) -> None:
"Helper to work around type checking not working with signal.connect(func)."
signal.connect(func) # type: ignore
signal.connect(func) # type: ignore

View file

@ -181,7 +181,7 @@ class AnkiWebView(QWebEngineView): # type: ignore
def contextMenuEvent(self, evt) -> None:
m = QMenu(self)
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)
m.popup(QCursor.pos())