diff --git a/owrx/controllers/settings/general.py b/owrx/controllers/settings/general.py index 083d89b..fb2b231 100644 --- a/owrx/controllers/settings/general.py +++ b/owrx/controllers/settings/general.py @@ -9,6 +9,7 @@ from owrx.form import ( DropdownInput, Option, ) +from owrx.form.converter import WaterfallColorsConverter from owrx.form.receiverid import ReceiverKeysConverter from owrx.form.gfx import AvatarInput, TopPhotoInput from owrx.waterfall import WaterfallOptions @@ -80,6 +81,12 @@ class GeneralSettingsController(SettingsFormController): "Waterfall color scheme", options=WaterfallOptions, ), + TextAreaInput( + "waterfall_colors", + "Custom waterfall colors", + infotext="TODO: describe", + converter=WaterfallColorsConverter() + ), NumberInput( "fft_fps", "FFT speed", diff --git a/owrx/form/converter.py b/owrx/form/converter.py index 7997cd9..6c8dbff 100644 --- a/owrx/form/converter.py +++ b/owrx/form/converter.py @@ -66,3 +66,20 @@ class JsonConverter(Converter): def convert_from_form(self, value): return json.loads(value) + + +class WaterfallColorsConverter(Converter): + def convert_to_form(self, value): + if value is None: + return "" + return "\n".join("#{:06x}".format(v) for v in value) + + def convert_from_form(self, value): + def parseString(s): + if s.startswith("#"): + return int(s[1:], 16) + # int() with base 0 can accept "0x" prefixed hex strings, or int numbers + return int(s, 0) + + # \r\n or \n? this should work with both. + return [parseString(v.strip("\r ")) for v in value.split("\n")]