|
#!/bin/bash |
|
|
|
# Fonction pour afficher le résultat dans une boîte de dialogue Zenity. |
|
# Si l'utilisateur a annulé l'action ou n'a rien saisi, on affiche un message d'annulation. |
|
show_result() { |
|
if [ -z "$1" ]; then # Vérifie si l'argument est vide (si aucune saisie n'a été faite ou si l'annulation a été choisie). |
|
zenity --info --title="Résultat" --text="Action annulée ou aucune saisie" --width=300 |
|
else # Sinon, on affiche le résultat que l'utilisateur a saisi ou sélectionné. |
|
zenity --info --title="Résultat" --text="$1" --width=300 |
|
fi |
|
} |
|
|
|
# Fonction pour afficher une barre de progression. |
|
# On utilise une boucle qui va simuler une tâche qui progresse. |
|
show_progress() { |
|
( |
|
# Cette boucle for simule une progression de 1 à 100%. |
|
for i in {1..100}; do |
|
echo $i # Envoie la valeur actuelle de la progression à Zenity. |
|
sleep 0.05 # Attend un court instant (0.05 secondes) pour simuler le passage du temps. |
|
done |
|
) | zenity --progress --title="$1" --text="Chargement en cours..." --auto-close --percentage=0 |
|
|
|
# On vérifie si l'utilisateur a annulé la barre de progression. |
|
# $? contient le code de retour de la dernière commande exécutée. |
|
# Un code différent de 0 signifie une annulation. |
|
if [ $? -ne 0 ]; then |
|
zenity --info --title="Résultat" --text="Progression annulée" --width=300 |
|
fi |
|
} |
|
|
|
# Fonction pour une barre de progression pulsée (qui ne montre pas de pourcentage, mais un traitement en cours). |
|
show_pulsate_progress() { |
|
( |
|
# Cette boucle infinie envoie un message à Zenity pour afficher "Traitement en cours..." |
|
while :; do |
|
echo "# Traitement en cours..." # Le # permet de spécifier un message dans une barre de progression Zenity. |
|
sleep 1 # Attend une seconde avant de recommencer. |
|
done |
|
) | zenity --progress --title="$1" --text="Traitement en cours..." --pulsate --auto-close --timeout=10 |
|
|
|
# On vérifie si l'utilisateur a annulé la barre de progression pulsée. |
|
if [ $? -ne 0 ]; then |
|
zenity --info --title="Résultat" --text="Progression annulée" --width=300 |
|
fi |
|
} |
|
|
|
# Début du menu principal. |
|
# Ce menu est affiché tant que l'utilisateur ne choisit pas l'option "Quitter". |
|
while true; do |
|
# Zenity est utilisé pour afficher un menu de sélection sous forme de liste. |
|
# Chaque option correspond à une action différente à exécuter. |
|
choice=$(zenity --list --title="Démo complète Zenity" --text="Choisissez une option:" --column="Options" \ |
|
"Boîte d'information" \ |
|
"Boîte d'erreur" \ |
|
"Boîte d'avertissement" \ |
|
"Question" \ |
|
"Saisie de texte" \ |
|
"Saisie de mot de passe" \ |
|
"Barre de progression" \ |
|
"Barre de progression pulsée" \ |
|
"Sélection de fichier" \ |
|
"Sélection de fichiers multiples" \ |
|
"Sélection de dossier" \ |
|
"Enregistrement de fichier" \ |
|
"Calendrier" \ |
|
"Échelle" \ |
|
"Liste de sélection" \ |
|
"Liste à cocher" \ |
|
"Liste radio" \ |
|
"Liste éditable" \ |
|
"Saisie de texte multilignes" \ |
|
"Saisie de texte multilignes éditable" \ |
|
"Notification" \ |
|
"Sélection de couleur" \ |
|
"Formulaire" \ |
|
"Boîte de mot de passe avec nom d'utilisateur" \ |
|
"Quitter") |
|
|
|
# Si l'utilisateur clique sur "Annuler" ou ferme la fenêtre, la variable choice sera vide. |
|
if [ -z "$choice" ]; then |
|
exit 0 # On quitte le programme si aucune option n'a été choisie. |
|
fi |
|
|
|
# Utilisation de la structure "case" pour exécuter l'action correspondant à l'option choisie. |
|
case $choice in |
|
# Option "Boîte d'information" |
|
"Boîte d'information") |
|
# Affiche une boîte d'information simple. |
|
zenity --info --title="Information" --text="Ceci est une boîte d'information." --icon-name=dialog-information |
|
;; |
|
|
|
# Option "Boîte d'erreur" |
|
"Boîte d'erreur") |
|
# Affiche une boîte d'erreur avec un message d'erreur. |
|
zenity --error --title="Erreur" --text="Ceci est une boîte d'erreur." --width=250 |
|
;; |
|
|
|
# Option "Boîte d'avertissement" |
|
"Boîte d'avertissement") |
|
# Affiche une boîte d'avertissement avec un message. |
|
zenity --warning --title="Avertissement" --text="Ceci est une boîte d'avertissement." --icon-name=dialog-warning |
|
;; |
|
|
|
# Option "Question" |
|
"Question") |
|
# Affiche une boîte de dialogue pour poser une question avec deux boutons : "Oui" et "Non". |
|
# Si l'utilisateur clique sur "Oui", la commande retourne 0, sinon elle retourne 1. |
|
if zenity --question --title="Question" --text="Êtes-vous sûr de vouloir continuer ?" --ok-label="Oui" --cancel-label="Non"; then |
|
show_result "Vous avez répondu : Oui" # Affiche "Oui" si l'utilisateur a confirmé. |
|
else |
|
show_result "Vous avez répondu : Non" # Affiche "Non" si l'utilisateur a annulé. |
|
fi |
|
;; |
|
|
|
# Option "Saisie de texte" |
|
"Saisie de texte") |
|
# Affiche une boîte de saisie où l'utilisateur peut entrer du texte. |
|
result=$(zenity --entry --title="Saisie" --text="Entrez votre nom:" --entry-text="Nom par défaut") |
|
show_result "$result" # Affiche le texte saisi par l'utilisateur. |
|
;; |
|
|
|
# Option "Saisie de mot de passe" |
|
"Saisie de mot de passe") |
|
# Affiche une boîte de saisie pour entrer un mot de passe. |
|
# Le texte entré est masqué (sécurisé). |
|
result=$(zenity --password --title="Mot de passe") |
|
show_result "$result" # Affiche le mot de passe (pour des raisons pédagogiques ici, mais à éviter en production !). |
|
;; |
|
|
|
# Option "Barre de progression" |
|
"Barre de progression") |
|
show_progress "Progression" # Appelle la fonction qui affiche la barre de progression. |
|
;; |
|
|
|
# Option "Barre de progression pulsée" |
|
"Barre de progression pulsée") |
|
show_pulsate_progress "Progression pulsée" # Appelle la fonction qui affiche la barre de progression pulsée. |
|
;; |
|
|
|
# Option "Sélection de fichier" |
|
"Sélection de fichier") |
|
# Affiche une boîte de dialogue pour sélectionner un fichier. |
|
result=$(zenity --file-selection --title="Sélectionnez un fichier" --file-filter="Texte | *.txt *.doc") |
|
show_result "$result" # Affiche le chemin du fichier sélectionné. |
|
;; |
|
|
|
# Option "Sélection de fichiers multiples" |
|
"Sélection de fichiers multiples") |
|
# Permet à l'utilisateur de sélectionner plusieurs fichiers à la fois. |
|
result=$(zenity --file-selection --title="Sélectionnez des fichiers" --multiple --separator=", ") |
|
show_result "$result" # Affiche les chemins des fichiers sélectionnés, séparés par des virgules. |
|
;; |
|
|
|
# Option "Sélection de dossier" |
|
"Sélection de dossier") |
|
# Affiche une boîte de dialogue pour choisir un dossier. |
|
result=$(zenity --file-selection --directory --title="Sélectionnez un dossier") |
|
show_result "$result" # Affiche le chemin du dossier sélectionné. |
|
;; |
|
|
|
# Option "Enregistrement de fichier" |
|
"Enregistrement de fichier") |
|
# Boîte de dialogue pour enregistrer un fichier, en spécifiant un nom par défaut. |
|
result=$(zenity --file-selection --save --title="Enregistrer le fichier" --filename="nouveau_fichier.txt") |
|
show_result "$result" # Affiche le chemin du fichier à enregistrer. |
|
;; |
|
|
|
# Option "Calendrier" |
|
"Calendrier") |
|
# Boîte de dialogue de sélection de date avec un calendrier. |
|
result=$(zenity --calendar --title="Calendrier" --text="Choisissez une date" --date-format="%Y-%m-%d") |
|
show_result "$result" # Affiche la date sélectionnée. |
|
;; |
|
|
|
# Option "Échelle" |
|
"Échelle") |
|
# Affiche une échelle où l'utilisateur peut choisir une valeur entre un minimum et un maximum. |
|
result=$(zenity --scale --title="Échelle" --text="Choisissez une valeur" --min-value=0 --max-value=100 --value=50 --step=5) |
|
show_result "$result" # Affiche la valeur choisie par l'utilisateur. |
|
;; |
|
|
|
# Option "Liste de sélection" |
|
"Liste de sélection") |
|
# Affiche une liste d'options avec deux colonnes, permettant à l'utilisateur de choisir une option. |
|
result=$(zenity --list --title="Liste" --text="Choisissez un élément" --column="ID" --column="Options" 1 "Option 1" 2 "Option 2" 3 "Option 3" --print-column=ALL) |
|
show_result "$result" # Affiche l'élément sélectionné. |
|
;; |
|
|
|
# Option "Liste à cocher" |
|
"Liste à cocher") |
|
# Affiche une liste d'options avec des cases à cocher. |
|
result=$(zenity --list --checklist --title="Liste à cocher" --text="Choisissez des éléments" --column="Sélection" --column="ID" --column="Options" FALSE 1 "Option 1" FALSE 2 "Option 2" FALSE 3 "Option 3") |
|
show_result "$result" # Affiche les éléments cochés par l'utilisateur. |
|
;; |
|
|
|
# Option "Liste radio" |
|
"Liste radio") |
|
# Affiche une liste d'options avec des boutons radio (sélection unique). |
|
result=$(zenity --list --radiolist --title="Liste radio" --text="Choisissez une option" --column="Sélection" --column="ID" --column="Options" TRUE 1 "Option 1" FALSE 2 "Option 2" FALSE 3 "Option 3") |
|
show_result "$result" # Affiche l'élément sélectionné. |
|
;; |
|
|
|
# Option "Liste éditable" |
|
"Liste éditable") |
|
# Affiche une liste éditable où l'utilisateur peut modifier les options existantes. |
|
result=$(zenity --list --title="Liste éditable" --text="Modifiez les éléments" --column="Options" --editable "Option 1" "Option 2" "Option 3") |
|
show_result "$result" # Affiche l'élément modifié. |
|
;; |
|
|
|
# Option "Saisie de texte multilignes" |
|
"Saisie de texte multilignes") |
|
# Affiche une boîte de texte multilignes avec un contenu provenant d'un fichier. |
|
result=$(zenity --text-info --title="Saisie multilignes" --filename="/etc/hosts") |
|
show_result "$(echo "$result" | head -n 3)..." # Affiche les trois premières lignes du fichier pour l'exemple. |
|
;; |
|
|
|
# Option "Saisie de texte multilignes éditable" |
|
"Saisie de texte multilignes éditable") |
|
# Même chose que la précédente, mais le texte est éditable. |
|
result=$(zenity --text-info --title="Saisie multilignes éditable" --editable --filename="/etc/hosts") |
|
show_result "$(echo "$result" | head -n 3)..." # Affiche les trois premières lignes modifiées. |
|
;; |
|
|
|
# Option "Notification" |
|
"Notification") |
|
# Affiche une notification simple. |
|
zenity --notification --window-icon="info" --text="Ceci est une notification" |
|
;; |
|
|
|
# Option "Sélection de couleur" |
|
"Sélection de couleur") |
|
# Affiche une boîte de sélection de couleur. |
|
result=$(zenity --color-selection --title="Sélectionnez une couleur" --color="#FF0000") |
|
show_result "$result" # Affiche la couleur sélectionnée. |
|
;; |
|
|
|
# Option "Formulaire" |
|
"Formulaire") |
|
# Affiche un formulaire avec plusieurs champs (texte, mot de passe, calendrier, liste déroulante, combo). |
|
result=$(zenity --forms --title="Formulaire" --text="Entrez vos informations" \ |
|
--add-entry="Nom" \ |
|
--add-password="Mot de passe" \ |
|
--add-calendar="Date de naissance" \ |
|
--add-list="Pays" --list-values="France|Allemagne|Espagne" \ |
|
--add-combo="Ville" --combo-values="Paris|Berlin|Madrid") |
|
show_result "$result" # Affiche les informations saisies dans le formulaire. |
|
;; |
|
|
|
# Option "Boîte de mot de passe avec nom d'utilisateur" |
|
"Boîte de mot de passe avec nom d'utilisateur") |
|
# Affiche une boîte de dialogue pour entrer un nom d'utilisateur et un mot de passe. |
|
result=$(zenity --password --title="Connexion" --username) |
|
show_result "$result" # Affiche le nom d'utilisateur et le mot de passe (à éviter en production). |
|
;; |
|
|
|
# Option "Quitter" |
|
"Quitter") |
|
exit 0 # Quitte le programme si l'utilisateur choisit "Quitter". |
|
;; |
|
|
|
# Option invalide (si jamais une option non prévue est sélectionnée, mais cela ne devrait pas arriver ici). |
|
*) |
|
zenity --error --text="Option invalide" |
|
;; |
|
esac |
|
done |