From 004799e1a3839dd3b04d8a3eeb13a3840455d1d7 Mon Sep 17 00:00:00 2001 From: gullradriel <3157857+gullradriel@users.noreply.github.com> Date: Mon, 8 Apr 2024 07:45:33 +0200 Subject: [PATCH] Contributors scroll (#2093) * adding on_right * menu view instead of console * fixing on_right typo --------- Co-authored-by: gullradriel --- firmware/application/apps/ui_about_simple.cpp | 176 +++++++++--------- firmware/application/apps/ui_about_simple.hpp | 15 +- firmware/application/ui/ui_menu.cpp | 6 +- firmware/application/ui/ui_menu.hpp | 1 + 4 files changed, 102 insertions(+), 96 deletions(-) diff --git a/firmware/application/apps/ui_about_simple.cpp b/firmware/application/apps/ui_about_simple.cpp index c691af33..008a8620 100644 --- a/firmware/application/apps/ui_about_simple.cpp +++ b/firmware/application/apps/ui_about_simple.cpp @@ -1,83 +1,93 @@ -#include "ui_about_simple.hpp" - -namespace ui { -AboutView::AboutView(NavigationView& nav) { - add_children({&console, &button_ok}); - - button_ok.on_select = [&nav](Button&) { - nav.pop(); - }; - - console.writeln(STR_COLOR_LIGHT_GREY "List of contributors:"); - console.writeln(""); -} - -void AboutView::update() { - if (++timer > 400) { - timer = 0; - - switch (++frame) { - case 1: - // TODO: Generate this automatically from github - // https://github.com/portapack-mayhem/mayhem-firmware/graphs/contributors?to=2022-01-01&from=2020-04-12&type=c - console.writeln(STR_COLOR_DARK_YELLOW "Mayhem:"); - console.writeln("eried,euquiq,gregoryfenton"); - console.writeln("johnelder,jwetzell,nnemanjan00"); - console.writeln("N0vaPixel,klockee,gullradriel"); - console.writeln("jamesshao8,ITAxReal,rascafr"); - console.writeln("mcules,dqs105,strijar"); - console.writeln("zhang00963,RedFox-Fr,aldude999"); - console.writeln("East2West,fossum,ArjanOnwezen"); - console.writeln("vXxOinvizioNxX,teixeluis"); - console.writeln("Brumi-2021,texasyojimbo"); - console.writeln("heurist1,intoxsick,ckuethe"); - console.writeln("notpike,jLynx,zigad"); - console.writeln("MichalLeonBorsuk,jimilinuxguy"); - console.writeln("kallanreed,bernd-herzog"); - break; - case 2: - console.writeln("NotherNgineer,zxkmm,u-foka"); - console.writeln("Netro,HTotoo"); - console.writeln(""); - break; - - case 3: - // https://github.com/portapack-mayhem/mayhem-firmware/graphs/contributors?to=2020-04-12&from=2015-07-31&type=c - console.writeln(STR_COLOR_DARK_YELLOW "Havoc:"); - console.writeln("furrtek,mrmookie,NotPike"); - console.writeln("mjwaxios,ImDroided,Giorgiofox"); - console.writeln("F4GEV,z4ziggy,xmycroftx"); - console.writeln("troussos,silascutler"); - console.writeln("nickbouwhuis,msoose,leres"); - console.writeln("joakar,dhoetger,clem-42"); - console.writeln("brianlechthaler,ZeroChaos-..."); - console.writeln(""); - break; - - case 4: - // https://github.com/portapack-mayhem/mayhem-firmware/graphs/contributors?from=2014-07-05&to=2015-07-31&type=c - console.writeln(STR_COLOR_DARK_YELLOW "PortaPack:"); - console.writeln("jboone,argilo"); - console.writeln(""); - break; - - case 5: - // https://github.com/mossmann/hackrf/graphs/contributors - console.writeln(STR_COLOR_DARK_YELLOW "HackRF:"); - console.writeln("mossmann,dominicgs,bvernoux"); - console.writeln("bgamari,schneider42,miek"); - console.writeln("willcode,hessu,Sec42"); - console.writeln("yhetti,ckuethe,smunaut"); - console.writeln("wishi,mrbubble62,scateu..."); - console.writeln(""); - frame = 0; // Loop - break; - } - } -} - -void AboutView::focus() { - button_ok.focus(); -} - -} /* namespace ui */ +#include "ui_about_simple.hpp" + +namespace ui { + +// TODO: Generate this automatically from github +// Information: a line starting with a '#' will be yellow coloured +const std::string authors_list[] = { + " ", + "# * List of contributors * ", + " ", + "#Mayhem:", + " ", + "eried,euquiq,gregoryfenton", + "johnelder,jwetzell,nnemanjan00", + "N0vaPixel,klockee,gullradriel", + "jamesshao8,ITAxReal,rascafr", + "mcules,dqs105,strijar", + "zhang00963,RedFox-Fr,aldude999", + "East2West,fossum,ArjanOnwezen", + "vXxOinvizioNxX,teixeluis", + "Brumi-2021,texasyojimbo", + "heurist1,intoxsick,ckuethe", + "notpike,jLynx,zigad", + "MichalLeonBorsuk,jimilinuxguy", + "kallanreed,bernd-herzog", + "NotherNgineer,zxkmm,u-foka", + "Netro,HTotoo", + " ", + "#Havoc:", + " ", + "furrtek,mrmookie,NotPike", + "mjwaxios,ImDroided,Giorgiofox", + "F4GEV,z4ziggy,xmycroftx", + "troussos,silascutler", + "nickbouwhuis,msoose,leres", + "joakar,dhoetger,clem-42", + "brianlechthaler,ZeroChaos-...", + " ", + "#PortaPack:", + " ", + "jboone,argilo", + " ", + "#HackRF:", + " ", + "mossmann,dominicgs,bvernoux", + "bgamari,schneider42,miek", + "willcode,hessu,Sec42", + "yhetti,ckuethe,smunaut", + "wishi,mrbubble62,scateu..."}; + +AboutView::AboutView(NavigationView& nav) { + add_children({&menu_view, + &button_ok}); + + button_ok.on_select = [&nav](Button&) { + nav.pop(); + }; + + menu_view.on_left = [this]() { + button_ok.focus(); + }; + + menu_view.on_right = [this]() { + button_ok.focus(); + }; + + for (const std::string& authors_line : authors_list) { + // if it's starting with #, it's a title and we have to substract the '#' and paint yellow + if (authors_line.size() > 0) { + if (authors_line[0] == '#') { + menu_view.add_item( + {authors_line.substr(1, authors_line.size() - 1), + ui::Color::yellow(), + nullptr, + nullptr}); + } else { + menu_view.add_item( + {authors_line, + ui::Color::white(), + nullptr, + nullptr}); + } + } + } +} + +void AboutView::focus() { + menu_view.focus(); + // put focus on first text line + menu_view.set_highlighted(1); +} + +} /* namespace ui */ diff --git a/firmware/application/apps/ui_about_simple.hpp b/firmware/application/apps/ui_about_simple.hpp index 8ce42f4c..c3fa9d26 100644 --- a/firmware/application/apps/ui_about_simple.hpp +++ b/firmware/application/apps/ui_about_simple.hpp @@ -12,25 +12,16 @@ class AboutView : public View { AboutView(NavigationView& nav); void focus() override; std::string title() const override { return "About"; }; - int32_t timer{180}; - short frame{0}; private: - void update(); - - Console console{ - {0, 10, 240, 240}}; + MenuView menu_view{ + {0, 0, 240, 240}, + true}; Button button_ok{ {240 / 3, 270, 240 / 3, 24}, "OK", }; - - MessageHandlerRegistration message_handler_update{ - Message::ID::DisplayFrameSync, - [this](const Message* const) { - this->update(); - }}; }; } // namespace ui diff --git a/firmware/application/ui/ui_menu.cpp b/firmware/application/ui/ui_menu.cpp index 0f73fe55..e34df795 100644 --- a/firmware/application/ui/ui_menu.cpp +++ b/firmware/application/ui/ui_menu.cpp @@ -251,8 +251,12 @@ bool MenuView::on_key(const KeyEvent key) { case KeyEvent::Down: return set_highlighted(highlighted_item + 1); - case KeyEvent::Select: case KeyEvent::Right: + if (on_right) { + on_right(); + } + [[fallthrough]]; + case KeyEvent::Select: if (menu_items[highlighted_item].on_select) { menu_items[highlighted_item].on_select(key); } diff --git a/firmware/application/ui/ui_menu.hpp b/firmware/application/ui/ui_menu.hpp index 808d2001..f0850903 100644 --- a/firmware/application/ui/ui_menu.hpp +++ b/firmware/application/ui/ui_menu.hpp @@ -75,6 +75,7 @@ class MenuItemView : public Widget { class MenuView : public View { public: std::function on_left{}; + std::function on_right{}; std::function on_highlight{nullptr}; MenuView(Rect new_parent_rect = {0, 0, screen_width, screen_height - 16},