182 lines
6.1 KiB
Python
182 lines
6.1 KiB
Python
# -*- coding:utf-8 -*-
|
|
#
|
|
# Copyright (C) 2018 sthoo <sth201807@gmail.com>
|
|
#
|
|
# Support: Report an issue at https://github.com/sth2018/FastWordQuery/issues
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# any later version; http://www.gnu.org/copyleft/gpl.html.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import os
|
|
import sys
|
|
|
|
from aqt.forms.editaddon import Ui_Dialog
|
|
from aqt.qt import *
|
|
|
|
from ..context import config
|
|
from ..lang import _, _sl
|
|
from ..service import service_manager, service_pool
|
|
from ..utils import get_icon
|
|
from .base import WIDGET_SIZE, Dialog
|
|
|
|
# 2x3 compatible
|
|
if sys.hexversion >= 0x03000000:
|
|
unicode = str
|
|
|
|
__all__ = ['DictManageDialog']
|
|
|
|
|
|
class DictManageDialog(Dialog):
|
|
"""
|
|
Dictionary manager window. enabled or disabled dictionary, and setting params of dictionary.
|
|
"""
|
|
|
|
def __init__(self, parent, title=u'Dictionary Manager'):
|
|
super(DictManageDialog, self).__init__(parent, title)
|
|
self.main_layout = QVBoxLayout()
|
|
self.setLayout(self.main_layout)
|
|
self._options = list()
|
|
btnbox = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok, Qt.Orientation.Horizontal, self)
|
|
btnbox.accepted.connect(self.accept)
|
|
self.scroll = QWidget()
|
|
self.scroll.setMinimumSize(250, 1100)
|
|
# add dicts mapping
|
|
self.dicts_layout = QGridLayout(self.scroll)
|
|
self.scroll_area = QScrollArea()
|
|
self.scroll_area.setWidget(self.scroll)
|
|
self.main_layout.addWidget(self.scroll_area)
|
|
self.main_layout.addLayout(self.dicts_layout)
|
|
self.main_layout.addWidget(btnbox)
|
|
self.build()
|
|
|
|
def build(self):
|
|
""" """
|
|
# labels
|
|
f = QFont()
|
|
f.setBold(True)
|
|
labels = ['', '']
|
|
for i, s in enumerate(labels):
|
|
if s:
|
|
label = QLabel(_(s))
|
|
label.setFont(f)
|
|
label.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
|
|
self.dicts_layout.addWidget(label, 0, i)
|
|
# enabled all
|
|
self.enabled_all_check_btn = QCheckBox(_('DICTS_NAME'))
|
|
self.enabled_all_check_btn.setFont(f)
|
|
self.enabled_all_check_btn.setEnabled(True)
|
|
self.enabled_all_check_btn.setChecked(True)
|
|
# signal
|
|
self.enabled_all_check_btn.clicked.connect(self.enabled_all_changed)
|
|
# add widgets
|
|
self.dicts_layout.addWidget(self.enabled_all_check_btn, 0, 0)
|
|
# dict service list
|
|
confs = config.dicts
|
|
dicts = list()
|
|
services = service_manager.local_custom_services + service_manager.web_services
|
|
for clazz in services:
|
|
dicts.append({
|
|
'title':
|
|
clazz.__title__,
|
|
'unique':
|
|
clazz.__unique__,
|
|
'path':
|
|
clazz.__path__,
|
|
'enabled':
|
|
confs.get(clazz.__unique__, dict()).get('enabled', True)
|
|
})
|
|
# add dict
|
|
for i, d in enumerate(dicts):
|
|
self.add_dict_layout(i, **d)
|
|
# update
|
|
self.enabled_all_update()
|
|
self.adjustSize()
|
|
|
|
def add_dict_layout(self, i, **kwargs):
|
|
# args
|
|
title, unique, enabled, path = (
|
|
kwargs.get('title', u''),
|
|
kwargs.get('unique', u''),
|
|
kwargs.get('enabled', False),
|
|
kwargs.get('path', u''),
|
|
)
|
|
# button
|
|
check_btn = QCheckBox(title)
|
|
check_btn.setMinimumSize(WIDGET_SIZE.map_dict_width * 2, 0)
|
|
check_btn.setEnabled(True)
|
|
check_btn.setChecked(enabled)
|
|
edit_btn = QToolButton(self)
|
|
edit_btn.setText(_('EDIT'))
|
|
# signal
|
|
check_btn.stateChanged.connect(self.enabled_all_update)
|
|
edit_btn.clicked.connect(lambda: self.on_edit(path))
|
|
# add
|
|
self.dicts_layout.addWidget(check_btn, i + 1, 0)
|
|
self.dicts_layout.addWidget(edit_btn, i + 1, 1)
|
|
self._options.append({
|
|
'unique': unique,
|
|
'check_btn': check_btn,
|
|
'edit_btn': edit_btn,
|
|
})
|
|
|
|
def enabled_all_update(self):
|
|
b = True
|
|
for row in self._options:
|
|
if not row['check_btn'].isChecked():
|
|
b = False
|
|
break
|
|
self.enabled_all_check_btn.setChecked(b)
|
|
|
|
def enabled_all_changed(self):
|
|
b = self.enabled_all_check_btn.isChecked()
|
|
for row in self._options:
|
|
row['check_btn'].setChecked(b)
|
|
|
|
def on_edit(self, path):
|
|
"""edit dictionary file"""
|
|
d = QDialog(self)
|
|
frm = Ui_Dialog()
|
|
frm.setupUi(d)
|
|
d.setWindowTitle(os.path.basename(path))
|
|
# 2x3 compatible
|
|
if sys.hexversion >= 0x03000000:
|
|
frm.text.setPlainText(open(path, 'r', encoding="utf-8").read())
|
|
else:
|
|
frm.text.setPlainText(unicode(open(path).read(), "utf8"))
|
|
d.accepted.connect(lambda: self.on_accept_edit(path, frm))
|
|
d.exec()
|
|
|
|
def on_accept_edit(self, path, frm):
|
|
"""save dictionary file"""
|
|
# 2x3 compatible
|
|
if sys.hexversion >= 0x03000000:
|
|
open(path, "w", encoding='utf-8').write(frm.text.toPlainText())
|
|
else:
|
|
open(path, "w").write(frm.text.toPlainText().encode("utf8"))
|
|
|
|
def accept(self):
|
|
"""ok button clicked"""
|
|
self.save()
|
|
super(DictManageDialog, self).accept()
|
|
|
|
def save(self):
|
|
"""save config to file"""
|
|
data = dict()
|
|
dicts = {}
|
|
for row in self._options:
|
|
dicts[row['unique']] = {
|
|
'enabled': row['check_btn'].isChecked(),
|
|
}
|
|
data['dicts'] = dicts
|
|
config.update(data)
|