自由标记体验重做 + 全部实验性面板可折起
- 网格内固定点:取值胶囊按已放置矩形做纵向避让(不再互相遮挡);行尾 ✕ 改为与 胶囊同高的正方形;移除固定点的纵向半透明竖线 - 新增「标记透明度」(0–100%),作用于本网格全部固定点的圆点/胶囊/描边/文字/✕; 半透明时文字改走 GDI+(GDI DrawTextW 忽略 alpha),100% 时像素零变化; ≤2% 时不绘制且不登记 ✕ 命中矩形(看不见的按钮不可点) - 面板按信号分组:信号色托底分组栏(展开三角 + 信号名 + N 标记点 + ✕,文字/三角/✕ 一律用自适应对比色),点击分组栏收起/展开;条目五列(值/枚举/增量/时刻/间隔), 首项增列与 Δt 显示 N/A,整个面板没有枚举文本时枚举列整列缺省;行尾仍有 ✕ - 面板内容超高时右侧出现滚动条(分组栏与条目一起滚动),滚轮在内容区翻页; 底部按钮与「标记透明度」滑块固定在底部、不参与滚动 - 底部按钮改为「光标选取模式」切换类按钮(外观与工具栏切换按钮一致,激活高亮), 激活时其上方出现「标记透明度」滑动条(与信号样式区的透明度滑块同款) - 所有实验性功能浮动面板支持展开/折起:标题栏 GX 徽标左侧新增「三角 + 横线」指示器, 单击切换、双击标题栏切换;折起的面板只有标题栏 - 数据层:LanePanelState.collapsed、Lane.freeMarkerOpacity/freeMarkerScroll/ freeMarkerCollapsedGroups,LaneCarry 与 SplitLane 一并继承 - 验证:新增离屏 .preflight/perf/mark2check 69/69(含两组 A/B);回归 datacheck 69/69、 verify 49/49、panelanim 158/158、errcheck 19/19;make release/debug 零警告
This commit is contained in:
1 parent
067128f46c
commit
3400ac7c29
9 files changed
+1225
-202
No files matched your search
@@ -331,13 +331,13 @@ namespace jdi
|
||||
|
||||
// ---------------------------------------------------------------- 自由标记
|
||||
|
||||
/** 「自由标记」面板里信号名行的高度(比普通条目略高:右侧多一个 ✕)。 */
|
||||
/** 「自由标记」面板里信号**分组栏**的高度(左侧三角 + 信号名,右侧标记点数 + ✕)。 */
|
||||
inline const float kFreeMarkerNameRowHeight = 22.0f;
|
||||
|
||||
/** 「自由标记」面板里每个固定点行的高度。 */
|
||||
inline const float kFreeMarkerItemRowHeight = 18.0f;
|
||||
/** 「自由标记」面板里每个固定点行的高度(五列 + 行尾 ✕)。 */
|
||||
inline const float kFreeMarkerItemRowHeight = 20.0f;
|
||||
|
||||
/** 「自由标记」面板与网格内固定点 ✕ 按钮的边长。 */
|
||||
/** 「自由标记」面板与行尾 ✕ 按钮的边长(网格内取值胶囊后的 ✕ 另按胶囊高度取正方形)。 */
|
||||
inline const float kFreeMarkerCloseSize = 13.0f;
|
||||
|
||||
/**
|
||||
@@ -347,21 +347,45 @@ namespace jdi
|
||||
* 而后者在 `TopPanelAtPoint` / `SyncPanelOrder` 里被高频调用(每次鼠标移动数次);
|
||||
* 逐行取采样值算宽度会变成"鼠标一动就做几十次采样查询"。
|
||||
*
|
||||
* 宽度 = 左右内边距 + 四列(取值/增量/时刻/间隔)+ 行 ✕ ⇒ 保证四列在纵向上对齐。
|
||||
* 宽度 = 左右内边距 + 五列(取值/枚举/增量/时刻/间隔)+ 行 ✕ ⇒ 保证五列在纵向上对齐。
|
||||
*/
|
||||
inline const float kFreeMarkerPanelWidth = 415.0f;
|
||||
inline const float kFreeMarkerPanelWidth = 424.0f;
|
||||
|
||||
/**
|
||||
* @brief 「自由标记」面板四列的逻辑宽度(**按此顺序**:取值 / 增量 / 时刻 / 间隔)。
|
||||
* @brief 「自由标记」面板五列的逻辑宽度
|
||||
* (**按此顺序**:取值 / 枚举文本 / 增量 / 时刻 / 间隔)。
|
||||
*
|
||||
* 固定列宽(不按文本测量,见上),绘制时用 `UiEllipsize` 截断超长文本。
|
||||
* 四列左对齐且右边界由列宽推得 ⇒ 同一信息在所有条目上纵向上严格对齐。
|
||||
* 当整个面板里没有任何枚举文本时,枚举这一列会被**整列缺省**(列宽记 0,
|
||||
* 后面的列左移),其它列的宽度不变。
|
||||
*/
|
||||
inline const float kFreeMarkerColumnWidths[4] = {124.0f, 86.0f, 78.0f, 90.0f};
|
||||
inline const float kFreeMarkerColumnWidths[5] = {74.0f, 80.0f, 60.0f, 72.0f, 78.0f};
|
||||
|
||||
/** 「自由标记」面板行内相邻两列之间的间距。 */
|
||||
inline const float kFreeMarkerColumnGap = 2.0f;
|
||||
|
||||
/** 「自由标记」面板内容滚动条的宽度(逻辑像素)。 */
|
||||
inline const float kFreeMarkerScrollWidth = 7.0f;
|
||||
|
||||
/**
|
||||
* @brief 「自由标记」面板**内容区**的最大高度(逻辑像素)。
|
||||
*
|
||||
* 超过它就出现上下滚动条(分组栏与固定点条目一起滚动);面板底部的按钮与
|
||||
* 「标记透明度」滑动条不参与滚动。
|
||||
*/
|
||||
inline const float kFreeMarkerContentMaxHeight = 260.0f;
|
||||
|
||||
/** 「自由标记」面板底部「标记透明度」滑动条行的高度(与信号样式区的行高同量级)。 */
|
||||
inline const float kFreeMarkerSliderRowHeight = 24.0f;
|
||||
|
||||
/**
|
||||
* @brief 所有实验性功能浮动面板标题栏左侧「展开/折起」指示器的宽度。
|
||||
*
|
||||
* 指示器 = 三角(朝右 = 已折起、朝下 = 已展开)+ 三角后方的一条横线;
|
||||
* 点击它切换面板的折起状态。`GX` 编号徽标向右让出这块宽度。
|
||||
*/
|
||||
inline const float kEdgePanelDisclosureWidth = 20.0f;
|
||||
|
||||
/**
|
||||
* @brief 非光标模式下判定"鼠标在信号曲线上"的纵向容差(逻辑像素)。
|
||||
*
|
||||
@@ -416,28 +440,29 @@ namespace jdi
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 「自由标记」的时间列文本:`t:<时刻>`。
|
||||
* @brief 「自由标记」的时间列文本:`<时刻>s`。
|
||||
*
|
||||
* 数值格式与光标时间读数**完全相同**(`FormatValue` + `s` 后缀,
|
||||
* 即 `FormatCursorTime` 的口径);这里不调用 `FormatCursorTime` 是因为它在本头里
|
||||
* 定义在本段**之后**,直接展开可以避免前向声明。
|
||||
* 数值格式与光标时间读数**完全相同**(`FormatValue` + `s` 后缀)。
|
||||
*/
|
||||
inline std::wstring FreeMarkerTimeText(double time)
|
||||
{
|
||||
return L"t:" + FormatValue(time) + L"s";
|
||||
return FormatValue(time) + L"s";
|
||||
}
|
||||
|
||||
/** 「自由标记」面板里缺省(不适用)的单元格文本。 */
|
||||
inline const wchar_t* const kFreeMarkerNotAvailable = L"N/A";
|
||||
|
||||
/**
|
||||
* @brief 「自由标记」的时间间隔列文本:`Δt:<间隔>`。
|
||||
* @brief 「自由标记」的时间间隔列文本:`Δt:+<间隔>`。
|
||||
*
|
||||
* 平时用复合单位(自动匹配 ms / s / min,与双光标差值读数一致),
|
||||
* 双击后按**秒**编辑。首个固定点没有前一项 ⇒ 返回空串(该列留白)。
|
||||
* 双击后按**秒**编辑。首个固定点没有前一项 ⇒ 显示 `N/A`(该列不省略,保持列对齐)。
|
||||
*/
|
||||
inline std::wstring FreeMarkerDeltaText(bool hasPrev, double timeDelta)
|
||||
{
|
||||
if (!hasPrev)
|
||||
{
|
||||
return std::wstring();
|
||||
return std::wstring(kFreeMarkerNotAvailable);
|
||||
}
|
||||
// 时间间隔恒为正(按时间排序后当前点总在后方);显示时显式带 `+`。
|
||||
return L"Δt:+" + FormatDurationCompound(std::fabs(timeDelta));
|
||||
@@ -525,10 +550,10 @@ namespace jdi
|
||||
inline const wchar_t* const kWeakPeakIterationsSliderLabel = L"迭代次数";
|
||||
inline const wchar_t* const kWeakPeakTitle = L"弱峰调整"; /**< 弱峰调整面板标题。 */
|
||||
inline const wchar_t* const kBuildSignalLabel = L"构建为新信号"; /**< 逐条目面板底部按钮文案(均值滤波 / 弱峰调整共用)。 */
|
||||
/** 「自由标记」面板底部切换按钮:光标模式**未启用**时的文案(点击后启用)。 */
|
||||
inline const wchar_t* const kFreeMarkerCursorOnLabel = L"启用光标模式";
|
||||
/** 「自由标记」面板底部切换按钮:光标模式**已启用**时的文案(点击后关闭)。 */
|
||||
inline const wchar_t* const kFreeMarkerCursorOffLabel = L"关闭光标模式";
|
||||
/** 「自由标记」面板底部切换按钮文案(切换按钮的激活态 = 光标模式开启)。 */
|
||||
inline const wchar_t* const kFreeMarkerCursorModeLabel = L"光标选取模式";
|
||||
/** 「自由标记」面板底部切换按钮激活时出现在其上方的滑动条标签。 */
|
||||
inline const wchar_t* const kFreeMarkerOpacityLabel = L"标记透明度";
|
||||
/**
|
||||
* @brief 边沿统计累积状态上限。
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user