1.8 KiB
1.8 KiB
InlineTextEditState
命名空间: XCEngine::Editor::UI
类型: template class
源文件: editor/src/UI/PopupState.h
签名
template <typename ItemId, size_t BufferCapacity>
class InlineTextEditState;
作用
为列表项或树节点的“行内重命名”提供目标项、文本缓冲区和首帧聚焦状态。
公开接口
void Begin(ItemId itemId, const char* initialValue = "");
bool IsActive() const;
bool IsEditing(ItemId itemId) const;
ItemId Item() const;
bool ConsumeFocusRequest();
void SetValue(const char* value);
bool Empty() const;
char* Buffer();
const char* Buffer() const;
constexpr size_t BufferSize() const;
void Cancel();
当前实现行为
Begin(itemId, initialValue)- 进入编辑态
- 记录当前目标项 id
- 把初始文本写入缓冲区
- 把
m_focusRequested设为true
IsEditing(itemId)- 只有在当前处于活动编辑态且目标项匹配时返回
true
- 只有在当前处于活动编辑态且目标项匹配时返回
ConsumeFocusRequest()- 第一次消费时返回
true,随后自动清零 - 适合驱动
ImGui::SetKeyboardFocusHere()一类逻辑
- 第一次消费时返回
SetValue(...)- 用
strcpy_s更新当前缓冲区
- 用
Cancel()- 退出编辑态
- 清空目标项、文本缓冲区和待聚焦标志
典型使用位置
HierarchyPanel用InlineTextEditState<uint64_t, 256>保存实体重命名状态ProjectPanel用InlineTextEditState<std::string, 256>保存项目资源项重命名状态
设计含义
- 即时模式 UI 里,行内重命名最麻烦的通常是“哪一项正在编辑”和“进入编辑后只聚焦一次”。
- 这个 helper 把这两件事一起封装了。