From e1c519d71ee568999940e61a3dc1381ae785723c Mon Sep 17 00:00:00 2001 From: "E.T" Date: Wed, 21 Jun 2023 12:05:07 +0200 Subject: [PATCH] Frequman widget gets a non owning reference to the database instead of copying (#1175) -Get rid of -Weffc++ pointer member warnings by restricting copy of FreqManUIList -Add null checks -Remove unused macro --- firmware/application/freqman.hpp | 12 ++++++------ firmware/application/ui/ui_freqlist.cpp | 16 ++++++++-------- firmware/application/ui/ui_freqlist.hpp | 4 +++- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/firmware/application/freqman.hpp b/firmware/application/freqman.hpp index 20aceeb3..1262ea0a 100644 --- a/firmware/application/freqman.hpp +++ b/firmware/application/freqman.hpp @@ -32,11 +32,11 @@ #include "string_format.hpp" #include "ui_widget.hpp" -#define FREQMAN_DESC_MAX_LEN 24 // This is the number of characters that can be drawn in front of "R: TEXT..." before taking a full screen line -#define FREQMAN_MAX_PER_FILE 60 // Maximum of entries we can read. This is a hardware limit - // It was tested and lowered to leave a bit of space to the caller -#define FREQMAN_MAX_PER_FILE_STR "60" // STRING OF FREQMAN_MAX_PER_FILE -#define FREQMAN_READ_BUF_SIZE 96 // max freqman line size including desc is 90, +6 for a bit of space +#define FREQMAN_DESC_MAX_LEN 24 // This is the number of characters that can be drawn in front of "R: TEXT..." before taking a full screen line +#define FREQMAN_MAX_PER_FILE 100 // Maximum of entries we can read. This is a hardware limit + // It was tested and lowered to leave a bit of space to the caller + +#define FREQMAN_READ_BUF_SIZE 96 // max freqman line size including desc is 90, +6 for a bit of space using namespace ui; using namespace std; @@ -52,7 +52,7 @@ enum freqman_error { ERROR_DUPLICATE }; -enum freqman_entry_type { +enum freqman_entry_type : uint8_t { SINGLE = 0, // f= RANGE, // a=,b= HAMRADIO, // r=,t= diff --git a/firmware/application/ui/ui_freqlist.cpp b/firmware/application/ui/ui_freqlist.cpp index 42a53398..4423b048 100644 --- a/firmware/application/ui/ui_freqlist.cpp +++ b/firmware/application/ui/ui_freqlist.cpp @@ -36,7 +36,7 @@ FreqManUIList::FreqManUIList( } void FreqManUIList::set_highlighted_index(int index) { - if ((unsigned)(current_index + index) >= freqlist_db.size()) + if (freqlist_db == nullptr || (unsigned)(current_index + index) >= freqlist_db->size()) return; if (index < 0) { index = 0; @@ -45,10 +45,10 @@ void FreqManUIList::set_highlighted_index(int index) { } if (index >= freqlist_nb_lines) { index = freqlist_nb_lines - 1; - if ((unsigned)(current_index + index) < freqlist_db.size()) + if ((unsigned)(current_index + index) < freqlist_db->size()) current_index++; else - current_index = freqlist_db.size() - freqlist_nb_lines - 1; + current_index = freqlist_db->size() - freqlist_nb_lines - 1; } highlighted_index = index; } @@ -66,17 +66,17 @@ void FreqManUIList::paint(Painter& painter) { r_widget_screen, Color::black()); // only return after clearing the screen so previous entries are not shown anymore - if (freqlist_db.size() == 0) + if (freqlist_db == nullptr || freqlist_db->size() == 0) return; // coloration if file is too big auto text_color = &Styles::white; - if (freqlist_db.size() > FREQMAN_MAX_PER_FILE) + if (freqlist_db->size() > FREQMAN_MAX_PER_FILE) text_color = &Styles::yellow; uint8_t nb_lines = 0; - for (uint8_t it = current_index; it < freqlist_db.size(); it++) { + for (uint8_t it = current_index; it < freqlist_db->size(); it++) { uint8_t line_height = (int)nb_lines * char_height; if (line_height < (r.height() - char_height)) { // line is within the widget - std::string description = freqman_item_string(freqlist_db[it], 30); + std::string description = freqman_item_string(freqlist_db->at(it), 30); if (nb_lines == highlighted_index) { const Rect r_highlighted_freq{0, r.location().y() + (int)nb_lines * char_height, 240, char_height}; painter.fill_rectangle( @@ -107,7 +107,7 @@ void FreqManUIList::paint(Painter& painter) { } void FreqManUIList::set_db(freqman_db& db) { - freqlist_db = db; + freqlist_db = &db; if (db.size() == 0) { current_index = 0; highlighted_index = 0; diff --git a/firmware/application/ui/ui_freqlist.hpp b/firmware/application/ui/ui_freqlist.hpp index 8e1641c0..b18b8a38 100644 --- a/firmware/application/ui/ui_freqlist.hpp +++ b/firmware/application/ui/ui_freqlist.hpp @@ -49,6 +49,8 @@ class FreqManUIList : public Widget { FreqManUIList() : FreqManUIList{{}, {}} { } + FreqManUIList(const FreqManUIList& other) = delete; + FreqManUIList& operator=(const FreqManUIList& other) = delete; void paint(Painter& painter) override; void on_focus() override; @@ -64,7 +66,7 @@ class FreqManUIList : public Widget { private: static constexpr int8_t char_height = 16; bool instant_exec_{false}; - freqman_db freqlist_db{}; + freqman_db* freqlist_db{nullptr}; int current_index{0}; int highlighted_index{0}; int freqlist_nb_lines{0};