Merge pull request #208 from jpirnay/refactor-listhandler

feat: Add double and long clicks in lists
This commit is contained in:
jpirnay
2026-05-13 14:16:14 +02:00
committed by GitHub
24 changed files with 170 additions and 333 deletions
@@ -481,19 +481,8 @@ void FontDownloadActivity::loop() {
return;
}
buttonNavigator_.onNextRelease([this] {
if (selectedIndex_ < listItemCount() - 1) {
selectedIndex_++;
requestUpdate();
}
});
buttonNavigator_.onPreviousRelease([this] {
if (selectedIndex_ > 0) {
selectedIndex_--;
requestUpdate();
}
});
buttonNavigator_.onNextList(selectedIndex_, listItemCount(), [this] { requestUpdate(); });
buttonNavigator_.onPreviousList(selectedIndex_, listItemCount(), [this] { requestUpdate(); });
if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) {
if (!families_.empty()) {
@@ -45,15 +45,8 @@ void FontSelectionActivity::loop() {
return;
}
buttonNavigator.onNextRelease([this] {
selectedIndex = ButtonNavigator::nextIndex(selectedIndex, fontCount);
requestUpdate();
});
buttonNavigator.onPreviousRelease([this] {
selectedIndex = ButtonNavigator::previousIndex(selectedIndex, fontCount);
requestUpdate();
});
buttonNavigator.onNextList(selectedIndex, fontCount, [this] { requestUpdate(); });
buttonNavigator.onPreviousList(selectedIndex, fontCount, [this] { requestUpdate(); });
}
void FontSelectionActivity::handleSelection() {
@@ -37,15 +37,8 @@ void LanguageSelectActivity::loop() {
}
// Handle navigation
buttonNavigator.onNextRelease([this] {
selectedIndex = ButtonNavigator::nextIndex(static_cast<int>(selectedIndex), totalItems);
requestUpdate();
});
buttonNavigator.onPreviousRelease([this] {
selectedIndex = ButtonNavigator::previousIndex(static_cast<int>(selectedIndex), totalItems);
requestUpdate();
});
buttonNavigator.onNextList(selectedIndex, totalItems, [this] { requestUpdate(); });
buttonNavigator.onPreviousList(selectedIndex, totalItems, [this] { requestUpdate(); });
}
void LanguageSelectActivity::handleSelection() {
@@ -49,17 +49,8 @@ void OpdsServerListActivity::loop() {
}
const int itemCount = getItemCount();
if (itemCount > 0) {
buttonNavigator.onNext([this, itemCount] {
selectedIndex = ButtonNavigator::nextIndex(selectedIndex, itemCount);
requestUpdate();
});
buttonNavigator.onPrevious([this, itemCount] {
selectedIndex = ButtonNavigator::previousIndex(selectedIndex, itemCount);
requestUpdate();
});
}
buttonNavigator.onNextList(selectedIndex, itemCount, [this] { requestUpdate(); });
buttonNavigator.onPreviousList(selectedIndex, itemCount, [this] { requestUpdate(); });
}
void OpdsServerListActivity::handleSelection() {
@@ -61,15 +61,8 @@ void OpdsSettingsActivity::loop() {
}
const int menuItems = getMenuItemCount();
buttonNavigator.onNext([this, menuItems] {
selectedIndex = (selectedIndex + 1) % menuItems;
requestUpdate();
});
buttonNavigator.onPrevious([this, menuItems] {
selectedIndex = (selectedIndex + menuItems - 1) % menuItems;
requestUpdate();
});
buttonNavigator.onNextList(selectedIndex, menuItems, [this] { requestUpdate(); });
buttonNavigator.onPreviousList(selectedIndex, menuItems, [this] { requestUpdate(); });
}
bool OpdsSettingsActivity::saveServer() {
@@ -206,7 +199,7 @@ void OpdsSettingsActivity::render(RenderLock&&) {
StrId::STR_PASSWORD};
GUI.drawList(
renderer, Rect{0, contentTop, pageWidth, contentHeight}, menuItems, static_cast<int>(selectedIndex),
renderer, Rect{0, contentTop, pageWidth, contentHeight}, menuItems, selectedIndex,
[this, &fieldNames](int index) {
if (index < BASE_ITEMS) {
return std::string(I18N.get(fieldNames[index]));
@@ -25,7 +25,7 @@ class OpdsSettingsActivity final : public Activity {
private:
ButtonNavigator buttonNavigator;
size_t selectedIndex = 0;
int selectedIndex = 0;
int serverIndex;
OpdsServer editServer;
bool isNewServer = false;
@@ -197,29 +197,9 @@ void StatusBarSettingsActivity::loop() {
}
// Handle navigation
buttonNavigator.onNextRelease([this] {
const int menuCount = SETTINGS.useClock ? MENU_ITEMS_WITH_CLOCK : MENU_ITEMS_NO_CLOCK;
selectedIndex = ButtonNavigator::nextIndex(selectedIndex, menuCount);
requestUpdate();
});
buttonNavigator.onPreviousRelease([this] {
const int menuCount = SETTINGS.useClock ? MENU_ITEMS_WITH_CLOCK : MENU_ITEMS_NO_CLOCK;
selectedIndex = ButtonNavigator::previousIndex(selectedIndex, menuCount);
requestUpdate();
});
buttonNavigator.onNextContinuous([this] {
const int menuCount = SETTINGS.useClock ? MENU_ITEMS_WITH_CLOCK : MENU_ITEMS_NO_CLOCK;
selectedIndex = ButtonNavigator::nextIndex(selectedIndex, menuCount);
requestUpdate();
});
buttonNavigator.onPreviousContinuous([this] {
const int menuCount = SETTINGS.useClock ? MENU_ITEMS_WITH_CLOCK : MENU_ITEMS_NO_CLOCK;
selectedIndex = ButtonNavigator::previousIndex(selectedIndex, menuCount);
requestUpdate();
});
const int menuCount = SETTINGS.useClock ? MENU_ITEMS_WITH_CLOCK : MENU_ITEMS_NO_CLOCK;
buttonNavigator.onNextList(selectedIndex, menuCount, [this] { requestUpdate(); });
buttonNavigator.onPreviousList(selectedIndex, menuCount, [this] { requestUpdate(); });
}
void StatusBarSettingsActivity::handleSelection() {