DeepSeek V4.1 Flash
|
ed13aa7d49
|
交互细节修复:悬停提示锚定、选区放大提示生命周期、光标样式统一与差值标签
- 信号悬停提示改为"锚定在首次出现位置":新增 m_hoverAnchorX/Y,
PaintSignalInteraction 用锚点而非当前鼠标位置;同时补回 OnMouseMove 里
漏写的 m_hoverSignal 赋值(该行缺失会导致悬停提示完全不显示)。
- 选区放大(RUBBER_SELECT)的提示文字按阶段切换:
开启开关 -> 「横向或纵向拖动以放大选择区域,ESC退出选区模式」;
左键按下不显示提示;开始拖动后维持「右键取消选区,ESC退出选区模式」;
松开左键后淡出。新增 SetHintSticky/ReleaseHint(m_hintSticky 期间阻塞淡出),
HintNeedsAnimation() 驱动宿主的淡出定时器。
- 两个时间光标统一为同一颜色与样式(去掉 theme.cursorAlt,仅保留 theme.cursor);
光标把手统一为同一形状。工具栏按钮文案动态化:
未选中「光标」/ 单光标「光标x1」/ 双光标「光标x2」
(Toolbar::SetActionLabel 返回是否变化,变化时 Application::Relayout() 以重算按钮宽度)。
- 取值胶囊避让重叠:PaintCursor 先把两条时间读数标签与 Δt 标签的矩形预填进
m_cursorLabelRects,取值标签逐条检测重叠并向下/向上让位,
多信号数据点重合或过近时读数不再互相覆盖。
两光标靠近时,光标 2 的时间读数标签自动上移一层叠放,避免互相覆盖。
- 双光标时间读数与 Δt 差值标签支持拖拽,并区分悬停与拖拽:
悬停显示手形(IDC_HAND),拖拽统一使用抓握图标(IDC_SIZEALL,
用 m_dragOnLabel 与"直接在光标线上抓取"的左右箭头区分);
Δt 标签拖拽时两条光标整体平移,差值保持不变。
- Δt 差值显示样式与光标时间读数一致,文案为「Δt <时间差值>」,单位复合化:
>= 60s 一路整合到 h/min/s(3662s -> 「1h 1min 2s」);1~60s 显示整秒,
非整数时补 ms(5.06s -> 「5s 60ms」,5s -> 「5s」);< 1s 逐级降到
ms/us/ns/ps 且只降一级,顶级单位为 ps 时不再降级并保留小数(「5.123 ps」)。
- 双击 Δt 进入编辑时数值量级始终为秒(例如显示 1min 时编辑框为 60.0),
修正进入高级单位后(如 1.5min)编辑框只显示 1.5 的问题。
验证(使用 TestData/VERY_BIG_DATA.CSV,1.77GB / 5 信号):
- 悬停提示停留在首次出现位置,网格内继续移动鼠标不再跟随。
- 选区放大提示:开启/按下/拖动/松开四个阶段的文案与淡出均符合预期。
- 工具栏文案 光标 / 光标x1 / 光标x2 正常;两光标样式与颜色完全一致。
- 5 条信号合并网格时取值标签全部完整可见,无覆盖。
- 光标形态探测:时间读数标签与 Δt 标签悬停 HAND、拖拽 SIZEALL;
直接在光标线上拖拽仍为 SIZEWE。
- Δt 分别输入 3662 / 5.06 / 5.123e-12 秒得到「Δt 1h 1min 2s」/
「Δt 5s 60ms」/「Δt 5.11591 ps」;整数秒显示「Δt 5s」。
- 双击 Δt(显示 15s 457.214ms)编辑框内容为 15.4572(秒)。
- Δt 标签拖拽 (-320px):光标 64.4051/79.8623 -> 30.743/46.2002,差值保持 15.4572。
- 两光标靠近时时间读数标签上下叠放、Δt 标签落位正确,取值标签不重叠。
- [1].CSV 回归正常;make clean && make all 无警告无错误。
|
2026-10-08 21:05:02 +08:00 |
|
DeepSeek V4.1 Flash
|
eaf5b9cadf
|
feat(ui): 双光标样式统一与配色、光标滞留视野外、差值标签与拖拽、选区放大交互与提示
1) 光标 2 的样式与光标 1 完全一致,并改用更鲜艳的颜色
- 原先光标 2 用朝上的三角把手,观感突兀;现两条光标统一为同款朝下三角
- 主题新增 cursorAlt 并改用 Solarized 洋红 #D33682(原青色偏灰),与光标 1 的
橙色 #CB4B16 同属暖色且更醒目,靠颜色而非形状区分
2) 光标允许滞留在网格可视区域之外(不再被强行夹回视野)
- 删除"视图变化后夹取光标"的逻辑(时间轴选区放大、适应视图、按网格时间轴展开、
平移时都不再移动光标);仅在拖拽光标本身时才使用 ClampCursorToView(which)
- 新增 CursorDisplayX(which):光标在视野外时把它的显示位置"钉"在最近的网格边缘,
取值标注与时间读数因此始终可见;数据点改为边缘三角指示(指向光标实际方向)
- 命中测试改用"显示横坐标",因此被钉在边缘的光标仍可抓住拖回
3) 光标读数增加细描边,避免与背景/曲线颜色过于接近
- 新增 DrawLabelOutline():按文字颜色取反色做 1px 半透明描边,
网格内的取值胶囊、光标时间读数、差值标签统一使用
4) 双光标差值显示(时间轴上方居中,自适应单位,可拖拽、可编辑)
- 新增 FormatDuration()/FormatDurationNumber()/ChosenDurationUnit():
在 h / min / s / ms / us / ns / ps 之间自动选择单位(数值落在 [1,1000))
- 差值标签位于两条时间读数的中点,样式与时间读数一致
- 双击进入编辑:输入值采用**当前显示单位**;确认后**前方(时间较小)光标不动**,
后方光标移动到"前方 + 输入差值"
- 标签支持左右拖拽(新增 PlotDragMode::CURSOR_SPAN_MOVE):两条光标整体平移、间隔不变
5) 双光标内容重叠时的层次与差值标签位置
- 新增 m_activeCursor:最后操作过(拖拽/单击/编辑)的光标其内容绘制在上层,
两条光标的竖线、取值胶囊、时间读数都按此顺序绘制
- 差值标签改为按**两条时间读数的实际净空**判断:放不下时自动落到主时间轴内部
(原先按光标线间距判断,光标被钉到边缘时会用差值标签盖住时间读数)
6) 选区放大的光标形状与颜色
- 未开始框选时不再改变鼠标形状(保持箭头);按下但未拖动时为十字 IDC_CROSS;
确定为时间轴选区后为左右箭头、Y 轴选区后为上下箭头
- 两种方向的选区统一使用强调色(原先 Y 轴选区用警示红,观感不一致)
- 新增 Application::UpdateDragCursor():Windows 在鼠标捕获期间不派发 WM_SETCURSOR,
必须在 WM_MOUSEMOVE / WM_LBUTTONDOWN 后主动刷新光标形状,否则形状不会变化
7) 提示浮层加大并支持"停留后淡出",光标模式不再提示
- 提示字号由 uiSmall 改为 ui,胶囊 30px 高、内边距更大
- 新增停留 1300ms + 淡出 500ms 的时间控制;宿主用 WM_TIMER(33ms) 驱动重绘,
淡出结束自动 KillTimer(文字走 GDI 不支持 alpha,改为向胶囊底色混色实现淡出)
- 「光标」三段式切换不再显示任何提示
验证([1].CSV 11 信号,窗口 1725x996,125% DPI):
- 双光标:橙 0.63 / 洋红 0.7812,同款把手;底部时间读数 + 居中差值 "151.2 ms"
- 放大到不含光标的区间:光标不移动,取值以边缘三角 + 胶囊贴边显示
- 拖拽差值标签:两光标从 0.63/0.7812 整体平移到 0.424202/0.575402,差值仍为 151.2 ms
- 差值编辑:输入 300(显示单位为 ms)→ 前方光标保持 0.63,后方移动到 0.93
- 重叠层次:差值设为 0 时洋红(活动)在上;单击光标线后橙色(活动)在上
- 光标形状:未框选 ARROW / 按下 CROSS / 横向 SIZEWE / 纵向 SIZENS(cursor.ps1 实测)
- 提示浮层:出现后约 1.3s 开始淡出、约 1.8s 消失;右键放弃选区后视图不变且模式保持选中
- 空闲 CPU 0.00%;make clean; make all 无警告无错误
|
2026-10-08 19:37:26 +08:00 |
|
DeepSeek V4.1 Flash
|
388d3b6441
|
feat(ui): 修复光标放大后丢失、选区放大合并与右键放弃、双光标与数据点取值标注
1) 打开「选区 Y 轴自适应」时立即自适应一次
- 之前打开开关(单个网格的菜单项或全局项/工具栏按钮)不会真的改变量程,
只有当用户再次做时间轴选区放大时才生效,观感上就是"点了没反应"
- ToggleLaneAutoFitToSelection / SetAllLanesAutoFitToSelection(enable, applyNow=true)
在打开时按当前视图立刻执行一次 AutoRangeLaneToView
- 新增 ApplyAutoFitToSelectionNow / ApplyAllAutoFitToSelectionNow
2) 「按网格时间轴展开」同时对该网格做一次 Y 轴自适应
- FitTimeToLane 在把时间轴展开到本网格信号范围后调用 AutoRangeLaneToView,
避免出现"时间对了但幅值区间不合适"的波形
3) 修复时间光标在大幅放大后丢失、无法拖动的问题
- 根因:缩放/平移改变 ViewMin/ViewMax 后,光标时间可能落到新视野之外,
PaintCursor 直接 return → 光标消失,用户报告为"放大到 10ms 一格后拖动光标会直接丢失"
- 新增 ClampCursorToView(),在 ApplyTimeSelection / FitAll / FitTimeToLane /
平移(PAN) 后把两条光标夹回可见区间;CURSOR_MOVE 也把目标时间夹在 [ViewMin, ViewMax]
- IsOnCursorLine 改为输出命中的光标序号,为双光标拖动做准备
4) 工具栏「时间轴选区」+「Y 轴选区」合并为「选区放大」,并支持右键放弃选区
- 单一 toggle(ToolbarAction::ZOOM_SELECT / PlotZoomMode::SELECT);
按下后按首次明显位移方向决定轴向:横向=时间轴选区,纵向=该网格 Y 轴选区,
轴向固定不变,轴向未定时不画选区(避免闪烁)
- 框选过程中按右键 = 放弃当前选区并显示提示浮层;与 Esc 不同,**不退出**选区放大模式
- 为此 WM_RBUTTONUP 在左键仍按下时不 ReleaseCapture / 不清 m_activeTarget,
否则松左键收不到 OnLButtonUp,m_dragMode 会永远停在 RUBBER_SELECT
- 新增 PlotView 内的提示浮层(m_hintText + PaintHint):切换模式/放弃选区时显示一行说明,
在网格内再次移动鼠标自动清除,无需定时器
- Esc 语义保持原样:放弃拖拽 + 退出选区放大模式
5) 光标功能改为三态:常态 → 单光标 → 双光标 → 常态
- TabConfig 用 PlotCursorMode{NONE,SINGLE,DOUBLE} + CursorTime/CursorTimeAlt 两个时间;
CursorEnabled() 变成只读派生;ToggleCursor 删除,改为 CycleCursorMode()
- 单 → 双时第二条光标落在第一条附近(+12% 视图跨度,越界反向)并保证在可见范围内
- 两条光标颜色区分且同族:光标 1 = Solarized 橙 #CB4B16(theme.cursor),
光标 2 = 青 #2AA198(新增 theme.cursorAlt),光标 2 的顶部把手画成朝上的三角
- 时间读数从绘图区顶部移到**底部**,单/双光标都始终显示(不必悬停才可见)
6) 取消原有的光标数值读数框,改为直接在数据点位置标注取值
- 删除 PaintLaneReadout/PaintLaneReadouts(网格右上角的读数框)
- PaintCursor 在光标与每条可见信号曲线的交点处绘制信号色圆角胶囊(底色=信号色,
文字按 IsDarkColor 自动取深/浅色),一条信号一个标注,颜色与信号一一对应;
右侧空间不足时自动标到左侧
- 双光标时以时间较小者为左;**右侧光标**显示"当前值 , ±增量"(增量 = 右 − 左),
增量为负时用负号前缀,避免出现 "±-" 双符号
验证([1].CSV 11 信号 / VERY_BIG_DATA 1.77GB,窗口 1725x996,125% DPI):
- 三态循环:点 1 次出现单光标、2 次双光标、3 次回到无光标
- 双光标读数:左"426.316 / 427.749",右"538.583 , ±112.267 / 513.726 , ±85.9769"
- 时间读数在底部显示(橙 0.63 / 青 0.7812);第二条光标出现在第一条右侧同一视野内
- 超大文件:放大两次后开启光标仍然可见,拖动从 68.2343 变为 68.1911(原先直接消失)
- 「Y 轴自适应」在放大后的视图中点击立即把量程收到可见区间(300~520)
- 「选区 Y 轴自适应」菜单项点击后立即生效并被勾选,全局项同步勾选
- 「按网格时间轴展开」把时间轴展开回全范围并重新自适应 Y 轴
- 选区放大:横向拖拽只放大时间轴、纵向拖拽只放大 Y 轴;右键放弃后视图不变、提示出现、
模式仍保持选中;Esc 则同时放弃并退出模式
- 回归:空闲 CPU 0.00%;make clean; make all 无警告无错误
|
2026-10-08 16:58:55 +08:00 |
|
DeepSeek V4.1 Flash
|
e3744f3eff
|
fix: 统一输入框编辑行为、外观跨视图同步并优化标尺与网格可读性
输入框(TextEdit,全组件共用):
- 修复退格一次删除两个字符:WM_CHAR 与 WM_KEYDOWN 重复处理了退格/删除,
现统一由 OnEditKey 处理,WM_CHAR 忽略全部控制字符。
- 进入编辑(整段选中)后按右键:取消全选并把插入符移到文本最右侧。
- 存在选区时松开 Shift 再按左右方向键,插入符收拢到选区的左/右端。
- 修复整段选中后按 Home/End 不收拢选区的问题。
标签页:
- 按加粗字体测量宽度,避免激活页长名称被提前省略(预览过短)。
- 重命名过程中按正在输入的文本测量并加宽上限(320px),标签随输入增长,
解决长内容绘制错误;输入溢出时整体等比收缩,保证「+」始终可见。
信号显示外观跨标签页同步:
- 外观(颜色/自定义色记忆/透明度/线宽/样式)从 TabConfig 上移到 DataSet
的 SignalData,成为信号的全局属性;可见性仍按标签页独立保存。
- 因此任一视图中修改某信号的颜色/线宽/透明度/样式,其它视图自动一致。
工具栏:
- 移除「全选信号」按钮;「清空勾选」改为「清空网格」,
「拆分信号网格」改为「拆分网格」。
自适应:
- 无可见信号(未勾选/全部取消/清空网格)时复位 ViewInitialized,
下次勾选第一个信号会重新自适应,而不是停留在旧视图范围。
绘图区标尺与网格:
- 幅值刻度密度按网格高度自适应(3-8 档),各网格刻度数量一致;
网格较矮时同步收紧标签行距,提高可读密度。
- 网格线与五等分估读线加深,与网格边界(蓝灰)保持明显区分。
- 时间轴列名补上单位,显示为 time (s)。
|
2026-09-30 15:16:53 +08:00 |
|
DeepSeek V4.1 Flash
|
132b305544
|
feat: 搭建 Just DataInspector 波形数据查看器基础功能
基于 Win32 API + GDI+ 从零实现仿真数据检查器,用于替代 Simulink.sdi.view 查看带时间轴的 CSV 数据。
- 新增 Utilities 层:UTF-8/宽字符与数值格式化工具、CSV 解析器(自动识别分隔符与引号)、
信号数据集模型(时间轴识别、信号名解析、取值采样)、Solarised Light 主题色板与绘图基础工具
- 新增 Toolbar 组件:打开 CSV、适应窗口、适应时间、放大、缩小、合并网格、每信号一格
- 新增 SignalPanel 组件:信号列表(可见性开关、颜色标识、所属网格标记)、样式编辑区
(颜色、线宽、线段/散点/点线/阶梯显示方式、所属网格),支持右键上下文菜单与滚轮滚动
- 新增 PlotView 组件:多网格波形绘制、自适应时间轴与幅值轴、网格线、信号图例、
时间光标与实时数值读数、纵向滚动条
- 新增 Application 组件:DPI 感知(Per-Monitor V2)、双缓冲绘制、区域布局与分隔条拖拽、
鼠标与键盘消息分发、文件拖放、状态栏提示
- 交互能力:滚轮缩放、Shift+滚轮平移、Ctrl+滚轮缩放幅值、拖拽平移、幅值轴纵向缩放、
右键框选缩放、单击固定/取消时间光标、双击自适应、方向键平移与滚动
- 补齐 Makefile 的源文件与头文件索引,并新增 gdiplus、comdlg32 链接库
|
2026-09-29 15:05:29 +08:00 |
|