ScreenTranslator/src/settingseditor.cpp

222 lines
7.0 KiB
C++
Raw Normal View History

2020-01-27 02:01:08 +07:00
#include "settingseditor.h"
2020-02-21 00:45:53 +07:00
#include "languagecodes.h"
2020-01-27 02:01:08 +07:00
#include "ui_settingseditor.h"
2020-02-21 00:45:53 +07:00
#include "widgetstate.h"
2013-11-23 13:48:34 +07:00
2020-02-21 00:45:53 +07:00
#include <QFileDialog>
2015-10-10 18:45:57 +07:00
#include <QNetworkProxy>
2020-02-21 00:45:53 +07:00
#include <QStringListModel>
SettingsEditor::SettingsEditor()
: ui(new Ui::SettingsEditor)
{
ui->setupUi(this);
{
auto model = new QStringListModel(this);
model->setStringList({tr("General"), tr("Recognition"), tr("Correction"),
tr("Translation"), tr("Representation"),
tr("Update")});
ui->pagesList->setModel(model);
auto selection = ui->pagesList->selectionModel();
connect(selection, &QItemSelectionModel::currentRowChanged, //
this, &SettingsEditor::updateCurrentPage);
}
2020-03-07 00:53:53 +07:00
{
QMap<ProxyType, QString> proxyTypes;
proxyTypes.insert(ProxyType::Disabled, tr("Disabled"));
proxyTypes.insert(ProxyType::System, tr("System"));
proxyTypes.insert(ProxyType::Socks5, tr("SOCKS 5"));
proxyTypes.insert(ProxyType::Http, tr("HTTP"));
ui->proxyTypeCombo->addItems(proxyTypes.values());
QRegExp urlRegexp(
R"(^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)");
ui->proxyHostEdit->setValidator(
new QRegExpValidator(urlRegexp, ui->proxyHostEdit));
ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
}
2020-02-21 00:45:53 +07:00
// recognition
connect(ui->tessdataButton, &QPushButton::clicked, //
this, &SettingsEditor::openTessdataDialog);
connect(ui->tessdataEdit, &QLineEdit::textChanged, //
this, &SettingsEditor::updateTesseractLanguages);
// connect(ui->recognizerFixTable, SIGNAL(itemChanged(QTableWidgetItem *)),
// SLOT(recognizerFixTableItemChanged(QTableWidgetItem *)));
// // ui->translateLangCombo->addItems(dictionary_.translateLanguagesUi());
// translation
updateTranslationLanguages();
// updates
ui->updateCombo->addItems(
{tr("Never"), tr("Daily"), tr("Weekly"), tr("Monthly")});
new WidgetState(this);
}
2013-11-24 19:43:37 +07:00
2020-02-21 00:45:53 +07:00
SettingsEditor::~SettingsEditor()
{
delete ui;
}
2015-10-10 18:45:57 +07:00
2020-02-21 00:45:53 +07:00
Settings SettingsEditor::settings() const
{
Settings settings;
settings.captureHotkey = ui->captureEdit->keySequence().toString();
settings.repeatCaptureHotkey =
ui->repeatCaptureEdit->keySequence().toString();
settings.showLastHotkey = ui->repeatEdit->keySequence().toString();
settings.clipboardHotkey = ui->clipboardEdit->keySequence().toString();
2020-03-07 00:53:53 +07:00
settings.proxyType = ProxyType(ui->proxyTypeCombo->currentIndex());
settings.proxyHostName = ui->proxyHostEdit->text();
settings.proxyPort = ui->proxyPortSpin->value();
settings.proxyUser = ui->proxyUserEdit->text();
settings.proxyPassword = ui->proxyPassEdit->text();
settings.proxySavePassword = ui->proxySaveCheck->isChecked();
LanguageCodes langs;
2020-02-21 00:45:53 +07:00
settings.tessdataPath = ui->tessdataEdit->text();
if (auto lang = langs.findByName(ui->tesseractLangCombo->currentText()))
settings.sourceLanguage = lang->id;
2020-02-21 00:45:53 +07:00
settings.doTranslation = ui->doTranslationCheck->isChecked();
settings.ignoreSslErrors = ui->ignoreSslCheck->isChecked();
settings.debugMode = ui->translatorDebugCheck->isChecked();
settings.translationTimeout =
std::chrono::seconds(ui->translateTimeoutSpin->value());
if (auto lang = langs.findByName(ui->translateLangCombo->currentText()))
settings.targetLanguage = lang->id;
2020-02-21 00:45:53 +07:00
settings.translators.clear();
for (auto i = 0, end = ui->translatorList->count(); i < end; ++i) {
auto item = ui->translatorList->item(i);
if (item->checkState() == Qt::Checked)
settings.translators.append(item->text());
}
settings.resultShowType =
ui->trayRadio->isChecked() ? ResultMode::Tooltip : ResultMode::Widget;
return settings;
2013-11-23 13:48:34 +07:00
}
2020-02-21 00:45:53 +07:00
void SettingsEditor::setSettings(const Settings &settings)
{
ui->captureEdit->setKeySequence(settings.captureHotkey);
ui->repeatCaptureEdit->setKeySequence(settings.repeatCaptureHotkey);
ui->repeatEdit->setKeySequence(settings.showLastHotkey);
ui->clipboardEdit->setKeySequence(settings.clipboardHotkey);
2020-03-07 00:53:53 +07:00
ui->proxyTypeCombo->setCurrentIndex(int(settings.proxyType));
ui->proxyHostEdit->setText(settings.proxyHostName);
ui->proxyPortSpin->setValue(settings.proxyPort);
ui->proxyUserEdit->setText(settings.proxyUser);
ui->proxyPassEdit->setText(settings.proxyPassword);
ui->proxySaveCheck->setChecked(settings.proxySavePassword);
LanguageCodes langs;
2020-02-21 00:45:53 +07:00
ui->tessdataEdit->setText(settings.tessdataPath);
if (auto lang = langs.findById(settings.sourceLanguage))
ui->tesseractLangCombo->setCurrentText(lang->name);
2020-02-21 00:45:53 +07:00
ui->doTranslationCheck->setChecked(settings.doTranslation);
ui->ignoreSslCheck->setChecked(settings.ignoreSslErrors);
ui->translatorDebugCheck->setChecked(settings.debugMode);
ui->translateTimeoutSpin->setValue(settings.translationTimeout.count());
2020-03-08 01:15:02 +07:00
updateTranslators(settings.translatorsDir, settings.translators);
if (auto lang = langs.findById(settings.targetLanguage))
ui->translateLangCombo->setCurrentText(lang->name);
2020-02-21 00:45:53 +07:00
ui->trayRadio->setChecked(settings.resultShowType == ResultMode::Tooltip);
ui->dialogRadio->setChecked(settings.resultShowType == ResultMode::Widget);
2013-11-23 13:48:34 +07:00
}
2013-11-24 19:43:37 +07:00
2020-02-21 00:45:53 +07:00
void SettingsEditor::updateCurrentPage()
{
ui->pagesView->setCurrentIndex(ui->pagesList->currentIndex().row());
2013-11-24 19:43:37 +07:00
}
2020-02-21 00:45:53 +07:00
void SettingsEditor::openTessdataDialog()
{
const auto path =
QFileDialog::getExistingDirectory(this, tr("Path to tessdata"));
2020-02-21 00:45:53 +07:00
if (path.isEmpty())
return;
2020-02-21 00:45:53 +07:00
ui->tessdataEdit->setText(path);
2013-11-24 19:43:37 +07:00
}
2020-02-21 00:45:53 +07:00
void SettingsEditor::updateTesseractLanguages()
{
ui->tesseractLangCombo->clear();
ui->correctLangCombo->clear();
QDir dir(ui->tessdataEdit->text());
if (!dir.exists())
2013-11-24 19:43:37 +07:00
return;
2020-02-21 00:45:53 +07:00
LanguageIds names;
LanguageCodes languages;
2020-02-21 00:45:53 +07:00
const auto files = dir.entryList({"*.traineddata"}, QDir::Files);
for (const auto &file : files) {
const auto lang = file.left(file.indexOf("."));
if (const auto bundle = languages.findByTesseract(lang))
names.append(bundle->name);
}
2020-02-21 00:45:53 +07:00
if (names.isEmpty())
return;
2013-11-24 19:43:37 +07:00
2020-02-21 00:45:53 +07:00
std::sort(names.begin(), names.end());
ui->tesseractLangCombo->addItems(names);
ui->correctLangCombo->addItems(names);
}
2020-02-21 00:45:53 +07:00
void SettingsEditor::updateCorrectionsTable()
{
2013-11-24 19:43:37 +07:00
}
2020-03-08 01:15:02 +07:00
void SettingsEditor::updateTranslators(const QString &path,
const QStringList &enabled)
2020-02-21 00:45:53 +07:00
{
ui->translatorList->clear();
2013-11-24 19:43:37 +07:00
2020-03-08 01:15:02 +07:00
QDir dir(path);
2020-02-21 00:45:53 +07:00
if (!dir.exists())
return;
2020-02-21 00:45:53 +07:00
auto files = dir.entryList({"*.js"}, QDir::Files);
std::sort(files.begin(), files.end());
ui->translatorList->addItems(files);
for (auto i = 0, end = ui->translatorList->count(); i < end; ++i) {
auto item = ui->translatorList->item(i);
item->setCheckState(enabled.contains(item->text()) ? Qt::Checked
: Qt::Unchecked);
}
2020-02-21 00:45:53 +07:00
}
void SettingsEditor::updateTranslationLanguages()
{
LanguageIds names;
LanguageCodes languages;
for (const auto &bundle : languages.all()) {
if (!bundle.second.iso639_1.isEmpty())
names.append(bundle.second.name);
}
2020-02-21 00:45:53 +07:00
ui->translateLangCombo->clear();
std::sort(names.begin(), names.end());
ui->translateLangCombo->addItems(names);
}