mirror of
https://github.com/eried/portapack-mayhem.git
synced 2025-11-26 22:56:24 -05:00
Touch for MenuView and Freqlist (#2829)
* freqman add touch support. solves #1919 * menuview touch support
This commit is contained in:
parent
e88ab44f49
commit
cbbd8103d3
5 changed files with 42 additions and 1 deletions
|
|
@ -65,7 +65,7 @@ class FreqManBaseView : public View {
|
||||||
|
|
||||||
OptionsField options_category{
|
OptionsField options_category{
|
||||||
{3 * 8, 2},
|
{3 * 8, 2},
|
||||||
20 /* length */,
|
19 /* length */,
|
||||||
{}};
|
{}};
|
||||||
|
|
||||||
FreqManUIList freqlist_view{
|
FreqManUIList freqlist_view{
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,33 @@ void FreqManUIList::on_blur() {
|
||||||
set_dirty();
|
set_dirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FreqManUIList::on_touch(const TouchEvent event) {
|
||||||
|
if (!db_ || db_->empty())
|
||||||
|
return false;
|
||||||
|
if (event.type == TouchEvent::Type::Start) {
|
||||||
|
focus();
|
||||||
|
set_dirty();
|
||||||
|
int16_t rel_y = event.point.y() - screen_rect().top();
|
||||||
|
size_t new_selected = rel_y / char_height;
|
||||||
|
if (new_selected + start_index_ >= db_->entry_count()) {
|
||||||
|
return true; // clicked, where there is no entry, skip it
|
||||||
|
}
|
||||||
|
// selected_index_ is the current
|
||||||
|
if (selected_index_ == new_selected) {
|
||||||
|
// already selected, trigger on_select
|
||||||
|
if (on_select) {
|
||||||
|
// on_select(new_selected); //causes strange behavior, not so confident to use it
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
// just change selection
|
||||||
|
selected_index_ = new_selected;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool FreqManUIList::on_keyboard(const KeyboardEvent key) {
|
bool FreqManUIList::on_keyboard(const KeyboardEvent key) {
|
||||||
if (!db_ || db_->empty())
|
if (!db_ || db_->empty())
|
||||||
return false;
|
return false;
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@ class FreqManUIList : public Widget {
|
||||||
bool on_key(const KeyEvent key) override;
|
bool on_key(const KeyEvent key) override;
|
||||||
bool on_encoder(EncoderEvent delta) override;
|
bool on_encoder(EncoderEvent delta) override;
|
||||||
bool on_keyboard(const KeyboardEvent event) override;
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
|
||||||
void set_parent_rect(Rect new_parent_rect) override;
|
void set_parent_rect(Rect new_parent_rect) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -243,6 +243,18 @@ void MenuView::on_blur() {
|
||||||
item_view(highlighted_item - offset)->unhighlight();
|
item_view(highlighted_item - offset)->unhighlight();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool MenuView::on_touch(const TouchEvent event) {
|
||||||
|
size_t i = 0;
|
||||||
|
for (const auto child : children_) {
|
||||||
|
if (i >= menu_item_views.size()) break;
|
||||||
|
if (child->screen_rect().contains(event.point)) {
|
||||||
|
return set_highlighted(i + offset);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool MenuView::on_key(const KeyEvent key) {
|
bool MenuView::on_key(const KeyEvent key) {
|
||||||
switch (key) {
|
switch (key) {
|
||||||
case KeyEvent::Up:
|
case KeyEvent::Up:
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ class MenuView : public View {
|
||||||
bool on_key(const KeyEvent event) override;
|
bool on_key(const KeyEvent event) override;
|
||||||
bool on_encoder(const EncoderEvent event) override;
|
bool on_encoder(const EncoderEvent event) override;
|
||||||
bool on_keyboard(const KeyboardEvent event) override;
|
bool on_keyboard(const KeyboardEvent event) override;
|
||||||
|
bool on_touch(const TouchEvent event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void update_items();
|
void update_items();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue