diff options
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/helpers.cpp | 39 | ||||
| -rw-r--r-- | src/ui/ui_contacts.cpp | 92 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 15 | ||||
| -rw-r--r-- | src/ui/ui_main.cpp | 34 | ||||
| -rw-r--r-- | src/ui/ui_projects.cpp | 10 | ||||
| -rw-r--r-- | src/ui/ui_settings.cpp | 35 |
6 files changed, 175 insertions, 50 deletions
diff --git a/src/ui/helpers.cpp b/src/ui/helpers.cpp index 74876c0..e4b25c8 100644 --- a/src/ui/helpers.cpp +++ b/src/ui/helpers.cpp @@ -2,7 +2,44 @@ #include "imgui.h" #include "locales.hpp" -void view_draw_required_tag() +static float toast_timer = 0.0f; +static const char* toast_msg = nullptr; +void ui_helper_show_toast(const char* msg) +{ + toast_msg = msg; + toast_timer = 3.0f; +} + +void ui_helper_draw_toasts() +{ + if (toast_timer > 0.0f && toast_msg) + { + toast_timer -= ImGui::GetIO().DeltaTime; + + const float pad = 10.0f; + const ImVec2 window_pos = ImVec2( + ImGui::GetIO().DisplaySize.x - pad, + ImGui::GetIO().DisplaySize.y - pad + ); + const ImVec2 window_pos_pivot = ImVec2(1.0f, 1.0f); + + ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot); + ImGui::SetNextWindowBgAlpha(0.85f); // semi-transparent + + ImGuiWindowFlags flags = ImGuiWindowFlags_NoDecoration | + ImGuiWindowFlags_AlwaysAutoResize | + ImGuiWindowFlags_NoFocusOnAppearing | + ImGuiWindowFlags_NoNav; + + if (ImGui::Begin("##Toast", nullptr, flags)) + { + ImGui::TextUnformatted(toast_msg); + } + ImGui::End(); + } +} + +void ui_helper_draw_required_tag() { ImDrawList* draw_list = ImGui::GetWindowDrawList(); diff --git a/src/ui/ui_contacts.cpp b/src/ui/ui_contacts.cpp index 3115a77..fd9907f 100644 --- a/src/ui/ui_contacts.cpp +++ b/src/ui/ui_contacts.cpp @@ -6,44 +6,51 @@ #include "administration.hpp" #include "locales.hpp" -static view_state current_view_state = LIST; +static view_state current_view_state = view_state::LIST; static contact selected_for_removal; static contact active_contact; -static void draw_contact_form() +void ui_setup_contacts() { - static const char* selected_country = NULL; + current_view_state = view_state::LIST; + memset(&active_contact, 0, sizeof(contact)); + memset(&selected_for_removal, 0, sizeof(contact)); +} - if (ImGui::Button(localize("form.back"))) { - current_view_state = view_state::LIST; - memset(&active_contact, 0, sizeof(contact)); - selected_country = 0; - return; +bool draw_contact_form(contact* buffer, bool back_button_enabled = true, bool viewing_only = false) +{ + const char* selected_country = NULL; + + if (back_button_enabled) + { + if (ImGui::Button(localize("form.back"))) { + current_view_state = view_state::LIST; + selected_country = 0; + return false; + } } ImGui::Spacing(); - bool viewing_only = (current_view_state == view_state::VIEW); - ImGui::BeginDisabled(); float widthAvailable = ImGui::GetContentRegionAvail().x; ImGui::SetNextItemWidth(widthAvailable*0.2f); - ImGui::InputText(localize("contact.form.identifier"), active_contact.id, IM_ARRAYSIZE(active_contact.id)); + ImGui::InputText(localize("contact.form.identifier"), buffer->id, IM_ARRAYSIZE(buffer->id)); if (!viewing_only) ImGui::EndDisabled(); ImGui::SetNextItemWidth(widthAvailable*0.5f); - ImGui::InputTextWithHint(localize("contact.form.fullname"), localize("contact.form.fullname"), active_contact.name, IM_ARRAYSIZE(active_contact.name)); - ImGui::SameLine();view_draw_required_tag(); + ImGui::InputTextWithHint(localize("contact.form.fullname"), localize("contact.form.fullname"), buffer->name, IM_ARRAYSIZE(buffer->name)); + ImGui::SameLine();ui_helper_draw_required_tag(); ImGui::SetNextItemWidth(widthAvailable*0.5f); - ImGui::InputTextWithHint(localize("contact.form.address1"), localize("contact.form.address1"), active_contact.address1, IM_ARRAYSIZE(active_contact.address1)); - ImGui::SameLine();view_draw_required_tag(); + ImGui::InputTextWithHint(localize("contact.form.address1"), localize("contact.form.address1"), buffer->address.address1, IM_ARRAYSIZE(buffer->address.address1)); + ImGui::SameLine();ui_helper_draw_required_tag(); ImGui::SetNextItemWidth(widthAvailable*0.5f); - ImGui::InputTextWithHint(localize("contact.form.address2"), localize("contact.form.address2"), active_contact.address2, IM_ARRAYSIZE(active_contact.address2)); - ImGui::SameLine();view_draw_required_tag(); + ImGui::InputTextWithHint(localize("contact.form.address2"), localize("contact.form.address2"), buffer->address.address2, IM_ARRAYSIZE(buffer->address.address2)); + ImGui::SameLine();ui_helper_draw_required_tag(); ImGui::SetNextItemWidth(widthAvailable*0.5f); @@ -52,7 +59,7 @@ static void draw_contact_form() if (selected_country == 0) { for (int i = 0; i < country_count; i++) { - if (strcmp(countries[i], active_contact.country) == 0) + if (strcmp(countries[i], buffer->address.country) == 0) { selected_country = countries[i]; break; @@ -71,50 +78,43 @@ static void draw_contact_form() ImGui::EndCombo(); } if (selected_country) { - strops_copy(active_contact.country, selected_country, IM_ARRAYSIZE(active_contact.country)); + strops_copy(buffer->address.country, selected_country, IM_ARRAYSIZE(buffer->address.country)); } - ImGui::SameLine();view_draw_required_tag(); + ImGui::SameLine();ui_helper_draw_required_tag(); ImGui::SetNextItemWidth(widthAvailable*0.5f); - ImGui::InputTextWithHint(localize("contact.form.taxnumber"), localize("contact.form.taxnumber"), active_contact.taxid, IM_ARRAYSIZE(active_contact.taxid)); + ImGui::InputTextWithHint(localize("contact.form.taxnumber"), localize("contact.form.taxnumber"), buffer->taxid, IM_ARRAYSIZE(buffer->taxid)); ImGui::SetNextItemWidth(widthAvailable*0.5f); - ImGui::InputTextWithHint(localize("contact.form.businessnumber"), localize("contact.form.businessnumber"), active_contact.businessid, IM_ARRAYSIZE(active_contact.businessid)); + ImGui::InputTextWithHint(localize("contact.form.businessnumber"), localize("contact.form.businessnumber"), buffer->businessid, IM_ARRAYSIZE(buffer->businessid)); ImGui::SetNextItemWidth(widthAvailable*0.5f); - ImGui::InputTextWithHint(localize("contact.form.email"), localize("contact.form.email"), active_contact.email, IM_ARRAYSIZE(active_contact.email)); + ImGui::InputTextWithHint(localize("contact.form.email"), localize("contact.form.email"), buffer->email, IM_ARRAYSIZE(buffer->email)); ImGui::SetNextItemWidth(widthAvailable*0.5f); - ImGui::InputTextWithHint(localize("contact.form.phonenumber"), localize("contact.form.phonenumber"), active_contact.phone_number, IM_ARRAYSIZE(active_contact.phone_number)); + ImGui::InputTextWithHint(localize("contact.form.phonenumber"), localize("contact.form.phonenumber"), buffer->phone_number, IM_ARRAYSIZE(buffer->phone_number)); ImGui::SetNextItemWidth(widthAvailable*0.5f); - ImGui::InputTextWithHint(localize("contact.form.bankaccount"), localize("contact.form.bankaccount"), active_contact.bank_account, IM_ARRAYSIZE(active_contact.bank_account)); + ImGui::InputTextWithHint(localize("contact.form.bankaccount"), localize("contact.form.bankaccount"), buffer->bank_account, IM_ARRAYSIZE(buffer->bank_account)); if (viewing_only) ImGui::EndDisabled(); if (!viewing_only) { - bool can_save = strlen(active_contact.name) > 0 && strlen(active_contact.address1) > 0 && - strlen(active_contact.address2) > 0 && strlen(active_contact.country) > 0; + bool can_save = strlen(buffer->name) > 0 && strlen(buffer->address.address1) > 0 && + strlen(buffer->address.address2) > 0 && strlen(buffer->address.country) > 0; if (!can_save) ImGui::BeginDisabled(); // Save button ImGui::Spacing(); if (ImGui::Button(localize("form.save"))) { - if (current_view_state == view_state::CREATE) - administration_create_contact(active_contact); - - else if (current_view_state == view_state::EDIT) - administration_update_contact(active_contact); - - memset(&active_contact, 0, sizeof(contact)); - current_view_state = view_state::LIST; - selected_country = 0; + return true; } if (!can_save) ImGui::EndDisabled(); } else { // TODO list invoices connected to contact. } + return false; } static void draw_contact_list() @@ -168,7 +168,7 @@ static void draw_contact_list() ImGui::TableNextRow(); ImGui::TableSetColumnIndex(0); ImGui::Text(c.id); ImGui::TableSetColumnIndex(1); ImGui::Text(c.name); - ImGui::TableSetColumnIndex(2); ImGui::Text("%s %s", c.address1, c.address2); + ImGui::TableSetColumnIndex(2); ImGui::Text("%s %s", c.address.address1, c.address.address2); ImGui::TableSetColumnIndex(3); @@ -221,8 +221,20 @@ void ui_draw_contacts() switch(current_view_state) { case view_state::LIST: draw_contact_list(); break; - case view_state::CREATE: draw_contact_form(); break; - case view_state::EDIT: draw_contact_form(); break; - case view_state::VIEW: draw_contact_form(); break; + case view_state::CREATE: + if (draw_contact_form(&active_contact)) + { + administration_create_contact(active_contact); + current_view_state = view_state::LIST; + } + break; + case view_state::EDIT: + if (draw_contact_form(&active_contact)) + { + administration_update_contact(active_contact); + current_view_state = view_state::LIST; + } + break; + case view_state::VIEW: draw_contact_form(&active_contact, true, true); break; } }
\ No newline at end of file diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp new file mode 100644 index 0000000..ea45f4e --- /dev/null +++ b/src/ui/ui_invoices.cpp @@ -0,0 +1,15 @@ +#include <stdio.h> + +#include "strops.hpp" +#include "ui.hpp" +#include "imgui.h" +#include "administration.hpp" +#include "locales.hpp" + +static view_state current_view_state = LIST; +static invoice active_invoice; + +void ui_draw_invoices() +{ + +}
\ No newline at end of file diff --git a/src/ui/ui_main.cpp b/src/ui/ui_main.cpp index f6661b8..8af8dbc 100644 --- a/src/ui/ui_main.cpp +++ b/src/ui/ui_main.cpp @@ -11,20 +11,38 @@ typedef enum 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) = { - 0, + ui_draw_invoices, 0, ui_draw_contacts, 0, 0, ui_draw_projects, + ui_draw_settings, }; +void (*setupcalls[dashboard_view_state::END])(void) = { + 0, + 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 @@ -59,21 +77,22 @@ void ui_draw_main() float buttonWidth = sidePanelWidth; - if (ImGui::Button(localize("nav.invoices"), ImVec2(buttonWidth, 24))) dashboard_state = dashboard_view_state::INVOICES; - if (ImGui::Button(localize("nav.expenses"), ImVec2(buttonWidth, 24))) dashboard_state = dashboard_view_state::EXPENSES; - if (ImGui::Button(localize("nav.contacts"), ImVec2(buttonWidth, 24))) dashboard_state = dashboard_view_state::CONTACTS; + 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))) dashboard_state = dashboard_view_state::REPORT_RESULTS; - if (ImGui::Button(localize("nav.reports.tax"), ImVec2(buttonWidth, 24))) dashboard_state = dashboard_view_state::REPORT_TAX; + 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))) dashboard_state = dashboard_view_state::PROJECTS; + if (ImGui::Button(localize("nav.Projects"), ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::PROJECTS); + if (ImGui::Button("Settings", ImVec2(buttonWidth, 24))) set_dashboard_state(dashboard_view_state::SETTINGS); //@localize ImGui::PopStyleColor(1); ImGui::PopStyleVar(3); @@ -87,6 +106,7 @@ void ui_draw_main() // 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. diff --git a/src/ui/ui_projects.cpp b/src/ui/ui_projects.cpp index 9490254..a349814 100644 --- a/src/ui/ui_projects.cpp +++ b/src/ui/ui_projects.cpp @@ -5,11 +5,17 @@ #include "administration.hpp" #include "locales.hpp" -static view_state current_view_state = LIST; +static view_state current_view_state = view_state::LIST; static project selected_for_cancellation; static project active_project; +void ui_setup_projects() +{ + current_view_state = view_state::LIST; + memset(&active_project, 0, sizeof(contact)); +} + static void draw_project_form() { static const char* selected_country = NULL; @@ -34,7 +40,7 @@ static void draw_project_form() ImGui::SetNextItemWidth(widthAvailable*0.5f); ImGui::InputTextWithHint(localize("project.form.description"), localize("project.form.description"), active_project.description, IM_ARRAYSIZE(active_project.description)); - ImGui::SameLine();view_draw_required_tag(); + ImGui::SameLine();ui_helper_draw_required_tag(); if (viewing_only) ImGui::EndDisabled(); diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp new file mode 100644 index 0000000..81f6d31 --- /dev/null +++ b/src/ui/ui_settings.cpp @@ -0,0 +1,35 @@ +#include "ui.hpp" +#include "imgui.h" +#include "administration.hpp" +#include "locales.hpp" + +extern bool draw_contact_form(contact* buffer, bool back_button_enabled = true, bool viewing_only = false); + +static contact company_info; +void ui_setup_settings() +{ + company_info = administration_get_company_info(); +} + +void ui_draw_settings() +{ + // @localize + if (ImGui::BeginTabBar("SettingsTabBar", 0)) + { + if (ImGui::BeginTabItem("Company")) + { + bool save = draw_contact_form(&company_info, false); + + if (save) { + administration_set_company_info(company_info); + } + ImGui::EndTabItem(); + } + if (ImGui::BeginTabItem("VAT Rates")) + { + ImGui::Text("This is the Broccoli tab!\nblah blah blah blah blah"); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); + } +}
\ No newline at end of file |
