Correction de la fiabilité de l'appui long (bascule circuit) : suspension du rafraîchissement périodique pendant l'interaction, reprise immédiate dès la bascule reconnue plutôt qu'au relâchement
This commit is contained in:
+33
-2
@@ -1,4 +1,4 @@
|
||||
import QtQuick 2.12
|
||||
import QtQuick 2.15
|
||||
import QtQuick.Controls 2.12
|
||||
import QtQuick.Layouts 1.12
|
||||
|
||||
@@ -25,6 +25,13 @@ import "responsive.js" as Responsive
|
||||
Shipheart_page {
|
||||
id: page_accueil
|
||||
|
||||
// Vrai pendant qu'un doigt/curseur est posé sur un élément - le minuteur
|
||||
// de rafraîchissement s'appuie dessus pour suspendre la mise à jour du
|
||||
// modèle pendant ce court instant, cause confirmée empiriquement de
|
||||
// l'appui long parfois annulé (mécanisme interne exact non élucidé avec
|
||||
// certitude, mais l'effet est net et reproductible) :
|
||||
property bool interactionEnCours: false
|
||||
|
||||
readonly property var domaines: ["circuits", "batteries", "capteurs", "reservoirs"]
|
||||
readonly property var domaines_libelles: [qsTr("Circuits"), qsTr("Batteries"), qsTr("Capteurs"), qsTr("Réservoirs")]
|
||||
property int domaine_actif_index: 0
|
||||
@@ -186,7 +193,7 @@ Shipheart_page {
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
dataProvider.get_familles(domaine_actif);
|
||||
if (id_groupe > 0) dataProvider.get_elements(domaine_actif, id_groupe);
|
||||
if ((id_groupe > 0) && !interactionEnCours) dataProvider.get_elements(domaine_actif, id_groupe);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -322,6 +329,12 @@ Shipheart_page {
|
||||
model: modele_elements_actuel
|
||||
clip: true
|
||||
opacity: dataProvider.connecte ? 1.0 : 0.45
|
||||
// Réutilise les délégués existants au lieu de les détruire/recréer
|
||||
// à chaque rafraîchissement du modèle (toutes les 1s) - sans ça,
|
||||
// un appui long en cours pouvait être annulé si la case sous le
|
||||
// doigt/curseur disparaissait en pleine tempo (cause confirmée de
|
||||
// la détection erratique de l'appui long, cf synthèse) :
|
||||
reuseItems: true
|
||||
|
||||
delegate: Rectangle {
|
||||
id: bouton_element
|
||||
@@ -398,6 +411,21 @@ Shipheart_page {
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
|
||||
onPressed: {
|
||||
interactionEnCours = true;
|
||||
}
|
||||
onReleased: {
|
||||
interactionEnCours = false;
|
||||
// Rafraîchissement immédiat, sans attendre le
|
||||
// prochain cycle du minuteur (suspendu pendant
|
||||
// l'interaction qui vient de se terminer) :
|
||||
// if (id_groupe > 0) dataProvider.get_elements(domaine_actif, id_groupe);
|
||||
}
|
||||
onCanceled: {
|
||||
interactionEnCours = false;
|
||||
}
|
||||
|
||||
onClicked: {
|
||||
// Clic court : navigation vers la page de détail,
|
||||
// une par domaine (toutes construites maintenant).
|
||||
@@ -416,12 +444,15 @@ Shipheart_page {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
onPressAndHold: {
|
||||
// Appui long : bascule marche/arrêt (circuits uniquement).
|
||||
if (domaine_actif === "circuits" && dataProvider.connecte) {
|
||||
var nouvelle_consigne = (model.consigne > 0) ? 0 : 100;
|
||||
dataProvider.set_circuit(model.id, nouvelle_consigne);
|
||||
}
|
||||
interactionEnCours = false;
|
||||
if (id_groupe > 0) dataProvider.get_elements(domaine_actif, id_groupe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user