diff --git a/addons/fastwq/__init__.py b/addons/fastwq/__init__.py index 50e68fb..7c2df4a 100644 --- a/addons/fastwq/__init__.py +++ b/addons/fastwq/__init__.py @@ -17,6 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +from operator import itemgetter from aqt import mw from aqt.qt import * from anki.hooks import addHook, wrap @@ -24,9 +25,10 @@ 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 -from .context import config, APP_ICON +from .context import config, APP_ICON, Config from .lang import _ from .service import service_pool +from .utils import get_icon __all__ = [ @@ -38,6 +40,10 @@ __all__ = [ have_setup = False my_shortcut = '' +_wraps = [] +_OK_ICON = get_icon('ok.png') +_NULL_ICON = get_icon('null.png') + def browser_menu(): """ @@ -47,30 +53,74 @@ def browser_menu(): """ on browser setupMenus was called """ + # # main menu menu = QMenu("FastWQ", browser.form.menubar) browser.form.menubar.addMenu(menu) - # Query Selected - action = QAction(_('QUERY_SELECTED'), browser) - action.triggered.connect(lambda: query_from_browser(browser)) - action.setShortcut(QKeySequence(my_shortcut)) - menu.addAction(action) - # Options - action = QAction(_('OPTIONS'), browser) - def _show_options(): - model_id = -1 - for note_id in browser.selectedNotes(): - note = browser.mw.col.getNote(note_id) - model_id = note.model()['id'] - break - show_options(browser, model_id) - action.triggered.connect(_show_options) - menu.addAction(action) - # About - action = QAction(_('ABOUT'), browser) - action.triggered.connect(lambda: show_about_dialog(browser)) - menu.addAction(action) + def set_options_def(mid, i): + conf = config.get_maps(mid) + conf = {'list': [conf], 'def': 0} if isinstance(conf, list) else conf + if conf['def'] != i: + conf['def'] = i + data = dict() + data[mid] = conf + config.update(data) + # end set_options_def + + def init_fastwq_menu(*args, **kwargs): + menu.clear() + # Query Selected + action = QAction(_('QUERY_SELECTED'), browser) + action.triggered.connect(lambda: query_from_browser(browser)) + action.setShortcut(QKeySequence(my_shortcut)) + menu.addAction(action) + # Options + action = QAction(_('OPTIONS'), browser) + def _show_options(): + model_id = -1 + for note_id in browser.selectedNotes(): + note = browser.mw.col.getNote(note_id) + model_id = note.model()['id'] + break + show_options(browser, model_id) + action.triggered.connect(_show_options) + menu.addAction(action) + + # Default configs + menu.addSeparator() + b = False + for m in sorted(browser.mw.col.models.all(), key=itemgetter("name")): + conf = config.get_maps(m['id']) + conf = {'list': [conf], 'def': 0} if isinstance(conf, list) else conf + maps_list = conf['list'] + if len(maps_list) > 1: + submenu = menu.addMenu(m['name']) + for i, maps in enumerate(maps_list): + submenu.addAction( + _OK_ICON if i==conf['def'] else _NULL_ICON, + _('CONFIG_INDEX') % (i+1) if isinstance(maps, list) else maps['name'], + lambda mid=m['id'], i=i: set_options_def(mid, i) + ) + b = True + if b: + menu.addSeparator() + + # About + action = QAction(_('ABOUT'), browser) + action.triggered.connect(lambda: show_about_dialog(browser)) + menu.addAction(action) + + # end init_fastwq_menu + init_fastwq_menu() + # wrap config.update + if Config.update not in _wraps: + Config.update = wrap( + Config.update, + init_fastwq_menu, + "after" + ) + _wraps.append(Config.update) addHook('browser.setupMenus', on_setup_menus) diff --git a/addons21/fastwq/common.py b/addons21/fastwq/common.py index 50e68fb..7c2df4a 100644 --- a/addons21/fastwq/common.py +++ b/addons21/fastwq/common.py @@ -17,6 +17,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +from operator import itemgetter from aqt import mw from aqt.qt import * from anki.hooks import addHook, wrap @@ -24,9 +25,10 @@ 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 -from .context import config, APP_ICON +from .context import config, APP_ICON, Config from .lang import _ from .service import service_pool +from .utils import get_icon __all__ = [ @@ -38,6 +40,10 @@ __all__ = [ have_setup = False my_shortcut = '' +_wraps = [] +_OK_ICON = get_icon('ok.png') +_NULL_ICON = get_icon('null.png') + def browser_menu(): """ @@ -47,30 +53,74 @@ def browser_menu(): """ on browser setupMenus was called """ + # # main menu menu = QMenu("FastWQ", browser.form.menubar) browser.form.menubar.addMenu(menu) - # Query Selected - action = QAction(_('QUERY_SELECTED'), browser) - action.triggered.connect(lambda: query_from_browser(browser)) - action.setShortcut(QKeySequence(my_shortcut)) - menu.addAction(action) - # Options - action = QAction(_('OPTIONS'), browser) - def _show_options(): - model_id = -1 - for note_id in browser.selectedNotes(): - note = browser.mw.col.getNote(note_id) - model_id = note.model()['id'] - break - show_options(browser, model_id) - action.triggered.connect(_show_options) - menu.addAction(action) - # About - action = QAction(_('ABOUT'), browser) - action.triggered.connect(lambda: show_about_dialog(browser)) - menu.addAction(action) + def set_options_def(mid, i): + conf = config.get_maps(mid) + conf = {'list': [conf], 'def': 0} if isinstance(conf, list) else conf + if conf['def'] != i: + conf['def'] = i + data = dict() + data[mid] = conf + config.update(data) + # end set_options_def + + def init_fastwq_menu(*args, **kwargs): + menu.clear() + # Query Selected + action = QAction(_('QUERY_SELECTED'), browser) + action.triggered.connect(lambda: query_from_browser(browser)) + action.setShortcut(QKeySequence(my_shortcut)) + menu.addAction(action) + # Options + action = QAction(_('OPTIONS'), browser) + def _show_options(): + model_id = -1 + for note_id in browser.selectedNotes(): + note = browser.mw.col.getNote(note_id) + model_id = note.model()['id'] + break + show_options(browser, model_id) + action.triggered.connect(_show_options) + menu.addAction(action) + + # Default configs + menu.addSeparator() + b = False + for m in sorted(browser.mw.col.models.all(), key=itemgetter("name")): + conf = config.get_maps(m['id']) + conf = {'list': [conf], 'def': 0} if isinstance(conf, list) else conf + maps_list = conf['list'] + if len(maps_list) > 1: + submenu = menu.addMenu(m['name']) + for i, maps in enumerate(maps_list): + submenu.addAction( + _OK_ICON if i==conf['def'] else _NULL_ICON, + _('CONFIG_INDEX') % (i+1) if isinstance(maps, list) else maps['name'], + lambda mid=m['id'], i=i: set_options_def(mid, i) + ) + b = True + if b: + menu.addSeparator() + + # About + action = QAction(_('ABOUT'), browser) + action.triggered.connect(lambda: show_about_dialog(browser)) + menu.addAction(action) + + # end init_fastwq_menu + init_fastwq_menu() + # wrap config.update + if Config.update not in _wraps: + Config.update = wrap( + Config.update, + init_fastwq_menu, + "after" + ) + _wraps.append(Config.update) addHook('browser.setupMenus', on_setup_menus)