fix(packui): M113 第一批修正 —— 一次只摊开一件事、有界滚动、阶段词不再打架
D30 出图实测暴露的四个问题,都在本批范围内修掉: 1. **动作按钮被顶出屏幕**:内容库页正列没有整页滚动(只有结果列表自己滚),入口 + 报告 + 导出三块同时摊开时,「确认写盘 / 关闭 / 以包为准重新导入」落在 900px 以下。 改成一态一块(导出面板 > 进度 > 结果 > 入口);拖拽是窗口级事件,收起入口不丢功能。 2. **阶段词打架**:复用面板自带的阶段词是安装语义(Building the version),与 「Step 2/5 · Unpacking overrides」并排时两种说法。现在面板阶段词留空、由步骤行说真话 —— 仍然只有一份进度条 / 计数 / 取消按钮,没有第二套进度 UI。 3. **列表过长**:缺文件 / 冲突 / 预检样例与已知损失都套上「超过 n 条才滚」的有界容器 (packui/view/parts.rs 的 bounded),少量条目时不浪费空间。 4. **英文单复数**:计数行改成「标签:值」(Files written: 2、cannot export: 1)。 PackPathPlaceholder / PackFormatModrinth 的中文与英文雷同,被 chinese_catalog_is_actually_chinese 抓到,一并改掉。 另:app/update.rs 加完拖拽分支后 408 行超线 → 两个钩子改成返回 Task、三个分支各一行, 现在 397 行。新增致命态出图夹具(ULL_CONTENT_PACK=failed),用来证明「容忍的缺文件」与 「致命回滚」在视觉上可区分。 门禁:cargo check ✓ / clippy -D warnings ✓ / cargo test -p unlucky-app-iced(467+6)✓ / cargo test -p unlucky-i18n(24)✓ / rustfmt --check ✓ / wc -l 全表 ≤400 ✓
This commit is contained in:
1 parent
fbeff94e55
commit
2129d8cee6
10 files changed
+161
-83
No files matched your search
@@ -100,22 +100,11 @@ impl App {
|
||||
self.view_dirty = true;
|
||||
self.refresh_view();
|
||||
}
|
||||
// M113: import/export —— 拖入整合包(文件或 MultiMC·Prism 实例目录)。
|
||||
// 这是本版**唯一**的「选文件」通道:依赖树里没有对话框依赖,加它要动根
|
||||
// `Cargo.toml` 与许可门禁(见 `pages/content/packui.rs` 的边界说明)。
|
||||
window::Event::FileDropped(path) => {
|
||||
self.on_pack_dropped(path);
|
||||
self.refresh_view();
|
||||
}
|
||||
window::Event::FileHovered(_) => {
|
||||
self.on_pack_hover(true);
|
||||
self.refresh_view();
|
||||
}
|
||||
window::Event::FilesHoveredLeft => {
|
||||
self.on_pack_hover(false);
|
||||
self.refresh_view();
|
||||
}
|
||||
// 其余窗口事件本仓不消费(非穷尽枚举,保留兜底免得升级 iced 时炸)
|
||||
// M113: import/export —— 拖入整合包(本版唯一的选文件通道;窗口级事件,
|
||||
// 所以入口收起时也照样接得住。细节在 `on_pack_dropped` / `on_pack_hover`)
|
||||
window::Event::FileDropped(path) => return self.on_pack_dropped(path),
|
||||
window::Event::FileHovered(_) => return self.on_pack_hover(true),
|
||||
window::Event::FilesHoveredLeft => return self.on_pack_hover(false),
|
||||
_ => {}
|
||||
}
|
||||
Task::none()
|
||||
|
||||
@@ -188,16 +188,24 @@ impl App {
|
||||
}
|
||||
|
||||
/// 拖入一个文件/目录(`app/update.rs` 的窗口事件转发到这里)。
|
||||
pub(super) fn on_pack_dropped(&mut self, path: std::path::PathBuf) {
|
||||
pub(super) fn on_pack_dropped(&mut self, path: std::path::PathBuf) -> Task<Message> {
|
||||
// 拖入是「现在就要看到结果」的动作:先把用户带到内容库页,再落草稿
|
||||
self.state
|
||||
.navigate(unlucky_presenter::router::Route::Content);
|
||||
self.on_pack(pages::content::PackMessage::Dropped(path));
|
||||
self.refresh_view();
|
||||
Task::none()
|
||||
}
|
||||
|
||||
/// 拖拽悬停状态(有文件在窗口上方时高亮入口)。
|
||||
pub(super) fn on_pack_hover(&mut self, hover: bool) {
|
||||
pub(super) fn on_pack_hover(&mut self, hover: bool) -> Task<Message> {
|
||||
// 状态没变就不重画:winit 对同一批文件会连发几次 hover 事件
|
||||
let changed = self.content.pack.hover != hover;
|
||||
self.on_pack(pages::content::PackMessage::Hover(hover));
|
||||
if changed {
|
||||
self.refresh_view();
|
||||
}
|
||||
Task::none()
|
||||
}
|
||||
|
||||
/// 改一个筛选字段并**立刻重查**(第一页)。
|
||||
|
||||
Reference in new issue
Block a user