diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-09-24 14:37:36 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2015-09-24 14:37:36 +0300 |
commit | 380a818768c810b7d9eed5cb240c15305921910f (patch) | |
tree | 97b256c50c2d3cce326414761c4e3b3b599e9220 /client-qt/udm-client-qt/udm_main.cpp | |
parent | b7065f2918cd3b2c44d40d40c457f7a09d32ec10 (diff) |
protocol:
use repeated instead of optional fields for download_start_request, download_stop_request, download_delete_request, download_action_request - this allow to execute same action on multiple downloads via one message which is much more efficient than send
message for each download
client-qt:
basic download menu (without dynamic actions)
implemented start/stop/delete proto part
server:
core:
basic protocol implementation for: CLIENT_DOWNLOAD_INFO_REQUEST, CLIENT_DOWNLOAD_START, CLIENT_DOWNLOAD_STOP, CLIENT_DOWNLOAD_DELETE
Diffstat (limited to 'client-qt/udm-client-qt/udm_main.cpp')
-rw-r--r-- | client-qt/udm-client-qt/udm_main.cpp | 87 |
1 files changed, 84 insertions, 3 deletions
diff --git a/client-qt/udm-client-qt/udm_main.cpp b/client-qt/udm-client-qt/udm_main.cpp index b822163..62b8195 100644 --- a/client-qt/udm-client-qt/udm_main.cpp +++ b/client-qt/udm-client-qt/udm_main.cpp @@ -33,6 +33,7 @@ #include <QStackedLayout> #include <QPushButton> #include <QToolBar> +#include <QMenu> #include "connect_widget.h" #include "client_session.h" @@ -61,12 +62,17 @@ udm_main::udm_main(QWidget *parent) tbl_downloads->setUpdatesEnabled(true); mdl_downloads = new downloads_model(downloads); tbl_downloads->setModel(mdl_downloads); + tbl_downloads->setContextMenuPolicy(Qt::CustomContextMenu); tbl_downloads->setSelectionBehavior(QAbstractItemView::SelectRows); tbl_downloads->setSortingEnabled(true); tbl_downloads->horizontalHeader()->setHighlightSections(false); tbl_downloads->horizontalHeader()->setMovable(true); tbl_downloads->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft); tbl_downloads->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); + connect(tbl_downloads, SIGNAL(customContextMenuRequested(QPoint)), SLOT(downloads_menu(QPoint))); + connect(tbl_downloads->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(downloads_selection_changed(QItemSelection,QItemSelection))); + + create_menu(); tree_filters = new QTreeView; mdl_filters = new filters_model; @@ -98,6 +104,81 @@ udm_main::udm_main(QWidget *parent) create_buttons(); } +void udm_main::create_menu() +{ + download_menu = new QMenu; + QAction *a = download_menu->addAction(tr("Start")); + connect(a, SIGNAL(triggered(bool)), this, SLOT(download_start())); + a = download_menu->addAction(tr("Stop")); + connect(a, SIGNAL(triggered(bool)), this, SLOT(download_stop())); + a = download_menu->addAction(tr("Delete")); + connect(a, SIGNAL(triggered(bool)), this, SLOT(download_delete())); + //TODO: dynamic menu +} + +void udm_main::downloads_menu(const QPoint &/*pos*/) +{ + download_menu->popup(QCursor::pos()); +} + + +void udm_main::download_start() +{ + client_msg msg; + msg.set_auth_token(auth_token); + for(auto i : tbl_downloads->selectionModel()->selectedRows()) + { + msg.set_type(CLIENT_MSG_TYPE::CLIENT_DOWNLOAD_START); + client_download_start_request *r = msg.add_download_start_request(); + r->set_download_id(downloads[i.row()].id()); + } + session->send_message(msg); +} + +void udm_main::download_stop() +{ + client_msg msg; + msg.set_auth_token(auth_token); + for(auto i : tbl_downloads->selectionModel()->selectedRows()) + { + msg.set_type(CLIENT_MSG_TYPE::CLIENT_DOWNLOAD_STOP); + client_download_stop_request *r = msg.add_download_stop_request(); + r->set_download_id(downloads[i.row()].id()); + } + session->send_message(msg); +} + +void udm_main::download_delete() +{ + client_msg msg; + msg.set_auth_token(auth_token); + for(auto i : tbl_downloads->selectionModel()->selectedRows()) + { + msg.set_type(CLIENT_MSG_TYPE::CLIENT_DOWNLOAD_DELETE); + client_download_delete_request *r = msg.add_download_delete_request(); + r->set_download_id(downloads[i.row()].id()); + } + session->send_message(msg); +} + +void udm_main::downloads_selection_changed(QItemSelection s, QItemSelection) +{ + if(s.size()) + { + btn_start->setEnabled(true); + btn_stop->setEnabled(true); + btn_del->setEnabled(true); + } + else + { + btn_start->setEnabled(false); + btn_stop->setEnabled(false); + btn_del->setEnabled(false); + } + +} + + udm_main::~udm_main() { if(thread_client_session) @@ -296,12 +377,12 @@ void udm_main::create_buttons() void udm_main::btn_start_clicked() { - + download_start(); } void udm_main::btn_stop_clicked() { - + download_stop(); } void udm_main::btn_add_clicked() @@ -332,7 +413,7 @@ void udm_main::got_download_settings(std::string module_name, std::map<int, std: void udm_main::btn_del_clicked() { - + download_delete(); } |