Add ServerItemWidget Actions

This commit is contained in:
Florian Märkl 2019-08-16 21:39:52 +02:00
commit 52cacecaa0
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
4 changed files with 73 additions and 12 deletions

View file

@ -55,9 +55,13 @@ class MainWindow : public QMainWindow
QList<DisplayServer> display_servers; QList<DisplayServer> display_servers;
DisplayServer *DisplayServerFromSender();
private slots: private slots:
void ServerItemWidgetSelected(); void ServerItemWidgetSelected();
void ServerItemWidgetTriggered(); void ServerItemWidgetTriggered();
void ServerItemWidgetDeleteTriggered();
void ServerItemWidgetWakeTriggered();
void UpdateDiscoveryEnabled(); void UpdateDiscoveryEnabled();
void ShowSettings(); void ShowSettings();

View file

@ -36,6 +36,8 @@ class ServerItemWidget : public QFrame
QLabel *bottom_label; QLabel *bottom_label;
ServerIconWidget *icon_widget; ServerIconWidget *icon_widget;
QAction *delete_action;
protected: protected:
void mousePressEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override;
@ -51,6 +53,8 @@ class ServerItemWidget : public QFrame
signals: signals:
void Selected(); void Selected();
void Triggered(); void Triggered();
void DeleteTriggered();
void WakeTriggered();
}; };
#endif //CHIAKI_CONSOLEITEMWIDGET_H #endif //CHIAKI_CONSOLEITEMWIDGET_H

View file

@ -110,20 +110,27 @@ void MainWindow::ServerItemWidgetSelected()
server_item_widget->SetSelected(true); server_item_widget->SetSelected(true);
} }
void MainWindow::ServerItemWidgetTriggered() DisplayServer *MainWindow::DisplayServerFromSender()
{ {
auto server_item_widget = qobject_cast<ServerItemWidget *>(sender()); auto server_item_widget = qobject_cast<ServerItemWidget *>(sender());
if(!server_item_widget) if(!server_item_widget)
return; return nullptr;
int index = server_item_widgets.indexOf(server_item_widget); int index = server_item_widgets.indexOf(server_item_widget);
if(index < 0 || index >= display_servers.count()) if(index < 0 || index >= display_servers.count())
return; return nullptr;
const auto &server = display_servers[index]; return &display_servers[index];
}
if(server.registered) void MainWindow::ServerItemWidgetTriggered()
{ {
QString host = server.GetHostAddr(); auto server = DisplayServerFromSender();
StreamSessionConnectInfo info(settings, host, server.registered_host.GetRPRegistKey(), server.registered_host.GetRPKey()); if(!server)
return;
if(server->registered)
{
QString host = server->GetHostAddr();
StreamSessionConnectInfo info(settings, host, server->registered_host.GetRPRegistKey(), server->registered_host.GetRPKey());
try try
{ {
auto stream_window = new StreamWindow(info); auto stream_window = new StreamWindow(info);
@ -136,11 +143,33 @@ void MainWindow::ServerItemWidgetTriggered()
} }
else else
{ {
RegistDialog regist_dialog(settings, server.GetHostAddr(), this); RegistDialog regist_dialog(settings, server->GetHostAddr(), this);
regist_dialog.exec(); 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() void MainWindow::UpdateDiscoveryEnabled()
{ {
bool enabled = discover_action->isChecked(); bool enabled = discover_action->isChecked();
@ -206,6 +235,8 @@ void MainWindow::UpdateServerWidgets()
auto widget = new ServerItemWidget(grid_widget); auto widget = new ServerItemWidget(grid_widget);
connect(widget, &ServerItemWidget::Selected, this, &MainWindow::ServerItemWidgetSelected); connect(widget, &ServerItemWidget::Selected, this, &MainWindow::ServerItemWidgetSelected);
connect(widget, &ServerItemWidget::Triggered, this, &MainWindow::ServerItemWidgetTriggered); 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); server_item_widgets.append(widget);
grid_widget->AddWidget(widget); grid_widget->AddWidget(widget);
} }

View file

@ -22,6 +22,8 @@
#include <QLabel> #include <QLabel>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QStyle> #include <QStyle>
#include <QMouseEvent>
#include <QAction>
ServerItemWidget::ServerItemWidget(QWidget *parent) : QFrame(parent) ServerItemWidget::ServerItemWidget(QWidget *parent) : QFrame(parent)
{ {
@ -32,6 +34,7 @@ ServerItemWidget::ServerItemWidget(QWidget *parent) : QFrame(parent)
top_label = new QLabel(this); top_label = new QLabel(this);
top_label->setAlignment(Qt::AlignCenter); top_label->setAlignment(Qt::AlignCenter);
top_label->setWordWrap(true);
layout->addWidget(top_label); layout->addWidget(top_label);
icon_widget = new ServerIconWidget(this); icon_widget = new ServerIconWidget(this);
@ -39,8 +42,19 @@ ServerItemWidget::ServerItemWidget(QWidget *parent) : QFrame(parent)
bottom_label = new QLabel(this); bottom_label = new QLabel(this);
bottom_label->setAlignment(Qt::AlignCenter); bottom_label->setAlignment(Qt::AlignCenter);
bottom_label->setWordWrap(true);
layout->addWidget(bottom_label); 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; this->selected = true;
SetSelected(false); SetSelected(false);
@ -54,6 +68,7 @@ void ServerItemWidget::mousePressEvent(QMouseEvent *event)
void ServerItemWidget::mouseDoubleClickEvent(QMouseEvent *event) void ServerItemWidget::mouseDoubleClickEvent(QMouseEvent *event)
{ {
if(event->button() == Qt::LeftButton)
emit Triggered(); emit Triggered();
} }
@ -62,11 +77,13 @@ void ServerItemWidget::SetSelected(bool selected)
if(this->selected == selected) if(this->selected == selected)
return; return;
this->selected = selected; 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) 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); icon_widget->SetState(display_server.discovered ? display_server.discovery_host.state : CHIAKI_DISCOVERY_HOST_STATE_UNKNOWN);
QString top_text = ""; QString top_text = "";
@ -89,9 +106,14 @@ void ServerItemWidget::Update(const DisplayServer &display_server)
top_label->setText(top_text); top_label->setText(top_text);
QString bottom_text = "";
if(display_server.discovered) if(display_server.discovered)
{ {
bottom_label->setText(tr("State: %1").arg( bottom_text += tr("State: %1").arg(chiaki_discovery_host_state_string(display_server.discovery_host.state));
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);
} }