Files
metabuilder/qml/MetaBuilder/CAdapterPatternSelector.qml
johndoe6345789 786f91ec64 Add QML Material lib, demo email UI, and QML refactor
Add a large set of QML components (qml/Material, qml/MetaBuilder, qml/dbal) and a QmlComponents symlink for local development; migrate many frontends/qt6 files into qml/qt6. Replace the email client bootloader with a self-contained demo UI using FakeMUI primitives (MailboxLayout, ThreadList, EmailHeader, ComposeWindow), demo data, handlers, and new folder-navigation styles in globals.css. Update several QML component APIs to new signal/handler names (e.g. selectAllChanged→selectAllToggled, pageChanged→pageRequested, *Changed→*Edited) to standardize events. Add find_config_files() to frontends/qt6/generate_cmake.py to include config JS/JSON in QML/files and resources. Also add /frontends/qt6/_build to .gitignore.
2026-03-19 10:18:09 +00:00

54 lines
1.8 KiB
QML

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QmlComponents 1.0
ColumnLayout {
id: root
Layout.fillWidth: true
spacing: 12
property int selectedPattern: 0
property var patterns: ["read-through", "write-through", "cache-aside", "dual-write"]
property var descriptions: [
"Read-through: Reads check cache first. On miss, the cache fetches from the primary DB, stores the result, and returns it. Best for read-heavy workloads.",
"Write-through: Every write goes to both cache and primary DB synchronously. Guarantees consistency at the cost of write latency.",
"Cache-aside: Application manages cache explicitly. Reads check cache, fetch from DB on miss and populate cache. Writes go directly to DB and invalidate cache.",
"Dual-write: Writes are sent to two backends simultaneously (e.g., primary DB + search index). Requires conflict resolution strategy."
]
signal patternChanged(int index)
CText { variant: "subtitle1"; text: "Multi-Adapter Pattern" }
CText { variant: "body2"; text: "Select how the primary, cache, and search adapters coordinate data flow." }
FlexRow {
Layout.fillWidth: true
spacing: 8
Repeater {
model: root.patterns
delegate: CButton {
text: modelData
variant: index === root.selectedPattern ? "primary" : "ghost"
onClicked: root.patternChanged(index)
}
}
}
CPaper {
Layout.fillWidth: true
implicitHeight: patternDesc.implicitHeight + 24
CText {
id: patternDesc
anchors.fill: parent
anchors.margins: 12
variant: "body2"
wrapMode: Text.Wrap
text: root.descriptions[root.selectedPattern]
}
}
}