Fondation responsive : suppression du concept 'écran déporté'/ShipRS (sans objet en wasm), taille de fenêtre réactive (root.width/height au lieu d'un instantané figé au démarrage), nouveau type d'installation 'wasm' évitant bips/mise en veille physique à tort

This commit is contained in:
2026-08-27 11:04:21 +02:00
parent 81968d8900
commit 5ff19d5f0f
2 changed files with 71 additions and 165 deletions
+55 -161
View File
@@ -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, "");
}
}
+16 -4
View File
@@ -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