summaryrefslogtreecommitdiff
path: root/client-qt
diff options
context:
space:
mode:
Diffstat (limited to 'client-qt')
-rw-r--r--client-qt/udm-client-qt/client_session.cpp2
-rw-r--r--client-qt/udm-client-qt/download_add_widget.cpp109
-rw-r--r--client-qt/udm-client-qt/download_add_widget.h28
-rw-r--r--client-qt/udm-client-qt/marked_class.h23
-rw-r--r--client-qt/udm-client-qt/udm-client-qt.pro7
-rw-r--r--client-qt/udm-client-qt/udm_main.cpp67
-rw-r--r--client-qt/udm-client-qt/udm_main.h14
7 files changed, 244 insertions, 6 deletions
diff --git a/client-qt/udm-client-qt/client_session.cpp b/client-qt/udm-client-qt/client_session.cpp
index 885598b..00e869a 100644
--- a/client-qt/udm-client-qt/client_session.cpp
+++ b/client-qt/udm-client-qt/client_session.cpp
@@ -234,7 +234,7 @@ void client_session::handle_connect(const boost::system::error_code &e)
}
}
-void client_session::handle_read(const boost::system::error_code& error, size_t bytes_transferred)
+void client_session::handle_read(const boost::system::error_code& error, size_t /*bytes_transferred*/)
{
if (!error)
{
diff --git a/client-qt/udm-client-qt/download_add_widget.cpp b/client-qt/udm-client-qt/download_add_widget.cpp
new file mode 100644
index 0000000..6dae8d0
--- /dev/null
+++ b/client-qt/udm-client-qt/download_add_widget.cpp
@@ -0,0 +1,109 @@
+#include "download_add_widget.h"
+#include <QComboBox>
+#include <QGridLayout>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QSpacerItem>
+#include <QSpinBox>
+
+#include "marked_class.h"
+
+download_add_widget::download_add_widget(std::list<module_info> &modules_, QWidget *parent) : QWidget(parent), modules(modules_)
+{
+ QGridLayout *l = new QGridLayout(this);
+ layout_settings = new QGridLayout; //must be created before first entry added to combobox to avoid crash
+ QLabel *lbl_modules = new QLabel(tr("module:"));
+ QComboBox *combo_modules = new QComboBox;
+ connect(combo_modules, SIGNAL(currentIndexChanged(QString)), this, SLOT(combo_modules_currentIndexChanged(QString)));
+ QHBoxLayout *layout_modules = new QHBoxLayout;
+ layout_modules->addWidget(lbl_modules);
+ QSpacerItem *spacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
+ layout_modules->addItem(spacer);
+ layout_modules->addWidget(combo_modules);
+ l->addLayout(layout_modules, 0, 0, 1, 3);
+ for(auto m : modules)
+ {
+ if(m.type() == SERVER_MODULE_TYPE::SERVER_MODULE_DOWNLOADER)
+ combo_modules->addItem(m.name().c_str());
+ }
+
+
+ l->addLayout(layout_settings, 1, 0, 1, 3);
+
+ spacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
+ l->addItem(spacer, 2, 0, 1, 3);
+
+
+ QPushButton *btn_ok = new QPushButton(tr("Ok")), *btn_cancel = new QPushButton(tr("Cancel"));
+ connect(btn_ok, SIGNAL(clicked(bool)), this, SLOT(btn_ok_clicked()));
+ connect(btn_cancel, SIGNAL(clicked(bool)), this, SLOT(btn_cancel_clicked()));
+ QHBoxLayout *layout_buttons = new QHBoxLayout;
+ layout_buttons->addWidget(btn_ok);
+ spacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
+ layout_buttons->addItem(spacer);
+ layout_buttons->addWidget(btn_cancel);
+ l->addLayout(layout_buttons, 3, 0, 1, 3);
+
+
+
+ setLayout(l);
+}
+
+void download_add_widget::combo_modules_currentIndexChanged(QString module)
+{
+ for (QLayoutItem *item = layout_settings->takeAt(0); item != 0; item = layout_settings->takeAt(0))
+ delete item;
+
+ int row = 0;
+ for(auto m : modules)
+ {
+ if(m.name().c_str() == module)
+ {
+ for(auto ui : m.download_creation_ui())
+ {
+ if(ui.type() == MODULE_UI_ELEMENT_TYPE::UI_STR || ui.type() == MODULE_UI_ELEMENT_TYPE::UI_INTEGER)
+ {
+ QLabel *l = new QLabel(ui.name().c_str());
+ layout_settings->addWidget(l, row, 0);
+ QSpacerItem *spacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
+ layout_settings->addItem(spacer, row, 1);
+ switch(ui.type())
+ {
+ case MODULE_UI_ELEMENT_TYPE::UI_STR:
+ {
+ marked_class<QLineEdit> *edit = new marked_class<QLineEdit>;
+ edit->set_mark(ui.id());
+ layout_settings->addWidget(edit, row, 2);
+ }
+ break;
+ case MODULE_UI_ELEMENT_TYPE::UI_INTEGER:
+ {
+ marked_class<QSpinBox> *edit = new marked_class<QSpinBox>;
+ edit->set_mark(ui.id());
+ layout_settings->addWidget(edit, row, 2);
+ }
+ break;
+ default:
+ break;
+ }
+ ++row;
+ }
+ }
+ }
+ }
+}
+
+void download_add_widget::btn_ok_clicked()
+{
+
+}
+
+void download_add_widget::btn_cancel_clicked()
+{
+ close();
+ deleteLater(); //?
+}
+
diff --git a/client-qt/udm-client-qt/download_add_widget.h b/client-qt/udm-client-qt/download_add_widget.h
new file mode 100644
index 0000000..1b619bb
--- /dev/null
+++ b/client-qt/udm-client-qt/download_add_widget.h
@@ -0,0 +1,28 @@
+#ifndef DOWNLOAD_ADD_WIDGET_H
+#define DOWNLOAD_ADD_WIDGET_H
+
+#include <QWidget>
+#include "../../protocol/udm.pb.h"
+
+class QGridLayout;
+
+
+class download_add_widget : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit download_add_widget(std::list<module_info> &modules, QWidget *parent = 0);
+
+signals:
+
+public slots:
+protected slots:
+ void combo_modules_currentIndexChanged(QString);
+ void btn_ok_clicked();
+ void btn_cancel_clicked();
+private:
+ std::list<module_info> &modules;
+ QGridLayout *layout_settings;
+};
+
+#endif // DOWNLOAD_ADD_WIDGET_H
diff --git a/client-qt/udm-client-qt/marked_class.h b/client-qt/udm-client-qt/marked_class.h
new file mode 100644
index 0000000..c12d68d
--- /dev/null
+++ b/client-qt/udm-client-qt/marked_class.h
@@ -0,0 +1,23 @@
+#ifndef MARKED_CLASS
+#define MARKED_CLASS
+
+template <typename BASE>
+class marked_class : public BASE
+{
+public:
+
+ void set_mark(int mark)
+ {
+ this->mark = mark;
+ }
+ int get_mark()
+ {
+ return mark;
+ }
+
+private:
+ int mark = -1;
+};
+
+#endif // MARKED_CLASS
+
diff --git a/client-qt/udm-client-qt/udm-client-qt.pro b/client-qt/udm-client-qt/udm-client-qt.pro
index d64ebe4..ce04163 100644
--- a/client-qt/udm-client-qt/udm-client-qt.pro
+++ b/client-qt/udm-client-qt/udm-client-qt.pro
@@ -41,10 +41,13 @@ SOURCES += main.cpp\
connect_widget.cpp \
../../protocol/udm.pb.cc \
downloads_model.cpp \
- filters_model.cpp
+ filters_model.cpp \
+ download_add_widget.cpp
HEADERS += udm_main.h \
client_session.h \
connect_widget.h \
downloads_model.h \
- filters_model.h
+ filters_model.h \
+ download_add_widget.h \
+ marked_class.h
diff --git a/client-qt/udm-client-qt/udm_main.cpp b/client-qt/udm-client-qt/udm_main.cpp
index bf58911..ca5b397 100644
--- a/client-qt/udm-client-qt/udm_main.cpp
+++ b/client-qt/udm-client-qt/udm_main.cpp
@@ -31,11 +31,14 @@
#include <QHeaderView>
#include <QSplitter>
#include <QStackedLayout>
+#include <QPushButton>
+#include <QToolBar>
#include "connect_widget.h"
#include "client_session.h"
#include "downloads_model.h"
#include "filters_model.h"
+#include "download_add_widget.h"
udm_main::udm_main(QWidget *parent)
@@ -83,7 +86,6 @@ udm_main::udm_main(QWidget *parent)
-
spl_vert = new QSplitter(Qt::Vertical);
spl_vert->addWidget(spl_hor);
spl_vert->addWidget(tabs_info);
@@ -92,6 +94,7 @@ udm_main::udm_main(QWidget *parent)
spl_vert->setStretchFactor(1, 1);
setCentralWidget(spl_vert);
+ create_buttons();
}
udm_main::~udm_main()
@@ -99,7 +102,8 @@ udm_main::~udm_main()
if(thread_client_session)
{
thread_client_session->quit();
- delete thread_client_session;
+ thread_client_session->deleteLater();
+ //delete thread_client_session;
}
//TODO: clear all remaining data
}
@@ -206,7 +210,6 @@ void udm_main::server_message_received(server_msg msg)
break;
case SERVER_MSG_TYPE::SERVER_MODULES_REPLY:
{
- //TODO: create download info ui template for each module here
modules.clear(); //TODO: something better
for(auto i : msg.server_modules_reply())
modules.push_back(i);
@@ -225,6 +228,64 @@ void udm_main::server_message_received(server_msg msg)
}
}
+void udm_main::create_buttons()
+{
+ btn_start = new QPushButton(this);
+ connect(btn_start, SIGNAL(clicked(bool)), this, SLOT(btn_start_clicked()));
+ btn_stop = new QPushButton(this);
+ connect(btn_stop, SIGNAL(clicked(bool)), this, SLOT(btn_stop_clicked()));
+ btn_del = new QPushButton(this);
+ connect(btn_del, SIGNAL(clicked(bool)), this, SLOT(btn_del_clicked()));
+ btn_add = new QPushButton(this);
+ connect(btn_add, SIGNAL(clicked(bool)), this, SLOT(btn_add_clicked()));
+ button_bar = new QToolBar(this);
+ button_bar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ //TODO: support dynamic action buttons for modules
+ button_bar->addWidget(btn_start);
+ button_bar->addWidget(btn_stop);
+ button_bar->addSeparator();
+ button_bar->addWidget(btn_del);
+ button_bar->addWidget(btn_add);
+ btn_start->setText(tr("Start"));
+ btn_start->setToolTip(tr("Start download"));
+ btn_start->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ btn_stop->setText(tr("Stop"));
+ btn_stop->setToolTip(tr("Stop download"));
+ btn_stop->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ btn_del->setText(tr("Delete"));
+ btn_del->setToolTip(tr("Delete download"));
+ btn_del->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ btn_add->setText(tr("Add"));
+ btn_add->setToolTip(tr("Add download"));
+ btn_add->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ this->addToolBar(button_bar);
+
+}
+
+void udm_main::btn_start_clicked()
+{
+
+}
+
+void udm_main::btn_stop_clicked()
+{
+
+}
+
+void udm_main::btn_add_clicked()
+{
+ download_add_widget *w = new download_add_widget(modules);
+ //TODO: connect slots/signals here
+ w->show();
+}
+
+void udm_main::btn_del_clicked()
+{
+
+}
+
+
void udm_main::client_connected(bool success, QString error_text)
{
if(!success)
diff --git a/client-qt/udm-client-qt/udm_main.h b/client-qt/udm-client-qt/udm_main.h
index 28d5440..eede952 100644
--- a/client-qt/udm-client-qt/udm_main.h
+++ b/client-qt/udm-client-qt/udm_main.h
@@ -35,6 +35,8 @@ class QTabWidget;
class downloads_model;
class filters_model;
class QSplitter;
+class QToolBar;
+class QPushButton;
namespace boost {
namespace asio {
@@ -52,6 +54,7 @@ class udm_main : public QMainWindow
public:
udm_main(QWidget *parent = 0);
~udm_main();
+
public slots:
void show_connect_widget();
void client_connect(QString &host, QString &password, int port);
@@ -59,12 +62,21 @@ public slots:
void server_message_received(server_msg msg);
void client_connected(bool success, QString error_text);
void client_disconnected();
+
+protected slots:
+ void btn_start_clicked();
+ void btn_stop_clicked();
+ void btn_add_clicked();
+ void btn_del_clicked();
+
signals:
void connect_signal(QString host, QString password, int port);
void connect_signal_ssl(QString host, QString password, int port, QString ssl_ca, QString ssl_crt, QString ssl_key);
+
private:
void client_pre_connect_init();
void client_connect_finalize();
+ void create_buttons();
QThread *thread_client_session;
client_session *session;
boost::asio::io_service *io_service_;
@@ -73,6 +85,8 @@ private:
QTableView *tbl_downloads;
QTreeView *tree_filters;
QTabWidget *tabs_info;
+ QToolBar *button_bar;
+ QPushButton *btn_start, *btn_stop, *btn_del, *btn_add;
downloads_model *mdl_downloads;
filters_model *mdl_filters;
QSplitter *spl_hor, *spl_vert;