mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-10-10 06:00:44 +00:00
Symfield widget auto-inits
ADS-B emergency frame
This commit is contained in:
@@ -1160,37 +1160,36 @@ int32_t NumberField::clip_value(int32_t value) {
|
||||
|
||||
/* SymField **************************************************************/
|
||||
|
||||
SymField::SymField(
|
||||
Point parent_pos,
|
||||
size_t length
|
||||
) : Widget { { parent_pos, { static_cast<ui::Dim>(8 * length), 16 } } },
|
||||
length_ { length }
|
||||
{
|
||||
set_focusable(true);
|
||||
}
|
||||
|
||||
SymField::SymField(
|
||||
Point parent_pos,
|
||||
size_t length,
|
||||
bool hex
|
||||
symfield_type type
|
||||
) : Widget { { parent_pos, { static_cast<ui::Dim>(8 * length), 16 } } },
|
||||
length_ { length },
|
||||
hex_ { hex }
|
||||
type_ { type }
|
||||
{
|
||||
uint8_t c;
|
||||
uint32_t c;
|
||||
|
||||
// Hex field auto-init
|
||||
for (c = 0; c < length; c++)
|
||||
set_symbol_list(c, "0123456789ABCDEF");
|
||||
// Auto-init
|
||||
if (type == SYMFIELD_OCT) {
|
||||
for (c = 0; c < length; c++)
|
||||
set_symbol_list(c, "01234567");
|
||||
} else if (type == SYMFIELD_DEC) {
|
||||
for (c = 0; c < length; c++)
|
||||
set_symbol_list(c, "0123456789");
|
||||
} else if (type == SYMFIELD_HEX) {
|
||||
for (c = 0; c < length; c++)
|
||||
set_symbol_list(c, "0123456789ABCDEF");
|
||||
}
|
||||
|
||||
set_focusable(true);
|
||||
}
|
||||
|
||||
uint64_t SymField::value_hex_u64() {
|
||||
uint8_t c;
|
||||
uint32_t c;
|
||||
uint64_t v = 0;
|
||||
|
||||
if (hex_) {
|
||||
if (type_ != SYMFIELD_DEF) {
|
||||
for (c = 0; c < length_; c++)
|
||||
v += values_[c] << (4 * (length_ - 1 - c));
|
||||
return v;
|
||||
|
@@ -475,8 +475,14 @@ public:
|
||||
std::function<void(SymField&)> on_select { };
|
||||
std::function<void()> on_change { };
|
||||
|
||||
SymField(Point parent_pos, size_t length);
|
||||
SymField(Point parent_pos, size_t length, bool hex);
|
||||
enum symfield_type {
|
||||
SYMFIELD_OCT,
|
||||
SYMFIELD_DEC,
|
||||
SYMFIELD_HEX,
|
||||
SYMFIELD_DEF // User DEFined
|
||||
};
|
||||
|
||||
SymField(Point parent_pos, size_t length, symfield_type type);
|
||||
|
||||
SymField(const SymField&) = delete;
|
||||
SymField(SymField&&) = delete;
|
||||
@@ -499,7 +505,7 @@ private:
|
||||
uint32_t selected_ = 0;
|
||||
size_t length_, prev_length_ = 0;
|
||||
bool erase_prev_ = false;
|
||||
bool hex_ = false;
|
||||
symfield_type type_ { };
|
||||
|
||||
int32_t clip_value(const uint32_t index, const uint32_t value);
|
||||
};
|
||||
|
Reference in New Issue
Block a user