From 67a4c8e0ea1154b99c6c3af1c143ad8ed8e59151 Mon Sep 17 00:00:00 2001 From: Gres Date: Fri, 9 Oct 2015 23:18:22 +0300 Subject: [PATCH] Added TranslatorHelper class. --- ScreenTranslator.pro | 10 ++++-- Settings.h | 2 ++ TranslatorHelper.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++ TranslatorHelper.h | 27 ++++++++++++++++ 4 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 TranslatorHelper.cpp create mode 100644 TranslatorHelper.h diff --git a/ScreenTranslator.pro b/ScreenTranslator.pro index b783173..77d9091 100644 --- a/ScreenTranslator.pro +++ b/ScreenTranslator.pro @@ -10,6 +10,7 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = ScreenTranslator TEMPLATE = app +CONFIG += c++11 win32{ RC_FILE = app.rc @@ -37,7 +38,8 @@ SOURCES += main.cpp\ ImageProcessing.cpp \ LanguageHelper.cpp \ WebTranslator.cpp \ - WebTranslatorProxy.cpp + WebTranslatorProxy.cpp \ + TranslatorHelper.cpp HEADERS += \ Manager.h \ @@ -52,7 +54,8 @@ HEADERS += \ LanguageHelper.h \ WebTranslator.h \ WebTranslatorProxy.h \ - StAssert.h + StAssert.h \ + TranslatorHelper.h FORMS += \ SettingsEditor.ui \ @@ -71,5 +74,8 @@ OTHER_FILES += \ images/icon.ico \ README.md \ uncrustify.cfg\ + images/README.md \ translators/google.js \ + translators/yandex.js \ + translators/bing.js \ TODO.md diff --git a/Settings.h b/Settings.h index da45ae3..e80a1bf 100644 --- a/Settings.h +++ b/Settings.h @@ -25,6 +25,7 @@ namespace settings_names { const QString sourceLanguage = "source_language"; const QString translationLanguage = "translation_language"; const QString translationTimeout = "translation_timeout"; + const QString translators = "translators"; } @@ -49,6 +50,7 @@ namespace settings_values { const QString sourceLanguage = "auto"; const QString translationLanguage = "ru"; const int translationTimeout = 15; // secs + const QString translators = ""; } #endif // SETTINGS_H diff --git a/TranslatorHelper.cpp b/TranslatorHelper.cpp new file mode 100644 index 0000000..f79ddc4 --- /dev/null +++ b/TranslatorHelper.cpp @@ -0,0 +1,74 @@ +#include +#include +#include + +#include "TranslatorHelper.h" +#include "Settings.h" + +TranslatorHelper::TranslatorHelper () + : translatorsDir_ ("translators"), currentIndex_ (0) { +} + +void TranslatorHelper::setEnabledTranslators (const QStringList &enabled) const { + QSettings settings; + settings.beginGroup (settings_names::translationGroup); + settings.setValue (settings_names::translators, enabled.join ("|")); +} + +QStringList TranslatorHelper::possibleTranslators (QStringList &enabled) const { +#define GET(FIELD) settings.value (settings_names::FIELD, settings_values::FIELD) + QSettings settings; + settings.beginGroup (settings_names::translationGroup); + QStringList exist = QDir (translatorsDir_).entryList (QStringList () << "*.js", QDir::Files); + QStringList saved = GET (translators).toString ().split ("|", QString::SkipEmptyParts); + QStringList on, off; + std::copy_if (saved.begin (), saved.end (), std::back_inserter (on), [&](const QString &i) { + return exist.contains (i); + }); + on = on.isEmpty () ? exist : on; + + std::copy_if (exist.begin (), exist.end (), std::back_inserter (off), [&](const QString &i) { + return !on.contains (i); + }); + + enabled = on; + return (on + off); +#undef GET +} + +QStringList TranslatorHelper::enabledTranslatorScripts () const { + QStringList enabled; + possibleTranslators (enabled); + QStringList scripts; + foreach (const QString &name, enabled) { + QFile f (translatorsDir_ + QDir::separator () + name); + if (f.open (QFile::ReadOnly)) { + QString script = QString::fromUtf8 (f.readAll ()); + if (!script.isEmpty ()) { + scripts << script; + } + } + } + return scripts; +} + +void TranslatorHelper::loadScripts () { + scripts_ = enabledTranslatorScripts (); +} + +void TranslatorHelper::newItem () { + currentIndex_ = 0; +} + +QString TranslatorHelper::currentScript () const { + return (currentIndex_ < scripts_.size () ? scripts_.at (currentIndex_) : QString ()); +} + +QString TranslatorHelper::nextScript () { + ++currentIndex_; + return currentScript (); +} + +bool TranslatorHelper::gotScripts () const { + return !scripts_.isEmpty (); +} diff --git a/TranslatorHelper.h b/TranslatorHelper.h new file mode 100644 index 0000000..40370d8 --- /dev/null +++ b/TranslatorHelper.h @@ -0,0 +1,27 @@ +#ifndef TRANSLATORHELPER_H +#define TRANSLATORHELPER_H + +#include + +class TranslatorHelper { + public: + TranslatorHelper (); + + QStringList possibleTranslators (QStringList &enabled) const; + QStringList enabledTranslatorScripts () const; + + void setEnabledTranslators (const QStringList &enabled) const; + + void loadScripts (); + void newItem (); + QString currentScript () const; + QString nextScript (); + bool gotScripts () const; + + private: + QString translatorsDir_; + QStringList scripts_; + int currentIndex_; +}; + +#endif // TRANSLATORHELPER_H