Skip to content

Commit

Permalink
Added APISettings class. Implemented functionality of Settings Dialog.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ugnius committed Jun 14, 2018
1 parent 647986e commit b33a60d
Show file tree
Hide file tree
Showing 13 changed files with 326 additions and 23 deletions.
2 changes: 2 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions src/apis/googleapi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down Expand Up @@ -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.
Expand Down
63 changes: 63 additions & 0 deletions src/dialogs/settingsdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}
38 changes: 38 additions & 0 deletions src/dialogs/settingsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#define INSTANT_TRANSLATOR_SETTINGSDIALOG_H

#include <QDialog>
#include <QListWidgetItem>
#include "utils/apisettings.h"

namespace Ui {
class SettingsDialog;
Expand All @@ -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<APISettings *> apiSettingsList;
QList<QListWidgetItem *> apiSettingsListWidgetItemList;
};

#endif // INSTANT_TRANSLATOR_SETTINGSDIALOG_H
2 changes: 1 addition & 1 deletion src/dialogs/settingsdialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
<property name="title">
<string>APIs Settings</string>
</property>
<widget class="QListWidget" name="apisList">
<widget class="QListWidget" name="apisListWidget">
<property name="geometry">
<rect>
<x>10</x>
Expand Down
8 changes: 3 additions & 5 deletions src/mainwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ MainWindow::MainWindow(QWidget *parent) :

// Load supported languages in the combo boxes.
loadLanguagesInComboBoxes();

settingsDialog = new SettingsDialog(this);
}

MainWindow::~MainWindow() {
Expand Down Expand Up @@ -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() {
Expand Down
1 change: 0 additions & 1 deletion src/mainwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
1 change: 0 additions & 1 deletion src/resources.qrc
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file>resources/configs/api.ini</file>
<file>resources/languages.json</file>
</qresource>
</RCC>
3 changes: 0 additions & 3 deletions src/resources/configs/api.ini

This file was deleted.

82 changes: 82 additions & 0 deletions src/utils/apisettings.cpp
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit b33a60d

Please sign in to comment.