diff --git a/NetworkClient.cpp b/NetworkClient.cpp index 9ea9a3b3..a9e62163 100644 --- a/NetworkClient.cpp +++ b/NetworkClient.cpp @@ -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) diff --git a/NetworkClient.h b/NetworkClient.h index 77353f53..5444c707 100644 --- a/NetworkClient.h +++ b/NetworkClient.h @@ -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); diff --git a/qt/OpenRGBClientInfoPage/OpenRGBClientInfoPage.cpp b/qt/OpenRGBClientInfoPage/OpenRGBClientInfoPage.cpp index d48c250d..bcf6ee33 100644 --- a/qt/OpenRGBClientInfoPage/OpenRGBClientInfoPage.cpp +++ b/qt/OpenRGBClientInfoPage/OpenRGBClientInfoPage.cpp @@ -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) { /*-----------------------------------------------------*\ diff --git a/qt/OpenRGBClientInfoPage/OpenRGBClientInfoPage.h b/qt/OpenRGBClientInfoPage/OpenRGBClientInfoPage.h index 33d507a6..8f13646f 100644 --- a/qt/OpenRGBClientInfoPage/OpenRGBClientInfoPage.h +++ b/qt/OpenRGBClientInfoPage/OpenRGBClientInfoPage.h @@ -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: