mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-03-06 05:26:04 -05:00
Clean up UI navigation push constructor scheme.
This commit is contained in:
parent
a1aa6ecdbf
commit
97f29f8336
@ -108,22 +108,22 @@ void RegistersWidget::draw_values(
|
|||||||
|
|
||||||
DebugMenuView::DebugMenuView(NavigationView& nav) {
|
DebugMenuView::DebugMenuView(NavigationView& nav) {
|
||||||
add_items<7>({ {
|
add_items<7>({ {
|
||||||
{ "Memory", [&nav](){ nav.push(new DebugMemoryView { nav }); } },
|
{ "Memory", [&nav](){ nav.push<DebugMemoryView>(nav); } },
|
||||||
{ "Radio State", [&nav](){ nav.push(new NotImplementedView { nav }); } },
|
{ "Radio State", [&nav](){ nav.push<NotImplementedView>(nav); } },
|
||||||
{ "SD Card", [&nav](){ nav.push(new NotImplementedView { nav }); } },
|
{ "SD Card", [&nav](){ nav.push<NotImplementedView>(nav); } },
|
||||||
{ "RFFC5072", [&nav](){ nav.push(new RegistersView {
|
{ "RFFC5072", [&nav](){ nav.push<RegistersView>(
|
||||||
nav, "RFFC5072", { 31, 2, 4, 4 },
|
nav, "RFFC5072", RegistersWidgetConfig { 31, 2, 4, 4 },
|
||||||
[](const size_t register_number) { return radio::first_if.read(register_number); }
|
[](const size_t register_number) { return radio::first_if.read(register_number); }
|
||||||
}); } },
|
); } },
|
||||||
{ "MAX2837", [&nav](){ nav.push(new RegistersView {
|
{ "MAX2837", [&nav](){ nav.push<RegistersView>(
|
||||||
nav, "MAX2837", { 32, 2, 3, 4 },
|
nav, "MAX2837", RegistersWidgetConfig { 32, 2, 3, 4 },
|
||||||
[](const size_t register_number) { return radio::second_if.read(register_number); }
|
[](const size_t register_number) { return radio::second_if.read(register_number); }
|
||||||
}); } },
|
); } },
|
||||||
{ "Si5351C", [&nav](){ nav.push(new RegistersView {
|
{ "Si5351C", [&nav](){ nav.push<RegistersView>(
|
||||||
nav, "Si5351C", { 96, 2, 2, 8 },
|
nav, "Si5351C", RegistersWidgetConfig { 96, 2, 2, 8 },
|
||||||
[](const size_t register_number) { return portapack::clock_generator.read_register(register_number); }
|
[](const size_t register_number) { return portapack::clock_generator.read_register(register_number); }
|
||||||
}); } },
|
); } },
|
||||||
{ "WM8731", [&nav](){ nav.push(new NotImplementedView { nav }); } },
|
{ "WM8731", [&nav](){ nav.push<NotImplementedView>(nav); } },
|
||||||
} });
|
} });
|
||||||
on_left = [&nav](){ nav.pop(); };
|
on_left = [&nav](){ nav.pop(); };
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ NavigationView::NavigationView()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void NavigationView::push(View* new_view) {
|
void NavigationView::push_view(View* new_view) {
|
||||||
// TODO: Trap nullptr?
|
// TODO: Trap nullptr?
|
||||||
// TODO: Trap push of object already on stack?
|
// TODO: Trap push of object already on stack?
|
||||||
view_stack.push_back(new_view);
|
view_stack.push_back(new_view);
|
||||||
@ -96,13 +96,13 @@ void NavigationView::focus() {
|
|||||||
|
|
||||||
SystemMenuView::SystemMenuView(NavigationView& nav) {
|
SystemMenuView::SystemMenuView(NavigationView& nav) {
|
||||||
add_items<7>({ {
|
add_items<7>({ {
|
||||||
{ "Receiver", [&nav](){ nav.push(new ReceiverView { nav, portapack::receiver_model }); } },
|
{ "Receiver", [&nav](){ nav.push<ReceiverView>(nav, portapack::receiver_model); } },
|
||||||
{ "Capture", [&nav](){ nav.push(new NotImplementedView { nav }); } },
|
{ "Capture", [&nav](){ nav.push<NotImplementedView>(nav); } },
|
||||||
{ "Analyze", [&nav](){ nav.push(new NotImplementedView { nav }); } },
|
{ "Analyze", [&nav](){ nav.push<NotImplementedView>(nav); } },
|
||||||
{ "Setup", [&nav](){ nav.push(new SetupMenuView { nav }); } },
|
{ "Setup", [&nav](){ nav.push<SetupMenuView>(nav); } },
|
||||||
{ "About", [&nav](){ nav.push(new AboutView { nav }); } },
|
{ "About", [&nav](){ nav.push<AboutView>(nav); } },
|
||||||
{ "Debug", [&nav](){ nav.push(new DebugMenuView { nav }); } },
|
{ "Debug", [&nav](){ nav.push<DebugMenuView>(nav); } },
|
||||||
{ "HackRF", [&nav](){ nav.push(new HackRFFirmwareView { nav }); } },
|
{ "HackRF", [&nav](){ nav.push<HackRFFirmwareView>(nav); } },
|
||||||
} });
|
} });
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,7 +138,7 @@ SystemView::SystemView(
|
|||||||
|
|
||||||
// Initial view.
|
// Initial view.
|
||||||
// TODO: Restore from non-volatile memory?
|
// TODO: Restore from non-volatile memory?
|
||||||
navigation_view.push(new SystemMenuView { navigation_view });
|
navigation_view.push<SystemMenuView>(navigation_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
Context& SystemView::context() const {
|
Context& SystemView::context() const {
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
#include "ui_sd_card_status_view.hpp"
|
#include "ui_sd_card_status_view.hpp"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
@ -56,7 +57,13 @@ public:
|
|||||||
NavigationView(const NavigationView&) = delete;
|
NavigationView(const NavigationView&) = delete;
|
||||||
NavigationView(NavigationView&&) = delete;
|
NavigationView(NavigationView&&) = delete;
|
||||||
|
|
||||||
void push(View* new_view);
|
template<class T, class... Args>
|
||||||
|
T* push(Args&&... args) {
|
||||||
|
const auto new_view = new T(std::forward<Args>(args)...);
|
||||||
|
push_view(new_view);
|
||||||
|
return reinterpret_cast<T*>(new_view);
|
||||||
|
}
|
||||||
|
|
||||||
void pop();
|
void pop();
|
||||||
|
|
||||||
void focus() override;
|
void focus() override;
|
||||||
@ -66,6 +73,8 @@ private:
|
|||||||
|
|
||||||
Widget* view() const;
|
Widget* view() const;
|
||||||
void set_view(Widget* const new_view);
|
void set_view(Widget* const new_view);
|
||||||
|
|
||||||
|
void push_view(View* new_view);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SystemMenuView : public MenuView {
|
class SystemMenuView : public MenuView {
|
||||||
|
@ -423,12 +423,11 @@ ReceiverView::ReceiverView(
|
|||||||
};
|
};
|
||||||
field_frequency.on_edit = [this, &nav]() {
|
field_frequency.on_edit = [this, &nav]() {
|
||||||
// TODO: Provide separate modal method/scheme?
|
// TODO: Provide separate modal method/scheme?
|
||||||
auto new_view = new FrequencyKeypadView { nav, this->receiver_model.tuning_frequency() };
|
auto new_view = nav.push<FrequencyKeypadView>(nav, this->receiver_model.tuning_frequency());
|
||||||
new_view->on_changed = [this](rf::Frequency f) {
|
new_view->on_changed = [this](rf::Frequency f) {
|
||||||
this->on_tuning_frequency_changed(f);
|
this->on_tuning_frequency_changed(f);
|
||||||
this->field_frequency.set_value(f);
|
this->field_frequency.set_value(f);
|
||||||
};
|
};
|
||||||
nav.push(new_view);
|
|
||||||
};
|
};
|
||||||
field_frequency.on_show_options = [this]() {
|
field_frequency.on_show_options = [this]() {
|
||||||
this->on_show_options_frequency();
|
this->on_show_options_frequency();
|
||||||
|
@ -159,9 +159,9 @@ void AboutView::focus() {
|
|||||||
|
|
||||||
SetupMenuView::SetupMenuView(NavigationView& nav) {
|
SetupMenuView::SetupMenuView(NavigationView& nav) {
|
||||||
add_items<3>({ {
|
add_items<3>({ {
|
||||||
{ "Date/Time", [&nav](){ nav.push(new SetDateTimeView { nav }); } },
|
{ "Date/Time", [&nav](){ nav.push<SetDateTimeView>(nav); } },
|
||||||
{ "Frequency Correction", [&nav](){ nav.push(new SetFrequencyCorrectionView { nav }); } },
|
{ "Frequency Correction", [&nav](){ nav.push<SetFrequencyCorrectionView>(nav); } },
|
||||||
{ "Touch", [&nav](){ nav.push(new NotImplementedView { nav }); } },
|
{ "Touch", [&nav](){ nav.push<NotImplementedView>(nav); } },
|
||||||
} });
|
} });
|
||||||
on_left = [&nav](){ nav.pop(); };
|
on_left = [&nav](){ nav.pop(); };
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user