Skip to content

Commit

Permalink
Merge d158bfd into c7681cd
Browse files Browse the repository at this point in the history
  • Loading branch information
ugnelis committed Jun 19, 2018
2 parents c7681cd + d158bfd commit 62cf5ec
Show file tree
Hide file tree
Showing 26 changed files with 1,212 additions and 59 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
12 changes: 11 additions & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -39,9 +39,19 @@ qt5_add_resources(RESOURCE_FILES_ADDED ${RESOURCE_FILES})

# Source files.
set(SOURCE_FILES
apis/api.cpp
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
5 changes: 5 additions & 0 deletions src/apis/api.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#include "api.h"

API::API(QObject *parent)
: QObject(parent) {
}
12 changes: 6 additions & 6 deletions src/apis/api.h
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
#ifndef INSTANT_TRANSLATOR_API_H
#define INSTANT_TRANSLATOR_API_H

#include <QtPlugin>
#include <QObject>
#include <QString>
#include <QStringList>

/**
* Abstract class for API classes.
*/
class API {
class API : public QObject {
Q_OBJECT
public:
/**
* Destructor.
* Constructs an object with parent object parent.
* @param parent Parent of an object may be viewed as the object's owner.
*/
virtual ~API() {}
explicit API(QObject *parent = nullptr);

/**
* Translate given input.
Expand All @@ -33,6 +35,4 @@ class API {
virtual QStringList getSupportedLanguages() const = 0;
};

Q_DECLARE_INTERFACE(API, "API")

#endif // INSTANT_TRANSLATOR_API_H
6 changes: 3 additions & 3 deletions src/apis/googleapi.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include "googleapi.h"

GoogleAPI::GoogleAPI(QObject *parent)
: QObject(parent) {
: API(parent) {
}

GoogleAPI::~GoogleAPI() {
Expand All @@ -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
5 changes: 1 addition & 4 deletions src/apis/googleapi.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
#define INSTANT_TRANSLATOR_GOOGLEAPI_H

#include <stdexcept>
#include <QObject>
#include <QSettings>
#include <QJsonDocument>
#include <QJsonObject>
Expand All @@ -13,9 +12,7 @@
/**
* Google Translate API implementation class.
*/
class GoogleAPI : public QObject, public API {
Q_OBJECT
Q_INTERFACES(API)
class GoogleAPI : public API {
public:
/**
* Constructs an object with parent object parent.
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)
: API(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;
}
41 changes: 41 additions & 0 deletions src/apis/tempapi.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#ifndef INSTANT_TRANSLATOR_TEMPAPI_H
#define INSTANT_TRANSLATOR_TEMPAPI_H

#include <QSettings>
#include "api.h"

/**
* Temporary API implementation class.
*/
class TempAPI : public 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
76 changes: 76 additions & 0 deletions src/dialogs/settingsdialog.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#include "settingsdialog.h"
#include "ui_settingsdialog.h"

SettingsDialog::SettingsDialog(QWidget *parent, AppSettings *appSettings) :
QDialog(parent),
ui(new Ui::SettingsDialog),
appSettings(appSettings) {
ui->setupUi(this);

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 = appSettings->getApiSettingsList().at(currentIndex);
ui->apiKeyLineEdit->setText(apiSettings->getApiKey());
ui->defaultSourceLanguageLineEdit->setText(apiSettings->getDefaultSourceLanguage());
ui->defaultTargetLanguageLineEdit->setText(apiSettings->getDefaultTargetLanguage());
}
}

void SettingsDialog::on_settingsButtonBox_accepted() {
saveSettings();
}

void SettingsDialog::on_settingsButtonBox_clicked(QAbstractButton *button) {
if ((QPushButton *) button == ui->settingsButtonBox->button(QDialogButtonBox::Apply)) {
saveSettings();
}
}

void SettingsDialog::saveSettings() {
int currentIndex = apiSettingsListWidgetItemList.indexOf(ui->apisListWidget->currentItem());

if (currentIndex >= 0) {
APISettings *apiSettings = appSettings->getApiSettingsList().at(currentIndex);
apiSettings->setApiKey(ui->apiKeyLineEdit->text());
apiSettings->setDefaultSourceLanguage(ui->defaultSourceLanguageLineEdit->text());
apiSettings->setDefaultTargetLanguage(ui->defaultTargetLanguageLineEdit->text());
}

int defaultApiIndex = ui->defaultApiComboBox->currentIndex();
QString defaultApiName = appSettings->getApiSettingsList().at(defaultApiIndex)->getName();
appSettings->setDefaultApi(defaultApiName);

appSettings->save();

}

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);
}
}
}
76 changes: 76 additions & 0 deletions src/dialogs/settingsdialog.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#ifndef INSTANT_TRANSLATOR_SETTINGSDIALOG_H
#define INSTANT_TRANSLATOR_SETTINGSDIALOG_H

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

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.
* @param appSettings App settings.
*/
SettingsDialog(QWidget *parent, AppSettings *appSettings);

/**
* Destructor.
*/
~SettingsDialog();

/**
* Set App settings.
* @param appSettings App settings.
*/
void setAppSettings(AppSettings *appSettings);

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 settingsButtonBox is clicked;
* @param button Button.
*/
void on_settingsButtonBox_clicked(QAbstractButton *button);

private:
/**
* Save settings data.
*/
void saveSettings();

/**
* Load appSettings.
*/
void loadSettings();

Ui::SettingsDialog *ui;
AppSettings *appSettings;
QList<QListWidgetItem *> apiSettingsListWidgetItemList;
};

#endif // INSTANT_TRANSLATOR_SETTINGSDIALOG_H

0 comments on commit 62cf5ec

Please sign in to comment.