diff --git a/owrx/controllers/settings.py b/owrx/controllers/settings.py
index 7327f9f..4276f40 100644
--- a/owrx/controllers/settings.py
+++ b/owrx/controllers/settings.py
@@ -50,6 +50,26 @@ class TextInput(Input):
)
+class NumberInput(Input):
+ def render_input(self, value):
+ return """
+
+ """.format(
+ id=self.id, label=self.label, classes=self.input_classes(), value=value
+ )
+
+ def convert_value(self, v):
+ return int(v)
+
+ def parse(self, data):
+ return {k: self.convert_value(v) for k, v in super().parse(data).items()}
+
+
+class FloatInput(NumberInput):
+ def convert_value(self, v):
+ return float(v)
+
+
class LocationInput(Input):
def render_input(self, value):
# TODO make this work and pretty
@@ -147,7 +167,7 @@ class SettingsController(AdminController):
"General settings",
TextInput("receiver_name", "Receiver name"),
TextInput("receiver_location", "Receiver location"),
- TextInput("receiver_asl", "Receiver elevation", infotext="Elevation in meters above mean see level"),
+ NumberInput("receiver_asl", "Receiver elevation", infotext="Elevation in meters above mean see level"),
TextInput("receiver_admin", "Receiver admin"),
LocationInput("receiver_gps", "Receiver coordinates"),
TextInput("photo_title", "Photo title"),
@@ -155,21 +175,21 @@ class SettingsController(AdminController):
),
Section(
"Waterfall settings",
- TextInput(
+ NumberInput(
"fft_fps",
"FFT frames per second",
infotext="This setting specifies how many lines are being added to the waterfall per second. "
+ "Higher values will give you a faster waterfall, but will also use more CPU.",
),
- TextInput("fft_size", "FFT size"),
- TextInput(
+ NumberInput("fft_size", "FFT size"),
+ FloatInput(
"fft_voverlap_factor",
"FFT vertical overlap factor",
infotext="If fft_voverlap_factor is above 0, multiple FFTs will be used for creating a line on the "
+ "diagram.",
),
- TextInput("waterfall_min_level", "Lowest waterfall level"),
- TextInput("waterfall_max_level", "Highest waterfall level"),
+ NumberInput("waterfall_min_level", "Lowest waterfall level"),
+ NumberInput("waterfall_max_level", "Highest waterfall level"),
),
Section(
"Compression",
@@ -185,11 +205,11 @@ class SettingsController(AdminController):
Section(
"Digimodes",
CheckboxInput("digimodes_enable", "", checkboxText="Enable Digimodes"),
- TextInput("digimodes_fft_size", "Digimodes FFT size"),
+ NumberInput("digimodes_fft_size", "Digimodes FFT size"),
),
Section(
"Digital voice",
- TextInput(
+ NumberInput(
"digital_voice_unvoiced_quality",
"Quality of unvoiced sounds in synthesized voice",
infotext="Determines the quality, and thus the cpu usage, for the ambe codec used by digital voice"
@@ -231,7 +251,7 @@ class SettingsController(AdminController):
+ ''
+ "their documentation on how to obtain one."
),
- TextInput(
+ NumberInput(
"map_position_retention_time",
"Map retention time",
infotext="Unit is seconds
Specifies how log markers / grids will remain visible on the map"
@@ -239,9 +259,9 @@ class SettingsController(AdminController):
),
Section(
"WSJT-X settings",
- TextInput("wsjt_queue_workers", "Number of WSJT decoding workers"),
- TextInput("wsjt_queue_length", "Maximum length of WSJT job queue"),
- TextInput(
+ NumberInput("wsjt_queue_workers", "Number of WSJT decoding workers"),
+ NumberInput("wsjt_queue_length", "Maximum length of WSJT job queue"),
+ NumberInput(
"wsjt_decoding_depth",
"WSJT decoding depth",
infotext="A higher decoding depth will allow more results, but will also consume more cpu"