From 52cacecaa08ac89502e636a410849ab6bf09c3ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Fri, 16 Aug 2019 21:39:52 +0200 Subject: [PATCH] Add ServerItemWidget Actions --- gui/include/mainwindow.h | 4 +++ gui/include/serveritemwidget.h | 4 +++ gui/src/mainwindow.cpp | 47 ++++++++++++++++++++++++++++------ gui/src/serveritemwidget.cpp | 30 +++++++++++++++++++--- 4 files changed, 73 insertions(+), 12 deletions(-) diff --git a/gui/include/mainwindow.h b/gui/include/mainwindow.h index 8bb9c96..a43a4d3 100644 --- a/gui/include/mainwindow.h +++ b/gui/include/mainwindow.h @@ -55,9 +55,13 @@ class MainWindow : public QMainWindow QList display_servers; + DisplayServer *DisplayServerFromSender(); + private slots: void ServerItemWidgetSelected(); void ServerItemWidgetTriggered(); + void ServerItemWidgetDeleteTriggered(); + void ServerItemWidgetWakeTriggered(); void UpdateDiscoveryEnabled(); void ShowSettings(); diff --git a/gui/include/serveritemwidget.h b/gui/include/serveritemwidget.h index 515e333..3acbee6 100644 --- a/gui/include/serveritemwidget.h +++ b/gui/include/serveritemwidget.h @@ -36,6 +36,8 @@ class ServerItemWidget : public QFrame QLabel *bottom_label; ServerIconWidget *icon_widget; + QAction *delete_action; + protected: void mousePressEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; @@ -51,6 +53,8 @@ class ServerItemWidget : public QFrame signals: void Selected(); void Triggered(); + void DeleteTriggered(); + void WakeTriggered(); }; #endif //CHIAKI_CONSOLEITEMWIDGET_H diff --git a/gui/src/mainwindow.cpp b/gui/src/mainwindow.cpp index 107b8bc..b70cc4b 100644 --- a/gui/src/mainwindow.cpp +++ b/gui/src/mainwindow.cpp @@ -110,20 +110,27 @@ void MainWindow::ServerItemWidgetSelected() server_item_widget->SetSelected(true); } -void MainWindow::ServerItemWidgetTriggered() +DisplayServer *MainWindow::DisplayServerFromSender() { auto server_item_widget = qobject_cast(sender()); if(!server_item_widget) - return; + return nullptr; int index = server_item_widgets.indexOf(server_item_widget); if(index < 0 || index >= display_servers.count()) - return; - const auto &server = display_servers[index]; + return nullptr; + return &display_servers[index]; +} - if(server.registered) +void MainWindow::ServerItemWidgetTriggered() +{ + auto server = DisplayServerFromSender(); + if(!server) + return; + + if(server->registered) { - QString host = server.GetHostAddr(); - StreamSessionConnectInfo info(settings, host, server.registered_host.GetRPRegistKey(), server.registered_host.GetRPKey()); + QString host = server->GetHostAddr(); + StreamSessionConnectInfo info(settings, host, server->registered_host.GetRPRegistKey(), server->registered_host.GetRPKey()); try { auto stream_window = new StreamWindow(info); @@ -136,11 +143,33 @@ void MainWindow::ServerItemWidgetTriggered() } else { - RegistDialog regist_dialog(settings, server.GetHostAddr(), this); + RegistDialog regist_dialog(settings, server->GetHostAddr(), this); regist_dialog.exec(); } } +void MainWindow::ServerItemWidgetDeleteTriggered() +{ + auto server = DisplayServerFromSender(); + if(!server) + return; + + if(server->discovered) + return; + + settings->RemoveManualHost(server->manual_host.GetID()); +} + +void MainWindow::ServerItemWidgetWakeTriggered() +{ + auto server = DisplayServerFromSender(); + if(!server) + return; + + // TODO + printf("TODO: Wakeup\n"); +} + void MainWindow::UpdateDiscoveryEnabled() { bool enabled = discover_action->isChecked(); @@ -206,6 +235,8 @@ void MainWindow::UpdateServerWidgets() auto widget = new ServerItemWidget(grid_widget); connect(widget, &ServerItemWidget::Selected, this, &MainWindow::ServerItemWidgetSelected); connect(widget, &ServerItemWidget::Triggered, this, &MainWindow::ServerItemWidgetTriggered); + connect(widget, &ServerItemWidget::DeleteTriggered, this, &MainWindow::ServerItemWidgetDeleteTriggered, Qt::QueuedConnection); + connect(widget, &ServerItemWidget::WakeTriggered, this, &MainWindow::ServerItemWidgetWakeTriggered); server_item_widgets.append(widget); grid_widget->AddWidget(widget); } diff --git a/gui/src/serveritemwidget.cpp b/gui/src/serveritemwidget.cpp index 2ced644..1419c0d 100644 --- a/gui/src/serveritemwidget.cpp +++ b/gui/src/serveritemwidget.cpp @@ -22,6 +22,8 @@ #include #include #include +#include +#include ServerItemWidget::ServerItemWidget(QWidget *parent) : QFrame(parent) { @@ -32,6 +34,7 @@ ServerItemWidget::ServerItemWidget(QWidget *parent) : QFrame(parent) top_label = new QLabel(this); top_label->setAlignment(Qt::AlignCenter); + top_label->setWordWrap(true); layout->addWidget(top_label); icon_widget = new ServerIconWidget(this); @@ -39,8 +42,19 @@ ServerItemWidget::ServerItemWidget(QWidget *parent) : QFrame(parent) bottom_label = new QLabel(this); bottom_label->setAlignment(Qt::AlignCenter); + bottom_label->setWordWrap(true); layout->addWidget(bottom_label); + setContextMenuPolicy(Qt::ActionsContextMenu); + + delete_action = new QAction(tr("Delete"), this); + addAction(delete_action); + connect(delete_action, &QAction::triggered, this, [this]{ emit DeleteTriggered(); }); + + auto wake_action = new QAction(tr("Send Wakeup Packet"), this); + addAction(wake_action); + connect(wake_action, &QAction::triggered, this, [this]{ emit WakeTriggered(); }); + this->selected = true; SetSelected(false); @@ -54,7 +68,8 @@ void ServerItemWidget::mousePressEvent(QMouseEvent *event) void ServerItemWidget::mouseDoubleClickEvent(QMouseEvent *event) { - emit Triggered(); + if(event->button() == Qt::LeftButton) + emit Triggered(); } void ServerItemWidget::SetSelected(bool selected) @@ -62,11 +77,13 @@ void ServerItemWidget::SetSelected(bool selected) if(this->selected == selected) return; this->selected = selected; - setStyleSheet(selected ? "background-color: palette(highlight); color: palette(highlighted-text);" : ""); + setStyleSheet(selected ? "QFrame { background-color: palette(highlight); color: palette(highlighted-text); }" : ""); } void ServerItemWidget::Update(const DisplayServer &display_server) { + delete_action->setEnabled(!display_server.discovered); + icon_widget->SetState(display_server.discovered ? display_server.discovery_host.state : CHIAKI_DISCOVERY_HOST_STATE_UNKNOWN); QString top_text = ""; @@ -89,9 +106,14 @@ void ServerItemWidget::Update(const DisplayServer &display_server) top_label->setText(top_text); + QString bottom_text = ""; if(display_server.discovered) { - bottom_label->setText(tr("State: %1").arg( - chiaki_discovery_host_state_string(display_server.discovery_host.state))); + bottom_text += tr("State: %1").arg(chiaki_discovery_host_state_string(display_server.discovery_host.state)); + if(!display_server.discovery_host.running_app_name.isEmpty()) + bottom_text += "\n" + tr("App: %1").arg(display_server.discovery_host.running_app_name); + if(!display_server.discovery_host.running_app_titleid.isEmpty()) + bottom_text += "\n" + tr("Title ID: %1").arg(display_server.discovery_host.running_app_titleid); } + bottom_label->setText(bottom_text); }