/* * Copyright (c) 2025 Aldrik Ramaekers * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #pragma once #include "imgui.h" #include "administration.hpp" #define STATUS_TEXT_LEN 64 namespace ui { typedef enum { UI_INVOICES = 0, UI_EXPENSES = 1, UI_CONTACTS = 2, UI_REPORT_RESULTS = 3, UI_REPORT_TAX = 4, UI_PROJECTS = 5, UI_SETTINGS = 6, UI_LOG = 7, UI_END } main_state; typedef enum { LIST_ALL, EDIT_EXISTING, CREATE, VIEW_EXISTING, VIEW_IMPORT_REQUEST, } view_state; typedef struct { bool visible; int flash_count; int color; char text[STATUS_TEXT_LEN]; float time; bool loading; } status; extern ImFont* fontBold; extern ImFont* fontBig; void set_state(main_state state); // Status functions. status get_status(); void set_status_loading(bool loading); void set_status_error(const char* txt); void set_status(const char* txt); void draw_status(); // Draw calls. void draw_main(); void draw_contacts(); void draw_projects(); void draw_invoices(); void draw_settings(); void draw_expenses(); void draw_earnings(); void draw_log(); void draw_tax_report(); // Setup calls. void setup_invoices(); void setup_contacts(); void setup_projects(); void setup_settings(); void setup_expenses(); void setup_earnings(); void setup_tax_report(); // Destroy calls. void destroy_invoices(); void destroy_settings(); void destroy_expenses(); void destroy_earnings(); void destroy_tax_report(); } // Custom imgui widgets. namespace ImGui { void InputTextWithError(const char* text, char* buffer, size_t buf_size, bool has_error); int TextInputWithAutocomplete(const char* hint, char* buffer, size_t buf_size, char** suggestions, int suggestion_count, bool has_error); bool FormInvoiceFileSelector(char* text, char* buffer); void FormContactAutocomplete(contact* buffer, bool has_error); void FormInputTextWithErrorHint(const char* hint, char* buffer, size_t buf_size, bool has_error); void FormCountryCombo(char* buffer, size_t buf_size); void FormContactTypeCombo(contact_type* type); void FormCostCenterCombo(char* costcenter_id); void FormProjectCombo(char* project_id); void FormTaxRateCombo(char* tax_rate_id, char* orig_country, char* dest_country, bool has_error); bool FormCurrencyCombo(char* currency); void FormToggleCombo(bool *buffer, char* option1, char* option2); }