Add client functionality to send rescan request and add rescan button for each client in client list

This commit is contained in:
Adam Honse 2025-07-04 01:00:00 -05:00
parent 0cfe5ae0bb
commit 80dee91ab9
4 changed files with 67 additions and 24 deletions

View file

@ -762,6 +762,17 @@ void NetworkClient::SendRequest_ProtocolVersion()
send_in_progress.unlock();
}
void NetworkClient::SendRequest_RescanDevices()
{
NetPacketHeader request_hdr;
InitNetPacketHeader(&request_hdr, 0, NET_PACKET_ID_REQUEST_RESCAN_DEVICES, 0);
send_in_progress.lock();
send(client_sock, (char *)&request_hdr, sizeof(NetPacketHeader), MSG_NOSIGNAL);
send_in_progress.unlock();
}
void NetworkClient::SendRequest_RGBController_ClearSegments(unsigned int dev_idx, int zone)
{
if(change_in_progress)

View file

@ -61,6 +61,8 @@ public:
void SendRequest_ControllerData(unsigned int dev_idx);
void SendRequest_ProtocolVersion();
void SendRequest_RescanDevices();
void SendRequest_RGBController_ClearSegments(unsigned int dev_idx, int zone);
void SendRequest_RGBController_AddSegment(unsigned int dev_idx, unsigned char * data, unsigned int size);
void SendRequest_RGBController_ResizeZone(unsigned int dev_idx, int zone, int new_size);

View file

@ -93,21 +93,24 @@ void OpenRGBClientInfoPage::UpdateInfo()
/*-----------------------------------------------------*\
| Set up the tree view header |
\*-----------------------------------------------------*/
ui->ClientTree->setColumnCount(4);
ui->ClientTree->setColumnCount(5);
ui->ClientTree->header()->setStretchLastSection(false);
ui->ClientTree->header()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->ClientTree->setColumnWidth(1, 100);
ui->ClientTree->setColumnWidth(2, 100);
ui->ClientTree->setColumnWidth(3, 100);
ui->ClientTree->setColumnWidth(4, 100);
/*-----------------------------------------------------*\
| Set up a signal mapper to handle disconnect buttons |
| Set up signal mappers to handle buttons |
\*-----------------------------------------------------*/
QSignalMapper* signalMapper = new QSignalMapper(this);
connect(signalMapper, SIGNAL(mapped(QObject *)), this, SLOT(onClientDisconnectButton_clicked(QObject *)));
QSignalMapper* signalMapperDisconnect = new QSignalMapper(this);
QSignalMapper* signalMapperSave = new QSignalMapper(this);
QSignalMapper* signalMapperRescan = new QSignalMapper(this);
QSignalMapper* signalMapperSave = new QSignalMapper(this);
connect(signalMapperSave, SIGNAL(mapped(QObject *)), this, SLOT(onClientSaveCheckBox_clicked(QObject *)));
connect(signalMapperDisconnect, SIGNAL(mapped(QObject *)), this, SLOT(onClientDisconnectButton_clicked(QObject *)));
connect(signalMapperSave, SIGNAL(mapped(QObject *)), this, SLOT(onClientSaveCheckBox_clicked(QObject *)));
connect(signalMapperRescan, SIGNAL(mapped(QObject *)), this, SLOT(onClientRescanButton_clicked(QObject *)));
/*-------------------------------------------------*\
| Get Client settings |
@ -157,32 +160,45 @@ void OpenRGBClientInfoPage::UpdateInfo()
/*-----------------------------------------------------*\
| Create the save checkbox |
\*-----------------------------------------------------*/
QCheckBox* new_checkbox = new QCheckBox( "" );
ui->ClientTree->setItemWidget(new_top_item, 2, new_checkbox);
new_checkbox->setChecked(found);
QCheckBox* checkbox_save = new QCheckBox( "" );
ui->ClientTree->setItemWidget(new_top_item, 2, checkbox_save);
checkbox_save->setChecked(found);
connect(new_checkbox, SIGNAL(clicked()), signalMapperSave, SLOT(map()));
connect(checkbox_save, SIGNAL(clicked()), signalMapperSave, SLOT(map()));
NetworkClientPointer * new_save_arg = new NetworkClientPointer();
new_save_arg->net_client = ResourceManager::get()->GetClients()[client_idx];
new_save_arg->widget = new_checkbox;
NetworkClientPointer * arg_save = new NetworkClientPointer();
arg_save->net_client = ResourceManager::get()->GetClients()[client_idx];
arg_save->widget = checkbox_save;
signalMapperSave->setMapping(new_checkbox, new_save_arg);
signalMapperSave->setMapping(checkbox_save, arg_save);
/*-----------------------------------------------------*\
| Create the disconnect buttons and connect them to the |
| signal mapper |
| Create the rescan button |
\*-----------------------------------------------------*/
QPushButton* new_button = new QPushButton(tr("Disconnect"));
ui->ClientTree->setItemWidget(new_top_item, 3, new_button);
QPushButton* button_rescan = new QPushButton(tr("Rescan Devices"));
ui->ClientTree->setItemWidget(new_top_item, 3, button_rescan);
connect(new_button, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(button_rescan, SIGNAL(clicked()), signalMapperRescan, SLOT(map()));
NetworkClientPointer * new_arg = new NetworkClientPointer();
new_arg->net_client = ResourceManager::get()->GetClients()[client_idx];
new_arg->widget = new_button;
NetworkClientPointer * arg_rescan = new NetworkClientPointer();
arg_rescan->net_client = ResourceManager::get()->GetClients()[client_idx];
arg_rescan->widget = button_rescan;
signalMapper->setMapping(new_button, new_arg);
signalMapperRescan->setMapping(button_rescan, arg_rescan);
/*-----------------------------------------------------*\
| Create the disconnect button |
\*-----------------------------------------------------*/
QPushButton* button_disconnect = new QPushButton(tr("Disconnect"));
ui->ClientTree->setItemWidget(new_top_item, 4, button_disconnect);
connect(button_disconnect, SIGNAL(clicked()), signalMapperDisconnect, SLOT(map()));
NetworkClientPointer * arg_disconnect = new NetworkClientPointer();
arg_disconnect->net_client = ResourceManager::get()->GetClients()[client_idx];
arg_disconnect->widget = button_disconnect;
signalMapperDisconnect->setMapping(button_disconnect, arg_disconnect);
/*-----------------------------------------------------*\
| Add child items for each device in the client |
@ -267,7 +283,7 @@ void OpenRGBClientInfoPage::on_ClientConnectButton_clicked()
void OpenRGBClientInfoPage::onClientDisconnectButton_clicked(QObject * arg)
{
/*-----------------------------------------------------*\
| Get the pointer to the disconnecting client from args |
| Get the pointer to the client from args |
\*-----------------------------------------------------*/
NetworkClient * disconnect_client = ((NetworkClientPointer *)arg)->net_client;
@ -278,6 +294,19 @@ void OpenRGBClientInfoPage::onClientDisconnectButton_clicked(QObject * arg)
ResourceManager::get()->UnregisterNetworkClient(disconnect_client);
}
void OpenRGBClientInfoPage::onClientRescanButton_clicked(QObject * arg)
{
/*-----------------------------------------------------*\
| Get the pointer to the client from args |
\*-----------------------------------------------------*/
NetworkClient * rescan_client = ((NetworkClientPointer *)arg)->net_client;
/*-----------------------------------------------------*\
| Send a rescan request to the client |
\*-----------------------------------------------------*/
rescan_client->SendRequest_RescanDevices();
}
void OpenRGBClientInfoPage::onClientSaveCheckBox_clicked(QObject * arg)
{
/*-----------------------------------------------------*\

View file

@ -35,6 +35,7 @@ private slots:
void changeEvent(QEvent *event);
void on_ClientConnectButton_clicked();
void onClientDisconnectButton_clicked(QObject * arg);
void onClientRescanButton_clicked(QObject * arg);
void onClientSaveCheckBox_clicked(QObject * arg);
private: