mirror of
https://github.com/sudoxnym/open-hyperion.git
synced 2026-07-13 15:38:36 +00:00
Don't automatically map universes when controllers become available, instead move auto-map to a button
This commit is contained in:
parent
02d013b44a
commit
c43c2c9813
3 changed files with 87 additions and 63 deletions
|
|
@ -99,69 +99,6 @@ void OpenRGBE131ReceiverDialog::DeviceListChanged()
|
||||||
ui->E131TreeView->clear();
|
ui->E131TreeView->clear();
|
||||||
universe_list.clear();
|
universe_list.clear();
|
||||||
|
|
||||||
for(unsigned int controller_idx = 0; controller_idx < resource_manager->GetRGBControllers().size(); controller_idx++)
|
|
||||||
{
|
|
||||||
RGBController* controller = resource_manager->GetRGBControllers()[controller_idx];
|
|
||||||
|
|
||||||
// Determine if the controller has a Direct mode
|
|
||||||
bool has_direct = false;
|
|
||||||
for(unsigned int mode_idx = 0; mode_idx < controller->modes.size(); mode_idx++)
|
|
||||||
{
|
|
||||||
if(controller->modes[mode_idx].name == "Direct")
|
|
||||||
{
|
|
||||||
has_direct = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only map controllers that have a Direct mode
|
|
||||||
if(has_direct)
|
|
||||||
{
|
|
||||||
unsigned int num_universes = 1 + ((controller->leds.size() * 3) / 512);
|
|
||||||
unsigned int remaining_leds = controller->leds.size();
|
|
||||||
unsigned int start_led = 0;
|
|
||||||
|
|
||||||
for(unsigned int universe_idx = 0; universe_idx < num_universes; universe_idx++)
|
|
||||||
{
|
|
||||||
// For now, create universes sequentially per controller
|
|
||||||
universe_entry new_entry;
|
|
||||||
|
|
||||||
new_entry.universe = universe_list.size() + 1;
|
|
||||||
|
|
||||||
// Add members as needed
|
|
||||||
universe_member new_member;
|
|
||||||
|
|
||||||
new_member.controller = resource_manager->GetRGBControllers()[controller_idx];
|
|
||||||
new_member.start_channel = 1;
|
|
||||||
new_member.start_led = start_led;
|
|
||||||
new_member.num_leds = remaining_leds;
|
|
||||||
new_member.update = false;
|
|
||||||
|
|
||||||
// Limit the number of LEDs
|
|
||||||
if(new_member.num_leds > MAX_LEDS_PER_UNIVERSE)
|
|
||||||
{
|
|
||||||
new_member.num_leds = MAX_LEDS_PER_UNIVERSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update start LED
|
|
||||||
start_led = start_led + new_member.num_leds;
|
|
||||||
|
|
||||||
// Update remaining LED count
|
|
||||||
remaining_leds = remaining_leds - new_member.num_leds;
|
|
||||||
|
|
||||||
// Only set the update flag for the last universe of the controller
|
|
||||||
if(universe_idx == (num_universes - 1))
|
|
||||||
{
|
|
||||||
new_member.update = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
new_entry.members.push_back(new_member);
|
|
||||||
|
|
||||||
universe_list.push_back(new_entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateControllersTreeView();
|
UpdateControllersTreeView();
|
||||||
UpdateTreeView();
|
UpdateTreeView();
|
||||||
}
|
}
|
||||||
|
|
@ -285,6 +222,72 @@ void OpenRGBE131ReceiverDialog::UpdateTreeView()
|
||||||
ui->E131TreeView->expandAll();
|
ui->E131TreeView->expandAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OpenRGBE131ReceiverDialog::AutoMap()
|
||||||
|
{
|
||||||
|
for(unsigned int controller_idx = 0; controller_idx < resource_manager->GetRGBControllers().size(); controller_idx++)
|
||||||
|
{
|
||||||
|
RGBController* controller = resource_manager->GetRGBControllers()[controller_idx];
|
||||||
|
|
||||||
|
// Determine if the controller has a Direct mode
|
||||||
|
bool has_direct = false;
|
||||||
|
for(unsigned int mode_idx = 0; mode_idx < controller->modes.size(); mode_idx++)
|
||||||
|
{
|
||||||
|
if(controller->modes[mode_idx].name == "Direct")
|
||||||
|
{
|
||||||
|
has_direct = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only map controllers that have a Direct mode
|
||||||
|
if(has_direct)
|
||||||
|
{
|
||||||
|
unsigned int num_universes = 1 + ((controller->leds.size() * 3) / 512);
|
||||||
|
unsigned int remaining_leds = controller->leds.size();
|
||||||
|
unsigned int start_led = 0;
|
||||||
|
|
||||||
|
for(unsigned int universe_idx = 0; universe_idx < num_universes; universe_idx++)
|
||||||
|
{
|
||||||
|
// For now, create universes sequentially per controller
|
||||||
|
universe_entry new_entry;
|
||||||
|
|
||||||
|
new_entry.universe = universe_list.size() + 1;
|
||||||
|
|
||||||
|
// Add members as needed
|
||||||
|
universe_member new_member;
|
||||||
|
|
||||||
|
new_member.controller = resource_manager->GetRGBControllers()[controller_idx];
|
||||||
|
new_member.start_channel = 1;
|
||||||
|
new_member.start_led = start_led;
|
||||||
|
new_member.num_leds = remaining_leds;
|
||||||
|
new_member.update = false;
|
||||||
|
|
||||||
|
// Limit the number of LEDs
|
||||||
|
if(new_member.num_leds > MAX_LEDS_PER_UNIVERSE)
|
||||||
|
{
|
||||||
|
new_member.num_leds = MAX_LEDS_PER_UNIVERSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update start LED
|
||||||
|
start_led = start_led + new_member.num_leds;
|
||||||
|
|
||||||
|
// Update remaining LED count
|
||||||
|
remaining_leds = remaining_leds - new_member.num_leds;
|
||||||
|
|
||||||
|
// Only set the update flag for the last universe of the controller
|
||||||
|
if(universe_idx == (num_universes - 1))
|
||||||
|
{
|
||||||
|
new_member.update = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
new_entry.members.push_back(new_member);
|
||||||
|
|
||||||
|
universe_list.push_back(new_entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction()
|
void OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction()
|
||||||
{
|
{
|
||||||
int sockfd;
|
int sockfd;
|
||||||
|
|
@ -668,3 +671,13 @@ void OpenRGBE131ReceiverDialog::on_ButtonRemoveUniverse_clicked()
|
||||||
\*-----------------------------------------------------*/
|
\*-----------------------------------------------------*/
|
||||||
UpdateTreeView();
|
UpdateTreeView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OpenRGBE131ReceiverDialog::on_ButtonAutoMap_clicked()
|
||||||
|
{
|
||||||
|
AutoMap();
|
||||||
|
|
||||||
|
/*-----------------------------------------------------*\
|
||||||
|
| Update the universe tree view |
|
||||||
|
\*-----------------------------------------------------*/
|
||||||
|
UpdateTreeView();
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@ public:
|
||||||
explicit OpenRGBE131ReceiverDialog(ResourceManager* manager, QWidget *parent = nullptr);
|
explicit OpenRGBE131ReceiverDialog(ResourceManager* manager, QWidget *parent = nullptr);
|
||||||
~OpenRGBE131ReceiverDialog();
|
~OpenRGBE131ReceiverDialog();
|
||||||
|
|
||||||
|
void AutoMap();
|
||||||
|
|
||||||
void E131ReceiverThreadFunction();
|
void E131ReceiverThreadFunction();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
@ -39,6 +41,8 @@ private slots:
|
||||||
|
|
||||||
void on_ButtonRemoveUniverse_clicked();
|
void on_ButtonRemoveUniverse_clicked();
|
||||||
|
|
||||||
|
void on_ButtonAutoMap_clicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ResourceManager* resource_manager;
|
ResourceManager* resource_manager;
|
||||||
Ui::OpenRGBE131ReceiverDialog *ui;
|
Ui::OpenRGBE131ReceiverDialog *ui;
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,13 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="4" column="4">
|
||||||
|
<widget class="QPushButton" name="ButtonAutoMap">
|
||||||
|
<property name="text">
|
||||||
|
<string>Auto-Map</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue