diff options
| author | Aldrik Ramaekers <aldrik@mailbox.org> | 2026-01-11 20:09:37 +0100 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@mailbox.org> | 2026-01-11 20:09:37 +0100 |
| commit | 74748ae725ca3cdcc450473ea0ccd245ab36533d (patch) | |
| tree | 4cf69b3d2cb99219651c38683d1c1c6cddbcc7a4 /src/ui | |
| parent | c011cfe0cb4b2b29c2e1d48b5bfd6db1d7fdc6d8 (diff) | |
ai import ui improvements
Diffstat (limited to 'src/ui')
| -rw-r--r-- | src/ui/imgui_extensions.cpp | 14 | ||||
| -rw-r--r-- | src/ui/ui_expenses.cpp | 20 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 13 |
3 files changed, 32 insertions, 15 deletions
diff --git a/src/ui/imgui_extensions.cpp b/src/ui/imgui_extensions.cpp index 496bbe2..dee36a7 100644 --- a/src/ui/imgui_extensions.cpp +++ b/src/ui/imgui_extensions.cpp @@ -41,7 +41,7 @@ namespace ImGui float radius = 10.0f; const ImVec4 col = ImGui::GetStyleColorVec4(ImGuiCol_LoadingIndicatorFg); const ImVec4 bg = ImGui::GetStyleColorVec4(ImGuiCol_LoadingIndicatorBg); - ImGui::LoadingIndicatorCircle(radius, bg, col, 6, 4.0f); + ImGui::LoadingIndicatorCircle(radius, bg, col, 6, 4.0f, 0.0f); } bool CheckboxX(const char* label, bool* v, bool disabled, bool show_loading_indicator_while_disabled) @@ -85,14 +85,14 @@ namespace ImGui static void DrawSuccessMark(int bWidth = 0, bool isButton = true) { ImGui::PushStyleColor(ImGuiCol_Text, config::colors::COLOR_SUCCESS); - if (isButton) ImGui::Button(ICON_FA_CHECK_SQUARE, ImVec2(bWidth, 0)); else ImGui::Text("√"); + if (isButton) ImGui::Button(ICON_FA_CHECK_SQUARE, ImVec2(bWidth, 0)); else ImGui::Text(ICON_FA_CHECK_SQUARE); ImGui::PopStyleColor(); } static void DrawFailureMark(int bWidth = 0, bool isButton = true) { ImGui::PushStyleColor(ImGuiCol_Text, config::colors::COLOR_ERROR); - if (isButton) ImGui::Button(ICON_FA_BAN, ImVec2(bWidth, 0)); else ImGui::Text("√"); + if (isButton) ImGui::Button(ICON_FA_BAN, ImVec2(bWidth, 0)); else ImGui::Text(ICON_FA_BAN); ImGui::PopStyleColor(); } @@ -796,7 +796,7 @@ namespace ImGui { static bool is_new_request = false; static bool show_status_change = false; - static time_t status_changed_at = 0; + static double status_changed_at = 0; static e_err last_err; if (active_request && active_request->status == exporter::export_status::EXPORT_DONE && is_new_request) @@ -804,7 +804,7 @@ namespace ImGui is_new_request = false; show_status_change = true; last_err = active_request->error; - status_changed_at = time(NULL); + status_changed_at = ImGui::GetTime(); } if (active_request && active_request->status != exporter::export_status::EXPORT_DONE) { @@ -834,14 +834,14 @@ namespace ImGui } else { DrawFailureMark(0, false); - ImGui::Text(locale::get("form.failure")); + ImGui::Text(locale::get("form.failed")); } ImGui::EndComboPreview(); } } ImGui::EndDisabled(); - if (difftime(time(NULL), status_changed_at) > 0.5f) { + if (ImGui::GetTime() - status_changed_at >= 1.0f) { show_status_change = false; } } diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp index 6ac043f..64dbc18 100644 --- a/src/ui/ui_expenses.cpp +++ b/src/ui/ui_expenses.cpp @@ -20,6 +20,7 @@ #include "ui.hpp" #include "memops.hpp" +#include "assets.hpp" #include "strops.hpp" #include "locales.hpp" #include "importer.hpp" @@ -431,6 +432,9 @@ static void draw_import_request() } } + ai_service ai = administration::get_active_ai_service(); + importer::ai_provider_impl ai_impl = importer::get_ai_provider_implementation(ai.provider); + ImGui::PushFont(ui::fontBig); ImVec2 windowSize = ImGui::GetWindowSize(); @@ -439,17 +443,25 @@ static void draw_import_request() const char* text = importer::status_to_string(active_import_request->status); if (active_import_request->error != I_ERR_SUCCESS) text = importer::error_to_string(active_import_request->error); ImVec2 textSize = ImGui::CalcTextSize(text); - ImGui::SetCursorPos(ImVec2((windowSize.x - textSize.x) * 0.5f, + + ImGui::SetCursorPos(ImVec2((windowSize.x - textSize.x) * 0.5f - 24, (windowSize.y) * 0.5f - radius - 40.0f)); + ImGui::Image(assets::load_image(ai_impl.icon_name), ImVec2(24, 24)); + + + ImGui::SetCursorPos(ImVec2((windowSize.x - textSize.x) * 0.5f + 10, + (windowSize.y) * 0.5f - radius - 40.0f - 2)); ImGui::Text(text); if (active_import_request->error == I_ERR_SUCCESS) { ImGui::SetCursorPos(ImVec2((windowSize.x - radius*2) * 0.5f, (windowSize.y - radius*2) * 0.5f)); - const ImVec4 col = ImGui::GetStyleColorVec4(ImGuiCol_ButtonHovered); - const ImVec4 bg = ImGui::GetStyleColorVec4(ImGuiCol_Button); - ImGui::LoadingIndicatorCircle(radius, bg, col, 10, 4.0f); + const ImVec4 col = ImGui::GetStyleColorVec4(ImGuiCol_LoadingIndicatorFg); + const ImVec4 bg = ImGui::GetStyleColorVec4(ImGuiCol_LoadingIndicatorBg); + ImGui::LoadingIndicatorCircle(radius, bg, col, 10, 4.0f, 0.0f); + + ImGui::Dummy(ImVec2(200,200)); } ImGui::PopFont(); diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp index ffdfb9b..e7872d1 100644 --- a/src/ui/ui_invoices.cpp +++ b/src/ui/ui_invoices.cpp @@ -49,11 +49,13 @@ static void _set_active_invoice(invoice inv) void ui::destroy_invoices() { - memops::unalloc(invoice_items_buffer); - memops::unalloc(activity_buffer); + // Currently causes crash because of multithreaded imports. + // Main thread needs to be locked. + //memops::unalloc(invoice_items_buffer); + //memops::unalloc(activity_buffer); - invoice_items_buffer = 0; - activity_buffer = 0; + //invoice_items_buffer = 0; + //activity_buffer = 0; } void ui::setup_invoices() @@ -497,6 +499,9 @@ static void draw_send_options() _reload_activities(); } + else { + // @TODO show failure reason + } }); } // if (ImGui::Selectable(locale::get("ui.sendAs.einvoice"), false)) { |
