/** * @file main.cpp * @brief Program entry point and main loop. * * Copyright (C) 2021 Clyne Sullivan * * Distributed under the GNU GPL v3 or later. You should have received a copy of * the GNU General Public License along with this program. * If not, see . */ #include "imgui.h" #include "backends/imgui_impl_sdl.h" #include "backends/imgui_impl_opengl2.h" #include "config.h" #include "logview.h" #include "stmdsp.hpp" #include // Externs extern ImFont *font; extern bool guiInitialize(); extern void guiHandleEvents(bool& done); extern void guiShutdown(); extern void guiRender(void (*func)()); extern void fileRenderMenu(); extern void fileRenderDialog(); extern void fileScanTemplates(); extern void codeEditorInit(); extern void codeRenderMenu(); extern void codeRenderToolbar(); extern void codeRenderWidgets(); extern void deviceRenderMenu(); extern void deviceRenderToolbar(); // Globals that live here std::string tempFileName; bool done = false; stmdsp::device *m_device = nullptr; static LogView logView; void log(const std::string& str) { logView.AddLog(str); } int main(int, char **) { if (!guiInitialize()) return -1; fileScanTemplates(); codeEditorInit(); while (!done) { guiHandleEvents(done); // Start the new window frame and render the menu bar. ImGui_ImplOpenGL2_NewFrame(); ImGui_ImplSDL2_NewFrame(); ImGui::NewFrame(); if (ImGui::BeginMainMenuBar()) { fileRenderMenu(); deviceRenderMenu(); codeRenderMenu(); ImGui::EndMainMenuBar(); } // Begin the main view which the controls will be drawn onto. ImGui::SetNextWindowPos({0, 22}); ImGui::SetNextWindowSize({WINDOW_WIDTH, WINDOW_HEIGHT - 22 - 200}); ImGui::Begin("main", nullptr, ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoDecoration); ImGui::PushFont(font); // Render main controls (order is important). codeRenderToolbar(); deviceRenderToolbar(); fileRenderDialog(); codeRenderWidgets(); ImGui::SetNextWindowPos({0, WINDOW_HEIGHT - 200}); ImGui::SetNextWindowSize({WINDOW_WIDTH, 200}); logView.Draw("log", nullptr, ImGuiWindowFlags_NoDecoration); // Finish main view rendering. ImGui::PopFont(); ImGui::End(); // Draw everything to the screen. ImGui::Render(); guiRender([] { ImGui_ImplOpenGL2_RenderDrawData(ImGui::GetDrawData()); }); } guiShutdown(); return 0; }