#!/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