Créer des boîtes de dialogue personnalisées en AppleScript avec l’extension Dialog Toolkit Plus
SOMMAIRE
I Introduction
II Prérequis
III Exemple de code
IV Conclusion
I Introduction
Dans ce tutoriel, vous allez voir comment réaliser des boîtes de dialogue personnalisées. En effet par défaut Applescript ne permet de créer des boîtes de dialogue simple avec un seul type d’entréé. Cela est très limité pour créer des formulaires avec saisies multiples. Heureusement l’extension Dialog Toolkit Plus va nous aider à contourner ce problème.
II Prérequis
Vous pouvez télécharger le fichier zip à cette adresse : Dialog Toolkit Plus v1.1.3 130
Une fois celui-ci téléchargé, dézippez-le et dirigez-vous dans le dossier « ~/Library » en cliquant sur le menu « Aller » du Finder et en sélectionnant le sous-menu « Aller au dossier… » :

Puis tapez « ~/Library » :

Recherchez si un dossier nommé « Script Libraries ». Si celui-ci n’existe pas créez-le. Ensuite collez le fichier nommé « Dialog Toolkit Plus.scptd » dans celui-ci.

Vous pouvez ensuite avoir des informations plus détaillées sur l’utilisation de cette bibliothèque vous pouvez ouvrir le dictionnaire associé, en sélectionnant « Fichier » => « Ouvrir le Dictionnaire… » et en sélectionnant « Dialog Toolkit Plus.scptd »

