Skip to main content

Crate ek_ui

Crate ek_ui 

Source
Expand description

§ek-ui —— ek 生态常驻主界面(DV-1:egui/eframe 0.33;方案 docs/ek-ui-station-plan.md)。

定位(UI 即插件):常驻窗口不是宿主外壳,而是一个普通插件(ui)—— 插件面走总线收 eLog/ePlugUp/ePlugDown/eTimer 维护共享快照(UiShared), 窗口面(eframe App)只读快照渲染。两边经 Arc<UiShared> 相连,零自制通道。

分层

  • state:共享观测状态(环形日志 + 服务快照 + 行情库 + 交易帧 + revision);
  • plugin:UiPlugin(总线面;eTimer 1s 节流拉 svctl.list + oms 全量查询组快照);
  • render:render_body(唯一渲染入口,真实 App 与 kittest 共用 —— L2);
  • runtime:ui_kinds(default_kinds + ui 工厂)/ spawn_host_watcher (宿主观察线程;窗口关闭置 stop → close_all)/ run_station_ui(进程主入口, S1c 起带 --ready-file 标记位);
  • 纸面网关 0.2.9 曾住独立网关包 ek-paper(BD-UI-36);0.2.10 起【退场】 (BD-UI-38 用户裁定:ctp/SimNow 两套前置满足需求,本包不再引用);
  • pick/launch/launcher/launcher_ui(S1c 启动器:清单写读、spawn+boot-wait、 --pick 选窗与控制器)。

配置纪律(2026-10-17 用户定盘):ek-ui 零配置 + 宿主零配置 —— 不读任何 配置文件,界面本身无设置;插件结构只由 --from 清单或 demo 缺省决定(结构面 归 station 工厂表 + 清单)。需配置的插件(唯一 = ek-ctp 虚拟账号)其配置面 归插件自身,激活时在插件内完成;setting/ 目录已整树清理,插件配置自持 (原 S3 配置面 cfg 模块已整块撤销,见 DESIGN BD-UI-19)。

自动化验收(kittest 官方工具,egui 0.33 同版):L3 全走 Harness::builder().build(|ctx| render_body(ctx, &shared))(ctx 级, 面板组合在 render_body 内,BD-UI-29)+ AccessKit 节点断言/点击; 静态布局首帧快照入库;人工核查 0 项。

§版本边界

0.1.0(S1a→S5 全部落地):观测页/日志页/启动器/svctl 操作页/行情面/K 线/ 交易监控全接入;配置面撤销(零配置口径);发布面向 crates.io 装版互引 (ek-station 0.1.2)。

bin ek-ui 参数:(无参) demo 窗(dm/oms/ui)/ --pick 选窗启动 / --from <清单> --ready-file <标记>(launcher 协议)/ 未知参数 usage exit 2。

Re-exports§

pub use fonts::CJK_FONT_NAME;
pub use fonts::apply_cjk_fonts;
pub use launch::LaunchFail;
pub use launch::spawn_detached;
pub use launch::wait_ready;
pub use launcher::run_pick_launcher;
pub use launcher_ui::pick_kinds;
pub use launcher_ui::render_pick;
pub use plugin::UiPlugin;
pub use render::render_body;
pub use runtime::run_station_ui;
pub use runtime::spawn_host_watcher;
pub use runtime::ui_kinds;
pub use state::BusSnap;
pub use state::CtpForm;
pub use state::LogRing;
pub use state::UiShared;

Modules§

appconfig
无界面一次性写档共用面(0.9.0;BD-APP-2/4):ekapp add-account CLI 与 等效判据(tests/ui_app_contract.rs)共用同一构造函数 —— 判据钉的 就是「CLI 写出的段,喂给真受理方法 apply_config 必被全采纳」。
faces
faces —— 插件界面挂载表(「插件即 App」波 P4)。
fonts
CJK 字体回退(BD-UI-26):epaint 0.33 缺省字体组(Hack / Ubuntu-Light / NotoEmoji-Regular / emoji-icon-font)没有任何中文字形 —— 界面中文 直接渲染成豆腐块/乱码(2026-10-18 用户实窗报障)。
format
0.3.1 Wave D(BD-UI-49):展示面数字与时间格式的唯一口径。
launch
spawn + 就绪等待(launcher 的子进程协议核心)。
launcher
--pick 主流程(launcher 控制器):选窗 → 写清单 → spawn 子进程(ek-ui --from <清单> --ready-file <标记>)→ 就绪等待 → 成功放手 / 失败聚合退出。
launcher_ui
pick 窗体:纯渲染入口(L2/kittest 目标)+ PickApp(eframe App 状态机)。
pick
pick 地面(BD-UI-15):语义统一在 ek_station::pickfile(装版引用, ek-station 0.1.1 起)。本模块只保留生态惯用别名,launcher/bin/测试共此一处, 不再存在双实现。
plugin
UiPlugin —— 总线面:eLog 入环形日志、ePlugUp/Down 记事件 + rev、 eBar./eBarUpdate. 记行情库(K线窗数据面)、eTick. 记 tick 库(v4 行情带 唯一源,S7 上屏地面)、eContract./eContractFinish 记合约表, 0.5 M1 起 eOrder./eTrade./ePosition./eAccount. 四条推送线入交易账本 (基线 BaseMonitor 同形:后台只 put,界面自己 process_event)。 eTimer(1s 宿主自带)那一拍只做三件事:管制面快照(svctl.list,每 LIST_POLL_TICKS 拍)、待播种队列触发的状态播种(seed_status:网关刚上线/ 刚重连时一次性问 {gw}.status,常态零轮询 —— 0.7.0 第3刀退役了 0.5 时代的 摊平状态轮询,登录态读数吃 eStatus. 推送)、被标记时才问一次的装配显形 (oms.pipeline_status)。这一拍不再问交易数据, 也不再辞行操作指令 —— 指令由命令线程执行(0.5 M5,点击即发)。
pluginwin
pluginwin —— 「插件即 App」挂载表 + 逐插件配置窗口(ek-ui 0.9.2)。
render
唯一渲染入口(L2):真实 eframe App 与 kittest 建构走同一个 render_body。
runtime
运行时装配:工厂表(ui 工厂注册)、宿主观察线程(关窗→close_all)、 进程主入口(eframe 主线程 + 宿主观察线程)。
splitters
薄 QSplitter(0.4.1,BD-UI-54):拆掉 egui_dock 后,数据区 2×2 的两刀分栏。
state
共享观测状态:UiPlugin(总线面)写、render_body(窗口面)读。
toast
0.3.2(Wave E,BD-UI-50)告警 toast —— 照 Python trader/ui/alert_toast.py。
tokens
设计令牌层(0.2.30,BD-UI-46;0.8.0 配色双档,BD-UI-61)。
ui_ext
UiExt(0.2.30,BD-UI-47):语义排版助手。

Enums§

PickErr
清单读写错(业务枚举;launcher/text bin 面可读可断言)。

Functions§

read_pick
读清单(bin --from 面)。
write_pick_in
写清单到指定目录(launcher 面),返回文件路径。