From 3639b9e186cbc98560beace979cbf53feee58059 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 22 Feb 2022 19:45:06 -0600 Subject: [PATCH] Segment editor --- qt/OpenRGBDevicePage.cpp | 24 ++-------------- qt/OpenRGBZoneResizeDialog.cpp | 52 +++++++++++++++++++++++++++++++++- qt/OpenRGBZoneResizeDialog.h | 10 ++++++- qt/OpenRGBZoneResizeDialog.ui | 11 +++++-- 4 files changed, 71 insertions(+), 26 deletions(-) diff --git a/qt/OpenRGBDevicePage.cpp b/qt/OpenRGBDevicePage.cpp index 76b743a0b..f373ecd87 100644 --- a/qt/OpenRGBDevicePage.cpp +++ b/qt/OpenRGBDevicePage.cpp @@ -1073,31 +1073,12 @@ void Ui::OpenRGBDevicePage::on_ResizeButton_clicked() if(device->zones[selected_zone].type == ZONE_TYPE_LINEAR) { - OpenRGBZoneResizeDialog dlg(device->zones[selected_zone].leds_min, - device->zones[selected_zone].leds_max, - device->zones[selected_zone].leds_count); + OpenRGBZoneResizeDialog dlg(device, selected_zone); int new_size = dlg.show(); if(new_size >= 0) { - device->ResizeZone(selected_zone, new_size); - - segment new_segment; - new_segment.name = "Segment 1"; - new_segment.type = ZONE_TYPE_LINEAR; - new_segment.start_idx = 0; - new_segment.leds_count = 5; - - device->zones[selected_zone].segments.push_back(new_segment); - - new_segment.name = "Segment 2"; - new_segment.type = ZONE_TYPE_LINEAR; - new_segment.start_idx = 5; - new_segment.leds_count = device->zones[selected_zone].leds_count - 5; - - device->zones[selected_zone].segments.push_back(new_segment); - /*-----------------------------------------------------*\ | Update LED box | \*-----------------------------------------------------*/ @@ -1116,7 +1097,7 @@ void Ui::OpenRGBDevicePage::on_ResizeButton_clicked() } } break; - +#if 0 case MODE_COLORS_MODE_SPECIFIC: { OpenRGBZoneResizeDialog dlg(device->modes[device->active_mode].colors_min, @@ -1134,6 +1115,7 @@ void Ui::OpenRGBDevicePage::on_ResizeButton_clicked() UpdateMode(); } break; +#endif } } diff --git a/qt/OpenRGBZoneResizeDialog.cpp b/qt/OpenRGBZoneResizeDialog.cpp index d3aeca7cd..d487ba154 100644 --- a/qt/OpenRGBZoneResizeDialog.cpp +++ b/qt/OpenRGBZoneResizeDialog.cpp @@ -1,11 +1,20 @@ #include "OpenRGBZoneResizeDialog.h" +#include + using namespace Ui; -OpenRGBZoneResizeDialog::OpenRGBZoneResizeDialog(int size_min, int size_max, int size_current, QWidget *parent) : +OpenRGBZoneResizeDialog::OpenRGBZoneResizeDialog(RGBController* edit_dev_ptr, unsigned int edit_zone_idx_val, QWidget *parent) : QDialog(parent), ui(new Ui::OpenRGBZoneResizeDialogUi) { + edit_dev = edit_dev_ptr; + edit_zone_idx = edit_zone_idx_val; + + unsigned int size_min = edit_dev->zones[edit_zone_idx].leds_min; + unsigned int size_max = edit_dev->zones[edit_zone_idx].leds_max; + unsigned int size_current = edit_dev->zones[edit_zone_idx].leds_count; + ui->setupUi(this); ui->ResizeSlider->setRange(size_min, size_max); @@ -49,5 +58,46 @@ int Ui::OpenRGBZoneResizeDialog::show() ret_val = ui->ResizeBox->value(); } + if(ret_val >= 0) + { + edit_dev->ResizeZone(edit_zone_idx, ret_val); + + edit_dev->zones[edit_zone_idx].segments.clear(); + + for(unsigned int item_idx = 0; item_idx < ui->SegmentsTreeWidget->topLevelItemCount(); item_idx++) + { + segment new_segment; + new_segment.type = ZONE_TYPE_LINEAR; + new_segment.name = ((QLineEdit*)ui->SegmentsTreeWidget->itemWidget(ui->SegmentsTreeWidget->topLevelItem(item_idx), 0))->text().toStdString(); + new_segment.start_idx = ((QLineEdit*)ui->SegmentsTreeWidget->itemWidget(ui->SegmentsTreeWidget->topLevelItem(item_idx), 1))->text().toInt(); + new_segment.leds_count = ((QLineEdit*)ui->SegmentsTreeWidget->itemWidget(ui->SegmentsTreeWidget->topLevelItem(item_idx), 2))->text().toInt(); + + edit_dev->zones[edit_zone_idx].segments.push_back(new_segment); + } + } + return(ret_val); } + +void Ui::OpenRGBZoneResizeDialog::on_AddSegmentButton_clicked() +{ + ui->SegmentsTreeWidget->setColumnCount(3); + ui->SegmentsTreeWidget->setHeaderLabels(QStringList() << "Name" << "Start" << "Length"); + + QTreeWidgetItem* new_item = new QTreeWidgetItem(ui->SegmentsTreeWidget); + + QLineEdit* lineedit_name = new QLineEdit(ui->SegmentsTreeWidget); + QLineEdit* lineedit_start = new QLineEdit(ui->SegmentsTreeWidget); + QLineEdit* lineedit_length = new QLineEdit(ui->SegmentsTreeWidget); + + ui->SegmentsTreeWidget->setItemWidget(new_item, 0, lineedit_name); + ui->SegmentsTreeWidget->setItemWidget(new_item, 1, lineedit_start); + ui->SegmentsTreeWidget->setItemWidget(new_item, 2, lineedit_length); +} + + +void Ui::OpenRGBZoneResizeDialog::on_RemoveSegmentButton_clicked() +{ + ui->SegmentsTreeWidget->takeTopLevelItem(ui->SegmentsTreeWidget->topLevelItemCount() - 1); +} + diff --git a/qt/OpenRGBZoneResizeDialog.h b/qt/OpenRGBZoneResizeDialog.h index 300c389fb..c562202a1 100644 --- a/qt/OpenRGBZoneResizeDialog.h +++ b/qt/OpenRGBZoneResizeDialog.h @@ -4,6 +4,8 @@ #include #include "ui_OpenRGBZoneResizeDialog.h" +#include "RGBController.h" + namespace Ui { class OpenRGBZoneResizeDialog; } @@ -13,7 +15,7 @@ class Ui::OpenRGBZoneResizeDialog : public QDialog Q_OBJECT public: - explicit OpenRGBZoneResizeDialog(int size_min, int size_max, int size_current, QWidget *parent = nullptr); + explicit OpenRGBZoneResizeDialog(RGBController* edit_dev_ptr, unsigned int edit_zone_idx_val, QWidget *parent = nullptr); ~OpenRGBZoneResizeDialog(); int show(); @@ -23,8 +25,14 @@ private slots: void on_ResizeBox_valueChanged(int arg1); + void on_AddSegmentButton_clicked(); + + void on_RemoveSegmentButton_clicked(); + private: Ui::OpenRGBZoneResizeDialogUi *ui; + RGBController* edit_dev; + unsigned int edit_zone_idx; }; #endif // OPENRGBZONERESIZEDIALOG_H diff --git a/qt/OpenRGBZoneResizeDialog.ui b/qt/OpenRGBZoneResizeDialog.ui index 7ad47584d..a007ebcfb 100644 --- a/qt/OpenRGBZoneResizeDialog.ui +++ b/qt/OpenRGBZoneResizeDialog.ui @@ -52,7 +52,7 @@ - + 20 @@ -61,8 +61,13 @@ 101 + + + 1 + + - + 60 @@ -75,7 +80,7 @@ Add Segment - + 206