Date de mise à jour : 13 novembre 2016

Comment automatiser l'interface Tk d'Aud'ACE ?

la commande à distance d'Aud'ACE peut se faire via des programmes tels que VNC ou Teamviewer : l'opérateur agit directement sur l'interface comme s'il était devant le PC en utilisant son clavier et sa souris sans avoir à connaître le langage tcltk.
Dans le cas d'une connexion internet via un serveur, sans accès direct, l'utilisateur actionne des macrocommandes. Comment rédiger ces macrocommandes ? Cette aide apporte quelques éléments de réponse.

Les scripts sont une suite ordonnée de commandes placées dans des procédures tcl (les proc). Il en va de même pour l'exécution des commandes Tk permettant de gérer l'interface graphique entre l'utilisateur et Aud'ACE : il est donc possible d'écrire des scripts simulant des actions de l'utilisateur pour automatiser des séquences spécifiques, répétitives, pour gagner du temps et éviter des oublis, des erreurs.

Deux actions sont traitées ci-après :

1. Sélectionner une rubrique du menu d'Aud'ACE

Le menu comporte deux types de commandes très différentes :

1.1 Appeler un outil permanent du menu

Certains outils du menu sont permanents et ne peuvent être désactivés. L'appel d'un de ces outils se fait comme suit :

$menuPath invoke $menuIndex
Appel des fonctions du menu
nom du menu
principal
Item du
menu
variable
mName
variable
mLabel
Exemple de commande
FichiersOuvrirfilecharger
catch {
set menuName "$caption(audace,menu,$mName)" ;
set menuLabel "$caption(audace,menu,$mLabel)" ;
$menuPath invoke $menuIndex
} msg

1.2 Gérer un outil

Les outils se présentent soient sous forme de panel (panneau latéral gauche) ou de window (fenêtre) associé à une visu (son numéro, 1 pour la visu principale).
Le nom de l'outil est son namespace.
Voici quelques commandes, intégrées dans ::confVisu, permettant de les actionner ou de connaître leur état :

Information sur les outils d'une visu
NatureCommande
Retourne la liste des outils actifs de la visu
set tools [::confVisu::getToolList $visuNo]
# ::collector ::tlscp
Retourne la liste des outils visibles de la visu
set tools [::confVisu::getVisibleToolList $visuNo]
# ::collector ::tlscp
Retourne la liste des outils occupés dans la visu
set tools [::confVisu::getBusyToolList $visuNo]
(liste vide)

Information et Action sur un outil particulier
Information et ActionCommande
Retourne le N° de la visu contenant un outil ou rien
set visu [::confVisu::getToolVisuNo $toolName]
# 1
Indique si l'outil est prêt (1 = OK | 0 pas OK)
set state [::confVisu::isReady $visuNo $toolName]
# 1
Indique si l'outil est occupé (1 = oui | 0 non)
set state [::confVisu::isBusy $visuNo $toolName]
# 0
Ouvre un outil et retourne son nom
::confVisu::selectTool $visuNo $toolName
# $toolName
Ouvre un panneau dans la visu principale ou dans une nouvelle visu
s'il en existe un dans la visu principale et retourne son N°
set visu [::confVisu::getToolVisuNoOrOpenToolNewVisuNo $toolName]
# 2
Masque le panneau courant
::confVisu::hidePanelTool $visuNo
(ne retourne rien)
Ferme un outil
::confVisu::stopTool $visuNo $toolName
(ne retourne rien)

2. Renseigner et agir sur un widget

Ouvrir et fermer une fenêtre Tk est un minimum. Mais comment faire pour simuler une saisie ? la sélection d'une combobox ou celle d'un radiobutton ? le clic sur un bouton ?
Deux solutions sont praticables :

2.1 Simuler les actions sur les widgets

Les commandes Tk associées aux widgets permettent d'agir sur eux. Le tableau ci-dessous résume quelques commandes Tk disponibles pour les widgets :

Commandes actionnant les widgets
WidgetActionCommande
buttonactionner le bouton$buttonPath invoke
checkbuttonsélectionner un checkbutton$buttonPath select
checkbuttondésélectionner un checkbutton$buttonPath deselect
checkbuttonmodifier l'état d'un checkbutton$buttonPath toggle
radiobuttondésélectionner un radiobutton$buttonPath select
entrysaisir un texte (à l'indice 0)$entryPath insert 0 $value
comboboxsélectionner l'argument à l'index$comboPath setvalue @$index
notebooksélectionner un onglet de nom "$name"$notebookPath raise "$name"

Comme le montre le tableau il faut toujours identifier le chemin (xxxPath) du widget donc il faut plonger dans le code du script et examiner de près les commandes spécifiques du widget concerné.

2.2 Appeler les processus

Une autre solution consiste à repérer la proc lancée par un bouton et à l'appeler directement avec tous les (bons) paramètres. Dans certains cas il faut au préalable spécifier les valeurs des variables utilisées en interne dans la proc.

3. Pour avancer

Il est prudent d'examiner les conséquences d'une erreur éventuelle dans un paramètre et de mettre en place des messages d'erreur exploitables ; un essai est toujours indispensable.

Si les commandes d'entré sont toujours des commandes TclTk ; les informations retournées doivent être au format exploité par le serveur (tcl, json, etc.).