Files
XCEngine/docs/api/XCEngine/Editor/UI/PopupState/InlineTextEditState.md

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()
    • 退出编辑态
    • 清空目标项、文本缓冲区和待聚焦标志

典型使用位置

  • HierarchyPanelInlineTextEditState<uint64_t, 256> 保存实体重命名状态
  • ProjectPanelInlineTextEditState<std::string, 256> 保存项目资源项重命名状态

设计含义

  • 即时模式 UI 里,行内重命名最麻烦的通常是“哪一项正在编辑”和“进入编辑后只聚焦一次”。
  • 这个 helper 把这两件事一起封装了。

相关文档