fix: 修复图例改名不同步、细化网格标尺并支持标签页重排与曲线实色跟随拖拽
- 图例跟随重命名:绘图区图例文本改用信号当前显示名(Title), 左侧列表改名后网格图例立即同步。 - 标签页重排与改名:新增拖拽排序(按住标签左右拖动并显示插入指示条, 重排后保持原激活页)与双击内联改名,新增 MoveTab 正确处理激活下标。 修复改名后未重新布局导致标签页整条消失的问题(SetTabs 会重置标签矩形)。 双击判定改为自行按双击时间识别,不再依赖系统 WM_LBUTTONDBLCLK。 - 信号拖拽:虚影改用原信号颜色与线宽(不再画成虚线),保持原有线段/散点样式; 横向与纵向均自由跟随鼠标位移;拖拽首帧位移为零,虚影始终贴合在鼠标下方。 - 网格与标尺细化:时间轴与幅值轴期望刻度数提高,并在相邻主刻度之间 补绘 5 等分细线,便于目视估读。 - 图例定位与交互:图例移到各网格左上角,与标尺数字冲突时优先显示图例 (标尺数值主动避让);图例条目支持单击选中信号(与左侧列表联动、 样式区随之切换目标)与双击重命名信号。 - 网格划分:合并网格后新勾选的信号不再被并入那个唯一的合并网格, 而是自动切换为自定义划分并独占一个新网格。 - 工具栏:「每信号一格」改名为「拆分信号网格」。 - 清理:移除已无引用的 UiDrawArrowIcon 与 m_styleContentRect。
This commit is contained in:
1 parent
261b8ac07d
commit
4e295a2a7d
12 files changed
+800
-109
No files matched your search
@@ -37,7 +37,8 @@ namespace jdi
|
||||
NONE = 0, /**< 未处于输入状态。 */
|
||||
CURSOR_TIME, /**< 编辑时间光标位置。 */
|
||||
LANE_Y_MAX, /**< 编辑某网格的 Y 轴最大值。 */
|
||||
LANE_Y_MIN /**< 编辑某网格的 Y 轴最小值。 */
|
||||
LANE_Y_MIN, /**< 编辑某网格的 Y 轴最小值。 */
|
||||
SIGNAL_NAME /**< 编辑图例中某信号的显示名称。 */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -259,6 +260,15 @@ namespace jdi
|
||||
*/
|
||||
bool IsEditing() const { return m_editTarget != PlotEditTarget::NONE; }
|
||||
|
||||
/**
|
||||
* @brief 取出并清除待应用的信号重命名请求。
|
||||
* @param [OUT] ref 被重命名的信号引用。
|
||||
* @param [OUT] name 新的显示名称。
|
||||
* @return 存在待处理请求返回 true。
|
||||
* @note 绘图区只持有只读数据层,重命名需由宿主窗口落到 DataSet 上。
|
||||
*/
|
||||
bool TakePendingRename(SignalRef& ref, std::wstring& name);
|
||||
|
||||
/**
|
||||
* @brief 处理编辑态下的字符输入。
|
||||
* @param [IN] character 输入字符。
|
||||
@@ -616,17 +626,51 @@ namespace jdi
|
||||
|
||||
SignalRef m_hoverSignal; /**< 鼠标悬停命中的信号(曲线高亮)。 */
|
||||
SignalRef m_dragSignal; /**< 正在被拖拽的信号。 */
|
||||
int m_dragTargetLane = -1; /**< 拖拽信号时的目标网格下标。 */ int m_dragMouseY = 0; /**< 拖拽过程中鼠标的当前纵坐标(虚影跟随)。 */
|
||||
int m_dragTargetLane = -1; /**< 拖拽信号时的目标网格下标。 */
|
||||
int m_dragMouseX = 0; /**< 拖拽过程中鼠标的当前横坐标(虚影跟随)。 */
|
||||
int m_dragMouseY = 0; /**< 拖拽过程中鼠标的当前纵坐标(虚影跟随)。 */
|
||||
bool m_cursorHover = false; /**< 鼠标是否悬停在时间光标上。 */
|
||||
PlotEditTarget m_editTarget = PlotEditTarget::NONE; /**< 当前内联输入目标。 */
|
||||
bool m_editFresh = false; /**< 输入框是否处于“首次输入整体替换”状态。 */
|
||||
std::wstring m_editText; /**< 输入框当前文本。 */
|
||||
int m_editLane = -1; /**< 内联输入所作用的网格下标。 */
|
||||
SignalRef m_editSignal; /**< 内联输入所作用的信号(图例改名)。 */
|
||||
gd::RectF m_editFieldRect; /**< 本次编辑输入框的矩形(用于点外提交判定)。 */
|
||||
SignalRef m_pendingRenameRef; /**< 待宿主窗口应用的信号重命名引用。 */
|
||||
std::wstring m_pendingRenameName; /**< 待宿主窗口应用的信号新名称。 */
|
||||
bool m_pendingRename = false; /**< 是否存在待应用的重命名请求。 */
|
||||
|
||||
int m_hoverLane = -1; /**< 当前悬停网格下标。 */
|
||||
int m_mouseX = 0; /**< 最近一次鼠标横坐标(用于悬停提示定位)。 */
|
||||
int m_mouseY = 0; /**< 最近一次鼠标纵坐标(用于悬停提示定位)。 */
|
||||
std::vector<LaneVisual> m_lanes; /**< 当前网格绘制信息集合。 */
|
||||
|
||||
/**
|
||||
* @brief 图例条目的命中信息(用于点选与双击改名)。
|
||||
*/
|
||||
struct LegendHit
|
||||
{
|
||||
SignalRef ref; /**< 对应信号。 */
|
||||
gd::RectF rect; /**< 条目矩形(已含色块与文本)。 */
|
||||
};
|
||||
|
||||
std::vector<LegendHit> m_legendHits; /**< 最近一次绘制时记录的图例条目矩形。 */
|
||||
|
||||
/**
|
||||
* @brief 查询坐标命中的图例条目。
|
||||
* @param [IN] x 客户区横坐标。
|
||||
* @param [IN] y 客户区纵坐标。
|
||||
* @return 命中的信号引用,未命中返回无效引用。
|
||||
*/
|
||||
SignalRef LegendAtPoint(int x, int y) const;
|
||||
|
||||
/**
|
||||
* @brief 计算指定网格图例带所占据的矩形(用于让标尺数字避让)。
|
||||
* @param [IN] laneIndex 网格下标。
|
||||
* @param [IN] lane 网格绘制信息。
|
||||
* @return 图例带矩形,无可见信号时返回空矩形。
|
||||
*/
|
||||
gd::RectF LegendBandRect(int laneIndex, const LaneVisual& lane) const;
|
||||
};
|
||||
|
||||
} // namespace jdi
|
||||
|
||||
Reference in new issue
Block a user