mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-14 06:42:34 +00:00
Pagination fix for Latest to oldest per page
This commit is contained in:
committed by
Jonathan Bennett
parent
d6bf0a330a
commit
b150c56735
@@ -1665,8 +1665,7 @@ int Screen::handleInputEvent(const InputEvent *event)
|
|||||||
ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_lastheard ||
|
ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_lastheard ||
|
||||||
ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_hopsignal ||
|
ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_hopsignal ||
|
||||||
ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_distance ||
|
ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_distance ||
|
||||||
ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_bearings)
|
ui->getUiState()->currentFrame == framesetInfo.positions.nodelist_bearings) {
|
||||||
{
|
|
||||||
if (event->inputEvent == INPUT_BROKER_UP) {
|
if (event->inputEvent == INPUT_BROKER_UP) {
|
||||||
graphics::NodeListRenderer::scrollUp();
|
graphics::NodeListRenderer::scrollUp();
|
||||||
setFastFramerate();
|
setFastFramerate();
|
||||||
|
|||||||
@@ -500,30 +500,40 @@ void drawNodeListScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t
|
|||||||
int totalRowsAvailable = (display->getHeight() - y) / rowYOffset;
|
int totalRowsAvailable = (display->getHeight() - y) / rowYOffset;
|
||||||
int numskipped = 0;
|
int numskipped = 0;
|
||||||
int visibleNodeRows = totalRowsAvailable;
|
int visibleNodeRows = totalRowsAvailable;
|
||||||
int startIndex = scrollIndex * visibleNodeRows * totalColumns;
|
|
||||||
if (nodeDB->getMeshNodeByIndex(startIndex)->num == nodeDB->getNodeNum()) {
|
|
||||||
startIndex++; // skip own node
|
|
||||||
}
|
|
||||||
int endIndex = std::min(startIndex + visibleNodeRows * totalColumns, totalEntries);
|
|
||||||
|
|
||||||
|
// Build filtered + ordered list
|
||||||
|
std::vector<int> drawList;
|
||||||
|
drawList.reserve(totalEntries);
|
||||||
|
for (int i = 0; i < totalEntries; i++) {
|
||||||
|
auto *n = nodeDB->getMeshNodeByIndex(i);
|
||||||
|
|
||||||
|
if (!n) continue;
|
||||||
|
if (n->num == nodeDB->getNodeNum())
|
||||||
|
continue;
|
||||||
|
if (locationScreen && !n->has_position)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
drawList.push_back(n->num);
|
||||||
|
}
|
||||||
|
totalEntries = drawList.size();
|
||||||
|
int startIndex = scrollIndex * visibleNodeRows * totalColumns;
|
||||||
|
int endIndex = std::min(startIndex + visibleNodeRows * totalColumns, totalEntries);
|
||||||
int yOffset = 0;
|
int yOffset = 0;
|
||||||
int col = 0;
|
int col = 0;
|
||||||
int lastNodeY = y;
|
int lastNodeY = y;
|
||||||
int shownCount = 0;
|
int shownCount = 0;
|
||||||
int rowCount = 0;
|
int rowCount = 0;
|
||||||
|
|
||||||
for (int i = startIndex; i < endIndex; ++i) {
|
for (int idx = startIndex; idx < endIndex; idx++) {
|
||||||
if (locationScreen && !nodeDB->getMeshNodeByIndex(i)->has_position) {
|
uint32_t nodeNum = drawList[idx];
|
||||||
numskipped++;
|
auto *node = nodeDB->getMeshNode(nodeNum);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
int xPos = x + (col * columnWidth);
|
int xPos = x + (col * columnWidth);
|
||||||
int yPos = y + yOffset;
|
int yPos = y + yOffset;
|
||||||
renderer(display, nodeDB->getMeshNodeByIndex(i), xPos, yPos, columnWidth);
|
|
||||||
|
|
||||||
if (extras) {
|
renderer(display, node, xPos, yPos, columnWidth);
|
||||||
extras(display, nodeDB->getMeshNodeByIndex(i), xPos, yPos, columnWidth, heading, lat, lon);
|
|
||||||
}
|
if (extras)
|
||||||
|
extras(display, node, xPos, yPos, columnWidth, heading, lat, lon);
|
||||||
|
|
||||||
lastNodeY = std::max(lastNodeY, yPos + FONT_HEIGHT_SMALL);
|
lastNodeY = std::max(lastNodeY, yPos + FONT_HEIGHT_SMALL);
|
||||||
yOffset += rowYOffset;
|
yOffset += rowYOffset;
|
||||||
|
|||||||
Reference in New Issue
Block a user