Files
Windows-Gotify-Client-Rust/ui/empty-state.slint
T
KennethCheng 383bb404a9 fix(ui): Phase 7 C4 — 卡片间距修复 + 全 UI 翻译为简体中文
两个问题修一处:\n\n1. 布局 bug:filter 切到 Max/High/Normal/Low 后可见卡片之间留出巨大空白。原因:Slint isible: false 在 for 循环里没真正折叠 layout 槽位,被隐藏的卡片仍占 76px 高 + 8px spacing。修法:把过滤从 Slint 侧搬到 Rust 侧,新增 filtered_model:UI 绑 filtered_model,shared_model 作为全量 canonical;切换过滤时 rebuild_filtered_model + WS drain 用 push_message_to_models 同步两表;测试连接 / tray restart 也都双表更新。\n\n2. UI 默认中文:sidebar(MESSAGES/SERVERS/FILTERS/APP → 消息/服务器/过滤/应用;All/Max/High/Normal/Low/Settings/About → 全部/最高/高/普通/低/设置/关于)、详情面板(Open link → 打开链接)、空态(You're all caught up → 暂时没有新消息;Test Notification → 发送测试通知)、设置页(5 个分组 + 所有 toggle + Appearance radio)、AboutDialog、托盘菜单(打开/暂停通知/设置.../重新连接/退出/新消息:N)、状态文本(Disconnected → 未连接;mock feed → 模拟数据;messages → 条消息)。\n\n新增 priority-filter-changed(int) 回调,sidebar 切过滤时通知 Rust 重建 filtered model。SharedModel/FilteredModel 同步逻辑:HTTP catch-up → WS drain push → 测试连接 → tray restart 都用 helper 函数维护一致性。
2026-09-19 20:27:15 +08:00

72 lines
1.9 KiB
Plaintext

// AGENTS.md §9 empty state.
//
// Phase 7 C4: 翻译为简体中文。
export component EmptyState inherits Rectangle {
callback test-notification();
in property <color> glyph-color: #4ea1ff;
in property <color> text-primary-color: #e6e6e6;
in property <color> text-muted-color: #6a6a6a;
in property <color> button-bg: #2f3035;
in property <color> button-border: #3a3b40;
in property <color> button-text: #e6e6e6;
background: transparent;
VerticalLayout {
alignment: center;
spacing: 16px;
padding: 32px;
// §9 ✦ glyph — 4-point star drawn with Path.
Path {
width: 48px;
height: 48px;
fill: glyph-color;
commands: "M 24 0 L 28 20 L 48 24 L 28 28 L 24 48 L 20 28 L 0 24 L 20 20 Z";
}
Text {
text: "暂时没有新消息";
color: text-primary-color;
font-size: 18px;
font-weight: 600;
horizontal-alignment: center;
}
Text {
text: "新消息会自动\n出现在这里。";
color: text-muted-color;
font-size: 13px;
horizontal-alignment: center;
wrap: word-wrap;
}
Rectangle { height: 8px; }
Rectangle {
background: button-bg;
border-color: button-border;
border-width: 1px;
border-radius: 6px;
height: 36px;
width: 160px;
horizontal-stretch: 0;
Text {
x: (parent.width - self.width) / 2;
y: (parent.height - self.height) / 2;
text: "发送测试通知";
color: button-text;
font-size: 13px;
}
TouchArea {
clicked => {
root.test-notification();
}
}
}
}
}