Refakturiert die Anwendung und modernisiert das Build-System

Diese umfangreiche Überarbeitung verbessert die Architektur, den Build-Prozess und die Benutzeroberfläche der Toolbox.

Wesentliche Änderungen:
- **Build-System:** Umfassende Modernisierung des CMake-Builds für verbesserte Stabilität und Wartbarkeit. Die Konfiguration wurde auf zielbasierte Befehle umgestellt, `c_tray` stabilisiert und `saucer-desktop` entfernt.
- **Modulare Architektur:** Die Kernlogik von `ToolboxWindow` wurde in dedizierte Helferklassen ausgelagert, darunter `LuaRunner` für die Skriptausführung, `ToolRegistry` für die Tool-Erkennung, `ResourceLoader` für UI-Ressourcen, `ToolboxJsBridge` für JavaScript-Bindungen und `WindowPlacement` für die Fensterverwaltung. Dies reduziert die Komplexität und fördert die Wiederverwendbarkeit.
- **Benutzeroberfläche (UI):** Die HTML-Templates (`einstellungen_custom.html`, `index.html`) und Stylesheets (`styles.css`) wurden zentralisiert und überarbeitet, um eine kohärentere Benutzeroberfläche mit benutzerdefinierten Fensterdekorationen zu bieten. Neue Funktionen wie das Öffnen der Kommandozeile und eine "Tool hinzufügen"-Karte wurden integriert.
- **Tray-Verwaltung:** Die Tray-Icon-Logik wurde in `TrayController` gekapselt, um eine robustere und zentralisierte Steuerung zu ermöglichen, insbesondere im Umgang mit Explorer-Neustarts.
This commit is contained in:
2026-05-08 15:31:42 +02:00
parent 843f978309
commit 074fa73992
26 changed files with 1676 additions and 701 deletions

View File

