mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-11-02 19:02:00 +00:00
fix(nearby): a node's name takes the room its row leaves
The name column always reserved 7-9 characters on the right, though a scan row shows only 11 px of signal bars: names got about half the OLED. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1367,9 +1367,8 @@ public:
|
|||||||
// and shows the highlighted node's detail beside it.
|
// and shows the highlighted node's detail beside it.
|
||||||
const bool split = _source == SRC_STORED && _count > 0 && display.width() >= 40 * display.getCharWidth();
|
const bool split = _source == SRC_STORED && _count > 0 && display.width() >= 40 * display.getCharWidth();
|
||||||
const int lw = split ? display.width() * 11 / 20 : display.width(); // the list's right edge
|
const int lw = split ? display.width() * 11 / 20 : display.width(); // the list's right edge
|
||||||
// An arrow towards the node before its distance: one more cell.
|
// An arrow towards the node before its distance.
|
||||||
const bool arrows = _source == SRC_STORED && _sort != SORT_TIME;
|
const bool arrows = _source == SRC_STORED && _sort != SORT_TIME;
|
||||||
int dist_col = lw - display.getCharWidth() * (arrows ? 9 : 7);
|
|
||||||
|
|
||||||
display.setColor(UIColor::primary_txt);
|
display.setColor(UIColor::primary_txt);
|
||||||
const char* flt = (_filter != F_ALL) ? filterLabel(_filter) : nullptr;
|
const char* flt = (_filter != F_ALL) ? filterLabel(_filter) : nullptr;
|
||||||
@@ -1432,32 +1431,43 @@ public:
|
|||||||
miniIconDrawCentered(display, tx + iw / 2, y + display.getLineHeight() / 2 - 1, ICON_PG_STAR);
|
miniIconDrawCentered(display, tx + iw / 2, y + display.getLineHeight() / 2 - 1, ICON_PG_STAR);
|
||||||
tx += iw + 2;
|
tx += iw + 2;
|
||||||
}
|
}
|
||||||
display.translateUTF8ToBlocks(filt, e.name, sizeof(filt));
|
// The right-hand value first: the name takes whatever it leaves.
|
||||||
if (_source == SRC_SCAN && !e.name[0]) { // unknown node → "[Type]"
|
|
||||||
snprintf(filt, sizeof(filt), "[%s]", typeName(e.type));
|
|
||||||
}
|
|
||||||
int mqr = display.drawTextEllipsized(tx, y, dist_col - tx - 2, filt, sel);
|
|
||||||
if (sel && mqr > 0) mq_delay = mqr;
|
|
||||||
|
|
||||||
display.setColor(sel ? UIColor::window_bkg : UIColor::primary_txt);
|
|
||||||
char right[10];
|
char right[10];
|
||||||
|
const MiniIcon* arrow = nullptr;
|
||||||
|
int rw;
|
||||||
if (_source == SRC_SCAN) { // live scan: how well we hear it, as bars
|
if (_source == SRC_SCAN) { // live scan: how well we hear it, as bars
|
||||||
drawSignalBars(display, lw - reserve - 2, y, e.snr_x4);
|
|
||||||
right[0] = '\0';
|
right[0] = '\0';
|
||||||
} else if (_sort == SORT_TIME) {
|
rw = signalBarsWidth(display);
|
||||||
|
} else {
|
||||||
|
if (_sort == SORT_TIME) {
|
||||||
geo::fmtAgeShort(right, sizeof(right), rtc_clock.getCurrentTime(), e.lastmod);
|
geo::fmtAgeShort(right, sizeof(right), rtc_clock.getCurrentTime(), e.lastmod);
|
||||||
if (!right[0]) snprintf(right, sizeof(right), "?"); // unknown / RTC not synced
|
if (!right[0]) snprintf(right, sizeof(right), "?"); // unknown / RTC not synced
|
||||||
} else {
|
} else {
|
||||||
if (e.dist_km >= 0.0f) geo::fmtDist(right, sizeof(right), e.dist_km, useImperial());
|
if (e.dist_km >= 0.0f) geo::fmtDist(right, sizeof(right), e.dist_km, useImperial());
|
||||||
else strcpy(right, "-"); // no fix of ours or theirs
|
else strcpy(right, "-"); // no fix of ours or theirs
|
||||||
}
|
}
|
||||||
if (right[0]) display.drawTextRightAlign(lw - reserve - 2, y, right);
|
rw = display.getTextWidth(right);
|
||||||
if (arrows && e.dist_km >= 0.0f) {
|
if (arrows && e.dist_km >= 0.0f) {
|
||||||
const int deg = geo::bearingDeg(_own_lat, _own_lon, e.lat_e6, e.lon_e6);
|
const int deg = geo::bearingDeg(_own_lat, _own_lon, e.lat_e6, e.lon_e6);
|
||||||
const MiniIcon& ic = *ICON_ARROWS[((deg + 22) % 360) / 45];
|
arrow = ICON_ARROWS[((deg + 22) % 360) / 45];
|
||||||
miniIconDraw(display, lw - reserve - 2 - display.getTextWidth(right) - 3
|
rw += 3 + arrow->w * miniIconScale(display);
|
||||||
- ic.w * miniIconScale(display), y, ic);
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
display.translateUTF8ToBlocks(filt, e.name, sizeof(filt));
|
||||||
|
if (_source == SRC_SCAN && !e.name[0]) { // unknown node → "[Type]"
|
||||||
|
snprintf(filt, sizeof(filt), "[%s]", typeName(e.type));
|
||||||
|
}
|
||||||
|
const int name_right = lw - reserve - 2 - rw - display.getCharWidth();
|
||||||
|
int mqr = display.drawTextEllipsized(tx, y, name_right - tx, filt, sel);
|
||||||
|
if (sel && mqr > 0) mq_delay = mqr;
|
||||||
|
|
||||||
|
display.setColor(sel ? UIColor::window_bkg : UIColor::primary_txt);
|
||||||
|
if (_source == SRC_SCAN) drawSignalBars(display, lw - reserve - 2, y, e.snr_x4);
|
||||||
|
if (right[0]) display.drawTextRightAlign(lw - reserve - 2, y, right);
|
||||||
|
if (arrow)
|
||||||
|
miniIconDraw(display, lw - reserve - 2 - display.getTextWidth(right) - 3
|
||||||
|
- arrow->w * miniIconScale(display), y, *arrow);
|
||||||
}, lw);
|
}, lw);
|
||||||
if (split && _sel < _count) {
|
if (split && _sel < _count) {
|
||||||
const int top = display.listStart();
|
const int top = display.listStart();
|
||||||
|
|||||||
Reference in New Issue
Block a user