This commit is contained in:
St.Huang 2018-08-26 22:48:24 +08:00
parent 92040c4531
commit d03b48f3f9
12 changed files with 118 additions and 60 deletions

View File

@ -38,6 +38,7 @@ def start_here():
fastwq.have_setup = True fastwq.have_setup = True
fastwq.config_menu() fastwq.config_menu()
fastwq.browser_menu() fastwq.browser_menu()
fastwq.context_menu()
fastwq.customize_addcards() fastwq.customize_addcards()
if fastwq.config.auto_update: if fastwq.config.auto_update:
fastwq.check_updates(True) fastwq.check_updates(True)

View File

@ -23,15 +23,14 @@ from anki.hooks import addHook, wrap
from aqt.addcards import AddCards from aqt.addcards import AddCards
from aqt.utils import showInfo, shortcut, downArrow from aqt.utils import showInfo, shortcut, downArrow
from .gui import show_options, show_about_dialog, check_updates from .gui import show_options, show_about_dialog, check_updates
from .query import query_from_browser, query_from_editor_all_fields from .query import query_from_browser, query_from_editor_fields
from .context import config, APP_ICON from .context import config, APP_ICON
from .lang import _ from .lang import _
__all__ = [ __all__ = [
'add_query_button', 'browser_menu', 'browser_menu', 'customize_addcards',
'customize_addcards', 'config_menu', 'config_menu', 'check_updates', 'context_menu'
'check_updates'
] ]
@ -51,12 +50,12 @@ def browser_menu():
menu = QMenu("FastWQ", browser.form.menubar) menu = QMenu("FastWQ", browser.form.menubar)
browser.form.menubar.addMenu(menu) browser.form.menubar.addMenu(menu)
# Query Selected # Query Selected
action = QAction("Query Selected", browser) action = QAction(_('QUERY_SELECTED'), browser)
action.triggered.connect(lambda: query_from_browser(browser)) action.triggered.connect(lambda: query_from_browser(browser))
action.setShortcut(QKeySequence(my_shortcut)) action.setShortcut(QKeySequence(my_shortcut))
menu.addAction(action) menu.addAction(action)
# Options # Options
action = QAction("Options", browser) action = QAction(_('OPTIONS'), browser)
def _show_options(): def _show_options():
model_id = -1 model_id = -1
for note_id in browser.selectedNotes(): for note_id in browser.selectedNotes():
@ -67,7 +66,7 @@ def browser_menu():
action.triggered.connect(_show_options) action.triggered.connect(_show_options)
menu.addAction(action) menu.addAction(action)
# About # About
action = QAction("About", browser) action = QAction(_('ABOUT'), browser)
action.triggered.connect(lambda: show_about_dialog(browser)) action.triggered.connect(lambda: show_about_dialog(browser))
menu.addAction(action) menu.addAction(action)
@ -85,7 +84,7 @@ def customize_addcards():
bb = self.form.buttonBox bb = self.form.buttonBox
ar = QDialogButtonBox.ActionRole ar = QDialogButtonBox.ActionRole
# button # button
fastwqBtn = QPushButton(_("Query") + u" " + downArrow()) fastwqBtn = QPushButton(_("QUERY") + u" " + downArrow())
fastwqBtn.setShortcut(QKeySequence(my_shortcut)) fastwqBtn.setShortcut(QKeySequence(my_shortcut))
fastwqBtn.setToolTip( fastwqBtn.setToolTip(
_(u"Shortcut: %s") % shortcut(my_shortcut) _(u"Shortcut: %s") % shortcut(my_shortcut)
@ -96,11 +95,11 @@ def customize_addcards():
if isinstance(e, QMouseEvent): if isinstance(e, QMouseEvent):
if e.buttons() & Qt.LeftButton: if e.buttons() & Qt.LeftButton:
menu = QMenu(self) menu = QMenu(self)
menu.addAction(_("Query"), lambda: query_from_editor_all_fields(self.editor, False), QKeySequence(my_shortcut)) menu.addAction(_("QUERY"), lambda: query_from_editor_fields(self.editor), QKeySequence(my_shortcut))
menu.addAction(_("Options"), lambda: show_options(self, self.editor.note.model()['id'])) menu.addAction(_("OPTIONS"), lambda: show_options(self, self.editor.note.model()['id']))
menu.exec_(fastwqBtn.mapToGlobal(QPoint(0, fastwqBtn.height()))) menu.exec_(fastwqBtn.mapToGlobal(QPoint(0, fastwqBtn.height())))
else: else:
query_from_editor_all_fields(self.editor, False) query_from_editor_fields(self.editor)
fastwqBtn.mousePressEvent = onQuery fastwqBtn.mousePressEvent = onQuery
fastwqBtn.clicked.connect(onQuery) fastwqBtn.clicked.connect(onQuery)
@ -119,3 +118,22 @@ def config_menu():
action = QAction(APP_ICON, "FastWQ...", mw) action = QAction(APP_ICON, "FastWQ...", mw)
action.triggered.connect(lambda: show_options()) action.triggered.connect(lambda: show_options())
mw.form.menuTools.addAction(action) mw.form.menuTools.addAction(action)
def context_menu():
'''mouse right click menu'''
def on_setup_menus(web_view, menu):
"""
add context menu to webview
"""
submenu = menu.addMenu('FastWQ')
submenu.addAction(_('ALL_FIELDS'), lambda: query_from_editor_fields(web_view.editor), QKeySequence(my_shortcut))
submenu.addAction(_('CURRENT_FIELDS'),
lambda: query_from_editor_fields(
web_view.editor,
fields=[web_view.editor.currentField]
)
)
submenu.addAction(_("OPTIONS"), lambda: show_options(web_view, web_view.editor.note.model()['id']))
addHook('EditorWebView.contextMenuEvent', on_setup_menus)

View File

@ -72,6 +72,11 @@ _arr = [
['SELECT_ALL', u'全选', u'All'], ['SELECT_ALL', u'全选', u'All'],
['DICTS_NAME', u'字典名称', u'Dictionary Name'], ['DICTS_NAME', u'字典名称', u'Dictionary Name'],
['EDIT', u'编辑', u'Edit'], ['EDIT', u'编辑', u'Edit'],
['QUERY', u'查询', u'Query'],
['QUERY_SELECTED', u'查询选中项', u'Query Selected'],
['ALL_FIELDS', u'所有字段', u'All Fields'],
['CURRENT_FIELDS', u'当前字段', u'Current Fields'],
['OPTIONS', u'选项', u'Options'],
['BRE_PRON', u'英式发音', u'British Pronunciation'], ['BRE_PRON', u'英式发音', u'British Pronunciation'],
['AME_PRON', u'美式发音', u'American Pronunciation'], ['AME_PRON', u'美式发音', u'American Pronunciation'],

View File

@ -37,7 +37,7 @@ from ..service.base import LocalService
from ..utils import Empty, MapDict, Queue, wrap_css from ..utils import Empty, MapDict, Queue, wrap_css
__all__ = ['query_from_browser', 'query_from_editor_all_fields'] __all__ = ['query_from_browser', 'query_from_editor_fields']
def query_from_browser(browser): def query_from_browser(browser):
@ -52,13 +52,13 @@ def query_from_browser(browser):
for note_id in browser.selectedNotes()] for note_id in browser.selectedNotes()]
if len(notes) == 1: if len(notes) == 1:
query_from_editor_all_fields(browser.editor) query_from_editor_fields(browser.editor)
else: else:
query_all(notes) query_all(notes)
# browser.model.reset() # browser.model.reset()
def query_from_editor_all_fields(editor, flush=True): def query_from_editor_fields(editor, fields=None):
""" """
Query word fileds from Editor Query word fileds from Editor
""" """
@ -67,6 +67,7 @@ def query_from_editor_all_fields(editor, flush=True):
return return
word_ord, word, maps = inspect_note(editor.note) word_ord, word, maps = inspect_note(editor.note)
flush = not editor.addMode
nomaps = True nomaps = True
for each in maps: for each in maps:
dict_unique = each.get('dict_unique', '').strip() dict_unique = each.get('dict_unique', '').strip()
@ -80,16 +81,17 @@ def query_from_editor_all_fields(editor, flush=True):
show_options( show_options(
editor.parentWindow, editor.parentWindow,
editor.note.model()['id'], editor.note.model()['id'],
query_from_editor_all_fields, query_from_editor_fields,
editor editor,
fields
) )
else: else:
query_all([editor.note], flush) query_all([editor.note], flush, fields)
editor.setNote(editor.note, focus=True) editor.setNote(editor.note, focus=True)
editor.saveNow() editor.saveNow()
def query_all(notes, flush=True): def query_all(notes, flush=True, fields=None):
""" """
Query maps word fileds Query maps word fileds
""" """
@ -101,6 +103,7 @@ def query_all(notes, flush=True):
#work_manager.reset() #work_manager.reset()
#progress.start(max=len(notes), min=0, immediate=True) #progress.start(max=len(notes), min=0, immediate=True)
work_manager.flush = flush work_manager.flush = flush
work_manager.query_fields = fields
queue = work_manager.queue queue = work_manager.queue
for note in notes: for note in notes:

View File

@ -35,7 +35,7 @@ from ..utils import wrap_css
__all__ = [ __all__ = [
'InvalidWordException', 'update_note_fields', 'InvalidWordException', 'update_note_fields',
'update_note_field', 'promot_choose_css', 'add_to_tmpl', 'update_note_field', 'promot_choose_css', 'add_to_tmpl',
'query_all_flds', 'inspect_note' 'query_flds', 'inspect_note'
] ]
@ -178,9 +178,9 @@ def add_to_tmpl(note, **kwargs):
note.model()['tmpls'][0]['afmt'] = afmt note.model()['tmpls'][0]['afmt'] = afmt
def query_all_flds(note): def query_flds(note, fileds=None):
""" """
Query all fields of single note Query fields of single note
""" """
word_ord, word, maps = inspect_note(note) word_ord, word, maps = inspect_note(note)
@ -212,6 +212,7 @@ def query_all_flds(note):
dict_fld_ord = each.get('dict_fld_ord', -1) dict_fld_ord = each.get('dict_fld_ord', -1)
fld_ord = each.get('fld_ord', -1) fld_ord = each.get('fld_ord', -1)
if dict_unique and dict_fld_ord != -1 and fld_ord != -1: if dict_unique and dict_fld_ord != -1 and fld_ord != -1:
if fileds is None or fld_ord in fileds:
s = services.get(dict_unique, None) s = services.get(dict_unique, None)
if s is None: if s is None:
s = service_pool.get(dict_unique) s = service_pool.get(dict_unique)

View File

@ -27,7 +27,7 @@ from ..lang import _
from ..gui import ProgressWindow from ..gui import ProgressWindow
from ..utils import Empty, MapDict, Queue from ..utils import Empty, MapDict, Queue
from .common import InvalidWordException, query_all_flds, update_note_fields from .common import InvalidWordException, query_flds, update_note_fields
__all__ = ['QueryWorkerManager'] __all__ = ['QueryWorkerManager']
@ -59,7 +59,7 @@ class QueryThread(QtCore.QThread):
continue continue
try: try:
results, success_num, missed_css = query_all_flds(note) results, success_num, missed_css = query_flds(note, self.manager.query_fields)
if not self.exit and self.manager: if not self.exit and self.manager:
if self.manager.update(note, results, success_num, missed_css): if self.manager.update(note, results, success_num, missed_css):
self.note_flush.emit(note) self.note_flush.emit(note)
@ -92,6 +92,7 @@ class QueryWorkerManager(object):
self.skips = 0 self.skips = 0
self.missed_css = list() self.missed_css = list()
self.flush = True self.flush = True
self.query_fields = None
def get_worker(self): def get_worker(self):
worker = QueryThread(self) worker = QueryThread(self)

View File

@ -34,6 +34,7 @@ def start_here():
fastwq.have_setup = True fastwq.have_setup = True
fastwq.config_menu() fastwq.config_menu()
fastwq.browser_menu() fastwq.browser_menu()
fastwq.context_menu()
fastwq.customize_addcards() fastwq.customize_addcards()
if fastwq.config.auto_update: if fastwq.config.auto_update:
fastwq.check_updates(True) fastwq.check_updates(True)

View File

@ -23,15 +23,14 @@ from anki.hooks import addHook, wrap
from aqt.addcards import AddCards from aqt.addcards import AddCards
from aqt.utils import showInfo, shortcut, downArrow from aqt.utils import showInfo, shortcut, downArrow
from .gui import show_options, show_about_dialog, check_updates from .gui import show_options, show_about_dialog, check_updates
from .query import query_from_browser, query_from_editor_all_fields from .query import query_from_browser, query_from_editor_fields
from .context import config, APP_ICON from .context import config, APP_ICON
from .lang import _ from .lang import _
__all__ = [ __all__ = [
'add_query_button', 'browser_menu', 'browser_menu', 'customize_addcards',
'customize_addcards', 'config_menu', 'config_menu', 'check_updates', 'context_menu'
'check_updates'
] ]
@ -51,12 +50,12 @@ def browser_menu():
menu = QMenu("FastWQ", browser.form.menubar) menu = QMenu("FastWQ", browser.form.menubar)
browser.form.menubar.addMenu(menu) browser.form.menubar.addMenu(menu)
# Query Selected # Query Selected
action = QAction("Query Selected", browser) action = QAction(_('QUERY_SELECTED'), browser)
action.triggered.connect(lambda: query_from_browser(browser)) action.triggered.connect(lambda: query_from_browser(browser))
action.setShortcut(QKeySequence(my_shortcut)) action.setShortcut(QKeySequence(my_shortcut))
menu.addAction(action) menu.addAction(action)
# Options # Options
action = QAction("Options", browser) action = QAction(_('OPTIONS'), browser)
def _show_options(): def _show_options():
model_id = -1 model_id = -1
for note_id in browser.selectedNotes(): for note_id in browser.selectedNotes():
@ -67,7 +66,7 @@ def browser_menu():
action.triggered.connect(_show_options) action.triggered.connect(_show_options)
menu.addAction(action) menu.addAction(action)
# About # About
action = QAction("About", browser) action = QAction(_('ABOUT'), browser)
action.triggered.connect(lambda: show_about_dialog(browser)) action.triggered.connect(lambda: show_about_dialog(browser))
menu.addAction(action) menu.addAction(action)
@ -85,7 +84,7 @@ def customize_addcards():
bb = self.form.buttonBox bb = self.form.buttonBox
ar = QDialogButtonBox.ActionRole ar = QDialogButtonBox.ActionRole
# button # button
fastwqBtn = QPushButton(_("Query") + u" " + downArrow()) fastwqBtn = QPushButton(_("QUERY") + u" " + downArrow())
fastwqBtn.setShortcut(QKeySequence(my_shortcut)) fastwqBtn.setShortcut(QKeySequence(my_shortcut))
fastwqBtn.setToolTip( fastwqBtn.setToolTip(
_(u"Shortcut: %s") % shortcut(my_shortcut) _(u"Shortcut: %s") % shortcut(my_shortcut)
@ -96,11 +95,11 @@ def customize_addcards():
if isinstance(e, QMouseEvent): if isinstance(e, QMouseEvent):
if e.buttons() & Qt.LeftButton: if e.buttons() & Qt.LeftButton:
menu = QMenu(self) menu = QMenu(self)
menu.addAction(_("Query"), lambda: query_from_editor_all_fields(self.editor, False), QKeySequence(my_shortcut)) menu.addAction(_("QUERY"), lambda: query_from_editor_fields(self.editor), QKeySequence(my_shortcut))
menu.addAction(_("Options"), lambda: show_options(self, self.editor.note.model()['id'])) menu.addAction(_("OPTIONS"), lambda: show_options(self, self.editor.note.model()['id']))
menu.exec_(fastwqBtn.mapToGlobal(QPoint(0, fastwqBtn.height()))) menu.exec_(fastwqBtn.mapToGlobal(QPoint(0, fastwqBtn.height())))
else: else:
query_from_editor_all_fields(self.editor, False) query_from_editor_fields(self.editor)
fastwqBtn.mousePressEvent = onQuery fastwqBtn.mousePressEvent = onQuery
fastwqBtn.clicked.connect(onQuery) fastwqBtn.clicked.connect(onQuery)
@ -119,3 +118,22 @@ def config_menu():
action = QAction(APP_ICON, "FastWQ...", mw) action = QAction(APP_ICON, "FastWQ...", mw)
action.triggered.connect(lambda: show_options()) action.triggered.connect(lambda: show_options())
mw.form.menuTools.addAction(action) mw.form.menuTools.addAction(action)
def context_menu():
'''mouse right click menu'''
def on_setup_menus(web_view, menu):
"""
add context menu to webview
"""
submenu = menu.addMenu('FastWQ')
submenu.addAction(_('ALL_FIELDS'), lambda: query_from_editor_fields(web_view.editor), QKeySequence(my_shortcut))
submenu.addAction(_('CURRENT_FIELDS'),
lambda: query_from_editor_fields(
web_view.editor,
fields=[web_view.editor.currentField]
)
)
submenu.addAction(_("OPTIONS"), lambda: show_options(web_view, web_view.editor.note.model()['id']))
addHook('EditorWebView.contextMenuEvent', on_setup_menus)

View File

@ -72,6 +72,11 @@ _arr = [
['SELECT_ALL', u'全选', u'All'], ['SELECT_ALL', u'全选', u'All'],
['DICTS_NAME', u'字典名称', u'Dictionary Name'], ['DICTS_NAME', u'字典名称', u'Dictionary Name'],
['EDIT', u'编辑', u'Edit'], ['EDIT', u'编辑', u'Edit'],
['QUERY', u'查询', u'Query'],
['QUERY_SELECTED', u'查询选中项', u'Query Selected'],
['ALL_FIELDS', u'所有字段', u'All Fields'],
['CURRENT_FIELDS', u'当前字段', u'Current Fields'],
['OPTIONS', u'选项', u'Options'],
['BRE_PRON', u'英式发音', u'British Pronunciation'], ['BRE_PRON', u'英式发音', u'British Pronunciation'],
['AME_PRON', u'美式发音', u'American Pronunciation'], ['AME_PRON', u'美式发音', u'American Pronunciation'],

View File

@ -37,7 +37,7 @@ from ..service.base import LocalService
from ..utils import Empty, MapDict, Queue, wrap_css from ..utils import Empty, MapDict, Queue, wrap_css
__all__ = ['query_from_browser', 'query_from_editor_all_fields'] __all__ = ['query_from_browser', 'query_from_editor_fields']
def query_from_browser(browser): def query_from_browser(browser):
@ -52,13 +52,13 @@ def query_from_browser(browser):
for note_id in browser.selectedNotes()] for note_id in browser.selectedNotes()]
if len(notes) == 1: if len(notes) == 1:
query_from_editor_all_fields(browser.editor) query_from_editor_fields(browser.editor)
else: else:
query_all(notes) query_all(notes)
# browser.model.reset() # browser.model.reset()
def query_from_editor_all_fields(editor, flush=True): def query_from_editor_fields(editor, fields=None):
""" """
Query word fileds from Editor Query word fileds from Editor
""" """
@ -67,6 +67,7 @@ def query_from_editor_all_fields(editor, flush=True):
return return
word_ord, word, maps = inspect_note(editor.note) word_ord, word, maps = inspect_note(editor.note)
flush = not editor.addMode
nomaps = True nomaps = True
for each in maps: for each in maps:
dict_unique = each.get('dict_unique', '').strip() dict_unique = each.get('dict_unique', '').strip()
@ -80,17 +81,18 @@ def query_from_editor_all_fields(editor, flush=True):
show_options( show_options(
editor.parentWindow, editor.parentWindow,
editor.note.model()['id'], editor.note.model()['id'],
query_from_editor_all_fields, query_from_editor_fields,
editor editor,
fields
) )
else: else:
editor.setNote(editor.note) editor.setNote(editor.note)
query_all([editor.note], flush) query_all([editor.note], flush, fields)
editor.setNote(editor.note, focusTo=0) editor.setNote(editor.note, focusTo=0)
editor.saveNow(lambda:None) editor.saveNow(lambda:None)
def query_all(notes, flush=True): def query_all(notes, flush=True, fields=None):
""" """
Query maps word fileds Query maps word fileds
""" """
@ -102,6 +104,7 @@ def query_all(notes, flush=True):
#work_manager.reset() #work_manager.reset()
#progress.start(max=len(notes), min=0, immediate=True) #progress.start(max=len(notes), min=0, immediate=True)
work_manager.flush = flush work_manager.flush = flush
work_manager.query_fields = fields
queue = work_manager.queue queue = work_manager.queue
for note in notes: for note in notes:

View File

@ -34,7 +34,7 @@ from ..utils import wrap_css
__all__ = [ __all__ = [
'InvalidWordException', 'update_note_fields', 'InvalidWordException', 'update_note_fields',
'update_note_field', 'promot_choose_css', 'add_to_tmpl', 'update_note_field', 'promot_choose_css', 'add_to_tmpl',
'query_all_flds', 'inspect_note' 'query_flds', 'inspect_note'
] ]
@ -178,9 +178,9 @@ def add_to_tmpl(note, **kwargs):
note.model()['tmpls'][0]['afmt'] = afmt note.model()['tmpls'][0]['afmt'] = afmt
def query_all_flds(note): def query_flds(note, fileds=None):
""" """
Query all fields of single note Query fields of single note
""" """
word_ord, word, maps = inspect_note(note) word_ord, word, maps = inspect_note(note)
@ -212,6 +212,7 @@ def query_all_flds(note):
dict_fld_ord = each.get('dict_fld_ord', -1) dict_fld_ord = each.get('dict_fld_ord', -1)
fld_ord = each.get('fld_ord', -1) fld_ord = each.get('fld_ord', -1)
if dict_unique and dict_fld_ord != -1 and fld_ord != -1: if dict_unique and dict_fld_ord != -1 and fld_ord != -1:
if fileds is None or fld_ord in fileds:
s = services.get(dict_unique, None) s = services.get(dict_unique, None)
if s is None: if s is None:
s = service_pool.get(dict_unique) s = service_pool.get(dict_unique)

View File

@ -28,7 +28,7 @@ from ..lang import _
from ..gui import ProgressWindow from ..gui import ProgressWindow
from ..utils import Empty, MapDict, Queue from ..utils import Empty, MapDict, Queue
from .common import InvalidWordException, query_all_flds, update_note_fields from .common import InvalidWordException, query_flds, update_note_fields
__all__ = ['QueryWorkerManager'] __all__ = ['QueryWorkerManager']
@ -60,7 +60,7 @@ class QueryThread(QThread):
continue continue
try: try:
results, success_num, missed_css = query_all_flds(note) results, success_num, missed_css = query_flds(note, self.manager.query_fields)
if not self.exit and self.manager: if not self.exit and self.manager:
if self.manager.update(note, results, success_num, missed_css): if self.manager.update(note, results, success_num, missed_css):
self.note_flush.emit(note) self.note_flush.emit(note)
@ -93,6 +93,7 @@ class QueryWorkerManager(object):
self.skips = 0 self.skips = 0
self.missed_css = list() self.missed_css = list()
self.flush = True self.flush = True
self.query_fields = None
def get_worker(self): def get_worker(self):
worker = QueryThread(self) worker = QueryThread(self)