diff options
Diffstat (limited to 'src/views/dashboard.cpp')
| -rw-r--r-- | src/views/dashboard.cpp | 75 |
1 files changed, 60 insertions, 15 deletions
diff --git a/src/views/dashboard.cpp b/src/views/dashboard.cpp index 16d31c4..45658b0 100644 --- a/src/views/dashboard.cpp +++ b/src/views/dashboard.cpp @@ -2,6 +2,28 @@ #include "imgui.h" +typedef enum +{ + INVOICES = 0, + EXPENSES = 1, + CONTACTS = 2, + REPORT_RESULTS = 3, + REPORT_TAX = 4, + PROJECTS = 5, + + END +} dashboard_view_state; + +static dashboard_view_state view_state = dashboard_view_state::INVOICES; +void (*drawcalls[dashboard_view_state::END])(void) = { + 0, + 0, + show_contacts, + 0, + 0, + 0, +}; + void show_dashboard() { if (ImGui::BeginMainMenuBar()) @@ -19,27 +41,50 @@ void show_dashboard() ImGuiIO& io = ImGui::GetIO(); float menuBarHeight = ImGui::GetFrameHeight(); float statusBarHeight = 26.0f; + float sidePanelWidth = 120.0f; ImGui::SetNextWindowPos(ImVec2(0, menuBarHeight)); - ImGui::SetNextWindowSize(ImVec2(io.DisplaySize.x, io.DisplaySize.y - menuBarHeight - statusBarHeight)); + ImGui::SetNextWindowSize(ImVec2(sidePanelWidth, io.DisplaySize.y - menuBarHeight - statusBarHeight)); - ImGui::Begin("AccountingMainWindow", nullptr, ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse); + // 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))) view_state = dashboard_view_state::INVOICES; + if (ImGui::Button(localize("nav.expenses"), ImVec2(buttonWidth, 24))) view_state = dashboard_view_state::EXPENSES; + if (ImGui::Button(localize("nav.contacts"), ImVec2(buttonWidth, 24))) view_state = dashboard_view_state::CONTACTS; - ImGui::AlignTextToFramePadding(); - const char* names[3] = { "Incoming", "Outgoing", "Contacts" }; - void (*drawcalls[3])(void) = { show_contacts, show_contacts, show_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))) view_state = dashboard_view_state::REPORT_RESULTS; + if (ImGui::Button(localize("nav.reports.tax"), ImVec2(buttonWidth, 24))) view_state = dashboard_view_state::REPORT_TAX; + ImGui::PopStyleVar(); + } - if (ImGui::BeginTabBar("mainNavigationTabBar", 0)) - { - for (int n = 0; n < IM_ARRAYSIZE(names); n++) - if (ImGui::BeginTabItem(names[n], 0, ImGuiTabItemFlags_None)) - { - ImGui::Spacing(); - drawcalls[n](); - ImGui::EndTabItem(); - } - ImGui::EndTabBar(); + if (ImGui::Button(localize("nav.Projects"), ImVec2(buttonWidth, 24))) view_state = dashboard_view_state::PROJECTS; + + 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[view_state]) drawcalls[view_state](); ImGui::End(); // Status bar. |
