/* * meow_select.h — SDK 枚举/预设选择器(§5.8.6 模态组件,M7.2 设置页缺口 #4)。 * * 定位:给「枚举 / 预设选择器」一个开箱即用的**下拉模态**——设置页采样率/码率/主题/语言等 * 枚举、均衡器预设等。封装 = BottomSheet(标题 + 选项列表)+ meow_listview(SINGLE) 单选列表: * 选项数组 + 当前选中(高亮)+ 点选项 = 选中 + 关闭 + on_change 回调;点面板外/左缘返回 = 取消。 * * 设计(§3 缺口 #4):选项用 meow_listview(SINGLE) 渲染(单选高亮、可惯性滚动、虚拟化长列表), * 外层是模态 BottomSheet(复用 meow_dialog 的遮罩/快照恢复,scrim 只叠一层/关闭无残影)。 * 阻塞式(内层 meow_input_pop 轮询,与 meow_dialog 同构);打开前排空残留触摸。 * * 内存纪律:选项数组定长(≤MEOW_SELECT_MAX_ITEMS,栈/数组持有,非 malloc 长列表); * 列表在 open 时创建(冷路径)、close 时释放;open 循环零 malloc。 */ #ifndef MEOW_UI_SELECT_H #define MEOW_UI_SELECT_H #include "meow_ui_types.h" #ifdef __cplusplus extern "C" { #endif typedef struct meow_select meow_select; /* 选中回调(on_change):idx=被选中的选项下标(0..n-1)。 */ typedef void (*meow_select_fn)(int idx, void *ctx); #define MEOW_SELECT_MAX_ITEMS 32 /* 选项上限(静态数组;越界 add 忽略并返回 -1) */ /* ---- 组件式(可复用 + on_change 回调)---- */ meow_select *meow_select_create(const char *title, int cur); /* cur=初始选中项;越界 clamp */ int meow_select_add_item(meow_select *s, const char *label); /* 返回项下标;满/无效= -1 */ void meow_select_set_on_change(meow_select *s, meow_select_fn cb, void *ctx); /* 打开模态(阻塞到确认/取消):选中 → 置 result=idx + 调 on_change(idx)+ 返回 idx; * 取消/点面板外/左缘返回 → 返回 -1(不调 on_change)。 */ int meow_select_open(meow_select *s); void meow_select_free(meow_select *s); /* ---- 一次性(无回调,返回值即选择)---- * opts=选项数组(const char* 数组);n=个数;cur=初始选中。返回选中下标/-1=取消。 */ int meow_select_show(const char *title, const char *const *opts, int n, int cur); #ifdef __cplusplus } #endif #endif /* MEOW_UI_SELECT_H */