/* Copyright © 2015 Gluzskiy Alexandr (sss) This file is part of Unknown Download Manager (UDM). UDM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. UDM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with UDM. If not, see . */ #include "connect_widget.h" #include #include #include #include #include #include #include #include connect_widget::connect_widget(QWidget *parent) : QWidget(parent) { edit_host = new QLineEdit(this), edit_port = new QLineEdit(this), edit_passwd = new QLineEdit(this); edit_host->setText("127.0.0.1"); edit_port->setInputMask("D0000"); edit_port->setText("6613"); edit_passwd->setEchoMode(QLineEdit::Password); lbl_host = new QLabel(tr("host") + ":", this); lbl_port = new QLabel(tr("port") + ":", this); lbl_passwd = new QLabel(tr("password") + ":", this); chk_ssl = new QCheckBox(tr("Enable encryption"), this); lbl_ssl_ca = new QLabel(tr("ca cert"), this); lbl_ssl_ca->setEnabled(false); edit_ssl_ca = new QLineEdit(this); edit_ssl_ca->setEnabled(false); btn_set_ssl_ca = new QPushButton(tr("Browse"), this); btn_set_ssl_ca->setEnabled(false); connect(btn_set_ssl_ca, SIGNAL(clicked(bool)), this, SLOT(select_ssl_ca())); lbl_ssl_crt = new QLabel(tr("client cert"), this); lbl_ssl_crt->setEnabled(false); edit_ssl_crt = new QLineEdit(this); edit_ssl_crt->setEnabled(false); btn_set_ssl_crt = new QPushButton(tr("Browse"), this); btn_set_ssl_crt->setEnabled(false); connect(btn_set_ssl_crt, SIGNAL(clicked(bool)), this, SLOT(select_ssl_crt())); lbl_ssl_key = new QLabel(tr("client key"), this); lbl_ssl_key->setEnabled(false); edit_ssl_key = new QLineEdit(this); edit_ssl_key->setEnabled(false); btn_set_ssl_key = new QPushButton(tr("Browse"), this); btn_set_ssl_key->setEnabled(false); connect(btn_set_ssl_key, SIGNAL(clicked(bool)), this, SLOT(select_ssl_key())); btn_connect = new QPushButton(tr("Connect"), this); btn_connect->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); btn_close = new QPushButton(tr("Close"), this); btn_close->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); edit_host->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); edit_port->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); edit_passwd->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum); elements_grid = new QGridLayout(this); elements_grid->addWidget(lbl_host, 0, 0); elements_grid->addWidget(edit_host, 0, 1); elements_grid->addWidget(lbl_port, 0, 2); elements_grid->addWidget(edit_port, 0, 3); elements_grid->addWidget(lbl_passwd, 1, 0); elements_grid->addWidget(edit_passwd, 1, 1, 1, 2); elements_grid->addWidget(chk_ssl, 2, 0, 1, 4); elements_grid->addWidget(lbl_ssl_ca, 3, 0); elements_grid->addWidget(edit_ssl_ca, 3, 1, 1, 2); elements_grid->addWidget(btn_set_ssl_ca, 3, 3); elements_grid->addWidget(lbl_ssl_crt, 4, 0); elements_grid->addWidget(edit_ssl_crt, 4, 1, 1, 2); elements_grid->addWidget(btn_set_ssl_crt, 4, 3); elements_grid->addWidget(lbl_ssl_key, 5, 0); elements_grid->addWidget(edit_ssl_key, 5, 1, 1, 2); elements_grid->addWidget(btn_set_ssl_key, 5, 3); spacer_h = new QSpacerItem(1, 1, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding); elements_grid->addItem(spacer_h, 6, 0, 1, 4); elements_grid->addWidget(btn_connect, 7, 0); elements_grid->addWidget(btn_close, 7, 3); elements_grid->setColumnStretch(1, 1); connect(btn_connect, SIGNAL(clicked(bool)), this, SLOT(connect_clicked())); connect(btn_close, SIGNAL(clicked(bool)), this, SLOT(close())); connect(chk_ssl, SIGNAL(stateChanged(int)), this, SLOT(chk_ssl_state_changed(int))); } connect_widget::~connect_widget() { //TODO: delete all widgets } void connect_widget::connect_clicked() { //TODO: check entered values if(edit_host->text().isEmpty()) { QMessageBox msg; msg.setText(tr("host must be entered")); msg.exec(); return; } QString host = edit_host->text(), pass = edit_passwd->text(); if(chk_ssl->checkState()) { QString ssl_ca = edit_ssl_ca->text(), ssl_crt = edit_ssl_crt->text(), ssl_key = edit_ssl_key->text(); //TODO: validate file path's (existense, access rights, e.t.c.) emit client_connect_ssl(host, pass, edit_port->text().toInt(), ssl_ca, ssl_crt, ssl_key); } else emit client_connect(host, pass, edit_port->text().toInt()); close(); } void connect_widget::chk_ssl_state_changed(int state) { switch(state) { case 0: //unchecked { lbl_ssl_ca->setEnabled(false); lbl_ssl_crt->setEnabled(false); lbl_ssl_key->setEnabled(false); edit_ssl_ca->setEnabled(false); edit_ssl_crt->setEnabled(false); edit_ssl_key->setEnabled(false); btn_set_ssl_ca->setEnabled(false); btn_set_ssl_key->setEnabled(false); btn_set_ssl_crt->setEnabled(false); } break; default: //checked { lbl_ssl_ca->setEnabled(true); lbl_ssl_crt->setEnabled(true); lbl_ssl_key->setEnabled(true); edit_ssl_ca->setEnabled(true); edit_ssl_crt->setEnabled(true); edit_ssl_key->setEnabled(true); btn_set_ssl_ca->setEnabled(true); btn_set_ssl_key->setEnabled(true); btn_set_ssl_crt->setEnabled(true); } break; } } void connect_widget::select_ssl_ca() { QString tmp = QFileDialog::getOpenFileName(this, tr("select ca cert")); edit_ssl_ca->setText(tmp); } void connect_widget::select_ssl_crt() { QString tmp = QFileDialog::getOpenFileName(this, tr("select client cert")); edit_ssl_crt->setText(tmp); } void connect_widget::select_ssl_key() { QString tmp = QFileDialog::getOpenFileName(this, tr("select client key")); edit_ssl_key->setText(tmp); }