pub struct UiShared { /* private fields */ }Expand description
插件面板与宿主观察线程共用的观测状态。
Implementations§
Sourcepub fn update_tick(&self, t: &TickData)
pub fn update_tick(&self, t: &TickData)
落一条 tick(eTick. 裸键上屏;逐 symbol 覆盖)。
Sourcepub fn tick_count(&self) -> usize
pub fn tick_count(&self) -> usize
tick 库格数。
Sourcepub fn order_form(&self) -> OrderForm
pub fn order_form(&self) -> OrderForm
下单表单只读快照。
Sourcepub fn set_order_form(&self, f: OrderForm)
pub fn set_order_form(&self, f: OrderForm)
下单表单写(渲染侧每控件改动即写)。
Sourcepub fn selected_exchange(&self) -> String
pub fn selected_exchange(&self) -> String
选中交易所(行情带当前 tab;不在六所内的取值由本口夹回首所 —— 空/脏值 都落到 SHFE,调用方永远拿到一个可用的 tab 名;行情行单击只带入下单面板, tab 归 tab 条管)。
Sourcepub fn set_selected_exchange(&self, s: impl Into<String>)
pub fn set_selected_exchange(&self, s: impl Into<String>)
选中交易所写。
Sourcepub fn topleft_tab(&self) -> TopLeftTab
pub fn topleft_tab(&self) -> TopLeftTab
左上组当前 tab。
Sourcepub fn set_topleft_tab(&self, t: TopLeftTab)
pub fn set_topleft_tab(&self, t: TopLeftTab)
左上组 tab 写。
Sourcepub fn bottomright_tab(&self) -> BottomRightTab
pub fn bottomright_tab(&self) -> BottomRightTab
右下组当前 tab。
Sourcepub fn set_bottomright_tab(&self, t: BottomRightTab)
pub fn set_bottomright_tab(&self, t: BottomRightTab)
右下组 tab 写。
Sourcepub fn data_split(&self) -> DataSplit
pub fn data_split(&self) -> DataSplit
数据区分刀份额读(渲染期)。
Sourcepub fn set_data_split(&self, s: DataSplit)
pub fn set_data_split(&self, s: DataSplit)
数据区分刀份额写(分隔条拖拽回调;写入前就地夹取到可用区,QSplitter minimumSize 语义 —— 调用方传多少都不出界)。
Sourcepub fn reset_layout(&self)
pub fn reset_layout(&self)
「恢复布局」:数据区分刀回 Python right_splitter 口径(两刀各半), 三个 tab 态回缺省。dock 时代的「整树替换」不再存在 —— 布局骨架本来就是 Python 等价的原生面板,没有树可换。
Sourcepub fn ops_window_open(&self) -> bool
pub fn ops_window_open(&self) -> bool
运维窗开合。
Sourcepub fn table_sort(&self, table: &str) -> Option<(usize, bool)>
pub fn table_sort(&self, table: &str) -> Option<(usize, bool)>
运维窗开合写。
某张表当前的排序键(None = 按数据源原序)。
Sourcepub fn toggle_table_sort(&self, table: &str, col: usize)
pub fn toggle_table_sort(&self, table: &str, col: usize)
表头点击:同列再点 = 翻向;异列 = 新列升序(与 Python QTableView 单击表头同口径)。
pub fn set_ops_window_open(&self, v: bool)
Sourcepub fn accounts_window_open(&self) -> bool
pub fn accounts_window_open(&self) -> bool
账户面板开合。
Sourcepub fn set_accounts_window_open(&self, v: bool)
pub fn set_accounts_window_open(&self, v: bool)
账户面板开合写。
Sourcepub fn account_edit_open(&self) -> bool
pub fn account_edit_open(&self) -> bool
账户配置弹窗开合(0.2.18 Commit B)。
Sourcepub fn editing_account(&self) -> Option<String>
pub fn editing_account(&self) -> Option<String>
当前弹窗模式:Some(派生名) = 编辑;None = 添加。
Sourcepub fn begin_account_edit(&self, gateway: Option<&str>) -> bool
pub fn begin_account_edit(&self, gateway: Option<&str>) -> bool
打开配置弹窗并载入草稿:Some(派生名) = 编辑模式(草稿 = 该账户留档);
None = 添加模式(草稿 = draft_from_existing(),凭据位空)。
账户不在清册 = false(不开一个编辑不存在账户的窗)。
Sourcepub fn end_account_edit(&self)
pub fn end_account_edit(&self)
关闭配置弹窗 = 放弃未保存(规划 Q24:绝不静默写入清册留档)。
Sourcepub fn end_account_edit_if_editing(&self, gateway: &str)
pub fn end_account_edit_if_editing(&self, gateway: &str)
摘除一行账户时的连带口径:若这行正被配置弹窗编辑,立即关弹窗放弃。
不这么做的话:弹窗是非 modal 的,用户可以在弹窗开着时点同一行的『移除』—— 编辑目标消失后弹窗会静默退化成「添加模式」(只读句消失、字段全部可编辑), 此时点『保存』会拿旧凭据建出一个新账户。这是执行核查抓到的坑。
Sourcepub fn edit_alias(&self) -> String
pub fn edit_alias(&self) -> String
弹窗别名草稿读。
Sourcepub fn set_edit_alias(&self, v: impl Into<String>)
pub fn set_edit_alias(&self, v: impl Into<String>)
弹窗别名草稿写。
Sourcepub fn edit_error(&self) -> Option<String>
pub fn edit_error(&self) -> Option<String>
弹窗拦截原因读(None = 无)。
Sourcepub fn set_edit_error(&self, e: Option<String>)
pub fn set_edit_error(&self, e: Option<String>)
弹窗拦截原因写(None = 清)。
Sourcepub fn account_edit_dirty(&self) -> bool
pub fn account_edit_dirty(&self) -> bool
弹窗草稿与该账户留档是否不一致(dirty;添加模式恒为“有内容待保存“)。
Sourcepub fn accounts(&self) -> Vec<AccountRow>
pub fn accounts(&self) -> Vec<AccountRow>
账户清单只读视图(注册序)。
Sourcepub fn account(&self, gateway: &str) -> Option<AccountRow>
pub fn account(&self, gateway: &str) -> Option<AccountRow>
单行账户查询。
Sourcepub fn add_account(&self, row: AccountRow) -> Result<(), String>
pub fn add_account(&self, row: AccountRow) -> Result<(), String>
新增一行账户(只写清册,不装配 —— 规划裁定「添加 ≠ 连接」)。
Err(原因) 三种:派生名已存在(同 broker+账号重复添加)、别名重名(规划 Q3)、
达账户软上限 MAX_ACCOUNTS。宿主侧还有第二道 Duplicate 守卫;界面侧先拦是为了
不建出一个“注定被拒“的请求。
Sourcepub fn can_add_account(&self) -> bool
pub fn can_add_account(&self) -> bool
是否还能添加账户。
Sourcepub fn set_account_alias(&self, gateway: &str, alias: &str) -> bool
pub fn set_account_alias(&self, gateway: &str, alias: &str) -> bool
改一行账户的别名(按 gateway 主键;不存在 = false)。
别名只用于显示与选择,不参与寻址(寻址恒用派生注册名,规划 Q3)。
别名须唯一(与 add_account 同一守卫):空别名 = 不设别名(合法);
与他人重名 = false(调用方须显形,不得静默改成重名别名)。
Sourcepub fn note_connect_sent(&self, gateway: &str)
pub fn note_connect_sent(&self, gateway: &str)
UiCmd::Connect 已入列 → 四态置「装配中」并清掉上一次的失败原因。
登录态一并退回 Unknown(0.2.19):新一轮装配开始时,上一轮的「在线/掉线」
不再是这一轮的事实 —— 留着会让用户在重连过程中看到「在线」。
Sourcepub fn note_connect_result(&self, gateway: &str, result: Result<(), String>)
pub fn note_connect_result(&self, gateway: &str, result: Result<(), String>)
装配结果回写:Ok(()) → 「实例已装配」;Err(原因) → 「装配失败」+ 原因留显形。
失败不回滚清册行(规划 U3 定盘:行留着,给『重试』;旧口径“必须先移除才能重试“作废)。
Sourcepub fn note_effective_product_classes(&self, gateway: &str, classes: &[String])
pub fn note_effective_product_classes(&self, gateway: &str, classes: &[String])
记录网关实际收录的产品类(ConfigureReply.product_classes 回带,规划 U9)。
只存不改用户勾选:勾选是意图,这一栏是事实,两者并排显示。
Sourcepub fn note_chain(&self, gateway: &str, note: &str)
pub fn note_chain(&self, gateway: &str, note: &str)
链状态行落账(0.5.0,用户定):note = [链] 前缀之后的正文,账户表「阶段」列显示它。
只认 ek-ctp 推的状态行(调用点在 plugin.rs 的 eLog 分支按前缀筛),普通日志不动这一栏。
没有对应账户行 = 什么都不做(网关还没进清册,状态行先到是正常时序)。
Sourcepub fn status_thresholds(&self) -> (u32, i64)
pub fn status_thresholds(&self) -> (u32, i64)
当前生效的「查询断供」阈值:(连续被拒次数, 资金回报超时秒)。
Sourcepub fn set_status_thresholds(&self, reject_limit: u32, stale_secs: i64)
pub fn set_status_thresholds(&self, reject_limit: u32, stale_secs: i64)
覆盖阈值(测试夹具把两判据收紧到「1 次 / 0 秒」,才好在没有真柜台的用例里显形)。
Sourcepub fn list_poll_due(&self) -> bool
pub fn list_poll_due(&self) -> bool
管制面快照的轮询节拍:eTimer 每拍调一次。
三个条件任一为真就问:① 被标记(插件上/下线、svctl 起停);② 第一拍(界面刚
起来不该空着等 4 秒);③ 每 LIST_POLL_TICKS 拍一次。
Sourcepub fn request_list_refresh(&self)
pub fn request_list_refresh(&self)
置「下一拍就重问管制面」(插件上下线、svctl 起停回执之后)。
Sourcepub fn request_trade_reseed(&self)
pub fn request_trade_reseed(&self)
置「重播种一次四张表」(网关或 oms 上线之后)。消费方 = 命令线程。
Sourcepub fn take_trade_reseed(&self) -> bool
pub fn take_trade_reseed(&self) -> bool
取走「重播种」标记(消费性,不是一档状态)。
Sourcepub fn status_batch(&self, present: &[String]) -> Vec<String>
pub fn status_batch(&self, present: &[String]) -> Vec<String>
这一拍该问哪几个账户的 {gw}.status(0.5 M3 摊平)。
入参 = 当前「已装配且在场」的网关名;返回不超过 STATUS_ASKS_PER_TICK 个,
从游标起环形取 —— 8 个账户 4 拍走完一轮,单拍 ask 上限恒定。
Sourcepub fn request_status_seed(&self, gateway: &str)
pub fn request_status_seed(&self, gateway: &str)
记「该给这个网关播种一次状态」(0.7.0 第3刀;按名去重:同一网关只排一次)。
Sourcepub fn take_status_seeds(&self) -> Vec<String>
pub fn take_status_seeds(&self) -> Vec<String>
取走全部待播种网关(排空;消费方是 eTimer 那一拍的 seed_status)。
Sourcepub fn note_status_event(&self, ev: &GatewayStatusEvent)
pub fn note_status_event(&self, ev: &GatewayStatusEvent)
状态变化事件入账(0.7.0 第3刀;eStatus. 一次到货三件事)。
- 文案逐字进日志环:文本由生产者(ek-ctp
describe())生成,界面不拼句子; - 状态列回写:整份快照直接喂
note_gateway_status(在线/掉线/断供判据 吃的是同一份事实,不再回查); - 去重告警:失败类六款(断开/认证失败/登录失败/查询停止/查询被拒/订阅被拒)
各弹一次;去重键带会话标记(
td_disconnects/md_disconnects), 重连后的同一款算新事件(旧会话的账不替新会话挡告警)。成功类不弹(降噪: 文案与状态列已经说话)。
Sourcepub fn request_pipeline_refresh(&self)
pub fn request_pipeline_refresh(&self)
置「该问一次 oms 装配」(0.5 M3:事件触发而不是节拍)。
Sourcepub fn take_pipeline_due(&self) -> bool
pub fn take_pipeline_due(&self) -> bool
消费「该问一次 oms 装配」标记(取一次即清)。
Sourcepub fn request_cfg_refresh(&self)
pub fn request_cfg_refresh(&self)
置「该问一次段落目录」(0.6.0 环节8;运维窗钮)。
Sourcepub fn take_cfg_due(&self) -> bool
pub fn take_cfg_due(&self) -> bool
消费「该问一次段落目录」标记(取一次即清)。
Sourcepub fn set_theme(&self, theme: Theme)
pub fn set_theme(&self, theme: Theme)
装档(0.8.0)。不置落盘标记 —— 启动读盘、夹具显式设档走这一支,
用户手点才走 toggle_theme(只有手点才落盘,照参考站口径)。
Sourcepub fn toggle_theme(&self) -> Theme
pub fn toggle_theme(&self) -> Theme
用户点切换钮(0.8.0):切到另一档 + 立落盘标记,返回新档。
Sourcepub fn take_theme_persist_due(&self) -> bool
pub fn take_theme_persist_due(&self) -> bool
消费「该把当前档落盘」标记(命令线程用;渲染线程零文件 IO)。
Sourcepub fn set_auto_connect(&self, gateway: &str, on: bool) -> Result<(), String>
pub fn set_auto_connect(&self, gateway: &str, on: bool) -> Result<(), String>
用户手点「自动连接」勾选(0.9.0):更新行标 + 立落盘标记(手点才写 ui 段)。
守卫口径与既有账户面一致:行不在清册 = Err(不静默)。
Sourcepub fn take_auto_connect_persist_due(&self) -> bool
pub fn take_auto_connect_persist_due(&self) -> bool
消费「该把自动连接勾选态落盘 ui 段」标记(命令线程用;手点才真写文件)。
Sourcepub fn take_alias_persist_due(&self) -> bool
pub fn take_alias_persist_due(&self) -> bool
消费「该把别名表落盘」标记(命令线程用;渲染线程零文件 IO)。
Sourcepub fn take_archive_purges(&self) -> Vec<String>
pub fn take_archive_purges(&self) -> Vec<String>
取走并清空档案抹除待办(命令线程落盘拍消费;见 archive_purge 字段注释)。
Sourcepub fn restore_saved_accounts_from(&self, store: &Store) -> Vec<String>
pub fn restore_saved_accounts_from(&self, store: &Store) -> Vec<String>
启动清点 → 账户清单复原(0.9.0)。
清点范围 = 该存档根里的 ctp.* 段(名单与连接参数的源);
每行是否「自动连接」= ui 段里的键 auto_connect.<网关名>(“1” = 开;
键缺 = 关,不善意)。密码绝不进表单:存档段里的密码是密库引用,
Field::secret 键在这里只被读成「引用在位」的元信息(密码显示位用),
解密在实例 on_start 的 worker 时机(ek-ctp BD-CFG-16),与本函数无关。
复原行口径:restored = true、auto_connect 取档案值、
stage = NotAssembled(实例只在「连接」/守护 auto_connect 时 spawn)。
已在清册的同名行**(手输先于复活的撞名)**跳过并显形 —— 清册行为唯一事实源,
清点不覆盖人手建的行。
返回:本次真正入库的复原行名(测试/首启说明用)。
Sourcepub fn restore_saved_accounts(&self) -> Vec<String>
pub fn restore_saved_accounts(&self) -> Vec<String>
复原入口(桌面端;生态缺省根)。根不可用 = 空表 + 显形(不落临时目录)。
Sourcepub fn set_cfg_briefs(&self, b: Vec<NsBrief>)
pub fn set_cfg_briefs(&self, b: Vec<NsBrief>)
段落目录回写(0.6.0)。
Sourcepub fn cfg_briefs(&self) -> Option<Vec<NsBrief>>
pub fn cfg_briefs(&self) -> Option<Vec<NsBrief>>
段落目录只读视图(0.6.0;None = 从未问过)。
Sourcepub fn cfg_delete_armed(&self) -> Option<String>
pub fn cfg_delete_armed(&self) -> Option<String>
清段二次确认臂(0.6.0;Some(ns) = 已点过一次,下一帧再点同一行才真发)。
pub fn arm_cfg_delete(&self, ns: Option<String>)
Sourcepub fn set_pipeline_lines(&self, lines: Vec<String>)
pub fn set_pipeline_lines(&self, lines: Vec<String>)
oms.pipeline_status 读数回写(装配事实,不是业务事实)。
Sourcepub fn pipeline_lines(&self) -> Vec<String>
pub fn pipeline_lines(&self) -> Vec<String>
最新一次的 oms 装配显形读数(空 = 运维窗不画这一节)。
Sourcepub fn note_bad_payload(&self, line: &str)
pub fn note_bad_payload(&self, line: &str)
某条推送线的载荷类型不对(0.5 M1)。
链上这几条线的载荷类型不是编译期保证:ePosition. 的载荷「由广发方确定」
(ek-oms plugin.rs:329 同样只能 downcast 试)。收不进去就计数,并在第一次
显形一条日志 —— 静默丢等于「界面少了一路数据而没人知道」。
Sourcepub fn bad_payload_count(&self, line: &str) -> u64
pub fn bad_payload_count(&self, line: &str) -> u64
某条推送线累计收不进去多少条(测试判据)。
Sourcepub fn note_plugin_spill(&self, rows: &[PlugRow])
pub fn note_plugin_spill(&self, rows: &[PlugRow])
插件邮箱水位与触顶的显形(0.4.5 P7d 首发;0.7.0 背压刀改口径)。
新口径(随 ek-core 0.5.0):邮箱无界默认不丢 → spilled 只在触到
该插件自己的软顶时才涨,所以「spilled > 0」不再意味着「丢过几条行情」,
而是已经触顶——一件红色大事。默认不丢之后,现场真正要看的是
积压多深(消费侧滞后 = 刷新慢),所以这里从 0.5 的“溢出告警“扩成
三段读数,全部走快照逐行(数据源 = ek-station 0.4.0 的 pending/peak/soft_cap):
- 积压越黄阈(软顶 1/16,下限 4096)→ Warning;
- 积压越红阈(软顶 1/4,下限 32768)→ Error:再涨就要丢新帧了;
spilled > 0(已触顶)→ Error:此刻起每多一条就丢一条新到的事件。
去重口径照旧(告警是状态事实,不是渲染帧的副作用):每个插件每一级只弹一次, 持续状态由运维窗那一列常显(告警负责“发生“,窗口负责“一直在“)。
Sourcepub fn note_gateway_status(&self, gateway: &str, st: &GatewayStatus)
pub fn note_gateway_status(&self, gateway: &str, st: &GatewayStatus)
{gw}.status 读数回写 → 该行登录态与细节重算。
0.3.2(Wave E,BD-UI-50)这里同时是告警的唯一产生口:轮询一拍问出告警态就灌 toast。
为什么住这儿而不是账户面板的渲染里(Python AlertEngine 的对照口径):
告警是「状态口问出来的事实」,不是「某张窗画出来的东西」——账户窗没开也必须知道掉线了。
去重键 = 网关 + 登录态:同一状态只弹一次,状态变了才算新告警(否则每轮轮询一条,
8 秒自动关与同屏上限 3 都没有意义)。
Sourcepub fn note_status_unreachable(&self, gateway: &str, why: &str)
pub fn note_status_unreachable(&self, gateway: &str, why: &str)
状态口问不到(网关不在场 / ask 超时):登录态退回 Unknown 并写明原因。
不得保留上一轮的「在线」:问不到就是没有证据,留着旧读数等于替网关谎称在线。
Sourcepub fn mark_account_stopped(&self, gateway: &str)
pub fn mark_account_stopped(&self, gateway: &str)
『断开』已发令 → 该行立刻显形「已断开」(不等下一轮轮询;用户按了就该马上看到)。
Sourcepub fn prepare_connect_form(&self, gateway: &str, form: CtpForm) -> CtpForm
pub fn prepare_connect_form(&self, gateway: &str, form: CtpForm) -> CtpForm
装配前把表单落到该账户留档,并按全局单源纪律裁决 md 位:
非行情源账户 → md_addr 就地清空(留档与下发同一份,消 U4 的“只清下发不清留档“)。
Sourcepub fn draft_from_existing(&self) -> CtpForm
pub fn draft_from_existing(&self) -> CtpForm
『添加账户』弹窗的草稿位:沿用当前在场账户的非凭据字段 (broker / AppID / AuthCode / 收录勾选),凭据位(账号、密码、前置)一律清空 (规划 Q20 的零风险缓解:少敲几遍,但绝不把上一家的密码带进下一家)。
Sourcepub fn update_account_form(&self, gateway: &str, form: CtpForm) -> bool
pub fn update_account_form(&self, gateway: &str, form: CtpForm) -> bool
更新一行账户的表单留档(按 gateway 主键;不存在 = false)。
Sourcepub fn remove_account(&self, gateway: &str) -> bool
pub fn remove_account(&self, gateway: &str) -> bool
摘除一行账户(界面侧清册;网关实例由 UiCmd::Remove 走 svctl 摘)。
Sourcepub fn sync_accounts_connected(&self, rows: &[PlugRow]) -> Vec<String>
pub fn sync_accounts_connected(&self, rows: &[PlugRow]) -> Vec<String>
用 svctl 快照回填账户在场位与四态;回带本轮新装配的网关名(订阅重放用)。
四态口径:svctl 带回这个名字 = 实例已装配(清掉失败原因); 名字不在场且原先记着「已装配」= 回到「未装配」(被摘/宿主崩了); 「装配中」与「装配失败」是界面侧记的,不被在场表覆盖。
0.2.19 附带一条:实例不在场时登录态读数一并作废 —— 会话读数属于那个实例, 实例没了还留着「在线/掉线 2 次」,就是在替一个不存在的会话说话。
Sourcepub fn accounts_locked(&self) -> bool
pub fn accounts_locked(&self) -> bool
是否已有账户装配 —— 元账号锁定判定(规划 D3:连接后不允许切换)。
Sourcepub fn set_md_source(&self, gateway: &str) -> Result<(), String>
pub fn set_md_source(&self, gateway: &str) -> Result<(), String>
指定行情元账号(仅配置阶段;任何账户已连接 = 拒,界面须提示“先断开“)。
Sourcepub fn subscriptions(&self) -> Vec<String>
pub fn subscriptions(&self) -> Vec<String>
订阅集只读视图。
Sourcepub fn note_subscriptions(&self, symbols: &[String])
pub fn note_subscriptions(&self, symbols: &[String])
登记订阅(去重保序;断开重连后按它重放)。
Sourcepub fn default_gateway(&self) -> Option<String>
pub fn default_gateway(&self) -> Option<String>
下单默认账户阶梯(替代旧“空 → 字面量 ctp“兜底,规划 §5.B;
0.2.18 四态后修正,规划 Q4):
上次手动选择(须仍在清册且已装配)→ 第一个已装配账户;
未装配账户不得进默认 —— 旧阶梯的“退到第一个账户“会把只添加了还没连接的
账户选成下单归属,发出去只会撞 unknown:gateway。
一个都没有 = None(界面据此禁用下单钮)。
Sourcepub fn kline_symbols(&self) -> Vec<String>
pub fn kline_symbols(&self) -> Vec<String>
已开 K线窗合约表(多开,去重)。
Sourcepub fn open_kline(&self, symbol: impl Into<String>)
pub fn open_kline(&self, symbol: impl Into<String>)
开 K线窗(去重;日志留痕可断言)。
Sourcepub fn take_kline_fetches(&self) -> Vec<KlineFetch>
pub fn take_kline_fetches(&self) -> Vec<KlineFetch>
补数队列出口(命令线程 catch;非阻塞读,取走即清)。
Sourcepub fn kline_fetch_pending(&self) -> bool
pub fn kline_fetch_pending(&self) -> bool
命令线程路由位:有补数单待发。
Sourcepub fn close_kline(&self, symbol: &str)
pub fn close_kline(&self, symbol: &str)
关 K线窗(窗关闭钮 → 出表)。
Sourcepub fn contracts_window_open(&self) -> bool
pub fn contracts_window_open(&self) -> bool
查询合约窗开合。
Sourcepub fn set_contracts_window_open(&self, v: bool)
pub fn set_contracts_window_open(&self, v: bool)
查询合约窗开合写。
Sourcepub fn update_contract(&self, c: &ContractData)
pub fn update_contract(&self, c: &ContractData)
落一条合约(eContract. 裸键上屏),并回补已有行的名称。
时序决定了这一步必须有:登录即上账的委托/成交回报先于合约到手(柜台在 登录后立刻回放当日回报,而合约查询要走完查询链),网关发它们时合约表还空着, 名字补不上(0.11.0 第5刀现场实测:委托 2/27、成交 1/14)。合约到货之后 把同名行补齐 —— 只补空名字,已有名字不覆盖;补名不改行序、不新增行。
Sourcepub fn contracts(&self, pattern: &str) -> Vec<ContractData>
pub fn contracts(&self, pattern: &str) -> Vec<ContractData>
合约查询(Python ContractManager 口径:留空 = 全部)。
Sourcepub fn contract_count(&self) -> usize
pub fn contract_count(&self) -> usize
合约库格数。
Sourcepub fn contract_query(&self) -> String
pub fn contract_query(&self) -> String
查询串读写。
Sourcepub fn set_contract_query(&self, q: impl Into<String>)
pub fn set_contract_query(&self, q: impl Into<String>)
查询串写。
Sourcepub fn toggle_contract_selection(&self, en_symbol: &str)
pub fn toggle_contract_selection(&self, en_symbol: &str)
勾选翻转(en_symbol)。
Sourcepub fn selected_contracts(&self) -> Vec<String>
pub fn selected_contracts(&self) -> Vec<String>
当前勾选集。
Sourcepub fn cancel_reject_note(msg: &str) -> String
pub fn cancel_reject_note(msg: &str) -> String
撤单拒因翻译(0.11.0 第6刀 R7):机器码 → 人话,原文照留。
oms 的拒因是结构化机器码(判据/日志吃它,不能改),屏幕上要给一句人话。 这一条住在状态层(不是渲染层),与告警同一口径:事实的产生口说什么, 屏幕上就说什么,渲染不参与翻译。
Sourcepub fn clear_logs(&self)
pub fn clear_logs(&self)
清空日志(渲染“清空日志“按钮 / 测试)。
Sourcepub fn logs_snapshot(&self) -> (Vec<String>, u64)
pub fn logs_snapshot(&self) -> (Vec<String>, u64)
日志只读快照 + 溢出计数。
Sourcepub fn logs_entries(&self) -> (Vec<LogEntry>, u64)
pub fn logs_entries(&self) -> (Vec<LogEntry>, u64)
带时间戳的日志快照(BD-UI-41 渲染侧:日志表格的「时间」列)。
Sourcepub fn set_snapshot(&self, snap: BusSnap)
pub fn set_snapshot(&self, snap: BusSnap)
落一次服务快照(eTimer 节流回调)。
Sourcepub fn request_stop(&self)
pub fn request_stop(&self)
置关窗信号(eframe App 关窗钩子调用)。
Sourcepub fn push_alert(&self, level: AlertLevel, text: impl Into<String>)
pub fn push_alert(&self, level: AlertLevel, text: impl Into<String>)
观察线程轮询用。 0.3.2(Wave E,BD-UI-50)告警入口:界面层调它,渲染帧灌进 toast 队列。
Sourcepub fn alert_once(&self, key: impl Into<String>) -> bool
pub fn alert_once(&self, key: impl Into<String>) -> bool
去重:这条告警第一次出现返回 true(同一键不再重复弹)。
Sourcepub fn pending_alert_count(&self) -> usize
pub fn pending_alert_count(&self) -> usize
待灌进 toast 的告警条数(状态层判据用;灌进队列由渲染帧收口)。
Sourcepub fn alerted_count(&self) -> usize
pub fn alerted_count(&self) -> usize
已弹过的告警键数(去重账本;判据用它核「同一状态不重复弹」)。
Sourcepub fn exit_confirm_open(&self) -> bool
pub fn exit_confirm_open(&self) -> bool
退出确认窗:开 / 关 / 是否已确认放行(0.3.1 BD-UI-49)。
pub fn open_exit_confirm(&self)
pub fn close_exit_confirm(&self)
pub fn exit_confirmed(&self) -> bool
pub fn confirm_exit(&self)
pub fn is_stop(&self) -> bool
Sourcepub fn assembly_locked(&self) -> bool
pub fn assembly_locked(&self) -> bool
装配锁是否在位(0.9.5 阶段机;只被界面读)。
Sourcepub fn set_assembly_locked(&self, on: bool)
pub fn set_assembly_locked(&self, on: bool)
置装配锁(0.9.5;启动全成功 → true,失败 → 保持 false 留修路)。
Sourcepub fn drain_cmds(&self) -> Vec<UiCmd>
pub fn drain_cmds(&self) -> Vec<UiCmd>
取走全部指令(0.5 M5:命令线程辞行)。
Sourcepub fn cmd_pending(&self) -> bool
pub fn cmd_pending(&self) -> bool
队列里是否有待执行指令(命令线程的「有没有活」判据,不消费)。
Sourcepub fn pending_confirm(&self) -> Option<String>
pub fn pending_confirm(&self) -> Option<String>
当前待二次确认目标(Some = 二次确认中)。
Sourcepub fn confirm_step(&self, name: &str) -> ConfirmStep
pub fn confirm_step(&self, name: &str) -> ConfirmStep
确认步进:同名二点 = 发令(Fired),异名 = 迁移(Switched),首点 = 进入待确认。
Sourcepub fn confirm_cancel(&self)
pub fn confirm_cancel(&self)
清除待确认(取消钮)。
Sourcepub fn market(&self) -> &MarketStore
pub fn market(&self) -> &MarketStore
行情库直读(读写两用:worker 写,渲染读)。
Sourcepub fn seed_trade_snap(&self, ts: TradeSnap)
pub fn seed_trade_snap(&self, ts: TradeSnap)
全量播种四本账(测试夹具的入口;0.5 起生产侧不再走这一条 —— 启动一次四问
走 note_* 合并式播种,见 plugin.rs::reconcile_trade)。
与 note_* 的分工:这一条是「把已有的一份账交给界面」(先清后灌),note_* 是
「一批新事件进来」。行序按入参反序赋 seq,正是为了让重建后的 trade_snap()
与喂进来的顺序一致 —— 播种不是「一批新事件」,只有新事件才走「在前」。
Sourcepub fn note_order(&self, o: &OrderData)
pub fn note_order(&self, o: &OrderData)
一笔委托入账(基线 OrderMonitor:有 en_orderid 就更新可变列,否则新行)。
可变列口径照基线 widget.py:1341-1357 的 update 标记:随回报走的是
name / traded / traded_price / status / status_msg / datetime;symbol / exchange / type / direction / offset / price / volume / orderid / reference / gateway_name 插入后不再被后续回报改写 —— CTP 的后续回报里这些字段可能给空,
整行覆盖会把「总量」写成 0(BaseCell.set_content 的 if self.is_update 挡的就是这个)。
Sourcepub fn note_trade(&self, t: &TradeData)
pub fn note_trade(&self, t: &TradeData)
一笔成交入账(0.5 裁定:按 en_tradeid 去重,新成交在前)。
基线的两层口径在这里合成一条:表格层 TradeMonitor.data_key = ""(:1267,只插不改、
不按键更新),引擎层 trades_filter_dict(engine.py:1072-1080,同一笔成交只算一次,
注释写明防的是账户重连时柜台重推)。我们的成交表就是用户看到的那本账,而它现在有两个
事件源(网关推送 + 启动 / 上线播种),所以引擎层那一条必须落到这里,否则同一笔会出两行
—— 实连演示里量出来了:摘账户再重加之后,元账号 3 行成交变 4 行、纯 TD 账号 3 行变 6 行。
Sourcepub fn note_position(&self, p: &PositionData)
pub fn note_position(&self, p: &PositionData)
一笔持仓入账(基线 PositionMonitor:键 en_positionid,可变列照 :1480-1497)。
「平仓后残留」由渲染侧处理(基线 :1514-1517 的 volume == 0 → hideRow):
账本留着这一行、把 volume 写成 0,不删行。
Sourcepub fn note_funds(&self, a: &AccountData)
pub fn note_funds(&self, a: &AccountData)
一笔资金入账(基线 AccountMonitor:键 en_accountid,可变列 balance / frozen)。
Sourcepub fn clear_gateway_rows(&self, gateway: &str) -> usize
pub fn clear_gateway_rows(&self, gateway: &str) -> usize
某网关的行全部作废(0.5 M1:摘除 / 下线后不留旧委托旧仓)。返回清掉的行数。
Sourcepub fn trade_dropped(&self) -> u64
pub fn trade_dropped(&self) -> u64
成交账本触顶丢弃计数(0.5 偏离③;0 = 从没丢过)。
Sourcepub fn trade_snap(&self) -> Arc<TradeSnap> ⓘ
pub fn trade_snap(&self) -> Arc<TradeSnap> ⓘ
交易监控快照读(渲染):四本账的缓存视图,脏时按帧重建一次。
脏标记由入账置真、这里消费 —— 回报潮里一百条事件也只重建一次(每帧一次), 不是每条事件一次。锁序:先缓存后账本;入账侧只持账本锁,不反向。
Sourcepub fn set_ctp_form(&self, f: CtpForm)
pub fn set_ctp_form(&self, f: CtpForm)
CTP 配置表单写。
Sourcepub fn row_selected(&self, table: &str, key: &str) -> bool
pub fn row_selected(&self, table: &str, key: &str) -> bool
该行是否为所属表的选中行(渲染判断;无键 = 未选)。
Sourcepub fn select_row(&self, table: &str, key: &str)
pub fn select_row(&self, table: &str, key: &str)
设所属表的选中行(每表一行;同键重复点 = 保持)。
Trait Implementations§
Auto Trait Implementations§
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.