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(); 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) void NetworkClient::SendRequest_RGBController_ClearSegments(unsigned int dev_idx, int zone)
{ {
if(change_in_progress) if(change_in_progress)

View file

@ -61,6 +61,8 @@ public:
void SendRequest_ControllerData(unsigned int dev_idx); void SendRequest_ControllerData(unsigned int dev_idx);
void SendRequest_ProtocolVersion(); void SendRequest_ProtocolVersion();
void SendRequest_RescanDevices();
void SendRequest_RGBController_ClearSegments(unsigned int dev_idx, int zone); 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_AddSegment(unsigned int dev_idx, unsigned char * data, unsigned int size);
void SendRequest_RGBController_ResizeZone(unsigned int dev_idx, int zone, int new_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 | | Set up the tree view header |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
ui->ClientTree->setColumnCount(4); ui->ClientTree->setColumnCount(5);
ui->ClientTree->header()->setStretchLastSection(false); ui->ClientTree->header()->setStretchLastSection(false);
ui->ClientTree->header()->setSectionResizeMode(0, QHeaderView::Stretch); ui->ClientTree->header()->setSectionResizeMode(0, QHeaderView::Stretch);
ui->ClientTree->setColumnWidth(1, 100); ui->ClientTree->setColumnWidth(1, 100);
ui->ClientTree->setColumnWidth(2, 100); ui->ClientTree->setColumnWidth(2, 100);
ui->ClientTree->setColumnWidth(3, 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); QSignalMapper* signalMapperDisconnect = new QSignalMapper(this);
connect(signalMapper, SIGNAL(mapped(QObject *)), this, SLOT(onClientDisconnectButton_clicked(QObject *))); QSignalMapper* signalMapperSave = new QSignalMapper(this);
QSignalMapper* signalMapperRescan = new QSignalMapper(this);
QSignalMapper* signalMapperSave = new QSignalMapper(this); connect(signalMapperDisconnect, SIGNAL(mapped(QObject *)), this, SLOT(onClientDisconnectButton_clicked(QObject *)));
connect(signalMapperSave, SIGNAL(mapped(QObject *)), this, SLOT(onClientSaveCheckBox_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 | | Get Client settings |
@ -157,32 +160,45 @@ void OpenRGBClientInfoPage::UpdateInfo()
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\
| Create the save checkbox | | Create the save checkbox |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
QCheckBox* new_checkbox = new QCheckBox( "" ); QCheckBox* checkbox_save = new QCheckBox( "" );
ui->ClientTree->setItemWidget(new_top_item, 2, new_checkbox); ui->ClientTree->setItemWidget(new_top_item, 2, checkbox_save);
new_checkbox->setChecked(found); 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(); NetworkClientPointer * arg_save = new NetworkClientPointer();
new_save_arg->net_client = ResourceManager::get()->GetClients()[client_idx]; arg_save->net_client = ResourceManager::get()->GetClients()[client_idx];
new_save_arg->widget = new_checkbox; 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 | | Create the rescan button |
| signal mapper |
\*-----------------------------------------------------*/ \*-----------------------------------------------------*/
QPushButton* new_button = new QPushButton(tr("Disconnect")); QPushButton* button_rescan = new QPushButton(tr("Rescan Devices"));
ui->ClientTree->setItemWidget(new_top_item, 3, new_button); 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(); NetworkClientPointer * arg_rescan = new NetworkClientPointer();
new_arg->net_client = ResourceManager::get()->GetClients()[client_idx]; arg_rescan->net_client = ResourceManager::get()->GetClients()[client_idx];
new_arg->widget = new_button; 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 | | Add child items for each device in the client |
@ -267,7 +283,7 @@ void OpenRGBClientInfoPage::on_ClientConnectButton_clicked()
void OpenRGBClientInfoPage::onClientDisconnectButton_clicked(QObject * arg) 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; NetworkClient * disconnect_client = ((NetworkClientPointer *)arg)->net_client;
@ -278,6 +294,19 @@ void OpenRGBClientInfoPage::onClientDisconnectButton_clicked(QObject * arg)
ResourceManager::get()->UnregisterNetworkClient(disconnect_client); 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) void OpenRGBClientInfoPage::onClientSaveCheckBox_clicked(QObject * arg)
{ {
/*-----------------------------------------------------*\ /*-----------------------------------------------------*\

View file

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