# ConsoleActionRouter **命名空间**: `XCEngine::Editor::Actions` **类型**: `header-helper` **源文件**: `editor/src/Actions/ConsoleActionRouter.h` **描述**: 为 Console 面板提供工具栏动作和日志列表绘制逻辑。 ## 概述 `ConsoleActionRouter` 目前主要负责两件事: - `DrawConsoleToolbarActions` 绘制清空按钮和 Info / Warn / Error 过滤切换 - `DrawConsoleLogRows` 读取 `EditorConsoleSink` 中的日志,并按过滤条件输出到面板 `ConsolePanel.cpp` 只负责搭窗口和滚动区域,真正的交互逻辑由这层统一承接。这样 Console 面板本身会保持很薄,不会把过滤策略、日志格式化和按钮语义都堆在一个类里。 ## 当前实现 - 数据源固定为 [`EditorConsoleSink`](../../Core/EditorConsoleSink/EditorConsoleSink.md) - 过滤状态由 [`ConsoleFilterState`](../../UI/ConsoleFilterState/ConsoleFilterState.md) 持有 - 每条日志通过 [`BuildConsoleLogText`](../../UI/ConsoleLogFormatter/ConsoleLogFormatter.md) 生成展示字符串 - 点击日志行时会把完整字符串复制到剪贴板 ## 设计说明 这层拆分的价值在于把“日志存储”和“日志呈现”分开: - `EditorConsoleSink` 关注线程安全和日志缓存 - `ConsoleActionRouter` 关注工具栏与列表交互 - `UI` 辅助函数负责外观和文本格式 这种分层比直接在 `ConsolePanel::Render` 中处理全部逻辑更容易维护,也更接近商业级编辑器里常见的 presenter / controller 风格。 ## 当前限制 - 当前过滤粒度只有三档:信息、警告、错误 - 没有搜索、分类树、时间戳列或堆栈追踪展开 - `GetLogs()` 会复制整个日志数组,日志量继续增大后可能需要增量视图或虚拟列表 ## 相关文档 - [Actions](../Actions.md) - [ConsolePanel](../../panels/ConsolePanel/ConsolePanel.md) - [EditorConsoleSink](../../Core/EditorConsoleSink/EditorConsoleSink.md) - [ConsoleFilterState](../../UI/ConsoleFilterState/ConsoleFilterState.md)