From b0aa7cda675a4961d548e51e9a609cc5cb340129 Mon Sep 17 00:00:00 2001 From: sysadmin Date: Thu, 12 Feb 2026 13:54:52 -0700 Subject: [PATCH] Align hex byte preview column with value column using dynamic nameW --- src/core.h | 23 ++++++++--------------- src/editor.cpp | 5 ++--- src/format.cpp | 8 ++++---- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/core.h b/src/core.h index 059526e..7794a22 100644 --- a/src/core.h +++ b/src/core.h @@ -529,9 +529,9 @@ inline ColumnSpan nameSpanFor(const LineMeta& lm, int typeW = kColType, int name int ind = kFoldCol + lm.depth * 3; int start = ind + typeW + kSepWidth; - // Hex/Padding: ASCII preview takes the name column position (8 chars) + // Hex/Padding: ASCII preview occupies the name column (padded to nameW) if (isHexPreview(lm.nodeKind)) - return {start, start + 8, true}; + return {start, start + nameW, true}; return {start, start + nameW, true}; } @@ -541,22 +541,19 @@ inline ColumnSpan valueSpanFor(const LineMeta& lm, int /*lineLength*/, int typeW lm.lineKind == LineKind::ArrayElementSeparator) return {}; int ind = kFoldCol + lm.depth * 3; - // Hex/Padding layout: [Type][sep][ASCII(8)][sep][hex bytes(23)] + // Hex/Padding uses nameW for ASCII column (same as regular name column) bool isHexPad = isHexPreview(lm.nodeKind); int valWidth = isHexPad ? 23 : kColValue; + int prefixW = typeW + nameW + 2 * kSepWidth; + if (lm.isContinuation) { - int prefixW = isHexPad - ? (typeW + kSepWidth + 8 + kSepWidth) - : (typeW + nameW + 2 * kSepWidth); int start = ind + prefixW; return {start, start + valWidth, true}; } if (lm.lineKind != LineKind::Field) return {}; - int start = isHexPad - ? (ind + typeW + kSepWidth + 8 + kSepWidth) - : (ind + typeW + kSepWidth + nameW + kSepWidth); + int start = ind + prefixW; return {start, start + valWidth, true}; } @@ -567,16 +564,12 @@ inline ColumnSpan commentSpanFor(const LineMeta& lm, int lineLength, int typeW = bool isHexPad = isHexPreview(lm.nodeKind); int valWidth = isHexPad ? 23 : kColValue; + int prefixW = typeW + nameW + 2 * kSepWidth; int start; if (lm.isContinuation) { - int prefixW = isHexPad - ? (typeW + kSepWidth + 8 + kSepWidth) - : (typeW + nameW + 2 * kSepWidth); start = ind + prefixW + valWidth; } else { - start = isHexPad - ? (ind + typeW + kSepWidth + 8 + kSepWidth + valWidth) - : (ind + typeW + kSepWidth + nameW + kSepWidth + valWidth); + start = ind + prefixW + valWidth; } return {start, lineLength, start < lineLength}; } diff --git a/src/editor.cpp b/src/editor.cpp index 9974268..ea8ceca 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -655,9 +655,8 @@ void RcxEditor::applyDataChangedHighlight(const QVector& meta) { // Per-byte highlighting in ASCII + hex areas int ind = kFoldCol + lm.depth * 3; int asciiStart = ind + typeW + kSepWidth; - // Hex8-64: ASCII always padded to 8; Padding: ASCII = lineByteCount chars - int asciiWidth = (lm.nodeKind == NodeKind::Padding) ? lm.lineByteCount : 8; - int hexStart = asciiStart + asciiWidth + kSepWidth; + // ASCII column is padded to nameW (aligned with value column) + int hexStart = asciiStart + nameW + kSepWidth; for (int byteIdx : lm.changedByteIndices) { // Highlight in ASCII area (1 char per byte) diff --git a/src/format.cpp b/src/format.cpp index 16be2b8..4003a18 100644 --- a/src/format.cpp +++ b/src/format.cpp @@ -344,7 +344,7 @@ QString fmtNodeLine(const Node& node, const Provider& prov, return ind + QString(prefixW, ' ') + val + cmtSuffix; } - // Hex nodes and Padding: hex byte preview + // Hex nodes and Padding: hex byte preview (ASCII padded to colName to align with value column) if (isHexPreview(node.kind)) { if (node.kind == NodeKind::Padding) { const int totalSz = qMax(1, node.arrayLen); @@ -352,17 +352,17 @@ QString fmtNodeLine(const Node& node, const Provider& prov, const int lineBytes = qMin(8, totalSz - lineOff); QByteArray b = prov.isReadable(addr + lineOff, lineBytes) ? prov.readBytes(addr + lineOff, lineBytes) : QByteArray(lineBytes, '\0'); - QString ascii = bytesToAscii(b, lineBytes); + QString ascii = bytesToAscii(b, lineBytes).leftJustified(colName, ' '); QString hex = bytesToHex(b, lineBytes).leftJustified(23, ' '); // 8*3-1 if (subLine == 0) return ind + type + SEP + ascii + SEP + hex + cmtSuffix; return ind + QString(colType + (int)SEP.size(), ' ') + ascii + SEP + hex + cmtSuffix; } - // Hex8..Hex64: single line, ASCII padded to 8 chars so hex column aligns + // Hex8..Hex64: single line, ASCII padded to colName so hex column aligns with value column const int sz = sizeForKind(node.kind); QByteArray b = prov.isReadable(addr, sz) ? prov.readBytes(addr, sz) : QByteArray(sz, '\0'); - QString ascii = bytesToAscii(b, sz).leftJustified(8, ' '); + QString ascii = bytesToAscii(b, sz).leftJustified(colName, ' '); QString hex = bytesToHex(b, sz).leftJustified(23, ' '); return ind + type + SEP + ascii + SEP + hex + cmtSuffix; }