From a023fd20443b8627dfc7f2251ca2da32ba088fac Mon Sep 17 00:00:00 2001 From: pavelpa Date: Fri, 29 Jan 2010 14:16:05 +0000 Subject: [PATCH] implemented 'proxy settings' dialog - user can secify proxy for network communication --- src/app/app.pro | 5 +- src/app/appsettings.cpp | 40 ++++++++++++ src/app/appsettings.h | 25 ++++++++ src/gui/gui.pro | 9 ++- src/gui/importschedulewidget.cpp | 29 +++++++-- src/gui/importschedulewidget.h | 1 + src/gui/importschedulewidget.ui | 12 +++- src/gui/mainwindow.cpp | 14 ++-- src/gui/proxysettingsdialog.cpp | 37 +++++++++++ src/gui/proxysettingsdialog.h | 19 ++++++ src/gui/proxysettingsdialog.ui | 106 +++++++++++++++++++++++++++++++ 11 files changed, 282 insertions(+), 15 deletions(-) create mode 100644 src/app/appsettings.cpp create mode 100644 src/app/appsettings.h create mode 100644 src/gui/proxysettingsdialog.cpp create mode 100644 src/gui/proxysettingsdialog.h create mode 100644 src/gui/proxysettingsdialog.ui diff --git a/src/app/app.pro b/src/app/app.pro index ab788f7..10ef88b 100644 --- a/src/app/app.pro +++ b/src/app/app.pro @@ -16,7 +16,10 @@ maemo { TARGETDEPS += $$DESTDIR/libqalarm.a } -SOURCES += main.cpp +HEADERS += appsettings.h + +SOURCES += main.cpp \ + appsettings.cpp RESOURCES += ../icons.qrc \ ../maps.qrc diff --git a/src/app/appsettings.cpp b/src/app/appsettings.cpp new file mode 100644 index 0000000..2d48066 --- /dev/null +++ b/src/app/appsettings.cpp @@ -0,0 +1,40 @@ +#include "appsettings.h" + +const QString PROXY_ADDRESS_SETTING ("proxyAddress"); +const QString PROXY_PORT_SETTING ("proxyPort"); +const QString PROXY_ISDIRECT_SETTING ("proxyIsDirectConnection"); + +QSettings AppSettings::mSettings("Ixonos", "FOSDEM"); + + + +QString AppSettings::proxyAddress() +{ + return mSettings.value(PROXY_ADDRESS_SETTING).toString(); +} + +quint16 AppSettings::proxyPort() +{ + return mSettings.value(PROXY_PORT_SETTING).toUInt(); +} + +bool AppSettings::isDirectConnection() +{ + return mSettings.value(PROXY_ISDIRECT_SETTING).toBool(); +} + +void AppSettings::setProxyAddress(const QString &aAddress) +{ + mSettings.setValue(PROXY_ADDRESS_SETTING, aAddress); +} + +void AppSettings::setProxyPort(const quint16 aPort) +{ + mSettings.setValue(PROXY_PORT_SETTING, aPort); +} + +void AppSettings::setDirectConnection(bool aDirectConnection) +{ + mSettings.setValue(PROXY_ISDIRECT_SETTING, aDirectConnection); +} + diff --git a/src/app/appsettings.h b/src/app/appsettings.h new file mode 100644 index 0000000..efae165 --- /dev/null +++ b/src/app/appsettings.h @@ -0,0 +1,25 @@ + +#ifndef APPSETTINGS_H +#define APPSETTINGS_H + +#include +#include + +class AppSettings +{ + private: + AppSettings() {} + static QSettings mSettings; + + public: + static QString proxyAddress(); + static quint16 proxyPort(); + static bool isDirectConnection(); + + static void setProxyAddress(const QString &aAddress); + static void setProxyPort(const quint16 aPort); + static void setDirectConnection(bool aDirectConnection); +}; + +#endif /* APPSETTINGS_H */ + diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 5d4cfc7..5ce8c02 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -44,7 +44,8 @@ FORMS += searchhead.ui \ eventdialog.ui \ conflictsdialog.ui \ tabcontainer.ui \ - mapwindow.ui + mapwindow.ui \ + proxysettingsdialog.ui HEADERS += roomstabcontainer.h \ nowtabcontainer.h \ @@ -61,7 +62,8 @@ HEADERS += roomstabcontainer.h \ eventdialog.h \ tabwidget.h \ tabcontainer.h \ - mapwindow.h + mapwindow.h \ + proxysettingsdialog.h SOURCES += roomstabcontainer.cpp \ nowtabcontainer.cpp \ @@ -78,7 +80,8 @@ SOURCES += roomstabcontainer.cpp \ eventdialog.cpp \ tabwidget.cpp \ tabcontainer.cpp \ - mapwindow.cpp + mapwindow.cpp \ + proxysettingsdialog.cpp maemo { FORMS += alarmdialog.ui diff --git a/src/gui/importschedulewidget.cpp b/src/gui/importschedulewidget.cpp index 379aa67..32a9c30 100644 --- a/src/gui/importschedulewidget.cpp +++ b/src/gui/importschedulewidget.cpp @@ -1,6 +1,7 @@ #include "importschedulewidget.h" #include +#include "proxysettingsdialog.h" #include #include @@ -9,9 +10,13 @@ #include #include #include +#include const QString SCHEDULE_URL = "http://fosdem.org/2010/schedule/xml"; +const QString PROXY_USERNAME; +const QString PROXY_PASSWD; + ImportScheduleWidget::ImportScheduleWidget(QWidget *aParent) : QWidget(aParent) { @@ -28,6 +33,7 @@ ImportScheduleWidget::ImportScheduleWidget(QWidget *aParent) importAction->hide(); connect(online, SIGNAL(clicked()), SLOT(downloadSchedule())); + connect(proxySettings, SIGNAL(clicked()), SLOT(setupProxy())); mNetworkAccessManager = new QNetworkAccessManager(this); connect(mNetworkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(networkQueryFinished(QNetworkReply*))); mNetworkAccessManager->setProxy(QNetworkProxy::applicationProxy()); @@ -80,8 +86,6 @@ void ImportScheduleWidget::browseSchedule() void ImportScheduleWidget::networkQueryFinished(QNetworkReply *aReply) { - qDebug() << "ImportScheduleWidget::networkQueryFinished()"; - if ( aReply->error() != QNetworkReply::NoError ) { qDebug() << "Error occured during download: " << aReply->errorString(); @@ -94,8 +98,6 @@ void ImportScheduleWidget::networkQueryFinished(QNetworkReply *aReply) void ImportScheduleWidget::downloadSchedule() { - qDebug() << "downloading schedule"; - QNetworkRequest request; request.setUrl(QUrl(SCHEDULE_URL)); mNetworkAccessManager->get(request); @@ -106,14 +108,33 @@ void ImportScheduleWidget::importData(const QByteArray &aData) browse->hide(); online->hide(); progressBar->show(); + proxySettings->hide(); int confId = mXmlParser->parseData(aData); progressBar->hide(); browse->show(); online->show(); + proxySettings->show(); importScheduleLabel->setText("Import schedule: "); emit(scheduleImported(confId)); } +void ImportScheduleWidget::setupProxy() +{ + ProxySettingsDialog dialog; + dialog.exec(); + + qDebug() << "Setting-up proxy: " << AppSettings::proxyAddress() << ":" << AppSettings::proxyPort(); + QNetworkProxy proxy( + AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy, + AppSettings::proxyAddress(), + AppSettings::proxyPort(), + PROXY_USERNAME, + PROXY_PASSWD); + QNetworkProxy::setApplicationProxy(proxy); + + mNetworkAccessManager->setProxy(QNetworkProxy::applicationProxy()); +} + diff --git a/src/gui/importschedulewidget.h b/src/gui/importschedulewidget.h index 302dc06..e337b9d 100644 --- a/src/gui/importschedulewidget.h +++ b/src/gui/importschedulewidget.h @@ -20,6 +20,7 @@ class ImportScheduleWidget : public QWidget, Ui::ImportScheduleWidget void showParsingProgress(int progress); void networkQueryFinished(QNetworkReply *aReply); void downloadSchedule(); + void setupProxy(); signals: void scheduleImported(int confId); private: diff --git a/src/gui/importschedulewidget.ui b/src/gui/importschedulewidget.ui index c2ee410..a961055 100644 --- a/src/gui/importschedulewidget.ui +++ b/src/gui/importschedulewidget.ui @@ -5,7 +5,7 @@ 0 0 - 634 + 662 66 @@ -67,6 +67,16 @@ + + + + ... + + + true + + + diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 71440db..15f5071 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -21,21 +21,23 @@ #include "mapwindow.h" #include +#include -const QString PROXY_URL("192.168.0.252"); -const quint16 PROXY_PORT = 4040; const QString PROXY_USERNAME; const QString PROXY_PASSWD; -const bool DIRECT_CONNECTION = false; MainWindow::MainWindow(int aEventId, QWidget *aParent) : QMainWindow(aParent) { setupUi(this); - qDebug() << "Setting-up proxy: " << PROXY_URL << ":" << PROXY_PORT; - QNetworkProxy proxy(DIRECT_CONNECTION ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy, - PROXY_URL, PROXY_PORT, PROXY_USERNAME, PROXY_PASSWD); + qDebug() << "Setting-up proxy: " << AppSettings::proxyAddress() << ":" << AppSettings::proxyPort(); + QNetworkProxy proxy( + AppSettings::isDirectConnection() ? QNetworkProxy::NoProxy : QNetworkProxy::HttpProxy, + AppSettings::proxyAddress(), + AppSettings::proxyPort(), + PROXY_USERNAME, + PROXY_PASSWD); QNetworkProxy::setApplicationProxy(proxy); int confId = Conference::activeConference(); diff --git a/src/gui/proxysettingsdialog.cpp b/src/gui/proxysettingsdialog.cpp new file mode 100644 index 0000000..54c5c29 --- /dev/null +++ b/src/gui/proxysettingsdialog.cpp @@ -0,0 +1,37 @@ +#include "proxysettingsdialog.h" + +#include +#include + +ProxySettingsDialog::ProxySettingsDialog(QWidget *aParent) + : QDialog(aParent) +{ + setupUi(this); + + // deserialize dialog data + address->setText(AppSettings::proxyAddress()); + port->setValue(AppSettings::proxyPort()); + directConnection->setChecked(AppSettings::isDirectConnection()); + + connect(okButton, SIGNAL(clicked()), SLOT(saveDialogData())); + connect(directConnection, SIGNAL(clicked(bool)), SLOT(connectionTypeChanged(bool))); + + if(directConnection->isChecked()) + proxyWidget->hide(); +} + +void ProxySettingsDialog::connectionTypeChanged(bool aState) +{ + aState ? proxyWidget->hide() : proxyWidget->show(); +} + +void ProxySettingsDialog::saveDialogData() +{ + // serialize dialog data + AppSettings::setProxyAddress(address->text()); + AppSettings::setProxyPort(port->value()); + AppSettings::setDirectConnection(directConnection->isChecked()); + + close(); +} + diff --git a/src/gui/proxysettingsdialog.h b/src/gui/proxysettingsdialog.h new file mode 100644 index 0000000..59bc57c --- /dev/null +++ b/src/gui/proxysettingsdialog.h @@ -0,0 +1,19 @@ +#ifndef PROXYSETTINGSDIALOG_H +#define PROXYSETTINGSDIALOG_H + +#include +#include "ui_proxysettingsdialog.h" + +class ProxySettingsDialog : public QDialog, Ui::ProxySettingsDialog +{ + Q_OBJECT +public: + ProxySettingsDialog(QWidget *aParent = NULL); + ~ProxySettingsDialog() {} +private slots: + void connectionTypeChanged(bool aState); + void saveDialogData(); +}; + +#endif /* PROXYSETTINGSDIALOG_H */ + diff --git a/src/gui/proxysettingsdialog.ui b/src/gui/proxysettingsdialog.ui new file mode 100644 index 0000000..2b85c58 --- /dev/null +++ b/src/gui/proxysettingsdialog.ui @@ -0,0 +1,106 @@ + + ProxySettingsDialog + + + + 0 + 0 + 469 + 146 + + + + + 0 + 0 + + + + Proxy settings + + + + + + Direct connection + + + true + + + + + + + + + + Address: + + + + + + + + + + Port: + + + + + + + 9999 + + + 8080 + + + + + + + + + + Qt::Vertical + + + + 20 + 10 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + + + + -- 2.39.5