#!/bin/bash ############################################## ############################################## ############## ZENITY GENERATOR ############## ############################################## #####################################by Hizoka # Script de génération de fenêtres graphiques réalisé uniquement avec Zenity et du bash # Pour des questions ou des infos : http://forum.ubuntu-fr.org/viewtopic.php?id=280649 ### Fonctions courantes ### # Fonction cherchant l'emplacement du script (pour le .log) function emplacement_script() { if [ "${0:0:1}" == "/" ]; then emplacement_script=$(dirname "$0") else emplacement_script=$(pwd) fi } # Fonction affichant le code final de la nouvelle fenêtre créée avec copie dans le log si besoin function affichage_code() { zenity --text-info --title="Code de votre fenêtre :" --width="500" --height="400" --filename=".fenetre_zenity" if [[ -n $(egrep "^choix_log=OUI$" "${emplacement_script}/zenity_generator.sh") ]] then (cat .fenetre_zenity && echo -e "\n") >> "${emplacement_script}/log_zenity_generator.log" fi rm .fenetre_zenity } # Fonction donnant la hauteur de la fenêtre function hauteur_fenetre() { hauteur_fenetre="--height=\"$(zenity --width=300 --height=80 --title 'Choix de la hauteur' --text 'Indiquez la taille (en pixel) maximale de la hauteur de la fenêtre' --entry --width=400 --height=100)\"" } # Fonction donnant l'Icône de la fenêtre function icone_fenetre() { icone_fenetre="--window-icon=\"$(zenity --title 'Choix de l`icône' --filename=/home/$USER/ --file-selection --width=400)\"" } # Fonction donnant la largeur de la fenêtre function largeur_fenetre() { largeur_fenetre="--width=\"$(zenity --width=300 --height=80 --title 'Choix de la largeur' --text 'Indiquez la taille (en pixel) maximale de la largeur de la fenêtre' --entry --width=400 --height=100)\"" } # Fonction donnant le texte avec couleur et gras function texte() { echo -e "Vous pouvez maintenant taper le texte que vous souhaitez voir apparaître dans votre fenêtre. Il est possible de faire des effets sur les polices, pour plus d'infos, regardez le menu 'exemples'. Evitez les !!, cela provoque des erreurs. Exemples de balises pour mettre en forme le texte interne de vos fenêtres (exceptées celles de saisie de texte) : - Mise en gras : texte - Mise en italique : Texte - Mise en couleur : texte (avec les anti-slashs) ##### MERCI DE SUPPRIMER CES INFOS AVANT DE CLIQUER SUR FERMER #####" > .texte texte="--text=\"$(zenity --text-info --title='Tapez le texte de la fenêtre' --editable --filename='.texte' --width='550' --height='500')\"" rm .texte } # Fonction donnant le titre function titre() { titre="--title=\"$(zenity --title 'Choix du titre' --text 'Tapez le nom de la fenêtre' --entry --width=400 --height=100)\"" } # Fonction pour utilisation ou non d'un fichier log function utilisation_log() { emplacement_script if [[ -n $(egrep "^choix_log=OUI$" "${emplacement_script}/zenity_generator.sh") ]] then echo "Vous enregistrez vos fenêtres dans un fichier log disponible dans le même dossier que ce script. Pour arrêter d'utiliser le fichier log : sed -i 's/^choix_log=OUI$/choix_log=NON/' \"${emplacement_script}/zenity_generator.sh\"" elif [[ -n $(egrep "^choix_log=NON$" "${emplacement_script}/zenity_generator.sh") ]] then echo "Vous ne souhaitez pas enregistrer vos codes de fenêtres dans un fichier log. Pour utiliser un fichier log de sauvegarde : sed -i \"s/^choix_log=NON$/choix_log=OUI/\" \"${emplacement_script}/zenity_generator.sh\"" else log=$(zenity --list --radiolist --title="Utilisation d'un .log ?" --text="Voulez-vous que vos créations soient sauvegardées dans un fichier log ? Cette question ne vous sera posée qu'une seule fois. Il vous sera possible de modifier ce choix en tapant la commande qui s'affiche dans la console au démarrage du script." --column="Choix" --column="Réponse" \ FALSE "OUI" \ FALSE "NON") if [[ -n ${log} ]] then sed -i "/^#### Choix log ####$/a choix_log=${log}" "${emplacement_script}/zenity_generator.sh" fi fi #### Choix log #### choix_log=OUI } ############################################################### ## Système pour la fenêtre Zenity affichant un fichier texte ## ############################################################### # Permet également sauvegarder après. function zenity_fichier_texte() { # Ouvre une fenêtre zenity demandant les differentes variables utilent à la creation de la fenêtre MENU=$(zenity --title 'Que voulez vous modifier ?' --list --text 'Merci de choisir les différentes options à modifier ou à appliquer.' --checklist --column 'Choix' --column 'Action' --width=500 --height=400 \ TRUE "Choix du titre de la fenêtre" \ TRUE "Choix du fichier texte à afficher" \ FALSE "Permettre l'édition du texte de la fenêtre" \ FALSE "Largeur maximale de la fenêtre" \ FALSE "Hauteur maximale de la fenêtre" \ FALSE "Icône de la fenêtre" ) if [[ -n $(echo ${MENU} | grep "Choix du titre de la fenêtre") ]] then titre fi if [[ -n $(echo ${MENU} | grep "Choix du fichier texte à afficher") ]] then fichier_texte="--filename=\"$(zenity --title 'Emplacement du fichier texte à afficher dans la fenêtre.' --filename=/home/$USER/ --file-selection)\"" fi if [[ -n $(echo ${MENU} | grep "Permettre l'édition du texte de la fenêtre") ]] then edition="--editable" fi if [[ -n $(echo ${MENU} | grep "Largeur maximale de la fenêtre") ]] then largeur_fenetre fi if [[ -n $(echo ${MENU} | grep "Hauteur maximale de la fenêtre") ]] then hauteur_fenetre fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo -e "zenity --text-info ${titre} ${largeur_fenetre} ${hauteur_fenetre} ${icone_fenetre} ${fichier_texte} ${edition}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } ############################################### ## Système pour la fenêtre Zenity calendrier ## ############################################### # Fonction du format de la date function date() { date="--date-format=\"$(zenity --title 'Choix du format de la date' --text 'Choisissez le format de date voulu en vous aidant des explications. Jours -- %d : Jour du mois [ex : 12] %a : 3 premières lettres du jour [ex : ven] %A : Affiche le nom du jour [ex : vendredi] %j : Numéro du jour depuis le debut d`année [ex : 286] Semaines -- %V : Numéro de lasemaine [ex : 52] Mois -- %m : Mois de l`année [ex: 10] %b : 3 premières lettres du mois [ex : oct] %B : Affiche le nom du mois [ex : octobre] Années -- %y : Année, sur 2 chiffres [ex : 84] %Y : Année, sur 4 chiffres [ex : 1984] Formats -- %D : mois/jour/année [ex : 07/23/08] %F : année-mois-jour [ex : 2008-07-21] %x : jour.mois.année [ex : 21.07.2008] %c : %a %d %b %Y heure [ex : lun 21 jui 2008 00:00:00] Exemple : Nous sommes le %A %d %m %Y' --entry --width=400 --height=100)\"" } function zenity_calendrier() { MENU=$(zenity --title "Que voulez vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --checklist --column "Choix" --column "Action" --width=500 --height=400 \ TRUE "Choix du titre de la fenêtre" \ TRUE "Choix du texte à afficher dans la fenêtre" \ FALSE "Choix du jour de base" \ FALSE "Choix du mois de base" \ FALSE "Choix de l'année de base" \ FALSE "Choix du format de sorti de date" \ FALSE "Largeur maximale de la fenêtre" \ FALSE "Hauteur maximale de la fenêtre" \ FALSE "Icône de la fenêtre") if [[ -n $(echo ${MENU} | grep "Choix du titre de la fenêtre") ]] then titre fi if [[ -n $(echo ${MENU} | grep "Choix du texte à afficher dans la fenêtre") ]] then texte fi if [[ -n $(echo ${MENU} | grep "Choix du jour de base") ]] then jour="--day=\"$(zenity --title 'Choix du jour' --text 'Choisissez le jour de base.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Choix du mois de base") ]] then mois="--month=\"$(zenity --title 'Choix du mois' --text 'Choisissez le mois de base.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Choix de l'année de base") ]] then annee="--year=\"$(zenity --title 'Choix de l`année' --text 'Choisissez l`année.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Choix du format de sorti de date") ]] then date fi if [[ -n $(echo ${MENU} | grep "Largeur maximale de la fenêtre") ]] then largeur_fenetre fi if [[ -n $(echo ${MENU} | grep "Hauteur maximale de la fenêtre") ]] then hauteur_fenetre fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo -e "zenity --calendar ${titre} ${texte} ${largeur_fenetre} ${hauteur_fenetre} ${icone_fenetre} ${jour} ${mois} ${annee} ${date}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } ############################################# ## Système pour la fenêtre Zenity messages ## ############################################# # Fonction du type de fenêtre message function type_fenetre() { type_fenetre=$(zenity --title="Quel type de fenêtre de message voulez-vous ?" --text="Veuillez choisir dans la liste suivante le type de fenêtre voulu." "Fenetre d'erreur" "Fenetre de confirmation" "Fenetre d'avertissement" --entry --entry-text="Fenetre d'information") if [ "$type_fenetre" = "Fenetre d'information" ] then type_fenetre="--info" elif [ "$type_fenetre" = "Fenetre d'erreur" ] then type_fenetre="--error" elif [ "$type_fenetre" = "Fenetre de confirmation" ] then type_fenetre="--question" elif [ "$type_fenetre" = "Fenetre d'avertissement" ] then type_fenetre="--warning" fi } function zenity_messages() { MENU=$(zenity --title "Que voulez-vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --checklist --column "Choix" --column "Action" --width=500 --height=400 \ TRUE "Choix du titre de la fenêtre" \ TRUE "Choix du texte à afficher dans la fenêtre" \ TRUE "Choix du type de message" \ FALSE "Largeur maximale de la fenêtre" \ FALSE "Hauteur maximale de la fenêtre" \ FALSE "Icône de la fenêtre") if [[ -n $(echo ${MENU} | grep "Choix du titre de la fenêtre") ]] then titre fi if [[ -n $(echo ${MENU} | grep "Choix du texte à afficher dans la fenêtre") ]] then texte fi if [[ -n $(echo ${MENU} | grep "Choix du type de message") ]] then type_fenetre fi if [[ -n $(echo ${MENU} | grep "Largeur maximale de la fenêtre") ]] then largeur_fenetre fi if [[ -n $(echo ${MENU} | grep "Hauteur maximale de la fenêtre") ]] then hauteur_fenetre fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo -e "zenity ${type_fenetre} ${titre} ${texte} ${largeur_fenetre} ${hauteur_fenetre} ${icone_fenetre}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } #################################################################### ## Système pour la fenêtre Zenity de sélection de fichier/dossier ## #################################################################### function zenity_selection_fichier() { MENU=$(zenity --title "Que voulez vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --checklist --column "Choix" --column "Action" --width=500 --height=400 \ TRUE "Choix du titre de la fenêtre" \ FALSE "Désigner le dossier de base" \ FALSE "Sélectionner plusieurs fichiers" \ FALSE "Choix du séparateur -- si utilisation du mode multi fichier" \ FALSE "Mode enregistrement de fichier" \ FALSE "Obligation de sélection de dossiers et non de fichiers" \ FALSE "Largeur maximale de la fenêtre" \ FALSE "Hauteur maximale de la fenêtre" \ FALSE "Icône de la fenêtre") if [[ -n $(echo ${MENU} | grep "Choix du titre de la fenêtre") ]] then titre fi if [[ -n $(echo ${MENU} | grep "Designer le dossier de base") ]] then emplacement_defaut="--filename=\"$(zenity --title 'Choix du dossier' --filename=/home/$USER/ --file-selection --directory --width=400)\"" fi if [[ -n $(echo ${MENU} | grep "Selectionner plusieurs fichiers") ]] then multi_fichier="--multiple" fi if [[ -n $(echo ${MENU} | grep "Choix du séparateur") ]] then separateur_fichier="--separator=\"$(zenity --title 'Choix du separateur' --text 'Choisissez le type de séparateur à utiliser pour delimiter les différentes adresses.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Mode enregistrement de fichier") ]] then sauvegarde="--save" fi if [[ -n $(echo ${MENU} | grep "Obligation de selection de dossiers et non de fichiers") ]] then dossier="--directory" fi if [[ -n $(echo ${MENU} | grep "Largeur maximale de la fenêtre") ]] then largeur_fenetre fi if [[ -n $(echo ${MENU} | grep "Hauteur maximale de la fenêtre") ]] then hauteur_fenetre fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo -e "zenity --file-selection ${titre} ${largeur_fenetre} ${hauteur_fenetre} ${icone_fenetre} ${dossier} ${sauvegarde} ${separateur_fichier} ${multi_fichier} ${emplacement_defaut}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } ######################################################## ## Système pour la fenêtre Zenity de boite de réponse ## ######################################################## function zenity_saisie() { MENU=$(zenity --title "Que voulez-vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --checklist --column "Choix" --column "Action" --width=500 --height=400 \ TRUE "Choix du titre de la fenêtre" \ TRUE "Choix du texte à afficher dans la fenêtre" \ FALSE "Pré-écrire une réponse dans la zone de texte" \ FALSE "Proposer une liste de réponses" \ FALSE "Remplacer les caracteres par des *" \ FALSE "Largeur maximale de la fenêtre" \ FALSE "Hauteur maximale de la fenêtre" \ FALSE "Icône de la fenêtre") if [[ -n $(echo ${MENU} | grep "Choix du titre de la fenêtre") ]] then titre fi if [[ -n $(echo ${MENU} | grep "Choix du texte à afficher dans la fenêtre") ]] then texte fi if [[ -n $(echo ${MENU} | grep "Pré-écrire une réponse dans la zone de texte") ]] then pre_texte="--entry-text=\"$(zenity --title 'Texte pré écrit' --text 'Indiquez le texte qui doit être pré écrit dans la barre de texte.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Remplacer les caracteres par des *") ]] then motdepasse="--hide-text" fi if [[ -n $(echo ${MENU} | grep "Proposer une liste de réponses") ]] then liste_reponse=$(zenity --title 'Liste de choix' --text 'Ecrivez les différents choix que vous souhaitez proposer. Il suffit d`éspacer les différentes réponses. Si votre réponse contient plusieurs mots, il suffit de mettre des " à l`expression. Si vous avez mis une réponse pré-écrite, il est inutil de la remettre ici.' --entry --width=400 --height=100) fi if [[ -n $(echo ${MENU} | grep "Largeur maximale de la fenêtre") ]] then largeur_fenetre fi if [[ -n $(echo ${MENU} | grep "Hauteur maximale de la fenêtre") ]] then hauteur_fenetre fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo -e "zenity --entry ${titre} ${texte} ${largeur_fenetre} ${hauteur_fenetre} ${icone_fenetre} ${pre_texte} ${motdepasse} ${liste_reponse}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } ########################################################### ## Système pour la fenêtre Zenity de barre de chargement ## ########################################################### function texte_et_pourcentage() { nb_etape=$(zenity --title "Nombre d'étape" --text "Indiquez le nombre d'étape à realiser pour remplir la barre." --entry --width=400 --height=100) etapes_pourcentages=$[100 / $nb_etape] zenity --question --title="Choisir les pourcentages ?" --text="Souhaitez vous choisir les différents pourcentages des ${nb_etape} étapes ? Si vous ne souhaitez pas choisir, les étapes iront de ${etapes_pourcentages}% en ${etapes_pourcentages}%." question=$(echo $?) for ((i=1; i<=$nb_etape; i++)); do if [[ "${question}" == "1" ]] then pourcentage=$(zenity --title "Pourcentage de l'étape $i" --text "Indiquez le pourcentage n°$i" --entry) elif [[ "${question}" == "0" ]] then pourcentage=$(($etapes_pourcentages * $i)) fi texte_pourcentage=$(zenity --title "Texte associé à ${pourcentage}%" --text "Indiquer le texte à afficher quand la barre arrive à ${pourcentage}%" --entry) if [[ -z ${texte_et_pourcentage} ]] then texte_et_pourcentage="echo \"# ${texte_pourcentage}\" ; sleep 1 echo \"${pourcentage}\" ; sleep 1" else texte_et_pourcentage="${texte_et_pourcentage} echo \"# ${texte_pourcentage}\" ; sleep 1 echo \"${pourcentage}\" ; sleep 1" fi echo "${pourcentage}% a pour texte : ${texte_pourcentage}" done } function zenity_barre_chargement() { MENU=$(zenity --title "Que voulez vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --checklist --column "Choix" --column "Action" --width=500 --height=400 \ TRUE "Choix du titre de la fenêtre" \ TRUE "Choix du texte à afficher dans la fenêtre" \ FALSE "Fermer automatiquement la fenêtre" \ FALSE "Créer une barre allant et venant sans pourcentage" \ FALSE "Nombres d'étapes avant d'atteindre 100%" \ FALSE "Pourcentage de départ" \ FALSE "Largeur maximale de la fenêtre" \ FALSE "Hauteur maximale de la fenêtre" \ FALSE "Icône de la fenêtre") if [[ -n $(echo ${MENU} | grep "Choix du titre de la fenêtre") ]] then titre fi if [[ -n $(echo ${MENU} | grep "Choix du texte à afficher dans la fenêtre") ]] then texte texte_et_pourcentage="sleep $(zenity --entry --title='Combien de secondes avant le lancement ?' --text='Veuillez choisir le temps pendant lequel le texte de la fenêtre doit être lisible avant que les textes de la barre n`apparraissent.') ${texte_et_pourcentage}" fi if [[ -n $(echo ${MENU} | grep "Fermer automatiquement la fenêtre") ]] then autoclose="--auto-close" fi if [[ -n $(echo ${MENU} | grep "Créer une barre allant et venant sans pourcentage") ]] then pulsate="--pulsate" fi if [[ -n $(echo ${MENU} | grep "Nombres d'étapes avant d'atteindre 100%") ]] then texte_et_pourcentage fi if [[ -n $(echo ${MENU} | grep "Pourcentage de départ") ]] then pourcentage_depart="--percentage=\"$(zenity --title 'Pourcentage de départ' --text 'Choisissez à combien de % la barre doit démarrer.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Largeur maximale de la fenêtre") ]] then largeur_fenetre fi if [[ -n $(echo ${MENU} | grep "Hauteur maximale de la fenêtre") ]] then hauteur_fenetre fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo "(${texte_et_pourcentage}) | zenity --progress ${titre} ${texte} ${largeur_fenetre} ${hauteur_fenetre} ${icone_fenetre} ${pourcentage_depart} ${pulsate} ${autoclose}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } ############################################# ## Système pour la fenêtre Zenity de liste ## ############################################# function nb_colonne() { nb_colonne=$(zenity --title "Nombre de colonne" --text "Indiquez le nombre de colonne à mettre. Dans le cas ou il y a des boutons/cases, ajoutez une colonne pour leur emplacement." --entry --width=400 --height=100) for ((i=1; i<=$nb_colonne; i++)); do colonne=$(zenity --title "Nom de la colonne n°$i" --text "Indiquez le nom que vous souhaitez attribuer à la colonne n°$i." --entry --width=400 --height=100) if [[ -z ${noms_colonnes} ]] then noms_colonnes="--column=\"${colonne}\"" else noms_colonnes="${noms_colonnes} --column=\"${colonne}\"" fi done } function nb_reponses() { nb_reponses=$(zenity --title "Nombre de reponses" --text "Indiquez le nombre de reponses à proposer. Cela équivaut au nombre de ligne que vous voulez proposer." --entry --width=400 --height=100) for ((i=1; i<=$nb_reponses; i++)); do if [[ "${type_fenetre}" == "--radiolist" ]] then reponse=$(zenity --title "Réponse n°$i" --text "Tapez le texte que doit prendre la ligne n°$i. Votre ligne se sépare en ${nb_colonne} parties (le nombre de colonne). Dans le cas d'une liste de bouton de choix, vous pouvez indiquer la réponse de base par un TRUE, pour les autres il faut mettre FALSE. Dans le cas de 3 colonnes, il faudrait une réponse du genre : FALSE \"Carottes\" \"Legumes\"." --entry --width=400 --height=100) elif [[ "${type_fenetre}" == "--checklist" ]] then reponse=$(zenity --title "Réponse n°$i" --text "Tapez le texte que doit prendre la ligne n°$i. Votre ligne se sépare en ${nb_colonne} parties (le nombre de colonne). Dans le cas d'une liste avec cases à cocher, vous pouvez indiquer les réponses de base par un TRUE, pour les autres il faut mettre FALSE. Dans le cas de 3 colonnes, il faudrait une réponse du genre : FALSE \"Carottes\" \"Legumes\"." --entry --width=400 --height=100) elif [[ "${type_fenetre}" == "--multiple" ]] then reponse=$(zenity --title "Réponse n°$i" --text "Tapez le texte que doit prendre la ligne n°$i. Votre ligne se sépare en ${nb_colonne} partie (le nombre de colonne). Dans le cas de 3 colonnes, il faudrait une réponse du genre : \"Carottes\" \"Legumes\" \"En soupe\"." --entry --width=400 --height=100) fi if [[ -z ${choix_reponses} ]] then choix_reponses="\\ ${reponse}" else choix_reponses="${choix_reponses} \\ ${reponse}" fi done } function zenity_listes() { MENU=$(zenity --title "Que voulez vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --checklist --column "Choix" --column "Action" --width=500 --height=400 \ TRUE "Choix du titre de la fenêtre" \ TRUE "Choix du texte à afficher dans la fenêtre" \ TRUE "Choix du type de liste à utiliser" \ TRUE "Nombres de colonnes" \ TRUE "Réponses à proposer" \ FALSE "Cacher des colonnes" \ FALSE "Choisir la colonne a retourner par la fenêtre" \ FALSE "Choix du séparateur de réponse -- liste avec cases à cocher" \ FALSE "Largeur maximale de la fenêtre" \ FALSE "Hauteur maximale de la fenêtre" \ FALSE "Icône de la fenêtre") if [[ -n $(echo ${MENU} | grep "Choix du titre de la fenêtre") ]] then titre fi if [[ -n $(echo ${MENU} | grep "Choix du texte à afficher dans la fenêtre") ]] then texte fi if [[ -n $(echo ${MENU} | grep "Choix du type de liste à utiliser") ]] then type_fenetre=$(zenity --title "Que voulez vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --column "" --column "Type de liste" --hide-column="1" --width=400 --height=325 \ "radiolist" "Liste avec bouton de selection" \ "checklist" "Liste avec cases à cocher" \ "" "Liste simple" \ "multiple" "Liste simple avec selection multiple") if [[ -n ${type_fenetre} ]] then type_fenetre="--${type_fenetre}" fi fi if [[ -n $(echo ${MENU} | grep "Nombres de colonnes") ]] then nb_colonne fi if [[ -n $(echo ${MENU} | grep "Réponses à proposer") ]] then nb_reponses fi if [[ -n $(echo ${MENU} | grep "Cacher des colonnes") ]] then colonne_fantome="--hide-column=\"$(zenity --title 'Colonne fantome' --text 'Indiquez le numéro de la colonne à cacher. Si vous en cachez plusieurs, séparez les chiffres d`une virgule.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Choisir la colonne a retourner par la fenêtre") ]] then colonne_retour="--print-column=\"$(zenity --title 'Colonne à retourner' --text 'L`interet de ce Système est de choisir quelle colonne sera renvoyée par la fenêtre zenity apres la réponse, c`est à dire ce que retourne : echo "$varible-de-la-fenetre". Indiquez le numéro de la colonne à retourner. Vous pouvez en retourner plusieurs en séparant les chiffres par des virgules. Vous pouvez également choisir ALL afin de retourner toutes les colonnes.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Choix du séparateur de réponse -- liste avec cases à cocher") ]] then separateur_fichier="--separator=\"$(zenity --title 'Choix du separateur' --text 'Choisissez le type de séparateur à utiliser pour delimiter les différentes adresses.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Largeur maximale de la fenêtre") ]] then largeur_fenetre fi if [[ -n $(echo ${MENU} | grep "Hauteur maximale de la fenêtre") ]] then hauteur_fenetre fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo -e "zenity --list ${type_fenetre} ${titre} ${texte} ${largeur_fenetre} ${hauteur_fenetre} ${icone_fenetre} ${noms_colonnes} ${colonne_fantome} ${colonne_retour} ${separateur_fichier} ${choix_reponses}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } #################################################### ## Système pour la fenêtre Zenity de notification ## #################################################### function zenity_notification() { MENU=$(zenity --title "Que voulez vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --checklist --column "Choix" --column "Action" --width=500 --height=400 \ TRUE "Choix du texte à afficher dans la fenêtre" \ TRUE "Icône de la fenêtre") if [[ -n $(echo ${MENU} | grep "Choix du texte à afficher dans la fenêtre") ]] then texte fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo -e "zenity --notification ${texte} ${icone_fenetre}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } ################################################# ## Système pour la fenêtre Zenity avec curseur ## ################################################# function zenity_curseur() { MENU=$(zenity --title "Que voulez vous modifier ?" --list --text "Merci de choisir les différentes options à modifier ou à appliquer." --checklist --column "Choix" --column "Action" --width=500 --height=400 \ TRUE "Choix du titre de la fenêtre" \ TRUE "Choix du texte à afficher dans la fenêtre" \ FALSE "Valeur d'incrémentation" \ FALSE "Valeur de base" \ FALSE "Valeur minimale" \ FALSE "Valeur maximale" \ FALSE "Largeur maximale de la fenêtre" \ FALSE "Hauteur maximale de la fenêtre" \ FALSE "Icône de la fenêtre") if [[ -n $(echo ${MENU} | grep "Choix du titre de la fenêtre") ]] then titre fi if [[ -n $(echo ${MENU} | grep "Choix du texte à afficher dans la fenêtre") ]] then texte fi if [[ -n $(echo ${MENU} | grep "Valeur d'incrémentation") ]] then valeur_evolution="--step=\"$(zenity --title 'Choix de l`incrémentation' --text 'Choisissez de combien en combien doit avancer le curseur. Ex : 2 = 2, 4, 6, 8... 3 = 3, 6, 9...' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Valeur de base") ]] then valeur_base="--value=\"$(zenity --title 'Choix du chiffre de base' --text 'Choisissez le chiffre sur lequel le curseur doit être de base.' --entry --width=400 --height=100)\"" fi if [[ -n $(echo ${MENU} | grep "Valeur minimale") ]] then valeur_minimale="--min-value=\"$(zenity --title 'Choix de la valeur minimale' --text 'Choisissez la valeur minimale pouvant être proposé par le curseur.' --entry --width=400 --height=100)\"" if [[ -z "${valeur_base}" ]] then valeur_base="--value=\"$(zenity --title 'Choix du chiffre de base' --text 'Vous avez détérminer une valeur minimale, il faut obligatoirement choisir le chiffre sur lequel le curseur doit être placé de base. Celui-ci doit impérativement être supérieur à votre valeur minimale.' --entry --width=400 --height=100)\"" fi verif_valeur_base=$(echo "${valeur_base}" | sed 's/--value=// ; s/"//g') verif_valeur_minimale=$(echo "${valeur_minimale}" | sed 's/--min-value=// ; s/"//g') if [[ ${verif_valeur_base} -lt ${verif_valeur_minimale} ]] then zenity --info --width=400 --height=100 --title "Erreur dans les chiffres" --text "Vous avez choisi une valeur minimale plus petite que la valeur de départ. Le code ne fonctionnera pas." fi fi if [[ -n $(echo ${MENU} | grep "Valeur maximale") ]] then valeur_maximale="--max-value=\"$(zenity --title 'Choix de la valeur maximale' --text 'Choisissez la valeur maximale pouvant être proposé par le curseur.' --entry --width=400 --height=100)\"" verif_valeur_evolution=$(echo "${valeur_evolution}" | sed 's/--step=// ; s/"//g') verif_valeur_maximale=$(echo "${valeur_maximale}" | sed 's/--max-value=// ; s/"//g') if [[ -n "${valeur_evolution}" && -n "${valeur_maximale}" && ${verif_valeur_maximale} -lt ${verif_valeur_evolution} ]] then zenity --info --width=400 --height=100 --title "Erreur dans les chiffres" --text "Vous avez selectionné une incrémentation supérieur à la limite haute, cela aura pour effet de passer directement à votre valeur maximale et non à votre valeur d'incrémentation." fi fi if [[ -n $(echo ${MENU} | grep "Largeur maximale de la fenêtre") ]] then largeur_fenetre fi if [[ -n $(echo ${MENU} | grep "Hauteur maximale de la fenêtre") ]] then hauteur_fenetre fi if [[ -n $(echo ${MENU} | grep "Icône de la fenêtre") ]] then icone_fenetre fi if [[ -n ${MENU} ]] then # Création du fichier texte qui servira à afficher le code final echo -e "zenity --scale ${titre} ${texte} ${largeur_fenetre} ${hauteur_fenetre} ${icone_fenetre} ${valeur_evolution} ${valeur_base} ${valeur_minimale} ${valeur_maximale}" | sed "s/ */ /g" > .fenetre_zenity affichage_code else menu fi } ############## ## Exemples ## ############## function exemples() { echo -e "Voici des codes d'exemples de fenêtres zenity. Pour tester ces codes, il vous suffit de les coller dans votre console. Voici d'abord des exemples sur comment mettre un peu de style à vos textes (balise \"text=\"), il est bien entendu possible de combiner les différents effets entre eux... ###### Le texte à copier débute juste après cette ligne ###### zenity --info --text \" essai de polices essai de polices essai de polices essai de polices essai de polices essai de polices red green blue yellow magenta white black gray lightblue lightgray style style style style style style style style style\" ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre avec une barre de chargement : ###### Le texte à copier débute juste après cette ligne ###### (sleep 2 echo \"# Nous attaquons les 20%\" ; sleep 1 echo \"20\" ; sleep 1 echo \"# Aller on continue jusqu'a 40%\" ; sleep 1 echo \"40\" ; sleep 1 echo \"# on est parti pour depasser la moitié\" ; sleep 1 echo \"60\" ; sleep 1 echo \"# Bientot fini...\" ; sleep 1 echo \"80\" ; sleep 1 echo \"# J'en vois le bout.\" ; sleep 1 echo \"100\" ; sleep 1) | zenity --progress --pulsate --title=\"Chargement\" --percentage \"5\" --text=\"On commence à 5%\" ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre avec un calendrier intégré : ###### Le texte à copier débute juste après cette ligne ###### zenity --calendar --title=\"Exemple avec calendrier\" --text=\"Veuillez indiquer votre date de naissance. Merci.\" --day=\"12\" --month=\"10\" --year=\"1984\" --date-format=\"%x\" ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre avec un curseur de séléction : ###### Le texte à copier débute juste après cette ligne ###### zenity --scale --title=\"Température actuelle\" --text=\"Veuillez indiquer la température actuelle de votre piece.\" --step=\"2\" --value=\"15\" --min-value=\"-10\" --max-value=\"40\" ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre de lecture de fichier texte : ###### Le texte à copier débute juste après cette ligne ###### zenity --text-info --title=\"Voici le code de ce script\" --filename=\"${emplacement_script}/zenity_generator.sh\" --width=\"500\" --height=\"400\" ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre de QCM : ###### Le texte à copier débute juste après cette ligne ###### zenity --list --checklist --title=\"Perso préféré\" --text=\"Veuillez indiquer le personnage que vous préférez parmis cette liste. Vous pouvez choisir plusieurs reponses.\" --column=\"Oui\" --column=\"Nom\" --column=\"Age\" --separator=\"@\" --height=\"300\" \\\ FALSE \"Bender\" \"3ans\" \\\ TRUE \"Zoidberg\" \"Mort\" \\\ FALSE \"Fry\" \"32ans\" \\\ TRUE \"Leela\" \"Inconnu\" \\\ False \"Hermes\" \"On s'en fiche\" ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre demandant une confirmation : ###### Le texte à copier débute juste après cette ligne ###### zenity --question --title=\"Etes vous sûr de vous ?\" --text=\"etes vous totalement certain d'etre sur de ce que vous voulez faire ? Merci de confirmer. M.Windows Vista.\" ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre de notification : Pour lancer une commande au clic sur la notification, il faut ajouter && suivi de votre commande. ###### Le texte à copier débute juste après cette ligne ###### zenity --notification --text=\"Veuillez mettre a jour le script.\" && /usr/bin/adept_updater ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre de saisie de texte : ###### Le texte à copier débute juste après cette ligne ###### zenity --entry --title=\"Ville préférée\" --text=\"Merci d'indiquer la ville qui vous tient à coeur afin de faire un sondage mondial.\" --entry-text=\"Caen\" ###### Le texte à copier ce termine juste avant cette ligne ###### Code d'une fenetre de séléction de fichier : ###### Le texte à copier débute juste après cette ligne ###### zenity --file-selection --title=\"Indiquer votre dossier personnel\" --directory --filename=\"~/\" ###### Le texte à copier ce termine juste avant cette ligne ###### " > .exemples zenity --text-info --title="Exemples de codes :" --width="760" --height="550" --filename=".exemples" rm .exemples } ######################## ## MENU PRINCIPAL !!! ## ######################## function menu() { MENU=$(zenity --title "Quel type de fenêtre voulez-vous créer ?" --list --text "Séléctionnez le type de fenêtre zenity que vous souhaitez créer parmis la liste suivante." --column="reponse n°" --hide-column="1" --column "Type de boite" --column "Aide" --width=700 --height=570 \ "01" "Barre de chargement" " Barre de progression avec textes et pourcentages." \ "02" "Calendrier" " Choix d'une date sur un calendrier." \ "03" "Curseur de placement" " Choix d'un chiffre en utilisant un curseur amovible." \ "04" "Messages et confirmations" " Boite de texte indiquant une erreur, une information, une alerte ou une confirmation." \ "05" "Notification" " Affiche une Icône et du texte dans la zone de notification." \ "06" "Séléction de fichier/dossier " " Choix d'un fichier ou d'un emplacement." \ "07" "Saisie de texte" " Permet la saisie de caractères." \ "08" "Affichage de fichier texte" " Affiche le contenu d'un fichier texte." \ "09" "Listes" " Boite du genre question à choix unique ou multiple." \ "10" "Exemples de codes" " Exemples de fenêtres et explications sur les styles applicable aux textes." \ "11" "Réinitialiser l'utilisation du fichier log" " Repose la question de l'utilisation d'un fichier log de save") if [[ "$?" == "0" && -z ${MENU} ]] then menu elif [[ -n $(echo ${MENU} | grep "01") ]] then zenity_barre_chargement elif [[ -n $(echo ${MENU} | grep "02") ]] then zenity_calendrier elif [[ -n $(echo ${MENU} | grep "03") ]] then zenity_curseur elif [[ -n $(echo ${MENU} | grep "04") ]] then zenity_messages elif [[ -n $(echo ${MENU} | grep "05") ]] then zenity_notification elif [[ -n $(echo ${MENU} | grep "06") ]] then zenity_selection_fichier elif [[ -n $(echo ${MENU} | grep "07") ]] then zenity_saisie elif [[ -n $(echo ${MENU} | grep "08") ]] then zenity_fichier_texte elif [[ -n $(echo ${MENU} | grep "09") ]] then zenity_listes elif [[ -n $(echo ${MENU} | grep "10") ]] then exemples menu elif [[ -n $(echo ${MENU} | grep "11") ]] then emplacement_script sed -i "/^choix_log=.*/d" "${emplacement_script}/zenity_generator.sh" menu fi } utilisation_log menu