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;
DisplayServer *DisplayServerFromSender();
private slots:
void ServerItemWidgetSelected();
void ServerItemWidgetTriggered();
void ServerItemWidgetDeleteTriggered();
void ServerItemWidgetWakeTriggered();
void UpdateDiscoveryEnabled();
void ShowSettings();

View file

@ -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

View file

@ -110,20 +110,27 @@ void MainWindow::ServerItemWidgetSelected()
server_item_widget->SetSelected(true);
}
void MainWindow::ServerItemWidgetTriggered()
DisplayServer *MainWindow::DisplayServerFromSender()
{
auto server_item_widget = qobject_cast<ServerItemWidget *>(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);
}

View file

@ -22,6 +22,8 @@
#include <QLabel>
#include <QVBoxLayout>
#include <QStyle>
#include <QMouseEvent>
#include <QAction>
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);
}