schermate di configurazione complete: razze disponibili, mio pollaio, registro galline, clienti, backup/ripristino nel formato dell'app Android, lingua a runtime, introduzione e informazioni

- datastore: export/import JSON con le chiavi camelCase dell'app Android (breedSettings/reservations/customers), scorte e ultimo aggiornamento preservati al ripristino
- settings: flag 'introduzione vista'
- desktop: permesso Documents (dove finisce il backup)
- nuovi controlli: tools/check_qml.py (chiavi di traduzione, simboli JS, pagine, componenti) e qmllint nella suite
- versione 0.2.0
This commit is contained in:
2026-10-09 09:21:47 +02:00
parent a73d94a74e
commit 248e0db899
25 changed files with 2060 additions and 74 deletions
+33 -2
View File
@@ -36,7 +36,6 @@ Page {
page.totalProduction = HF.totalDailyProduction(page.breeds, Catalog.HF_BREEDS)
page.productionRows = HF.productionDetail(page.breeds, Catalog.HF_BREEDS)
page.rebuildList()
page.ready = true
}
// Accrual del magazzino all'apertura (come _loadData in main.dart): i giorni
@@ -278,6 +277,14 @@ Page {
text: page.tr("new_order")
onClicked: page.openOrder(-1)
}
MenuItem {
text: page.tr("customers_list")
onClicked: pageStack.push(Qt.resolvedUrl("CustomersPage.qml"))
}
MenuItem {
text: page.tr("settings")
onClicked: pageStack.push(Qt.resolvedUrl("SettingsPage.qml"))
}
}
footer: Item {
@@ -325,5 +332,29 @@ Page {
}
}
Component.onCompleted: page.reload()
Component.onCompleted: {
page.reload()
// Prima apertura: l'introduzione si presenta da sola (come l'originale).
// Differita: spingere una pagina mentre la prima si sta creando e'
// una corsa che su Qt 5.6 fa fallire l'apertura.
if (!appSettings.introSeen)
introTimer.start()
}
// Al ritorno dalle altre pagine i dati possono essere cambiati (galline,
// ordini, clienti, ripristino di un backup): la Home si ricarica.
onStatusChanged: {
if (status !== PageStatus.Active)
return
if (page.ready)
page.reload()
page.ready = true
}
Timer {
id: introTimer
interval: 100
onTriggered: pageStack.push(Qt.resolvedUrl("IntroPage.qml"), { "firstRun": true })
}
}