@@ -1,11 +1,18 @@
cmake_minimum_required(VERSION 3.30)
set(CMAKE_CXX_STANDARD 23)
set(saucer_no_version_check ON)
set(BUILD_SHARED_LIBS OFF)
option(BUILD_SHARED_LIBS "Build as shared library" OFF)
project(Toolbox LANGUAGES C CXX)
project(Toolbox)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries" FORCE)
set(saucer_no_version_check ON CACHE BOOL "Skip saucer version checks" FORCE)
# MSVC 19.44 provides the STL features saucer-fill may try to polyfill
# (jthread, stop_token, move_only_function, join_with). Keep the polyfill target
# present for saucer, but disable replacements to avoid duplicate declarations.
set(fill_replacements "" CACHE STRING "saucer-fill replacements" FORCE)
add_subdirectory(lib/c_tray)
add_subdirectory(lib/json)
@@ -13,88 +20,94 @@ add_subdirectory(lib/cppcodec)
add_subdirectory(lib/saucer)
add_subdirectory(lib/lua)
add_subdirectory(lib/sol2)
#add_subdirectory(lib/saucer4lua)
add_subdirectory(lib/toolbox_win)
# add_subdirectory(lib/saucer4lua)
include_directories(inc)
include_directories(lib/json/include/nlohmann)
#include_directories(out_embed)
file(GLOB_RECURSE APP_SOURCES CONFIGURE_DEPENDS
"src/*.cpp"
)
file(GLOB_RECURSE APP_HEADERS CONFIGURE_DEPENDS
"inc/*.h"
"inc/*.hpp"
)
if (WIN32)
set(RESOURCE_FILES toolbox.rc)
list(APPEND APP_SOURCES toolbox.rc)
endif ()
# Header-Datei einbinden
include_directories(lib/c_tray)
# Plattformabhängige Einstellungen
if (WIN32)
set(PLATFORM_SOURCES lib/c_tray/tray_windows.c)
set(LIBS shell32)
elseif (APPLE)
set(PLATFORM_SOURCES lib/c_tray/tray_darwin.m)
find_library(COCOA_LIBRARY Cocoa)
set(LIBS ${COCOA_LIBRARY})
elseif (UNIX)
set(PLATFORM_SOURCES lib/c_tray/tray_linux.c)
find_package(PkgConfig REQUIRED)
pkg_check_modules(APPINDICATOR REQUIRED appindicator3-0.1)
include_directories(${APPINDICATOR_INCLUDE_DIRS})
set(LIBS ${APPINDICATOR_LIBRARIES})
endif ()
file(GLOB_RECURSE SOURCES "src/*.cpp" "inc/*.h")
list(APPEND SOURCES "src/toolConfig.cpp") # Nur für .cpp und .h
file(GLOB_RECURSE MODULE_SOURCES "module/*.ixx") # Separates GLOB für Module
add_executable(Toolbox main.cpp
${SOURCES}
${RESOURCE_FILES}
${PLATFORM_SOURCES}
add_executable(Toolbox
main.cpp
${APP_SOURCES}
${APP_HEADERS}
)
target_sources(Toolbox
PUBLIC
PUBLIC
FILE_SET cxx_modules TYPE CXX_MODULES
FILES ${MODULE_SOURCES}
FILES
module/toolboxTray.ixx
)
target_include_directories(${PROJECT_NAME} PRIVATE "out_embed")
target_include_directories(Toolbox
PRIVATE
inc
lib/c_tray
)
# Ensure WebView2 headers from saucer's NuGet are available to this target (for saucer webview2 backend)
if (WIN32)
# Find the WebView2 include folder that saucer fetched into the build tree
target_compile_definitions(Toolbox PRIVATE NOMINMAX UNICODE _UNICODE)
file(GLOB WEBVIEW2_INCLUDE_DIR
"${CMAKE_BINARY_DIR}/lib/saucer/nuget/packages/Microsoft.Web.WebView2.*/build/native/include")
"${CMAKE_BINARY_DIR}/lib/saucer/nuget/packages/Microsoft.Web.WebView2.*/build/native/include"
)
if (WEBVIEW2_INCLUDE_DIR)
message(STATUS "Using WebView2 includes at: ${WEBVIEW2_INCLUDE_DIR}")
target_include_directories(${PROJECT_NAME} PRIVATE ${WEBVIEW2_INCLUDE_DIR})
target_include_directories(Toolbox PRIVATE ${WEBVIEW2_INCLUDE_DIR})
else ()
message(WARNING "WebView2 headers not found in build tree. The build may fail when including WebView2.h.")
endif ()
endif ()
saucer_embed("res" TARGET ${PROJECT_NAME})
set(EMBED_DESTINATION "${CMAKE_BINARY_DIR}/embedded")
file(MAKE_DIRECTORY "${EMBED_DESTINATION}/saucer/embedded")
CPMFindPackage(
NAME saucer-desktop
VERSION 4.0.2
GIT_REPOSITORY "https://github.com/saucer/desktop"
file(GLOB_RECURSE EMBED_RESOURCE_FILES CONFIGURE_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/res/*"
)
target_link_libraries(
${PROJECT_NAME}
PRIVATE
foreach (RESOURCE_FILE IN LISTS EMBED_RESOURCE_FILES)
if (IS_DIRECTORY "${RESOURCE_FILE}")
continue()
endif ()
file(RELATIVE_PATH RESOURCE_RELATIVE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res" "${RESOURCE_FILE}")
get_filename_component(RESOURCE_RELATIVE_DIR "${RESOURCE_RELATIVE_PATH}" DIRECTORY)
file(MAKE_DIRECTORY "${EMBED_DESTINATION}/saucer/embedded/files/${RESOURCE_RELATIVE_DIR}")
endforeach ()
saucer_embed("res"
TARGET Toolbox
DESTINATION "${EMBED_DESTINATION}"
)
target_link_libraries(Toolbox
PRIVATE
saucer::saucer
sol2::sol2
lua::lib
tray
nlohmann_json
cppcodec
#saucer4lua
toolbox_win
saucer::embedded
saucer::desktop
)
if (WIN32)
target_link_libraries(Toolbox PRIVATE shell32 user32 gdi32)
endif ()
if (WIN32 AND (CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel"))
set_target_properties(Toolbox PROPERTIES WIN32_EXECUTABLE TRUE)
endif ()