From 2218ef68056ebc5a3a416e2dd7e8e020fba60a4f Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Fri, 2 Jan 2026 19:13:03 +0100 Subject: ui improvements --- include/administration.hpp | 2 +- include/ui.hpp | 2 ++ src/administration.cpp | 2 +- src/ui/imgui_extensions.cpp | 38 ++++++++++++++++++++++++++++++-------- src/ui/ui_contacts.cpp | 2 ++ src/ui/ui_earnings.cpp | 2 ++ src/ui/ui_expenses.cpp | 17 +---------------- src/ui/ui_invoices.cpp | 17 +---------------- src/ui/ui_projects.cpp | 2 ++ src/ui/ui_settings.cpp | 13 +++++++++---- src/ui/ui_tax.cpp | 2 ++ 11 files changed, 53 insertions(+), 46 deletions(-) diff --git a/include/administration.hpp b/include/administration.hpp index 4f276ad..fede22a 100644 --- a/include/administration.hpp +++ b/include/administration.hpp @@ -522,7 +522,7 @@ namespace administration { void set_ai_service(ai_service provider); void set_email_service(email_service provider); void create_income_statement(income_statement* statement); - bool can_create_invoices(); + bool company_info_is_valid(); // Contact functions. // ======================= diff --git a/include/ui.hpp b/include/ui.hpp index 2e85dc2..9649eb8 100644 --- a/include/ui.hpp +++ b/include/ui.hpp @@ -83,6 +83,8 @@ namespace ui { namespace ImGui { + bool InvalidCompanyInfoWarning(); + bool WarningIcon(float radius); bool Button(const char* label, bool block_while_writing_to_disk, bool show_loading_indicator_while_blocked = true); bool CheckboxX(const char* label, bool* v, bool disabled = false, bool show_loading_indicator_while_disabled = false); diff --git a/src/administration.cpp b/src/administration.cpp index 61e5b3e..77e8754 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -274,7 +274,7 @@ s32 administration::get_next_sequence_number() return g_administration.next_sequence_number; } -bool administration::can_create_invoices() // TODO rename to be more generic as it is used for more than invoices +bool administration::company_info_is_valid() { return administration::contact_is_valid(g_administration.company_info) == A_ERR_SUCCESS; } diff --git a/src/ui/imgui_extensions.cpp b/src/ui/imgui_extensions.cpp index 31b6f22..dca73f2 100644 --- a/src/ui/imgui_extensions.cpp +++ b/src/ui/imgui_extensions.cpp @@ -58,17 +58,17 @@ namespace ImGui return button_size; } - static void DrawSuccessMark(int bWidth = 0) + static void DrawSuccessMark(int bWidth = 0, bool isButton = true) { ImGui::PushStyleColor(ImGuiCol_Text, config::colors::COLOR_SUCCESS); - result = ImGui::Button("√", ImVec2(bWidth, 0)); + if (isButton) ImGui::Button("√", ImVec2(bWidth, 0)); else ImGui::Text("√"); ImGui::PopStyleColor(); } - static void DrawFailureMark(int bWidth = 0) + static void DrawFailureMark(int bWidth = 0, bool isButton = true) { ImGui::PushStyleColor(ImGuiCol_Text, config::colors::COLOR_ERROR); - result = ImGui::Button("X", ImVec2(bWidth, 0)); + if (isButton) ImGui::Button("X", ImVec2(bWidth, 0)); else ImGui::Text("√"); ImGui::PopStyleColor(); } @@ -145,7 +145,7 @@ namespace ImGui ImGui::EndDisabled(); ImGui::PopID(); - if (ImGui::GetTime() - status_time > 1.0) { + if (ImGui::GetTime() - status_time > 0.5) { show_status = false; active_id = -1; } @@ -808,11 +808,11 @@ namespace ImGui if (ImGui::BeginComboPreview()) { if (last_err == E_ERR_SUCCESS) { - DrawSuccessMark(); + DrawSuccessMark(0, false); ImGui::Text("Success"); // @Localize } else { - DrawFailureMark(); + DrawFailureMark(0, false); ImGui::Text("Failed"); // @Localize } ImGui::EndComboPreview(); @@ -820,7 +820,7 @@ namespace ImGui } ImGui::EndDisabled(); - if (difftime(time(NULL), status_changed_at) > 1.0f) { + if (difftime(time(NULL), status_changed_at) > 0.5f) { show_status_change = false; } } @@ -829,4 +829,26 @@ namespace ImGui } return false; } + + bool InvalidCompanyInfoWarning() + { + if (!administration::company_info_is_valid()) { + ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(0, 102, 204, 255)); // blue + ImGui::Text(locale::get("ui.invoiceRequirementP1")); + ImGui::PopStyleColor(); + + if (ImGui::IsItemHovered()) { + ImGui::SetMouseCursor(ImGuiMouseCursor_Hand); + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) { + ui::set_state(ui::main_state::UI_SETTINGS); + } + } + + ImGui::SameLine(); + ImGui::Text(locale::get("ui.invoiceRequirementP2")); + return true; + } + + return false; + } } \ No newline at end of file diff --git a/src/ui/ui_contacts.cpp b/src/ui/ui_contacts.cpp index a9559c5..f3581dd 100644 --- a/src/ui/ui_contacts.cpp +++ b/src/ui/ui_contacts.cpp @@ -37,6 +37,8 @@ void ui::setup_contacts() static void draw_contact_list() { + if (ImGui::InvalidCompanyInfoWarning()) return; + static char search_buffer[MAX_LEN_LONG_DESC]; contact_filter filter; diff --git a/src/ui/ui_earnings.cpp b/src/ui/ui_earnings.cpp index 8f08bcb..cb6c848 100644 --- a/src/ui/ui_earnings.cpp +++ b/src/ui/ui_earnings.cpp @@ -36,6 +36,8 @@ void ui::destroy_earnings() void ui::draw_earnings() { + if (ImGui::InvalidCompanyInfoWarning()) return; + static s32 current_page = 0; s32 max_page = ((statement->quarter_count) / 4); diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp index f86a1b5..4227e08 100644 --- a/src/ui/ui_expenses.cpp +++ b/src/ui/ui_expenses.cpp @@ -160,22 +160,7 @@ static void draw_expense_form(invoice* buffer, bool viewing_only = false) static void draw_expenses_list() { - if (!administration::can_create_invoices()) { - ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(0, 102, 204, 255)); // blue - ImGui::Text(locale::get("ui.invoiceRequirementP1")); - ImGui::PopStyleColor(); - - if (ImGui::IsItemHovered()) { - ImGui::SetMouseCursor(ImGuiMouseCursor_Hand); - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) { - ui::set_state(ui::main_state::UI_SETTINGS); - } - } - - ImGui::SameLine(); - ImGui::Text(locale::get("ui.invoiceRequirementP2")); - return; - } + if (ImGui::InvalidCompanyInfoWarning()) return; const u32 items_per_page = 50; static s32 current_page = 0; diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp index 2c0a8e4..a5fbd3c 100644 --- a/src/ui/ui_invoices.cpp +++ b/src/ui/ui_invoices.cpp @@ -268,22 +268,7 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) static void draw_invoices_list() { - if (!administration::can_create_invoices()) { - ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(0, 102, 204, 255)); // blue - ImGui::Text(locale::get("ui.invoiceRequirementP1")); - ImGui::PopStyleColor(); - - if (ImGui::IsItemHovered()) { - ImGui::SetMouseCursor(ImGuiMouseCursor_Hand); - if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) { - ui::set_state(ui::main_state::UI_SETTINGS); - } - } - - ImGui::SameLine(); - ImGui::Text(locale::get("ui.invoiceRequirementP2")); - return; - } + if (ImGui::InvalidCompanyInfoWarning()) return; const u32 items_per_page = 50; static s32 current_page = 0; diff --git a/src/ui/ui_projects.cpp b/src/ui/ui_projects.cpp index 42dba92..b3241f4 100644 --- a/src/ui/ui_projects.cpp +++ b/src/ui/ui_projects.cpp @@ -86,6 +86,8 @@ static void draw_project_form() static void draw_project_list() { + if (ImGui::InvalidCompanyInfoWarning()) return; + const u32 items_per_page = 50; static s32 current_page = 0; s32 max_page = (administration::project_count() + items_per_page - 1) / items_per_page; diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp index defe119..d41affa 100644 --- a/src/ui/ui_settings.cpp +++ b/src/ui/ui_settings.cpp @@ -48,7 +48,7 @@ void ui::setup_settings() select_company_tab = 1; company_info = administration::company_info_get(); - if (administration::can_create_invoices()) { + if (administration::company_info_is_valid()) { tax_rates = (tax_rate*)memops::alloc(sizeof(tax_rate) * 400); tax_rate_count = country::get_available_tax_rates(administration::company_info_get().address.country_code, tax_rates, 400); @@ -61,6 +61,12 @@ void ui::setup_settings() } } +static void _write_company_info_callback() +{ + ui::setup_settings(); + select_company_tab = 0; +} + static bool is_writing_vat_rate = false; static u32 writing_vat_rate_index = 0; static void _vat_rate_write_complete_callback() @@ -384,19 +390,18 @@ void ui::draw_settings() select_company_tab = 0; ImGui::ContactForm(&company_info, false, false, true); - // Save button. bool can_save = administration::contact_is_valid(company_info) == A_ERR_SUCCESS; if (!can_save) ImGui::BeginDisabled(); ImGui::Spacing(); if (ImGui::Button(locale::get("form.save"), true)) { - administration_writer::set_write_completed_event_callback(0); + administration_writer::set_write_completed_event_callback(_write_company_info_callback); administration::company_info_set(company_info); } if (!can_save) ImGui::EndDisabled(); ImGui::EndTabItem(); } - if (administration::can_create_invoices()) { + if (administration::company_info_is_valid()) { if (ImGui::BeginTabItem(locale::get("settings.table.vatrates"))) { draw_vat_rates(); diff --git a/src/ui/ui_tax.cpp b/src/ui/ui_tax.cpp index af05cd7..a89bd7a 100644 --- a/src/ui/ui_tax.cpp +++ b/src/ui/ui_tax.cpp @@ -37,6 +37,8 @@ void ui::destroy_tax_report() void ui::draw_tax_report() { + if (ImGui::InvalidCompanyInfoWarning()) return; + static s32 current_page = 0; s32 max_page = statement->report_count; -- cgit v1.2.3-70-g09d2