feat(files): 新增外置系统文件管理器 os.meow.files (agent-183) — 目录浏览(虚拟化列表/空态)+文本预览(≤256KB截断)+删除/重命名/新建/属性(BottomSheet+IME);路径写操作限 TF 卡内(拒 .. 越界);多文件结构(app.c+ui/{browser,viewer}.c+ui/common/chrome.c+logic/fsx.c) 按批次②范本
files md5 6f6b0a6d; 0 warning; 宿主 test_fsx 全过(路径安全/格式化/排序/虚拟化/写操作/文本嗅探); qemu 离屏冒烟通过 SDK 缺口记录: listview 仅单行 label(本 App 用 custom 画布自绘行); common 档字库中文缺字(未声明 fonts:full) 真机待验证: 列表渲染/滚动手感/IME 重命名/弹窗交互
This commit is contained in:
1 parent
b5038f8673
commit
c187b7bce3
12 files changed
+1741
No files matched your search
@@ -0,0 +1,57 @@
|
||||
/* ui/common/chrome.c — files 应用共享 chrome(TopAppBar 建置 / 几何 / 空态&页脚绘制)。
|
||||
*
|
||||
* 与 hello_app/ui/common/chrome.c 同理:把「页面 chrome 固定不随内容重建」分出去;本模块只
|
||||
* 提供几何计算 + topbar 建置 + 非控件直绘辅助(空态/页脚),供 browser/viewer 两页复用。
|
||||
* 绘制全部读 meow_theme_get() 语义色(§8.1),不硬编码配色;topbar 由 meow_topappbar 建,
|
||||
* 自动注册进绘制物注册表(§6.2),owner=创建时 active activity。
|
||||
*/
|
||||
#include "files_internal.h"
|
||||
|
||||
int app_statusbar(void)
|
||||
{
|
||||
int sb = meow_ui_statusbar_height();
|
||||
return sb < 0 ? 0 : sb;
|
||||
}
|
||||
|
||||
app_rect_t app_topbar_rect(void)
|
||||
{
|
||||
int sb = app_statusbar();
|
||||
return AR(0, sb, meow_ui_width(), APP_TOPBAR_H);
|
||||
}
|
||||
|
||||
app_rect_t app_content_rect(void)
|
||||
{
|
||||
int sb = app_statusbar();
|
||||
int y = sb + APP_TOPBAR_H;
|
||||
int h = meow_ui_height() - y;
|
||||
if (h < 0) h = 0;
|
||||
return AR(0, y, meow_ui_width(), h);
|
||||
}
|
||||
|
||||
meow_widget *app_topbar_create(const char *title, int back, const char *action_label)
|
||||
{
|
||||
app_rect_t r = app_topbar_rect();
|
||||
meow_widget *tb = meow_topappbar_create(r.x, r.y, r.w, r.h, title);
|
||||
meow_topappbar_set_back(tb, back);
|
||||
if (action_label) meow_topappbar_add_action(tb, action_label);
|
||||
meow_widget_set_z(tb, 999); /* chrome 置顶(§6.2:> 一切自动 z,区域重画最后画它) */
|
||||
return tb;
|
||||
}
|
||||
|
||||
/* 空态/错误:居中两行(kind 大字 + what 小字)。kind=状态标题,what=说明/路径。 */
|
||||
void app_draw_empty(app_rect_t r, const char *kind, const char *what)
|
||||
{
|
||||
const meow_theme *th = meow_theme_get();
|
||||
int cy = r.y + r.h / 2;
|
||||
meow_ui_text_center(r.x + r.w / 2, cy - 34, kind ? kind : "", 28, th->primary);
|
||||
if (what && what[0])
|
||||
meow_ui_text_center(r.x + r.w / 2, cy + 4, what, 20, th->dim);
|
||||
}
|
||||
|
||||
/* 底部信息(右对齐 dim):项数/路径/截断提示。 */
|
||||
void app_draw_footer(app_rect_t r, const char *text)
|
||||
{
|
||||
const meow_theme *th = meow_theme_get();
|
||||
if (!text || !text[0]) return;
|
||||
meow_ui_text_right(r.x + r.w - APP_PAD, r.y + r.h - 26, text, 20, th->dim);
|
||||
}
|
||||
Reference in new issue
Block a user