Added Copy/Paste of component values, scene name display, editor config #300
|
@ -81,126 +81,18 @@ namespace SHADE
|
||||||
|
|
||||||
if (ImGui::BeginMainMenuBar())
|
if (ImGui::BeginMainMenuBar())
|
||||||
{
|
{
|
||||||
if (ImGui::BeginMenu("File"))
|
DrawFileMenu();
|
||||||
{
|
DrawEditMenu();
|
||||||
if(ImGui::Selectable("New Scene"))
|
DrawScriptsMenu();
|
||||||
{
|
DrawWindowMenu();
|
||||||
SHSystemManager::GetSystem<SHEditor>()->NewScene();
|
DrawThemeMenu();
|
||||||
}
|
DrawLayoutMenu();
|
||||||
if(ImGui::Selectable("Save"))
|
DrawApplicationConfig();
|
||||||
{
|
|
||||||
SHSystemManager::GetSystem<SHEditor>()->SaveScene();
|
|
||||||
}
|
|
||||||
if(ImGui::Selectable("Load"))
|
|
||||||
{
|
|
||||||
//SHSystemManager::GetSystem<SHEditor>()->LoadScene()
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
if(ImGui::BeginMenu("Edit"))
|
|
||||||
{
|
|
||||||
ImGui::BeginDisabled(!SHCommandManager::GetUndoStackSize());
|
|
||||||
if(ImGui::Button(std::format("{} Undo", ICON_MD_UNDO).data()))
|
|
||||||
{
|
|
||||||
SHCommandManager::UndoCommand();
|
|
||||||
}
|
|
||||||
ImGui::EndDisabled();
|
|
||||||
ImGui::BeginDisabled(!SHCommandManager::GetRedoStackSize());
|
|
||||||
if(ImGui::Button(std::format("{} Redo", ICON_MD_REDO).data()))
|
|
||||||
{
|
|
||||||
SHCommandManager::RedoCommand();
|
|
||||||
}
|
|
||||||
ImGui::EndDisabled();
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
if (ImGui::BeginMenu("Scripts"))
|
|
||||||
{
|
|
||||||
if (ImGui::Selectable("Generate Visual Studio Project"))
|
|
||||||
{
|
|
||||||
auto* scriptEngine = static_cast<SHScriptEngine*>(SHSystemManager::GetSystem<SHScriptEngine>());
|
|
||||||
scriptEngine->GenerateScriptsCsProjFile();
|
|
||||||
}
|
|
||||||
ImGui::BeginDisabled(SHSystemManager::GetSystem<SHEditor>()->editorState != SHEditor::State::STOP);
|
|
||||||
if (ImGui::Selectable("Build Scripts - Debug"))
|
|
||||||
{
|
|
||||||
auto* scriptEngine = static_cast<SHScriptEngine*>(SHSystemManager::GetSystem<SHScriptEngine>());
|
|
||||||
SHSerialization::SerializeSceneToFile(SHSceneManager::GetCurrentSceneAssetID());
|
|
||||||
scriptEngine->BuildScriptAssembly(true, true);
|
|
||||||
SHSceneManager::RestartScene(SHSceneManager::GetCurrentSceneAssetID());
|
|
||||||
}
|
|
||||||
if (ImGui::Selectable("Build Scripts - Release"))
|
|
||||||
{
|
|
||||||
auto* scriptEngine = static_cast<SHScriptEngine*>(SHSystemManager::GetSystem<SHScriptEngine>());
|
|
||||||
SHSerialization::SerializeSceneToFile(SHSceneManager::GetCurrentSceneAssetID());
|
|
||||||
scriptEngine->BuildScriptAssembly(false, true);
|
|
||||||
SHSceneManager::RestartScene(SHSceneManager::GetCurrentSceneAssetID());
|
|
||||||
}
|
|
||||||
ImGui::EndDisabled();
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::BeginMenu("Window"))
|
std::string const sceneName{std::format("Current Scene: {}",SHSceneManager::GetSceneName().data())};
|
||||||
{
|
auto const size = ImGui::CalcTextSize(sceneName.data());
|
||||||
for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values)
|
ImGui::SetCursorPosX(ImGui::GetWindowWidth() - size.x - ImGui::GetStyle().FramePadding.x);
|
||||||
{
|
ImGui::Text("%s", sceneName.data());
|
||||||
if (window.get() != this)
|
|
||||||
ImGui::Checkbox(window->windowName.data(), &window->isOpen);
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
if (ImGui::BeginMenu("Theme"))
|
|
||||||
{
|
|
||||||
const auto styles = rttr::type::get<SHEditor::Style>().get_enumeration();
|
|
||||||
auto values = styles.get_values();
|
|
||||||
for (auto style : values)
|
|
||||||
{
|
|
||||||
if (ImGui::Selectable(style.to_string().c_str()))
|
|
||||||
{
|
|
||||||
if (auto editor = SHSystemManager::GetSystem<SHEditor>())
|
|
||||||
editor->SetStyle(style.convert<SHEditor::Style>());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
if(ImGui::BeginMenu("Layout"))
|
|
||||||
{
|
|
||||||
for(auto const& entry : layoutPaths)
|
|
||||||
{
|
|
||||||
if(ImGui::Selectable(entry.stem().string().c_str()))
|
|
||||||
{
|
|
||||||
ImGui::LoadIniSettingsFromDisk(entry.string().c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ImGui::BeginMenu("Application Config"))
|
|
||||||
{
|
|
||||||
auto& appConfig = SHConfigurationManager::applicationConfig;
|
|
||||||
ImGui::InputText("Window Title", &appConfig.windowTitle);
|
|
||||||
ImGui::Checkbox("Start in Fullscreen", &appConfig.startInFullScreen);
|
|
||||||
SHEditorWidgets::DragN<float, 2>("Window Size", { "Width", "Height" }, { &appConfig.windowSize.x, &appConfig.windowSize.y });
|
|
||||||
//ImGui::InputScalar("Starting Scene", ImGuiDataType_U32, &appConfig.startingSceneID);
|
|
||||||
auto sceneAsset = SHAssetManager::GetData<SHSceneAsset>(appConfig.startingSceneID);
|
|
||||||
|
|
||||||
if(ImGui::BeginCombo("Starting Scene", sceneAsset ? sceneAsset->name.data() : ""))
|
|
||||||
{
|
|
||||||
auto scenes = SHAssetManager::GetAllRecordOfType(AssetType::SCENE);
|
|
||||||
for(auto const& scene : scenes)
|
|
||||||
{
|
|
||||||
if(ImGui::Selectable(scene.name.data()))
|
|
||||||
{
|
|
||||||
appConfig.startingSceneID = scene.id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ImGui::EndCombo();
|
|
||||||
}
|
|
||||||
if (ImGui::Button("Save"))
|
|
||||||
{
|
|
||||||
SHConfigurationManager::SaveApplicationConfig();
|
|
||||||
}
|
|
||||||
ImGui::EndMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::EndMainMenuBar();
|
ImGui::EndMainMenuBar();
|
||||||
}
|
}
|
||||||
|
@ -267,4 +159,143 @@ namespace SHADE
|
||||||
ImGui::PopStyleVar(3);
|
ImGui::PopStyleVar(3);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
void SHEditorMenuBar::DrawFileMenu() noexcept
|
||||||
|
{
|
||||||
|
if (ImGui::BeginMenu("File"))
|
||||||
|
{
|
||||||
|
if (ImGui::Selectable("New Scene"))
|
||||||
|
{
|
||||||
|
SHSystemManager::GetSystem<SHEditor>()->NewScene();
|
||||||
|
}
|
||||||
|
if (ImGui::Selectable("Save"))
|
||||||
|
{
|
||||||
|
SHSystemManager::GetSystem<SHEditor>()->SaveScene();
|
||||||
|
}
|
||||||
|
if (ImGui::Selectable("Load"))
|
||||||
|
{
|
||||||
|
//SHSystemManager::GetSystem<SHEditor>()->LoadScene()
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void SHEditorMenuBar::DrawEditMenu() noexcept
|
||||||
|
{
|
||||||
|
if (ImGui::BeginMenu("Edit"))
|
||||||
|
{
|
||||||
|
ImGui::BeginDisabled(!SHCommandManager::GetUndoStackSize());
|
||||||
|
if (ImGui::Button(std::format("{} Undo", ICON_MD_UNDO).data()))
|
||||||
|
{
|
||||||
|
SHCommandManager::UndoCommand();
|
||||||
|
}
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
ImGui::BeginDisabled(!SHCommandManager::GetRedoStackSize());
|
||||||
|
if (ImGui::Button(std::format("{} Redo", ICON_MD_REDO).data()))
|
||||||
|
{
|
||||||
|
SHCommandManager::RedoCommand();
|
||||||
|
}
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void SHEditorMenuBar::DrawScriptsMenu() noexcept
|
||||||
|
{
|
||||||
|
if (ImGui::BeginMenu("Scripts"))
|
||||||
|
{
|
||||||
|
if (ImGui::Selectable("Generate Visual Studio Project"))
|
||||||
|
{
|
||||||
|
auto* scriptEngine = static_cast<SHScriptEngine*>(SHSystemManager::GetSystem<SHScriptEngine>());
|
||||||
|
scriptEngine->GenerateScriptsCsProjFile();
|
||||||
|
}
|
||||||
|
ImGui::BeginDisabled(SHSystemManager::GetSystem<SHEditor>()->editorState != SHEditor::State::STOP);
|
||||||
|
if (ImGui::Selectable("Build Scripts - Debug"))
|
||||||
|
{
|
||||||
|
auto* scriptEngine = static_cast<SHScriptEngine*>(SHSystemManager::GetSystem<SHScriptEngine>());
|
||||||
|
SHSerialization::SerializeSceneToFile(SHSceneManager::GetCurrentSceneAssetID());
|
||||||
|
scriptEngine->BuildScriptAssembly(true, true);
|
||||||
|
SHSceneManager::RestartScene(SHSceneManager::GetCurrentSceneAssetID());
|
||||||
|
}
|
||||||
|
if (ImGui::Selectable("Build Scripts - Release"))
|
||||||
|
{
|
||||||
|
auto* scriptEngine = static_cast<SHScriptEngine*>(SHSystemManager::GetSystem<SHScriptEngine>());
|
||||||
|
SHSerialization::SerializeSceneToFile(SHSceneManager::GetCurrentSceneAssetID());
|
||||||
|
scriptEngine->BuildScriptAssembly(false, true);
|
||||||
|
SHSceneManager::RestartScene(SHSceneManager::GetCurrentSceneAssetID());
|
||||||
|
}
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void SHEditorMenuBar::DrawWindowMenu() noexcept
|
||||||
|
{
|
||||||
|
if (ImGui::BeginMenu("Window"))
|
||||||
|
{
|
||||||
|
for (const auto& window : SHEditorWindowManager::editorWindows | std::views::values)
|
||||||
|
{
|
||||||
|
if (window.get() != this)
|
||||||
|
ImGui::Checkbox(window->windowName.data(), &window->isOpen);
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void SHEditorMenuBar::DrawThemeMenu() noexcept
|
||||||
|
{
|
||||||
|
if (ImGui::BeginMenu("Theme"))
|
||||||
|
{
|
||||||
|
const auto styles = rttr::type::get<SHEditor::Style>().get_enumeration();
|
||||||
|
auto values = styles.get_values();
|
||||||
|
for (auto style : values)
|
||||||
|
{
|
||||||
|
if (ImGui::Selectable(style.to_string().c_str()))
|
||||||
|
{
|
||||||
|
if (auto editor = SHSystemManager::GetSystem<SHEditor>())
|
||||||
|
editor->SetStyle(style.convert<SHEditor::Style>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void SHEditorMenuBar::DrawLayoutMenu() noexcept
|
||||||
|
{
|
||||||
|
if (ImGui::BeginMenu("Layout"))
|
||||||
|
{
|
||||||
|
for (auto const& entry : layoutPaths)
|
||||||
|
{
|
||||||
|
if (ImGui::Selectable(entry.stem().string().c_str()))
|
||||||
|
{
|
||||||
|
ImGui::LoadIniSettingsFromDisk(entry.string().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void SHEditorMenuBar::DrawApplicationConfig() noexcept
|
||||||
|
{
|
||||||
|
if (ImGui::BeginMenu("Application Config"))
|
||||||
|
{
|
||||||
|
auto& appConfig = SHConfigurationManager::applicationConfig;
|
||||||
|
ImGui::InputText("Window Title", &appConfig.windowTitle);
|
||||||
|
ImGui::Checkbox("Start in Fullscreen", &appConfig.startInFullScreen);
|
||||||
|
SHEditorWidgets::DragN<float, 2>("Window Size", { "Width", "Height" }, { &appConfig.windowSize.x, &appConfig.windowSize.y });
|
||||||
|
//ImGui::InputScalar("Starting Scene", ImGuiDataType_U32, &appConfig.startingSceneID);
|
||||||
|
auto sceneAsset = SHAssetManager::GetData<SHSceneAsset>(appConfig.startingSceneID);
|
||||||
|
|
||||||
|
if (ImGui::BeginCombo("Starting Scene", sceneAsset ? sceneAsset->name.data() : ""))
|
||||||
|
{
|
||||||
|
auto scenes = SHAssetManager::GetAllRecordOfType(AssetType::SCENE);
|
||||||
|
for (auto const& scene : scenes)
|
||||||
|
{
|
||||||
|
if (ImGui::Selectable(scene.name.data()))
|
||||||
|
{
|
||||||
|
appConfig.startingSceneID = scene.id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndCombo();
|
||||||
|
}
|
||||||
|
if (ImGui::Button("Save"))
|
||||||
|
{
|
||||||
|
SHConfigurationManager::SaveApplicationConfig();
|
||||||
|
}
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
}//namespace SHADE
|
}//namespace SHADE
|
||||||
|
|
|
@ -17,6 +17,15 @@ namespace SHADE
|
||||||
void DrawMainMenuBar() noexcept;
|
void DrawMainMenuBar() noexcept;
|
||||||
void DrawSecondaryBar() const noexcept;
|
void DrawSecondaryBar() const noexcept;
|
||||||
void DrawStatusBar() const noexcept;
|
void DrawStatusBar() const noexcept;
|
||||||
|
|
||||||
|
void DrawFileMenu() noexcept;
|
||||||
|
void DrawEditMenu() noexcept;
|
||||||
|
void DrawScriptsMenu() noexcept;
|
||||||
|
void DrawWindowMenu() noexcept;
|
||||||
|
void DrawThemeMenu() noexcept;
|
||||||
|
void DrawLayoutMenu() noexcept;
|
||||||
|
void DrawApplicationConfig() noexcept;
|
||||||
|
|
||||||
float menuBarHeight = 20.0f;
|
float menuBarHeight = 20.0f;
|
||||||
std::vector<std::filesystem::path> layoutPaths;
|
std::vector<std::filesystem::path> layoutPaths;
|
||||||
};//class SHEditorMenuBar
|
};//class SHEditorMenuBar
|
||||||
|
|
Loading…
Reference in New Issue