fix: 修复网格徽标菜单与标签页编号,重构样式区并新增透明度与浮动拾色器
信号列表 - 网格徽标(G1/G2)改为在左键抬起时弹出菜单,修复此前「按住才显示、松手即消失」的问题。 - 文件分组行新增关闭按钮(✕),可直接从工作区移除文件,与右键菜单「关闭该文件」等价。 - 信号名改为完整保留文件内的列名原文,不再剥离 "[n]" 序号前缀与括号内容。 标签页 - 新建标签页改用「当前未被占用的最小编号」,关闭标签页后编号可被复用, 修复「开 3 关 2 再新建会变成视图 4」的问题。 样式编辑区(统一为固定四行网格布局,面板缩放时不再错位) - 移除顶部「样式 · 信号名 · 文件名」标题行,选中信号即为编辑对象。 - 绘制方式取消「阶梯」,标签由「方式」改为「样式」,仅保留线段 / 散点 / 点线。 - 线宽仅保留最细与最粗两个预设,中间改为带左右箭头的数值旋钮,单位为 px; 支持单击或双击数值框直接键入(首次键入替换原值,回车提交、Esc 取消、越界钳制到 0.5-6.0)。 - 颜色预设后新增与预设色块完全同尺寸、同外框样式的「加号」小方格, 点击后弹出浮动拾色面板(与 G1/G2 菜单同风格的浮动窗口),支持 RGB 三通道滑块、 实时预览与十六进制显示;点击面板外部即收起,取色实时应用到当前信号。 - 移除样式区末尾的网格选择控件,该功能统一由信号行的 G 徽标承载。 - 新增透明度滑块,默认 100%,可在 0-100% 之间调节,并实时反映到波形、 图例色块与信号行色块的显示效果。 其他 - 信号面板默认宽度与行内间距微调,使较长的列名可以完整显示。 - 失焦时提交线宽输入并收起浮动拾色器与弹出菜单。
This commit is contained in:
1 parent
eb868b2679
commit
729494d1ec
9 files changed
+1254
-471
No files matched your search
@@ -37,44 +37,9 @@ namespace jdi
|
||||
return ContainsInsensitive(text, L"time") || ContainsInsensitive(text, L"时间");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 剥离列名中的 "[n]" 序号前缀,得到显示名称。
|
||||
* @param [IN] header 原始列名。
|
||||
* @return 显示名称。
|
||||
*/
|
||||
std::wstring MakeDisplayName(const std::wstring& header)
|
||||
{
|
||||
const std::wstring text = Trim(header);
|
||||
if (text.size() >= 3 && text[0] == L'[')
|
||||
{
|
||||
const std::size_t close = text.find(L']');
|
||||
if (close != std::wstring::npos && close > 1 && (close + 1) < text.size())
|
||||
{
|
||||
bool numeric = true;
|
||||
for (std::size_t i = 1; i < close; ++i)
|
||||
{
|
||||
if (!iswdigit(text[i]))
|
||||
{
|
||||
numeric = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (numeric)
|
||||
{
|
||||
const std::wstring rest = Trim(text.substr(close + 1));
|
||||
if (!rest.empty())
|
||||
{
|
||||
return rest;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return text.empty() ? header : text;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 从名称末尾的括号中提取单位(仅接受形如 mA / V / deg/s 的短标记)。
|
||||
* @param [IN] text 已剥离 "[n]" 前缀的名称。
|
||||
* @param [IN] text 列名(已去除首尾空白)。
|
||||
* @return 单位文本,无法识别时返回空字符串。
|
||||
*/
|
||||
std::wstring ExtractUnit(const std::wstring& text)
|
||||
@@ -109,46 +74,6 @@ namespace jdi
|
||||
return inner;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 从名称末尾移除已被识别为单位(或描述)的括号片段。
|
||||
* @param [IN] name 已剥离 "[n]" 前缀的名称。
|
||||
* @return 移除尾部括号后的名称(括号片段非单位时原样返回)。
|
||||
*/
|
||||
std::wstring StripBracketSuffix(const std::wstring& name)
|
||||
{
|
||||
if (name.size() < 3 || name.back() != L')')
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
const std::size_t open = name.rfind(L'(');
|
||||
if (open == std::wstring::npos || open == 0 || open + 2 >= name.size())
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
const std::wstring inner = Trim(name.substr(open + 1, name.size() - open - 2));
|
||||
if (inner.empty() || inner.size() > 10)
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
// 仅当括号内容为短单位标记时才剥离,避免误伤 "(5 Points)" 这类描述。
|
||||
for (const wchar_t c : inner)
|
||||
{
|
||||
const bool allowed = iswalpha(c) || iswdigit(c) || c == L'%' || c == L'/' || c == L'^' ||
|
||||
c == L'-' || c == L'.' || c == L'\u00B0' || c == L'\u00B5' ||
|
||||
c == L'\u03A9' || c == L'\u00B2' || c == L'\u00B3' || c == L'\u00B7';
|
||||
if (!allowed)
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
const std::wstring head = Trim(name.substr(0, open));
|
||||
return head.empty() ? name : head;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 依据全局信号序号从调色板取色,保证跨标签页配色一致。
|
||||
* @param [IN] globalIndex 全局信号序号。
|
||||
@@ -421,10 +346,9 @@ namespace jdi
|
||||
SignalData signal;
|
||||
signal.rawHeader = table.headers[column];
|
||||
{
|
||||
// 名称与单位分开保存:名称不再保留尾部单位括号,避免重复显示。
|
||||
const std::wstring baseName = MakeDisplayName(signal.rawHeader);
|
||||
signal.unit = ExtractUnit(baseName);
|
||||
signal.name = StripBracketSuffix(baseName);
|
||||
// 名称完整保留文件内的列名(含 "[n]" 序号与括号描述),仅用于展示不做改写。
|
||||
signal.name = Trim(signal.rawHeader);
|
||||
signal.unit = ExtractUnit(signal.name);
|
||||
}
|
||||
|
||||
signal.values.resize(rowCount);
|
||||
|
||||
Reference in new issue
Block a user