Type picker refactor: use SCI_USERLISTSHOW, fix coordinate handling

- Switch type picker from SCI_AUTOCSHOW to SCI_USERLISTSHOW for proper
  signal handling (userListActivated now fires correctly)
- Fix coordinate system mixing by using posFromCol() consistently
- Skip 0x prefix in value/base address edit selection
- Dynamic hint positioning: 2 spaces after value with // prefix
- Clearer validation errors ("too large! max=0x..." instead of "max")
- Green colored hint text using IND_BASE_ADDR indicator

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
sysadmin
2026-02-04 07:48:59 -07:00
parent 06c3251f74
commit 490486ca7c
7 changed files with 396 additions and 154 deletions

View File

@@ -65,6 +65,7 @@ private:
bool m_cursorOverridden = false;
uint64_t m_hoveredNodeId = 0;
QSet<uint64_t> m_currentSelIds;
int m_hoverSpanLine = -1; // Line with hover span indicator
// ── Drag selection ──
bool m_dragging = false;
bool m_dragStarted = false; // true once drag threshold exceeded
@@ -87,6 +88,8 @@ private:
int spanStart = 0;
int linelenAfterReplace = 0;
QString original;
long posStart = 0; // Scintilla position of edit start
long posEnd = 0; // Scintilla position of edit end
NodeKind editKind = NodeKind::Int32;
int commentCol = -1; // fixed comment column (stored at edit start)
bool lastValidationOk = true; // track state to avoid redundant updates
@@ -104,12 +107,15 @@ private:
void applyMarkers(const QVector<LineMeta>& meta);
void applyFoldLevels(const QVector<LineMeta>& meta);
void applyHexDimming(const QVector<LineMeta>& meta);
void applyBaseAddressColoring(const QVector<LineMeta>& meta);
void commitInlineEdit();
int editEndCol() const;
bool handleNormalKey(QKeyEvent* ke);
bool handleEditKey(QKeyEvent* ke);
void showTypeAutocomplete();
void showTypeListFiltered(const QString& filter);
void updateTypeListFilter();
void paintEditableSpans(int line);
void updateEditableIndicators(int line);
void applyHoverCursor();