diff --git a/frontends/qt6/main.cpp b/frontends/qt6/main.cpp index 0d5d7a5b7..1219d4311 100644 --- a/frontends/qt6/main.cpp +++ b/frontends/qt6/main.cpp @@ -14,16 +14,20 @@ int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; - // Add shared QML component library import paths - // No symlinks — directly reference the qml/ directory tree - const QString projectRoot = QDir::cleanPath(QStringLiteral(SRCDIR) + QStringLiteral("/../..")); - const QString qmlDir = projectRoot + QStringLiteral("/qml"); - - // Add qml/ parent so Qt finds "import QmlComponents 1.0" at qml/components/ - // and "import MetaBuilder 1.0" at qml/MetaBuilder/ + // QML import paths — no symlinks needed + // qml/qmldir has "module QmlComponents" + // qml/MetaBuilder/qmldir has "module MetaBuilder" + // + // Qt resolves "import X 1.0" by scanning import paths + // for a qmldir that declares "module X". Adding qml/ + // as an import path lets Qt find the QmlComponents + // module (qml/qmldir) and MetaBuilder (qml/MetaBuilder/) + const QString projectRoot = QDir::cleanPath( + QStringLiteral(SRCDIR) + QStringLiteral("/../..")); + const QString qmlDir = + projectRoot + QStringLiteral("/qml"); if (QDir(qmlDir).exists()) { engine.addImportPath(qmlDir); - engine.addImportPath(projectRoot); } PackageRegistry registry; diff --git a/qml/MetaBuilder/CActivityList.qml b/qml/MetaBuilder/CActivityList.qml index 37e338c68..540509371 100644 --- a/qml/MetaBuilder/CActivityList.qml +++ b/qml/MetaBuilder/CActivityList.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 CCard { id: root + objectName: "list_activity" + Accessible.role: Accessible.List + Accessible.name: "Recent Activity" property var activities: [] property bool isDark: false diff --git a/qml/MetaBuilder/CAdapterPatternSelector.qml b/qml/MetaBuilder/CAdapterPatternSelector.qml index bec427d65..976d46157 100644 --- a/qml/MetaBuilder/CAdapterPatternSelector.qml +++ b/qml/MetaBuilder/CAdapterPatternSelector.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 ColumnLayout { id: root + objectName: "selector_adapter_pattern" + Accessible.role: Accessible.Pane + Accessible.name: "Multi-Adapter Pattern" Layout.fillWidth: true spacing: 12 diff --git a/qml/MetaBuilder/CAddDropdownDialog.qml b/qml/MetaBuilder/CAddDropdownDialog.qml index 55365893d..aee6036ce 100644 --- a/qml/MetaBuilder/CAddDropdownDialog.qml +++ b/qml/MetaBuilder/CAddDropdownDialog.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 CDialog { id: addDropdownDialog + objectName: "dialog_add_dropdown" + Accessible.role: Accessible.Dialog + Accessible.name: title + activeFocusOnTab: true title: "Add New Dropdown" property string dropdownName: "" diff --git a/qml/MetaBuilder/CAddFieldDialog.qml b/qml/MetaBuilder/CAddFieldDialog.qml index 7e5f245c8..bd5c6b9c7 100644 --- a/qml/MetaBuilder/CAddFieldDialog.qml +++ b/qml/MetaBuilder/CAddFieldDialog.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 CDialog { id: dlg + objectName: "dialog_add_field" + Accessible.role: Accessible.Dialog + Accessible.name: title + activeFocusOnTab: true title: "Add New Field" property var fieldTypes: [] property string fieldName: "" diff --git a/qml/MetaBuilder/CAddRouteDialog.qml b/qml/MetaBuilder/CAddRouteDialog.qml index 0a75b7f88..323146df4 100644 --- a/qml/MetaBuilder/CAddRouteDialog.qml +++ b/qml/MetaBuilder/CAddRouteDialog.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 CDialog { id: root + objectName: "dialog_add_route" + Accessible.role: Accessible.Dialog + Accessible.name: title + activeFocusOnTab: true property string newPath: "" property string newTitle: "" diff --git a/qml/MetaBuilder/CAdminContentPanel.qml b/qml/MetaBuilder/CAdminContentPanel.qml index 7420e05e3..cb95575d7 100644 --- a/qml/MetaBuilder/CAdminContentPanel.qml +++ b/qml/MetaBuilder/CAdminContentPanel.qml @@ -3,6 +3,9 @@ import QtQuick.Layouts; import QmlComponents 1.0 import "../AdminCrud.js" as Crud Rectangle { id: panel; color: Theme.background + objectName: "panel_admin_content" + Accessible.role: Accessible.Pane + Accessible.name: "Admin Content Panel" property var adminRoot property var adminDlg ColumnLayout { diff --git a/qml/MetaBuilder/CAdminDialogs.qml b/qml/MetaBuilder/CAdminDialogs.qml index b0d395dc5..e45bdbb36 100644 --- a/qml/MetaBuilder/CAdminDialogs.qml +++ b/qml/MetaBuilder/CAdminDialogs.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 Item { id: root + objectName: "container_admin_dialogs" + Accessible.role: Accessible.Pane + Accessible.name: "Admin Dialogs" property bool createDialogOpen: false property bool editDialogOpen: false diff --git a/qml/MetaBuilder/CAdminStatsBar.qml b/qml/MetaBuilder/CAdminStatsBar.qml index 4010827d2..cd1405ff7 100644 --- a/qml/MetaBuilder/CAdminStatsBar.qml +++ b/qml/MetaBuilder/CAdminStatsBar.qml @@ -15,6 +15,9 @@ import QmlComponents 1.0 */ Rectangle { id: root + objectName: "bar_admin_stats" + Accessible.role: Accessible.Pane + Accessible.name: "Admin Statistics" property var stats: [] // Array of { label, value, accent } property bool isDark: Theme.mode === "dark" diff --git a/qml/MetaBuilder/CAdminToolbar.qml b/qml/MetaBuilder/CAdminToolbar.qml index a9a7abc54..c238e485f 100644 --- a/qml/MetaBuilder/CAdminToolbar.qml +++ b/qml/MetaBuilder/CAdminToolbar.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 ColumnLayout { id: root + objectName: "toolbar_admin" + Accessible.role: Accessible.ToolBar + Accessible.name: "Admin Toolbar" spacing: 12 property string selectedEntity: "" diff --git a/qml/MetaBuilder/CBackendConnectionSection.qml b/qml/MetaBuilder/CBackendConnectionSection.qml index 1d707751f..83ca2805c 100644 --- a/qml/MetaBuilder/CBackendConnectionSection.qml +++ b/qml/MetaBuilder/CBackendConnectionSection.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 ColumnLayout { id: root + objectName: "section_backend_connection" + Accessible.role: Accessible.Pane + Accessible.name: "Backend Connection" Layout.fillWidth: true spacing: 16 diff --git a/qml/MetaBuilder/CBackendDetailPanel.qml b/qml/MetaBuilder/CBackendDetailPanel.qml index c1063ab29..162d8e284 100644 --- a/qml/MetaBuilder/CBackendDetailPanel.qml +++ b/qml/MetaBuilder/CBackendDetailPanel.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 CCard { id: root + objectName: "panel_backend_detail" + Accessible.role: Accessible.Pane + Accessible.name: backend.name || "Backend" Layout.fillWidth: true Layout.fillHeight: true diff --git a/qml/MetaBuilder/CBackendListSidebar.qml b/qml/MetaBuilder/CBackendListSidebar.qml index 3910d9ac6..e794e19fa 100644 --- a/qml/MetaBuilder/CBackendListSidebar.qml +++ b/qml/MetaBuilder/CBackendListSidebar.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 CCard { id: root + objectName: "sidebar_backend_list" + Accessible.role: Accessible.List + Accessible.name: "Backend List" Layout.preferredWidth: 300 Layout.fillHeight: true diff --git a/qml/MetaBuilder/CCanvasGrid.qml b/qml/MetaBuilder/CCanvasGrid.qml index ea6f6cc24..0ee7c3d70 100644 --- a/qml/MetaBuilder/CCanvasGrid.qml +++ b/qml/MetaBuilder/CCanvasGrid.qml @@ -2,6 +2,9 @@ import QtQuick Canvas { id: root + objectName: "canvas_grid" + Accessible.role: Accessible.Pane + Accessible.name: "Canvas Grid" onPaint: { var ctx = getContext("2d") diff --git a/qml/MetaBuilder/CCanvasInteractionArea.qml b/qml/MetaBuilder/CCanvasInteractionArea.qml index e56099573..9c70b1fcf 100644 --- a/qml/MetaBuilder/CCanvasInteractionArea.qml +++ b/qml/MetaBuilder/CCanvasInteractionArea.qml @@ -4,6 +4,9 @@ import QtQuick.Layouts MouseArea { id: root + objectName: "area_canvas_interaction" + Accessible.role: Accessible.Pane + Accessible.name: "Canvas Interaction Area" property bool drawingConnection: false diff --git a/qml/MetaBuilder/CCanvasViewport.qml b/qml/MetaBuilder/CCanvasViewport.qml index b72e8ef9c..26c5d39cd 100644 --- a/qml/MetaBuilder/CCanvasViewport.qml +++ b/qml/MetaBuilder/CCanvasViewport.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Flickable { id: canvas + objectName: "viewport_canvas" + Accessible.role: Accessible.Pane + Accessible.name: "Canvas Viewport" property alias canvasContent: contentItem property alias connectionLayer: connLayer diff --git a/qml/MetaBuilder/CCanvasZoomOverlay.qml b/qml/MetaBuilder/CCanvasZoomOverlay.qml index 0cb4e64a9..39158953e 100644 --- a/qml/MetaBuilder/CCanvasZoomOverlay.qml +++ b/qml/MetaBuilder/CCanvasZoomOverlay.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "overlay_canvas_zoom" + Accessible.role: Accessible.ToolBar + Accessible.name: "Zoom Controls" property real zoom: 1.0 diff --git a/qml/MetaBuilder/CCommentCard.qml b/qml/MetaBuilder/CCommentCard.qml index a6f8659c6..c7ba80a8b 100644 --- a/qml/MetaBuilder/CCommentCard.qml +++ b/qml/MetaBuilder/CCommentCard.qml @@ -5,6 +5,11 @@ import QmlComponents 1.0 CCard { id: root + objectName: "card_comment" + Accessible.role: Accessible.Pane + Accessible.name: comment.username + ? comment.username + " comment" + : "Comment" required property var comment property string currentUser: "" diff --git a/qml/MetaBuilder/CCommentInput.qml b/qml/MetaBuilder/CCommentInput.qml index 51e2f3d84..ed1103f62 100644 --- a/qml/MetaBuilder/CCommentInput.qml +++ b/qml/MetaBuilder/CCommentInput.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 CCard { id: root + objectName: "card_comment_input" + Accessible.role: Accessible.Pane + Accessible.name: "Post a Comment" + activeFocusOnTab: true property bool isDark: false property bool loading: false diff --git a/qml/MetaBuilder/CComponentPropertiesPanel.qml b/qml/MetaBuilder/CComponentPropertiesPanel.qml index 2abf3dec7..bf3c55515 100644 --- a/qml/MetaBuilder/CComponentPropertiesPanel.qml +++ b/qml/MetaBuilder/CComponentPropertiesPanel.qml @@ -5,6 +5,11 @@ import QmlComponents 1.0 ColumnLayout { id: root + objectName: "panel_component_properties" + Accessible.role: Accessible.Pane + Accessible.name: node + ? node.name + " Properties" + : "Component Properties" Layout.fillWidth: true Layout.fillHeight: true spacing: 14 diff --git a/qml/MetaBuilder/CComponentPropsList.qml b/qml/MetaBuilder/CComponentPropsList.qml index c65620028..70b1b5b22 100644 --- a/qml/MetaBuilder/CComponentPropsList.qml +++ b/qml/MetaBuilder/CComponentPropsList.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 ColumnLayout { id: root + objectName: "list_component_props" + Accessible.role: Accessible.List + Accessible.name: "Custom Properties" Layout.fillWidth: true Layout.fillHeight: true spacing: 8 diff --git a/qml/MetaBuilder/CComponentTreeRow.qml b/qml/MetaBuilder/CComponentTreeRow.qml index 135a3e265..0238ddc3b 100644 --- a/qml/MetaBuilder/CComponentTreeRow.qml +++ b/qml/MetaBuilder/CComponentTreeRow.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "row_component_tree" + Accessible.role: Accessible.ListItem + Accessible.name: node ? node.name : "" + activeFocusOnTab: true property var node property bool isSelected: false diff --git a/qml/MetaBuilder/CComponentTypeLegend.qml b/qml/MetaBuilder/CComponentTypeLegend.qml index e233cf1d5..d7faf09e4 100644 --- a/qml/MetaBuilder/CComponentTypeLegend.qml +++ b/qml/MetaBuilder/CComponentTypeLegend.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 FlexRow { id: root + objectName: "legend_component_type" + Accessible.role: Accessible.Pane + Accessible.name: "Component Type Legend" Layout.fillWidth: true spacing: 6 diff --git a/qml/MetaBuilder/CConfigStatCard.qml b/qml/MetaBuilder/CConfigStatCard.qml index b2d6b7e30..f7be7cc89 100644 --- a/qml/MetaBuilder/CConfigStatCard.qml +++ b/qml/MetaBuilder/CConfigStatCard.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "card_config_stat" + Accessible.role: Accessible.StaticText + Accessible.name: label + ": " + value property string label: "" property string value: "" diff --git a/qml/MetaBuilder/CConnectionLayer.qml b/qml/MetaBuilder/CConnectionLayer.qml index 8c9dba2b7..197a322ec 100644 --- a/qml/MetaBuilder/CConnectionLayer.qml +++ b/qml/MetaBuilder/CConnectionLayer.qml @@ -3,6 +3,9 @@ import QmlComponents 1.0 Canvas { id: root + objectName: "layer_connection" + Accessible.role: Accessible.Pane + Accessible.name: "Connection Layer" property var nodes: [] property var connections: ({}) diff --git a/qml/MetaBuilder/CConnectionTest.qml b/qml/MetaBuilder/CConnectionTest.qml index 12c39b452..69052637d 100644 --- a/qml/MetaBuilder/CConnectionTest.qml +++ b/qml/MetaBuilder/CConnectionTest.qml @@ -10,6 +10,9 @@ import "../dbal" */ ColumnLayout { id: root + objectName: "panel_connection_test" + Accessible.role: Accessible.Pane + Accessible.name: "Connection Test" spacing: 12 property bool isDark: Theme.mode === "dark" diff --git a/qml/MetaBuilder/CCreateSchemaDialog.qml b/qml/MetaBuilder/CCreateSchemaDialog.qml index 7513a1357..c89a6c462 100644 --- a/qml/MetaBuilder/CCreateSchemaDialog.qml +++ b/qml/MetaBuilder/CCreateSchemaDialog.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 CDialog { id: dlg + objectName: "dialog_create_schema" + Accessible.role: Accessible.Dialog + Accessible.name: title + activeFocusOnTab: true title: "Create New Schema" property string schemaName: "" property string schemaDescription: "" diff --git a/qml/MetaBuilder/CDataTable.qml b/qml/MetaBuilder/CDataTable.qml index d06dbfce1..4a05e350a 100644 --- a/qml/MetaBuilder/CDataTable.qml +++ b/qml/MetaBuilder/CDataTable.qml @@ -9,6 +9,9 @@ import QmlComponents 1.0 */ CCard { id: root + objectName: "table_data" + Accessible.role: Accessible.Table + Accessible.name: "Data Table" property var headers: [] property var fields: [] diff --git a/qml/MetaBuilder/CDatabaseEnvConfig.qml b/qml/MetaBuilder/CDatabaseEnvConfig.qml index 453316b12..bb2d1708b 100644 --- a/qml/MetaBuilder/CDatabaseEnvConfig.qml +++ b/qml/MetaBuilder/CDatabaseEnvConfig.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 CCard { id: envConfig + objectName: "card_database_env_config" + Accessible.role: Accessible.Pane + Accessible.name: "Environment Configuration" Layout.fillWidth: true property string databaseUrl: "" diff --git a/qml/MetaBuilder/CDatabaseStatsRow.qml b/qml/MetaBuilder/CDatabaseStatsRow.qml index 8e8f1aeb4..e43a40ec6 100644 --- a/qml/MetaBuilder/CDatabaseStatsRow.qml +++ b/qml/MetaBuilder/CDatabaseStatsRow.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 FlexRow { id: root + objectName: "row_database_stats" + Accessible.role: Accessible.Pane + Accessible.name: "Database Statistics" Layout.fillWidth: true spacing: 12 diff --git a/qml/MetaBuilder/CDeleteConfirmDialog.qml b/qml/MetaBuilder/CDeleteConfirmDialog.qml index 7ef667fe5..3089e1cd2 100644 --- a/qml/MetaBuilder/CDeleteConfirmDialog.qml +++ b/qml/MetaBuilder/CDeleteConfirmDialog.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 CDialog { id: root + objectName: "dialog_delete_confirm" + Accessible.role: Accessible.Dialog + Accessible.name: title + activeFocusOnTab: true property string itemName: "" property string description: "This action cannot be undone." diff --git a/qml/MetaBuilder/CDeleteDropdownDialog.qml b/qml/MetaBuilder/CDeleteDropdownDialog.qml index 3d1ebbfce..cd470f25c 100644 --- a/qml/MetaBuilder/CDeleteDropdownDialog.qml +++ b/qml/MetaBuilder/CDeleteDropdownDialog.qml @@ -4,6 +4,10 @@ import QmlComponents 1.0 CDialog { id: root + objectName: "dialog_delete_dropdown" + Accessible.role: Accessible.Dialog + Accessible.name: title + activeFocusOnTab: true title: "Delete Dropdown" property var dropdown: null diff --git a/qml/MetaBuilder/CDeleteRecordDialog.qml b/qml/MetaBuilder/CDeleteRecordDialog.qml index a78515f81..137dec7ee 100644 --- a/qml/MetaBuilder/CDeleteRecordDialog.qml +++ b/qml/MetaBuilder/CDeleteRecordDialog.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 CDialog { id: deleteRecordDialog + objectName: "dialog_delete_record" + Accessible.role: Accessible.Dialog + Accessible.name: title + activeFocusOnTab: true title: "Delete " + entity property string entity: "" diff --git a/qml/MetaBuilder/CDropdownEditorPanel.qml b/qml/MetaBuilder/CDropdownEditorPanel.qml index 51fdec151..31fd3bd0b 100644 --- a/qml/MetaBuilder/CDropdownEditorPanel.qml +++ b/qml/MetaBuilder/CDropdownEditorPanel.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 CCard { id: root + objectName: "panel_dropdown_editor" + Accessible.role: Accessible.Pane + Accessible.name: "Dropdown Editor" Layout.fillWidth: true Layout.fillHeight: true diff --git a/qml/MetaBuilder/CDropdownMenu.qml b/qml/MetaBuilder/CDropdownMenu.qml index ccc5b6958..6a7958f64 100644 --- a/qml/MetaBuilder/CDropdownMenu.qml +++ b/qml/MetaBuilder/CDropdownMenu.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "menu_dropdown" + Accessible.role: Accessible.PopupMenu + Accessible.name: "Dropdown Menu" property bool isDark: Theme.mode === "dark" property var menuItems: [] diff --git a/qml/MetaBuilder/CDropdownMenuItem.qml b/qml/MetaBuilder/CDropdownMenuItem.qml index 4e0dac740..14ee38e64 100644 --- a/qml/MetaBuilder/CDropdownMenuItem.qml +++ b/qml/MetaBuilder/CDropdownMenuItem.qml @@ -4,6 +4,10 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "menuitem_" + action + Accessible.role: Accessible.MenuItem + Accessible.name: label + activeFocusOnTab: true property bool isDark: Theme.mode === "dark" property string icon: "" diff --git a/qml/MetaBuilder/CEncryptionSelector.qml b/qml/MetaBuilder/CEncryptionSelector.qml index 01edee807..22a8f7b77 100644 --- a/qml/MetaBuilder/CEncryptionSelector.qml +++ b/qml/MetaBuilder/CEncryptionSelector.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 ColumnLayout { id: root + objectName: "selector_encryption" + Accessible.role: Accessible.RadioGroup + Accessible.name: "Encryption" property var options: ["None", "TLS", "SSL"] property int selectedIndex: 1 diff --git a/qml/MetaBuilder/CEntityForm.qml b/qml/MetaBuilder/CEntityForm.qml index 21132a815..d93eccc2f 100644 --- a/qml/MetaBuilder/CEntityForm.qml +++ b/qml/MetaBuilder/CEntityForm.qml @@ -18,6 +18,10 @@ import QmlComponents 1.0 */ CDialog { id: root + objectName: "dialog_entity_form" + Accessible.role: Accessible.Dialog + Accessible.name: title + activeFocusOnTab: true property string entity: "" // Entity type name (e.g. "User") property var fields: [] // Array of { field, label, value? } diff --git a/qml/MetaBuilder/CEntitySidebar.qml b/qml/MetaBuilder/CEntitySidebar.qml index 43be7c468..88c00e78b 100644 --- a/qml/MetaBuilder/CEntitySidebar.qml +++ b/qml/MetaBuilder/CEntitySidebar.qml @@ -16,6 +16,9 @@ import QmlComponents 1.0 */ Rectangle { id: root + objectName: "sidebar_entity" + Accessible.role: Accessible.Pane + Accessible.name: "Entity Sidebar" property var entities: [] // Array of entity name strings property string selectedEntity: "" // Currently selected entity diff --git a/qml/MetaBuilder/CExecutionStatusDot.qml b/qml/MetaBuilder/CExecutionStatusDot.qml index 44bae2bef..fb6187713 100644 --- a/qml/MetaBuilder/CExecutionStatusDot.qml +++ b/qml/MetaBuilder/CExecutionStatusDot.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 FlexRow { id: root + objectName: "status_execution" + Accessible.role: Accessible.Indicator + Accessible.name: "Execution Status" property string status: "" diff --git a/qml/MetaBuilder/CFrontPageFooter.qml b/qml/MetaBuilder/CFrontPageFooter.qml index 14523e5e0..69d3c8092 100644 --- a/qml/MetaBuilder/CFrontPageFooter.qml +++ b/qml/MetaBuilder/CFrontPageFooter.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 Rectangle { id: footer + objectName: "footer_frontpage" + Accessible.role: Accessible.Footer + Accessible.name: "Page Footer" property color surfaceColor: "transparent" property color textColor: Theme.textSecondary diff --git a/qml/MetaBuilder/CGodPanelGuideTab.qml b/qml/MetaBuilder/CGodPanelGuideTab.qml index b6ca29da6..5ba347364 100644 --- a/qml/MetaBuilder/CGodPanelGuideTab.qml +++ b/qml/MetaBuilder/CGodPanelGuideTab.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: guideTab + objectName: "tab_god_panel_guide" + Accessible.role: Accessible.PageTab + Accessible.name: "Guide" color: "transparent" required property var levelData diff --git a/qml/MetaBuilder/CGodPanelHeader.qml b/qml/MetaBuilder/CGodPanelHeader.qml index 2ee05b640..db3915a0f 100644 --- a/qml/MetaBuilder/CGodPanelHeader.qml +++ b/qml/MetaBuilder/CGodPanelHeader.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "header_god_panel" + Accessible.role: Accessible.Heading + Accessible.name: "God Panel" property var configCounts: ({}) property bool isDark: false signal navigateLevel(int level) diff --git a/qml/MetaBuilder/CGodPanelSettingsTab.qml b/qml/MetaBuilder/CGodPanelSettingsTab.qml index 89d755e59..8a7ec73fa 100644 --- a/qml/MetaBuilder/CGodPanelSettingsTab.qml +++ b/qml/MetaBuilder/CGodPanelSettingsTab.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "tab_god_panel_settings" + Accessible.role: Accessible.PageTab + Accessible.name: "Settings" color: "transparent" required property bool isDark diff --git a/qml/MetaBuilder/CGodUserCard.qml b/qml/MetaBuilder/CGodUserCard.qml index ea60a97b1..22c621668 100644 --- a/qml/MetaBuilder/CGodUserCard.qml +++ b/qml/MetaBuilder/CGodUserCard.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 CCard { id: root + objectName: "card_god_user" + Accessible.role: Accessible.ListItem + Accessible.name: user ? user.username : "" required property var user property bool isDark: false diff --git a/qml/MetaBuilder/CGodUsersTab.qml b/qml/MetaBuilder/CGodUsersTab.qml index 001aeed9d..62a48db6e 100644 --- a/qml/MetaBuilder/CGodUsersTab.qml +++ b/qml/MetaBuilder/CGodUsersTab.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "tab_god_users" + Accessible.role: Accessible.PageTab + Accessible.name: "God Users" color: "transparent" // ── Data ── diff --git a/qml/MetaBuilder/CHeroSection.qml b/qml/MetaBuilder/CHeroSection.qml index c982b37c9..701bdcfe0 100644 --- a/qml/MetaBuilder/CHeroSection.qml +++ b/qml/MetaBuilder/CHeroSection.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "section_hero" + Accessible.role: Accessible.Pane + Accessible.name: "MetaBuilder Hero" property string platformVersion: "0.9.1" property bool isDark: false diff --git a/qml/MetaBuilder/CJobProgressBar.qml b/qml/MetaBuilder/CJobProgressBar.qml index 44b6f1e19..8ead8c282 100644 --- a/qml/MetaBuilder/CJobProgressBar.qml +++ b/qml/MetaBuilder/CJobProgressBar.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "progressbar_job" + Accessible.role: Accessible.ProgressBar + Accessible.name: "Job Progress" Layout.fillWidth: true Layout.preferredHeight: 20 color: "transparent" diff --git a/qml/MetaBuilder/CKeyboardShortcuts.qml b/qml/MetaBuilder/CKeyboardShortcuts.qml index ea06cfd9c..aa91675d7 100644 --- a/qml/MetaBuilder/CKeyboardShortcuts.qml +++ b/qml/MetaBuilder/CKeyboardShortcuts.qml @@ -2,6 +2,9 @@ import QtQuick Item { id: shortcuts + objectName: "keyboard_shortcuts" + Accessible.role: Accessible.Pane + Accessible.name: "Keyboard Shortcuts" required property var appWindow diff --git a/qml/MetaBuilder/CLanguageSelector.qml b/qml/MetaBuilder/CLanguageSelector.qml index 76d42a3f7..b8f2821aa 100644 --- a/qml/MetaBuilder/CLanguageSelector.qml +++ b/qml/MetaBuilder/CLanguageSelector.qml @@ -6,6 +6,9 @@ import QmlComponents 1.0 // Language selector pill (e.g. "EN") Item { id: root + Accessible.role: Accessible.Button + Accessible.name: "Language: " + + currentLanguage property string currentLanguage: "EN" property bool isDark: Theme.mode === "dark" diff --git a/qml/MetaBuilder/CLevelCard.qml b/qml/MetaBuilder/CLevelCard.qml index ce9cd1160..d2312cd63 100644 --- a/qml/MetaBuilder/CLevelCard.qml +++ b/qml/MetaBuilder/CLevelCard.qml @@ -4,6 +4,10 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "card_level_" + level + Accessible.role: Accessible.Button + Accessible.name: name + " Level " + level + activeFocusOnTab: true property int level: 1 property string name: "" diff --git a/qml/MetaBuilder/CLevelReferenceCard.qml b/qml/MetaBuilder/CLevelReferenceCard.qml index 02f9da587..db8805479 100644 --- a/qml/MetaBuilder/CLevelReferenceCard.qml +++ b/qml/MetaBuilder/CLevelReferenceCard.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "card_level_ref_" + levelNumber + Accessible.role: Accessible.ListItem + Accessible.name: levelName property string levelName: "" property string role: "" diff --git a/qml/MetaBuilder/CLevelTagFlow.qml b/qml/MetaBuilder/CLevelTagFlow.qml index 2503b484d..42d913d77 100644 --- a/qml/MetaBuilder/CLevelTagFlow.qml +++ b/qml/MetaBuilder/CLevelTagFlow.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 Flow { id: root + objectName: "flow_level_tags" + Accessible.role: Accessible.Pane + Accessible.name: "Level Tags" property var tags: [] property color accent: "#94A3B8" diff --git a/qml/MetaBuilder/CLoginForm.qml b/qml/MetaBuilder/CLoginForm.qml index 6b2dd8033..67645b902 100644 --- a/qml/MetaBuilder/CLoginForm.qml +++ b/qml/MetaBuilder/CLoginForm.qml @@ -5,6 +5,10 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "form_login" + Accessible.role: Accessible.Form + Accessible.name: "Login Form" + activeFocusOnTab: true property bool isDark: false property bool loading: false diff --git a/qml/MetaBuilder/CMediaHeader.qml b/qml/MetaBuilder/CMediaHeader.qml index 23be319dd..1ed62fc07 100644 --- a/qml/MetaBuilder/CMediaHeader.qml +++ b/qml/MetaBuilder/CMediaHeader.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 CCard { id: root + objectName: "mediaHeader" + Accessible.role: Accessible.Pane + Accessible.name: "Media service header" Layout.fillWidth: true property string serviceStatus: "unknown" diff --git a/qml/MetaBuilder/CMediaJobsTab.qml b/qml/MetaBuilder/CMediaJobsTab.qml index a4e7359e4..b764f7141 100644 --- a/qml/MetaBuilder/CMediaJobsTab.qml +++ b/qml/MetaBuilder/CMediaJobsTab.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "mediaJobsTab" + Accessible.role: Accessible.Pane + Accessible.name: "Media jobs" color: "transparent" property var jobs: [] diff --git a/qml/MetaBuilder/CNavBar.qml b/qml/MetaBuilder/CNavBar.qml index e1cbdff2e..aec2ed486 100644 --- a/qml/MetaBuilder/CNavBar.qml +++ b/qml/MetaBuilder/CNavBar.qml @@ -6,6 +6,8 @@ import QmlComponents 1.0 // Centered level navigation buttons for the app bar Item { id: root + Accessible.role: Accessible.MenuBar + Accessible.name: "Level navigation" property string currentView: "frontpage" property int currentLevel: 1 @@ -31,6 +33,8 @@ Item { Repeater { model: root.levels delegate: CButton { + Accessible.role: Accessible.MenuItem + Accessible.name: modelData.label visible: modelData.level <= root.currentLevel text: modelData.label variant: root.currentView === modelData.view diff --git a/qml/MetaBuilder/CNotificationBell.qml b/qml/MetaBuilder/CNotificationBell.qml index e45299f49..543ee58c7 100644 --- a/qml/MetaBuilder/CNotificationBell.qml +++ b/qml/MetaBuilder/CNotificationBell.qml @@ -6,6 +6,8 @@ import QmlComponents 1.0 // Bell icon with red notification dot Item { id: root + Accessible.role: Accessible.Button + Accessible.name: "Notifications" property bool hasNotifications: true property bool isDark: Theme.mode === "dark" diff --git a/qml/MetaBuilder/CSidebar.qml b/qml/MetaBuilder/CSidebar.qml index 8de1a42ad..e3dd60949 100644 --- a/qml/MetaBuilder/CSidebar.qml +++ b/qml/MetaBuilder/CSidebar.qml @@ -7,6 +7,8 @@ import QmlComponents 1.0 // Settings Rectangle { id: root + Accessible.role: Accessible.Pane + Accessible.name: "Navigation" property string currentView: "frontpage" property int currentLevel: 1 @@ -74,6 +76,7 @@ Rectangle { delegate: CListItem { Layout.fillWidth: true + activeFocusOnTab: true title: modelData.label leadingIcon: modelData.icon selected: root.currentView @@ -96,6 +99,7 @@ Rectangle { delegate: CListItem { Layout.fillWidth: true + activeFocusOnTab: true title: modelData.navLabel ? modelData.navLabel : modelData.name @@ -115,6 +119,7 @@ Rectangle { CListItem { Layout.fillWidth: true + activeFocusOnTab: true title: "Settings" leadingIcon: "S" selected: root.currentView === "settings" diff --git a/qml/MetaBuilder/CUserMenu.qml b/qml/MetaBuilder/CUserMenu.qml index 04af740ee..1c7b04bc6 100644 --- a/qml/MetaBuilder/CUserMenu.qml +++ b/qml/MetaBuilder/CUserMenu.qml @@ -23,6 +23,8 @@ Item { id: avatarCircle anchors.fill: parent radius: 16 + Accessible.role: Accessible.Button + Accessible.name: "User menu: " + root.username color: avatarMA.containsMouse ? Qt.rgba(0.39, 0.4, 0.95, isDark ? 0.25 : 0.2) : Qt.rgba(0.39, 0.4, 0.95, isDark ? 0.15 : 0.12) @@ -48,6 +50,8 @@ Item { // ── Dropdown menu ── CDropdownMenu { id: dropdownMenu + Accessible.role: Accessible.Menu + Accessible.name: "User actions" visible: false anchors.top: parent.bottom anchors.right: parent.right diff --git a/qml/MetaBuilder/DropdownExpandedList.qml b/qml/MetaBuilder/DropdownExpandedList.qml index fe5e7df47..e7bdb282e 100644 --- a/qml/MetaBuilder/DropdownExpandedList.qml +++ b/qml/MetaBuilder/DropdownExpandedList.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: root + objectName: "dropdownExpandedList" + Accessible.role: Accessible.List + Accessible.name: "Dropdown options list" property var options: [] diff --git a/qml/MetaBuilder/DropdownGeneralForm.qml b/qml/MetaBuilder/DropdownGeneralForm.qml index aa04585f4..51d212cd6 100644 --- a/qml/MetaBuilder/DropdownGeneralForm.qml +++ b/qml/MetaBuilder/DropdownGeneralForm.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 ColumnLayout { id: root + objectName: "dropdownGeneralForm" + Accessible.role: Accessible.Form + Accessible.name: "Dropdown general settings" spacing: 16 property var dropdown: null diff --git a/qml/MetaBuilder/DropdownOptionsEditor.qml b/qml/MetaBuilder/DropdownOptionsEditor.qml index a332b096d..6490722b5 100644 --- a/qml/MetaBuilder/DropdownOptionsEditor.qml +++ b/qml/MetaBuilder/DropdownOptionsEditor.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 ColumnLayout { id: root + objectName: "dropdownOptionsEditor" + Accessible.role: Accessible.Form + Accessible.name: "Dropdown options editor" spacing: 16 property var dropdown: null signal addOptionClicked() diff --git a/qml/MetaBuilder/DropdownPreview.qml b/qml/MetaBuilder/DropdownPreview.qml index 6877287b4..3306d278a 100644 --- a/qml/MetaBuilder/DropdownPreview.qml +++ b/qml/MetaBuilder/DropdownPreview.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 CPaper { id: root + objectName: "dropdownPreview" + Accessible.role: Accessible.Pane + Accessible.name: "Dropdown preview" property var dropdown: null implicitHeight: previewColumn.implicitHeight + 32 diff --git a/qml/MetaBuilder/DropdownSidebar.qml b/qml/MetaBuilder/DropdownSidebar.qml index 070f5bb87..9a7de3fcd 100644 --- a/qml/MetaBuilder/DropdownSidebar.qml +++ b/qml/MetaBuilder/DropdownSidebar.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 CCard { id: root + objectName: "dropdownSidebar" + Accessible.role: Accessible.Pane + Accessible.name: "Dropdown sidebar" property var dropdowns: [] property int selectedIndex: -1 diff --git a/qml/MetaBuilder/FeatureCard.qml b/qml/MetaBuilder/FeatureCard.qml index a20f5c2ce..1cf16102a 100644 --- a/qml/MetaBuilder/FeatureCard.qml +++ b/qml/MetaBuilder/FeatureCard.qml @@ -3,6 +3,9 @@ import QtQuick.Layouts Rectangle { id: card + objectName: "featureCard" + Accessible.role: Accessible.Pane + Accessible.name: title property string title: "" property string description: "" diff --git a/qml/MetaBuilder/HeroSection.qml b/qml/MetaBuilder/HeroSection.qml index 6ad718838..b16035ced 100644 --- a/qml/MetaBuilder/HeroSection.qml +++ b/qml/MetaBuilder/HeroSection.qml @@ -4,6 +4,9 @@ import QtQuick.Layouts Rectangle { id: hero + objectName: "heroSection" + Accessible.role: Accessible.Pane + Accessible.name: "Hero section" property string headline: "Build entire stacks visually, from public sites to secure admin panels." property string subhead: "MetaBuilder layers marketing, observability, diff --git a/qml/MetaBuilder/LuaCodeEditor.qml b/qml/MetaBuilder/LuaCodeEditor.qml index fb268f36a..b558ca9bc 100644 --- a/qml/MetaBuilder/LuaCodeEditor.qml +++ b/qml/MetaBuilder/LuaCodeEditor.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: codeEditorRoot + objectName: "luaCodeEditor" + Accessible.role: Accessible.EditableText + Accessible.name: "Lua code editor" Layout.fillWidth: true Layout.fillHeight: true color: "#1e1e2e" diff --git a/qml/MetaBuilder/LuaEditorStatusBar.qml b/qml/MetaBuilder/LuaEditorStatusBar.qml index dace6df12..84ffb2c48 100644 --- a/qml/MetaBuilder/LuaEditorStatusBar.qml +++ b/qml/MetaBuilder/LuaEditorStatusBar.qml @@ -3,6 +3,9 @@ import QtQuick.Layouts Rectangle { id: root + objectName: "luaEditorStatusBar" + Accessible.role: Accessible.StatusBar + Accessible.name: "Editor status bar" property int lineCount: 0 diff --git a/qml/MetaBuilder/LuaOutputConsole.qml b/qml/MetaBuilder/LuaOutputConsole.qml index d7c19c72a..3a8d2ea26 100644 --- a/qml/MetaBuilder/LuaOutputConsole.qml +++ b/qml/MetaBuilder/LuaOutputConsole.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 ColumnLayout { id: outputConsole + objectName: "luaOutputConsole" + Accessible.role: Accessible.Pane + Accessible.name: "Lua output console" Layout.fillWidth: true Layout.fillHeight: true spacing: 8 diff --git a/qml/MetaBuilder/LuaOutputPanel.qml b/qml/MetaBuilder/LuaOutputPanel.qml index 82f0f5dec..b5622684f 100644 --- a/qml/MetaBuilder/LuaOutputPanel.qml +++ b/qml/MetaBuilder/LuaOutputPanel.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: outputPanel + objectName: "luaOutputPanel" + Accessible.role: Accessible.Pane + Accessible.name: "Lua output panel" Layout.fillWidth: true Layout.preferredHeight: 220 color: Theme.paper diff --git a/qml/MetaBuilder/LuaPropertiesPanel.qml b/qml/MetaBuilder/LuaPropertiesPanel.qml index 000f53bb2..5b4ac2a48 100644 --- a/qml/MetaBuilder/LuaPropertiesPanel.qml +++ b/qml/MetaBuilder/LuaPropertiesPanel.qml @@ -5,6 +5,9 @@ import QmlComponents 1.0 Rectangle { id: propsPanel + objectName: "luaPropertiesPanel" + Accessible.role: Accessible.Pane + Accessible.name: "Lua script properties" Layout.preferredWidth: 260 Layout.fillHeight: true color: Theme.paper diff --git a/qml/qt6/AdminView.qml b/qml/qt6/AdminView.qml index d7f25979c..e2a8a43e0 100644 --- a/qml/qt6/AdminView.qml +++ b/qml/qt6/AdminView.qml @@ -4,6 +4,9 @@ import "qmllib/dbal"; import "qmllib/MetaBuilder" import "AdminCrud.js" as Crud Rectangle { id: root; color: Theme.background + objectName: "view_admin" + Accessible.role: Accessible.Pane + Accessible.name: "Admin View" DBALProvider { id: dbal } property bool useLiveData: dbal.connected; property bool configLoaded: false property string selEnt: "User" diff --git a/qml/qt6/App.qml b/qml/qt6/App.qml index 38a69c1a4..c4d8b6465 100644 --- a/qml/qt6/App.qml +++ b/qml/qt6/App.qml @@ -9,9 +9,12 @@ import "qmllib/MetaBuilder/AppLogic.js" as Logic ApplicationWindow { id: appWindow + objectName: "appWindow" visible: true; width: 1400; height: 900 title: "MetaBuilder Observatory" color: Theme.background + Accessible.role: Accessible.Window + Accessible.name: "MetaBuilder" DBALProvider { id: dbalProvider } @@ -46,6 +49,7 @@ ApplicationWindow { } header: CAppBar { + objectName: "appBar" height: 48 RowLayout { anchors.fill: parent @@ -122,6 +126,7 @@ ApplicationWindow { anchors.topMargin: dbalBanner.visible ? 28 : 0 CSidebar { + objectName: "sidebar" currentView: appWindow.currentView currentLevel: appWindow.currentLevel loggedIn: appWindow.loggedIn @@ -138,6 +143,7 @@ ApplicationWindow { Layout.fillHeight: true color: "transparent" StackLayout { + objectName: "mainContent" anchors.fill: parent currentIndex: viewIndex(currentView) diff --git a/qml/qt6/CommentsView.qml b/qml/qt6/CommentsView.qml index ac8a9636e..23d3703d2 100644 --- a/qml/qt6/CommentsView.qml +++ b/qml/qt6/CommentsView.qml @@ -7,7 +7,11 @@ import "qmllib/MetaBuilder" as Meta import "CommentsDBAL.js" as DBAL Rectangle { + id: commentsRoot color: "transparent" + objectName: "view_comments" + Accessible.role: Accessible.Pane + Accessible.name: "Discussion Board" DBALProvider { id: dbal } property int sortMode: 0 diff --git a/qml/qt6/ComponentHierarchyEditor.qml b/qml/qt6/ComponentHierarchyEditor.qml index 9dd0bd514..80f0d1aeb 100644 --- a/qml/qt6/ComponentHierarchyEditor.qml +++ b/qml/qt6/ComponentHierarchyEditor.qml @@ -9,6 +9,9 @@ import "qmllib/MetaBuilder/ComponentTreeDBAL.js" as CTDBAL Rectangle { id: root color: Theme.background + objectName: "view_component_hierarchy" + Accessible.role: Accessible.Pane + Accessible.name: "Component Hierarchy Editor" DBALProvider { id: dbal } property bool useLiveData: dbal.connected diff --git a/qml/qt6/CssClassManager.qml b/qml/qt6/CssClassManager.qml index 67805d8bb..42098ef3e 100644 --- a/qml/qt6/CssClassManager.qml +++ b/qml/qt6/CssClassManager.qml @@ -9,6 +9,9 @@ import "qmllib/MetaBuilder/CssClassLogic.js" as Logic Rectangle { id: root color: Theme.background + objectName: "view_css_class_manager" + Accessible.role: Accessible.Pane + Accessible.name: "CSS Class Manager" DBALProvider { id: dbal } property bool useLiveData: dbal.connected diff --git a/qml/qt6/DashboardView.qml b/qml/qt6/DashboardView.qml index 76408b29f..2bbfc1ca8 100644 --- a/qml/qt6/DashboardView.qml +++ b/qml/qt6/DashboardView.qml @@ -10,6 +10,9 @@ import "qmllib/MetaBuilder/DashboardDBAL.js" Rectangle { id: dashRoot color: Theme.background + objectName: "view_dashboard" + Accessible.role: Accessible.Pane + Accessible.name: "Dashboard" DBALProvider { id: dbal } diff --git a/qml/qt6/DatabaseManager.qml b/qml/qt6/DatabaseManager.qml index 59b445e15..4c8e1c8cd 100644 --- a/qml/qt6/DatabaseManager.qml +++ b/qml/qt6/DatabaseManager.qml @@ -4,6 +4,9 @@ import "qmllib/dbal"; import "qmllib/MetaBuilder" import "qmllib/MetaBuilder/DatabaseLogic.js" as Logic Rectangle { id: root; color: Theme.background + objectName: "view_database_manager" + Accessible.role: Accessible.Pane + Accessible.name: "Database Manager" DBALProvider { id: dbal } property bool useLiveData: dbal.connected property int selBk: 2; property int actBk: 2; property int adPat: 0 diff --git a/qml/qt6/DropdownConfigManager.qml b/qml/qt6/DropdownConfigManager.qml index 5bd81b9eb..027b51d57 100644 --- a/qml/qt6/DropdownConfigManager.qml +++ b/qml/qt6/DropdownConfigManager.qml @@ -9,6 +9,9 @@ import "DropdownCrud.js" as Crud Rectangle { id: root color: Theme.background + objectName: "view_dropdown_config" + Accessible.role: Accessible.Pane + Accessible.name: "Dropdown Configuration" DBALProvider { id: dbal } property bool useLiveData: dbal.connected diff --git a/qml/qt6/FrontPage.qml b/qml/qt6/FrontPage.qml index 5903bec9b..a3ac0f007 100644 --- a/qml/qt6/FrontPage.qml +++ b/qml/qt6/FrontPage.qml @@ -4,6 +4,9 @@ import "qmllib/dbal"; import "qmllib/MetaBuilder" import "qmllib/MetaBuilder/FrontPageLogic.js" as Logic Rectangle { id: root; color: Theme.background + objectName: "view_frontpage" + Accessible.role: Accessible.Pane + Accessible.name: "Front Page" DBALProvider { id: dbal } property bool dbalOnline: dbal.connected property string platformVersion: "0.9.1" diff --git a/qml/qt6/GodPanel.qml b/qml/qt6/GodPanel.qml index c70a9a4fa..21034764b 100644 --- a/qml/qt6/GodPanel.qml +++ b/qml/qt6/GodPanel.qml @@ -9,6 +9,9 @@ import "config/GodPanelConfig.js" Rectangle { id: godPanel color: Theme.background + objectName: "view_god_panel" + Accessible.role: Accessible.Pane + Accessible.name: "God Panel" property int currentTab: 0 property var configCounts: ({ diff --git a/qml/qt6/LoginView.qml b/qml/qt6/LoginView.qml index fe9e26c9c..3ab31d6d3 100644 --- a/qml/qt6/LoginView.qml +++ b/qml/qt6/LoginView.qml @@ -8,6 +8,9 @@ import "LoginDBAL.js" as DBAL Rectangle { id: loginView; color: "transparent" + objectName: "view_login" + Accessible.role: Accessible.Pane + Accessible.name: "Login" property string errorMessage: "" property bool loggingIn: false property bool isDark: diff --git a/qml/qt6/LuaEditor.qml b/qml/qt6/LuaEditor.qml index 9d9d67f14..d27be6b27 100644 --- a/qml/qt6/LuaEditor.qml +++ b/qml/qt6/LuaEditor.qml @@ -4,6 +4,9 @@ import "qmllib/MetaBuilder" import "qmllib/MetaBuilder/LuaEditorLogic.js" as Logic Rectangle { id: root; color: "transparent" + objectName: "view_lua_editor" + Accessible.role: Accessible.Pane + Accessible.name: "Lua Editor" property int selIdx: 0 property string testOutput: "" property string scanResult: "" diff --git a/qml/qt6/MaterialLanding.qml b/qml/qt6/MaterialLanding.qml index 2aaae0a9b..3b33cd4a5 100644 --- a/qml/qt6/MaterialLanding.qml +++ b/qml/qt6/MaterialLanding.qml @@ -4,7 +4,11 @@ import QtQuick.Layouts import QmlComponents 1.0 Rectangle { + id: materialRoot color: Theme.background + objectName: "view_material_landing" + Accessible.role: Accessible.Pane + Accessible.name: "Material Landing" ColumnLayout { anchors.fill: parent diff --git a/qml/qt6/MediaServicePanel.qml b/qml/qt6/MediaServicePanel.qml index a131d2b9f..1d26469cc 100644 --- a/qml/qt6/MediaServicePanel.qml +++ b/qml/qt6/MediaServicePanel.qml @@ -9,6 +9,9 @@ import "MediaServiceCrud.js" as Crud Rectangle { id: root color: "transparent" + objectName: "view_media_service" + Accessible.role: Accessible.Pane + Accessible.name: "Media Service Panel" property int currentTab: 0 property string serviceStatus: "unknown" diff --git a/qml/qt6/ModPlayerPanel.qml b/qml/qt6/ModPlayerPanel.qml index 086bdc8cb..296e85359 100644 --- a/qml/qt6/ModPlayerPanel.qml +++ b/qml/qt6/ModPlayerPanel.qml @@ -4,6 +4,9 @@ import QmlComponents 1.0 CPaper { id: panel + objectName: "view_mod_player" + Accessible.role: Accessible.Pane + Accessible.name: "MOD Player" width: 420 implicitHeight: contentCol.implicitHeight + 32 diff --git a/qml/qt6/ModeratorView.qml b/qml/qt6/ModeratorView.qml index 8f6325070..79a602954 100644 --- a/qml/qt6/ModeratorView.qml +++ b/qml/qt6/ModeratorView.qml @@ -8,6 +8,9 @@ import "ModeratorData.js" as Data Rectangle { id: modView color: Theme.background + objectName: "view_moderator" + Accessible.role: Accessible.Pane + Accessible.name: "Moderator View" readonly property bool isDark: Theme.mode === "dark" diff --git a/qml/qt6/NotificationsPanel.qml b/qml/qt6/NotificationsPanel.qml index 8d886a9fd..769df8908 100644 --- a/qml/qt6/NotificationsPanel.qml +++ b/qml/qt6/NotificationsPanel.qml @@ -8,6 +8,9 @@ import "NotificationsDBAL.js" as DBAL Rectangle { id: root; color: "transparent" + objectName: "view_notifications" + Accessible.role: Accessible.Pane + Accessible.name: "Notifications Panel" DBALProvider { id: dbal } property bool useLiveData: dbal.connected property string activeFilter: "All" diff --git a/qml/qt6/PackageManager.qml b/qml/qt6/PackageManager.qml index 9516ad911..9d98c7fe3 100644 --- a/qml/qt6/PackageManager.qml +++ b/qml/qt6/PackageManager.qml @@ -4,7 +4,11 @@ import QtQuick.Layouts import QmlComponents 1.0 Rectangle { + id: pkgRoot color: Theme.background + objectName: "view_package_manager" + Accessible.role: Accessible.Pane + Accessible.name: "Package Manager" property string searchText: "" property string selectedPackageId: "" diff --git a/qml/qt6/PackageViewLoader.qml b/qml/qt6/PackageViewLoader.qml index 26499d2b2..0edd2509c 100644 --- a/qml/qt6/PackageViewLoader.qml +++ b/qml/qt6/PackageViewLoader.qml @@ -6,6 +6,9 @@ import QmlComponents 1.0 Rectangle { id: loader color: "transparent" + objectName: "view_package_" + packageId + Accessible.role: Accessible.Pane + Accessible.name: formatTitle(packageId) property string packageId: "" diff --git a/qml/qt6/PageRoutesManager.qml b/qml/qt6/PageRoutesManager.qml index 66d0ba0d4..bd993c85e 100644 --- a/qml/qt6/PageRoutesManager.qml +++ b/qml/qt6/PageRoutesManager.qml @@ -8,6 +8,9 @@ import "PageRoutesDBAL.js" as DBAL Rectangle { id: root; color: Theme.background + objectName: "view_page_routes" + Accessible.role: Accessible.Pane + Accessible.name: "Page Routes Manager" DBALProvider { id: dbal } property bool useLiveData: dbal.connected property int selectedIndex: -1 diff --git a/qml/qt6/ProfileView.qml b/qml/qt6/ProfileView.qml index 9dc26c0f3..db8104647 100644 --- a/qml/qt6/ProfileView.qml +++ b/qml/qt6/ProfileView.qml @@ -9,6 +9,9 @@ import "qmllib/MetaBuilder/ProfileDBAL.js" Rectangle { id: profileRoot; color: Theme.background + objectName: "view_profile" + Accessible.role: Accessible.Pane + Accessible.name: "Profile" DBALProvider { id: dbal } readonly property bool isDark: Theme.mode === "dark" diff --git a/qml/qt6/SMTPConfigEditor.qml b/qml/qt6/SMTPConfigEditor.qml index 4191b8a9d..46f072bfe 100644 --- a/qml/qt6/SMTPConfigEditor.qml +++ b/qml/qt6/SMTPConfigEditor.qml @@ -4,6 +4,9 @@ import "qmllib/MetaBuilder" import "qmllib/MetaBuilder/SmtpLogic.js" as Logic Rectangle { id: se; color: "transparent" + objectName: "view_smtp_config" + Accessible.role: Accessible.Pane + Accessible.name: "SMTP Configuration" property string smtpHost: "smtp.example.com" property string smtpPort: "587" property string smtpUsername: ""; property string smtpPassword: "" diff --git a/qml/qt6/SchemaEditor.qml b/qml/qt6/SchemaEditor.qml index 739c232b7..d90677ffe 100644 --- a/qml/qt6/SchemaEditor.qml +++ b/qml/qt6/SchemaEditor.qml @@ -4,6 +4,9 @@ import "qmllib/dbal"; import "qmllib/MetaBuilder" import "qmllib/MetaBuilder/SchemaEditorDBAL.js" as SDBAL Rectangle { id: root; color: Theme.background + objectName: "view_schema_editor" + Accessible.role: Accessible.Pane + Accessible.name: "Schema Editor" DBALProvider { id: dbal } property int selSch: 0; property int selFld: -1 property bool createDlg: false; property bool addFldDlg: false diff --git a/qml/qt6/SettingsView.qml b/qml/qt6/SettingsView.qml index e940b5a48..92d77e582 100644 --- a/qml/qt6/SettingsView.qml +++ b/qml/qt6/SettingsView.qml @@ -9,6 +9,9 @@ import "qmllib/MetaBuilder/SettingsLogic.js" as Logic Rectangle { id: root color: "transparent" + objectName: "view_settings" + Accessible.role: Accessible.Pane + Accessible.name: "Settings" DBALProvider { id: dbal } property bool useLiveData: dbal.connected diff --git a/qml/qt6/Storybook.qml b/qml/qt6/Storybook.qml index 4f8c7f9c4..7dc204156 100644 --- a/qml/qt6/Storybook.qml +++ b/qml/qt6/Storybook.qml @@ -5,7 +5,11 @@ import QmlComponents 1.0 import "qmllib/MetaBuilder" Rectangle { + id: storybookRoot color: Theme.background + objectName: "view_storybook" + Accessible.role: Accessible.Pane + Accessible.name: "Storybook" property string selectedComponent: "Button" property bool outlinedMode: false diff --git a/qml/qt6/SuperGodPanel.qml b/qml/qt6/SuperGodPanel.qml index df0a2e42b..f4d3ae398 100644 --- a/qml/qt6/SuperGodPanel.qml +++ b/qml/qt6/SuperGodPanel.qml @@ -9,6 +9,9 @@ import "SuperGodCrud.js" as Crud Rectangle { id: root color: Theme.background + objectName: "view_supergod_panel" + Accessible.role: Accessible.Pane + Accessible.name: "Super God Panel" DBALProvider { id: dbal } property bool dbalOnline: dbal.connected diff --git a/qml/qt6/ThemeEditor.qml b/qml/qt6/ThemeEditor.qml index 0fb04ef33..f6a0a436f 100644 --- a/qml/qt6/ThemeEditor.qml +++ b/qml/qt6/ThemeEditor.qml @@ -8,6 +8,9 @@ import "qmllib/MetaBuilder/ThemeEditorLogic.js" as TELogic Rectangle { id: root color: Theme.background + objectName: "view_theme_editor" + Accessible.role: Accessible.Pane + Accessible.name: "Theme Editor" property string selectedTheme: "dark" property bool hasUnsavedChanges: false diff --git a/qml/qt6/UserManagement.qml b/qml/qt6/UserManagement.qml index 4c2c12e0d..bff4dfedd 100644 --- a/qml/qt6/UserManagement.qml +++ b/qml/qt6/UserManagement.qml @@ -9,6 +9,9 @@ import "qmllib/MetaBuilder/UserManagementDBAL.js" as UDBAL Rectangle { id: root color: Theme.background + objectName: "view_user_management" + Accessible.role: Accessible.Pane + Accessible.name: "User Management" DBALProvider { id: dbal } property bool useLiveData: dbal.connected diff --git a/qml/qt6/WorkflowEditor.qml b/qml/qt6/WorkflowEditor.qml index 1a9d28aef..66dc6daf6 100644 --- a/qml/qt6/WorkflowEditor.qml +++ b/qml/qt6/WorkflowEditor.qml @@ -6,6 +6,9 @@ import "qmllib/MetaBuilder" Rectangle { id: root; color: "transparent" + objectName: "view_workflow_editor" + Accessible.role: Accessible.Pane + Accessible.name: "Workflow Editor" DBALProvider { id: dbal } CWorkflowState { id: wfState; dbal: dbal diff --git a/qml/widgets/AjaxQueueWidget.qml b/qml/widgets/AjaxQueueWidget.qml index 5a02f22ba..37ddb1146 100644 --- a/qml/widgets/AjaxQueueWidget.qml +++ b/qml/widgets/AjaxQueueWidget.qml @@ -4,7 +4,10 @@ import QtQuick.Layouts Rectangle { id: root - + objectName: "ajaxQueueWidget" + Accessible.role: Accessible.Pane + Accessible.name: "AJAX Queue" + // Properties from controller property var ajaxQueue: null property bool expanded: false @@ -199,14 +202,19 @@ Rectangle { radius: 12 color: mouseArea1.containsMouse ? "#40ffffff" : "transparent" - + objectName: "ajaxExpandBtn" + Accessible.role: Accessible.Button + Accessible.name: expanded + ? "Collapse" : "Expand" + activeFocusOnTab: true + Text { anchors.centerIn: parent text: expanded ? "▲" : "▼" font.pixelSize: 10 color: "#fff" } - + MouseArea { id: mouseArea1 anchors.fill: parent @@ -223,14 +231,18 @@ Rectangle { radius: 12 color: mouseArea2.containsMouse ? "#40ffffff" : "transparent" - + objectName: "ajaxCloseBtn" + Accessible.role: Accessible.Button + Accessible.name: "Close queue" + activeFocusOnTab: true + Text { anchors.centerIn: parent text: "✕" font.pixelSize: 12 color: "#fff" } - + MouseArea { id: mouseArea2 anchors.fill: parent @@ -272,6 +284,9 @@ Rectangle { // Expanded list view ListView { id: listView + objectName: "ajaxQueueList" + Accessible.role: Accessible.List + Accessible.name: "AJAX requests" Layout.fillWidth: true Layout.fillHeight: true visible: expanded diff --git a/qml/widgets/LanguageSelector.qml b/qml/widgets/LanguageSelector.qml index 34c8fae28..aa3f6132d 100644 --- a/qml/widgets/LanguageSelector.qml +++ b/qml/widgets/LanguageSelector.qml @@ -4,10 +4,14 @@ import QtQuick.Layouts Popup { id: popup + objectName: "languageSelector" + Accessible.role: Accessible.Dialog + Accessible.name: "Language selector" + width: 220 height: Math.min(400, langList.contentHeight + 60) padding: 8 - + property string currentLanguage: "en" property var themeColors: ({}) @@ -67,6 +71,9 @@ Popup { ListView { id: langList + objectName: "languageList" + Accessible.role: Accessible.List + Accessible.name: "Available languages" Layout.fillWidth: true Layout.fillHeight: true clip: true @@ -75,7 +82,11 @@ Popup { delegate: ItemDelegate { width: langList.width height: 36 - + objectName: "lang_" + modelData.id + Accessible.role: Accessible.ListItem + Accessible.name: modelData.name + activeFocusOnTab: true + highlighted: modelData.id === popup.currentLanguage background: Rectangle { diff --git a/qml/widgets/PatchDialog.qml b/qml/widgets/PatchDialog.qml index afd2218a9..07bdc3d42 100644 --- a/qml/widgets/PatchDialog.qml +++ b/qml/widgets/PatchDialog.qml @@ -4,6 +4,10 @@ import QtQuick.Layouts Dialog { id: dialog + objectName: "patchDialog" + Accessible.role: Accessible.Dialog + Accessible.name: "Git Patch" + title: "Git Patch" width: 900 height: 650 @@ -92,6 +96,10 @@ Dialog { Button { text: "📋 Copy to Clipboard" + objectName: "patchCopyBtn" + Accessible.role: Accessible.Button + Accessible.name: "Copy to clipboard" + activeFocusOnTab: true onClicked: { app.copyToClipboard(patchText) }