From 62ce9e02d81a5d15f5f0d8383e9cafaade190580 Mon Sep 17 00:00:00 2001 From: doralitze <doralitze@chaotikum.org> Date: Tue, 18 Jul 2023 14:15:23 +0200 Subject: [PATCH] add: gui structure skeleton --- src/app/rmrf.cpp | 9 +- src/ui-imgui/graphics_context_gl3.cpp | 2 +- ...context_gl3.h => graphics_context_gl3.hpp} | 0 src/ui-imgui/imgui_application.cpp | 91 +++++++++++++++++++ src/ui-imgui/imgui_application.hpp | 44 +++++++++ src/ui-imgui/imgui_theme.cpp | 2 +- .../{imgui_theme.h => imgui_theme.hpp} | 0 7 files changed, 144 insertions(+), 4 deletions(-) rename src/ui-imgui/{graphics_context_gl3.h => graphics_context_gl3.hpp} (100%) create mode 100644 src/ui-imgui/imgui_application.cpp create mode 100644 src/ui-imgui/imgui_application.hpp rename src/ui-imgui/{imgui_theme.h => imgui_theme.hpp} (100%) diff --git a/src/app/rmrf.cpp b/src/app/rmrf.cpp index d1a0f63..858efed 100644 --- a/src/app/rmrf.cpp +++ b/src/app/rmrf.cpp @@ -3,16 +3,21 @@ // #include "macros.hpp" -#include "ui-imgui/graphics_context_gl3.h" +#include "ui-imgui/graphics_context_gl3.hpp" +#include "ui-imgui/imgui_application.hpp" int main(int argc, char *argv[], char *env[]) { // TODO later use command line arguments as the ncurses app MARK_UNUSED(argc); MARK_UNUSED(argv); MARK_UNUSED(env); - graphics_context_gl3 context(gui_style::DARK); + rmrf::ui::graphics_context_gl3 context(gui_style::DARK); + + // TODO start event thread and open post offices + rmrf::ui::imgui_application app; while(!context.should_application_close()) { + app.render(); context.perform_mainloop_actions(); } diff --git a/src/ui-imgui/graphics_context_gl3.cpp b/src/ui-imgui/graphics_context_gl3.cpp index 34d7d3b..6101d19 100644 --- a/src/ui-imgui/graphics_context_gl3.cpp +++ b/src/ui-imgui/graphics_context_gl3.cpp @@ -2,7 +2,7 @@ // Created by Doralitze on 17.07.23. // -#include "graphics_context_gl3.h" +#include "graphics_context_gl3.hpp" #include <iostream> diff --git a/src/ui-imgui/graphics_context_gl3.h b/src/ui-imgui/graphics_context_gl3.hpp similarity index 100% rename from src/ui-imgui/graphics_context_gl3.h rename to src/ui-imgui/graphics_context_gl3.hpp diff --git a/src/ui-imgui/imgui_application.cpp b/src/ui-imgui/imgui_application.cpp new file mode 100644 index 0000000..caf482c --- /dev/null +++ b/src/ui-imgui/imgui_application.cpp @@ -0,0 +1,91 @@ +// +// Created by Leon Dietrich on 18.07.23. +// + +#include "imgui_application.hpp" + +#include "lib/imgui/imgui.h" + +namespace rmrf { + namespace ui { + + imgui_application::imgui_application() { + + } + + void imgui_application::render() { + // TODO check if the window was resized + ImGUI::Begin(this->window_title.c_str()); + render_head_toolbar(); + if(this->side_panel_displayed) { + render_sidepanel(); + } + switch(this->open_window) { + default: + render_exception_window(); + break; + case window_state::INBOX: + render_inbox(); + break; + case window_state::READ_MAIL: + render_read_mail(); + break; + case window_state::COMPOSE: + render_send_mail_dialog(); + break; + case window_state::SEARCH_RESULTS: + render_search_results_dialog(); + break; + case window_state::SETTINGS: + render_settings_panel(); + break; + } + render_footer(); + ImGUI::End(); + } + + void imgui_application::window_resized() { + // TODO disable side panel if window became too small + } + + void imgui_application::render_exception_window() { + ImGui::Text("Something went wrong."); + } + + void imgui_application::render_head_toolbar() { + // TODO display title of current page + // TODO display back button + // TODO display side panel toggle button + } + + void imgui_application::render_sidepanel() { + // TODO display navigation structure + // TODO display search text box + } + + void imgui_application::render_footer() { + // TODO display progress bar if applicable + } + + void imgui_application::render_inbox() { + // TODO draw list of mails + } + + void imgui_application::render_read_mail() { + // + } + + void imgui_application::render_send_mail_dialog() { + // + } + + void imgui_application::render_search_results_dialog() { + // + } + + void imgui_application::render_settings_panel() { + // + } + + } // rmrf +} // ui \ No newline at end of file diff --git a/src/ui-imgui/imgui_application.hpp b/src/ui-imgui/imgui_application.hpp new file mode 100644 index 0000000..69e2ac0 --- /dev/null +++ b/src/ui-imgui/imgui_application.hpp @@ -0,0 +1,44 @@ +// +// Created by Doralitze on 18.07.23. +// + +#pragma once + +#include <cstdint> +#include <string> + +namespace rmrf::ui { + + enum class window_state : uint8_t { + INBOX, + READ_MAIL, + COMPOSE, + SEARCH_RESULTS, + SETTINGS, + }; + + class imgui_application { + window_state open_window = window_state::INBOX; + bool side_panel_displayed = false; + std::string window_title = "RMRF"; + public: + imgui_application(); + + void render(); + private: + void window_resized(); + + void render_head_toolbar(); + void render_sidepanel(); + void render_footer(); + + void render_exception_window(); + void render_inbox(); + void render_read_mail(); + void render_send_mail_dialog(); + void render_search_results_dialog(); + void render_settings_panel(); + }; + +} + diff --git a/src/ui-imgui/imgui_theme.cpp b/src/ui-imgui/imgui_theme.cpp index 523ecb3..f37cfd3 100644 --- a/src/ui-imgui/imgui_theme.cpp +++ b/src/ui-imgui/imgui_theme.cpp @@ -2,7 +2,7 @@ // Created by Leon Dietrich on 17.07.23. // -#include "imgui_theme.h" +#include "imgui_theme.hpp" namespace Spectrum { const float CHECKBOX_BORDER_SIZE = 2.0f; diff --git a/src/ui-imgui/imgui_theme.h b/src/ui-imgui/imgui_theme.hpp similarity index 100% rename from src/ui-imgui/imgui_theme.h rename to src/ui-imgui/imgui_theme.hpp -- GitLab