mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 13:54:57 +00:00
Add handling for config assets in the Qt6 frontend generator: generate_cmake.py now discovers config files (find_config_files) and includes their QML/JS entries and JSON resources in the generated lists. CMakeLists.txt was updated to use ../../qml/qt6 path prefixes for root QML files, to include numerous config JSON/JS resources, and to update the auto-generated header file counts. Also rename several frontend docs into frontends/qt6/docs/.
8.3 KiB
8.3 KiB
Qt6 Frontend Roadmap
Status: Compiles and links (26 QML views, ~14,500 LOC) Last Build: 2026-03-19 | Qt 6.7.3 via Conan | MSVC 19.5 | C++20
Completed
Phase 1: Qt5 → Qt6 Migration
- Replace versioned imports (
import QtQuick 2.15→import QtQuick) across 62 files - Remove
QtGraphicalEffects(4 files) — shadows dropped, Qt6 has no direct equivalent without Qt5Compat - Replace
TabView/Tab(Qt Quick Controls 1) withTabBar+StackLayout - Stub
ModPlayer— libopenmpt not available via Conan; Qt6QAudioSinkAPI ready when it is - Fix
QJSValue::engine()removal inDBALClient.cpp - Fix
MaterialLanding.qmlbrace nesting - Fix
PackageManager.qmlmodelDataaccess andonClickedscoping - Add
CMAKE_AUTOMOC,QTP0001policy,/Zc:__cplusplusfor MSVC - Remove unused
cprdependency
Phase 2: Shared Component Library Migration
- Migrate from local
qmllib/Material/(35 components) to shared/qml/library (QmlComponents 1.0, 119 components) - Update all 22 package views to use
QmlComponents 1.0 - Add
engine.addImportPath()inmain.cppfor runtime QML resolution - Map component APIs:
MaterialButton→CButton,MaterialPalette→Theme, etc. - Fix API differences:
CListItem.title(not.text),CTabBar.tabs(not.model),CAlert.text(not.message)
Phase 3: 5-Level Navigation (old/ Vision Restored)
App.qml— Main shell with app bar, level badges, sidebar,StackLayoutrouter- Auth system — 4 seed users (demo/admin/god/super), level-gated navigation
- Level 1:
FrontPage.qml— Hero, feature cards, tabbed CI/status panels - Level 1:
LoginView.qml— Credentials form with seed user hints - Level 2:
DashboardView.qml— Stats cards, activity feed, quick actions - Level 2:
ProfileView.qml— Avatar, bio, password change, connected accounts - Level 2:
CommentsView.qml— Post/like/delete, sort, role-based visibility - Level 3:
AdminView.qml— 10 entities, CRUD dialogs, search, filter, pagination, bulk delete (871 LOC) - Level 4:
GodPanel.qml— 14-tab builder container with config summary - Level 5:
SuperGodPanel.qml— Tenants, god users, power transfer, system health
Phase 4: God Panel Builder Tools (15 Agents)
SchemaEditor.qml— Visual JSON schema editor (634 LOC)WorkflowEditor.qml— Node-based DAG editor with test runner (772 LOC)LuaEditor.qml— Code editor, parameters, snippets, security scan (910 LOC)DatabaseManager.qml— 14 DBAL backends, connection test, adapter patterns (467 LOC)PageRoutesManager.qml— Route table, level/layout config (524 LOC)ComponentHierarchyEditor.qml— UI tree editor with properties (468 LOC)CssClassManager.qml— Style class editor with live preview (691 LOC)DropdownConfigManager.qml— Select field config with reorder (785 LOC)UserManagement.qml— User CRUD, role filter, SHA-512 badge (676 LOC)ThemeEditor.qml— 9 theme selector, color swatches, typography (876 LOC)SMTPConfigEditor.qml— Server config, test send, email templates (632 LOC)
Phase 5: DBAL Integration
- Register
DBALClientas QML context property inmain.cpp - Migrate to DBAL REST API:
/api/v1/{tenant}/{package}/{entity}[/{id}] - Add
packageIdproperty to DBALClient (C++ + QML), default"core" - Wire
AdminViewentity table to DBAL REST endpoints with mock fallback - Wire
SchemaEditorto load schemas from DBAL with mock fallback - Wire
UserManagementto real User entity CRUD with mock fallback - Wire
DashboardViewhealth cards to/healthendpoint - Add DBAL connection status indicator in app bar (green/red dot + "DBAL")
- Add DBAL offline banner below app bar ("DBAL Offline — showing cached data")
- Add
health(),version(),status(),listSchemas(),getSchema()to C++ DBALClient DBALProvider.qml— REST-based QML HTTP client withentityPath()helpers
Phase 6: Build System (Python + stdlib)
- Create
generate_cmake.py— zero-dependency script (Python stdlib only)- Globs all
*.qmlfiles automatically (root, qmllib/, packages/) - Reads
metadata.jsonfrom each package for auto-registration - Discovers
src/*.cppandsrc/*.hfor C++ sources - Handles SVG/audio/resource globbing
- Supports conditional features (libopenmpt, Qt Multimedia)
- Globs all
- Create
cmake_config.jsondefining modules, dependencies, feature flags --dry-runmode to preview generated CMakeLists.txt--outputand--configCLI options
Phase 7: Runtime Polish
- Dark/light theme switching (toggle button in app bar)
- Keyboard shortcuts (Ctrl+K search, Ctrl+L login/logout, Ctrl+1-5 level switch, Escape back)
- Window state persistence via
Qt.labs.settings(size, position, theme) - Error boundary — DBAL offline banner with warning styling
Phase 4.5: Media Service Integration
MediaServicePanel.qml— 4-tab media service management (~730 LOC)- Jobs tab: submission form, active jobs table, progress bars, cancel
- Radio tab: channel management, playlists, start/stop streaming
- TV tab: channel scheduling, multi-resolution, broadcast controls
- Plugins tab: FFmpeg/ImageMagick/Pandoc/Radio/LibRetro grid with reload
- Integrated into GodPanel as tab 12 (14 total tabs)
- Separate HTTP client for media service at
http://localhost:8090
Planned
Phase 8: Package System
- Dynamic package view loading from disk (PackageViewLoader → real file resolution)
- Package install/uninstall with metadata validation
- Package dependency resolution (metadata.json
dependenciesfield) - Hot-reload QML when package files change (QFileSystemWatcher)
Phase 9: Audio & Media
- Integrate libopenmpt via Conan when available (ModPlayer currently stubbed)
- Add Qt6 Multimedia (
QAudioSink) for .mod playback - Waveform visualizer in ModPlayerPanel
Phase 10: Production Readiness
- Installer (Qt Installer Framework or NSIS)
- Code signing (Windows Authenticode)
- Auto-update mechanism
- Crash reporter
- Telemetry opt-in
- CI/CD: GitHub Actions build matrix (Windows, macOS, Linux)
Architecture
App.qml (ApplicationWindow)
├── CAppBar (Level nav + auth + DBAL status + theme toggle)
├── DBAL Offline Banner (conditional warning strip)
├── Sidebar (CListItem navigation, level-gated)
├── Settings (Qt.labs.settings — window size/position/theme persistence)
├── Shortcuts (Ctrl+K/L/1-5, Escape)
└── StackLayout (17 views)
├── FrontPage (Level 1 - Public)
├── LoginView (Auth)
├── DashboardView (Level 2 - User, DBAL health)
├── ProfileView (Level 2)
├── CommentsView (Level 2)
├── PackageViewLoader×6 (Level 2 - Forum, Gallery, etc.)
├── AdminView (Level 3 - Django CRUD, DBAL REST)
├── GodPanel (Level 4 - 14-tab builder)
│ ├── SchemaEditor (DBAL REST)
│ ├── WorkflowEditor
│ ├── LuaEditor
│ ├── DatabaseManager
│ ├── PageRoutesManager
│ ├── ComponentHierarchyEditor
│ ├── CssClassManager
│ ├── DropdownConfigManager
│ ├── UserManagement (DBAL REST)
│ ├── ThemeEditor
│ ├── SMTPConfigEditor
│ └── MediaServicePanel (Media Daemon REST)
├── PackageManager (Level 4)
├── Storybook (Level 4)
└── SuperGodPanel (Level 5 - Tenants + Power Transfer)
C++ Backend
├── PackageRegistry (JSON metadata loader)
├── ModPlayer (stub — libopenmpt pending)
└── DBALClient (REST client → DBAL daemon :8080)
├── CRUD: /api/v1/{tenant}/{package}/{entity}[/{id}]
├── System: /health, /version, /status
└── Schema: /api/v1/{tenant}/schema[/{entity}]
Build System
├── generate_cmake.py (auto-generates CMakeLists.txt from file globs)
└── cmake_config.json (project config, Qt components, feature flags)
Shared: /qml/ QmlComponents 1.0 (119 components, 9 themes, 19 languages)