Extract editor interaction states
This commit is contained in:
@@ -32,7 +32,9 @@ void HierarchyPanel::OnAttach() {
|
||||
}
|
||||
|
||||
void HierarchyPanel::OnSelectionChanged(const SelectionChangedEvent& event) {
|
||||
m_needsRefresh = true;
|
||||
if (m_renameState.IsActive() && event.primarySelection != m_renameState.Item()) {
|
||||
CancelRename();
|
||||
}
|
||||
}
|
||||
|
||||
void HierarchyPanel::Render() {
|
||||
@@ -61,7 +63,7 @@ void HierarchyPanel::Render() {
|
||||
}
|
||||
|
||||
if (ImGui::IsWindowHovered() && ImGui::IsMouseDown(0) && !ImGui::IsAnyItemHovered()) {
|
||||
if (!m_renaming) {
|
||||
if (!m_renameState.IsActive()) {
|
||||
m_context->GetSelectionManager().ClearSelection();
|
||||
}
|
||||
}
|
||||
@@ -137,14 +139,17 @@ void HierarchyPanel::RenderEntity(::XCEngine::Components::GameObject* gameObject
|
||||
|
||||
ImGui::PushID(static_cast<int>(gameObject->GetID()));
|
||||
|
||||
if (m_renaming && m_renamingEntity == gameObject) {
|
||||
if (m_renameJustStarted) {
|
||||
if (m_renameState.IsEditing(gameObject->GetID())) {
|
||||
if (m_renameState.ConsumeFocusRequest()) {
|
||||
ImGui::SetKeyboardFocusHere();
|
||||
m_renameJustStarted = false;
|
||||
}
|
||||
|
||||
ImGui::SetNextItemWidth(-1);
|
||||
if (ImGui::InputText("##Rename", m_renameBuffer, sizeof(m_renameBuffer), ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_AutoSelectAll)) {
|
||||
if (ImGui::InputText(
|
||||
"##Rename",
|
||||
m_renameState.Buffer(),
|
||||
m_renameState.BufferSize(),
|
||||
ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_AutoSelectAll)) {
|
||||
CommitRename();
|
||||
}
|
||||
|
||||
@@ -253,25 +258,24 @@ void HierarchyPanel::BeginRename(::XCEngine::Components::GameObject* gameObject)
|
||||
return;
|
||||
}
|
||||
|
||||
m_renaming = true;
|
||||
m_renamingEntity = gameObject;
|
||||
strcpy_s(m_renameBuffer, gameObject->GetName().c_str());
|
||||
m_renameJustStarted = true;
|
||||
m_renameState.Begin(gameObject->GetID(), gameObject->GetName().c_str());
|
||||
}
|
||||
|
||||
void HierarchyPanel::CommitRename() {
|
||||
if (m_renamingEntity && strlen(m_renameBuffer) > 0) {
|
||||
Commands::RenameEntity(*m_context, m_renamingEntity->GetID(), m_renameBuffer);
|
||||
if (!m_renameState.IsActive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
const uint64_t entityId = m_renameState.Item();
|
||||
if (!m_renameState.Empty() && m_context->GetSceneManager().GetEntity(entityId)) {
|
||||
Commands::RenameEntity(*m_context, entityId, m_renameState.Buffer());
|
||||
}
|
||||
|
||||
CancelRename();
|
||||
}
|
||||
|
||||
void HierarchyPanel::CancelRename() {
|
||||
m_renaming = false;
|
||||
m_renamingEntity = nullptr;
|
||||
m_renameBuffer[0] = '\0';
|
||||
m_renameJustStarted = false;
|
||||
m_renameState.Cancel();
|
||||
}
|
||||
|
||||
void HierarchyPanel::HandleDragDrop(::XCEngine::Components::GameObject* gameObject) {
|
||||
|
||||
Reference in New Issue
Block a user