目录规范化(Inc/Src)+「自由标记」第六轮交互调整
1) 目录规范化:所有 .hpp 只放 Inc,Src 只放 .cpp
- 4 个 *Internal.hpp 从 Src 迁到 Inc(DataModel/Application/PlotView/SignalPanel)
- Makefile 固化该约定(注释必须单独成行:写在同一行会把 CXX_INCLUDES_PATHS 整条注释掉)
- include 全是扁平形式,搬家无需改任何 include
2) 常规模式 = 普通鼠标(未开启「自由标记点选取」)
- ProbeFreeMarker 早退:不预览、不画纵向光标、单击不固定
- 补 if (!hitCurve) continue:否则整列光标下 probe.ref 恒有效,任意位置都能固定
- 固定点仍恒吸附到真实采样时刻;「已吸附」圆环只在稀疏判据成立时画
3) 两个显示开关:按钮改名「自由标记点选取」,其下新增「显示增量 | 显示枚举文本」
- 默认关闭,只影响已固定点的胶囊文本;预览胶囊恒为「值 = 枚举」
- 开关行计入面板高度与内容区高度
4) 面板六列:新增恒存在的「序号」列(组内 1 起)
- 枚举列存在时,无枚举/对不上任何枚举项显示 N/A
- 列与列之间画竖线;悬停某行时其它固定点封顶 50% 不透明度,移出恢复
- 删除固定点 ✕ 的悬停浮动提示(PaintFreeMarkerTooltip 实现与声明全部移除)
- 开启选取模式的网格上,信号悬停提示只显示信号名
5) 缓存键补齐
- FreeMarkerContents 混入枚举表指纹(旧键会让加上枚举表后仍显示 N/A)
- PanelSlotKey 混入两个新按钮矩形与开关状态
6) 注释/文档
- 修正 FreeMarkerProbe、SetLaneFreeMarkerCursor、标记透明度等处的过期说明
- 空态提示按是否开启选取模式区分文案
验证(全离屏,未占用鼠标/键盘/屏幕)
- 新增 .preflight/mark5check 52/52
- 回归:markcheck 67/67、mark4check 40/40、fixcheck 37/37、round3check 31/31、
round4check 34/34、round5check 5/5、editcheck 20/20、convcheck 18/18、diag 19/19
- check 136/137(唯一失败项为既有不稳定项,drift=15818 与改动前逐位相同)
- make release / make debug 零警告;Release 产物 TargetCheck.exe 857,600 字节
This commit is contained in:
1 parent
79eebc281e
commit
affb9cc340
12 files changed
+561
-187
No files matched your search
@@ -966,12 +966,22 @@ namespace jdi
|
||||
// 滚动条与「标记透明度」滑块则是拖动类控件(上下 / 左右箭头)。
|
||||
if (static_cast<EdgePanelKind>(panelKind) == EdgePanelKind::MARK)
|
||||
{
|
||||
// 底部「光标选取模式」切换按钮。
|
||||
// 底部「自由标记点选取」切换按钮与两个显示开关。
|
||||
if (layout.button.Width > 0.0f &&
|
||||
UiPointInRect(layout.button, static_cast<float>(x), static_cast<float>(y)))
|
||||
{
|
||||
return LoadCursorW(nullptr, IDC_HAND);
|
||||
}
|
||||
if (layout.showDelta.Width > 0.0f &&
|
||||
UiPointInRect(layout.showDelta, static_cast<float>(x), static_cast<float>(y)))
|
||||
{
|
||||
return LoadCursorW(nullptr, IDC_HAND);
|
||||
}
|
||||
if (layout.showEnum.Width > 0.0f &&
|
||||
UiPointInRect(layout.showEnum, static_cast<float>(x), static_cast<float>(y)))
|
||||
{
|
||||
return LoadCursorW(nullptr, IDC_HAND);
|
||||
}
|
||||
if (layout.opacityTrack.Width > 0.0f &&
|
||||
WeakPeakSliderHit(layout.opacityTrack, m_scale, static_cast<float>(x),
|
||||
static_cast<float>(y)))
|
||||
@@ -2285,13 +2295,27 @@ namespace jdi
|
||||
if (kind == EdgePanelKind::MARK && m_tab != nullptr)
|
||||
{
|
||||
Lane& tabLane = m_tab->Lanes()[static_cast<std::size_t>(index)];
|
||||
// 底部切换按钮「光标选取模式」(默认关闭)。
|
||||
// 底部切换按钮「自由标记点选取」(默认关闭)。
|
||||
if (layout.button.Width > 0.0f && UiPointInRect(layout.button, fx, fy))
|
||||
{
|
||||
ToggleLaneFreeMarkerCursor(index);
|
||||
m_dragMode = PlotDragMode::NONE;
|
||||
return true;
|
||||
}
|
||||
// 「显示增量」开关(只影响已固定点的显示;默认关闭)。
|
||||
if (layout.showDelta.Width > 0.0f && UiPointInRect(layout.showDelta, fx, fy))
|
||||
{
|
||||
SetLaneFreeMarkerShowDelta(index, !tabLane.freeMarkerShowDelta);
|
||||
m_dragMode = PlotDragMode::NONE;
|
||||
return true;
|
||||
}
|
||||
// 「显示枚举文本」开关(只影响已固定点的显示;默认关闭)。
|
||||
if (layout.showEnum.Width > 0.0f && UiPointInRect(layout.showEnum, fx, fy))
|
||||
{
|
||||
SetLaneFreeMarkerShowEnum(index, !tabLane.freeMarkerShowEnum);
|
||||
m_dragMode = PlotDragMode::NONE;
|
||||
return true;
|
||||
}
|
||||
// 「标记透明度」滑块:按下即写入该处数值并进入拖动。
|
||||
if (layout.opacityTrack.Width > 0.0f &&
|
||||
WeakPeakSliderHit(layout.opacityTrack, m_scale, fx, fy))
|
||||
@@ -2424,17 +2448,18 @@ namespace jdi
|
||||
}
|
||||
}
|
||||
|
||||
// (2) 在开启「自由标记」的网格内按下:单击固定数据点、拖动仍是原有语义
|
||||
// (2) 在开启「自由标记点选取」的网格内按下:单击固定数据点、拖动仍是原有语义
|
||||
// (常规模式 = 平移;选区放大模式 = 框选)。
|
||||
// ⚠️ 用户明确要求:「仅单击时」才算固定数据点 —— 因此这里**只登记意图**,
|
||||
// 真正固定发生在 `OnLButtonUp` 且整段操作没有发生过拖动。
|
||||
// ⚠️ 默认(非光标模式)下 `ProbeFreeMarker` 只在鼠标贴近曲线时有效 ⇒
|
||||
// 鼠标下方没有信号时按下就是普通的平移/框选(用户明确要求)。
|
||||
// ⚠️⚠️ 只有「自由标记点选取」已开启才参与(用户 2026-10-23 要求):
|
||||
// 未开启时鼠标是普通鼠标,按下/拖动/单击完全是常规语义。
|
||||
if (!freeOverPanel)
|
||||
{
|
||||
const int freeLane = LaneAtY(y);
|
||||
if (freeLane >= 0 && freeLane < static_cast<int>(m_tab ? m_tab->Lanes().size() : 0) &&
|
||||
m_tab->Lanes()[static_cast<std::size_t>(freeLane)].freeMarker)
|
||||
m_tab->Lanes()[static_cast<std::size_t>(freeLane)].freeMarker &&
|
||||
m_tab->Lanes()[static_cast<std::size_t>(freeLane)].freeMarkerCursor)
|
||||
{
|
||||
const FreeMarkerProbe probe = ProbeFreeMarker(x, y);
|
||||
if (probe.valid && probe.ref.IsValid())
|
||||
|
||||
Reference in new issue
Block a user