summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/imgui_extensions.cpp65
-rw-r--r--src/ui/ui_expenses.cpp4
-rw-r--r--src/ui/ui_invoices.cpp14
-rw-r--r--src/ui/ui_settings.cpp8
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);
}