mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 13:33:13 -07:00
Add ServerItemWidget Actions
This commit is contained in:
parent
d4db8e32e6
commit
52cacecaa0
4 changed files with 73 additions and 12 deletions
|
@ -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();
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
{
|
||||||
|
auto server = DisplayServerFromSender();
|
||||||
|
if(!server)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(server->registered)
|
||||||
{
|
{
|
||||||
QString host = server.GetHostAddr();
|
QString host = server->GetHostAddr();
|
||||||
StreamSessionConnectInfo info(settings, host, server.registered_host.GetRPRegistKey(), server.registered_host.GetRPKey());
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue