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.Controls 2.12
|
||||||
import QtQuick.Layouts 1.12
|
import QtQuick.Layouts 1.12
|
||||||
|
|
||||||
@@ -25,6 +25,13 @@ import "responsive.js" as Responsive
|
|||||||
Shipheart_page {
|
Shipheart_page {
|
||||||
id: page_accueil
|
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: ["circuits", "batteries", "capteurs", "reservoirs"]
|
||||||
readonly property var domaines_libelles: [qsTr("Circuits"), qsTr("Batteries"), qsTr("Capteurs"), qsTr("Réservoirs")]
|
readonly property var domaines_libelles: [qsTr("Circuits"), qsTr("Batteries"), qsTr("Capteurs"), qsTr("Réservoirs")]
|
||||||
property int domaine_actif_index: 0
|
property int domaine_actif_index: 0
|
||||||
@@ -186,7 +193,7 @@ Shipheart_page {
|
|||||||
repeat: true
|
repeat: true
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
dataProvider.get_familles(domaine_actif);
|
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
|
model: modele_elements_actuel
|
||||||
clip: true
|
clip: true
|
||||||
opacity: dataProvider.connecte ? 1.0 : 0.45
|
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 {
|
delegate: Rectangle {
|
||||||
id: bouton_element
|
id: bouton_element
|
||||||
@@ -398,6 +411,21 @@ Shipheart_page {
|
|||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
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: {
|
onClicked: {
|
||||||
// Clic court : navigation vers la page de détail,
|
// Clic court : navigation vers la page de détail,
|
||||||
// une par domaine (toutes construites maintenant).
|
// une par domaine (toutes construites maintenant).
|
||||||
@@ -416,12 +444,15 @@ Shipheart_page {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
onPressAndHold: {
|
onPressAndHold: {
|
||||||
// Appui long : bascule marche/arrêt (circuits uniquement).
|
// Appui long : bascule marche/arrêt (circuits uniquement).
|
||||||
if (domaine_actif === "circuits" && dataProvider.connecte) {
|
if (domaine_actif === "circuits" && dataProvider.connecte) {
|
||||||
var nouvelle_consigne = (model.consigne > 0) ? 0 : 100;
|
var nouvelle_consigne = (model.consigne > 0) ? 0 : 100;
|
||||||
dataProvider.set_circuit(model.id, nouvelle_consigne);
|
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