diff --git a/RGBController/RGBController.cpp b/RGBController/RGBController.cpp
index 57318f5b..ec64769f 100644
--- a/RGBController/RGBController.cpp
+++ b/RGBController/RGBController.cpp
@@ -1523,6 +1523,11 @@ void RGBController::UpdateMode()
CallFlag_UpdateMode = true;
}
+void RGBController::SaveMode()
+{
+ DeviceSaveMode();
+}
+
void RGBController::DeviceUpdateLEDs()
{
@@ -1557,6 +1562,13 @@ void RGBController::DeviceCallThreadFunction()
}
}
+void RGBController::DeviceSaveMode()
+{
+ /*-------------------------------------------------*\
+ | If not implemented by controller, does nothing |
+ \*-------------------------------------------------*/
+}
+
std::string device_type_to_str(device_type type)
{
switch(type)
diff --git a/RGBController/RGBController.h b/RGBController/RGBController.h
index bb6fbc2f..28e4af03 100644
--- a/RGBController/RGBController.h
+++ b/RGBController/RGBController.h
@@ -37,6 +37,8 @@ enum
MODE_FLAG_HAS_PER_LED_COLOR = (1 << 5), /* Mode has per-LED colors */
MODE_FLAG_HAS_MODE_SPECIFIC_COLOR = (1 << 6), /* Mode has mode specific colors */
MODE_FLAG_HAS_RANDOM_COLOR = (1 << 7), /* Mode has random color option */
+ MODE_FLAG_MANUAL_SAVE = (1 << 8), /* Mode can manually be saved */
+ MODE_FLAG_AUTOMATIC_SAVE = (1 << 9), /* Mode automatically saves */
};
/*------------------------------------------------------------------*\
@@ -194,6 +196,7 @@ public:
//virtual void UpdateSingleLED(int led) = 0;
virtual void UpdateMode() = 0;
+ virtual void SaveMode() = 0;
virtual void DeviceCallThreadFunction() = 0;
@@ -209,6 +212,7 @@ public:
virtual void UpdateSingleLED(int led) = 0;
virtual void DeviceUpdateMode() = 0;
+ virtual void DeviceSaveMode() = 0;
virtual void SetCustomMode() = 0;
};
@@ -273,6 +277,7 @@ public:
//void UpdateSingleLED(int led);
void UpdateMode();
+ void SaveMode();
void DeviceCallThreadFunction();
@@ -288,6 +293,7 @@ public:
virtual void UpdateSingleLED(int led) = 0;
virtual void DeviceUpdateMode() = 0;
+ void DeviceSaveMode();
virtual void SetCustomMode() = 0;
diff --git a/qt/OpenRGBDevicePage.cpp b/qt/OpenRGBDevicePage.cpp
index 6dec979e..72f7f1e0 100644
--- a/qt/OpenRGBDevicePage.cpp
+++ b/qt/OpenRGBDevicePage.cpp
@@ -459,6 +459,8 @@ void Ui::OpenRGBDevicePage::UpdateModeUi()
bool mode_specific = device->modes[selected_mode].color_mode == MODE_COLORS_MODE_SPECIFIC;
bool random = device->modes[selected_mode].color_mode == MODE_COLORS_RANDOM;
unsigned int dir = device->modes[selected_mode].direction;
+ bool manual_save = ( device->modes[selected_mode].flags & MODE_FLAG_MANUAL_SAVE );
+ bool automatic_save = ( device->modes[selected_mode].flags & MODE_FLAG_AUTOMATIC_SAVE );
if(supports_speed)
{
@@ -633,6 +635,22 @@ void Ui::OpenRGBDevicePage::UpdateModeUi()
ui->RandomCheck->setAutoExclusive(true);
}
+ if(automatic_save)
+ {
+ ui->DeviceSaveButton->setText("Saved To Device");
+ ui->DeviceSaveButton->setEnabled(false);
+ }
+ else if(manual_save)
+ {
+ ui->DeviceSaveButton->setText("Save To Device");
+ ui->DeviceSaveButton->setEnabled(true);
+ }
+ else
+ {
+ ui->DeviceSaveButton->setText("Saving Not Supported");
+ ui->DeviceSaveButton->setEnabled(false);
+ }
+
/*-----------------------------------------------------*\
| Fill in the zone box based on color mode |
\*-----------------------------------------------------*/
@@ -1311,3 +1329,11 @@ void Ui::OpenRGBDevicePage::on_SelectAllLEDsButton_clicked()
ui->DeviceViewBox->repaint();
}
}
+
+void Ui::OpenRGBDevicePage::on_DeviceSaveButton_clicked()
+{
+ if(device->modes[device->active_mode].flags & MODE_FLAG_MANUAL_SAVE)
+ {
+ device->SaveMode();
+ }
+}
diff --git a/qt/OpenRGBDevicePage.h b/qt/OpenRGBDevicePage.h
index fe54b6d7..5e31041a 100644
--- a/qt/OpenRGBDevicePage.h
+++ b/qt/OpenRGBDevicePage.h
@@ -57,6 +57,8 @@ private slots:
void on_SelectAllLEDsButton_clicked();
+ void on_DeviceSaveButton_clicked();
+
private:
Ui::OpenRGBDevicePageUi *ui;
RGBController *device;
diff --git a/qt/OpenRGBDevicePage.ui b/qt/OpenRGBDevicePage.ui
index ac0e42d6..f3a1d506 100644
--- a/qt/OpenRGBDevicePage.ui
+++ b/qt/OpenRGBDevicePage.ui
@@ -254,6 +254,13 @@
+ -
+
+
+ Save To Device
+
+
+