Add capability to modify universe and controller mapping

This commit is contained in:
Adam Honse 2021-01-17 17:00:54 -06:00
parent de4f73db55
commit 1bdc603b75
3 changed files with 210 additions and 28 deletions

View file

@ -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();
}

View file

@ -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();
};

View file

@ -20,7 +20,14 @@
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="4" column="0" colspan="5">
<item row="3" column="4">
<widget class="QPushButton" name="ButtonStopReceiver">
<property name="text">
<string>Stop Receiver</string>
</property>
</widget>
</item>
<item row="5" column="2" colspan="3">
<widget class="QTreeWidget" name="E131TreeView">
<column>
<property name="text">
@ -29,17 +36,10 @@
</column>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="PacketsReceivedValue">
<item row="0" column="0">
<widget class="QLabel" name="ReceiverStatusLabel">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="ReceiverSourceValue">
<property name="text">
<string>Source</string>
<string>Receiver Status:</string>
</property>
</widget>
</item>
@ -50,10 +50,17 @@
</property>
</widget>
</item>
<item row="3" column="4">
<widget class="QPushButton" name="ButtonStopReceiver">
<item row="0" column="2">
<widget class="QLabel" name="ReceiverSourceLabel">
<property name="text">
<string>Stop Receiver</string>
<string>Receiver Source:</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QLabel" name="ReceiverSourceValue">
<property name="text">
<string>Source</string>
</property>
</widget>
</item>
@ -64,6 +71,13 @@
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="PacketsReceivedValue">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item row="0" column="4">
<widget class="QPushButton" name="ButtonStartReceiver">
<property name="text">
@ -71,20 +85,6 @@
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="ReceiverStatusLabel">
<property name="text">
<string>Receiver Status:</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QLabel" name="ReceiverSourceLabel">
<property name="text">
<string>Receiver Source:</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QCheckBox" name="EnableMulticastBox">
<property name="layoutDirection">
@ -98,6 +98,43 @@
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QTreeWidget" name="ControllersTreeView">
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget>
</item>
<item row="4" column="0">
<widget class="QPushButton" name="ButtonAddController">
<property name="text">
<string>Add Controller</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="ButtonRemoveController">
<property name="text">
<string>Remove Controller</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QPushButton" name="ButtonAddUniverse">
<property name="text">
<string>Add Universe</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QPushButton" name="ButtonRemoveUniverse">
<property name="text">
<string>Remove Universe</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>