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:
121
CMakeLists.txt
121
CMakeLists.txt
@@ -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 ()
|
||||
|
||||
Reference in New Issue
Block a user