diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-10-26 17:23:28 +0100 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-10-26 17:23:28 +0100 |
| commit | 60488d722bf29f3ff0ce3e08b90f30523a8d7b6d (patch) | |
| tree | c2e01243d8a0d970c35e250b66a66a226ab230dc /src/ui/ui_settings.cpp | |
| parent | 5e06ad208e32330b662af90ce41613f5421095cb (diff) | |
loading animations and block navigation while writing to disk
Diffstat (limited to 'src/ui/ui_settings.cpp')
| -rw-r--r-- | src/ui/ui_settings.cpp | 85 |
1 files changed, 50 insertions, 35 deletions
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp index e15bde0..1c8f92b 100644 --- a/src/ui/ui_settings.cpp +++ b/src/ui/ui_settings.cpp @@ -58,6 +58,13 @@ void ui::setup_settings() } } +static bool is_writing_vat_rate = false; +static u32 writing_vat_rate_index = 0; +static void _vat_rate_write_complete_callback() +{ + is_writing_vat_rate = false; +} + static void draw_vat_rates() { tax_rate_type type_iter = tax_rate_type::TAX_RATE_OUTGOING_INVOICE; @@ -84,7 +91,10 @@ static void draw_vat_rates() ImGui::TableSetColumnIndex(0); bool toggle = administration::tax_rate_is_enabled(c) == A_ERR_SUCCESS; - if (ImGui::Checkbox("##toggle", &toggle)) { + if (ImGui::CheckboxX("##toggle", &toggle, is_writing_vat_rate, i == writing_vat_rate_index)) { + writing_vat_rate_index = i; + is_writing_vat_rate = true; + administration_writer::set_write_completed_event_callback(_vat_rate_write_complete_callback); if (toggle) administration::tax_rate_enable(c); else administration::tax_rate_disable(c); } @@ -113,12 +123,26 @@ static void draw_vat_rates() if (type_iter < TAX_RATE_TYPE_END) goto go_again; } -static void draw_cost_centers() +static bool is_adding_cost_center = false; +static bool is_editing_cost_center = false; +static cost_center new_cost_center; + +static void _cost_center_update_callback() { - static bool is_adding_item = false; - static cost_center new_cost_center; + is_editing_cost_center = false; + is_adding_cost_center = false; + + administration::cost_center_update(new_cost_center); + + memops::zero(&new_cost_center, sizeof(new_cost_center)); + + ui::destroy_settings(); + ui::setup_settings(); + select_company_tab = 0; +} - static bool is_editing_item = false; +static void draw_cost_centers() +{ static u32 editing_item_index = 0; if (ImGui::BeginTable("TableCostCenters", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg)) { @@ -137,7 +161,7 @@ static void draw_cost_centers() // Column 2: When editing, show inputs for new description. Else show stored description and check for modify request. ImGui::TableSetColumnIndex(1); - if (is_editing_item && editing_item_index == i) + if (is_editing_cost_center && editing_item_index == i) { bool is_desc_valid = !(administration::cost_center_is_valid(new_cost_center) & A_ERR_MISSING_DESCRIPTION); if (!is_desc_valid) ImGui::PushStyleColor(ImGuiCol_FrameBg, IM_COL32(105, 43, 43, 255)); @@ -146,23 +170,16 @@ static void draw_cost_centers() if (!is_desc_valid) ImGui::BeginDisabled(); ImGui::SameLine(); - if (ImGui::Button(locale::get("form.save"))) { - is_editing_item = false; - is_adding_item = false; - + if (ImGui::Button(locale::get("form.save"), true)) { + administration_writer::set_write_completed_event_callback(_cost_center_update_callback); administration::cost_center_update(new_cost_center); - - memops::zero(&new_cost_center, sizeof(new_cost_center)); - - ui::destroy_settings(); - ui::setup_settings(); } if (!is_desc_valid) ImGui::EndDisabled(); ImGui::SameLine(); - if (ImGui::Button(locale::get("form.cancel"))) { - is_editing_item = false; - is_adding_item = false; + if (ImGui::Button(locale::get("form.cancel"), true, false)) { + is_editing_cost_center = false; + is_adding_cost_center = false; memops::zero(&new_cost_center, sizeof(new_cost_center)); } } @@ -172,8 +189,8 @@ static void draw_cost_centers() if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) { - is_editing_item = true; - is_adding_item = false; + is_editing_cost_center = true; + is_adding_cost_center = false; editing_item_index = i; new_cost_center = c; } @@ -182,7 +199,7 @@ static void draw_cost_centers() // When adding a new item. Show inputs for code and description, check validity, and handle save/cancel. // Form for new entry is displayed at bottom of list. - if (is_adding_item) + if (is_adding_cost_center) { ImGui::TableNextRow(); @@ -201,21 +218,17 @@ static void draw_cost_centers() if (!can_save) ImGui::BeginDisabled(); ImGui::SameLine(); - if (ImGui::Button(locale::get("form.create"))) + if (ImGui::Button(locale::get("form.create"), true)) { - is_adding_item = false; - is_editing_item = false; + administration_writer::set_write_completed_event_callback(_cost_center_update_callback); administration::cost_center_add(new_cost_center); - - ui::destroy_settings(); - ui::setup_settings(); } if (!can_save) ImGui::EndDisabled(); ImGui::SameLine(); - if (ImGui::Button(locale::get("form.cancel"))) { - is_adding_item = false; - is_editing_item = false; + if (ImGui::Button(locale::get("form.cancel"), true)) { + is_adding_cost_center = false; + is_editing_cost_center = false; memops::zero(&new_cost_center, sizeof(new_cost_center)); } } @@ -224,11 +237,11 @@ static void draw_cost_centers() } // If not adding a new item already, show create button at bottom of list. - if (!is_adding_item && ImGui::Button(locale::get("form.create"))) + if (!is_adding_cost_center && ImGui::Button(locale::get("form.create"))) { new_cost_center = administration::cost_center_create_empty(); - is_adding_item = true; - is_editing_item = false; + is_adding_cost_center = true; + is_editing_cost_center = false; } } @@ -317,7 +330,8 @@ static void draw_services() ImGui::EndDisabled(); } - if (ImGui::Button(locale::get("form.save"))) { + if (ImGui::Button(locale::get("form.save"), true)) { + administration_writer::set_write_completed_event_callback(0); administration::set_ai_service(new_service); } } @@ -336,7 +350,8 @@ void ui::draw_settings() 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"))) { + if (ImGui::Button(locale::get("form.save"), true)) { + administration_writer::set_write_completed_event_callback(0); administration::company_info_set(company_info); } if (!can_save) ImGui::EndDisabled(); |
