From 5ff19d5f0f28d9b99bfe598e75faa9a2edee4424 Mon Sep 17 00:00:00 2001 From: Pierre Date: Thu, 27 Aug 2026 11:04:21 +0200 Subject: [PATCH] =?UTF-8?q?Fondation=20responsive=20:=20suppression=20du?= =?UTF-8?q?=20concept=20'=C3=A9cran=20d=C3=A9port=C3=A9'/ShipRS=20(sans=20?= =?UTF-8?q?objet=20en=20wasm),=20taille=20de=20fen=C3=AAtre=20r=C3=A9activ?= =?UTF-8?q?e=20(root.width/height=20au=20lieu=20d'un=20instantan=C3=A9=20f?= =?UTF-8?q?ig=C3=A9=20au=20d=C3=A9marrage),=20nouveau=20type=20d'installat?= =?UTF-8?q?ion=20'wasm'=20=C3=A9vitant=20bips/mise=20en=20veille=20physiqu?= =?UTF-8?q?e=20=C3=A0=20tort?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qml/home_attente.qml | 216 +++++++++++-------------------------------- qml/main.qml | 20 +++- 2 files changed, 71 insertions(+), 165 deletions(-) diff --git a/qml/home_attente.qml b/qml/home_attente.qml index b894cd8..3c42282 100644 --- a/qml/home_attente.qml +++ b/qml/home_attente.qml @@ -1,8 +1,14 @@ //======================================================================================================================================================================== -// HOME_ATTENTE.QML -// Ce fichier affiche un fond d'écran standard mais avec rien dedans. Il est utilisé au démarrage, pour attendre que l'ApplicationWindow soit prête -// et que l'accès à la BDD permette de décider quelle page d'accueil lancer. -// Sans cette page, la StackView affiche une page toute blanche pendant 1-2s avant que la première Home page soit chargée... +// HOME_ATTENTE.QML (shipheart_wasm) +// Affiche un fond d'écran standard mais avec rien dedans, en attendant que l'accès à +// la BDD permette de déterminer la page d'accueil à charger. Sans cette page, la +// StackView affiche une page toute blanche pendant 1-2s au démarrage. +// +// SIMPLIFIÉ par rapport au fichier natif dont il est issu : toute la notion +// "écran déporté"/ShipRS (module distant avec son propre écran physique à taille +// fixe connue, synchronisation de fichiers via rsync/SSH) est retirée - elle n'a +// aucun sens pour un client web wasm, qui tourne toujours dans un navigateur, jamais +// comme module matériel dédié. Cf synthèse, chantier "responsive". //======================================================================================================================================================================== import QtQuick 2.12 import QtQuick.Controls 2.12 @@ -27,136 +33,57 @@ Shipheart_page { console.log("Adresse de ShipBase = " + AppInfo.adresse_shipbase) console.log("Etat de la connexion à la BDD = " + AppInfo.etat_connexion_bdd) - console.log("Type d'installation = " + AppInfo.type_installation) - console.log("Taille de l'écran = " + AppInfo.taille_ecran) //---------------------------------------------------- - // Valeurs correspondant au type d'installation : + // Toujours "wasm" pour ce client - PAS "shipbase" : cette valeur + // distincte empêche les bips physiques et la mise en veille de + // l'écran physique du CM5 (Shipheart_page.qml) de se déclencher + // à tort depuis un client web distant. //---------------------------------------------------- - switch (Number(AppInfo.type_installation)) - { - default: - case shipheart_type_installation_shipbase: - shipheart_type_installation = shipheart_type_installation_shipbase; - break; - - case shipheart_type_installation_ecran_deporte: - switch (Number(AppInfo.taille_ecran)) - { - default: - case 7: - shipheart_type_installation = shipheart_type_installation_ecran_deporte_7_pouces; - break; - case 10: - shipheart_type_installation = shipheart_type_installation_ecran_deporte_10_pouces; - break; - case 22: - shipheart_type_installation = shipheart_type_installation_ecran_deporte_22_pouces; - break; - } - break; - } - -console.log("Type d'installation = " + shipheart_type_installation) -//shipheart_type_installation = shipheart_type_installation_shipbase -//shipheart_type_installation = shipheart_type_installation_ecran_deporte_22_pouces - - // Valeurs par défaut : -// shipheart_largeur_page = 1280 -// shipheart_hauteur_page = 800 -shipheart_largeur_page = Qt.application.screens[0].width -shipheart_hauteur_page = Qt.application.screens[0].height + shipheart_type_installation = shipheart_type_installation_wasm; + // Constantes de mise en page génériques (sans lien avec le concept + // écran déporté/ShipRS retiré ci-dessus - utilisées dans toute + // l'application) : shipheart_hauteur_bandeau_haut = 60 shipheart_hauteur_titre_2 = 50 shipheart_hauteur_bandeau_bas = 80 shipheart_hauteur_clavier = 305 + //---------------------------------------------------- + // Recherche de la version de ShipBase : + //---------------------------------------------------- + init_shipheart_version_cm(); //---------------------------------------------------- - // Cas où la connexion à la BDD n'a pas été possible : + // Recherche du thème d'affichage : //---------------------------------------------------- - if ((AppInfo.etat_connexion_bdd === 0) && (Number(AppInfo.type_installation) === shipheart_type_installation_ecran_deporte)) + init_shipheart_theme(); + + + //---------------------------------------------------- + // Première page à afficher selon le client : + //---------------------------------------------------- + var shipheart_nom_initial_page = ""; + switch (Number(init_shipheart_specifique_client())) { - stackView.push("config_shiprs.qml", {"connexion_impossible": true}) - timer_recherche_home_page.stop(); // Arret du timer car il n'est plus utile maintenant + //--------------------------------- + default: + case shipheart_specifique_client_tous: + shipheart_nom_initial_page = "qrc:/home_accueil.qml" + break; + + //--------------------------------- + case shipheart_specifique_client_suncy: + shipheart_nom_initial_page = "qrc:/home_suncy.qml"; + break; } - else + + if ((shipheart_generation_shipbase != shipheart_generation_shipbase_inconnue) && // A priori, ne devrait pas arriver mais si on n'a pas trouvé, on va recommencer la recherche après une période de timer. + (shipheart_nom_initial_page !== "")) { - - //---------------------------------------------------- - // Paramètres spécifiques dans le cas des ShipRS : - // NB il est important de ne PAS faire ce traitement avant l'appel - // à 'connexion_impossible.qml' car, sinon, on peut se trouver dans une - // config de 22" (par exemple) et ne plus avoir accès aux boutons de - // configuration !! - //---------------------------------------------------- - switch (shipheart_type_installation) - { - //--------------------------------------------------------------------------- - case shipheart_type_installation_ecran_deporte_7_pouces: - shipheart_largeur_page = 1280; - shipheart_hauteur_page = 800; - synchro_repertoires_shiprs(); - break; - - //--------------------------------------------------------------------------- - case shipheart_type_installation_ecran_deporte_10_pouces: - shipheart_largeur_page = 1280; // Spec de l'écran DENSITRON de ShipBase - shipheart_hauteur_page = 800; // Spec de l'écran DENSITRON de ShipBase - synchro_repertoires_shiprs(); - break; - - - //--------------------------------------------------------------------------- - case shipheart_type_installation_ecran_deporte_22_pouces: - shipheart_largeur_page = 1920; - shipheart_hauteur_page = 1080; - synchro_repertoires_shiprs(); - break; - - //--------------------------------------------------------------------------- - default: // Dans ce cas, ce sont les valeurs par défaut qui sont conservées. - case shipheart_type_installation_shipbase: - break; - } - - //---------------------------------------------------- - // Recherche de la version de ShipBase : - //---------------------------------------------------- - init_shipheart_version_cm(); - - //---------------------------------------------------- - // Recherche du thème d'affichage : - //---------------------------------------------------- - init_shipheart_theme(); - - - //---------------------------------------------------- - // Première page à afficher selon le client : - //---------------------------------------------------- - var shipheart_nom_initial_page = ""; - switch (Number(init_shipheart_specifique_client())) - { - //--------------------------------- - default: - case shipheart_specifique_client_tous: - shipheart_nom_initial_page = "qrc:/home_accueil.qml" - break; - - //--------------------------------- - case shipheart_specifique_client_suncy: - shipheart_nom_initial_page = "qrc:/home_suncy.qml"; - break; - } - - if ((shipheart_generation_shipbase != shipheart_generation_shipbase_inconnue) && // A priori, ne devrait pas arriver mais si on n'a pas trouvé, on va reommencer la recherche après une période de timer. - (shipheart_nom_initial_page !== "")) - { - timer_recherche_home_page.stop(); // Arret du timer car il n'est plus utile maintenant - stackView.push(shipheart_nom_initial_page) - //console.log("La Home Page sélectionnée est '" + shipheart_nom_initial_page + "'") - } + timer_recherche_home_page.stop(); // Arrêt du timer car il n'est plus utile maintenant + stackView.push(shipheart_nom_initial_page) } } } @@ -165,7 +92,6 @@ shipheart_hauteur_page = Qt.application.screens[0].height // Réactivation de la recherche lors d'un retour sur cette page : //============================================================== StackView.onActivated: { -//console.log("!!! Page Home_attente activée") timer_recherche_home_page.start(); // Relance le timer pour faire une nouvelle recherche } @@ -173,54 +99,42 @@ shipheart_hauteur_page = Qt.application.screens[0].height // Zone d'affichage : //============================================================== Rectangle { - x: 0 - y: 0 - width: 5000 // Permet d'être qûr qu'on couvre tout l'écran, quel qu'il soit - height: 5000 // Permet d'être qûr qu'on couvre tout l'écran - color: "transparent" // C'est la ligne importante qui permet de ne pas avoir un "flash' blanc au démarrage + anchors.fill: parent + color: "transparent" // C'est la ligne importante qui permet de ne pas avoir un "flash" blanc au démarrage } //============================================================================ - // Fonction : Récpère dans la BDD la valeur de 'Specifique_client' dans + // Fonction : Récupère dans la BDD la valeur de 'Specifique_client' dans // TB_Configuration. sépare chaque champs (séparés par des ';'). // Met à jour la propriété globale 'shipheart_specifique_client' // avec toutes les valeurs. Renvoi la première. - // Reçoit : Rien - // Retour : La valeur de 'shipheart_specifique_client[0]' //============================================================================ function init_shipheart_specifique_client() { var req, res - // Récupération du paramètre 'TB_Configuration.Specifique_client' req = 'SELECT Valeur FROM TB_Configuration WHERE Nom="Specifique_client" '; res = bdd.requete_unique(req); - shipheart_specifique_client = res[0].split(';') // Mémorisation de l'ensemble du tableau + shipheart_specifique_client = res[0].split(';') - return(shipheart_specifique_client[0]); // Renvoi de la première valeur + return(shipheart_specifique_client[0]); } //============================================================================ // Fonction : Récupère dans la BDD la valeur de 'Theme' dans // TB_Configuration et met à jour la propriété globale 'shipheart_theme'. - // Reçoit : Rien - // Retour : Rien //============================================================================ function init_shipheart_theme() { var req, res; var nb; - // Chargement du thème demandé en config : chargement_theme(); - // Récupération du paramètre 'TB_Configuration.Fichier_image_accueil' req = 'SELECT Valeur FROM TB_Configuration WHERE Nom="Fichier_image_accueil" '; -//console.log("Requête = [ " + req + "; ]"); nb = bdd.requete(req); -//console.log("NB = "+nb); - if (nb >0) + if (nb > 0) { res = bdd.lecture_ligne(); if (!res.isEmpty) @@ -231,13 +145,13 @@ shipheart_hauteur_page = Qt.application.screens[0].height else { shipheart_fichier_image_accueil = ""; - console.log("/!\ Erreur dans le traitementr de la requête de recherche de fichier d'image d'accueil a échouée. Le nom de fichier est mis à sa valeur par défaut..."); + console.log("/!\\ Erreur dans le traitement de la requête de recherche de fichier d'image d'accueil. Valeur par défaut utilisée."); } } else { shipheart_fichier_image_accueil = ""; - console.log("/!\ La requête de recherche de fichier d'image d'accueil a échouée. Le nom de fichier est mis à sa valeur par défaut..."); + console.log("/!\\ La requête de recherche de fichier d'image d'accueil a échoué. Valeur par défaut utilisée."); } return; @@ -246,14 +160,11 @@ shipheart_hauteur_page = Qt.application.screens[0].height //============================================================================ // Fonction : Récupère dans la BDD la valeur de 'Version_cm' dans // TB_Systeme et met à jour la propriété globale 'shipheart_generation_shipbase'. - // Reçoit : Rien - // Retour : Rien //============================================================================ function init_shipheart_version_cm() { var req, res - // Récupération du paramètre 'TB_Systeme.Version_cm' req = 'SELECT Valeur FROM TB_Systeme WHERE Nom="Version_cm" '; res = bdd.requete_unique(req); @@ -261,25 +172,8 @@ shipheart_hauteur_page = Qt.application.screens[0].height else if (res[0].indexOf("CM4") !== -1) shipheart_generation_shipbase = shipheart_generation_shipbase_v2; else if (res[0].indexOf("CM5") !== -1) shipheart_generation_shipbase = shipheart_generation_shipbase_v3; else shipheart_generation_shipbase = shipheart_generation_shipbase_inconnue; -console.log("Génération de ShipBase = " + shipheart_generation_shipbase); + console.log("Génération de ShipBase = " + shipheart_generation_shipbase); return; } - - - //============================================================================================================= - // Synchroniser répertoire docs ShipRS - //============================================================================================================= - function synchro_repertoires_shiprs() - { - var commande; - - commande = "rsync -aPs --delete -e \"ssh -p 2022 -o StrictHostKeyChecking=no \" koriolan@" + AppInfo.adresse_shipbase + ":" + shipheart_repertoire_config + "/ " + shipheart_repertoire_config + "/"; - systeme.commande_shell(commande, ""); - - } - - } - - diff --git a/qml/main.qml b/qml/main.qml index f3f1747..1a3b50f 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -240,6 +240,11 @@ ApplicationWindow { readonly property int shipheart_type_installation_ecran_deporte_7_pouces : 17 readonly property int shipheart_type_installation_ecran_deporte_10_pouces : 110 readonly property int shipheart_type_installation_ecran_deporte_22_pouces : 122 + // Valeur distincte pour le client wasm - JAMAIS égale à shipheart_type_installation_shipbase, + // pour que les bips physiques et la mise en veille de l'écran physique du CM5 + // (Shipheart_page.qml, emission_bip()/mise_en_veille()) ne se déclenchent jamais + // à tort depuis un client web distant (cf synthèse, chantier "responsive"). + readonly property int shipheart_type_installation_wasm : 99 //----------------------------------------------------------------------------------- // Spécificités clients : @@ -920,8 +925,13 @@ ApplicationWindow { property bool flag_economiseur_actif: false // Dimensions (mises à jour dans 'home_attente.qml' selon la valeur de 'shipheart_type_installation' : - property int shipheart_largeur_page - property int shipheart_hauteur_page + // Liées à la taille RÉELLE et VIVANTE de la fenêtre (root.width/height) plutôt + // qu'affectées une seule fois au démarrage - tout code existant qui référence + // ces deux noms (transitions de page, home_accueil.qml...) profite donc + // automatiquement de la réactivité, sans aucun changement à faire ailleurs. + // Cf synthèse, chantier "responsive" : + property int shipheart_largeur_page: root.width + property int shipheart_hauteur_page: root.height property int shipheart_hauteur_bandeau_haut property int shipheart_hauteur_titre_2 property int shipheart_hauteur_bandeau_bas @@ -937,8 +947,10 @@ ApplicationWindow { - width: shipheart_largeur_page - height: shipheart_hauteur_page + // Pas de width/height explicite ici : Qt/le navigateur dimensionne cette + // fenêtre nativement selon le vrai canevas HTML (comportement standard et + // réactif en wasm), et shipheart_largeur_page/hauteur_page (ci-dessus) + // suivent cette taille réelle en continu via root.width/root.height. color: shipheart_theme_couleur_fond_ecran visible: true property int duree_animation_pages: 400 // En ms