implement a frequency input with switchable exponent
This commit is contained in:
@ -153,6 +153,7 @@ class CompiledAssetsController(GzipMixin, ModificationAwareController):
|
||||
"lib/settings/GainInput.js",
|
||||
"lib/settings/OptionalSection.js",
|
||||
"lib/settings/SchedulerInput.js",
|
||||
"lib/settings/FrequencyInput.js",
|
||||
"settings.js",
|
||||
],
|
||||
}
|
||||
|
@ -319,3 +319,49 @@ class ModesInput(DropdownInput):
|
||||
def __init__(self, id, label):
|
||||
options = [Option(m.modulation, m.name) for m in Modes.getAvailableModes()]
|
||||
super().__init__(id, label, options)
|
||||
|
||||
|
||||
class FrequencyInput(Input):
|
||||
def __init__(self, id, label):
|
||||
super().__init__(id, label)
|
||||
|
||||
def defaultConverter(self):
|
||||
return IntConverter()
|
||||
|
||||
def input_properties(self, value):
|
||||
props = super().input_properties(value)
|
||||
props["type"] = "number"
|
||||
props["step"] = "any"
|
||||
return props
|
||||
|
||||
def render_input(self, value):
|
||||
append = """
|
||||
<div class="input-group-append">
|
||||
<select class="input-group-text frequency-exponent" name="{id}-exponent">
|
||||
<option value="0" selected>Hz</option>
|
||||
<option value="3">kHz</option>
|
||||
<option value="6">MHz</option>
|
||||
<option value="9">GHz</option>
|
||||
<option value="12">THz</option>
|
||||
</select>
|
||||
</div>
|
||||
""".format(
|
||||
id=self.id,
|
||||
)
|
||||
|
||||
return """
|
||||
<div class="input-group input-group-sm frequency-input">
|
||||
{input}
|
||||
{append}
|
||||
</div>
|
||||
""".format(
|
||||
input=super().render_input(value),
|
||||
append=append,
|
||||
)
|
||||
|
||||
def parse(self, data):
|
||||
exponent_id = "{}-exponent".format(self.id)
|
||||
if self.id in data and exponent_id in data:
|
||||
value = int(float(data[self.id][0]) * 10 ** int(data[exponent_id][0]))
|
||||
return {self.id: value}
|
||||
return {}
|
||||
|
@ -11,7 +11,7 @@ from owrx.command import CommandMapper
|
||||
from owrx.socket import getAvailablePort
|
||||
from owrx.property import PropertyStack, PropertyLayer, PropertyFilter
|
||||
from owrx.property.filter import ByLambda
|
||||
from owrx.form import Input, TextInput, NumberInput, CheckboxInput, ModesInput
|
||||
from owrx.form import Input, TextInput, NumberInput, CheckboxInput, ModesInput, FrequencyInput
|
||||
from owrx.form.converter import OptionalConverter
|
||||
from owrx.form.device import GainInput, SchedulerInput, WaterfallLevelsInput
|
||||
from owrx.controllers.settings import Section
|
||||
@ -503,7 +503,7 @@ class SdrDeviceDescription(object):
|
||||
),
|
||||
WaterfallLevelsInput("waterfall_levels", "Waterfall levels"),
|
||||
SchedulerInput("scheduler", "Scheduler"),
|
||||
NumberInput("center_freq", "Center frequency", append="Hz"),
|
||||
FrequencyInput("center_freq", "Center frequency"),
|
||||
NumberInput("samp_rate", "Sample rate", append="S/s"),
|
||||
NumberInput("start_freq", "Initial frequency", append="Hz"),
|
||||
ModesInput("start_mod", "Initial modulation"),
|
||||
|
Reference in New Issue
Block a user