diff --git a/htdocs/index.html b/htdocs/index.html
index 55941201..3df55809 100644
--- a/htdocs/index.html
+++ b/htdocs/index.html
@@ -35,6 +35,7 @@
+
diff --git a/htdocs/openwebrx.js b/htdocs/openwebrx.js
index ffe4c16f..632ece16 100644
--- a/htdocs/openwebrx.js
+++ b/htdocs/openwebrx.js
@@ -1141,6 +1141,10 @@ function on_ws_recv(evt) {
Utils.setVesselUrl(config['vessel_url']);
}
+ if ('ui_scheme' in config) {
+ set_ui_scheme(config['ui_scheme']);
+ }
+
break;
case "secondary_config":
var s = json['value'];
@@ -2023,3 +2027,19 @@ function nr_changed() {
}
}));
}
+
+function set_ui_scheme(theme) {
+ const themes = ['brown', 'red', 'green', 'khaki', 'blue', 'navy'];
+ var $panels = $('.openwebrx-panel');
+ var $buttons = $('.openwebrx-button');
+
+ themes.forEach(function(theme) {
+ $panels.removeClass('openwebrx-panel-' + theme);
+ $buttons.removeClass('openwebrx-button-' + theme);
+ });
+
+ if (theme && (theme != '') && (theme != 'default')) {
+ $panels.addClass('openwebrx-panel-' + theme);
+ $buttons.addClass('openwebrx-button-' + theme);
+ }
+}
diff --git a/owrx/config/defaults.py b/owrx/config/defaults.py
index f73aa95c..bc845d6f 100644
--- a/owrx/config/defaults.py
+++ b/owrx/config/defaults.py
@@ -153,6 +153,7 @@ defaultConfig = PropertyLayer(
waterfall_auto_level_default_mode=False,
waterfall_auto_min_range=50,
key_locked=False,
+ ui_scheme="default",
ui_opacity=100,
ui_frame=False,
ui_swap_wheel=False,
diff --git a/owrx/connection.py b/owrx/connection.py
index ce802bff..5de48b82 100644
--- a/owrx/connection.py
+++ b/owrx/connection.py
@@ -140,6 +140,7 @@ class OpenWebRxReceiverClient(OpenWebRxClient, SdrSourceEventClient):
"fft_compression",
"max_clients",
"tuning_precision",
+ "ui_scheme",
"ui_opacity",
"ui_frame",
"ui_swap_wheel",
diff --git a/owrx/controllers/settings/general.py b/owrx/controllers/settings/general.py
index 0400f75d..9193a7bf 100644
--- a/owrx/controllers/settings/general.py
+++ b/owrx/controllers/settings/general.py
@@ -184,6 +184,19 @@ class GeneralSettingsController(SettingsFormController):
),
Section(
"Display settings",
+ DropdownInput(
+ "ui_scheme",
+ "User interface color scheme",
+ options=[
+ Option("default", "Default"),
+ Option("brown", "Brown"),
+ Option("red", "Red"),
+ Option("green", "Green"),
+ Option("khaki", "Khaki"),
+ Option("blue", "Blue"),
+ Option("navy", "Navy"),
+ ],
+ ),
NumberInput(
"ui_opacity",
"User interface opacity",