diff --git a/firmware/application/ais_app.cpp b/firmware/application/ais_app.cpp index 2db3f7dfa..c79f30507 100644 --- a/firmware/application/ais_app.cpp +++ b/firmware/application/ais_app.cpp @@ -276,12 +276,6 @@ AISAppView::AISAppView(NavigationView&) { &recent_entry_detail_view, } }); - const std::array columns { { - { "MMSI", 9 }, - { "Name/Call", 20 }, - } }; - recent_entries_view.set_columns(columns); - recent_entry_detail_view.hidden(true); target_frequency_ = initial_target_frequency; diff --git a/firmware/application/ais_app.hpp b/firmware/application/ais_app.hpp index 556002e13..2e26d2aba 100644 --- a/firmware/application/ais_app.hpp +++ b/firmware/application/ais_app.hpp @@ -161,7 +161,11 @@ private: AISRecentEntries recent; std::unique_ptr logger; - AISRecentEntriesView recent_entries_view { recent }; + const RecentEntriesColumns columns { { + { "MMSI", 9 }, + { "Name/Call", 20 }, + } }; + AISRecentEntriesView recent_entries_view { columns, recent }; AISRecentEntryDetailView recent_entry_detail_view; static constexpr auto header_height = 1 * 16; diff --git a/firmware/application/ert_app.cpp b/firmware/application/ert_app.cpp index 108c7937b..d8d20fa44 100644 --- a/firmware/application/ert_app.cpp +++ b/firmware/application/ert_app.cpp @@ -105,14 +105,6 @@ ERTAppView::ERTAppView(NavigationView&) { &recent_entries_view, } }); - const std::array columns { { - { "ID", 10 }, - { "Tp", 2 }, - { "Consumpt", 10 }, - { "Cnt", 3 }, - } }; - recent_entries_view.set_columns(columns); - radio::enable({ initial_target_frequency, sampling_rate, diff --git a/firmware/application/ert_app.hpp b/firmware/application/ert_app.hpp index 49c7701e5..6a774ede7 100644 --- a/firmware/application/ert_app.hpp +++ b/firmware/application/ert_app.hpp @@ -129,7 +129,13 @@ private: ERTRecentEntries recent; std::unique_ptr logger; - ERTRecentEntriesView recent_entries_view { recent }; + const RecentEntriesColumns columns { { + { "ID", 10 }, + { "Tp", 2 }, + { "Consumpt", 10 }, + { "Cnt", 3 }, + } }; + ERTRecentEntriesView recent_entries_view { columns, recent }; static constexpr auto header_height = 1 * 16; diff --git a/firmware/application/recent_entries.hpp b/firmware/application/recent_entries.hpp index fc2c08ca9..5bfa3e12c 100644 --- a/firmware/application/recent_entries.hpp +++ b/firmware/application/recent_entries.hpp @@ -95,17 +95,29 @@ namespace ui { using RecentEntriesColumn = std::pair; +class RecentEntriesColumns { +public: + using ContainerType = std::vector; + + RecentEntriesColumns( + const std::initializer_list columns + ) : _columns { columns } + { + } + + ContainerType::const_iterator begin() const { return std::begin(_columns); } + ContainerType::const_iterator end() const { return std::end(_columns); } + +private: + const ContainerType _columns; +}; + class RecentEntriesHeader : public Widget { public: - - template - void set_columns( - const std::array& columns - ) { - _columns.clear(); - for(const auto& column : columns) { - _columns.emplace_back(column); - } + RecentEntriesHeader( + const RecentEntriesColumns& columns + ) : _columns { columns } + { } void paint(Painter& painter) override { @@ -132,7 +144,7 @@ public: } private: - std::vector _columns; + const RecentEntriesColumns& _columns; }; template @@ -247,8 +259,10 @@ public: std::function on_select; RecentEntriesView( + const RecentEntriesColumns& columns, Entries& recent - ) : _table { recent } + ) : _header { columns }, + _table { recent } { add_children({ { &_header, @@ -258,13 +272,6 @@ public: _table.on_select = [this](const Entry& entry) { if( this->on_select ) { this->on_select(entry); } }; } - template - void set_columns( - const std::array& columns - ) { - _header.set_columns(columns); - } - void set_parent_rect(const Rect new_parent_rect) override { constexpr Dim scale_height = 16; diff --git a/firmware/application/tpms_app.cpp b/firmware/application/tpms_app.cpp index e7f38e371..989e98d96 100644 --- a/firmware/application/tpms_app.cpp +++ b/firmware/application/tpms_app.cpp @@ -145,16 +145,6 @@ TPMSAppView::TPMSAppView(NavigationView&) { &recent_entries_view, } }); - const std::array columns { { - { "Tp", 2 }, - { "ID", 8 }, - { "kPa", 3 }, - { "C", 3 }, - { "Cnt", 3 }, - { "Fl", 2 }, - } }; - recent_entries_view.set_columns(columns); - radio::enable({ tuning_frequency(), sampling_rate, diff --git a/firmware/application/tpms_app.hpp b/firmware/application/tpms_app.hpp index c294862eb..771efd7f1 100644 --- a/firmware/application/tpms_app.hpp +++ b/firmware/application/tpms_app.hpp @@ -153,7 +153,15 @@ private: TPMSRecentEntries recent; std::unique_ptr logger; - TPMSRecentEntriesView recent_entries_view { recent }; + const RecentEntriesColumns columns { { + { "Tp", 2 }, + { "ID", 8 }, + { "kPa", 3 }, + { "C", 3 }, + { "Cnt", 3 }, + { "Fl", 2 }, + } }; + TPMSRecentEntriesView recent_entries_view { columns, recent }; uint32_t target_frequency_ = initial_target_frequency;