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,82 +1,31 @@
#include <saucer/app.hpp>
#include <Windows.h>
#include <saucer/app.hpp>
#include <memory>
#include "toolboxWindow.h"
#include "resource.h"
#include "tray.h"
#include "trayController.h"
import toolboxTray;
coco::stray start(saucer::application* app) {
std::shared_ptr<saucer::application> appShared(app, [](saucer::application*) {});
ToolboxWindow* g_toolboxWindow = nullptr;
auto window = std::make_unique<ToolboxWindow>(appShared);
window->initialize();
void on_quit(struct tray_menu *item) {
tray_exit();
}
void on_open(struct tray_menu *item = nullptr) {
if (g_toolboxWindow) {
if (g_toolboxWindow->m_bShow) {
g_toolboxWindow->hide();
} else {
g_toolboxWindow->show();
}
TrayController tray(*window);
if (!tray.initialize()) {
co_return;
}
}
coco::stray start(saucer::application *app){
// Toolbox-Fenster erstellen und initialisieren
std::shared_ptr<saucer::application> app_shared(app, [](saucer::application*){});
auto toolboxWindow = std::make_unique<ToolboxWindow>(app_shared);
toolboxWindow->initialize();
g_toolboxWindow = toolboxWindow.get();
HICON hIcon = static_cast<HICON>(LoadImage(
GetModuleHandle(NULL),
MAKEINTRESOURCE(IDI_ICON1),
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
LR_SHARED
));
// Tray-Menue definieren
tray_menu tray_menu_items[] = {
{"Oeffnen", 0, 0, 0, on_open, nullptr},
{"-", 0, 0, 0, nullptr, nullptr}, // Separator
{"Beenden", 0, 0, 0, on_quit, nullptr},
{nullptr, 0, 0, 0, nullptr, nullptr} // Ende des Menues
};
// ToolboxTray erstellen
toolboxTray tray("toolbox.ico", "Toolbox");
tray.icon_handle = hIcon;
tray.icon_is_shared = (hIcon != nullptr) ? 1 : 0;
// Linksklick-Aktion registrieren
tray.setLeftClickAction([&]() {
on_open(nullptr); // Ruft die Funktion ohne Menueeintrag auf
});
// Tray-Menue registrieren
tray.setTrayMenu(tray_menu_items);
if (tray_init(&tray) != 0) {
fprintf(stderr, "Fehler beim Initialisieren des Tray-Icons\n");
co_return; // Fehlerfall: coroutine beenden
}
//toolboxWindow->show();
co_await app->finish();
}
#ifdef _DEBUG
int main(int argc, char** argv) {
int main(int, char**) {
return saucer::application::create({.id = "toolbox"})->run(start);
}
#else
#include <Windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
return saucer::application::create({.id = "toolbox"})->run(start);
}
#endif