mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-08-23 05:37:40 +00:00
frequency keypad opt (#2755)
* init * revert changes that caused by batch replace * revert changes that caused by batch replace * revert changes that caused by batch replace * revert submodu;e
This commit is contained in:
@@ -275,29 +275,63 @@ FrequencyKeypadView::FrequencyKeypadView(
|
||||
};
|
||||
button.on_select = button_fn;
|
||||
button.set_parent_rect({(n % 3) * button_w,
|
||||
(n / 3) * button_h + 24,
|
||||
(n / 3) * button_h + 25,
|
||||
button_w, button_h});
|
||||
button.set_text(label);
|
||||
n++;
|
||||
}
|
||||
|
||||
add_children({&button_save,
|
||||
add_children({&button_save_ghz,
|
||||
&button_save_khz,
|
||||
&button_save_mhz,
|
||||
&button_load,
|
||||
&button_close});
|
||||
&button_clear,
|
||||
&button_done_ghz,
|
||||
&button_done_mhz,
|
||||
&button_done_khz});
|
||||
|
||||
button_save.on_select = [this, &nav](Button&) {
|
||||
nav.push<FrequencySaveView>(this->value());
|
||||
button_save_mhz.on_select = [this, &nav](Button&) {
|
||||
nav.push<FrequencySaveView>(this->value(FrequencyUnit::MHZ)); // pass as mhz and handle unit convert logic there, cuz idk if pass others would loss something
|
||||
};
|
||||
button_save_ghz.on_select = [this, &nav](Button&) {
|
||||
nav.push<FrequencySaveView>(this->value(FrequencyUnit::GHZ));
|
||||
};
|
||||
button_save_khz.on_select = [this, &nav](Button&) {
|
||||
nav.push<FrequencySaveView>(this->value(FrequencyUnit::KHZ));
|
||||
};
|
||||
|
||||
button_load.on_select = [this, &nav](Button&) {
|
||||
auto load_view = nav.push<FrequencyLoadView>();
|
||||
load_view->on_frequency_loaded = [this](rf::Frequency value) {
|
||||
set_value(value);
|
||||
};
|
||||
};
|
||||
button_clear.on_select = [this](Button&) {
|
||||
mhz.clear();
|
||||
submhz.clear();
|
||||
clear_field_if_digits_entered = true;
|
||||
if (state == State::DigitSubMHz) {
|
||||
state = State::DigitMHz;
|
||||
}
|
||||
draw_input_hint();
|
||||
update_text();
|
||||
};
|
||||
|
||||
button_close.on_select = [this, &nav](Button&) {
|
||||
button_done_ghz.on_select = [this, &nav](Button&) {
|
||||
if (on_changed)
|
||||
on_changed(this->value());
|
||||
on_changed(this->value(FrequencyUnit::GHZ));
|
||||
nav.pop();
|
||||
};
|
||||
|
||||
button_done_mhz.on_select = [this, &nav](Button&) {
|
||||
if (on_changed)
|
||||
on_changed(this->value(FrequencyUnit::MHZ));
|
||||
nav.pop();
|
||||
};
|
||||
|
||||
button_done_khz.on_select = [this, &nav](Button&) {
|
||||
if (on_changed)
|
||||
on_changed(this->value(FrequencyUnit::KHZ));
|
||||
nav.pop();
|
||||
};
|
||||
|
||||
@@ -305,11 +339,20 @@ FrequencyKeypadView::FrequencyKeypadView(
|
||||
}
|
||||
|
||||
void FrequencyKeypadView::focus() {
|
||||
button_close.focus();
|
||||
button_done_mhz.focus();
|
||||
}
|
||||
|
||||
rf::Frequency FrequencyKeypadView::value() const {
|
||||
return mhz.as_int() * 1000000ULL + submhz.as_int() * submhz_base;
|
||||
rf::Frequency FrequencyKeypadView::value(FrequencyUnit frequency_uni) const {
|
||||
switch (frequency_uni) {
|
||||
case FrequencyUnit::GHZ:
|
||||
return mhz.as_int() * 1000000000ULL + submhz.as_int() * submhz_base * 1000;
|
||||
case FrequencyUnit::MHZ:
|
||||
return mhz.as_int() * 1000000ULL + submhz.as_int() * submhz_base;
|
||||
case FrequencyUnit::KHZ:
|
||||
return mhz.as_int() * 1000ULL + submhz.as_int() * submhz_base / 1000;
|
||||
default:
|
||||
return mhz.as_int() * 1000000ULL + submhz.as_int() * submhz_base;
|
||||
}
|
||||
}
|
||||
|
||||
void FrequencyKeypadView::set_value(const rf::Frequency new_value) {
|
||||
@@ -381,6 +424,25 @@ void FrequencyKeypadView::field_toggle() {
|
||||
state = State::DigitMHz;
|
||||
clear_field_if_digits_entered = true;
|
||||
}
|
||||
draw_input_hint();
|
||||
}
|
||||
|
||||
void FrequencyKeypadView::draw_input_hint() {
|
||||
set_dirty();
|
||||
}
|
||||
|
||||
void FrequencyKeypadView::paint(Painter& painter) {
|
||||
View::paint(painter);
|
||||
|
||||
const bool s = state == State::DigitMHz;
|
||||
painter.draw_hline(
|
||||
{0, 36},
|
||||
8 * 4,
|
||||
s ? Color::white() : Color::black());
|
||||
painter.draw_hline(
|
||||
{5 * 8, 36},
|
||||
8 * 4,
|
||||
s ? Color::black() : Color::white());
|
||||
}
|
||||
|
||||
void FrequencyKeypadView::update_text() {
|
||||
|
@@ -44,6 +44,12 @@ extern options_db_t freqman_steps;
|
||||
|
||||
namespace ui {
|
||||
|
||||
enum FrequencyUnit {
|
||||
GHZ = 0,
|
||||
MHZ,
|
||||
KHZ,
|
||||
};
|
||||
|
||||
class FrequencyField : public Widget {
|
||||
public:
|
||||
std::function<void(rf::Frequency)> on_change{};
|
||||
@@ -207,8 +213,9 @@ class FrequencyKeypadView : public View {
|
||||
const rf::Frequency value);
|
||||
|
||||
void focus() override;
|
||||
void paint(Painter& painter) override;
|
||||
|
||||
rf::Frequency value() const;
|
||||
rf::Frequency value(FrequencyUnit frequency_uni) const;
|
||||
void set_value(const rf::Frequency new_value);
|
||||
bool on_encoder(const EncoderEvent delta) override;
|
||||
bool on_keyboard(const KeyboardEvent key) override;
|
||||
@@ -220,7 +227,6 @@ class FrequencyKeypadView : public View {
|
||||
|
||||
static constexpr int mhz_digits = 4;
|
||||
static constexpr int submhz_digits = 4;
|
||||
|
||||
static constexpr int mhz_mod = pow(10, mhz_digits);
|
||||
static constexpr int submhz_base = pow(10, 6 - submhz_digits);
|
||||
static constexpr int text_digits = mhz_digits + 1 + submhz_digits;
|
||||
@@ -230,15 +236,30 @@ class FrequencyKeypadView : public View {
|
||||
|
||||
std::array<Button, 12> buttons{};
|
||||
|
||||
Button button_save{
|
||||
{0, button_h * 5, 60, button_h},
|
||||
"Save"};
|
||||
Button button_save_ghz{
|
||||
{0, 14 * 16, 80 / 2 - 1, 2 * 16},
|
||||
"GHz"};
|
||||
Button button_save_khz{
|
||||
{0 + 40 - 1, 14 * 16, 80 / 2, 2 * 16},
|
||||
"kHz"};
|
||||
Button button_save_mhz{
|
||||
{0, 16 * 16, 80 - 1, 3 * 16},
|
||||
"Save MHz"};
|
||||
Button button_load{
|
||||
{60, button_h * 5, 60, button_h},
|
||||
{80 + 1, 14 * 16, 80 - 2, 40},
|
||||
"Load"};
|
||||
Button button_close{
|
||||
{128, button_h * 5, 112, button_h},
|
||||
"Done"};
|
||||
Button button_clear{
|
||||
{80 + 1, 264, 80 - 2, 40},
|
||||
"Clear"};
|
||||
Button button_done_ghz{
|
||||
{160 + 1, 14 * 16, 80 / 2 - 1, 2 * 16},
|
||||
"GHz"};
|
||||
Button button_done_khz{
|
||||
{160 + 40, 14 * 16, 80 / 2 - 1, 2 * 16},
|
||||
"kHz"};
|
||||
Button button_done_mhz{
|
||||
{160 + 1, 16 * 16, 80 - 2, 3 * 16},
|
||||
"Done MHz"};
|
||||
|
||||
/* TODO: Template arg required in enum?! */
|
||||
FieldString<mhz_digits> mhz{FieldString<4>::Justify::Right};
|
||||
@@ -254,6 +275,8 @@ class FrequencyKeypadView : public View {
|
||||
|
||||
void on_button(Button& button);
|
||||
|
||||
void draw_input_hint();
|
||||
|
||||
void digit_add(const char c);
|
||||
void digit_delete();
|
||||
|
||||
|
Reference in New Issue
Block a user