summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@mailbox.org>2026-01-09 17:30:15 +0100
committerAldrik Ramaekers <aldrik@mailbox.org>2026-01-09 17:30:15 +0100
commit0821197bc1c57c756e737740d6a6de9c83314fae (patch)
tree4963d2be78bd0978442a4b311889c6f2c5feaeee /src
parentccacaf0582bcea4a71ec8247ade0fd75e4ca99bf (diff)
fix warnings
Diffstat (limited to 'src')
-rw-r--r--src/administration.cpp26
-rw-r--r--src/administration_reader.cpp5
-rw-r--r--src/administration_writer.cpp2
-rw-r--r--src/countries.cpp10
-rw-r--r--src/exporter.cpp2
-rw-r--r--src/importer.cpp1
-rw-r--r--src/main_windows.cpp319
-rw-r--r--src/providers/DeepSeek.cpp4
-rw-r--r--src/providers/MailerSend.cpp2
-rw-r--r--src/providers/openAI.cpp6
-rw-r--r--src/ui/imgui_extensions.cpp2
-rw-r--r--src/ui/ui_earnings.cpp18
-rw-r--r--src/ui/ui_expenses.cpp1
-rw-r--r--src/ui/ui_invoices.cpp1
-rw-r--r--src/ui/ui_main.cpp2
-rw-r--r--src/ui/ui_settings.cpp4
-rw-r--r--src/ui/ui_setup.cpp4
-rw-r--r--src/ui/ui_tax.cpp6
18 files changed, 46 insertions, 369 deletions
diff --git a/src/administration.cpp b/src/administration.cpp
index f69ae9d..3905c74 100644
--- a/src/administration.cpp
+++ b/src/administration.cpp
@@ -45,7 +45,7 @@ time_t administration::get_default_invoice_expire_duration() // TODO depricated
}
static void administration_recalculate_billing_item_totals(billing_item* item);
-static char* get_default_currency_for_country(char* country_code);
+static const char* get_default_currency_for_country(const char* country_code);
static void create_default_cost_centers()
{
@@ -203,16 +203,16 @@ void administration::destroy()
administration_destroy_list(&g_administration.cost_centers);
}
-void administration::create_from_file(char* save_file)
+void administration::create_from_file(const char* save_file)
{
if (is_initialized) administration::destroy();
administration_create();
strops::copy(g_administration.path, save_file, sizeof(g_administration.path));
- strops::copy(g_administration.program_version, config::PROGRAM_VERSION, sizeof(g_administration.program_version));
+ strops::copy(g_administration.program_version, PROGRAM_VERSION, sizeof(g_administration.program_version));
}
-void administration::create_empty(char* save_file)
+void administration::create_empty(const char* save_file)
{
if (is_initialized) administration::destroy();
administration_create();
@@ -221,11 +221,11 @@ void administration::create_empty(char* save_file)
g_administration.next_sequence_number = 1;
strops::copy(g_administration.path, save_file, sizeof(g_administration.path));
- strops::copy(g_administration.program_version, config::PROGRAM_VERSION, sizeof(g_administration.program_version));
+ strops::copy(g_administration.program_version, PROGRAM_VERSION, sizeof(g_administration.program_version));
administration::company_info_set(administration::contact_create_empty());
}
-void administration::create_default(char* save_file)
+void administration::create_default(const char* save_file)
{
administration::create_empty(save_file);
if (!strops::empty(save_file)) create_default_cost_centers();
@@ -291,12 +291,12 @@ bool administration::company_info_is_valid()
return administration::contact_is_valid(g_administration.company_info) == A_ERR_SUCCESS;
}
-char* administration::get_default_currency()
+const char* administration::get_default_currency()
{
return g_administration.default_currency;
}
-char* administration::get_currency_symbol_for_currency(char* code)
+const char* administration::get_currency_symbol_for_currency(const char* code)
{
// Major European currencies
if (strops::equals(code, "EUR")) return "€"; // Euro
@@ -663,7 +663,7 @@ void administration::set_file_path(char* path)
strops::copy(g_administration.path, path, MAX_LEN_PATH);
}
-char* administration::get_file_path()
+const char* administration::get_file_path()
{
return strops::empty(g_administration.path) ? NULL : g_administration.path;
}
@@ -992,7 +992,7 @@ a_err administration::project_is_valid(project data)
return A_ERR_SUCCESS;
}
-char* administration::project_get_status_string(project data)
+const char* administration::project_get_status_string(project data)
{
switch(data.state)
{
@@ -1350,7 +1350,7 @@ a_err administration::cost_center_update(cost_center data)
// Invoice functions.
// =======================
-static char* get_default_currency_for_country(char* country_code)
+static const char* get_default_currency_for_country(const char* country_code)
{
if (country_code == NULL || strops::length(country_code) != 2)
return "EUR"; // default
@@ -1763,7 +1763,7 @@ u32 administration::invoice_get_partial_list_incomming(u32 page_index, u32 page_
return invoice_get_partial_list(page_index, page_size, buffer, 0);
}
-char* administration::invoice_get_status_string(invoice* invoice)
+const char* administration::invoice_get_status_string(invoice* invoice)
{
switch(invoice->extras.status)
{
@@ -1957,7 +1957,7 @@ a_err administration::activity_import(activity ac)
return A_ERR_SUCCESS;
}
-a_err administration::activity_add(char* user, char* ref_id, char* message)
+a_err administration::activity_add(const char* user, const char* ref_id, const char* message)
{
activity* new_activity = (activity*)memops::alloc(sizeof(activity));
strops::copy(new_activity->user_name, user, MAX_LEN_SHORT_DESC);
diff --git a/src/administration_reader.cpp b/src/administration_reader.cpp
index e481c10..81f5b02 100644
--- a/src/administration_reader.cpp
+++ b/src/administration_reader.cpp
@@ -358,7 +358,7 @@ bool administration_reader::import_project(char* buffer, size_t buffer_size)
a_err result = administration::project_import(data);
if (result == A_ERR_SUCCESS) {
- logger::info("Loaded project in %.3fms. id=%s description=%s state=%d started=%lld end=%lld",
+ logger::info("Loaded project in %.3fms. id=%s description=%s state=%d started=%ld end=%ld",
STOPWATCH_TIME, data.id, data.description, data.state, data.start_date, data.end_date);
}
else {
@@ -523,7 +523,6 @@ bool administration_reader::import_activities(char* buffer, size_t buffer_size)
if (strops::equals(child_name, "Activity"))
{
activity ac = {0};
- time_t timestamp;
ac.timestamp = xml_get_s64(child, "Timestamp");
xml_get_str(child, ac.user_name, MAX_LEN_SHORT_DESC, "User");
@@ -536,7 +535,7 @@ bool administration_reader::import_activities(char* buffer, size_t buffer_size)
memops::unalloc(child_name);
}
- logger::info("Loaded %d activities in %.3fms.", child_count, STOPWATCH_TIME);
+ logger::info("Loaded %ld activities in %.3fms.", child_count, STOPWATCH_TIME);
xml_document_free(document, false);
return true;
diff --git a/src/administration_writer.cpp b/src/administration_writer.cpp
index e0a6ae7..ee0ccdb 100644
--- a/src/administration_writer.cpp
+++ b/src/administration_writer.cpp
@@ -919,7 +919,7 @@ bool administration_writer::save_administration_info_blocking()
strops::replace_int32(file_content, buf_length, "{{NEXT_ID}}", administration::get_next_id());
strops::replace_int32(file_content, buf_length, "{{NEXT_SEQUENCE_NUMBER}}", administration::get_next_sequence_number());
- strops::replace(file_content, buf_length, "{{PROGRAM_VERSION}}", config::PROGRAM_VERSION);
+ strops::replace(file_content, buf_length, "{{PROGRAM_VERSION}}", PROGRAM_VERSION);
ai_service active_ai_service = administration::get_active_ai_service();
strops::replace_int32(file_content, buf_length, "{{ACTIVE_AI_SERVICE_PROVIDER}}", (s32)active_ai_service.provider);
diff --git a/src/countries.cpp b/src/countries.cpp
index 5d1ea5a..5384889 100644
--- a/src/countries.cpp
+++ b/src/countries.cpp
@@ -258,7 +258,7 @@ bool country::is_enabled(const char* country_code)
return country_map[index].enabled;
}
-time_t country::get_default_invoice_expire_duration(char* country_code)
+time_t country::get_default_invoice_expire_duration(const char* country_code)
{
s32 index = get_index_by_country_code(country_code);
if (index == -1) return 0;
@@ -275,7 +275,7 @@ bool country::tax_is_implemented(const char* country_code)
country_map[index].add_billing_item_to_tax_report && country_map[index].get_available_tax_rates;
}
-void country::fill_tax_report_with_categories(char* country_code, tax_report* report)
+void country::fill_tax_report_with_categories(const char* country_code, tax_report* report)
{
s32 index = get_index_by_country_code(country_code);
assert(index != -1);
@@ -283,7 +283,7 @@ void country::fill_tax_report_with_categories(char* country_code, tax_report* re
country_map[index].fill_tax_report_with_categories(report);
}
-bool country::add_billing_item_to_tax_report(char* country_code, tax_report* report, invoice* inv, billing_item* item)
+bool country::add_billing_item_to_tax_report(const char* country_code, tax_report* report, invoice* inv, billing_item* item)
{
s32 index = get_index_by_country_code(country_code);
assert(index != -1);
@@ -291,7 +291,7 @@ bool country::add_billing_item_to_tax_report(char* country_code, tax_report* rep
return country_map[index].add_billing_item_to_tax_report(report, inv, item);
}
-float country::calculate_tax_report_final(char* country_code, tax_report* report)
+float country::calculate_tax_report_final(const char* country_code, tax_report* report)
{
s32 index = get_index_by_country_code(country_code);
assert(index != -1);
@@ -299,7 +299,7 @@ float country::calculate_tax_report_final(char* country_code, tax_report* report
return country_map[index].calculate_tax_report_final(report);
}
-time_t country::get_invoice_date_to_use_for_tax_report(char* country_code, invoice* inv)
+time_t country::get_invoice_date_to_use_for_tax_report(const char* country_code, invoice* inv)
{
s32 index = get_index_by_country_code(country_code);
assert(index != -1);
diff --git a/src/exporter.cpp b/src/exporter.cpp
index 74c77c1..54d2b59 100644
--- a/src/exporter.cpp
+++ b/src/exporter.cpp
@@ -53,7 +53,7 @@ static int _send_email_t(void* arg) {
return 0;
}
-exporter::export_request* exporter::send_email(char* sender, char* recipient, const char* subject, const char* text, send_email_callback ev)
+exporter::export_request* exporter::send_email(const char* sender, const char* recipient, const char* subject, const char* text, send_email_callback ev)
{
exporter::export_request* result = (exporter::export_request*)memops::alloc(sizeof(exporter::export_request));
result->started_at = time(NULL);
diff --git a/src/importer.cpp b/src/importer.cpp
index fd3e90e..c3757ce 100644
--- a/src/importer.cpp
+++ b/src/importer.cpp
@@ -24,7 +24,6 @@
#include "memops.hpp"
#include "locales.hpp"
#include "importer.hpp"
-#include "file_templates.hpp"
#include "administration_reader.hpp"
extern importer::ai_provider_impl _chatgpt_api_provider;
diff --git a/src/main_windows.cpp b/src/main_windows.cpp
deleted file mode 100644
index 47c9a42..0000000
--- a/src/main_windows.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
-* Copyright (c) 2025 Aldrik Ramaekers <aldrik.ramaekers@gmail.com>
-*
-* 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.
-*/
-
-#ifdef win64
-
-#include "imgui/imgui.h"
-#include "imgui_impl_win32.h"
-#include "imgui_impl_dx11.h"
-#include <d3d11.h>
-#include <tchar.h>
-#include "timer_lib/timer.h"
-#include "ui.hpp"
-#include "administration.hpp"
-#include "administration_writer.hpp"
-#include "administration_reader.hpp"
-
-// Data
-static HWND hwnd;
-static ID3D11Device* g_pd3dDevice = nullptr;
-static ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;
-static IDXGISwapChain* g_pSwapChain = nullptr;
-static bool g_SwapChainOccluded = false;
-static UINT g_ResizeWidth = 0, g_ResizeHeight = 0;
-static ID3D11RenderTargetView* g_mainRenderTargetView = nullptr;
-
-// Forward declarations of helper functions
-bool CreateDeviceD3D(HWND hWnd);
-void CleanupDeviceD3D();
-void CreateRenderTarget();
-void CleanupRenderTarget();
-LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
-
-void platorm_maximize_window()
-{
- LONG style = GetWindowLong(hwnd, GWL_STYLE);
-
- // allow resizing + maximize
- style |= (WS_THICKFRAME | WS_MAXIMIZEBOX);
-
- SetWindowLong(hwnd, GWL_STYLE, style);
-
- // Apply style changes
- SetWindowPos(hwnd, NULL, 0, 0, 0, 0,
- SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
-
- ShowWindow(hwnd, SW_MAXIMIZE);
-}
-
-// Main code
-//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
-int main(int argc, char** argv)
-{
- int start_width = 1280;
- int start_height = 800;
-
- // Make process DPI aware and obtain main monitor scale
- ImGui_ImplWin32_EnableDpiAwareness();
- float main_scale = ImGui_ImplWin32_GetDpiScaleForMonitor(::MonitorFromPoint(POINT{ 0, 0 }, MONITOR_DEFAULTTOPRIMARY));
-
- // Create application window
- WNDCLASSEXW wc = { sizeof(wc), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(nullptr), nullptr, nullptr, nullptr, nullptr, L"ImGui Example", nullptr };
- ::RegisterClassExW(&wc);
-
- // Get screen size
- int screenW = GetSystemMetrics(SM_CXSCREEN);
- int screenH = GetSystemMetrics(SM_CYSCREEN);
-
- // Calculate top-left so window is centered
- int x = (screenW - start_width) / 2;
- int y = (screenH - start_height) / 2;
-
- hwnd = ::CreateWindowW(wc.lpszClassName, L"OpenBooks", WS_OVERLAPPEDWINDOW,
- x, y, (int)(start_width * main_scale), (int)(start_height * main_scale), nullptr, nullptr, wc.hInstance, nullptr);
-
- // Initialize Direct3D
- if (!CreateDeviceD3D(hwnd))
- {
- CleanupDeviceD3D();
- ::UnregisterClassW(wc.lpszClassName, wc.hInstance);
- return 1;
- }
-
- // Show the window
- ::ShowWindow(hwnd, SW_SHOWDEFAULT);
- ::UpdateWindow(hwnd);
-
- // Setup Dear ImGui context
- IMGUI_CHECKVERSION();
- ImGui::CreateContext();
- ImGuiIO& io = ImGui::GetIO();
- io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls
- io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls
- io.IniFilename = NULL;
- io.LogFilename = NULL;
-
- // Setup Dear ImGui style
- ImGui::StyleColorsDark();
- //ImGui::StyleColorsLight();
-
- // Setup scaling
- ImGuiStyle& style = ImGui::GetStyle();
- style.ScaleAllSizes(main_scale); // Bake a fixed style scale. (until we have a solution for dynamic style scaling, changing this requires resetting Style + calling this again)
- style.FontScaleDpi = main_scale; // Set initial font scale. (using io.ConfigDpiScaleFonts=true makes this unnecessary. We leave both here for documentation purpose)
-
- // Setup Platform/Renderer backends
- ImGui_ImplWin32_Init(hwnd);
- ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
-
- // Load Fonts
- // - If no fonts are loaded, dear imgui will use the default font. You can also load multiple fonts and use ImGui::PushFont()/PopFont() to select them.
- // - AddFontFromFileTTF() will return the ImFont* so you can store it if you need to select the font among multiple.
- // - If the file cannot be loaded, the function will return a nullptr. Please handle those errors in your application (e.g. use an assertion, or display an error and quit).
- // - Use '#define IMGUI_ENABLE_FREETYPE' in your imconfig file to use Freetype for higher quality font rendering.
- // - Read 'docs/FONTS.md' for more instructions and details.
- // - Remember that in C/C++ if you want to include a backslash \ in a string literal you need to write a double backslash \\ !
- style.FontSizeBase = 18.0f;
- //io.Fonts->AddFontDefault();
- io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\segoeui.ttf");
- //io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\seguisym.ttf");
- ui::fontBold = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\segoeuib.ttf");
- ui::fontBig = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\segoeuib.ttf", 30);
- //io.Fonts->AddFontFromFileTTF("../../misc/fonts/DroidSans.ttf");
- //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf");
- //io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf");
- //ImFont* font = io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf");
- //IM_ASSERT(font != nullptr);
-
- ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f);
-
- timer_lib_initialize();
- administration_writer::create();
-
- if (argc < 2) {
- administration::create_default("");
- }
- else {
- administration_reader::open_existing(argv[1]);
- }
-
- // Main loop
- bool done = false;
- while (!done)
- {
- // Poll and handle messages (inputs, window resize, etc.)
- // See the WndProc() function below for our to dispatch events to the Win32 backend.
- MSG msg;
- while (::PeekMessage(&msg, nullptr, 0U, 0U, PM_REMOVE))
- {
- ::TranslateMessage(&msg);
- ::DispatchMessage(&msg);
- if (msg.message == WM_QUIT)
- done = true;
- }
- if (done)
- break;
-
- // Handle window being minimized or screen locked
- if (g_SwapChainOccluded && g_pSwapChain->Present(0, DXGI_PRESENT_TEST) == DXGI_STATUS_OCCLUDED)
- {
- ::Sleep(10);
- continue;
- }
- g_SwapChainOccluded = false;
-
- // Handle window resize (we don't resize directly in the WM_SIZE handler)
- if (g_ResizeWidth != 0 && g_ResizeHeight != 0)
- {
- CleanupRenderTarget();
- g_pSwapChain->ResizeBuffers(0, g_ResizeWidth, g_ResizeHeight, DXGI_FORMAT_UNKNOWN, 0);
- g_ResizeWidth = g_ResizeHeight = 0;
- CreateRenderTarget();
- }
-
- // Start the Dear ImGui frame
- ImGui_ImplDX11_NewFrame();
- ImGui_ImplWin32_NewFrame();
- ImGui::NewFrame();
-
- ui::draw_main();
-
- // Rendering
- ImGui::Render();
- const float clear_color_with_alpha[4] = { clear_color.x * clear_color.w, clear_color.y * clear_color.w, clear_color.z * clear_color.w, clear_color.w };
- g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, nullptr);
- g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, clear_color_with_alpha);
- ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
-
- // Present
- HRESULT hr = g_pSwapChain->Present(1, 0); // Present with vsync
- //HRESULT hr = g_pSwapChain->Present(0, 0); // Present without vsync
- g_SwapChainOccluded = (hr == DXGI_STATUS_OCCLUDED);
- }
-
- administration_writer::destroy();
- timer_lib_shutdown();
- administration::destroy();
-
- // Cleanup
- ImGui_ImplDX11_Shutdown();
- ImGui_ImplWin32_Shutdown();
- ImGui::DestroyContext();
-
- CleanupDeviceD3D();
- ::DestroyWindow(hwnd);
- ::UnregisterClassW(wc.lpszClassName, wc.hInstance);
-
- return 0;
-}
-
-// Helper functions
-
-bool CreateDeviceD3D(HWND hWnd)
-{
- // Setup swap chain
- DXGI_SWAP_CHAIN_DESC sd;
- ZeroMemory(&sd, sizeof(sd));
- sd.BufferCount = 2;
- sd.BufferDesc.Width = 0;
- sd.BufferDesc.Height = 0;
- sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
- sd.BufferDesc.RefreshRate.Numerator = 60;
- sd.BufferDesc.RefreshRate.Denominator = 1;
- sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH;
- sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
- sd.OutputWindow = hWnd;
- sd.SampleDesc.Count = 1;
- sd.SampleDesc.Quality = 0;
- sd.Windowed = TRUE;
- sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
-
- UINT createDeviceFlags = 0;
- //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG;
- D3D_FEATURE_LEVEL featureLevel;
- const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, };
- HRESULT res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext);
- if (res == DXGI_ERROR_UNSUPPORTED) // Try high-performance WARP software driver if hardware is not available.
- res = D3D11CreateDeviceAndSwapChain(nullptr, D3D_DRIVER_TYPE_WARP, nullptr, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext);
- if (res != S_OK)
- return false;
-
- CreateRenderTarget();
- return true;
-}
-
-void CleanupDeviceD3D()
-{
- CleanupRenderTarget();
- if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = nullptr; }
- if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = nullptr; }
- if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = nullptr; }
-}
-
-void CreateRenderTarget()
-{
- ID3D11Texture2D* pBackBuffer;
- g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer));
- g_pd3dDevice->CreateRenderTargetView(pBackBuffer, nullptr, &g_mainRenderTargetView);
- pBackBuffer->Release();
-}
-
-void CleanupRenderTarget()
-{
- if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = nullptr; }
-}
-
-// Forward declare message handler from imgui_impl_win32.cpp
-extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
-
-// Win32 message handler
-// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
-// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application, or clear/overwrite your copy of the mouse data.
-// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application, or clear/overwrite your copy of the keyboard data.
-// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
-LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
- return true;
-
- switch (msg)
- {
- case WM_GETMINMAXINFO:
- {
- MINMAXINFO* minMaxInfo = (MINMAXINFO*)lParam;
- minMaxInfo->ptMinTrackSize.x = 1400; // Minimum width
- minMaxInfo->ptMinTrackSize.y = 900; // Minimum height
- return 0;
- }
-
- case WM_SIZE:
- if (wParam == SIZE_MINIMIZED)
- return 0;
- g_ResizeWidth = (UINT)LOWORD(lParam); // Queue resize
- g_ResizeHeight = (UINT)HIWORD(lParam);
- return 0;
- case WM_SYSCOMMAND:
- if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu
- return 0;
- break;
- case WM_DESTROY:
- ::PostQuitMessage(0);
- return 0;
- }
- return ::DefWindowProcW(hWnd, msg, wParam, lParam);
-}
-
-#endif \ No newline at end of file
diff --git a/src/providers/DeepSeek.cpp b/src/providers/DeepSeek.cpp
index 2fc73c9..7c695fb 100644
--- a/src/providers/DeepSeek.cpp
+++ b/src/providers/DeepSeek.cpp
@@ -25,7 +25,7 @@
#define QUERY_BUFFER_SIZE 1000000
char* query_buffer = 0;
-static bool _DeepSeek_query_with_file(const char* query, size_t query_length, char* file_id, char** response)
+static bool _DeepSeek_query_with_file(const char* query, size_t query_length, const char* file_id, char** response)
{
(void)file_id;
(void)query_length;
@@ -74,7 +74,7 @@ static bool _DeepSeek_query_with_file(const char* query, size_t query_length, ch
return 1;
}
-static bool _DeepSeek_upload_file(char* file_path, char* file_id, size_t file_id_len)
+static bool _DeepSeek_upload_file(const char* file_path, char* file_id, size_t file_id_len)
{
(void)file_id;
(void)file_id_len;
diff --git a/src/providers/MailerSend.cpp b/src/providers/MailerSend.cpp
index ab07907..1758ac8 100644
--- a/src/providers/MailerSend.cpp
+++ b/src/providers/MailerSend.cpp
@@ -22,7 +22,7 @@
#include "logger.hpp"
#include "exporter.hpp"
-bool _MailerSend_send_email(char* sender, char* recipient, const char* subject, const char* text)
+bool _MailerSend_send_email(const char* sender, const char* recipient, const char* subject, const char* text)
{
#if SIMULATE_EMAIL
usleep(1000 * 1000);
diff --git a/src/providers/openAI.cpp b/src/providers/openAI.cpp
index 62a2ae8..c743711 100644
--- a/src/providers/openAI.cpp
+++ b/src/providers/openAI.cpp
@@ -24,7 +24,7 @@
#include "logger.hpp"
#include "importer.hpp"
-static bool _openAI_batch_query_with_file(const char** queries, size_t query_count, char* file_id, invoice* buffer, importer::batch_query_response_handler response_handler)
+static bool _openAI_batch_query_with_file(const char** queries, size_t query_count, const char* file_id, invoice* buffer, importer::batch_query_response_handler response_handler)
{
const char *api_key = administration::get_active_ai_service().api_key_public;
httplib::SSLClient cli("api.openai.com", 443);
@@ -94,7 +94,7 @@ static bool _openAI_batch_query_with_file(const char** queries, size_t query_cou
return 1;
}
-static bool _openAI_query_with_file(const char* query, size_t query_length, char* file_id, char** response)
+static bool _openAI_query_with_file(const char* query, size_t query_length, const char* file_id, char** response)
{
const char *api_key = administration::get_active_ai_service().api_key_public;
@@ -133,7 +133,7 @@ static bool _openAI_query_with_file(const char* query, size_t query_length, char
return 1;
}
-static bool _openAI_upload_file(char* file_path, char* file_id, size_t file_id_len)
+static bool _openAI_upload_file(const char* file_path, char* file_id, size_t file_id_len)
{
const char *api_key = administration::get_active_ai_service().api_key_public;
const char *filename = strops::get_filename(file_path);
diff --git a/src/ui/imgui_extensions.cpp b/src/ui/imgui_extensions.cpp
index b3fc748..568806a 100644
--- a/src/ui/imgui_extensions.cpp
+++ b/src/ui/imgui_extensions.cpp
@@ -702,7 +702,7 @@ namespace ImGui
return result;
}
- void ToggleDropdown(bool *buffer, char* option1, char* option2)
+ void ToggleDropdown(bool *buffer, const char* option1, const char* option2)
{
const char* items[] = { option1, option2 };
diff --git a/src/ui/ui_earnings.cpp b/src/ui/ui_earnings.cpp
index b93bd75..6bd3b98 100644
--- a/src/ui/ui_earnings.cpp
+++ b/src/ui/ui_earnings.cpp
@@ -62,7 +62,7 @@ void ui::draw_earnings()
ImGui::Spacing();
- char* currency_symbol = administration::get_currency_symbol_for_currency(administration::get_default_currency());
+ const char* currency_symbol = administration::get_currency_symbol_for_currency(administration::get_default_currency());
if (ImGui::BeginTable("QuarterlyResultsTable", 5, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Hideable))
{
@@ -104,10 +104,10 @@ void ui::draw_earnings()
if (has_uncategorized_revenue || has_uncategorized_taxes || has_uncategorized_expenses) {
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0); ImGui::Text("(%s)", locale::get("statement.uncategorized"));
- ImGui::TableSetColumnIndex(1); ImGui::Text("");
- ImGui::TableSetColumnIndex(2); ImGui::Text("");
- ImGui::TableSetColumnIndex(3); ImGui::Text("");
- ImGui::TableSetColumnIndex(4); ImGui::Text("");
+ ImGui::TableSetColumnIndex(1); ImGui::TextUnformatted("");
+ ImGui::TableSetColumnIndex(2); ImGui::TextUnformatted("");
+ ImGui::TableSetColumnIndex(3); ImGui::TextUnformatted("");
+ ImGui::TableSetColumnIndex(4); ImGui::TextUnformatted("");
}
if (has_uncategorized_revenue) {
@@ -148,10 +148,10 @@ void ui::draw_earnings()
ImGuiTreeNodeFlags_SpanFullWidth |
ImGuiTreeNodeFlags_DefaultOpen);
- ImGui::TableSetColumnIndex(1); ImGui::Text("");
- ImGui::TableSetColumnIndex(2); ImGui::Text("");
- ImGui::TableSetColumnIndex(3); ImGui::Text("");
- ImGui::TableSetColumnIndex(4); ImGui::Text("");
+ ImGui::TableSetColumnIndex(1); ImGui::TextUnformatted("");
+ ImGui::TableSetColumnIndex(2); ImGui::TextUnformatted("");
+ ImGui::TableSetColumnIndex(3); ImGui::TextUnformatted("");
+ ImGui::TableSetColumnIndex(4); ImGui::TextUnformatted("");
if (!toggled) continue;
diff --git a/src/ui/ui_expenses.cpp b/src/ui/ui_expenses.cpp
index 1e74508..7c9f596 100644
--- a/src/ui/ui_expenses.cpp
+++ b/src/ui/ui_expenses.cpp
@@ -33,7 +33,6 @@ static importer::invoice_request* active_import_request = 0;
static ui::view_state current_view_state = ui::view_state::LIST_ALL;
static invoice active_invoice = {0};
-static invoice selected_for_removal = {0};
static const float sidepanel_width = 200.0f;
static billing_item* invoice_items_buffer = 0;
diff --git a/src/ui/ui_invoices.cpp b/src/ui/ui_invoices.cpp
index 06f1456..49ee697 100644
--- a/src/ui/ui_invoices.cpp
+++ b/src/ui/ui_invoices.cpp
@@ -33,7 +33,6 @@ static u32 activity_count;
static ui::view_state current_view_state = ui::view_state::LIST_ALL;
static invoice active_invoice = {0};
-static invoice selected_for_removal = {0};
static const float sidepanel_width = 200.0f;
static billing_item* invoice_items_buffer = 0;
diff --git a/src/ui/ui_main.cpp b/src/ui/ui_main.cpp
index 0fff65d..5d74fa6 100644
--- a/src/ui/ui_main.cpp
+++ b/src/ui/ui_main.cpp
@@ -177,7 +177,7 @@ void ui::draw_main()
ImGuiWindowFlags_NoBringToFrontOnFocus |
ImGuiWindowFlags_NoCollapse);
- char* path = administration::get_file_path();
+ const char* path = administration::get_file_path();
if (path == NULL) {
ImGui::Text("%s: %s", locale::get("ui.workingOn"), locale::get("ui.unsavedProject"));
}
diff --git a/src/ui/ui_settings.cpp b/src/ui/ui_settings.cpp
index c10ca26..854d065 100644
--- a/src/ui/ui_settings.cpp
+++ b/src/ui/ui_settings.cpp
@@ -264,7 +264,7 @@ static void draw_ai_service_ui()
if (ImGui::CollapsingHeader(locale::get("settings.services.ai_service")))
{
- char* ai_service_names[AI_PROVIDER_END];
+ const char* ai_service_names[AI_PROVIDER_END];
for (u32 i = 0; i < AI_PROVIDER_END; i++) {
ai_service_names[i] = importer::get_ai_provider_implementation((ai_provider)i).provider_name;
}
@@ -355,7 +355,7 @@ static void draw_email_service_ui()
{
if (ImGui::CollapsingHeader(locale::get("settings.services.email_service")))
{
- char* email_service_names[EMAIL_PROVIDER_END];
+ const char* email_service_names[EMAIL_PROVIDER_END];
for (u32 i = 0; i < EMAIL_PROVIDER_END; i++) {
email_service_names[i] = exporter::get_email_provider_implementation((email_provider)i).provider_name;
}
diff --git a/src/ui/ui_setup.cpp b/src/ui/ui_setup.cpp
index 069c336..6140d5a 100644
--- a/src/ui/ui_setup.cpp
+++ b/src/ui/ui_setup.cpp
@@ -84,7 +84,7 @@ void ui::draw_setup()
}
if (ImGui::Button(ICON_FA_FOLDER_PLUS " Create administration", ImVec2(area.x, 0))) { // @locale
- if (administration_reader::open_existing(NULL)) {
+ if (administration_reader::open_new()) {
ui::set_state(ui::main_state::UI_SETTINGS);
ui::recreate_window_for_main_views();
}
@@ -93,7 +93,7 @@ void ui::draw_setup()
ImGui::PopStyleVar();
char version_txt[100];
- strops::format(version_txt, sizeof(version_txt), "VERSION: %s %s", config::PROGRAM_VERSION, _DATE_);
+ strops::format(version_txt, sizeof(version_txt), "VERSION: %s %s", PROGRAM_VERSION, _DATE_);
textSize = ImGui::CalcTextSize(version_txt);
ImGui::SetCursorPos(ImVec2(5, area.y));
diff --git a/src/ui/ui_tax.cpp b/src/ui/ui_tax.cpp
index f4176a6..5280e2a 100644
--- a/src/ui/ui_tax.cpp
+++ b/src/ui/ui_tax.cpp
@@ -63,7 +63,7 @@ void ui::draw_tax_report()
ImGui::Spacing();
- char* currency_symbol = administration::get_currency_symbol_for_currency(administration::get_default_currency());
+ const char* currency_symbol = administration::get_currency_symbol_for_currency(administration::get_default_currency());
tax_report report = statement->reports[current_page];
if (ImGui::BeginTable("QuarterlyTaxTable", 4, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Hideable))
@@ -110,7 +110,7 @@ void ui::draw_tax_report()
#else
ImGui::TableSetColumnIndex(2);
if (line.show_net) ImGui::Text("%.2f %s", line.total_net, currency_symbol);
- else ImGui::Text("");
+ else ImGui::TextUnformatted("");
ImGui::TableSetColumnIndex(3);
if (line.show_tax) {
@@ -126,7 +126,7 @@ void ui::draw_tax_report()
}
}
}
- else ImGui::Text("");
+ else ImGui::TextUnformatted("");
#endif
if (bold) ImGui::PopFont();