implement display of Q65 mode matrix

This commit is contained in:
Jakob Ketterl 2021-02-08 15:16:04 +01:00
parent ce48892173
commit a083042002
3 changed files with 57 additions and 2 deletions

View File

@ -25,3 +25,11 @@ h1 {
margin: 1em 0; margin: 1em 0;
text-align: center; text-align: center;
} }
.matrix {
display: grid;
}
.q65-matrix {
grid-template-columns: repeat(5, auto);
}

View File

@ -18,6 +18,7 @@ from owrx.form import (
OptionalConverter, OptionalConverter,
AprsBeaconSymbols, AprsBeaconSymbols,
AprsAntennaDirections, AprsAntennaDirections,
Q65ModeMatrix,
) )
from urllib.parse import quote from urllib.parse import quote
from owrx.wsjt import Fst4Profile, Fst4wProfile from owrx.wsjt import Fst4Profile, Fst4wProfile
@ -239,7 +240,7 @@ class GeneralSettingsController(AdminController):
"Enabled FST4W intervals", "Enabled FST4W intervals",
[Option(v, "{}s".format(v)) for v in Fst4wProfile.availableIntervals], [Option(v, "{}s".format(v)) for v in Fst4wProfile.availableIntervals],
), ),
# TODO: q65_enabled_combinations Q65ModeMatrix("q65_enabled_combinations", "Enabled Q65 Mode combinations"),
), ),
Section( Section(
"Background decoding", "Background decoding",

View File

@ -1,6 +1,7 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from owrx.modes import Modes from owrx.modes import Modes
from owrx.config import Config from owrx.config import Config
from owrx.wsjt import Q65Mode, Q65Profile
from enum import Enum from enum import Enum
@ -316,6 +317,51 @@ class DropdownInput(Input):
return "".join(options) return "".join(options)
class Q65ModeConverter(Converter):
def convert_to_form(self, value):
pass
def convert_from_form(self, value):
pass
class Q65ModeMatrix(Input):
def checkbox_id(self, mode, interval):
return "{0}-{1}-{2}".format(self.id, mode.value, interval)
def render_checkbox(self, mode, interval, value):
return """
<div class="{classes}">
<input class="form-check-input" type="checkbox" id="{id}" name="{id}" {checked}>
<label class="form-check-label" for="{id}">
{checkboxText}
</label>
</div>
""".format(
id=self.checkbox_id(mode, interval),
classes=self.input_classes(),
checked="checked" if [interval, mode.name] in value else "",
checkboxText="Mode {} interval {}s".format(mode.name, interval),
)
def render_input(self, value):
checkboxes = "".join(
self.render_checkbox(mode, interval, value)
for interval in Q65Profile.availableIntervals
for mode in Q65Mode
)
return """
<div class="matrix q65-matrix">
{checkboxes}
</div>
""".format(
checkboxes=checkboxes
)
def input_classes(self):
return " ".join(["form-check", "form-control-sm"])
class DropdownEnum(Enum): class DropdownEnum(Enum):
def toOption(self): def toOption(self):
return Option(self.name, str(self)) return Option(self.name, str(self))
@ -344,7 +390,7 @@ class WfmTauValues(DropdownEnum):
return obj return obj
def __str__(self): def __str__(self):
return "{}µs ({})".format(int(self.value * 1E6), self.description) return "{}µs ({})".format(int(self.value * 1e6), self.description)
class AprsBeaconSymbols(DropdownEnum): class AprsBeaconSymbols(DropdownEnum):