Files
arcs/apps-ui/apps/llm/views/lisa_ui_llm_base.h
2026-08-13 16:50:52 +08:00

160 lines
4.3 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file lisa_ui_llm_base.h
* @brief LLM UI基础组件头文件
*
* 提供LLM聊天界面的基础UI组件包含任务栏和内容容器的布局管理。
* 该组件基于LVGL图形库提供了完整的创建、管理和样式设置API。
*
* @version 1.0.0
* @date 2025
* @author Lisa UI Team
*/
#ifndef __LISA_UI_LLM_BASE_H__
#define __LISA_UI_LLM_BASE_H__
#ifdef __cplusplus
extern "C" {
#endif
/*===========================================
* 包含文件
*==========================================*/
#include "lvgl.h"
#include <stdint.h>
#include <stdbool.h>
/** 默认配置参数 */
#define LISA_UI_LLM_BASE_DEFAULT_BAR_HEIGHT 36 /*!< 默认任务栏高度 */
#define LISA_UI_LLM_BASE_DEFAULT_BAR_COLOR 0x000000 /*!< 默认任务栏颜色 */
#define LISA_UI_LLM_BASE_DEFAULT_BG_COLOR 0x000000 /*!< 默认背景颜色 */
#define LISA_UI_LLM_BASE_MAX_TITLE_LENGTH 16 /*!< 最大标题长度 */
/** 类型检查宏 */
#define LISA_UI_LLM_BASE_CLASS_CHECK(obj) \
(lv_obj_has_class(obj, &lisa_ui_llm_base_class))
/**
* @brief LLM UI基础组件结构体
*
* 该结构体定义了LLM UI基础组件的数据成员包含LVGL对象、
* 任务栏、内容容器和标题信息。
*/
struct lisa_ui_llm_base {
lv_obj_t obj; /*!< LVGL基础对象 */
lv_obj_t *bar; /*!< 任务栏对象 */
lv_obj_t *container; /*!< 页面容器对象 */
char title[LISA_UI_LLM_BASE_MAX_TITLE_LENGTH]; /*!< 页面标题 */
};
/** LLM UI基础组件类型定义 */
typedef struct lisa_ui_llm_base lisa_ui_llm_base_t;
/*===========================================
* 全局变量声明
*==========================================*/
/** LLM UI基础组件类定义 */
extern const lv_obj_class_t lisa_ui_llm_base_class;
/*===========================================
* 函数声明
*==========================================*/
/**
* @brief 获取任务栏对象
*
* @param obj LLM UI基础组件对象
* @return lv_obj_t* 任务栏对象失败返回NULL
*
* @note 返回的对象可用于添加标题标签、按钮等UI元素
*/
lv_obj_t *lisa_ui_llm_base_bar_get(lv_obj_t *obj);
/**
* @brief 获取内容容器对象
*
* @param obj LLM UI基础组件对象
* @return lv_obj_t* 内容容器对象失败返回NULL
*
* @note 返回的容器对象用于放置聊天消息、输入框等内容
*/
lv_obj_t *lisa_ui_llm_base_container_get(lv_obj_t *obj);
/**
* @brief 设置页面标题
*
* @param obj LLM UI基础组件对象
* @param title 标题字符串如果为NULL则清空标题
*
* @note 标题长度限制为LISA_UI_LLM_BASE_MAX_TITLE_LENGTH-1个字符
*/
void lisa_ui_llm_base_set_title(lv_obj_t *obj, const char *title);
/**
* @brief 获取页面标题
*
* @param obj LLM UI基础组件对象
* @return const char* 标题字符串失败返回NULL
*/
const char *lisa_ui_llm_base_get_title(lv_obj_t *obj);
/**
* @brief 设置任务栏背景颜色
*
* @param obj LLM UI基础组件对象
* @param color 颜色值
*
* @code
* // 设置任务栏为绿色
* lisa_ui_llm_base_set_bar_color(llm_ui, lv_color_hex(0x4CAF50));
* @endcode
*/
void lisa_ui_llm_base_set_bar_color(lv_obj_t *obj, lv_color_t color);
/**
* @brief 设置任务栏高度
*
* @param obj LLM UI基础组件对象
* @param height 高度值(像素)
*
* @note 高度改变会影响整体布局,建议在组件创建后立即设置
*/
void lisa_ui_llm_base_set_bar_height(lv_obj_t *obj, lv_coord_t height);
/**
* @brief 清空内容容器
*
* @param obj LLM UI基础组件对象
*
* @note 该函数会删除容器中的所有子对象
*/
void lisa_ui_llm_base_clear_container(lv_obj_t *obj);
/*===========================================
* 内联函数
*==========================================*/
/**
* @brief 检查对象是否为LLM UI基础组件类型
*
* @param obj 要检查的对象
* @return true 是LLM UI基础组件类型
* @return false 不是LLM UI基础组件类型
*/
static inline bool lisa_ui_llm_base_is_valid(lv_obj_t *obj)
{
if (obj == NULL) {
return false;
}
// 检查是否为基类或其派生类
return LISA_UI_LLM_BASE_CLASS_CHECK(obj);
}
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __LISA_UI_LLM_BASE_H__ */