diff options
Diffstat (limited to 'client-qt')
-rw-r--r-- | client-qt/udm-client-qt/udm_main.cpp | 87 | ||||
-rw-r--r-- | client-qt/udm-client-qt/udm_main.h | 12 |
2 files changed, 96 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(); } diff --git a/client-qt/udm-client-qt/udm_main.h b/client-qt/udm-client-qt/udm_main.h index d3e07be..284c4e5 100644 --- a/client-qt/udm-client-qt/udm_main.h +++ b/client-qt/udm-client-qt/udm_main.h @@ -25,6 +25,7 @@ #include <QMainWindow> +#include <QItemSelection> #include "../../protocol/udm.pb.h" class client_session; @@ -37,6 +38,8 @@ class filters_model; class QSplitter; class QToolBar; class QPushButton; +class QMenu; +class QAction; namespace boost { namespace asio { @@ -70,6 +73,12 @@ protected slots: void btn_add_clicked(); void btn_del_clicked(); + void download_start(); + void download_stop(); + void download_delete(); + void downloads_menu(const QPoint&); + void downloads_selection_changed(QItemSelection, QItemSelection); + 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); @@ -78,6 +87,7 @@ private: void client_pre_connect_init(); void client_connect_finalize(); void create_buttons(); + void create_menu(); QThread *thread_client_session; client_session *session; boost::asio::io_service *io_service_; @@ -88,6 +98,8 @@ private: QTabWidget *tabs_info; QToolBar *button_bar; QPushButton *btn_start, *btn_stop, *btn_del, *btn_add; + QMenu *download_menu; + std::list<QAction*> download_menu_actions; downloads_model *mdl_downloads; filters_model *mdl_filters; QSplitter *spl_hor, *spl_vert; |