fix(ui): 采样统计显示一致化、GX 拖拽在布局边界下可用、信号「移动到…」与拖拽排序
一、采样间隔/频率显示不一致(用户报告 1ms vs 1000us、100us 0ns) * FormatDurationCompound 改为「先量化到整数皮秒、再整数分解」, 彻底消除同一数值因浮点噪声落到不同单位/留下零尾数的问题; 秒级分支与亚秒分支共用 totalPs 方案,次级进位/单位升级集中在一处。 * FormatFrequency 的单位选择改为按「舍入后的显示值」判定(999.9999999Hz 与 1000Hz 均为 1.000kHz),并做向下校正避免 0.001kHz。 二、选区截取面板 * 提示文本改为用户指定原文「启用双光标模式以进行选区截取」。 * EdgePanelWidth 计入该提示的实际文本宽度;绘制改用 UiTextClipped 不再省略。 * viewHeight 补回漏减的 bottomPad,修掉条目区与按钮之间的空白。 三、未展开的信号条目栏悬停不再变成手型光标。 四、开启「显示布局边界」后 GX 标签可正常拖拽排序 * 抽出 PaintLaneReorderOverlay(吸附槽位 + 被拖轮廓),贴图与整幅重绘共用。 * 整幅重绘在 LANE_REORDER 时按 LaneDragOffset 逐格平移重画(被拖网格最后画), 修掉调试模式下不跟随鼠标、无吸附提示、只能盲拖的问题。 五、信号右键新增「移动到…」二级菜单(位于「仅显示该信号」之上) * 条目为「分组 N(组名)」,当前组打勾;无标题行;底部「新建分组」。 * MenuItem::submenuMaxRows + PopupMenu 独立子菜单滚动(滚动条、滚轮、视口命中过滤), IsScrollable 计入子菜单可滚状态。 * 数据层 DataSet::MoveSignalToGroup/MoveSignal 让时间轴随信号搬运 (独占则移动、共享则复制);TabConfig::RemapAfterSignalMove 改写引用而非先删后插。 * Application::MoveSignalCore 统一入口,保证派生计算暂停、引用修正、选中迁移与同步一致。 六、信号列表支持按住拖拽排序(组内重排 / 跨组移动) * 4px 阈值进入拖拽;条目脱离原位跟随鼠标(阴影 + 强调色描边 + 插入指示线)。 * 其它信号行/分组行按插入位置做避让位移动画(RowRect 统一叠加插值位移, 宿主 kScrollTimerId 驱动 AdvanceSignalDragAnimation)。 * 数据层 DataSet::MoveSignal 支持任意位置;TabConfig::RemapAfterSignalReorder 线性重映射。 * 拖拽中禁用组名悬浮;双击改名与 InvalidateRows 均正确终止拖拽态。 验证:删 .o 全量重编译零 error / 零 warning;产物 873,984 B(< 1MB 预警阈值)。 本轮未使用鼠标/键盘/屏幕,未运行任何 GUI 探针,仅编译验证 + 源码级核对。
This commit is contained in:
1 parent
21a9865365
commit
97b361dedd
23 files changed
+1581
-74
No files matched your search
@@ -224,6 +224,51 @@ namespace jdi
|
||||
*/
|
||||
void RemoveSignal(int groupIndex, int signalIndex);
|
||||
|
||||
/**
|
||||
* @brief 把一条信号移动到另一个分组(`toGroup < 0` 表示新建分组)。
|
||||
*
|
||||
* 用户从信号右键菜单的「移动到…」调用。跨分组移动会让 `SignalData::axisIndex`
|
||||
* 失效(轴按分组存放),因此数据层会把该信号的时间轴一并带走
|
||||
* (独占则移动、共享则复制),详见 `DataSet::MoveSignalToGroup`。
|
||||
*
|
||||
* 移动后:各标签页先 `RemapAfterSignalMove` 修正引用(信号**留在原网格**、
|
||||
* 曲线继续显示),共享选中项同步改写,最后 `SyncTabsToDataSet` 整体对齐。
|
||||
*
|
||||
* @param [IN] fromGroup 源分组下标。
|
||||
* @param [IN] fromSignal 源分组内的信号下标。
|
||||
* @param [IN] toGroup 目标分组下标,负数表示新建一个名为「新建分组」的分组。
|
||||
*/
|
||||
void MoveSignalToGroup(int fromGroup, int fromSignal, int toGroup);
|
||||
|
||||
/**
|
||||
* @brief 生成一个在现有分组中不重复的分组名(`base` / `base (2)` / `base (3)` …)。
|
||||
* @param [IN] base 期望名称。
|
||||
* @return 实际可用名称。
|
||||
*/
|
||||
std::wstring UniqueGroupName(const std::wstring& base) const;
|
||||
|
||||
/**
|
||||
* @brief 把一条信号移动到指定分组的指定位置(组内重排 / 跨组移动的统一实现)。
|
||||
*
|
||||
* `MoveSignalToGroup` 与信号列表的拖拽排序都汇到这里,保证两处的引用修正、
|
||||
* 选中项迁移与同步流程完全一致。
|
||||
*
|
||||
* @param [IN] fromGroup 源分组下标。
|
||||
* @param [IN] fromSignal 源分组内的信号下标。
|
||||
* @param [IN] toGroup 目标分组下标。
|
||||
* @param [IN] toIndex 目标组内下标(负数表示追加到末尾)。
|
||||
*/
|
||||
void MoveSignalCore(int fromGroup, int fromSignal, int toGroup, int toIndex);
|
||||
|
||||
/**
|
||||
* @brief 信号列表拖拽排序的提交入口(组内重排或跨组移动)。
|
||||
* @param [IN] fromGroup 源分组下标。
|
||||
* @param [IN] fromSignal 源分组内的信号下标。
|
||||
* @param [IN] toGroup 目标分组下标。
|
||||
* @param [IN] toIndex 目标组内下标(-1 表示末尾)。
|
||||
*/
|
||||
void ReorderSignal(int fromGroup, int fromSignal, int toGroup, int toIndex);
|
||||
|
||||
/**
|
||||
* @brief 处理标签栏交互结果。
|
||||
* @param [IN] result 交互结果。
|
||||
|
||||
@@ -72,6 +72,22 @@ namespace jdi
|
||||
* 不烘值 ⇒ 两条曲线逐像素重合,且新信号的「调整」面板与源信号完全一致。
|
||||
*/
|
||||
inline const UINT kMessageCloneSignalAdjusted = WM_APP + 6; /**< 面板请求「克隆该信号(带调整)」的自定义消息。 */
|
||||
/**
|
||||
* @brief 面板请求「把信号移动到另一个分组」的自定义消息。
|
||||
*
|
||||
* `wParam = 源分组下标`;`lParam` 低 16 位 = 目标分组下标(`0xFFFF` 表示**新建分组**),
|
||||
* 高 16 位 = 源分组内的信号下标。
|
||||
* 新分组名固定为「新建分组」(重名时自动加序号),见 `Application::MoveSignalToGroup`。
|
||||
*/
|
||||
inline const UINT kMessageMoveSignalToGroup = WM_APP + 7;
|
||||
inline const int kMoveSignalNewGroupMarker = 0xFFFF; /**< `kMessageMoveSignalToGroup` 中「新建分组」的 lParam 标记。 */
|
||||
/**
|
||||
* @brief 面板请求「信号列表拖拽排序」的自定义消息。
|
||||
*
|
||||
* `wParam` = `(源分组下标 << 16) | 源组内信号下标`;
|
||||
* `lParam` 低 16 位 = 目标分组下标,高 16 位 = 目标组内下标(`0xFFFF` 表示末尾)。
|
||||
*/
|
||||
inline const UINT kMessageReorderSignal = WM_APP + 8;
|
||||
inline const UINT_PTR kHintTimerId = 1; /**< 提示浮层淡出用的定时器 ID。 */
|
||||
inline const UINT kHintTimerPeriodMs = 33; /**< 提示浮层淡出的重绘间隔(约 30fps)。 */
|
||||
inline const UINT_PTR kRamTimerId = 2; /**< 标题栏内存占用刷新的定时器 ID。 */
|
||||
|
||||
Reference in new issue
Block a user