diff options
| author | Aldrik Ramaekers <aldrik@mailbox.org> | 2026-01-09 17:30:15 +0100 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrik@mailbox.org> | 2026-01-09 17:30:15 +0100 |
| commit | 0821197bc1c57c756e737740d6a6de9c83314fae (patch) | |
| tree | 4963d2be78bd0978442a4b311889c6f2c5feaeee /src | |
| parent | ccacaf0582bcea4a71ec8247ade0fd75e4ca99bf (diff) | |
fix warnings
Diffstat (limited to 'src')
| -rw-r--r-- | src/administration.cpp | 26 | ||||
| -rw-r--r-- | src/administration_reader.cpp | 5 | ||||
| -rw-r--r-- | src/administration_writer.cpp | 2 | ||||
| -rw-r--r-- | src/countries.cpp | 10 | ||||
| -rw-r--r-- | src/exporter.cpp | 2 | ||||
| -rw-r--r-- | src/importer.cpp | 1 | ||||
| -rw-r--r-- | src/main_windows.cpp | 319 | ||||
| -rw-r--r-- | src/providers/DeepSeek.cpp | 4 | ||||
| -rw-r--r-- | src/providers/MailerSend.cpp | 2 | ||||
| -rw-r--r-- | src/providers/openAI.cpp | 6 | ||||
| -rw-r--r-- | src/ui/imgui_extensions.cpp | 2 | ||||
| -rw-r--r-- | src/ui/ui_earnings.cpp | 18 | ||||
| -rw-r--r-- | src/ui/ui_expenses.cpp | 1 | ||||
| -rw-r--r-- | src/ui/ui_invoices.cpp | 1 | ||||
| -rw-r--r-- | src/ui/ui_main.cpp | 2 | ||||
| -rw-r--r-- | src/ui/ui_settings.cpp | 4 | ||||
| -rw-r--r-- | src/ui/ui_setup.cpp | 4 | ||||
| -rw-r--r-- | src/ui/ui_tax.cpp | 6 |
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(); |
