diff options
| author | Anton <anton@picapica> | 2017-12-01 21:55:53 +0400 |
|---|---|---|
| committer | Anton <anton@picapica> | 2017-12-01 21:55:53 +0400 |
| commit | ac041927bc0c82e33acaa9e15fd46ecca0b77172 (patch) | |
| tree | 742f1bf43917e79dae43c78684a2a3d055214e76 /pica-client/dialogs | |
| parent | 32e742ed040c5a70edb4cbfb947581f1e192d5a6 (diff) | |
| parent | 9c0a5bf2bbd94539427ece7eb1cb8ea82c6c3dec (diff) | |
| download | pica-pica-ac041927bc0c82e33acaa9e15fd46ecca0b77172.tar.gz pica-pica-ac041927bc0c82e33acaa9e15fd46ecca0b77172.zip | |
Merge branch 'direct_c2c_connections'
Diffstat (limited to 'pica-client/dialogs')
| -rw-r--r-- | pica-client/dialogs/settingsdialog.cpp | 168 | ||||
| -rw-r--r-- | pica-client/dialogs/settingsdialog.h | 44 |
2 files changed, 212 insertions, 0 deletions
diff --git a/pica-client/dialogs/settingsdialog.cpp b/pica-client/dialogs/settingsdialog.cpp new file mode 100644 index 0000000..852cc95 --- /dev/null +++ b/pica-client/dialogs/settingsdialog.cpp @@ -0,0 +1,168 @@ +#include "settingsdialog.h" +#include "../settings.h" +#include "../globals.h" + +#include <QGroupBox> +#include <QVBoxLayout> +#include <QHBoxLayout> +#include <QLabel> +#include <QVariant> +#include <QListWidget> +#include <QNetworkInterface> +#include <QHostAddress> +#include <QTabWidget> + +SettingsDialog::SettingsDialog(QWidget *parent) : + QDialog(parent) +{ + QVBoxLayout *settingsLayout = new QVBoxLayout(); + + QTabWidget *tabW = new QTabWidget(this); + QWidget* directc2ctab = new QWidget(0); + QWidget* soundstab = new QWidget(0); + + //QGroupBox *groupBox = new QGroupBox(tr("Direct Connections"), directc2ctab); + QVBoxLayout *directc2cLayout = new QVBoxLayout(); + + rbDisableDirectConns = new QRadioButton(tr("Disable direct connections"), this); + rbEnableOutgoingConns = new QRadioButton(tr("Connect to the remote peer directly if possible"), this); + rbEnableIncomingConns = new QRadioButton(tr("Enable incoming direct connections"), this); + + rbEnableIncomingConns->setChecked(true); + connect(rbEnableIncomingConns, SIGNAL(toggled(bool)), this, SLOT(toggleIncomingConnections(bool))); + + QLabel *lbAddr = new QLabel(tr("Public address for incoming connections"), this); + addr = new QComboBox(this); + QLabel *lbPubPort = new QLabel(tr("External TCP port for incoming connections"), this); + publicPort = new QSpinBox(this); + QLabel *lbLocPort = new QLabel(tr("Local TCP port for incoming connections"), this); + localPort = new QSpinBox(this); + + addr->setEditable(true); + + publicPort->setRange(1, 65535); + localPort->setRange(1, 65535); + + publicPort->setValue(2298); + localPort->setValue(2298); + + QList<QHostAddress> hostIfAddrs = QNetworkInterface::allAddresses(); + QHostAddress ifAddr; + + foreach (ifAddr, hostIfAddrs) + if (ifAddr.protocol() == QAbstractSocket::IPv4Protocol) + addr->addItem(ifAddr.toString()); + + + directc2cLayout->addWidget(rbDisableDirectConns); + directc2cLayout->addWidget(rbEnableOutgoingConns); + directc2cLayout->addWidget(rbEnableIncomingConns); + directc2cLayout->addWidget(lbAddr); + directc2cLayout->addWidget(addr); + directc2cLayout->addWidget(lbPubPort); + directc2cLayout->addWidget(publicPort); + directc2cLayout->addWidget(lbLocPort); + directc2cLayout->addWidget(localPort); + directc2cLayout->addStretch(1); + + //groupBox->setLayout(directc2cLayout); + directc2ctab->setLayout(directc2cLayout); + + //settingsLayout->addWidget(groupBox); + tabW->addTab(directc2ctab, tr("Direct Connections")); + tabW->addTab(soundstab, tr("Sounds")); + settingsLayout->addWidget(tabW); + + QHBoxLayout *buttonsLayout = new QHBoxLayout; + + btOk = new QPushButton(tr("&OK"), this); + btCancel = new QPushButton(tr("Cancel"), this); + + buttonsLayout->addStretch(1); + buttonsLayout->addWidget(btOk); + buttonsLayout->addWidget(btCancel); + + settingsLayout->addLayout(buttonsLayout); + + setLayout(settingsLayout); + + connect(btOk, SIGNAL(clicked()), this, SLOT(OK())); + connect(btCancel, SIGNAL(clicked()), this, SLOT(Cancel())); + + loadSettings(); + + setWindowTitle(tr("Pica Pica Messenger Settings")); +} + +void SettingsDialog::toggleIncomingConnections(bool checked) +{ + addr->setEnabled(checked); + publicPort->setEnabled(checked); + localPort->setEnabled(checked); +} + +void SettingsDialog::OK() +{ + storeSettings(); + done(1); +} + +void SettingsDialog::Cancel() +{ + done(0); +} + +void SettingsDialog::loadSettings() +{ + Settings st(config_dbname); + + //Direct c2c connections + int c2c_state; + + c2c_state = st.loadValue("direct_c2c.state", 1).toInt(); + + switch (c2c_state) + { + case 0: + rbDisableDirectConns->setChecked(true); + break; + + case 1: + rbEnableOutgoingConns->setChecked(true); + break; + + case 2: + rbEnableIncomingConns->setChecked(true); + break; + + default: + break; + } + + addr->lineEdit()->setText(st.loadValue("direct_c2c.public_addr", "0.0.0.0").toString()); + + publicPort->setValue(st.loadValue("direct_c2c.public_port", 2298).toInt()); + localPort->setValue(st.loadValue("direct_c2c.local_port", 2298).toInt()); + +} + +void SettingsDialog::storeSettings() +{ + Settings st(config_dbname); + + //Direct c2c connections + int c2c_state; + + if (rbDisableDirectConns->isChecked()) + c2c_state = 0; + else if (rbEnableOutgoingConns->isChecked()) + c2c_state = 1; + else if (rbEnableIncomingConns->isChecked()) + c2c_state = 2; + + st.storeValue("direct_c2c.state", QString::number(c2c_state)); + + st.storeValue("direct_c2c.public_addr", addr->lineEdit()->text()); + st.storeValue("direct_c2c.public_port", QString::number(publicPort->value())); + st.storeValue("direct_c2c.local_port", QString::number(localPort->value())); +} diff --git a/pica-client/dialogs/settingsdialog.h b/pica-client/dialogs/settingsdialog.h new file mode 100644 index 0000000..9b11630 --- /dev/null +++ b/pica-client/dialogs/settingsdialog.h @@ -0,0 +1,44 @@ +#ifndef SETTINGSDIALOG_H +#define SETTINGSDIALOG_H + +#include <QDialog> +#include <QLineEdit> +#include <QPushButton> +#include <QSpinBox> +#include <QRadioButton> +#include <QComboBox> + +class SettingsDialog : public QDialog +{ + Q_OBJECT +public: + explicit SettingsDialog(QWidget *parent = 0); + +signals: + +public slots: +private slots: + +private: + QRadioButton *rbDisableDirectConns; + QRadioButton *rbEnableOutgoingConns; + QRadioButton *rbEnableIncomingConns; + + QComboBox *addr; + QSpinBox *publicPort; + QSpinBox *localPort; + + QPushButton *btOk; + QPushButton *btCancel; + + void loadSettings(); + void storeSettings(); + +private slots: + void OK(); + void Cancel(); + void toggleIncomingConnections(bool checked); + +}; + +#endif // SETTINGSDIALOG_H |
