ScreenTranslator/src/settingseditor.cpp

201 lines
6.1 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);
}
// general
// QMap<QNetworkProxy::ProxyType, QString> proxyTypeNames;
// proxyTypeNames.insert(QNetworkProxy::NoProxy, tr("No"));
// proxyTypeNames.insert(QNetworkProxy::DefaultProxy, tr("System"));
// proxyTypeNames.insert(QNetworkProxy::Socks5Proxy, tr("SOCKS 5"));
// proxyTypeNames.insert(QNetworkProxy::HttpProxy, tr("HTTP"));
// QList<int> proxyOrder = proxyTypeOrder();
// for (int type : proxyOrder) {
// ui->proxyTypeCombo->addItem(
// proxyTypeNames.value(QNetworkProxy::ProxyType(type)));
// }
// QRegExp urlRegexp(
// R"(^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$)");
// ui->proxyHostEdit->setValidator(
// new QRegExpValidator(urlRegexp, ui->proxyHostEdit));
// ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
// 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();
settings.tessdataPath = ui->tessdataEdit->text();
settings.doTranslation = ui->doTranslationCheck->isChecked();
settings.ignoreSslErrors = ui->ignoreSslCheck->isChecked();
settings.debugMode = ui->translatorDebugCheck->isChecked();
settings.translationTimeout =
std::chrono::seconds(ui->translateTimeoutSpin->value());
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);
ui->tessdataEdit->setText(settings.tessdataPath);
updateTesseractLanguages();
ui->doTranslationCheck->setChecked(settings.doTranslation);
ui->ignoreSslCheck->setChecked(settings.ignoreSslErrors);
ui->translatorDebugCheck->setChecked(settings.debugMode);
ui->translateTimeoutSpin->setValue(settings.translationTimeout.count());
translatorsDir_ = settings.translatorsDir;
updateTranslators(settings.translators);
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-02-21 00:45:53 +07:00
void SettingsEditor::updateTranslators(const QStringList &enabled)
{
ui->translatorList->clear();
2013-11-24 19:43:37 +07:00
2020-02-21 00:45:53 +07:00
QDir dir(translatorsDir_);
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);
}