diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-03 21:06:20 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-03 21:06:20 +0200 |
| commit | 550b3bf614d8eeb116cceadf3e180ca7a4490976 (patch) | |
| tree | 032e2d7468c590a7b8a9db0e30bfff970761f5f2 | |
| parent | 853bbb3752a5fa2f58ef456ffb6e3a552e13cb11 (diff) | |
navigation work
| -rw-r--r-- | src/locales/en.cpp | 10 | ||||
| -rw-r--r-- | src/views/contacts.cpp | 17 | ||||
| -rw-r--r-- | src/views/dashboard.cpp | 75 |
3 files changed, 86 insertions, 16 deletions
diff --git a/src/locales/en.cpp b/src/locales/en.cpp index 5e31c5c..d23a766 100644 --- a/src/locales/en.cpp +++ b/src/locales/en.cpp @@ -10,6 +10,16 @@ locale_entry en_locales[] = { {"form.change", "Change"}, {"form.delete", "Delete"}, {"form.confirmDelete", "Are you sure you want to delete this item?"}, + {"form.required", "required"}, + + // Navigation. + {"nav.invoices", "Invoices"}, + {"nav.expenses", "Expenses"}, + {"nav.contacts", "Contacts"}, + {"nav.reports", "Reports"}, + {"nav.reports.results", "Results"}, + {"nav.reports.tax", "Tax return"}, + {"nav.Projects", "Projects"}, // Contact strings. {"contact.form.identifier", "Identifier"}, diff --git a/src/views/contacts.cpp b/src/views/contacts.cpp index de5e766..2ce300d 100644 --- a/src/views/contacts.cpp +++ b/src/views/contacts.cpp @@ -20,7 +20,7 @@ static void draw_required_tag() { ImDrawList* draw_list = ImGui::GetWindowDrawList(); - const char* text = "required"; + const char* text = localize("form.required"); ImVec2 text_pos = ImGui::GetCursorScreenPos(); ImVec2 text_size = ImGui::CalcTextSize(text); text_pos.y += text_size.y/4.0f; @@ -51,23 +51,38 @@ static void show_edit_contact() // Input fields ImGui::BeginDisabled(); + + float widthAvailable = ImGui::GetContentRegionAvail().x; + ImGui::SetNextItemWidth(widthAvailable*0.2f); ImGui::InputText(localize("contact.form.identifier"), edit_contact.id, IM_ARRAYSIZE(edit_contact.id)); ImGui::EndDisabled(); + ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("contact.form.fullname"), localize("contact.form.fullname"), edit_contact.name, IM_ARRAYSIZE(edit_contact.name)); ImGui::SameLine();draw_required_tag(); + ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("contact.form.address1"), localize("contact.form.address1"), edit_contact.address1, IM_ARRAYSIZE(edit_contact.address1)); ImGui::SameLine();draw_required_tag(); + ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("contact.form.address2"), localize("contact.form.address2"), edit_contact.address2, IM_ARRAYSIZE(edit_contact.address2)); ImGui::SameLine();draw_required_tag(); + ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("contact.form.taxnumber"), localize("contact.form.taxnumber"), edit_contact.taxid, IM_ARRAYSIZE(edit_contact.taxid)); + + ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("contact.form.businessnumber"), localize("contact.form.businessnumber"), edit_contact.businessid, IM_ARRAYSIZE(edit_contact.businessid)); + + ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("contact.form.email"), localize("contact.form.email"), edit_contact.email, IM_ARRAYSIZE(edit_contact.email)); + + ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("contact.form.phonenumber"), localize("contact.form.phonenumber"), edit_contact.phone_number, IM_ARRAYSIZE(edit_contact.phone_number)); + + ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("contact.form.bankaccount"), localize("contact.form.bankaccount"), edit_contact.bank_account, IM_ARRAYSIZE(edit_contact.bank_account)); bool can_save = strlen(edit_contact.name) > 0 && strlen(edit_contact.address1) > 0 && strlen(edit_contact.address2) > 0; 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. |