Vous êtes prêts à utiliser ce module.
III Exemple de code
Pour l’appeler dans votre script il va falloir ajouter cette ligne au tout début :
use script « Dialog Toolkit Plus” version « 1.1.0 »
Avec ce module vous allez pouvoir créer des boîtes de dialogue complexes avec des composants comme :
- Des labels ;
- Des combobox ;
- Des boîtes de texte ;
- Etc…
Je vous invite à éplucher le vocabulaire associé pour voir les différentes possibilités qui s’offrent à vous.
Nous allons voir un premier exemple vous permettant de créer une fenêtre avec les différents types de label.
Dans un premier temps nous devons importer les différentes bibliothèques de fonctions qui vont nous permettre d’écrire notre script :
use AppleScript version "2.4"
use scripting additions
use script "Dialog Toolkit Plus" version "1.1.0"
Ensuite on définit une largeur de fenêtre :
set accViewWidth to 500
On crée nos boutons en créant un ensemble de boutons et en appelant la classe « btns »:
set {theButtons, minWidth} to create buttons {"Cancel", "Ok", "Peut-être"} default button 1 given «class btns»:2
Si la longueur des boutons ajoutés à la fenêtre est supérieure à celle précédemment définie alors c’est celle-ci qui est prise en compte.
if minWidth > accViewWidth then set accViewWidth to minWidth
Nous définissons ensuite un nouveau composant field (textbox) qui a pour nom monLabelField et qui sera placé en haut de la fenêtre (theTop). Ce type de composant dispose d’une boîte de texte à l’intérieur duquel on peut définir une légende :
set {monLabelField, theTop} to create field "" placeholder text "Votre nom: " bottom 0 field width accViewWidt
On va ensuite empaqueter tous les composants créer dans une variable contenant tous les composants que l’on aura défini dans les précédentes lignes pour le moment il n’y en a qu’un :
set allControls to {monLabelField}
Ensuite on crée et affiche notre objet fenêtre en disposant auparavant tous les contrôles utilisateur créés :
set {buttonName, controlsResult} to display enhanced window "Ma fenêtre" acc view width accViewWidth acc view height theTop acc view controls allControls buttons theButtons active field monLabelField with align cancel button
Nous venons donc de créer un script minimal qui nous permet d’afficher quelques contrôles utilisateurs et quelques boutons pour interagir avec le script.
Voici le script actuel :
use AppleScript version "2.4"
use scripting additions
use script "Dialog Toolkit Plus" version "1.1.0"
set accViewWidth to 500
set {theButtons, minWidth} to create buttons {"Cancel", "Ok", "Peut-être"} default button 1 given «class btns»:2
if minWidth > accViewWidth then set accViewWidth to minWidth
set {monLabelField, theTop} to create field "Entrez votre nom: " placeholder text "Votre nom: " bottom 0 field width accViewWidth
set allControls to {monLabelField}
set {buttonName, controlsResult} to display enhanced window "Ma fenêtre" acc view width accViewWidth acc view height theTop acc view controls allControls buttons theButtons active field monLabelField with align cancel button
Nous allons maintenant parcourir un peu plus le dictionnaire pour rajouter quelques composants à notre script.
Il faut bien comprendre qu’en utilisant cette bibliothèque de scripts vous disposez vos composants visuels en partant du bas de la fenêtre vers le haut de la fenêtre.
Dans l’exemple suivant nous allons créer un composant de type «top labeled field ». Ce type de composant ressemble au précédent.
set {firstnameField, firstnameLabel, theTop} to create top labeled field "Entrez votre prénom: " placeholder text "Votre prénom" bottom (theTop + 8) field width accViewWidth label text "Votre prénom"
Pour le placer au dessus du précédent composant on reprend le contenu de la variable theTop et on lui ajoute 8 pixels de plus. A noter que vous n’avez pas à donner une valeur pour la propriété placeholder et label text. Une seule suffit. Je les ai affecté pour l’exemple seulement.
Bien entendu il faut maintenant ajouter le nouveau composant à notre variable liste allControls qui devient :
set allControls to {lastnameField, firstnameField, identityLabel}
Voici le code complet résultant :
use AppleScript version "2.4"
use scripting additions
use script "Dialog Toolkit Plus" version "1.1.0"
set accViewWidth to 500
set {theButtons, minWidth} to create buttons {"Cancel", "Ok", "Peut-être"} default button 1 given «class btns»:2
if minWidth > accViewWidth then set accViewWidth to minWidth
set {lastnameField, theTop} to create field "Entrez votre nom: " placeholder text "Votre nom: " bottom 0 field width accViewWidth
set {firstnameField, firstnameLabel, theTop} to create top labeled field "Entrez votre prénom: " placeholder text "Votre prénom" bottom (theTop + 8) field width accViewWidth label text "Votre prénom"
set {identityLabel, theTop} to create label "Votre identité: " bottom (theTop) max width accViewWidth
set allControls to {lastnameField, firstnameField, identityLabel}
set {buttonName, controlsResult} to display enhanced window "Ma fenêtre" acc view width accViewWidth acc view height theTop acc view controls allControls buttons theButtons active field firstnameField with align cancel button
Nous allons voir maintenant un dernier exemple pour voir comment récupérer des valeurs saisies dans un des composants de notre fenêtre. Pour ce faire nous allons partir de notre dernier exemple précédent et on va interagir avec le clic de bouton «Ok ».
Pour récupérer une valeur saisie dans un composant on utilise une ligne de commande comme celle-ci :
set lastname to item 1 of controlsResult
On utilise le numéro de composant dans le sens de création qui est je le rappelle de bas en haut :
- Item 0 correspond au label « identityLabel »
- Item 1 correspond au champ « lastname »
- Item 2 correspond au champ « firstname »
Dans notre exemple on teste si la valeur de la variable ButttonName est « Ok ». Si c’est le cas on récupère les valeurs des champs saisies et on affiche un message de bienenue, sinon on affiche un « Au revoir » :
-- Si le bouton Ok est cliqué
if buttonName = "Ok" then
set lastname to item 1 of controlsResult
set firstname to item 2 of controlsResult
set theString to "Hello " & lastname & " " & firstname
display dialog theString
-- Si on clique sur le bouton Cancel ou Peut-être
else
display dialog "Au revoir!"
end if
Voici le code complet correspondant :
use AppleScript version "2.4"
use scripting additions
use script "Dialog Toolkit Plus" version "1.1.0"
set accViewWidth to 500
set {theButtons, minWidth} to create buttons {"Cancel", "Ok", "Peut-être"} default button 2 given «class btns»:2
if minWidth > accViewWidth then set accViewWidth to minWidth
set {lastnameField, theTop} to create field "Entrez votre nom: " placeholder text "Votre nom: " bottom 0 field width accViewWidth
set {firstnameField, firstnameLabel, theTop} to create top labeled field "Entrez votre prénom: " placeholder text "Votre prénom" bottom (theTop + 8) field width accViewWidth label text "Votre prénom"
set {identityLabel, theTop} to create label "Votre identité: " bottom (theTop) max width accViewWidth
set allControls to {lastnameField, firstnameField, identityLabel}
set {buttonName, controlsResult} to display enhanced window "Ma fenêtre" acc view width accViewWidth acc view height theTop acc view controls allControls buttons theButtons active field firstnameField with align cancel button
-- Si le bouton Ok est cliqué
if buttonName = "Ok" then
set lastname to item 1 of controlsResult
set firstname to item 2 of controlsResult
set theString to "Hello " & lastname & " " & firstname
display dialog theString
-- Si on clique sur le bouton Cancel ou Peut-être
else
display dialog "Au revoir!"
end if
IV Conclusion
Dans ce document vous avez appris comment installer le module Dialog Toolkit Plus pour réaliser des interfaces graphiques plus sophistiquées avec AppleScript. Nous avons vu que nous pouvions réaliser des interfaces graphiques plus évoluées permettant d’interagir plus efficacement avec l’utilisateuir. Nous verrons,.dans un autre article, une autre utilisation de ce module.