mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-14 10:46:51 -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;
|
||||
|
||||
DisplayServer *DisplayServerFromSender();
|
||||
|
||||
private slots:
|
||||
void ServerItemWidgetSelected();
|
||||
void ServerItemWidgetTriggered();
|
||||
void ServerItemWidgetDeleteTriggered();
|
||||
void ServerItemWidgetWakeTriggered();
|
||||
|
||||
void UpdateDiscoveryEnabled();
|
||||
void ShowSettings();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue