summaryrefslogtreecommitdiff
path: root/src/ui/ui_settings.cpp
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrikboy@gmail.com>2025-10-26 17:23:28 +0100
committerAldrik Ramaekers <aldrikboy@gmail.com>2025-10-26 17:23:28 +0100
commit60488d722bf29f3ff0ce3e08b90f30523a8d7b6d (patch)
treec2e01243d8a0d970c35e250b66a66a226ab230dc /src/ui/ui_settings.cpp
parent5e06ad208e32330b662af90ce41613f5421095cb (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.cpp85
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();