List all configured fields in the context menu.

This commit is contained in:
St.Huang 2018-09-11 08:05:25 +08:00
parent 1c1848b945
commit d9f1da83a6
2 changed files with 96 additions and 38 deletions

View File

@ -23,7 +23,7 @@ from anki.hooks import addHook, wrap
from aqt.addcards import AddCards
from aqt.utils import showInfo, shortcut, downArrow
from .gui import show_options, show_about_dialog, check_updates
from .query import query_from_browser, query_from_editor_fields, inspect_note
from .query import query_from_browser, query_from_editor_fields
from .context import config, APP_ICON
from .lang import _
from .service import service_pool
@ -127,30 +127,59 @@ def context_menu():
"""
add context menu to webview
"""
word, word_ord, maps = inspect_note(web_view.editor.note)
current_field = u''
if web_view.editor.currentField != word_ord:
each = maps[web_view.editor.currentField]
ignore = each.get('ignore', False)
if not ignore:
dict_unique = each.get('dict_unique', '').strip()
dict_fld_ord = each.get('dict_fld_ord', -1)
fld_ord = each.get('fld_ord', -1)
if dict_unique and dict_fld_ord != -1 and fld_ord != -1:
s = service_pool.get(dict_unique)
if s and s.support:
current_field = ' (' + s.title + ' -> ' + s.fields[dict_fld_ord] + ')'
service_pool.put(s)
current_model_id = web_view.editor.note.model()['id']
conf = config.get_maps(current_model_id)
maps_list = conf if isinstance(conf, list) else conf['list']
curr_flds = []
names = []
for i, maps in enumerate(maps_list):
maps = maps if isinstance(maps, list) else maps['fields']
for mord, m in enumerate(maps):
if m.get('word_checked', False):
word_ord = mord
break
if web_view.editor.currentField != word_ord:
each = maps[web_view.editor.currentField]
ignore = each.get('ignore', False)
if not ignore:
dict_unique = each.get('dict_unique', '').strip()
dict_fld_ord = each.get('dict_fld_ord', -1)
fld_ord = each.get('fld_ord', -1)
if dict_unique and dict_fld_ord != -1 and fld_ord != -1:
s = service_pool.get(dict_unique)
if s and s.support:
name = s.title + ' :-> ' + s.fields[dict_fld_ord]
if name not in names:
names.append(name)
curr_flds.append({
'name': name,
'def': i
})
service_pool.put(s)
submenu = menu.addMenu(_('QUERY'))
submenu.addAction(_('ALL_FIELDS'), lambda: query_from_editor_fields(web_view.editor), QKeySequence(my_shortcut))
if current_field:
submenu.addAction(_('CURRENT_FIELDS') + current_field,
lambda: query_from_editor_fields(
if len(curr_flds) > 0:
# quer hook method
def query_from_editor_hook(i):
conf = config.get_maps(current_model_id)
maps_list = {'list': [conf], 'def': i} if isinstance(conf, list) else conf
maps_list['def'] = i
data = dict()
data[current_model_id] = maps_list
config.update(data)
query_from_editor_fields(
web_view.editor,
fields=[web_view.editor.currentField]
)
)
# sub menu
#flds_menu = submenu.addMenu(_('CURRENT_FIELDS'))
submenu.addSeparator()
for c in curr_flds:
submenu.addAction(c['name'],
lambda i=c['def']: query_from_editor_hook(i)
)
submenu.addSeparator()
submenu.addAction(_("OPTIONS"), lambda: show_options(web_view, web_view.editor.note.model()['id']))
addHook('EditorWebView.contextMenuEvent', on_setup_menus)

View File

@ -23,7 +23,7 @@ from anki.hooks import addHook, wrap
from aqt.addcards import AddCards
from aqt.utils import showInfo, shortcut, downArrow
from .gui import show_options, show_about_dialog, check_updates
from .query import query_from_browser, query_from_editor_fields, inspect_note
from .query import query_from_browser, query_from_editor_fields
from .context import config, APP_ICON
from .lang import _
from .service import service_pool
@ -127,30 +127,59 @@ def context_menu():
"""
add context menu to webview
"""
word, word_ord, maps = inspect_note(web_view.editor.note)
current_field = u''
if web_view.editor.currentField != word_ord:
each = maps[web_view.editor.currentField]
ignore = each.get('ignore', False)
if not ignore:
dict_unique = each.get('dict_unique', '').strip()
dict_fld_ord = each.get('dict_fld_ord', -1)
fld_ord = each.get('fld_ord', -1)
if dict_unique and dict_fld_ord != -1 and fld_ord != -1:
s = service_pool.get(dict_unique)
if s and s.support:
current_field = ' (' + s.title + ' -> ' + s.fields[dict_fld_ord] + ')'
service_pool.put(s)
current_model_id = web_view.editor.note.model()['id']
conf = config.get_maps(current_model_id)
maps_list = conf if isinstance(conf, list) else conf['list']
curr_flds = []
names = []
for i, maps in enumerate(maps_list):
maps = maps if isinstance(maps, list) else maps['fields']
for mord, m in enumerate(maps):
if m.get('word_checked', False):
word_ord = mord
break
if web_view.editor.currentField != word_ord:
each = maps[web_view.editor.currentField]
ignore = each.get('ignore', False)
if not ignore:
dict_unique = each.get('dict_unique', '').strip()
dict_fld_ord = each.get('dict_fld_ord', -1)
fld_ord = each.get('fld_ord', -1)
if dict_unique and dict_fld_ord != -1 and fld_ord != -1:
s = service_pool.get(dict_unique)
if s and s.support:
name = s.title + ' :-> ' + s.fields[dict_fld_ord]
if name not in names:
names.append(name)
curr_flds.append({
'name': name,
'def': i
})
service_pool.put(s)
submenu = menu.addMenu(_('QUERY'))
submenu.addAction(_('ALL_FIELDS'), lambda: query_from_editor_fields(web_view.editor), QKeySequence(my_shortcut))
if current_field:
submenu.addAction(_('CURRENT_FIELDS') + current_field,
lambda: query_from_editor_fields(
if len(curr_flds) > 0:
# quer hook method
def query_from_editor_hook(i):
conf = config.get_maps(current_model_id)
maps_list = {'list': [conf], 'def': i} if isinstance(conf, list) else conf
maps_list['def'] = i
data = dict()
data[current_model_id] = maps_list
config.update(data)
query_from_editor_fields(
web_view.editor,
fields=[web_view.editor.currentField]
)
)
# sub menu
#flds_menu = submenu.addMenu(_('CURRENT_FIELDS'))
submenu.addSeparator()
for c in curr_flds:
submenu.addAction(c['name'],
lambda i=c['def']: query_from_editor_hook(i)
)
submenu.addSeparator()
submenu.addAction(_("OPTIONS"), lambda: show_options(web_view, web_view.editor.note.model()['id']))
addHook('EditorWebView.contextMenuEvent', on_setup_menus)