Skip to content

Commit

Permalink
Added AppSettings and TempAPI classes.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ugnius committed Jun 14, 2018
1 parent b33a60d commit 19d9bc5
Show file tree
Hide file tree
Showing 10 changed files with 331 additions and 66 deletions.
4 changes: 4 additions & 0 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
38 changes: 38 additions & 0 deletions src/apis/tempapi.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
44 changes: 44 additions & 0 deletions src/apis/tempapi.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#ifndef INSTANT_TRANSLATOR_TEMPAPI_H
#define INSTANT_TRANSLATOR_TEMPAPI_H

#include <QObject>
#include <QSettings>
#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
73 changes: 37 additions & 36 deletions src/dialogs/settingsdialog.cpp
Original file line number Diff line number Diff line change
@@ -1,75 +1,76 @@
#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());
}
}

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);
}
}
}
34 changes: 20 additions & 14 deletions src/dialogs/settingsdialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@

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

namespace Ui {
class SettingsDialog;
Expand All @@ -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:

/**
Expand All @@ -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<APISettings *> apiSettingsList;
AppSettings *appSettings;
QList<QListWidgetItem *> apiSettingsListWidgetItemList;
};

Expand Down
2 changes: 1 addition & 1 deletion src/dialogs/settingsdialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::Apply|QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
</property>
</widget>
<widget class="QGroupBox" name="apiGroupBox">
Expand Down

0 comments on commit 19d9bc5

Please sign in to comment.