From d893c58b8e238590a7c10c8dcd89bb2aff476f91 Mon Sep 17 00:00:00 2001 From: Ugnius Date: Tue, 12 Jun 2018 15:06:52 +0200 Subject: [PATCH 1/6] Added settings dialog. --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 5 ++- src/dialogs/settingsdialog.cpp | 12 ++++++ src/dialogs/settingsdialog.h | 32 ++++++++++++++++ src/dialogs/settingsdialog.ui | 68 ++++++++++++++++++++++++++++++++++ src/mainwindow.cpp | 10 ++++- src/mainwindow.h | 15 ++++++-- src/mainwindow.ui | 13 +++++-- 8 files changed, 147 insertions(+), 10 deletions(-) create mode 100644 src/dialogs/settingsdialog.cpp create mode 100644 src/dialogs/settingsdialog.h create mode 100644 src/dialogs/settingsdialog.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index 420121b..f637807 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.5) project(instant_translator) -set (CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD 11) # Place binaries and libraries according to GNU standards. include(GNUInstallDirs) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e2e3655..308eaff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,7 +30,7 @@ set(OTHER_LIBRARIES glog) # UI files. -qt5_wrap_ui(UI_HEADERS mainwindow.ui) +qt5_wrap_ui(UI_HEADERS mainwindow.ui dialogs/settingsdialog.ui) set(RESOURCE_FILES resources.qrc) @@ -42,6 +42,9 @@ set(SOURCE_FILES apis/api.h apis/googleapi.cpp apis/googleapi.h + dialogs/settingsdialog.cpp + dialogs/settingsdialog.h + dialogs/settingsdialog.ui utils/language.cpp utils/language.h utils/requestmanager.cpp diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp new file mode 100644 index 0000000..8327e65 --- /dev/null +++ b/src/dialogs/settingsdialog.cpp @@ -0,0 +1,12 @@ +#include "settingsdialog.h" +#include "ui_settingsdialog.h" + +SettingsDialog::SettingsDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::SettingsDialog) { + ui->setupUi(this); +} + +SettingsDialog::~SettingsDialog() { + delete ui; +} diff --git a/src/dialogs/settingsdialog.h b/src/dialogs/settingsdialog.h new file mode 100644 index 0000000..69408e0 --- /dev/null +++ b/src/dialogs/settingsdialog.h @@ -0,0 +1,32 @@ +#ifndef INSTANT_TRANSLATOR_SETTINGSDIALOG_H +#define INSTANT_TRANSLATOR_SETTINGSDIALOG_H + +#include + +namespace Ui { + class SettingsDialog; +} + +/** + * Settings dialog class. + */ +class SettingsDialog : public QDialog { +Q_OBJECT + +public: + /** + * Constructs an object with parent object parent. + * @param parent Parent of an object may be viewed as the object's owner. + */ + explicit SettingsDialog(QWidget *parent = nullptr); + + /** + * Destructor. + */ + ~SettingsDialog(); + +private: + Ui::SettingsDialog *ui; +}; + +#endif // INSTANT_TRANSLATOR_SETTINGSDIALOG_H diff --git a/src/dialogs/settingsdialog.ui b/src/dialogs/settingsdialog.ui new file mode 100644 index 0000000..8d9a5be --- /dev/null +++ b/src/dialogs/settingsdialog.ui @@ -0,0 +1,68 @@ + + + SettingsDialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + 30 + 240 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + buttonBox + accepted() + SettingsDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + SettingsDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index b00bce3..4575b58 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -20,6 +20,8 @@ MainWindow::MainWindow(QWidget *parent) : // Load supported languages in the combo boxes. loadLanguagesInComboBoxes(); + + settingsDialog = new SettingsDialog(this); } MainWindow::~MainWindow() { @@ -167,6 +169,12 @@ void MainWindow::on_exitAction_triggered() { this->close(); } +void MainWindow::on_settingsAction_triggered() { + if (settingsDialog) { + settingsDialog->show(); + } +} + void MainWindow::on_translateButton_clicked() { // Perform translation. doTranslation(); @@ -175,4 +183,4 @@ void MainWindow::on_translateButton_clicked() { void MainWindow::on_swapLanguagesButton_clicked() { // Swap languages in the combo boxes. swapLanguagesInComboBoxes(); -} \ No newline at end of file +} diff --git a/src/mainwindow.h b/src/mainwindow.h index 97100e1..0eb1575 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -1,5 +1,5 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H +#ifndef INSTANT_TRANSLATOR_MAINWINDOW_H +#define INSTANT_TRANSLATOR_MAINWINDOW_H #include #include @@ -12,6 +12,7 @@ #include #include "apis/api.h" #include "apis/googleapi.h" +#include "dialogs/settingsdialog.h" #include "utils/language.h" namespace Ui { @@ -44,10 +45,15 @@ private slots: void onClipboardDataChanged(); /** - * On exitAction is changed. + * On exitAction is triggered. */ void on_exitAction_triggered(); + /** + * On settingsAction is triggered. + */ + void on_settingsAction_triggered(); + /** * On translateButton clicked. */ @@ -102,9 +108,10 @@ private slots: void showErrorBox(const QString &message); Ui::MainWindow *ui; // MainWindow user interface. + SettingsDialog *settingsDialog; QClipboard *clipboard; // Clipboard information. API *api; // Translation API. Language language; // Language. }; -#endif // MAINWINDOW_H +#endif // INSTANT_TRANSLATOR_MAINWINDOW_H diff --git a/src/mainwindow.ui b/src/mainwindow.ui index ec5c61d..1fa8713 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -86,22 +86,29 @@ 0 0 600 - 22 + 20 - + &File + + - + E&xit + + + Settings + + From 647986e9f0f352488b423ae87f3aa6c6e1f727f8 Mon Sep 17 00:00:00 2001 From: Ugnius Date: Tue, 12 Jun 2018 16:16:20 +0200 Subject: [PATCH 2/6] Updated settings dialog UI. --- src/dialogs/settingsdialog.ui | 137 +++++++++++++++++++++++++++++++--- 1 file changed, 126 insertions(+), 11 deletions(-) diff --git a/src/dialogs/settingsdialog.ui b/src/dialogs/settingsdialog.ui index 8d9a5be..686dcf9 100644 --- a/src/dialogs/settingsdialog.ui +++ b/src/dialogs/settingsdialog.ui @@ -6,34 +6,149 @@ 0 0 - 400 - 300 + 480 + 310 - Dialog + Settings - + - 30 - 240 - 341 - 32 + 10 + 270 + 460 + 30 Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::Close|QDialogButtonBox::Ok + + + + + + 10 + 10 + 460 + 190 + + + + APIs Settings + + + + + 10 + 30 + 120 + 150 + + + + + + + 140 + 30 + 51 + 20 + + + + API key + + + + + + 140 + 50 + 310 + 20 + + + + + + + 140 + 80 + 121 + 20 + + + + Default source language + + + + + + 140 + 100 + 310 + 20 + + + + + + + 140 + 130 + 121 + 20 + + + + Default target language + + + + + + 140 + 150 + 310 + 20 + + + + + + + + 10 + 210 + 61 + 20 + + + + Defaiult API + + + + + + 10 + 230 + 460 + 21 + - buttonBox + settingsButtonBox accepted() SettingsDialog accept() @@ -49,7 +164,7 @@ - buttonBox + settingsButtonBox rejected() SettingsDialog reject() From b33a60d09884dc3a6fe6b9a4f4f1bbb9cca81bd2 Mon Sep 17 00:00:00 2001 From: Ugnius Date: Thu, 14 Jun 2018 10:04:54 +0200 Subject: [PATCH 3/6] Added APISettings class. Implemented functionality of Settings Dialog. --- src/CMakeLists.txt | 2 + src/apis/googleapi.cpp | 4 +- src/dialogs/settingsdialog.cpp | 63 +++++++++++++++++ src/dialogs/settingsdialog.h | 38 ++++++++++ src/dialogs/settingsdialog.ui | 2 +- src/mainwindow.cpp | 8 +-- src/mainwindow.h | 1 - src/resources.qrc | 1 - src/resources/configs/api.ini | 3 - src/utils/apisettings.cpp | 82 +++++++++++++++++++++ src/utils/apisettings.h | 125 +++++++++++++++++++++++++++++++++ src/utils/language.cpp | 10 +-- src/utils/language.h | 10 +-- 13 files changed, 326 insertions(+), 23 deletions(-) delete mode 100644 src/resources/configs/api.ini create mode 100644 src/utils/apisettings.cpp create mode 100644 src/utils/apisettings.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 308eaff..19ae777 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -45,6 +45,8 @@ set(SOURCE_FILES dialogs/settingsdialog.cpp dialogs/settingsdialog.h dialogs/settingsdialog.ui + utils/apisettings.cpp + utils/apisettings.h utils/language.cpp utils/language.h utils/requestmanager.cpp diff --git a/src/apis/googleapi.cpp b/src/apis/googleapi.cpp index 88f7c91..c3e2f42 100644 --- a/src/apis/googleapi.cpp +++ b/src/apis/googleapi.cpp @@ -14,7 +14,7 @@ QString GoogleAPI::translate(const QString &input, return QString(); } - QSettings settings(":/resources/configs/api.ini", QSettings::IniFormat); + QSettings settings; QString key = settings.value("google/key").toString(); QString format = settings.value("google/format").toString(); @@ -73,7 +73,7 @@ QString GoogleAPI::translate(const QString &input, } QStringList GoogleAPI::getSupportedLanguages() const { - QSettings settings(":/resources/configs/api.ini", QSettings::IniFormat); + QSettings settings; QString key = settings.value("google/key").toString(); // Format GET url string. diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp index 8327e65..d02e0e8 100644 --- a/src/dialogs/settingsdialog.cpp +++ b/src/dialogs/settingsdialog.cpp @@ -5,8 +5,71 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SettingsDialog) { ui->setupUi(this); + + APISettings *googleAPISettings = new APISettings(this, "google", "Google Translate API"); + googleAPISettings->readSettings(); + apiSettingsList.append(googleAPISettings); + + APISettings *tempAPISettings = new APISettings(this, "temp", "Temp"); + tempAPISettings->readSettings(); + apiSettingsList.append(tempAPISettings); + + for (int i = 0; i < apiSettingsList.count(); ++i) { + QListWidgetItem *listWidgetItem = new QListWidgetItem(apiSettingsList.at(i)->getFullName()); + apiSettingsListWidgetItemList.append(listWidgetItem); + ui->apisListWidget->addItem(listWidgetItem); + } } SettingsDialog::~SettingsDialog() { delete ui; } + +void SettingsDialog::on_apisListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { + int currentIndex = apiSettingsListWidgetItemList.indexOf(current); + + if (currentIndex >= 0) { + APISettings *apiSettings = apiSettingsList.at(currentIndex); + ui->apiKeyLineEdit->setText(apiSettings->getApiKey()); + ui->defaultSourceLanguageLineEdit->setText(apiSettings->getDefaultSourceLanguage()); + ui->defaultTargetLanguageLineEdit->setText(apiSettings->getDefaultTargetLanguage()); + } +} + +void SettingsDialog::on_settingsButtonBox_accepted() { + save(); +} + +void SettingsDialog::on_apiKeyLineEdit_textChanged() { + int currentIndex = apiSettingsListWidgetItemList.indexOf(ui->apisListWidget->currentItem()); + + if (currentIndex >= 0) { + APISettings *apiSettings = apiSettingsList.at(currentIndex); + apiSettings->setApiKey(ui->apiKeyLineEdit->text()); + } +} + +void SettingsDialog::on_defaultSourceLanguageLineEdit_textChanged() { + int currentIndex = apiSettingsListWidgetItemList.indexOf(ui->apisListWidget->currentItem()); + + if (currentIndex >= 0) { + APISettings *apiSettings = apiSettingsList.at(currentIndex); + apiSettings->setDefaultSourceLanguage(ui->defaultSourceLanguageLineEdit->text()); + } +} + +void SettingsDialog::on_defaultTargetLanguageLineEdit_textChanged() { + int currentIndex = apiSettingsListWidgetItemList.indexOf(ui->apisListWidget->currentItem()); + + if (currentIndex >= 0) { + APISettings *apiSettings = apiSettingsList.at(currentIndex); + apiSettings->setDefaultTargetLanguage(ui->defaultTargetLanguageLineEdit->text()); + } +} + +void SettingsDialog::save() { + for (int i = 0; i < apiSettingsList.count(); ++i) { + APISettings *apiSettings = apiSettingsList.at(i); + apiSettings->writeSettings(); + } +} diff --git a/src/dialogs/settingsdialog.h b/src/dialogs/settingsdialog.h index 69408e0..6e96b78 100644 --- a/src/dialogs/settingsdialog.h +++ b/src/dialogs/settingsdialog.h @@ -2,6 +2,8 @@ #define INSTANT_TRANSLATOR_SETTINGSDIALOG_H #include +#include +#include "utils/apisettings.h" namespace Ui { class SettingsDialog; @@ -25,8 +27,44 @@ Q_OBJECT */ ~SettingsDialog(); +private slots: + + /** + * On apisListWidget is current item changed. + * @param current Current list item. + * @param previous Previous list item. + */ + void on_apisListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous); + + /** + * On settingsButtonBox is accepted. + */ + void on_settingsButtonBox_accepted(); + + /** + * On apiKeyLineEdit is text changed. + */ + void on_apiKeyLineEdit_textChanged(); + + /** + * On apiKeyLineEdit is text changed. + */ + void on_defaultSourceLanguageLineEdit_textChanged(); + + /** + * On apiKeyLineEdit is text changed. + */ + void on_defaultTargetLanguageLineEdit_textChanged(); + private: + /** + * Save settings data. + */ + void save(); + Ui::SettingsDialog *ui; + QList apiSettingsList; + QList apiSettingsListWidgetItemList; }; #endif // INSTANT_TRANSLATOR_SETTINGSDIALOG_H diff --git a/src/dialogs/settingsdialog.ui b/src/dialogs/settingsdialog.ui index 686dcf9..6aeabc5 100644 --- a/src/dialogs/settingsdialog.ui +++ b/src/dialogs/settingsdialog.ui @@ -41,7 +41,7 @@ APIs Settings - + 10 diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4575b58..a6c559c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -20,8 +20,6 @@ MainWindow::MainWindow(QWidget *parent) : // Load supported languages in the combo boxes. loadLanguagesInComboBoxes(); - - settingsDialog = new SettingsDialog(this); } MainWindow::~MainWindow() { @@ -170,9 +168,9 @@ void MainWindow::on_exitAction_triggered() { } void MainWindow::on_settingsAction_triggered() { - if (settingsDialog) { - settingsDialog->show(); - } + SettingsDialog *settingsDialog = new SettingsDialog(this); + settingsDialog->setAttribute(Qt::WA_DeleteOnClose); + settingsDialog->exec(); } void MainWindow::on_translateButton_clicked() { diff --git a/src/mainwindow.h b/src/mainwindow.h index 0eb1575..acd0d99 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -108,7 +108,6 @@ private slots: void showErrorBox(const QString &message); Ui::MainWindow *ui; // MainWindow user interface. - SettingsDialog *settingsDialog; QClipboard *clipboard; // Clipboard information. API *api; // Translation API. Language language; // Language. diff --git a/src/resources.qrc b/src/resources.qrc index 4dff053..4f63fa3 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -1,7 +1,6 @@ - resources/configs/api.ini resources/languages.json \ No newline at end of file diff --git a/src/resources/configs/api.ini b/src/resources/configs/api.ini deleted file mode 100644 index 5dc3c4e..0000000 --- a/src/resources/configs/api.ini +++ /dev/null @@ -1,3 +0,0 @@ -[google] -key=GOOGLE_API_KEY -format=text diff --git a/src/utils/apisettings.cpp b/src/utils/apisettings.cpp new file mode 100644 index 0000000..eb08b08 --- /dev/null +++ b/src/utils/apisettings.cpp @@ -0,0 +1,82 @@ +#include "apisettings.h" + +APISettings::APISettings(QObject *parent) + : QObject(parent) { +} + +APISettings::APISettings(QObject *parent, const QString &name, const QString &fullName) + : QObject(parent), name(name), fullName(fullName) { +} + +APISettings::~APISettings() { +} + +void APISettings::readSettings() { + if (name == "") { + throw std::invalid_argument("API name has not been set."); + } + QSettings settings; + apiKey = settings.value(name + "/key", "API_KEY").toString(); + textType = settings.value(name + "/text_type", "text").toString(); + defaultSourceLanguage = settings.value(name + "/source", "lt").toString(); + defaultTargetLanguage = settings.value(name + "/target", "en").toString(); +} + +void APISettings::writeSettings() { + if (name == "") { + throw std::invalid_argument("API name has not been set."); + } + QSettings settings; + settings.setValue(name + "/key", apiKey); + settings.setValue(name + "/text_type", textType); + settings.setValue(name + "/source", defaultSourceLanguage); + settings.setValue(name + "/target", defaultTargetLanguage); +} + +QString APISettings::getName() const { + return name; +} + +void APISettings::setName(const QString &name) { + this->name = name; +} + +QString APISettings::getFullName() const { + return fullName; +} + +void APISettings::setFullName(const QString &fullName) { + this->fullName = fullName; +} + +QString APISettings::getApiKey() const { + return apiKey; +} + +void APISettings::setApiKey(const QString &apiKey) { + this->apiKey = apiKey; +} + +QString APISettings::getTextType() const { + return textType; +} + +void APISettings::setTextType(const QString &textType) { + this->textType = textType; +} + +QString APISettings::getDefaultSourceLanguage() const { + return defaultSourceLanguage; +} + +void APISettings::setDefaultSourceLanguage(const QString &defaultSourceLanguage) { + this->defaultSourceLanguage = defaultSourceLanguage; +} + +QString APISettings::getDefaultTargetLanguage() const { + return defaultTargetLanguage; +} + +void APISettings::setDefaultTargetLanguage(const QString &defaultTargetLanguage) { + this->defaultTargetLanguage = defaultTargetLanguage; +} diff --git a/src/utils/apisettings.h b/src/utils/apisettings.h new file mode 100644 index 0000000..3722982 --- /dev/null +++ b/src/utils/apisettings.h @@ -0,0 +1,125 @@ +#ifndef INSTANT_TRANSLATOR_APISETTINGS_H +#define INSTANT_TRANSLATOR_APISETTINGS_H + +#include +#include +#include +#include + +/** + * API settings holder class. + */ +class APISettings : public QObject { +public: + /** + * Constructs an object with parent object parent. + * @param parent Parent of an object may be viewed as the object's owner. + */ + explicit APISettings(QObject *parent = nullptr); + + /** + * Constructs an object with parent object parent. + * @param parent parent Parent of an object may be viewed as the object's owner. + * @param name API name. + * @param fullName API full name. + */ + APISettings(QObject *parent, const QString &name, const QString &fullName); + + /** + * Destructor. + */ + ~APISettings() override; + + /** + * Read API settings to app settings. + */ + void readSettings(); + + /** + * Write API settings to app settings. + */ + void writeSettings(); + + /** + * Get API name. + * @return API name. + */ + QString getName() const; + + /** + * Set API name. + * @param name API name. + */ + void setName(const QString &name); + + /** + * Get API full name. + * @return API full name. + */ + QString getFullName() const; + + /** + * Set API full name. + * @param fullName API full name. + */ + void setFullName(const QString &fullName); + + /** + * Get API key. + * @return API key. + */ + QString getApiKey() const; + + /** + * Set API key. + * @param apiKey API key. + */ + void setApiKey(const QString &apiKey); + + /** + * Get translation text type. + * @return Translation text type. + */ + QString getTextType() const; + + /** + * Set translation text type. + * @param textType Translation text type. + */ + void setTextType(const QString &textType); + + /** + * Get default source language code. + * @return Default source language code. + */ + QString getDefaultSourceLanguage() const; + + /** + * Set default source language code. + * @param defaultSourceLanguage Default source language code. + */ + void setDefaultSourceLanguage(const QString &defaultSourceLanguage); + + /** + * Get default target language code. + * @return Default target language code. + */ + QString getDefaultTargetLanguage() const; + + /** + * Set default target language code. + * @param defaultTargetLanguage Default target language code. + */ + void setDefaultTargetLanguage(const QString &defaultTargetLanguage); + +private: + QString name; + QString fullName; + QString apiKey; + QString textType; + QString defaultSourceLanguage; + QString defaultTargetLanguage; +}; + + +#endif //INSTANT_TRANSLATOR_APISETTINGS_H diff --git a/src/utils/language.cpp b/src/utils/language.cpp index 199b11e..b830c09 100644 --- a/src/utils/language.cpp +++ b/src/utils/language.cpp @@ -8,15 +8,15 @@ Language::Language(QObject *parent) Language::~Language() { } -QString Language::getName(QString code) { +QString Language::getName(const QString &code) const { return hash.value(code); } -QString Language::getCode(QString name) { +QString Language::getCode(const QString &name) const { return hash.key(name); } -QStringList Language::getLanguages(QStringList codeList) { +QStringList Language::getLanguages(const QStringList &codeList) const { QStringList nameList; foreach (QString code, codeList) { nameList.append(hash.value(code)); @@ -24,7 +24,7 @@ QStringList Language::getLanguages(QStringList codeList) { return nameList; } -QStringList Language::getCodes(QStringList nameList) { +QStringList Language::getCodes(const QStringList &nameList) const { QStringList codeList; foreach (QString name, nameList) { codeList.append(hash.key(name)); @@ -32,7 +32,7 @@ QStringList Language::getCodes(QStringList nameList) { return codeList; } -void Language::readFromJsonFile(QString jsonFile) { +void Language::readFromJsonFile(const QString &jsonFile) { // Read JSON file. QString jsonString; QFile file; diff --git a/src/utils/language.h b/src/utils/language.h index ee1d9c5..c4603ae 100644 --- a/src/utils/language.h +++ b/src/utils/language.h @@ -32,35 +32,35 @@ class Language : public QObject { * @param code Language code. * @return Language name. */ - QString getName(QString code); + QString getName(const QString &code) const; /** * Get language code. * @param name Language name. * @return Language code. */ - QString getCode(QString name); + QString getCode(const QString &name) const; /** * Get the names of the languages. * @param codeList Language code list. * @return Language name list. */ - QStringList getLanguages(QStringList codeList); + QStringList getLanguages(const QStringList &codeList) const; /** * Get the codes of the languages. * @param nameList Language name list. * @return codeList Language code list. */ - QStringList getCodes(QStringList nameList); + QStringList getCodes(const QStringList &nameList) const; private: /** * Read language code and name from JSON file. * @param jsonFile JSON file path. */ - void readFromJsonFile(QString jsonFile = ":/resources/languages.json"); + void readFromJsonFile(const QString &jsonFile = ":/resources/languages.json"); QHash hash; // . }; From 19d9bc5c24390bad99886c8084de524f0842660d Mon Sep 17 00:00:00 2001 From: Ugnius Date: Thu, 14 Jun 2018 15:51:37 +0200 Subject: [PATCH 4/6] Added AppSettings and TempAPI classes. --- src/CMakeLists.txt | 4 ++ src/apis/tempapi.cpp | 38 ++++++++++++++++++ src/apis/tempapi.h | 44 ++++++++++++++++++++ src/dialogs/settingsdialog.cpp | 73 +++++++++++++++++----------------- src/dialogs/settingsdialog.h | 34 +++++++++------- src/dialogs/settingsdialog.ui | 2 +- src/mainwindow.cpp | 64 ++++++++++++++++++++++++----- src/mainwindow.h | 17 ++++++-- src/utils/appsettings.cpp | 54 +++++++++++++++++++++++++ src/utils/appsettings.h | 67 +++++++++++++++++++++++++++++++ 10 files changed, 331 insertions(+), 66 deletions(-) create mode 100644 src/apis/tempapi.cpp create mode 100644 src/apis/tempapi.h create mode 100644 src/utils/appsettings.cpp create mode 100644 src/utils/appsettings.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 19ae777..5cfb2e4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -42,11 +42,15 @@ set(SOURCE_FILES apis/api.h apis/googleapi.cpp apis/googleapi.h + apis/tempapi.cpp + apis/tempapi.h dialogs/settingsdialog.cpp dialogs/settingsdialog.h dialogs/settingsdialog.ui utils/apisettings.cpp utils/apisettings.h + utils/appsettings.cpp + utils/appsettings.h utils/language.cpp utils/language.h utils/requestmanager.cpp diff --git a/src/apis/tempapi.cpp b/src/apis/tempapi.cpp new file mode 100644 index 0000000..1da6359 --- /dev/null +++ b/src/apis/tempapi.cpp @@ -0,0 +1,38 @@ +#include "tempapi.h" + +TempAPI::TempAPI(QObject *parent) + : QObject(parent) { +} + +TempAPI::~TempAPI() { +} + +QString TempAPI::translate(const QString &input, + const QString &sourceLanguage, + const QString &targetLanguage) const { + if (input.isEmpty()) { + return QString(); + } + + QSettings settings; + QString key = settings.value("temp/key").toString(); + QString format = settings.value("temp/format").toString(); + + QString translation = "Some translation."; + + return translation; +} + +QStringList TempAPI::getSupportedLanguages() const { + QSettings settings; + QString key = settings.value("temp/key").toString(); + + QStringList languagesList; + + languagesList.append("en"); + languagesList.append("fr"); + languagesList.append("de"); + languagesList.append("lt"); + + return languagesList; +} diff --git a/src/apis/tempapi.h b/src/apis/tempapi.h new file mode 100644 index 0000000..c9010d9 --- /dev/null +++ b/src/apis/tempapi.h @@ -0,0 +1,44 @@ +#ifndef INSTANT_TRANSLATOR_TEMPAPI_H +#define INSTANT_TRANSLATOR_TEMPAPI_H + +#include +#include +#include "api.h" + +/** + * Temporary API implementation class. + */ +class TempAPI : public QObject, public API { +Q_OBJECT +Q_INTERFACES(API) +public: + /** + * Constructs an object with parent object parent. + * @param parent Parent of an object may be viewed as the object's owner. + */ + explicit TempAPI(QObject *parent = nullptr); + + /** + * Destructor. + */ + ~TempAPI() override; + + /** + * Translate given input. + * @param input Input string. + * @param sourceLanguage Source language code. + * @param targetLanguage Target language code. + * @return Translated string. + */ + QString translate(const QString &input, + const QString &sourceLanguage, + const QString &targetLanguage) const override; + + /** + * Get supported languages. + * @return Supported languages string list. + */ + QStringList getSupportedLanguages() const override; +}; + +#endif // INSTANT_TRANSLATOR_TEMPAPI_H diff --git a/src/dialogs/settingsdialog.cpp b/src/dialogs/settingsdialog.cpp index d02e0e8..c13c802 100644 --- a/src/dialogs/settingsdialog.cpp +++ b/src/dialogs/settingsdialog.cpp @@ -1,35 +1,29 @@ #include "settingsdialog.h" #include "ui_settingsdialog.h" -SettingsDialog::SettingsDialog(QWidget *parent) : +SettingsDialog::SettingsDialog(QWidget *parent, AppSettings *appSettings) : QDialog(parent), - ui(new Ui::SettingsDialog) { + ui(new Ui::SettingsDialog), + appSettings(appSettings) { ui->setupUi(this); - APISettings *googleAPISettings = new APISettings(this, "google", "Google Translate API"); - googleAPISettings->readSettings(); - apiSettingsList.append(googleAPISettings); - - APISettings *tempAPISettings = new APISettings(this, "temp", "Temp"); - tempAPISettings->readSettings(); - apiSettingsList.append(tempAPISettings); - - for (int i = 0; i < apiSettingsList.count(); ++i) { - QListWidgetItem *listWidgetItem = new QListWidgetItem(apiSettingsList.at(i)->getFullName()); - apiSettingsListWidgetItemList.append(listWidgetItem); - ui->apisListWidget->addItem(listWidgetItem); - } + loadSettings(); } SettingsDialog::~SettingsDialog() { delete ui; } +void SettingsDialog::setAppSettings(AppSettings *appSettings) { + this->appSettings = appSettings; + loadSettings(); +} + void SettingsDialog::on_apisListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous) { int currentIndex = apiSettingsListWidgetItemList.indexOf(current); if (currentIndex >= 0) { - APISettings *apiSettings = apiSettingsList.at(currentIndex); + APISettings *apiSettings = appSettings->getApiSettingsList().at(currentIndex); ui->apiKeyLineEdit->setText(apiSettings->getApiKey()); ui->defaultSourceLanguageLineEdit->setText(apiSettings->getDefaultSourceLanguage()); ui->defaultTargetLanguageLineEdit->setText(apiSettings->getDefaultTargetLanguage()); @@ -37,39 +31,46 @@ void SettingsDialog::on_apisListWidget_currentItemChanged(QListWidgetItem *curre } void SettingsDialog::on_settingsButtonBox_accepted() { - save(); + saveSettings(); } -void SettingsDialog::on_apiKeyLineEdit_textChanged() { - int currentIndex = apiSettingsListWidgetItemList.indexOf(ui->apisListWidget->currentItem()); - - if (currentIndex >= 0) { - APISettings *apiSettings = apiSettingsList.at(currentIndex); - apiSettings->setApiKey(ui->apiKeyLineEdit->text()); +void SettingsDialog::on_settingsButtonBox_clicked(QAbstractButton *button) { + if ((QPushButton *) button == ui->settingsButtonBox->button(QDialogButtonBox::Apply)) { + saveSettings(); } } -void SettingsDialog::on_defaultSourceLanguageLineEdit_textChanged() { +void SettingsDialog::saveSettings() { int currentIndex = apiSettingsListWidgetItemList.indexOf(ui->apisListWidget->currentItem()); if (currentIndex >= 0) { - APISettings *apiSettings = apiSettingsList.at(currentIndex); + APISettings *apiSettings = appSettings->getApiSettingsList().at(currentIndex); + apiSettings->setApiKey(ui->apiKeyLineEdit->text()); apiSettings->setDefaultSourceLanguage(ui->defaultSourceLanguageLineEdit->text()); + apiSettings->setDefaultTargetLanguage(ui->defaultTargetLanguageLineEdit->text()); } -} -void SettingsDialog::on_defaultTargetLanguageLineEdit_textChanged() { - int currentIndex = apiSettingsListWidgetItemList.indexOf(ui->apisListWidget->currentItem()); + int defaultApiIndex = ui->defaultApiComboBox->currentIndex(); + QString defaultApiName = appSettings->getApiSettingsList().at(defaultApiIndex)->getName(); + appSettings->setDefaultApi(defaultApiName); + + appSettings->save(); - if (currentIndex >= 0) { - APISettings *apiSettings = apiSettingsList.at(currentIndex); - apiSettings->setDefaultTargetLanguage(ui->defaultTargetLanguageLineEdit->text()); - } } -void SettingsDialog::save() { - for (int i = 0; i < apiSettingsList.count(); ++i) { - APISettings *apiSettings = apiSettingsList.at(i); - apiSettings->writeSettings(); +void SettingsDialog::loadSettings() { + for (int i = 0; i < appSettings->getApiSettingsList().count(); ++i) { + APISettings *apiSettings = appSettings->getApiSettingsList().at(i); + + QListWidgetItem *listWidgetItem = new QListWidgetItem(apiSettings->getFullName()); + apiSettingsListWidgetItemList.append(listWidgetItem); + ui->apisListWidget->addItem(listWidgetItem); + + ui->defaultApiComboBox->addItem(apiSettings->getFullName()); + QSettings settings; + QString defaultApiName = settings.value("default_api").toString(); + if (apiSettings->getName() == defaultApiName) { + ui->defaultApiComboBox->setCurrentIndex(i); + } } } diff --git a/src/dialogs/settingsdialog.h b/src/dialogs/settingsdialog.h index 6e96b78..6d13ca2 100644 --- a/src/dialogs/settingsdialog.h +++ b/src/dialogs/settingsdialog.h @@ -3,7 +3,10 @@ #include #include +#include +#include #include "utils/apisettings.h" +#include "utils/appsettings.h" namespace Ui { class SettingsDialog; @@ -19,14 +22,21 @@ Q_OBJECT /** * Constructs an object with parent object parent. * @param parent Parent of an object may be viewed as the object's owner. + * @param appSettings App settings. */ - explicit SettingsDialog(QWidget *parent = nullptr); + SettingsDialog(QWidget *parent, AppSettings *appSettings); /** * Destructor. */ ~SettingsDialog(); + /** + * Set App settings. + * @param appSettings App settings. + */ + void setAppSettings(AppSettings *appSettings); + private slots: /** @@ -42,28 +52,24 @@ private slots: void on_settingsButtonBox_accepted(); /** - * On apiKeyLineEdit is text changed. - */ - void on_apiKeyLineEdit_textChanged(); - - /** - * On apiKeyLineEdit is text changed. + * On settingsButtonBox is clicked; + * @param button Button. */ - void on_defaultSourceLanguageLineEdit_textChanged(); + void on_settingsButtonBox_clicked(QAbstractButton *button); +private: /** - * On apiKeyLineEdit is text changed. + * Save settings data. */ - void on_defaultTargetLanguageLineEdit_textChanged(); + void saveSettings(); -private: /** - * Save settings data. + * Load appSettings. */ - void save(); + void loadSettings(); Ui::SettingsDialog *ui; - QList apiSettingsList; + AppSettings *appSettings; QList apiSettingsListWidgetItemList; }; diff --git a/src/dialogs/settingsdialog.ui b/src/dialogs/settingsdialog.ui index 6aeabc5..1b103ea 100644 --- a/src/dialogs/settingsdialog.ui +++ b/src/dialogs/settingsdialog.ui @@ -26,7 +26,7 @@ Qt::Horizontal - QDialogButtonBox::Close|QDialogButtonBox::Ok + QDialogButtonBox::Apply|QDialogButtonBox::Close|QDialogButtonBox::Ok diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a6c559c..3480c39 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,5 +1,6 @@ #include "mainwindow.h" #include "ui_mainwindow.h" +#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -14,21 +15,33 @@ MainWindow::MainWindow(QWidget *parent) : this, &MainWindow::onClipboardDataChanged ); + // App settings. + appSettings = new AppSettings(this); - // Set Google Translator API. - api = new GoogleAPI(this); + APISettings *googleAPISettings = new APISettings(this, "google", "Google Translate API"); + googleAPISettings->readSettings(); + appSettings->addApiSettings(googleAPISettings); - // Load supported languages in the combo boxes. - loadLanguagesInComboBoxes(); + APISettings *tempAPISettings = new APISettings(this, "temp", "Temp API"); + tempAPISettings->readSettings(); + appSettings->addApiSettings(tempAPISettings); + + // Set default API. + QSettings settings; + appSettings->setDefaultApi(settings.value("default_api", "google").toString()); + + // Load API. + loadApi(); } MainWindow::~MainWindow() { // Save used translation languages. - QSettings settings; + APISettings *currentApiSettings = appSettings->getDefaultApi(); QString sourceLanguage = language.getCode(ui->sourceLanguagesComboBox->currentText()); QString targetLanguage = language.getCode(ui->targetLanguagesComboBox->currentText()); - settings.setValue("source", sourceLanguage); - settings.setValue("target", targetLanguage); + currentApiSettings->setDefaultSourceLanguage(sourceLanguage); + currentApiSettings->setDefaultTargetLanguage(targetLanguage); + appSettings->save(); delete ui; delete api; @@ -45,6 +58,30 @@ void MainWindow::onClipboardDataChanged() { doTranslation(); } +void MainWindow::loadApi() { + if (appSettings == nullptr) { + return; + } + + // TODO(ugnelis): Fix this. +// if (api != nullptr) { +// delete api; +// } + + APISettings *defaultApiSettings = appSettings->getDefaultApi(); + + if (defaultApiSettings->getName() == "google") { + api = new GoogleAPI(); + qDebug() << "google API"; + } else if (defaultApiSettings->getName() == "temp") { + api = new TempAPI(); + qDebug() << "temp API"; + } + + // Load supported languages in the combo boxes. + loadLanguagesInComboBoxes(); +} + void MainWindow::doTranslation() { QString inputString = ui->inputPlainTextEdit->toPlainText(); @@ -81,6 +118,10 @@ void MainWindow::swapLanguagesInComboBoxes() { } void MainWindow::loadLanguagesInComboBoxes() { + // Clear data from the combo boxes. + ui->sourceLanguagesComboBox->clear(); + ui->targetLanguagesComboBox->clear(); + // Get API supported languages. QFutureWatcher *futureWatcher = new QFutureWatcher(this); QFuture future = QtConcurrent::run( @@ -100,9 +141,9 @@ void MainWindow::loadLanguagesInComboBoxes() { ui->targetLanguagesComboBox->addItems(languageNameList); // Load saved translation languages. - QSettings settings; - QString sourceLanguage = settings.value("source", "de").toString(); - QString targetLanguage = settings.value("target", "en").toString(); + APISettings *defaultApiSettings = appSettings->getDefaultApi(); + QString sourceLanguage = defaultApiSettings->getDefaultSourceLanguage(); + QString targetLanguage = defaultApiSettings->getDefaultTargetLanguage(); // Set source language. int sourceLanguageIndex = languageCodeList.indexOf(sourceLanguage); @@ -168,9 +209,10 @@ void MainWindow::on_exitAction_triggered() { } void MainWindow::on_settingsAction_triggered() { - SettingsDialog *settingsDialog = new SettingsDialog(this); + SettingsDialog *settingsDialog = new SettingsDialog(this, appSettings); settingsDialog->setAttribute(Qt::WA_DeleteOnClose); settingsDialog->exec(); + loadApi(); } void MainWindow::on_translateButton_clicked() { diff --git a/src/mainwindow.h b/src/mainwindow.h index acd0d99..2df6540 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -8,11 +8,14 @@ #include #include #include +#include #include #include #include "apis/api.h" #include "apis/googleapi.h" +#include "apis/tempapi.h" #include "dialogs/settingsdialog.h" +#include "utils/appsettings.h" #include "utils/language.h" namespace Ui { @@ -65,6 +68,11 @@ private slots: void on_swapLanguagesButton_clicked(); private: + /** + * Load translation API. + */ + void loadApi(); + /** * Do translation. */ @@ -107,10 +115,11 @@ private slots: */ void showErrorBox(const QString &message); - Ui::MainWindow *ui; // MainWindow user interface. - QClipboard *clipboard; // Clipboard information. - API *api; // Translation API. - Language language; // Language. + Ui::MainWindow *ui; // MainWindow user interface. + QClipboard *clipboard; // Clipboard information. + API *api; // Translation API. + AppSettings *appSettings; // App settings. + Language language; // Language. }; #endif // INSTANT_TRANSLATOR_MAINWINDOW_H diff --git a/src/utils/appsettings.cpp b/src/utils/appsettings.cpp new file mode 100644 index 0000000..b978e65 --- /dev/null +++ b/src/utils/appsettings.cpp @@ -0,0 +1,54 @@ +#include "appsettings.h" + +AppSettings::AppSettings(QObject *parent) + : QObject(parent) { +} + +AppSettings::~AppSettings() { +} + +void AppSettings::addApiSettings(APISettings *apiSettings) { + apiSettings->readSettings(); + apiSettingsList.append(apiSettings); +} + +QList AppSettings::getApiSettingsList() const { + return apiSettingsList; +} + +void AppSettings::setDefaultApi(APISettings *apiSettings) { + int index = apiSettingsList.indexOf(apiSettings); + + if (index < 0) { + apiSettingsList.append(apiSettings); + } + defaultApi = apiSettings; +} + +void AppSettings::setDefaultApi(QString name) { + for (int i = 0; i < apiSettingsList.count(); ++i) { + if (apiSettingsList.at(i)->getName() == name) { + defaultApi = apiSettingsList.at(i); + return; + } + } + + std::string exceptionMessage = "API with name '" + name.toStdString() + "' does not exist"; + throw std::invalid_argument(exceptionMessage); +} + +APISettings *AppSettings::getDefaultApi() { + return defaultApi; +} + +void AppSettings::save() { + for (int i = 0; i < apiSettingsList.count(); ++i) { + APISettings *apiSettings = apiSettingsList.at(i); + apiSettings->writeSettings(); + } + + QSettings settings; + if (defaultApi != nullptr) { + settings.setValue("default_api", defaultApi->getName()); + } +} diff --git a/src/utils/appsettings.h b/src/utils/appsettings.h new file mode 100644 index 0000000..3b4db12 --- /dev/null +++ b/src/utils/appsettings.h @@ -0,0 +1,67 @@ +#ifndef INSTANT_TRANSLATOR_APPSETTINGS_H +#define INSTANT_TRANSLATOR_APPSETTINGS_H + +#include +#include +#include +#include +#include "utils/apisettings.h" + +/** + * App settings holder class. + */ +class AppSettings : public QObject { +public: + /** + * Constructs an object with parent object parent. + * @param parent Parent of an object may be viewed as the object's owner. + */ + explicit AppSettings(QObject *parent = nullptr); + + /** + * Destructor. + */ + ~AppSettings() override; + + /** + * Add API settings. + * @param apiSettings API settings. + */ + void addApiSettings(APISettings *apiSettings); + + /** + * Get API settings list. + * @return API settings list. + */ + QList getApiSettingsList() const; + + /** + * Set default API. + * @param apiSettings API settings. + */ + void setDefaultApi(APISettings *apiSettings); + + /** + * Set default API by giving name. + * @param name API name. + */ + void setDefaultApi(QString name); + + /** + * Get Default API settings. + * @return default API settings. + */ + APISettings *getDefaultApi(); + + /** + * Save app settings + */ + void save(); + +private: + QList apiSettingsList; + APISettings *defaultApi; +}; + + +#endif //INSTANT_TRANSLATOR_APPSETTINGS_H From 8e4e1422ed8b2f8aa58e717fae5006cf338bda84 Mon Sep 17 00:00:00 2001 From: Ugnius Date: Fri, 15 Jun 2018 08:57:58 +0200 Subject: [PATCH 5/6] Refactored code a bit. --- src/main.cpp | 22 +++++++++++++++++++++- src/mainwindow.cpp | 22 +++------------------- src/mainwindow.h | 3 ++- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index ebc5a5d..9364fc9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,6 +2,8 @@ #include #include #include "mainwindow.h" +#include "utils/apisettings.h" +#include "utils/appsettings.h" int main(int argc, char *argv[]) { // Logging tool. @@ -14,7 +16,25 @@ int main(int argc, char *argv[]) { QApplication::setOrganizationName("instant_translator"); QApplication::setApplicationName("instant_translator"); - MainWindow mainWindow; + // App settings. + AppSettings *appSettings = new AppSettings(); + appSettings->setParent(&application); + + // APIs definition. + APISettings *googleAPISettings = new APISettings(appSettings, "google", "Google Translate API"); + googleAPISettings->readSettings(); + appSettings->addApiSettings(googleAPISettings); + + APISettings *tempAPISettings = new APISettings(appSettings, "temp", "Temp API"); + tempAPISettings->readSettings(); + appSettings->addApiSettings(tempAPISettings); + + // Set default API. + QSettings settings; + appSettings->setDefaultApi(settings.value("default_api", "google").toString()); + + // Main window. + MainWindow mainWindow(nullptr, appSettings); mainWindow.show(); return application.exec(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 3480c39..eb064cc 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,10 +1,10 @@ #include "mainwindow.h" #include "ui_mainwindow.h" -#include -MainWindow::MainWindow(QWidget *parent) : +MainWindow::MainWindow(QWidget *parent, AppSettings *appSettings) : QMainWindow(parent), - ui(new Ui::MainWindow) { + ui(new Ui::MainWindow), + appSettings(appSettings) { ui->setupUi(this); clipboard = QApplication::clipboard(); @@ -15,20 +15,6 @@ MainWindow::MainWindow(QWidget *parent) : this, &MainWindow::onClipboardDataChanged ); - // App settings. - appSettings = new AppSettings(this); - - APISettings *googleAPISettings = new APISettings(this, "google", "Google Translate API"); - googleAPISettings->readSettings(); - appSettings->addApiSettings(googleAPISettings); - - APISettings *tempAPISettings = new APISettings(this, "temp", "Temp API"); - tempAPISettings->readSettings(); - appSettings->addApiSettings(tempAPISettings); - - // Set default API. - QSettings settings; - appSettings->setDefaultApi(settings.value("default_api", "google").toString()); // Load API. loadApi(); @@ -72,10 +58,8 @@ void MainWindow::loadApi() { if (defaultApiSettings->getName() == "google") { api = new GoogleAPI(); - qDebug() << "google API"; } else if (defaultApiSettings->getName() == "temp") { api = new TempAPI(); - qDebug() << "temp API"; } // Load supported languages in the combo boxes. diff --git a/src/mainwindow.h b/src/mainwindow.h index 2df6540..c9b63dc 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -32,8 +32,9 @@ Q_OBJECT /** * Constructs an object with parent object parent. * @param parent Parent of an object may be viewed as the object's owner. + * @param appSettings App settings. */ - explicit MainWindow(QWidget *parent = nullptr); + explicit MainWindow(QWidget *parent, AppSettings *appSettings); /** * Destructor. From 30c80d812bd237e767ada06f1d4c08ccabd6c916 Mon Sep 17 00:00:00 2001 From: Ugnius Date: Fri, 15 Jun 2018 10:52:30 +0200 Subject: [PATCH 6/6] Added APISettings tests. --- tests/CMakeLists.txt | 3 + tests/utils/apisettings_test.cpp | 133 +++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 tests/utils/apisettings_test.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7665df0..0f893ad 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -33,6 +33,9 @@ include_directories("${PROJECT_SOURCE_DIR}/src") # Source files. set(SOURCE_FILES + utils/apisettings_test.cpp + ${PROJECT_SOURCE_DIR}/src/utils/apisettings.cpp + ${PROJECT_SOURCE_DIR}/src/utils/apisettings.h utils/customnetworkreply_test.cpp ${PROJECT_SOURCE_DIR}/src/utils/customnetworkreply.cpp ${PROJECT_SOURCE_DIR}/src/utils/customnetworkreply.h diff --git a/tests/utils/apisettings_test.cpp b/tests/utils/apisettings_test.cpp new file mode 100644 index 0000000..4eb6655 --- /dev/null +++ b/tests/utils/apisettings_test.cpp @@ -0,0 +1,133 @@ +#include +#include +#include +#include +#include "utils/apisettings.h" + +TEST(APISettingsTests, APISettings_checkIfValuesIsNotSet_True) { + APISettings apiSettings; + ASSERT_EQ("", apiSettings.getName()); + ASSERT_EQ("", apiSettings.getFullName()); + ASSERT_EQ("", apiSettings.getApiKey()); + ASSERT_EQ("", apiSettings.getTextType()); + ASSERT_EQ("", apiSettings.getDefaultSourceLanguage()); + ASSERT_EQ("", apiSettings.getDefaultTargetLanguage()); +} + +TEST(APISettingsTests, APISettings_checkIfValuesIsSet_True) { + APISettings apiSettings(nullptr, "google", "Google Translate API"); + ASSERT_EQ("google", apiSettings.getName()); + ASSERT_EQ("Google Translate API", apiSettings.getFullName()); + ASSERT_EQ("", apiSettings.getApiKey()); + ASSERT_EQ("", apiSettings.getTextType()); + ASSERT_EQ("", apiSettings.getDefaultSourceLanguage()); + ASSERT_EQ("", apiSettings.getDefaultTargetLanguage()); +} + +TEST(APISettingsTests, setName_checkIfNameIsSet_True) { + APISettings apiSettings; + apiSettings.setName("google"); + + ASSERT_EQ("google", apiSettings.getName()); +} + +TEST(APISettingsTests, setFullName_checkIfFullNameIsSet_True) { + APISettings apiSettings; + apiSettings.setFullName("Google Translate API"); + + ASSERT_EQ("Google Translate API", apiSettings.getFullName()); +} + +TEST(APISettingsTests, setApiKey_checkIfApiKeyIsSet_True) { + APISettings apiSettings; + apiSettings.setApiKey("API_KEY"); + + ASSERT_EQ("API_KEY", apiSettings.getApiKey()); +} + +TEST(APISettingsTests, setTextType_checkIfTextTypeIsSet_True) { + APISettings apiSettings; + apiSettings.setTextType("text"); + + ASSERT_EQ("text", apiSettings.getTextType()); +} + +TEST(APISettingsTests, getDefaultSourceLanguage_checkIfDefaultSourceLanguageIsSet_True) { + APISettings apiSettings; + apiSettings.setDefaultSourceLanguage("lt"); + + ASSERT_EQ("lt", apiSettings.getDefaultSourceLanguage()); +} + +TEST(APISettingsTests, getDefaultTargetLanguage_checkIfDefaultTargetLanguageIsSet_True) { + APISettings apiSettings; + apiSettings.setDefaultTargetLanguage("en"); + + ASSERT_EQ("en", apiSettings.getDefaultTargetLanguage()); +} + + +TEST(APISettingsTests, readSettings_checkIfValuesAreRead_True_True) { + QSettings::setDefaultFormat(QSettings::IniFormat); + QApplication::setOrganizationName("instant_translator"); + QApplication::setApplicationName("unit_tests"); + + QSettings settings; + + QString name = "test"; + QString fullName = "Test"; + QString apiKey = "SOME_API_KEY"; + QString textType = "html"; + QString defaultSourceLanguage = "lv"; + QString defaultTargetLanguage = "et"; + settings.setValue(name + "/key", apiKey); + settings.setValue(name + "/text_type", textType); + settings.setValue(name + "/source", defaultSourceLanguage); + settings.setValue(name + "/target", defaultTargetLanguage); + + APISettings apiSettings(nullptr, name, fullName); + apiSettings.readSettings(); + + settings.clear(); + + ASSERT_EQ(name, apiSettings.getName()); + ASSERT_EQ(fullName, apiSettings.getFullName()); + ASSERT_EQ("SOME_API_KEY", apiSettings.getApiKey()); + ASSERT_EQ(textType, apiSettings.getTextType()); + ASSERT_EQ(defaultSourceLanguage, apiSettings.getDefaultSourceLanguage()); + ASSERT_EQ(defaultTargetLanguage, apiSettings.getDefaultTargetLanguage()); +} + +TEST(APISettingsTests, writeSettings_checkIfValuesAreWritten) { + QSettings::setDefaultFormat(QSettings::IniFormat); + QApplication::setOrganizationName("instant_translator"); + QApplication::setApplicationName("unit_tests"); + + QSettings settings; + + QString name = "test"; + QString fullName = "Test"; + QString apiKey = "SOME_API_KEY"; + QString textType = "html"; + QString defaultSourceLanguage = "lv"; + QString defaultTargetLanguage = "et"; + + APISettings apiSettings(nullptr, name, fullName); + apiSettings.setApiKey(apiKey); + apiSettings.setTextType(textType); + apiSettings.setDefaultSourceLanguage(defaultSourceLanguage); + apiSettings.setDefaultTargetLanguage(defaultTargetLanguage); + apiSettings.writeSettings(); + + QString actualApiKey = settings.value(name + "/key").toString(); + QString actualTextType = settings.value(name + "/text_type").toString(); + QString actualDefaultSourceLanguage = settings.value(name + "/source").toString(); + QString actualDefaultTargetLanguage = settings.value(name + "/target").toString(); + + settings.clear(); + + ASSERT_EQ(apiKey, actualApiKey); + ASSERT_EQ(textType, actualTextType); + ASSERT_EQ(defaultSourceLanguage, actualDefaultSourceLanguage); + ASSERT_EQ(defaultTargetLanguage, actualDefaultTargetLanguage); +}