diff --git a/.gitignore b/.gitignore index 77ca5ac..ad12c1a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,9 @@ _version.h # Fichiers de session/éditeur *.autosave *~ + +# Historique des builds horodatés (générés par archive_version.cmake) +versions/ + +# Marqueur de version courant (régénéré à chaque build) +.current_version diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ae7502..9ea7102 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.16) -project(shipheart_cm5 LANGUAGES CXX) +project(shipheart_qt LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) @@ -70,6 +70,14 @@ add_executable(shipheart_qt add_dependencies(shipheart_qt generate_version) +add_custom_command(TARGET shipheart_qt POST_BUILD + COMMAND ${CMAKE_COMMAND} + -DEXE_PATH=$ + -DSRC_DIR=${CMAKE_CURRENT_SOURCE_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/archive_version.cmake + COMMENT "Archivage d'une copie horodatée de l'exécutable" +) + target_link_libraries(shipheart_qt PRIVATE Qt6::Quick Qt6::VirtualKeyboard diff --git a/archive_version.cmake b/archive_version.cmake new file mode 100644 index 0000000..280ec2e --- /dev/null +++ b/archive_version.cmake @@ -0,0 +1,9 @@ +file(READ "${SRC_DIR}/.current_version" APP_VERSION) +string(STRIP "${APP_VERSION}" APP_VERSION) + +file(MAKE_DIRECTORY "${SRC_DIR}/versions") +file(COPY "${EXE_PATH}" DESTINATION "${SRC_DIR}/versions") +file(RENAME "${SRC_DIR}/versions/shipheart_qt" "${SRC_DIR}/versions/shipheart_qt_${APP_VERSION}") + +message(STATUS "Exécutable archivé : versions/shipheart_qt_${APP_VERSION}") + diff --git a/config_affichage.qml b/config_affichage.qml index f197240..3960bf1 100644 --- a/config_affichage.qml +++ b/config_affichage.qml @@ -117,6 +117,29 @@ Shipheart_page { } } + //------------------------------------------------------------------------------- + // Ligne de formulaire : No MMSI + Rectangle { + width: (shipheart_largeur_page * pourcentage_largeur_colonne_gauche) - (espace_colonnes_principales / 2) + height: visible ? hauteur_ligne_formulaire : 0 + color: "transparent" + + Shipheart_formulaire_label { + text: qsTr("No MMSI du bateau") + width: parent.width * pourcentage_largeur_labels_formulaire + } + + Shipheart_formulaire_textfield { + id: champ_formulaire_No_mmsi + width: parent.width * (1 - pourcentage_largeur_labels_formulaire) + x: parent.width * pourcentage_largeur_labels_formulaire + } + + Shipheart_formulaire_ligne_separation { + haut_bas_hautbas: shipheart_formulaire_ligne_separation_basse + } + } + //------------------------------------------------------------------------------- // Ligne de formulaire : Fuseau horaire Rectangle { @@ -312,6 +335,13 @@ Shipheart_page { res = bdd.requete_unique(req); champ_formulaire_Nom_bateau.text = res[0]; + //--------------------------------------------------------------------------------------- + // Nom du bateau : + //--------------------------------------------------------------------------------------- + req = 'SELECT Valeur FROM TB_Configuration WHERE Nom="No_mmsi" '; + res = bdd.requete_unique(req); + champ_formulaire_No_mmsi.text = res[0]; + //--------------------------------------------------------------------------------------- // Fuseau horaire : @@ -416,10 +446,19 @@ console.log("shipheart_time_out_economiseur : valeur de i après recherche = " + bdd.requete_unique(req); + //--------------------------------------------------------------------------------------- + // No MMSI du bateau : + //--------------------------------------------------------------------------------------- + req = 'UPDATE TB_Configuration '; + req += ' SET Valeur="' + champ_formulaire_No_mmsi.text + '" '; + req += ' WHERE Nom="No_mmsi" '; +//console.log("Requête = " + req) + bdd.requete_unique(req); + + //--------------------------------------------------------------------------------------- // Fuseau horaire : //--------------------------------------------------------------------------------------- - shipheart_fuseau_horaire = champ_formulaire_Fuseau_horaire.model.get(champ_formulaire_Fuseau_horaire.currentIndex).valeur; req = 'UPDATE TB_Configuration '; @@ -432,7 +471,6 @@ console.log("shipheart_time_out_economiseur : valeur de i après recherche = " + //--------------------------------------------------------------------------------------- // Time-out économiseur : //--------------------------------------------------------------------------------------- - shipheart_time_out_economiseur = champ_formulaire_Time_out_economiseur.model.get(champ_formulaire_Time_out_economiseur.currentIndex).valeur; req = 'UPDATE TB_Configuration '; @@ -448,7 +486,6 @@ console.log("shipheart_time_out_economiseur : valeur de i après recherche = " + //--------------------------------------------------------------------------------------- // Thème : //--------------------------------------------------------------------------------------- - // Mise à jour dans la BDD : req = 'UPDATE TB_Configuration '; req += ' SET Valeur="' + champ_formulaire_Theme.model.get(champ_formulaire_Theme.currentIndex).valeur + '" '; diff --git a/config_page_point.qml b/config_page_point.qml index ba4a927..49e9cdd 100644 --- a/config_page_point.qml +++ b/config_page_point.qml @@ -664,10 +664,15 @@ Shipheart_page { champ_formulaire_Type_point.model.clear(); // Boucle sur toutes les entrées du tableau des types de points correspondant au 'type_source' (cf dans 'main.qml') : - for (i = 0; i < shipheart_page_personnalisee_type_point_icones[type_source].length; i ++) + var start = 0; + if (type_source === shipheart_type_source_circuits) { -if ((type_source === shipheart_type_source_circuits) && (i === 0)) continue; // Pour les circuits, on n'autorise pas le premier élément qui correspond à l'icone OFF + start = 1; + if (type_point === 0) type_point = 1; // Pour les circuits, on n'autorise pas le premier élément qui correspond à l'icone OFF + } + for (i = start; i < shipheart_page_personnalisee_type_point_icones[type_source].length; i ++) + { champ_formulaire_Type_point.model.append( { "valeur": i, "texte": "", diff --git a/generate_version.cmake b/generate_version.cmake index 1e0360d..4fe8572 100755 --- a/generate_version.cmake +++ b/generate_version.cmake @@ -17,4 +17,6 @@ file(WRITE "${OUTPUT_FILE}" #endif // _VERSION_H ") +file(WRITE "${CMAKE_CURRENT_LIST_DIR}/.current_version" "${APP_VERSION}") + message(STATUS "Version ShipHeart Qt régénérée : ${APP_VERSION}") diff --git a/page_personnalisee.qml b/page_personnalisee.qml index 7fa0fc0..b028cd1 100644 --- a/page_personnalisee.qml +++ b/page_personnalisee.qml @@ -11,6 +11,7 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 +import QtQuick.Effects import qt.koriolan.shipheart 1.0 import"fonctions.js" as Fonctions @@ -123,7 +124,7 @@ Shipheart_page { width: shipheart_largeur_page height: affichage_hauteur_utile color: "transparent" -border.color: couleur_gris_moyen +//border.color: couleur_gris_moyen ListModel { id: modele_liste_points @@ -132,6 +133,7 @@ border.color: couleur_gris_moyen //========================== // Image de la silhouette : Image { + id: image_silhouette anchors.fill: parent source: (fichier !== "") @@ -193,21 +195,31 @@ border.color: couleur_gris_moyen verticalCenter: parent.verticalCenter } } - /* ColorOverlay { - anchors.fill: icone_point - source: icone_point - color: couleur_green_yellow - } -*/ + MultiEffect { + anchors.fill: icone_point + source: icone_point + visible: model.halo + + shadowEnabled: true + shadowColor: couleur_blanc + shadowBlur: 1.0 // Entre 0 et 1. Plus il est haut, plus l'étalement est progressif. Plus il est bas, plus la transition est abrupte. + shadowScale: 2.0 // Distance d'étalement du halo + shadowHorizontalOffset: 0 + shadowVerticalOffset: 0 + shadowOpacity: 1.0 + } +/* Plus valable sur Qt6 : Glow { - anchors.fill: icone_point - radius: 30 - samples: 61 + anchors.fill: icone_point + radius: 30 + samples: 61 // spread: 0.9 - color: couleur_blanc - source: icone_point - visible: model.halo - } + color: couleur_blanc + source: icone_point + visible: model.halo + } +*/ + //----------------------------------------------------- // Nom : diff --git a/systeme.cpp b/systeme.cpp index 2c53abb..026c22d 100644 --- a/systeme.cpp +++ b/systeme.cpp @@ -136,8 +136,7 @@ void Systeme::commande_shell_non_bloquante(QString commande) //qDebug() << "Commande shell à lancer = [" << commande << "]"; - QProcess process; - - // Lancement de la commande : - process.startDetached(commande); // Permer d'oublier le processus une fois lancé (sinon, on peut générer une erreur du type "QProcess: Destroyed while process ("sudo") is still running.") + QStringList args = QProcess::splitCommand(commande); + QString programme = args.takeFirst(); + QProcess::startDetached(programme, args); // Méthode statique, pas besoin d'instancier QProcess. Permer d'oublier le processus une fois lancé }