Files
XCEngine/editor/src/panels/ProjectPanel.h

68 lines
2.2 KiB
C
Raw Normal View History

#pragma once
#include "Panel.h"
#include "Core/AssetItem.h"
2026-03-26 21:18:33 +08:00
#include "UI/PopupState.h"
#include "UI/TreeView.h"
namespace XCEngine {
namespace Editor {
class ProjectPanel : public Panel {
public:
ProjectPanel();
void Render() override;
void Initialize(const std::string& projectPath);
private:
2026-03-29 01:36:53 +08:00
struct AssetDragDropState {
bool dragging = false;
bool hoveredTarget = false;
bool hoveredValidTarget = false;
std::string sourcePath;
std::string deliveredSourcePath;
AssetItemPtr deliveredTarget;
void Reset() {
dragging = false;
hoveredTarget = false;
hoveredValidTarget = false;
sourcePath.clear();
deliveredSourcePath.clear();
deliveredTarget.reset();
}
};
struct AssetItemInteraction {
bool clicked = false;
bool contextRequested = false;
bool openRequested = false;
};
2026-03-29 01:36:53 +08:00
void BeginAssetDragDropFrame();
void RegisterFolderDropTarget(IProjectManager& manager, const AssetItemPtr& folder);
void FinalizeAssetDragDrop(IProjectManager& manager);
void BeginRename(const AssetItemPtr& item);
bool CommitRename(IProjectManager& manager);
void CancelRename();
void RenderToolbar();
void RenderFolderTreePane(IProjectManager& manager);
void RenderFolderTreeNode(IProjectManager& manager, const AssetItemPtr& folder, const std::string& currentFolderPath);
void RenderBrowserPane(IProjectManager& manager);
void RenderBrowserHeader(IProjectManager& manager);
AssetItemInteraction RenderAssetItem(const AssetItemPtr& item, bool isSelected);
static bool MatchesSearch(const AssetItemPtr& item, const std::string& search);
static bool IsCurrentTreeBranch(const std::string& currentFolderPath, const std::string& folderPath);
char m_searchBuffer[256] = "";
float m_navigationWidth = UI::ProjectNavigationDefaultWidth();
UI::TreeViewState m_folderTreeState;
2026-03-29 01:36:53 +08:00
UI::InlineTextEditState<std::string, 256> m_renameState;
UI::DeferredPopupState m_emptyContextMenu;
2026-03-26 23:52:05 +08:00
UI::TargetedPopupState<AssetItemPtr> m_itemContextMenu;
2026-03-29 01:36:53 +08:00
AssetDragDropState m_assetDragDropState;
};
}
2026-03-26 21:18:33 +08:00
}