diff options
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/imgui_extensions.cpp | 65 | ||||
| -rw-r--r-- | src/ui/ui_expenses.cpp | 4 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 14 | ||||
| -rw-r--r-- | src/ui/ui_settings.cpp | 8 |
4 files changed, 77 insertions, 14 deletions
diff --git a/src/ui/imgui_extensions.cpp b/src/ui/imgui_extensions.cpp index 05eeb7b..8673f53 100644 --- a/src/ui/imgui_extensions.cpp +++ b/src/ui/imgui_extensions.cpp @@ -60,12 +60,19 @@ namespace ImGui bool Button(const char* label, bool block_while_writing_to_disk, bool show_loading_indicator_while_blocked) { + ImGui::PushID(label); + + ImGuiID id = ImGui::GetID(label); + static ImGuiID active_id = -1; + static bool show_status = false; + static double status_time; + if (block_while_writing_to_disk) { if (administration_writer::is_writing()) { - if (show_loading_indicator_while_blocked) { - ImGui::PushID(label); + // Only show indicator on activated button. + if (show_loading_indicator_while_blocked && active_id == id) { ImGui::BeginDisabled(); bool result = ImGui::Button("", CalcButtonSize(label)); @@ -82,12 +89,12 @@ namespace ImGui const ImVec4 bg = ImGui::GetStyleColorVec4(ImGuiCol_Button); ImGui::LoadingIndicatorCircle(radius, bg, col, 6, 4.0f); ImGui::EndDisabled(); - ImGui::PopID(); ImGui::SetCursorScreenPos(oldPos); ImGui::SameLine(); ImGui::Dummy(ImVec2(0, 0)); + ImGui::PopID(); return result; } else @@ -95,16 +102,66 @@ namespace ImGui ImGui::BeginDisabled(); bool result = ImGui::Button(label); ImGui::EndDisabled(); + ImGui::PopID(); return result; } } else { - return ImGui::Button(label); + bool result = false; + + if (active_id == id && !show_status) { + show_status = true; + status_time = ImGui::GetTime(); + } + + if (active_id == id && show_status) { + ImGui::BeginDisabled(); + + ImGuiStyle& style = ImGui::GetStyle(); + ImVec2 framePadding = style.FramePadding; + ImVec2 textSize = ImGui::CalcTextSize(label, 0, true); + float padding = framePadding.x; // Adjust based on your design + float buttonWidth = textSize.x + 2 * padding; + + if (administration_writer::last_write_result()) + { + ImGui::PushStyleColor(ImGuiCol_Text, config::colors::COLOR_SUCCESS); + result = ImGui::Button("√", ImVec2(buttonWidth, 0)); + ImGui::PopStyleColor(); + } + else + { + ImGui::PushStyleColor(ImGuiCol_Text, config::colors::COLOR_ERROR); + result = ImGui::Button("X", ImVec2(buttonWidth, 0)); + ImGui::PopStyleColor(); + } + + + ImGui::EndDisabled(); + ImGui::PopID(); + + if (ImGui::GetTime() - status_time > 1.0) { + show_status = false; + active_id = -1; + } + + return result; + } + else { + bool result = ImGui::Button(label); + if (result) { + active_id = id; + show_status = false; + } + ImGui::PopID(); + return result; + } } } else { + ImGui::PopID(); return ImGui::Button(label); } } diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp index 3ea31e1..82d7426 100644 --- a/src/ui/ui_expenses.cpp +++ b/src/ui/ui_expenses.cpp @@ -37,7 +37,7 @@ static invoice selected_for_removal = {0}; static const float sidepanel_width = 200.0f; static billing_item* invoice_items_buffer = 0; -void draw_invoice_items_form(invoice* invoice, bool outgoing = true); +void draw_invoice_items_form(invoice* invoice, bool outgoing = true, bool viewing_only = false); static void _reload_activities() { @@ -153,7 +153,7 @@ static void draw_expense_form(invoice* buffer, bool viewing_only = false) administration::invoice_set_currency(buffer, buffer->currency); } - draw_invoice_items_form(buffer, false); + draw_invoice_items_form(buffer, false, viewing_only); if (viewing_only) ImGui::EndDisabled(); } diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp index eb04af4..3e48d00 100644 --- a/src/ui/ui_invoices.cpp +++ b/src/ui/ui_invoices.cpp @@ -65,7 +65,7 @@ void ui::setup_invoices() invoice_items_buffer = (billing_item*)memops::alloc(sizeof(billing_item) * invoice_items_count); } -void draw_invoice_items_form(invoice* invoice, bool outgoing) +void draw_invoice_items_form(invoice* invoice, bool outgoing, bool viewing_only = false) { billing_item* buffer = invoice_items_buffer; u32 invoice_items = administration::billing_item_get_all_for_invoice(invoice, buffer); @@ -76,7 +76,7 @@ void draw_invoice_items_form(invoice* invoice, bool outgoing) ImGui::TableSetupColumn(locale::get("invoice.table.amount"), ImGuiTableColumnFlags_WidthFixed, 80); ImGui::TableSetupColumn(locale::get("invoice.table.description")); ImGui::TableSetupColumn(locale::get("invoice.table.price"), ImGuiTableColumnFlags_WidthFixed, 100); - ImGui::TableSetupColumn(locale::get("invoice.table.discount"), ImGuiTableColumnFlags_WidthFixed, 100); + ImGui::TableSetupColumn(locale::get("invoice.table.discount"), ImGuiTableColumnFlags_WidthFixed, 110); ImGui::TableSetupColumn(locale::get("invoice.table.net"), ImGuiTableColumnFlags_WidthFixed, 100); ImGui::TableSetupColumn(locale::get("invoice.table.tax%"), ImGuiTableColumnFlags_WidthFixed, 120); ImGui::TableSetupColumn(locale::get("invoice.table.tax"), ImGuiTableColumnFlags_WidthFixed, 100); @@ -94,9 +94,11 @@ void draw_invoice_items_form(invoice* invoice, bool outgoing) ImGui::PushID(i); ImGui::TableSetColumnIndex(0); - if (ImGui::Button("X")) - { - administration::billing_item_remove_from_invoice(invoice, item); + if (!viewing_only) { + if (ImGui::Button("X")) + { + administration::billing_item_remove_from_invoice(invoice, item); + } } ImGui::TableSetColumnIndex(1); @@ -259,7 +261,7 @@ static void draw_invoice_form(invoice* buffer, bool viewing_only = false) administration::invoice_set_currency(buffer, buffer->currency); } - draw_invoice_items_form(buffer, true); + draw_invoice_items_form(buffer, true, viewing_only); if (viewing_only) ImGui::EndDisabled(); } diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp index fb02738..defe119 100644 --- a/src/ui/ui_settings.cpp +++ b/src/ui/ui_settings.cpp @@ -327,7 +327,9 @@ static void draw_ai_service_ui() ImGui::EndDisabled(); } - if (ImGui::Button(locale::get("form.save"), true)) { + char id[100]; + strops::format(id, 100, "%s##ai", locale::get("form.save")); + if (ImGui::Button(id, true)) { administration_writer::set_write_completed_event_callback(0); administration::set_ai_service(new_ai_service); } @@ -358,7 +360,9 @@ static void draw_email_service_ui() ImGui::InputTextWithHint(locale::get("settings.services.email_service.pubkey"), locale::get("settings.services.email_service.pubkey"), new_email_service.api_key, sizeof(new_email_service.api_key)); - if (ImGui::Button(locale::get("form.save"), true)) { + char id[100]; + strops::format(id, 100, "%s##email", locale::get("form.save")); + if (ImGui::Button(id, true)) { administration_writer::set_write_completed_event_callback(0); administration::set_email_service(new_email_service); } |
