Import initial du projet shipheart_cm5
This commit is contained in:
+316
@@ -0,0 +1,316 @@
|
||||
import QtQuick 2.12
|
||||
import QtQuick.Controls 2.12
|
||||
|
||||
|
||||
|
||||
Popup {
|
||||
id: boite_dialogue_validation_securisee
|
||||
|
||||
// Propriétés fixes :
|
||||
readonly property double pourcentage_largeur_page_popup: 0.6
|
||||
readonly property double pourcentage_hauteur_page_popup: 0.7
|
||||
readonly property int padding_popup: 50
|
||||
readonly property double pourcentage_boite_dialogue_titre: 0.25
|
||||
readonly property double pourcentage_boite_dialogue_message: 1 - pourcentage_boite_dialogue_titre - pourcentage_boite_dialogue_ligne_boutons
|
||||
readonly property double pourcentage_boite_dialogue_ligne_boutons: 0.15
|
||||
|
||||
readonly property int bouton_largeur: 200
|
||||
|
||||
readonly property int step_timer_appui_long: 30 // en ms
|
||||
|
||||
|
||||
// Propriétés :
|
||||
property int valeur_timer_appui_long: 0
|
||||
|
||||
property int niveau: 0
|
||||
property string message: "--"
|
||||
property int type: 0 // Utilisé uniquement par la page appelante pour distinguer les différents appels dans la même page
|
||||
|
||||
// Propriétés alias :
|
||||
property alias boutonOk: bouton_ok.visible
|
||||
property alias boutonAnnuler: bouton_annuler.visible
|
||||
property alias boutonSecurise: bouton_securise.visible
|
||||
property alias boutonOkTexte: bouton_ok_label.text
|
||||
property alias boutonAnnulerTexte: bouton_annuler_label.text
|
||||
property alias boutonSecuriseTexte: bouton_securise_label.text
|
||||
property alias alignementMessage: texte_message.horizontalAlignment
|
||||
property alias imageTitreSource: image_titre.source
|
||||
property alias affichageAscenseur: ascenseur.visible
|
||||
|
||||
|
||||
// Signaux :
|
||||
signal clicked(int bouton) // Valeur à lire lorsque le "OnClicked' est activé
|
||||
|
||||
|
||||
//===========================================================
|
||||
// Timer pour gérer les appuis longs :
|
||||
//===========================================================
|
||||
Timer {
|
||||
id: timer_appui_long
|
||||
interval: step_timer_appui_long
|
||||
triggeredOnStart: false
|
||||
repeat: true
|
||||
onTriggered: {
|
||||
if (valeur_timer_appui_long < shipheart_mouse_press_and_hold_interval_tres_long) valeur_timer_appui_long+= step_timer_appui_long;
|
||||
else // Le fait de ne pas utilise le OnPressandHold permet d'être sût que la sortie se fait au même moment que la fin du comptage (sinon, on peut avoir de petits décalages)
|
||||
{
|
||||
timer_appui_long.running = false;
|
||||
valeur_timer_appui_long = 0;
|
||||
|
||||
if (mousearea_bouton_securise.pressed)
|
||||
{
|
||||
boite_dialogue_validation_securisee.clicked(shipheart_boite_dialogue_bouton_4);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
x: (shipheart_largeur_page * (1 - pourcentage_largeur_page_popup)) / 2;
|
||||
y: (shipheart_hauteur_page * (1 - pourcentage_hauteur_page_popup)) / 2;
|
||||
width: shipheart_largeur_page * pourcentage_largeur_page_popup;
|
||||
height: shipheart_hauteur_page * pourcentage_hauteur_page_popup;
|
||||
padding: padding_popup
|
||||
|
||||
modal: true
|
||||
// focus: true // SDIR # 224 : Il ne faut PAS activer le focus. Sinon, à la fermeture, le focus précédent est réactivé (comme le dernier TextField par exemple)
|
||||
closePolicy: Popup.NoAutoClose //Popup.CloseOnPressOutside
|
||||
|
||||
background: Rectangle {
|
||||
radius: 20
|
||||
color: {
|
||||
switch(boite_dialogue_validation_securisee.niveau)
|
||||
{
|
||||
default:
|
||||
case 0: color: shipheart_couleur_fond_boite_dialogue_niveau_0; break;
|
||||
case 1: color: shipheart_couleur_fond_boite_dialogue_niveau_1; break;
|
||||
case 2: color: shipheart_couleur_fond_boite_dialogue_niveau_2; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Column {
|
||||
id: affichage_boite_dialogue
|
||||
|
||||
spacing: 20
|
||||
|
||||
//=========================================================================
|
||||
// Titre :
|
||||
//=========================================================================
|
||||
Rectangle {
|
||||
id: titre_boite_dialogue
|
||||
|
||||
width: boite_dialogue_validation_securisee.width - (2 * padding_popup)
|
||||
height: (boite_dialogue_validation_securisee.height - (2 * padding_popup) - (2 * affichage_boite_dialogue.spacing)) * pourcentage_boite_dialogue_titre
|
||||
color: "transparent"
|
||||
|
||||
Image {
|
||||
id: image_titre
|
||||
source: ""
|
||||
sourceSize.height: parent.height
|
||||
anchors {
|
||||
verticalCenter: parent.verticalCenter
|
||||
horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
visible: true
|
||||
}
|
||||
}
|
||||
|
||||
//=========================================================================
|
||||
// Message :
|
||||
//=========================================================================
|
||||
Rectangle {
|
||||
id: message_boite_dialogue
|
||||
|
||||
width: boite_dialogue_validation_securisee.width - (2 * padding_popup)
|
||||
height: (boite_dialogue_validation_securisee.height - (2 * padding_popup) - (2 * affichage_boite_dialogue.spacing)) * pourcentage_boite_dialogue_message
|
||||
color: "transparent"
|
||||
|
||||
Flickable {
|
||||
anchors.fill: parent
|
||||
anchors {
|
||||
verticalCenter: parent.verticalCenter
|
||||
}
|
||||
|
||||
contentWidth: texte_message.width
|
||||
contentHeight: texte_message.height
|
||||
flickableDirection: Flickable.VerticalFlick
|
||||
clip: true
|
||||
|
||||
ScrollBar.vertical: ScrollBar { // Important car permet de voir que la partie affichée n'est pas complète dans le message...
|
||||
id: ascenseur
|
||||
policy: ScrollBar.AlwaysOn
|
||||
width: 10
|
||||
visible: false
|
||||
}
|
||||
|
||||
TextEdit {
|
||||
id: texte_message
|
||||
width: message_boite_dialogue.width - ascenseur.width - 5 // Le '-5' permet de détacher le texte de l'ascenseur
|
||||
height: Math.max(message_boite_dialogue.height, implicitHeight) // Permet d'avoir la hauteur de la zone si le texte est "court" (et donc de centrer verticalement) puis la hauteur totale si le texte est "long" (et pouvoir se déplacer vers la fin et pas centré sur le milieu !)
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
readOnly:true
|
||||
wrapMode: Text.Wrap
|
||||
textFormat: Text.RichText
|
||||
text: boite_dialogue_validation_securisee.message
|
||||
color: {
|
||||
switch(boite_dialogue_validation_securisee.niveau)
|
||||
{
|
||||
default:
|
||||
case 0: shipheart_couleur_texte_boite_dialogue_niveau_0; break;
|
||||
case 1: shipheart_couleur_texte_boite_dialogue_niveau_1; break;
|
||||
case 2: shipheart_couleur_texte_boite_dialogue_niveau_2; break;
|
||||
}
|
||||
}
|
||||
font.pixelSize:18
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//=========================================================================
|
||||
// Boutons :
|
||||
//=========================================================================
|
||||
Row {
|
||||
height: (boite_dialogue_validation_securisee.height - (2 * padding_popup) - (2 * affichage_boite_dialogue.spacing)) * pourcentage_boite_dialogue_ligne_boutons
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
spacing: 20
|
||||
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Bouton Ok :
|
||||
Rectangle {
|
||||
id: bouton_ok
|
||||
|
||||
width: bouton_largeur
|
||||
height: parent.height
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
radius: shipheart_rayon_bouton
|
||||
color: couleur_gris_tres_fonce
|
||||
visible: true
|
||||
Label {
|
||||
id: bouton_ok_label
|
||||
anchors.centerIn: parent
|
||||
text: qsTr("OK")
|
||||
color: couleur_blanc_casse
|
||||
font.pixelSize:20
|
||||
}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
shipheart_clic();
|
||||
boite_dialogue_validation_securisee.clicked(shipheart_boite_dialogue_bouton_1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Bouton Annuler :
|
||||
Rectangle {
|
||||
id: bouton_annuler
|
||||
|
||||
width: bouton_largeur
|
||||
height: parent.height
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
radius: shipheart_rayon_bouton
|
||||
color: couleur_gris_tres_fonce
|
||||
visible: false
|
||||
Label {
|
||||
id: bouton_annuler_label
|
||||
anchors.centerIn: parent
|
||||
text: qsTr("Annuler")
|
||||
color: couleur_blanc_casse
|
||||
font.pixelSize:20
|
||||
}
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
onClicked: {
|
||||
shipheart_clic();
|
||||
boite_dialogue_validation_securisee.clicked(shipheart_boite_dialogue_bouton_2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// Bouton Sécurisé :
|
||||
Rectangle {
|
||||
id: bouton_securise
|
||||
|
||||
width: bouton_largeur
|
||||
height: parent.height
|
||||
anchors.verticalCenter: parent.verticalCenter
|
||||
radius: shipheart_rayon_bouton
|
||||
color: couleur_gris_tres_fonce
|
||||
visible: false
|
||||
Rectangle { // Barre grandissante pour montrer durée d'appui vs tempo nécessaire :
|
||||
width: (valeur_timer_appui_long / shipheart_mouse_press_and_hold_interval_tres_long) * parent.width
|
||||
height: parent.height
|
||||
color: couleur_rouge_transparent
|
||||
radius: shipheart_rayon_bouton
|
||||
visible: mousearea_bouton_securise.pressed
|
||||
}
|
||||
Label {
|
||||
id: bouton_securise_label
|
||||
anchors.centerIn: parent
|
||||
text: qsTr("---")
|
||||
color: couleur_blanc_casse
|
||||
font.pixelSize:20
|
||||
}
|
||||
MouseArea {
|
||||
id: mousearea_bouton_securise
|
||||
anchors.fill: parent
|
||||
onPressed: { // Déclenché lors de l'appui inital
|
||||
timer_appui_long.running = true;
|
||||
valeur_timer_appui_long = 0;
|
||||
shipheart_clic();
|
||||
}
|
||||
onClicked: { // Déclenché si l'appui n'a pas été suffisement long pour avoir un Press&Hold :
|
||||
timer_appui_long.running = false;
|
||||
valeur_timer_appui_long = 0;
|
||||
}
|
||||
onExited: { // Déclenché si le doigt sort de la zone du bouton (sinon, on continue à compter alors qu'on est sorti de la zone et même relaché le doigt !!)
|
||||
timer_appui_long.running = false;
|
||||
valeur_timer_appui_long = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
enter: Transition {
|
||||
ParallelAnimation {
|
||||
NumberAnimation {
|
||||
property: "opacity";
|
||||
from: 0.0;
|
||||
to: 1.0;
|
||||
//easing.type: Easing.InElastic;
|
||||
duration: 200
|
||||
}
|
||||
NumberAnimation {
|
||||
property: "scale";
|
||||
from: 0.0;
|
||||
to: 1.0;
|
||||
// easing.type: Easing.OutBack
|
||||
duration: 200
|
||||
}
|
||||
}
|
||||
}
|
||||
exit: Transition {
|
||||
ParallelAnimation {
|
||||
NumberAnimation {
|
||||
property: "opacity";
|
||||
from: 1.0
|
||||
to: 0.0;
|
||||
duration: 200
|
||||
}
|
||||
NumberAnimation {
|
||||
property: "scale";
|
||||
from: 1.0
|
||||
to: 0.0;
|
||||
duration: 200
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user