diff --git a/OpenRGBE131ReceiverDialog.cpp b/OpenRGBE131ReceiverDialog.cpp index 72cf553..12f77e6 100644 --- a/OpenRGBE131ReceiverDialog.cpp +++ b/OpenRGBE131ReceiverDialog.cpp @@ -95,6 +95,7 @@ void OpenRGBE131ReceiverDialog::DeviceListChanged() { if(resource_manager->GetDetectionPercent() == 100) { + ui->ControllersTreeView->clear(); ui->E131TreeView->clear(); universe_list.clear(); @@ -161,6 +162,7 @@ void OpenRGBE131ReceiverDialog::DeviceListChanged() } } + UpdateControllersTreeView(); UpdateTreeView(); } else @@ -170,6 +172,23 @@ void OpenRGBE131ReceiverDialog::DeviceListChanged() } } +void OpenRGBE131ReceiverDialog::UpdateControllersTreeView() +{ + ui->ControllersTreeView->clear(); + + ui->ControllersTreeView->setColumnCount(1); + ui->ControllersTreeView->setHeaderLabels(QStringList() << "Controller"); + + for(unsigned int controller_idx = 0; controller_idx < resource_manager->GetRGBControllers().size(); controller_idx++) + { + RGBController* controller = resource_manager->GetRGBControllers()[controller_idx]; + + QTreeWidgetItem* new_controller_entry = new QTreeWidgetItem(ui->ControllersTreeView); + + new_controller_entry->setText(0, QString::fromStdString(controller->name)); + } +} + void OpenRGBE131ReceiverDialog::UpdateTreeView() { ui->E131TreeView->clear(); @@ -520,3 +539,120 @@ void OpenRGBE131ReceiverDialog::on_CheckBox_updated(QObject* checkbox_argument) break; } } + +void OpenRGBE131ReceiverDialog::on_ButtonAddController_clicked() +{ + /*-----------------------------------------------------*\ + | Make sure a valid controller is selected on the left | + | and a valid universe is selected on the right | + \*-----------------------------------------------------*/ + int selected_controller = ui->ControllersTreeView->indexOfTopLevelItem(ui->ControllersTreeView->currentItem()); + int selected_universe = ui->E131TreeView->indexOfTopLevelItem(ui->E131TreeView->currentItem()); + + if((selected_controller == -1) || (selected_universe == -1)) + { + return; + } + + /*-----------------------------------------------------*\ + | Add controller to universe | + \*-----------------------------------------------------*/ + universe_member new_member; + + new_member.controller = resource_manager->GetRGBControllers()[selected_controller]; + new_member.start_channel = 1; + new_member.start_led = 0; + new_member.num_leds = 0; + new_member.update = false; + + universe_list[selected_universe].members.push_back(new_member); + + /*-----------------------------------------------------*\ + | Update the universe tree view | + \*-----------------------------------------------------*/ + UpdateTreeView(); +} + +void OpenRGBE131ReceiverDialog::on_ButtonRemoveController_clicked() +{ + /*-----------------------------------------------------*\ + | Make selected item is not a top-level (universe) | + \*-----------------------------------------------------*/ + int selected_controller = ui->E131TreeView->indexOfTopLevelItem(ui->E131TreeView->currentItem()); + + if(selected_controller != -1) + { + return; + } + + /*-----------------------------------------------------*\ + | Get index of universe member | + \*-----------------------------------------------------*/ + selected_controller = ui->E131TreeView->currentIndex().row(); + int selected_universe = ui->E131TreeView->indexOfTopLevelItem(ui->E131TreeView->currentItem()->parent()); + + if(selected_universe == -1) + { + return; + } + + /*-----------------------------------------------------*\ + | Remove controller member from universe | + \*-----------------------------------------------------*/ + universe_list[selected_universe].members.erase(universe_list[selected_universe].members.begin() + selected_controller); + + /*-----------------------------------------------------*\ + | Update the universe tree view | + \*-----------------------------------------------------*/ + UpdateTreeView(); +} + +void OpenRGBE131ReceiverDialog::on_ButtonAddUniverse_clicked() +{ + /*-----------------------------------------------------*\ + | Get next universe value | + \*-----------------------------------------------------*/ + unsigned int next_universe = 1; + + if(universe_list.size() > 0) + { + next_universe = universe_list[universe_list.size() - 1].universe + 1; + } + + /*-----------------------------------------------------*\ + | Create and add new universe to list | + \*-----------------------------------------------------*/ + universe_entry new_universe; + + new_universe.universe = next_universe; + + universe_list.push_back(new_universe); + + /*-----------------------------------------------------*\ + | Update the universe tree view | + \*-----------------------------------------------------*/ + UpdateTreeView(); +} + +void OpenRGBE131ReceiverDialog::on_ButtonRemoveUniverse_clicked() +{ + /*-----------------------------------------------------*\ + | Get index of universe | + \*-----------------------------------------------------*/ + int selected_universe = ui->E131TreeView->indexOfTopLevelItem(ui->E131TreeView->currentItem()); + + if(selected_universe == -1) + { + return; + } + + /*-----------------------------------------------------*\ + | Remove universe | + \*-----------------------------------------------------*/ + universe_list.erase(universe_list.begin() + selected_universe); + + /*-----------------------------------------------------*\ + | Update the universe tree view | + \*-----------------------------------------------------*/ + UpdateTreeView(); +} diff --git a/OpenRGBE131ReceiverDialog.h b/OpenRGBE131ReceiverDialog.h index 50cc2d1..7d6b17b 100644 --- a/OpenRGBE131ReceiverDialog.h +++ b/OpenRGBE131ReceiverDialog.h @@ -31,6 +31,14 @@ private slots: void on_CheckBox_updated(QObject* checkbox_argument); + void on_ButtonAddController_clicked(); + + void on_ButtonRemoveController_clicked(); + + void on_ButtonAddUniverse_clicked(); + + void on_ButtonRemoveUniverse_clicked(); + private: ResourceManager* resource_manager; Ui::OpenRGBE131ReceiverDialog *ui; @@ -41,6 +49,7 @@ private: std::thread* E131ReceiverThread; void UpdateOnlineStatus(); + void UpdateControllersTreeView(); void UpdateTreeView(); }; diff --git a/OpenRGBE131ReceiverDialog.ui b/OpenRGBE131ReceiverDialog.ui index e154432..eff004c 100644 --- a/OpenRGBE131ReceiverDialog.ui +++ b/OpenRGBE131ReceiverDialog.ui @@ -20,7 +20,14 @@ Form - + + + + Stop Receiver + + + + @@ -29,17 +36,10 @@ - - + + - 0 - - - - - - - Source + Receiver Status: @@ -50,10 +50,17 @@ - - + + - Stop Receiver + Receiver Source: + + + + + + + Source @@ -64,6 +71,13 @@ + + + + 0 + + + @@ -71,20 +85,6 @@ - - - - Receiver Status: - - - - - - - Receiver Source: - - - @@ -98,6 +98,43 @@ + + + + + 1 + + + + + + + + Add Controller + + + + + + + Remove Controller + + + + + + + Add Universe + + + + + + + Remove Universe + + +