summaryrefslogtreecommitdiffstats
path: root/pica-client/dialogs
diff options
context:
space:
mode:
authorAnton <anton@picapica>2017-12-01 21:55:53 +0400
committerAnton <anton@picapica>2017-12-01 21:55:53 +0400
commitac041927bc0c82e33acaa9e15fd46ecca0b77172 (patch)
tree742f1bf43917e79dae43c78684a2a3d055214e76 /pica-client/dialogs
parent32e742ed040c5a70edb4cbfb947581f1e192d5a6 (diff)
parent9c0a5bf2bbd94539427ece7eb1cb8ea82c6c3dec (diff)
downloadpica-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.cpp168
-rw-r--r--pica-client/dialogs/settingsdialog.h44
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