mirror of
https://github.com/NohamR/Reclass.git
synced 2026-05-10 19:59:21 +00:00
Mat4x4 row labels, no scientific notation, per-component inline editing
- Add row0..row3 labels to Mat4x4 grid display with aligned columns - Rewrite fmtFloat() to never use scientific notation (plain decimal + trim) - Enable per-component inline editing for all 16 Mat4x4 floats - Fix click-to-edit always selecting first component (thread column from hitTestTarget) - Add isMatrixKind() helper, remove Mat4x4 from context menu edit exclusion Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "core.h"
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
|
||||
@@ -80,8 +81,24 @@ QString fmtUInt32(uint32_t v) { return hexVal(v); }
|
||||
QString fmtUInt64(uint64_t v) { return hexVal(v); }
|
||||
|
||||
QString fmtFloat(float v) {
|
||||
QString s = QString::number(v, 'g', 4);
|
||||
if (!s.contains('.') && !s.contains('e') && !s.contains('E'))
|
||||
if (std::isnan(v)) return QStringLiteral("NaN");
|
||||
if (std::isinf(v)) return v > 0 ? QStringLiteral("inff") : QStringLiteral("-inff");
|
||||
|
||||
// 6 significant digits — covers full single-precision range
|
||||
QString s = QString::number(v, 'g', 6);
|
||||
|
||||
// If 'g' chose scientific notation, reformat as plain decimal
|
||||
if (s.contains('e') || s.contains('E')) {
|
||||
s = QString::number(v, 'f', 8);
|
||||
if (s.contains('.')) {
|
||||
int i = s.size() - 1;
|
||||
while (i > 0 && s[i] == '0') i--;
|
||||
if (s[i] == '.') i++; // keep at least one decimal digit
|
||||
s.truncate(i + 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (!s.contains('.'))
|
||||
s += QStringLiteral(".f");
|
||||
else
|
||||
s += QLatin1Char('f');
|
||||
@@ -268,7 +285,7 @@ static QString readValueImpl(const Node& node, const Provider& prov,
|
||||
case NodeKind::Mat4x4: {
|
||||
if (!display) return {}; // not editable as single value
|
||||
if (subLine < 0 || subLine >= 4) return QStringLiteral("?");
|
||||
QString line = QStringLiteral("[");
|
||||
QString line = QStringLiteral("row%1 [").arg(subLine);
|
||||
for (int c = 0; c < 4; c++) {
|
||||
if (c > 0) line += QStringLiteral(", ");
|
||||
line += fmtFloat(prov.readF32(addr + (subLine * 4 + c) * 4)).trimmed();
|
||||
|
||||
Reference in New Issue
Block a user