121 lines
3.1 KiB
C++
121 lines
3.1 KiB
C++
#pragma once
|
|
|
|
#include "Core.h"
|
|
#include "StyleTokens.h"
|
|
|
|
#include <imgui.h>
|
|
|
|
namespace XCEngine {
|
|
namespace Editor {
|
|
namespace UI {
|
|
|
|
class PanelWindowScope {
|
|
public:
|
|
explicit PanelWindowScope(const char* name, ImGuiWindowFlags flags = ImGuiWindowFlags_None) {
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, PanelWindowPadding());
|
|
m_open = ImGui::Begin(name, nullptr, flags);
|
|
ImGui::PopStyleVar();
|
|
m_began = true;
|
|
}
|
|
|
|
~PanelWindowScope() {
|
|
if (m_began) {
|
|
ImGui::End();
|
|
}
|
|
}
|
|
|
|
PanelWindowScope(const PanelWindowScope&) = delete;
|
|
PanelWindowScope& operator=(const PanelWindowScope&) = delete;
|
|
|
|
bool IsOpen() const {
|
|
return m_open;
|
|
}
|
|
|
|
private:
|
|
bool m_began = false;
|
|
bool m_open = false;
|
|
};
|
|
|
|
class PanelToolbarScope {
|
|
public:
|
|
explicit PanelToolbarScope(
|
|
const char* id,
|
|
float height,
|
|
ImGuiWindowFlags flags = ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse,
|
|
bool drawBottomBorder = true,
|
|
ImVec2 padding = ToolbarPadding(),
|
|
ImVec2 itemSpacing = ToolbarItemSpacing())
|
|
: m_drawBottomBorder(drawBottomBorder) {
|
|
ImGui::PushStyleColor(ImGuiCol_ChildBg, ToolbarBackgroundColor());
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, padding);
|
|
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, itemSpacing);
|
|
m_open = ImGui::BeginChild(id, ImVec2(0.0f, height), false, flags);
|
|
m_began = true;
|
|
}
|
|
|
|
~PanelToolbarScope() {
|
|
if (m_began) {
|
|
if (m_drawBottomBorder) {
|
|
DrawCurrentWindowBottomBorder();
|
|
}
|
|
ImGui::EndChild();
|
|
ImGui::PopStyleVar(2);
|
|
ImGui::PopStyleColor();
|
|
}
|
|
}
|
|
|
|
PanelToolbarScope(const PanelToolbarScope&) = delete;
|
|
PanelToolbarScope& operator=(const PanelToolbarScope&) = delete;
|
|
|
|
bool IsOpen() const {
|
|
return m_open;
|
|
}
|
|
|
|
private:
|
|
bool m_began = false;
|
|
bool m_open = false;
|
|
bool m_drawBottomBorder = true;
|
|
};
|
|
|
|
class PanelContentScope {
|
|
public:
|
|
explicit PanelContentScope(
|
|
const char* id,
|
|
ImVec2 padding = DefaultPanelContentPadding(),
|
|
ImGuiWindowFlags flags = ImGuiWindowFlags_None,
|
|
bool pushItemSpacing = false,
|
|
ImVec2 itemSpacing = ImVec2(0.0f, 0.0f)) {
|
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, padding);
|
|
m_styleVarCount = 1;
|
|
if (pushItemSpacing) {
|
|
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, itemSpacing);
|
|
++m_styleVarCount;
|
|
}
|
|
m_open = ImGui::BeginChild(id, ImVec2(0.0f, 0.0f), false, flags);
|
|
m_began = true;
|
|
}
|
|
|
|
~PanelContentScope() {
|
|
if (m_began) {
|
|
ImGui::EndChild();
|
|
ImGui::PopStyleVar(m_styleVarCount);
|
|
}
|
|
}
|
|
|
|
PanelContentScope(const PanelContentScope&) = delete;
|
|
PanelContentScope& operator=(const PanelContentScope&) = delete;
|
|
|
|
bool IsOpen() const {
|
|
return m_open;
|
|
}
|
|
|
|
private:
|
|
bool m_began = false;
|
|
bool m_open = false;
|
|
int m_styleVarCount = 0;
|
|
};
|
|
|
|
}
|
|
}
|
|
}
|