Move common model to separate class
This commit is contained in:
parent
87987f4a71
commit
258073c785
@ -34,6 +34,7 @@ HEADERS += \
|
|||||||
src/capture/captureareaeditor.h \
|
src/capture/captureareaeditor.h \
|
||||||
src/capture/captureareaselector.h \
|
src/capture/captureareaselector.h \
|
||||||
src/capture/capturer.h \
|
src/capture/capturer.h \
|
||||||
|
src/commonmodels.h \
|
||||||
src/correct/corrector.h \
|
src/correct/corrector.h \
|
||||||
src/languagecodes.h \
|
src/languagecodes.h \
|
||||||
src/manager.h \
|
src/manager.h \
|
||||||
@ -65,6 +66,7 @@ SOURCES += \
|
|||||||
src/capture/captureareaeditor.cpp \
|
src/capture/captureareaeditor.cpp \
|
||||||
src/capture/captureareaselector.cpp \
|
src/capture/captureareaselector.cpp \
|
||||||
src/capture/capturer.cpp \
|
src/capture/capturer.cpp \
|
||||||
|
src/commonmodels.cpp \
|
||||||
src/correct/corrector.cpp \
|
src/correct/corrector.cpp \
|
||||||
src/languagecodes.cpp \
|
src/languagecodes.cpp \
|
||||||
src/main.cpp \
|
src/main.cpp \
|
||||||
|
@ -1,27 +1,22 @@
|
|||||||
#include "captureareaeditor.h"
|
#include "captureareaeditor.h"
|
||||||
#include "capturearea.h"
|
#include "capturearea.h"
|
||||||
#include "captureareaselector.h"
|
#include "captureareaselector.h"
|
||||||
#include "debug.h"
|
#include "commonmodels.h"
|
||||||
#include "languagecodes.h"
|
#include "languagecodes.h"
|
||||||
#include "settings.h"
|
|
||||||
#include "tesseract.h"
|
|
||||||
#include "translator.h"
|
|
||||||
|
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QGridLayout>
|
#include <QGridLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
#include <QStringListModel>
|
|
||||||
|
|
||||||
CaptureAreaEditor::CaptureAreaEditor(CaptureAreaSelector &selector)
|
CaptureAreaEditor::CaptureAreaEditor(const CommonModels &models,
|
||||||
|
CaptureAreaSelector &selector)
|
||||||
: QWidget(&selector)
|
: QWidget(&selector)
|
||||||
, selector_(selector)
|
, selector_(selector)
|
||||||
, doTranslation_(new QCheckBox(tr("Translate:"), this))
|
, doTranslation_(new QCheckBox(tr("Translate:"), this))
|
||||||
, sourceLanguage_(new QComboBox(this))
|
, sourceLanguage_(new QComboBox(this))
|
||||||
, targetLanguage_(new QComboBox(this))
|
, targetLanguage_(new QComboBox(this))
|
||||||
, sourceLanguageModel_(std::make_unique<QStringListModel>())
|
|
||||||
, targetLanguageModel_(std::make_unique<QStringListModel>())
|
|
||||||
{
|
{
|
||||||
setCursor(Qt::CursorShape::ArrowCursor);
|
setCursor(Qt::CursorShape::ArrowCursor);
|
||||||
|
|
||||||
@ -36,8 +31,8 @@ CaptureAreaEditor::CaptureAreaEditor(CaptureAreaSelector &selector)
|
|||||||
layout->addWidget(doTranslation_, row, 0);
|
layout->addWidget(doTranslation_, row, 0);
|
||||||
layout->addWidget(targetLanguage_, row, 1);
|
layout->addWidget(targetLanguage_, row, 1);
|
||||||
|
|
||||||
sourceLanguage_->setModel(sourceLanguageModel_.get());
|
sourceLanguage_->setModel(models.sourceLanguageModel());
|
||||||
targetLanguage_->setModel(targetLanguageModel_.get());
|
targetLanguage_->setModel(models.targetLanguageModel());
|
||||||
targetLanguage_->setEnabled(doTranslation_->isChecked());
|
targetLanguage_->setEnabled(doTranslation_->isChecked());
|
||||||
|
|
||||||
swapLanguages->setFlat(true);
|
swapLanguages->setFlat(true);
|
||||||
@ -56,13 +51,6 @@ CaptureAreaEditor::CaptureAreaEditor(CaptureAreaSelector &selector)
|
|||||||
|
|
||||||
CaptureAreaEditor::~CaptureAreaEditor() = default;
|
CaptureAreaEditor::~CaptureAreaEditor() = default;
|
||||||
|
|
||||||
void CaptureAreaEditor::updateSettings(const Settings &settings)
|
|
||||||
{
|
|
||||||
sourceLanguageModel_->setStringList(
|
|
||||||
Tesseract::availableLanguageNames(settings.tessdataPath));
|
|
||||||
targetLanguageModel_->setStringList(Translator::availableLanguageNames());
|
|
||||||
}
|
|
||||||
|
|
||||||
void CaptureAreaEditor::swapLanguages()
|
void CaptureAreaEditor::swapLanguages()
|
||||||
{
|
{
|
||||||
const auto target = targetLanguage_->currentText();
|
const auto target = targetLanguage_->currentText();
|
||||||
|
@ -6,18 +6,17 @@
|
|||||||
|
|
||||||
class QCheckBox;
|
class QCheckBox;
|
||||||
class QComboBox;
|
class QComboBox;
|
||||||
class QStringListModel;
|
|
||||||
|
|
||||||
class CaptureAreaEditor : public QWidget
|
class CaptureAreaEditor : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit CaptureAreaEditor(CaptureAreaSelector& selector);
|
explicit CaptureAreaEditor(const CommonModels& models,
|
||||||
|
CaptureAreaSelector& selector);
|
||||||
~CaptureAreaEditor();
|
~CaptureAreaEditor();
|
||||||
|
|
||||||
void set(const CaptureArea& area);
|
void set(const CaptureArea& area);
|
||||||
void apply(CaptureArea& area) const;
|
void apply(CaptureArea& area) const;
|
||||||
void updateSettings(const Settings& settings);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void swapLanguages();
|
void swapLanguages();
|
||||||
@ -26,6 +25,4 @@ private:
|
|||||||
QCheckBox* doTranslation_;
|
QCheckBox* doTranslation_;
|
||||||
QComboBox* sourceLanguage_;
|
QComboBox* sourceLanguage_;
|
||||||
QComboBox* targetLanguage_;
|
QComboBox* targetLanguage_;
|
||||||
std::unique_ptr<QStringListModel> sourceLanguageModel_;
|
|
||||||
std::unique_ptr<QStringListModel> targetLanguageModel_;
|
|
||||||
};
|
};
|
||||||
|
@ -12,11 +12,12 @@
|
|||||||
|
|
||||||
CaptureAreaSelector::CaptureAreaSelector(Capturer &capturer,
|
CaptureAreaSelector::CaptureAreaSelector(Capturer &capturer,
|
||||||
const Settings &settings,
|
const Settings &settings,
|
||||||
|
const CommonModels &models,
|
||||||
const QPixmap &pixmap)
|
const QPixmap &pixmap)
|
||||||
: capturer_(capturer)
|
: capturer_(capturer)
|
||||||
, settings_(settings)
|
, settings_(settings)
|
||||||
, pixmap_(pixmap)
|
, pixmap_(pixmap)
|
||||||
, editor_(std::make_unique<CaptureAreaEditor>(*this))
|
, editor_(std::make_unique<CaptureAreaEditor>(models, *this))
|
||||||
{
|
{
|
||||||
setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint |
|
setWindowFlags(Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint |
|
||||||
Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
|
Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
|
||||||
@ -63,9 +64,6 @@ Left click on selection - process)")
|
|||||||
.arg(sourceName, targetName, translationState);
|
.arg(sourceName, targetName, translationState);
|
||||||
|
|
||||||
area_.reset();
|
area_.reset();
|
||||||
|
|
||||||
SOFT_ASSERT(editor_, return );
|
|
||||||
editor_->updateSettings(settings_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CaptureAreaSelector::paintEvent(QPaintEvent * /*event*/)
|
void CaptureAreaSelector::paintEvent(QPaintEvent * /*event*/)
|
||||||
|
@ -10,7 +10,7 @@ class CaptureAreaSelector : public QWidget
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
CaptureAreaSelector(Capturer &capturer, const Settings &settings,
|
CaptureAreaSelector(Capturer &capturer, const Settings &settings,
|
||||||
const QPixmap &pixmap);
|
const CommonModels &models, const QPixmap &pixmap);
|
||||||
~CaptureAreaSelector();
|
~CaptureAreaSelector();
|
||||||
|
|
||||||
void activate();
|
void activate();
|
||||||
|
@ -10,10 +10,12 @@
|
|||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
|
|
||||||
Capturer::Capturer(Manager &manager, const Settings &settings)
|
Capturer::Capturer(Manager &manager, const Settings &settings,
|
||||||
|
const CommonModels &models)
|
||||||
: manager_(manager)
|
: manager_(manager)
|
||||||
, settings_(settings)
|
, settings_(settings)
|
||||||
, selector_(std::make_unique<CaptureAreaSelector>(*this, settings_, pixmap_))
|
, selector_(std::make_unique<CaptureAreaSelector>(*this, settings_, models,
|
||||||
|
pixmap_))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
class Capturer
|
class Capturer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Capturer(Manager &manager, const Settings &settings);
|
Capturer(Manager &manager, const Settings &settings,
|
||||||
|
const CommonModels &models);
|
||||||
~Capturer();
|
~Capturer();
|
||||||
|
|
||||||
void capture();
|
void capture();
|
||||||
|
40
src/commonmodels.cpp
Normal file
40
src/commonmodels.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
#include "commonmodels.h"
|
||||||
|
#include "settings.h"
|
||||||
|
#include "tesseract.h"
|
||||||
|
#include "translator.h"
|
||||||
|
|
||||||
|
CommonModels::CommonModels()
|
||||||
|
: sourceLanguageModel_(std::make_unique<QStringListModel>())
|
||||||
|
, targetLanguageModel_(std::make_unique<QStringListModel>())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CommonModels::~CommonModels() = default;
|
||||||
|
|
||||||
|
void CommonModels::update(const QString &tessdataPath)
|
||||||
|
{
|
||||||
|
{
|
||||||
|
auto names = Tesseract::availableLanguageNames(tessdataPath);
|
||||||
|
std::sort(names.begin(), names.end());
|
||||||
|
sourceLanguageModel_->setStringList(names);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetLanguageModel_->rowCount() > 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
{
|
||||||
|
auto names = Translator::availableLanguageNames();
|
||||||
|
std::sort(names.begin(), names.end());
|
||||||
|
targetLanguageModel_->setStringList(names);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringListModel *CommonModels::sourceLanguageModel() const
|
||||||
|
{
|
||||||
|
return sourceLanguageModel_.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringListModel *CommonModels::targetLanguageModel() const
|
||||||
|
{
|
||||||
|
return targetLanguageModel_.get();
|
||||||
|
}
|
23
src/commonmodels.h
Normal file
23
src/commonmodels.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "stfwd.h"
|
||||||
|
|
||||||
|
#include <QStringListModel>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class CommonModels
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CommonModels();
|
||||||
|
~CommonModels();
|
||||||
|
|
||||||
|
void update(const QString& tessdataPath);
|
||||||
|
|
||||||
|
QStringListModel* sourceLanguageModel() const;
|
||||||
|
QStringListModel* targetLanguageModel() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<QStringListModel> sourceLanguageModel_;
|
||||||
|
std::unique_ptr<QStringListModel> targetLanguageModel_;
|
||||||
|
};
|
@ -1,5 +1,6 @@
|
|||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
#include "capturer.h"
|
#include "capturer.h"
|
||||||
|
#include "commonmodels.h"
|
||||||
#include "corrector.h"
|
#include "corrector.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "recognizer.h"
|
#include "recognizer.h"
|
||||||
@ -28,11 +29,12 @@ const auto updatesUrl =
|
|||||||
Manager::Manager()
|
Manager::Manager()
|
||||||
: settings_(std::make_unique<Settings>())
|
: settings_(std::make_unique<Settings>())
|
||||||
, updater_(std::make_unique<update::Loader>(QUrl(updatesUrl)))
|
, updater_(std::make_unique<update::Loader>(QUrl(updatesUrl)))
|
||||||
|
, models_(std::make_unique<CommonModels>())
|
||||||
{
|
{
|
||||||
SOFT_ASSERT(settings_, return );
|
SOFT_ASSERT(settings_, return );
|
||||||
|
|
||||||
tray_ = std::make_unique<TrayIcon>(*this, *settings_);
|
tray_ = std::make_unique<TrayIcon>(*this, *settings_);
|
||||||
capturer_ = std::make_unique<Capturer>(*this, *settings_);
|
capturer_ = std::make_unique<Capturer>(*this, *settings_, *models_);
|
||||||
recognizer_ = std::make_unique<Recognizer>(*this, *settings_);
|
recognizer_ = std::make_unique<Recognizer>(*this, *settings_);
|
||||||
translator_ = std::make_unique<Translator>(*this, *settings_);
|
translator_ = std::make_unique<Translator>(*this, *settings_);
|
||||||
corrector_ = std::make_unique<Corrector>(*this, *settings_);
|
corrector_ = std::make_unique<Corrector>(*this, *settings_);
|
||||||
@ -74,6 +76,8 @@ void Manager::updateSettings()
|
|||||||
setupProxy(*settings_);
|
setupProxy(*settings_);
|
||||||
setupUpdates(*settings_);
|
setupUpdates(*settings_);
|
||||||
|
|
||||||
|
models_->update(settings_->tessdataPath);
|
||||||
|
|
||||||
tray_->updateSettings();
|
tray_->updateSettings();
|
||||||
capturer_->updateSettings();
|
capturer_->updateSettings();
|
||||||
recognizer_->updateSettings();
|
recognizer_->updateSettings();
|
||||||
|
@ -41,5 +41,6 @@ private:
|
|||||||
std::unique_ptr<Representer> representer_;
|
std::unique_ptr<Representer> representer_;
|
||||||
std::unique_ptr<update::Loader> updater_;
|
std::unique_ptr<update::Loader> updater_;
|
||||||
std::unique_ptr<update::AutoChecker> updateAutoChecker_;
|
std::unique_ptr<update::AutoChecker> updateAutoChecker_;
|
||||||
|
std::unique_ptr<CommonModels> models_;
|
||||||
int activeTaskCount_{0};
|
int activeTaskCount_{0};
|
||||||
};
|
};
|
||||||
|
@ -54,13 +54,18 @@ SettingsEditor::SettingsEditor(Manager &manager, update::Loader &updater)
|
|||||||
ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
|
ui->proxyPassEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// translation
|
||||||
|
ui->tesseractLangCombo->setModel(models_.sourceLanguageModel());
|
||||||
|
|
||||||
// correction
|
// correction
|
||||||
ui->userSubstitutionsTable->setEnabled(ui->useUserSubstitutions->isChecked());
|
ui->userSubstitutionsTable->setEnabled(ui->useUserSubstitutions->isChecked());
|
||||||
|
ui->userSubstitutionsTable->setSourceLanguageModel(
|
||||||
|
models_.sourceLanguageModel());
|
||||||
connect(ui->useUserSubstitutions, &QCheckBox::toggled, //
|
connect(ui->useUserSubstitutions, &QCheckBox::toggled, //
|
||||||
ui->userSubstitutionsTable, &QTableWidget::setEnabled);
|
ui->userSubstitutionsTable, &QTableWidget::setEnabled);
|
||||||
|
|
||||||
// translation
|
// translation
|
||||||
updateTranslationLanguages();
|
ui->translateLangCombo->setModel(models_.targetLanguageModel());
|
||||||
|
|
||||||
// representation
|
// representation
|
||||||
connect(ui->dialogRadio, &QRadioButton::toggled, //
|
connect(ui->dialogRadio, &QRadioButton::toggled, //
|
||||||
@ -154,6 +159,9 @@ Settings SettingsEditor::settings() const
|
|||||||
|
|
||||||
void SettingsEditor::setSettings(const Settings &settings)
|
void SettingsEditor::setSettings(const Settings &settings)
|
||||||
{
|
{
|
||||||
|
if (settings.isPortable() == ui->portable->isChecked())
|
||||||
|
updateModels(settings.tessdataPath);
|
||||||
|
|
||||||
wasPortable_ = settings.isPortable();
|
wasPortable_ = settings.isPortable();
|
||||||
ui->portable->setChecked(settings.isPortable());
|
ui->portable->setChecked(settings.isPortable());
|
||||||
|
|
||||||
@ -174,12 +182,10 @@ void SettingsEditor::setSettings(const Settings &settings)
|
|||||||
ui->proxySaveCheck->setChecked(settings.proxySavePassword);
|
ui->proxySaveCheck->setChecked(settings.proxySavePassword);
|
||||||
|
|
||||||
ui->tessdataPath->setText(settings.tessdataPath);
|
ui->tessdataPath->setText(settings.tessdataPath);
|
||||||
updateTesseractLanguages();
|
|
||||||
ui->tesseractLangCombo->setCurrentText(
|
ui->tesseractLangCombo->setCurrentText(
|
||||||
LanguageCodes::name(settings.sourceLanguage));
|
LanguageCodes::name(settings.sourceLanguage));
|
||||||
|
|
||||||
ui->useUserSubstitutions->setChecked(settings.useUserSubstitutions);
|
ui->useUserSubstitutions->setChecked(settings.useUserSubstitutions);
|
||||||
ui->userSubstitutionsTable->setTessdataPath(settings.tessdataPath);
|
|
||||||
ui->userSubstitutionsTable->setSubstitutions(settings.userSubstitutions);
|
ui->userSubstitutionsTable->setSubstitutions(settings.userSubstitutions);
|
||||||
|
|
||||||
ui->doTranslationCheck->setChecked(settings.doTranslation);
|
ui->doTranslationCheck->setChecked(settings.doTranslation);
|
||||||
@ -207,18 +213,6 @@ void SettingsEditor::updateCurrentPage()
|
|||||||
ui->pagesView->setCurrentIndex(ui->pagesList->currentIndex().row());
|
ui->pagesView->setCurrentIndex(ui->pagesList->currentIndex().row());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsEditor::updateTesseractLanguages()
|
|
||||||
{
|
|
||||||
ui->tesseractLangCombo->clear();
|
|
||||||
|
|
||||||
auto names = Tesseract::availableLanguageNames(ui->tessdataPath->text());
|
|
||||||
if (names.isEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
std::sort(names.begin(), names.end());
|
|
||||||
ui->tesseractLangCombo->addItems(names);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SettingsEditor::updateTranslators()
|
void SettingsEditor::updateTranslators()
|
||||||
{
|
{
|
||||||
ui->translatorList->clear();
|
ui->translatorList->clear();
|
||||||
@ -238,22 +232,14 @@ void SettingsEditor::updateTranslators()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsEditor::updateTranslationLanguages()
|
|
||||||
{
|
|
||||||
ui->translateLangCombo->clear();
|
|
||||||
|
|
||||||
auto names = Translator::availableLanguageNames();
|
|
||||||
if (names.isEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
std::sort(names.begin(), names.end());
|
|
||||||
ui->translateLangCombo->addItems(names);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SettingsEditor::adjustUpdatesView()
|
void SettingsEditor::adjustUpdatesView()
|
||||||
{
|
{
|
||||||
ui->updatesView->resizeColumnToContents(int(update::Model::Column::Name));
|
ui->updatesView->resizeColumnToContents(int(update::Model::Column::Name));
|
||||||
updateTesseractLanguages();
|
|
||||||
|
if (ui->tessdataPath->text().isEmpty()) // not inited yet
|
||||||
|
return;
|
||||||
|
|
||||||
|
updateModels(ui->tessdataPath->text());
|
||||||
updateTranslators();
|
updateTranslators();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -287,8 +273,7 @@ void SettingsEditor::handlePortableChanged()
|
|||||||
settings.setPortable(ui->portable->isChecked());
|
settings.setPortable(ui->portable->isChecked());
|
||||||
ui->tessdataPath->setText(settings.tessdataPath);
|
ui->tessdataPath->setText(settings.tessdataPath);
|
||||||
ui->translatorsPath->setText(settings.translatorsDir);
|
ui->translatorsPath->setText(settings.translatorsDir);
|
||||||
ui->userSubstitutionsTable->setTessdataPath(settings.tessdataPath);
|
updateModels(settings.tessdataPath);
|
||||||
updateTesseractLanguages();
|
|
||||||
updateTranslators();
|
updateTranslators();
|
||||||
|
|
||||||
const auto portableChanged = wasPortable_ != settings.isPortable();
|
const auto portableChanged = wasPortable_ != settings.isPortable();
|
||||||
@ -304,3 +289,10 @@ void SettingsEditor::updateResultFont()
|
|||||||
font.setPointSize(ui->resultFontSize->value());
|
font.setPointSize(ui->resultFontSize->value());
|
||||||
ui->resultFont->setFont(font);
|
ui->resultFont->setFont(font);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SettingsEditor::updateModels(const QString &tessdataPath)
|
||||||
|
{
|
||||||
|
const auto source = ui->tesseractLangCombo->currentText();
|
||||||
|
models_.update(tessdataPath);
|
||||||
|
ui->tesseractLangCombo->setCurrentText(source);
|
||||||
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
|
#include "commonmodels.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
@ -23,17 +24,17 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void updateCurrentPage();
|
void updateCurrentPage();
|
||||||
void updateTesseractLanguages();
|
|
||||||
void updateTranslators();
|
void updateTranslators();
|
||||||
void updateTranslationLanguages();
|
|
||||||
void adjustUpdatesView();
|
void adjustUpdatesView();
|
||||||
void handleButtonBoxClicked(QAbstractButton *button);
|
void handleButtonBoxClicked(QAbstractButton *button);
|
||||||
void handlePortableChanged();
|
void handlePortableChanged();
|
||||||
void updateResultFont();
|
void updateResultFont();
|
||||||
|
void updateModels(const QString &tessdataPath);
|
||||||
|
|
||||||
Ui::SettingsEditor *ui;
|
Ui::SettingsEditor *ui;
|
||||||
Manager &manager_;
|
Manager &manager_;
|
||||||
update::Loader &updater_;
|
update::Loader &updater_;
|
||||||
|
CommonModels models_;
|
||||||
QStringList enabledTranslators_;
|
QStringList enabledTranslators_;
|
||||||
bool wasPortable_{false};
|
bool wasPortable_{false};
|
||||||
};
|
};
|
||||||
|
@ -18,6 +18,7 @@ class Recognizer;
|
|||||||
class CaptureArea;
|
class CaptureArea;
|
||||||
class CaptureAreaSelector;
|
class CaptureAreaSelector;
|
||||||
class CaptureAreaEditor;
|
class CaptureAreaEditor;
|
||||||
|
class CommonModels;
|
||||||
|
|
||||||
namespace update
|
namespace update
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
#include "substitutionstable.h"
|
#include "substitutionstable.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "languagecodes.h"
|
#include "languagecodes.h"
|
||||||
#include "tesseract.h"
|
|
||||||
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
@ -29,7 +28,7 @@ public:
|
|||||||
|
|
||||||
SubstitutionsTable::SubstitutionsTable(QWidget *parent)
|
SubstitutionsTable::SubstitutionsTable(QWidget *parent)
|
||||||
: QTableWidget(parent)
|
: QTableWidget(parent)
|
||||||
, languagesModel_(new QStringListModel(this))
|
, substitutionLanguages_(new QStringListModel(this))
|
||||||
{
|
{
|
||||||
setItemDelegate(new SubstitutionDelegate(this));
|
setItemDelegate(new SubstitutionDelegate(this));
|
||||||
setColumnCount(int(Column::Count));
|
setColumnCount(int(Column::Count));
|
||||||
@ -38,6 +37,16 @@ SubstitutionsTable::SubstitutionsTable(QWidget *parent)
|
|||||||
this, &SubstitutionsTable::handleItemChange);
|
this, &SubstitutionsTable::handleItemChange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SubstitutionsTable::setSourceLanguageModel(QStringListModel *model)
|
||||||
|
{
|
||||||
|
sourceLanguages_ = model;
|
||||||
|
connect(model, &QStringListModel::modelReset, //
|
||||||
|
this, [this] {
|
||||||
|
if (rowCount() > 0) // must be at least 1 if inited
|
||||||
|
setSubstitutions(substitutions());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void SubstitutionsTable::setSubstitutions(const Substitutions &substitutions)
|
void SubstitutionsTable::setSubstitutions(const Substitutions &substitutions)
|
||||||
{
|
{
|
||||||
setRowCount(0);
|
setRowCount(0);
|
||||||
@ -50,17 +59,9 @@ void SubstitutionsTable::setSubstitutions(const Substitutions &substitutions)
|
|||||||
resizeColumnsToContents();
|
resizeColumnsToContents();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SubstitutionsTable::setTessdataPath(const QString &tessdataPath)
|
|
||||||
{
|
|
||||||
tessdataPath_ = tessdataPath;
|
|
||||||
if (rowCount() == 0) // must be at least 1 if inited
|
|
||||||
return;
|
|
||||||
setSubstitutions(substitutions());
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubstitutionsTable::updateModel(const Substitutions &substitutions)
|
void SubstitutionsTable::updateModel(const Substitutions &substitutions)
|
||||||
{
|
{
|
||||||
auto strings = Tesseract::availableLanguageNames(tessdataPath_);
|
auto strings = sourceLanguages_->stringList();
|
||||||
|
|
||||||
if (!substitutions.empty()) {
|
if (!substitutions.empty()) {
|
||||||
for (const auto &i : substitutions) {
|
for (const auto &i : substitutions) {
|
||||||
@ -73,7 +74,7 @@ void SubstitutionsTable::updateModel(const Substitutions &substitutions)
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::sort(strings.begin(), strings.end());
|
std::sort(strings.begin(), strings.end());
|
||||||
languagesModel_->setStringList(strings);
|
substitutionLanguages_->setStringList(strings);
|
||||||
}
|
}
|
||||||
|
|
||||||
Substitutions SubstitutionsTable::substitutions() const
|
Substitutions SubstitutionsTable::substitutions() const
|
||||||
@ -97,7 +98,7 @@ void SubstitutionsTable::addRow(const LanguageId &language,
|
|||||||
insertRow(row);
|
insertRow(row);
|
||||||
|
|
||||||
auto combo = new QComboBox(this);
|
auto combo = new QComboBox(this);
|
||||||
combo->setModel(languagesModel_);
|
combo->setModel(substitutionLanguages_);
|
||||||
|
|
||||||
using E = Column;
|
using E = Column;
|
||||||
if (!language.isEmpty()) {
|
if (!language.isEmpty()) {
|
||||||
|
@ -14,8 +14,9 @@ public:
|
|||||||
|
|
||||||
explicit SubstitutionsTable(QWidget* parent = nullptr);
|
explicit SubstitutionsTable(QWidget* parent = nullptr);
|
||||||
|
|
||||||
|
void setSourceLanguageModel(QStringListModel* model);
|
||||||
|
|
||||||
void setSubstitutions(const Substitutions& substitutions);
|
void setSubstitutions(const Substitutions& substitutions);
|
||||||
void setTessdataPath(const QString& tessdataPath);
|
|
||||||
Substitutions substitutions() const;
|
Substitutions substitutions() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -25,6 +26,6 @@ private:
|
|||||||
std::pair<LanguageId, Substitution> at(int row) const;
|
std::pair<LanguageId, Substitution> at(int row) const;
|
||||||
void updateModel(const Substitutions& substitutions);
|
void updateModel(const Substitutions& substitutions);
|
||||||
|
|
||||||
QStringListModel* languagesModel_;
|
QStringListModel* sourceLanguages_{nullptr};
|
||||||
QString tessdataPath_;
|
QStringListModel* substitutionLanguages_;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user