#include "ui.hpp" #include "imgui.h" #include "administration.hpp" #include "locales.hpp" typedef enum { INVOICES = 0, EXPENSES = 1, CONTACTS = 2, REPORT_RESULTS = 3, REPORT_TAX = 4, PROJECTS = 5, SETTINGS = 6, END } dashboard_view_state; static dashboard_view_state dashboard_state = dashboard_view_state::INVOICES; void (*drawcalls[dashboard_view_state::END])(void) = { ui_draw_invoices, 0, ui_draw_contacts, 0, 0, ui_draw_projects, ui_draw_settings, }; void (*setupcalls[dashboard_view_state::END])(void) = { ui_setup_invoices, 0, ui_setup_contacts, 0, 0, ui_setup_projects, ui_setup_settings, }; static void set_dashboard_state(dashboard_view_state state) { dashboard_state = state; if (setupcalls[dashboard_state]) setupcalls[dashboard_state](); } void ui_draw_main() { // @localize if (ImGui::BeginMainMenuBar()) { if (ImGui::BeginMenu("File")) { if (ImGui::MenuItem("Open", "Ctrl+O")) { /* Handle Open */ } if (ImGui::MenuItem("Save", "Ctrl+S")) { /* Handle Save */ } ImGui::EndMenu(); } ImGui::EndMainMenuBar(); } ImGuiIO& io = ImGui::GetIO(); float menuBarHeight = ImGui::GetFrameHeight(); float statusBarHeight = 26.0f; float sidePanelWidth = 120.0f; ImGui::SetNextWindowPos(ImVec2(0, menuBarHeight)); ImGui::SetNextWindowSize(ImVec2(sidePanelWidth, io.DisplaySize.y - menuBarHeight - statusBarHeight)); // Side panel ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); ImGui::Begin("SidePanel", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse); { // Navigation buttons with custom styling ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.0f, 0.0f, 0.0f, 0.0f)); // Transparent background ImGui::PushStyleVar(ImGuiStyleVar_ButtonTextAlign, ImVec2(0.0f, 0.5f)); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0)); // Reduce spacing between buttons ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(10.0f, 0.0f)); float buttonWidth = sidePanelWidth; if (ImGui::Button(localize("nav.invoices"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::INVOICES); if (ImGui::Button(localize("nav.expenses"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::EXPENSES); if (ImGui::Button(localize("nav.contacts"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::CONTACTS); static bool reports_opened = false; if (ImGui::Button(localize("nav.reports"), ImVec2(buttonWidth, 24))) reports_opened = !reports_opened; if (reports_opened) { ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(20.0f, 0.0f)); if (ImGui::Button(localize("nav.reports.results"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::REPORT_RESULTS); if (ImGui::Button(localize("nav.reports.tax"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::REPORT_TAX); ImGui::PopStyleVar(); } if (ImGui::Button(localize("nav.projects"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::PROJECTS); if (ImGui::Button(localize("nav.settings"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::SETTINGS); ImGui::PopStyleColor(1); ImGui::PopStyleVar(3); } ImGui::End(); ImGui::PopStyleVar(); ImGui::SetNextWindowPos(ImVec2(sidePanelWidth, menuBarHeight)); ImGui::SetNextWindowSize(ImVec2(io.DisplaySize.x - sidePanelWidth, io.DisplaySize.y - menuBarHeight - statusBarHeight)); // Main content ImGui::Begin("AccountingMainWindow", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse); if (drawcalls[dashboard_state]) drawcalls[dashboard_state](); ui_helper_draw_toasts(); ImGui::End(); // Status bar. ImGui::SetNextWindowPos(ImVec2(0, io.DisplaySize.y - statusBarHeight)); ImGui::SetNextWindowSize(ImVec2(io.DisplaySize.x, statusBarHeight)); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(10, 3)); ImGui::Begin("StatusBar", nullptr, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoCollapse); char* path = administration_get_file_path(); if (strlen(path) == 0) { ImGui::Text("%s: %s", localize("ui.workingOn"), localize("ui.unsavedProject")); } else { ImGui::Text("%s: %s", localize("ui.workingOn"), administration_get_file_path()); } ImGui::End(); ImGui::PopStyleVar(); }