diff --git a/.gitmodules b/.gitmodules index c6b6614..dadebc6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -17,3 +17,6 @@ [submodule "Navigator/vendor/asio"] path = Navigator/vendor/asio url = https://github.com/chriskohlhoff/asio.git +[submodule "Navigator/vendor/IconFontCppHeaders"] + path = Navigator/vendor/IconFontCppHeaders + url = https://github.com/juliettef/IconFontCppHeaders.git diff --git a/NavProject/fonts/LICENSE.txt b/NavProject/fonts/LICENSE.txt new file mode 100644 index 0000000..d46aa01 --- /dev/null +++ b/NavProject/fonts/LICENSE.txt @@ -0,0 +1,34 @@ +Font Awesome Free License +------------------------- + +Font Awesome Free is free, open source, and GPL friendly. You can use it for +commercial projects, open source projects, or really almost whatever you want. +Full Font Awesome Free license: https://fontawesome.com/license/free. + +# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) +In the Font Awesome Free download, the CC BY 4.0 license applies to all icons +packaged as SVG and JS file types. + +# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL) +In the Font Awesome Free download, the SIL OFL license applies to all icons +packaged as web and desktop font files. + +# Code: MIT License (https://opensource.org/licenses/MIT) +In the Font Awesome Free download, the MIT license applies to all non-font and +non-icon files. + +# Attribution +Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font +Awesome Free files already contain embedded comments with sufficient +attribution, so you shouldn't need to do anything additional when using these +files normally. + +We've kept attribution comments terse, so we ask that you do not actively work +to remove them from files, especially code. They're a great way for folks to +learn about Font Awesome. + +# Brand Icons +All brand icons are trademarks of their respective owners. The use of these +trademarks does not indicate endorsement of the trademark holder by Font +Awesome, nor vice versa. **Please do not use brand logos for any purpose except +to represent the company, product, or service to which they refer.** \ No newline at end of file diff --git a/NavProject/fonts/fa-regular-400.ttf b/NavProject/fonts/fa-regular-400.ttf new file mode 100644 index 0000000..6be32ef Binary files /dev/null and b/NavProject/fonts/fa-regular-400.ttf differ diff --git a/NavProject/fonts/fa-solid-900.ttf b/NavProject/fonts/fa-solid-900.ttf new file mode 100644 index 0000000..4dd1199 Binary files /dev/null and b/NavProject/fonts/fa-solid-900.ttf differ diff --git a/Navigator/src/Navigator.h b/Navigator/src/Navigator.h index 1a54fd1..283c286 100644 --- a/Navigator/src/Navigator.h +++ b/Navigator/src/Navigator.h @@ -20,5 +20,8 @@ #include "Navigator/Logger.h" #include "Navigator/Application.h" #include "Navigator/Physics/PhysicsLayer.h" +#include "Navigator/Layer.h" +#include "Navigator/Events/Event.h" +#include "Navigator/Renderer/Renderer.h" #endif diff --git a/Navigator/src/Navigator/Editor/EditorLayer.cpp b/Navigator/src/Navigator/Editor/EditorLayer.cpp index 80cebc4..35e7bbf 100644 --- a/Navigator/src/Navigator/Editor/EditorLayer.cpp +++ b/Navigator/src/Navigator/Editor/EditorLayer.cpp @@ -5,6 +5,8 @@ #include "Navigator/Application.h" #include "Navigator/SpectrumSerializer.h" +#include "IconsFontAwesome5.h" + namespace Navigator { EditorLayer::EditorLayer() : @@ -81,15 +83,15 @@ namespace Navigator { { if(ImGui::BeginMenu("File")) { - if(ImGui::MenuItem("Open")) + if(ImGui::MenuItem(ICON_FA_FOLDER_OPEN "\tOpen")) { m_fileDialog.SetOpenFileDialog(true); } - if(ImGui::MenuItem("Save")) + if(ImGui::MenuItem(ICON_FA_SAVE "\tSave")) { m_fileDialog.SetSaveFileDialog(true); } - if (ImGui::MenuItem("Exit")) + if (ImGui::MenuItem(ICON_FA_TIMES_CIRCLE "\tExit")) { Application::Get().Close(); } @@ -97,11 +99,11 @@ namespace Navigator { } if (ImGui::BeginMenu("Data Source")) { - if (ImGui::MenuItem("Attach Source")) + if (ImGui::MenuItem(ICON_FA_LINK "\tAttach Source")) { m_sourceDialog.OpenSourceDialog(); } - if (ImGui::MenuItem("Detach Source")) + if (ImGui::MenuItem(ICON_FA_UNLINK "\tDetach Source")) { PhysicsStopEvent event; m_callbackFunc(event); @@ -110,7 +112,7 @@ namespace Navigator { } if (ImGui::BeginMenu("Add")) { - if (ImGui::MenuItem("Spectrum")) + if (ImGui::MenuItem(ICON_FA_CHART_BAR "\tSpectrum")) { m_spectrumDialog.SetSpectrumDialog(); } @@ -118,11 +120,11 @@ namespace Navigator { } if (ImGui::BeginMenu("Remove")) { - if (ImGui::MenuItem("Spectrum")) + if (ImGui::MenuItem(ICON_FA_CHART_BAR "\tSpectrum")) { m_removeHistogram = true; } - if (ImGui::MenuItem("Cut")) + if (ImGui::MenuItem(ICON_FA_CUT "\tCut")) { m_removeCut = true; } @@ -156,7 +158,7 @@ namespace Navigator { m_spectrumPanel.OnImGuiRender(); - if (ImGui::Begin("Spectra")) + if (ImGui::Begin(ICON_FA_CHART_BAR " Spectra")) { for (auto& gram : histoMap) { @@ -188,7 +190,7 @@ namespace Navigator { ImGui::End(); } - if(ImGui::Begin("Cuts")) + if(ImGui::Begin(ICON_FA_CUT " Cuts")) { for(auto& cut : cutMap) { @@ -233,6 +235,7 @@ namespace Navigator { histMap.RemoveHistogram(selectedGram); ImGui::CloseCurrentPopup(); } + ImGui::SameLine(); if (ImGui::Button("Cancel")) { ImGui::CloseCurrentPopup(); @@ -269,6 +272,7 @@ namespace Navigator { cutMap.RemoveCut(selectedCut); ImGui::CloseCurrentPopup(); } + ImGui::SameLine(); if (ImGui::Button("Cancel")) { ImGui::CloseCurrentPopup(); diff --git a/Navigator/src/Navigator/Editor/FileDialog.cpp b/Navigator/src/Navigator/Editor/FileDialog.cpp index 0dc9667..d239202 100644 --- a/Navigator/src/Navigator/Editor/FileDialog.cpp +++ b/Navigator/src/Navigator/Editor/FileDialog.cpp @@ -1,5 +1,6 @@ #include "FileDialog.h" #include "misc/cpp/imgui_stdlib.h" +#include "IconsFontAwesome5.h" namespace Navigator { @@ -14,7 +15,7 @@ namespace Navigator { } FileDialog::FileDialog() : - m_currentPath(std::filesystem::current_path()), m_openFileName("Open File"), m_saveFileName("Save File"), m_openDirName("Open Directory"), + m_currentPath(std::filesystem::current_path()), m_openFileName(ICON_FA_FILE " Open File"), m_saveFileName(ICON_FA_SAVE " Save File"), m_openDirName(ICON_FA_FOLDER " Open Directory"), m_selectedItem(""), m_openFileFlag(false), m_openDirFlag(false), m_saveFileFlag(false) { table_flags = ImGuiTableFlags_BordersH | ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_RowBg; @@ -56,7 +57,7 @@ namespace Navigator { ImGui::TableHeadersRow(); ImGui::TableNextRow(); ImGui::TableNextColumn(); - if (ImGui::Selectable("[DIR] ..", false, select_flags)) + if (ImGui::Selectable(ICON_FA_FOLDER " ..", false, select_flags)) { m_selectedItem.clear(); m_currentPath.append(".."); @@ -68,7 +69,7 @@ namespace Navigator { if (entry.is_directory()) { ImGui::TableNextRow(); - text = "[DIR] " + std::filesystem::relative(entry.path(), m_currentPath).string(); + text = ICON_FA_FOLDER " " + std::filesystem::relative(entry.path(), m_currentPath).string(); ImGui::TableNextColumn(); if (ImGui::Selectable(text.c_str(), false, select_flags)) { @@ -81,7 +82,7 @@ namespace Navigator { else if(entry.path().filename().extension() == ext) { ImGui::TableNextRow(); - text = "[FILE] " + entry.path().filename().string(); + text = ICON_FA_FILE " " + entry.path().filename().string(); ImGui::TableNextColumn(); if (ImGui::Selectable(text.c_str(), false, select_flags)) m_selectedItem = entry.path().filename().string(); @@ -131,7 +132,7 @@ namespace Navigator { ImGui::TableHeadersRow(); ImGui::TableNextRow(); ImGui::TableNextColumn(); - if (ImGui::Selectable("[DIR] ..", false, select_flags)) + if (ImGui::Selectable(ICON_FA_FOLDER " ..", false, select_flags)) { m_selectedItem.clear(); m_currentPath.append(".."); @@ -143,7 +144,7 @@ namespace Navigator { if (entry.is_directory()) { ImGui::TableNextRow(); - text = "[DIR] " + std::filesystem::relative(entry.path(), m_currentPath).string(); + text = ICON_FA_FOLDER " " + std::filesystem::relative(entry.path(), m_currentPath).string(); ImGui::TableNextColumn(); if (ImGui::Selectable(text.c_str(), false, select_flags)) { @@ -156,7 +157,7 @@ namespace Navigator { else if (entry.path().filename().extension() == ext) { ImGui::TableNextRow(); - text = "[FILE] " + entry.path().filename().string(); + text = ICON_FA_FILE " " + entry.path().filename().string(); ImGui::TableNextColumn(); if (ImGui::Selectable(text.c_str(), false, select_flags)) m_selectedItem = entry.path().filename().string(); @@ -201,7 +202,7 @@ namespace Navigator { ImGui::TableHeadersRow(); ImGui::TableNextRow(); ImGui::TableNextColumn(); - if (ImGui::Selectable("[DIR] ..", false, select_flags)) + if (ImGui::Selectable(ICON_FA_FOLDER " ..", false, select_flags)) { m_currentPath.append(".."); m_selectedItem = m_currentPath.string(); @@ -213,7 +214,7 @@ namespace Navigator { ImGui::TableNextRow(); if (entry.is_directory()) { - text = "[DIR] " + std::filesystem::relative(entry.path(), m_currentPath).string(); + text = ICON_FA_FOLDER " " + std::filesystem::relative(entry.path(), m_currentPath).string(); ImGui::TableNextColumn(); if (ImGui::Selectable(text.c_str(), false, select_flags)) { @@ -225,7 +226,7 @@ namespace Navigator { } else { - text = "[FILE] " + entry.path().filename().string(); + text = ICON_FA_FILE " " + entry.path().filename().string(); ImGui::TableNextColumn(); ImGui::Text(text.c_str()); ImGui::TableNextColumn(); diff --git a/Navigator/src/Navigator/Editor/SourceDialog.cpp b/Navigator/src/Navigator/Editor/SourceDialog.cpp index 719a393..442abf3 100644 --- a/Navigator/src/Navigator/Editor/SourceDialog.cpp +++ b/Navigator/src/Navigator/Editor/SourceDialog.cpp @@ -5,6 +5,7 @@ #include "imgui.h" #include "misc/cpp/imgui_stdlib.h" +#include "IconsFontAwesome5.h" namespace Navigator { @@ -32,9 +33,9 @@ namespace Navigator { m_chosenLocation = ""; m_chosenPort = "51489"; m_chosenWindow = 2000000; - ImGui::OpenPopup("Attach Source"); + ImGui::OpenPopup(ICON_FA_LINK " Attach Source"); } - if (ImGui::BeginPopupModal("Attach Source")) + if (ImGui::BeginPopupModal(ICON_FA_LINK " Attach Source")) { if (ImGui::BeginCombo("Source Type", ConvertDataSourceTypeToString(m_chosenType).c_str())) { @@ -64,7 +65,7 @@ namespace Navigator { if (temp != "") m_chosenLocation = temp; } - ImGui::InputInt("Coincidence Window (ps)", &m_chosenWindow); + ImGui::InputInt("Coinc. Window (ps)", &m_chosenWindow); if (ImGui::Button("Ok")) @@ -73,6 +74,7 @@ namespace Navigator { Application::Get().OnEvent(event); ImGui::CloseCurrentPopup(); } + ImGui::SameLine(); if (ImGui::Button("Cancel")) { ImGui::CloseCurrentPopup(); diff --git a/Navigator/src/Navigator/Editor/SpectrumDialog.cpp b/Navigator/src/Navigator/Editor/SpectrumDialog.cpp index d082ca0..45feccc 100644 --- a/Navigator/src/Navigator/Editor/SpectrumDialog.cpp +++ b/Navigator/src/Navigator/Editor/SpectrumDialog.cpp @@ -2,6 +2,8 @@ #include "misc/cpp/imgui_stdlib.h" +#include "IconsFontAwesome5.h" + namespace Navigator { SpectrumDialog::SpectrumDialog() @@ -22,10 +24,10 @@ namespace Navigator { m_newParams = m_blank; m_openFlag = false; dims = 1; - ImGui::OpenPopup("New Spectrum Dialog"); + ImGui::OpenPopup(ICON_FA_CHART_BAR " New Spectrum Dialog"); } - if (ImGui::BeginPopupModal("New Spectrum Dialog")) + if (ImGui::BeginPopupModal(ICON_FA_CHART_BAR " New Spectrum Dialog")) { ParameterMap& parMap = ParameterMap::GetInstance(); ImGui::InputText("Spectrum Name", &m_newParams.name); @@ -36,7 +38,7 @@ namespace Navigator { ImGui::TableNextRow(); ImGui::TableNextColumn(); - if (ImGui::BeginCombo("X Parameter", m_newParams.x_par.c_str())) + if (ImGui::BeginCombo("X Param.", m_newParams.x_par.c_str())) { for (auto& params : parMap) { @@ -57,7 +59,7 @@ namespace Navigator { ImGui::TableNextRow(); ImGui::TableNextColumn(); - if (ImGui::BeginCombo("Y Parameter", m_newParams.y_par.c_str())) + if (ImGui::BeginCombo("Y Param.", m_newParams.y_par.c_str())) { for (auto& params : parMap) { diff --git a/Navigator/src/Navigator/Editor/SpectrumPanel.cpp b/Navigator/src/Navigator/Editor/SpectrumPanel.cpp index 045b330..73f0ade 100644 --- a/Navigator/src/Navigator/Editor/SpectrumPanel.cpp +++ b/Navigator/src/Navigator/Editor/SpectrumPanel.cpp @@ -1,6 +1,7 @@ #include "SpectrumPanel.h" #include "implot.h" #include "misc/cpp/imgui_stdlib.h" +#include "IconsFontAwesome5.h" namespace Navigator { @@ -24,14 +25,14 @@ namespace Navigator { { if (m_zoomedFlag && m_zoomedGram != "") { - if(ImGui::Button("Draw Cut")) + if(ImGui::Button(ICON_FA_CUT " Draw Cut")) { m_newCutParams = CutParams(); m_newCutX.resize(0); m_newCutY.resize(0); - ImGui::OpenPopup("New Cut Dialog"); + ImGui::OpenPopup(ICON_FA_CUT " New Cut Dialog"); } - if(ImGui::BeginPopupModal("New Cut Dialog")) + if(ImGui::BeginPopupModal(ICON_FA_CUT " New Cut Dialog")) { auto& zoomed_params = histMap.GetHistogramParams(m_zoomedGram); m_newCutParams.x_par = zoomed_params.x_par; @@ -44,6 +45,7 @@ namespace Navigator { m_cutModeFlag = true; ImGui::CloseCurrentPopup(); } + ImGui::SameLine(); if(ImGui::Button("Cancel")) { ImGui::CloseCurrentPopup(); @@ -114,6 +116,7 @@ namespace Navigator { histMap.AddCutToHistogramDraw(m_newCutParams.name, m_zoomedGram); ImGui::CloseCurrentPopup(); } + ImGui::SameLine(); if (ImGui::Button("No")) { ImGui::CloseCurrentPopup(); diff --git a/Navigator/src/Navigator/ImGui/ImGuiLayer.cpp b/Navigator/src/Navigator/ImGui/ImGuiLayer.cpp index 4693f53..a9d9e2d 100644 --- a/Navigator/src/Navigator/ImGui/ImGuiLayer.cpp +++ b/Navigator/src/Navigator/ImGui/ImGuiLayer.cpp @@ -9,6 +9,7 @@ #include #include +#include "IconsFontAwesome5.h" namespace Navigator { @@ -46,6 +47,15 @@ namespace Navigator { style.Colors[ImGuiCol_WindowBg].w = 1.0f; } + io.Fonts->AddFontDefault(); + + ImFontConfig config; + config.MergeMode = true; + config.GlyphMinAdvanceX = 13.0f; // Use if you want to make the icon monospaced + config.PixelSnapH = true; + static const ImWchar icon_ranges[] = { ICON_MIN_FA, ICON_MAX_FA, 0 }; + io.Fonts->AddFontFromFileTTF("fonts/fa-solid-900.ttf", 15.0f, &config, icon_ranges); + Application& app = Application::Get(); GLFWwindow* window = static_cast(app.GetWindow().GetNativeWindow()); diff --git a/Navigator/vendor/IconFontCppHeaders b/Navigator/vendor/IconFontCppHeaders new file mode 160000 index 0000000..8a7a57f --- /dev/null +++ b/Navigator/vendor/IconFontCppHeaders @@ -0,0 +1 @@ +Subproject commit 8a7a57fa7b4b39b9f8436e3227ced13624028568 diff --git a/premake5.lua b/premake5.lua index 913476d..9085df9 100644 --- a/premake5.lua +++ b/premake5.lua @@ -17,6 +17,7 @@ IncludeDirs["glad"] = "Navigator/vendor/glad/include" IncludeDirs["ImPlot"] = "Navigator/vendor/implot" IncludeDirs["glm"] = "Navigator/vendor/glm" IncludeDirs["asio"] = "Navigator/vendor/asio/asio/include" +IncludeDirs["IconFonts"] = "Navigator/vendor/IconFontCppHeaders" include "Navigator/vendor/glfw" include "Navigator/vendor/imgui" @@ -46,7 +47,8 @@ project "Navigator" "%{IncludeDirs.glad}", "%{IncludeDirs.ImPlot}", "%{IncludeDirs.glm}", - "%{IncludeDirs.asio}" + "%{IncludeDirs.asio}", + "%{IncludeDirs.IconFonts}" } filter {} @@ -58,7 +60,8 @@ project "Navigator" "%{IncludeDirs.glad}", "%{IncludeDirs.ImPlot}", "%{IncludeDirs.glm}", - "%{IncludeDirs.asio}" + "%{IncludeDirs.asio}", + "%{IncludeDirs.IconFonts}" } @@ -133,7 +136,6 @@ project "NavProject" kind "ConsoleApp" language "C++" cppdialect "C++17" - staticruntime "on" targetdir ("bin/" .. outputdir .. "/%{prj.name}") objdir ("bin-int/" .. outputdir .. "/%{prj.name}") @@ -141,24 +143,29 @@ project "NavProject" "NavProject/main.cpp" } - includedirs { "Navigator/src", "Navigator/src/Navigator", "Navigator/vendor/spdlog/include/", - "Navigator/vendor/implot/", - "Navigator/vendor", + "%{IncludeDirs.ImPlot}", + "%{IncludeDirs.ImGui}", + "%{IncludeDirs.glad}", + "%{IncludeDirs.glfw}", "%{IncludeDirs.glm}", - "%{IncludeDirs.asio}" + "%{IncludeDirs.asio}", + "%{IncludeDirs.IconFonts}" } links { "Navigator" } - systemversion "latest" + postbuildcommands { + (" {COPYDIR} fonts %{cfg.targetdir} ") + } + filter "system:macosx" defines "NAV_APPLE" sysincludedirs { @@ -167,7 +174,9 @@ project "NavProject" "%{IncludeDirs.ImGui}", "%{IncludeDirs.glad}", "%{IncludeDirs.ImPlot}", - "%{IncludeDirs.glm}" + "%{IncludeDirs.glm}", + "%{IncludeDirs.asio}", + "%{IncludeDirs.IconFonts}" } filter "system:windows" defines "NAV_WINDOWS"