diff options
| author | Aldrik Ramaekers <aldrik@mailbox.org> | 2026-01-03 15:38:13 +0100 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@mailbox.org> | 2026-01-03 15:38:13 +0100 |
| commit | 66a918a4621f1ecb828e68eac94fdb34852e9570 (patch) | |
| tree | 48a4bd4b3545a8379ffb74cd79b03243dcb4629f | |
| parent | 83a9739b3aff75cf767db687bd531fa5283e0e72 (diff) | |
ui improvements
| -rw-r--r-- | TODO | 5 | ||||
| -rw-r--r-- | include/config.hpp | 2 | ||||
| -rw-r--r-- | src/administration.cpp | 2 | ||||
| -rw-r--r-- | src/ui/ui_earnings.cpp | 2 | ||||
| -rw-r--r-- | src/ui/ui_expenses.cpp | 3 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 3 | ||||
| -rw-r--r-- | src/ui/ui_main.cpp | 43 | ||||
| -rw-r--r-- | src/ui/ui_settings.cpp | 9 | ||||
| -rw-r--r-- | src/ui/ui_tax.cpp | 2 |
9 files changed, 51 insertions, 20 deletions
@@ -2,16 +2,17 @@ TODO: Fix: - When reloading view, lock main thread as the freeing might cause a crash -- reload invoice when backing out of edit mode. Unsaved changed are not undone atm. +- reload invoice when backing out of edit mode. Unsaved changed are not undone atm Refactor: -- Refactor zip writing to be faster +- Refactor zip writing to be faster (Windows is slow) Testing: - write tests for strops.hpp - write tests that check error handling for corrupt files. (e.g. references to tax rates, project and cost center that failed to load) Features: +- Refactor contact and project UI to be like invoice & expenses - Timeline for invoice modifications (e.g. edited, status changed, paid) - When creating a new openbooks file, user should only be able to set company info before anything else. - Show AI balance available in settings page diff --git a/include/config.hpp b/include/config.hpp index defb972..75932fd 100644 --- a/include/config.hpp +++ b/include/config.hpp @@ -30,7 +30,7 @@ #define u64 uint64_t #define SIMULATE_EMAIL 1 -#define SIMULATE_SLOW_DISK 1 +#define SIMULATE_SLOW_DISK 0 #define SIMULATE_WRITE_FAILURE 0 namespace config { diff --git a/src/administration.cpp b/src/administration.cpp index 6e7d2f1..44438ff 100644 --- a/src/administration.cpp +++ b/src/administration.cpp @@ -227,7 +227,7 @@ void administration::create_empty(char* save_file) void administration::create_default(char* save_file) { administration::create_empty(save_file); - create_default_cost_centers(); + if (!strops::empty(save_file)) create_default_cost_centers(); } // Other functions. diff --git a/src/ui/ui_earnings.cpp b/src/ui/ui_earnings.cpp index cb6c848..afe0210 100644 --- a/src/ui/ui_earnings.cpp +++ b/src/ui/ui_earnings.cpp @@ -32,6 +32,8 @@ void ui::setup_earnings() void ui::destroy_earnings() { memops::unalloc(statement); + + statement = 0; } void ui::draw_earnings() diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp index 7f8d1cc..45a0646 100644 --- a/src/ui/ui_expenses.cpp +++ b/src/ui/ui_expenses.cpp @@ -54,6 +54,9 @@ void ui::destroy_expenses() { memops::unalloc(invoice_items_buffer); memops::unalloc(activity_buffer); + + invoice_items_buffer = 0; + activity_buffer = 0; } void ui::setup_expenses() diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp index 519544b..e9af66e 100644 --- a/src/ui/ui_invoices.cpp +++ b/src/ui/ui_invoices.cpp @@ -52,6 +52,9 @@ void ui::destroy_invoices() { memops::unalloc(invoice_items_buffer); memops::unalloc(activity_buffer); + + invoice_items_buffer = 0; + activity_buffer = 0; } void ui::setup_invoices() diff --git a/src/ui/ui_main.cpp b/src/ui/ui_main.cpp index 67d678f..dde0882 100644 --- a/src/ui/ui_main.cpp +++ b/src/ui/ui_main.cpp @@ -71,8 +71,14 @@ void ui::draw_main() { if (ImGui::BeginMenu(locale::get("ui.menu.file"))) { - if (ImGui::MenuItem(locale::get("ui.menu.file.new"))) { administration_reader::open_new(); } - if (ImGui::MenuItem(locale::get("ui.menu.file.open"))) { administration_reader::open_existing(NULL); } + if (ImGui::MenuItem(locale::get("ui.menu.file.new"))) { + administration_reader::open_new(); + ui::set_state(ui::main_state::UI_SETTINGS); + } + if (ImGui::MenuItem(locale::get("ui.menu.file.open"))) { + administration_reader::open_existing(NULL); + ui::set_state(ui::main_state::UI_SETTINGS); + } ImGui::EndMenu(); } @@ -105,21 +111,26 @@ void ui::draw_main() float buttonWidth = sidePanelWidth; - if (ImGui::Button(locale::get("nav.invoices"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_INVOICES); - if (ImGui::Button(locale::get("nav.expenses"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_EXPENSES); - if (ImGui::Button(locale::get("nav.contacts"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_CONTACTS); - - static bool reports_opened = true; - ImGui::Button(locale::get("nav.reports"), ImVec2(buttonWidth, 24)); - if (reports_opened) - { - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(20.0f, 0.0f)); - if (ImGui::Button(locale::get("nav.reports.results"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_REPORT_RESULTS); - if (ImGui::Button(locale::get("nav.reports.tax"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_REPORT_TAX); - ImGui::PopStyleVar(); + if (administration::company_info_is_valid()) { + if (ImGui::Button(locale::get("nav.invoices"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_INVOICES); + if (ImGui::Button(locale::get("nav.expenses"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_EXPENSES); + if (ImGui::Button(locale::get("nav.contacts"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_CONTACTS); + + static bool reports_opened = true; + ImGui::Button(locale::get("nav.reports"), ImVec2(buttonWidth, 24)); + if (reports_opened) + { + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(20.0f, 0.0f)); + if (ImGui::Button(locale::get("nav.reports.results"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_REPORT_RESULTS); + if (ImGui::Button(locale::get("nav.reports.tax"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_REPORT_TAX); + ImGui::PopStyleVar(); + } + + if (ImGui::Button(locale::get("nav.projects"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_PROJECTS); + } + else { + if (ui_state != ui::main_state::UI_SETTINGS) ui::set_state(ui::main_state::UI_SETTINGS); } - - if (ImGui::Button(locale::get("nav.projects"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_PROJECTS); if (ImGui::Button(locale::get("nav.settings"), ImVec2(buttonWidth, 24))) ui::set_state(ui::main_state::UI_SETTINGS); ImGui::PopStyleColor(1); diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp index d41affa..0d3a210 100644 --- a/src/ui/ui_settings.cpp +++ b/src/ui/ui_settings.cpp @@ -24,6 +24,7 @@ #include "countries.hpp" #include "administration.hpp" #include "administration_writer.hpp" +#include "administration_reader.hpp" static contact company_info; @@ -41,6 +42,9 @@ void ui::destroy_settings() { memops::unalloc(tax_rates); memops::unalloc(cost_centers); + + tax_rates = 0; + cost_centers = 0; } void ui::setup_settings() @@ -394,6 +398,11 @@ void ui::draw_settings() if (!can_save) ImGui::BeginDisabled(); ImGui::Spacing(); if (ImGui::Button(locale::get("form.save"), true)) { + + if (administration::get_file_path() == NULL) { + administration_reader::open_new(); + } + administration_writer::set_write_completed_event_callback(_write_company_info_callback); administration::company_info_set(company_info); } diff --git a/src/ui/ui_tax.cpp b/src/ui/ui_tax.cpp index a89bd7a..1b1e374 100644 --- a/src/ui/ui_tax.cpp +++ b/src/ui/ui_tax.cpp @@ -33,6 +33,8 @@ void ui::setup_tax_report() void ui::destroy_tax_report() { memops::unalloc(statement); + + statement = 0; } void ui::draw_tax_report() |
