summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/helpers.cpp58
-rw-r--r--src/ui/ui_main.cpp3
-rw-r--r--src/ui/ui_settings.cpp15
3 files changed, 76 insertions, 0 deletions
diff --git a/src/ui/helpers.cpp b/src/ui/helpers.cpp
index 6ca1bd2..c15528e 100644
--- a/src/ui/helpers.cpp
+++ b/src/ui/helpers.cpp
@@ -1,8 +1,66 @@
+#include <tinyfiledialogs.h>
+
#include "ui.hpp"
#include "imgui.h"
#include "locales.hpp"
#include "strops.hpp"
+static ui_status current_status;
+
+void ui_draw_status()
+{
+ float region_width = ImGui::GetContentRegionAvail().x;
+ float text_width = ImGui::CalcTextSize(current_status.text).x;
+
+ // Move cursor so that the text ends at the right edge
+ if (current_status.visible)
+ {
+ ImGui::SetCursorPosX(ImGui::GetCursorPosX() + region_width - text_width);
+ ImGui::PushStyleColor(ImGuiCol_Text, current_status.color);
+ ImGui::TextUnformatted(current_status.text);
+ ImGui::PopStyleColor();
+ }
+
+ ImGuiIO& io = ImGui::GetIO();
+ current_status.time += io.DeltaTime;
+
+ if (current_status.time >= STATUS_FLASH_INTERVAL && current_status.flash_count < STATUS_MAX_FLASHES)
+ {
+ current_status.visible = !current_status.visible;
+ if (current_status.visible) current_status.flash_count++;
+ current_status.time = 0.0f;
+ }
+
+ if (current_status.time >= STATUS_DURATION)
+ {
+ current_status.text[0] = 0;
+ }
+}
+
+void ui_set_status_ex(const char* txt, int color)
+{
+ current_status.flash_count = 0;
+ current_status.visible = true;
+ current_status.time = 0.0f;
+ current_status.color = color;
+ strops_copy(current_status.text, txt, STATUS_TEXT_LEN);
+}
+
+void ui_set_status_error(const char* txt)
+{
+ ui_set_status_ex(txt, COLOR_ERROR);
+}
+
+void ui_set_status(const char* txt)
+{
+ ui_set_status_ex(txt, COLOR_DEFAULT);
+}
+
+ui_status ui_get_status()
+{
+ return current_status;
+}
+
void ui_helper_draw_required_tag()
{
ImDrawList* draw_list = ImGui::GetWindowDrawList();
diff --git a/src/ui/ui_main.cpp b/src/ui/ui_main.cpp
index f6b179e..33747f1 100644
--- a/src/ui/ui_main.cpp
+++ b/src/ui/ui_main.cpp
@@ -143,6 +143,9 @@ void ui_draw_main()
ImGui::Text("%s: %s", localize("ui.workingOn"), administration_file_path_get());
}
+ ImGui::SameLine();
+ ui_draw_status();
+
ImGui::End();
ImGui::PopStyleVar();
} \ No newline at end of file
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp
index 3f9ab6d..9cc2cd9 100644
--- a/src/ui/ui_settings.cpp
+++ b/src/ui/ui_settings.cpp
@@ -6,6 +6,7 @@
#include "imgui.h"
#include "administration.hpp"
#include "locales.hpp"
+#include "administration_writer.hpp"
extern void draw_contact_form(contact* buffer, bool viewing_only = false);
@@ -124,6 +125,12 @@ static void ui_draw_vat_rates()
is_adding_item = false;
administration_tax_bracket_update(new_tax_bracket);
+ if (administration_writer_save_tax_brackets()) {
+ ui_set_status(localize("status.saved"));
+ }
+ else {
+ ui_set_status_error(localize("status.saveFailed"));
+ }
ui_destroy_settings();
ui_setup_settings();
@@ -170,6 +177,12 @@ static void ui_draw_vat_rates()
is_adding_item = false;
administration_tax_bracket_add(new_tax_bracket);
+ if (administration_writer_save_tax_brackets()) {
+ ui_set_status(localize("status.saved"));
+ }
+ else {
+ ui_set_status_error(localize("status.saveFailed"));
+ }
ui_destroy_settings();
ui_setup_settings();
@@ -226,6 +239,7 @@ static void ui_draw_cost_centers()
is_adding_item = false;
administration_cost_center_update(new_cost_center);
+ administration_writer_save_cost_centers();
memset(&new_cost_center, 0, sizeof(new_cost_center));
ui_destroy_settings();
@@ -280,6 +294,7 @@ static void ui_draw_cost_centers()
is_adding_item = false;
is_editing_item = false;
administration_cost_center_add(new_cost_center);
+ administration_writer_save_cost_centers();
ui_destroy_settings();
ui_setup_settings();