mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2024-12-04 23:45:26 +00:00
auto scroll the name list (#2358)
* auto scroll the name list * script * remove uneeded empty line in script * script
This commit is contained in:
parent
c8f236a708
commit
6c838256df
@ -1,5 +1,8 @@
|
|||||||
#include "ui_about_simple.hpp"
|
#include "ui_about_simple.hpp"
|
||||||
|
|
||||||
|
#define ROLL_SPEED_FRAME_PER_LINE 60
|
||||||
|
// cuz frame rate of pp screen is probably 60, scroll per sec
|
||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
// TODO: Generate this automatically from github
|
// TODO: Generate this automatically from github
|
||||||
@ -87,10 +90,42 @@ AboutView::AboutView(NavigationView& nav) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AboutView::on_frame_sync() {
|
||||||
|
if (interacted) return;
|
||||||
|
|
||||||
|
if (frame_sync_count++ % ROLL_SPEED_FRAME_PER_LINE == 0) {
|
||||||
|
const auto current = menu_view.highlighted_index();
|
||||||
|
const auto count = menu_view.item_count();
|
||||||
|
|
||||||
|
if (current < count - 1) {
|
||||||
|
menu_view.set_highlighted(current + 1);
|
||||||
|
} else {
|
||||||
|
menu_view.set_highlighted(0);
|
||||||
|
// ^ to go back to the REAL top instead of make the 2 at the top to make the title disappeares
|
||||||
|
menu_view.set_highlighted(2); // the first line that has human name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AboutView::focus() {
|
void AboutView::focus() {
|
||||||
|
button_ok.focus();
|
||||||
|
menu_view.set_highlighted(2); // the first line that has human name
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AboutView::on_touch(const TouchEvent) {
|
||||||
|
interacted = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AboutView::on_key(const KeyEvent) {
|
||||||
|
interacted = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AboutView::on_encoder(const EncoderEvent) {
|
||||||
|
interacted = true;
|
||||||
menu_view.focus();
|
menu_view.focus();
|
||||||
// put focus on last text line to make it more obvious that list is scrollable
|
return false;
|
||||||
menu_view.set_highlighted(10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace ui */
|
} /* namespace ui */
|
||||||
|
@ -14,6 +14,13 @@ class AboutView : public View {
|
|||||||
std::string title() const override { return "About"; };
|
std::string title() const override { return "About"; };
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
virtual bool on_key(const KeyEvent event);
|
||||||
|
virtual bool on_encoder(const EncoderEvent event);
|
||||||
|
virtual bool on_touch(const TouchEvent event);
|
||||||
|
|
||||||
|
bool interacted{false};
|
||||||
|
uint16_t frame_sync_count{0};
|
||||||
|
void on_frame_sync();
|
||||||
MenuView menu_view{
|
MenuView menu_view{
|
||||||
{0, 0, 240, 264},
|
{0, 0, 240, 264},
|
||||||
true};
|
true};
|
||||||
@ -22,6 +29,12 @@ class AboutView : public View {
|
|||||||
{240 / 3, 270, 240 / 3, 24},
|
{240 / 3, 270, 240 / 3, 24},
|
||||||
"OK",
|
"OK",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
MessageHandlerRegistration message_handler_frame_sync{
|
||||||
|
Message::ID::DisplayFrameSync,
|
||||||
|
[this](const Message* const) {
|
||||||
|
this->on_frame_sync();
|
||||||
|
}};
|
||||||
};
|
};
|
||||||
} // namespace ui
|
} // namespace ui
|
||||||
|
|
||||||
|
@ -27,6 +27,9 @@ import sys
|
|||||||
|
|
||||||
cppheader = """#include "ui_about_simple.hpp"
|
cppheader = """#include "ui_about_simple.hpp"
|
||||||
|
|
||||||
|
#define ROLL_SPEED_FRAME_PER_LINE 60
|
||||||
|
// cuz frame rate of pp screen is probably 60, scroll per sec
|
||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
// Information: a line starting with a '#' will be yellow coloured
|
// Information: a line starting with a '#' will be yellow coloured
|
||||||
@ -69,10 +72,42 @@ AboutView::AboutView(NavigationView& nav) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AboutView::on_frame_sync() {
|
||||||
|
if (interacted) return;
|
||||||
|
|
||||||
|
if (frame_sync_count++ % ROLL_SPEED_FRAME_PER_LINE == 0) {
|
||||||
|
const auto current = menu_view.highlighted_index();
|
||||||
|
const auto count = menu_view.item_count();
|
||||||
|
|
||||||
|
if (current < count - 1) {
|
||||||
|
menu_view.set_highlighted(current + 1);
|
||||||
|
} else {
|
||||||
|
menu_view.set_highlighted(0);
|
||||||
|
// ^ to go back to the REAL top instead of make the 2 at the top to make the title disappeares
|
||||||
|
menu_view.set_highlighted(2); // the first line that has human name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AboutView::focus() {
|
void AboutView::focus() {
|
||||||
|
button_ok.focus();
|
||||||
|
menu_view.set_highlighted(2); // the first line that has human name
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AboutView::on_touch(const TouchEvent) {
|
||||||
|
interacted = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AboutView::on_key(const KeyEvent) {
|
||||||
|
interacted = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AboutView::on_encoder(const EncoderEvent) {
|
||||||
|
interacted = true;
|
||||||
menu_view.focus();
|
menu_view.focus();
|
||||||
// put focus on last text line to make it more obvious that list is scrollable
|
return false;
|
||||||
menu_view.set_highlighted(10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace ui */
|
} /* namespace ui */
|
||||||
|
Loading…
Reference in New Issue
Block a user