Creation de nouvelles applications graphiques
Pour creer une nouvelle application Xtemplate, vous devez editer (et renommer) les fichiers template XTemplate (lancement de la nouvelle appli) et XTemplate.cfg (configuration des menus, barre d'icones, etc).
Attention, les deux fichiers doivent porter le meme nom a l'extension pres.
Liste des macros tcl/tk dosponibles dans IFU_X11_libs pour la creation d'objets graphiques :
Dans toute la suite, name represente le nom de la fenetre toplevel. C'est a dire qu'on a fait preceder les appels de macros, des trois lignes suivantes :
toplevel $name
wm title $name "Template"
wm iconname $name "Template"
Le tableau de parametre est nomme TEMPLATE. Il est global a l'application. Les macros creant des fenetres retournent toujours le path de la fenetre creee.
N.B. Les fonctions sont presentees dans leur ordre d'utilisation le plus probable.
STD_buttons_box
cree la barre de boutons standard. Par exemple :
STD_buttons_box $name TEMPLATE "Template_Cmd_accept $name" "template.html"
ou
- Template_Cmd_accept est le nom de la commande a executer lorsque l'utilisateur valide ses saisies,
- template.html est le nom du fichier contenant l'aide en ligne pour la commande, et place sous user/help/public_html/reduc sous l'arborescence du projet concerne. On peut utiliser l'ecriture "template.html#syntax" par exemple pour designer une ancre dans un fichier html.
STD_main_param_box
cree la fenetre principale dans laquelle vont etre loges les differents niveaux de parametres (standard, optionels, etc). C'est la fenetre complementaire de celle des boutons.
set param [STD_main_param_box $name]
STD_user_param_box, STD_standard_param_box, STD_optional_param_box, STD_debug_param_box
Ce sont les fonctions qui generent les fenetres de type tixlabelFrame (soit un cadre fin portant un libelle en haut a gauche, a cheval sur le trait de contour) contenant la description des parametres.
- set f [STD_standard_param_box $param]
cree la fenetre "Standard parameters",
- set f [STD_optional_param_box $param]
cree la fenetre "Optional parameters",
- set f [STD_debug_param_box $param]
cree la fenetre "Debug parameters",
- set f [STD_user_param_box $param window "label" right]
cree une fenetre nomme window, avec le label label, calee a droite de l'ecran. Les autres valeurs possibles de 'calage' sont top, bottom, et left.
STD_param_array
cree une succession de champs pour la saisie de parametres, selon le principe suivant :
STD_param_array $f orientation [ list \
["description d'un champ parametre"] \
["description d'un champ parametre"] \
...
]
orientation donne ici le sens d'alignement des parametres entre eux, et admet deux valeurs : 'vertical' signifie en colonne, 'horizontal', en ligne.
description d'un champ de parametre
elle differe selon le type de parametre. On choisit de nommer wn, le widget a creer, et TEMPLATE($name,var) la variable associee qui contiendra la valeur saisie par l'utilisateur ou la valeur par defaut.
Les differents types de champs sont :
- ImgFileEntry, TableFileEntry ou CubeFileEntry, MaxFileEntry
designent un ensemble 'libelle + zone de saisie + bouton de choix de fichier', dans le cas d'une image, d'une table, ou d'un cube. On les utilise comme suit :
syntaxe : [list ImgFileEntry wn "label" TEMPLATE($name,var) ]
- FileEntry
designent un ensemble 'libelle + zone de saisie + bouton de choix de fichier', dans tous les autres cas:
syntaxe : [list FileEntry wn "label" TEMPLATE($name,var) longueur_entree]
- LabelEntry
designe un ensemble 'label + zone de saisie'
syntaxe : [list LabelEntry wn "label " TEMPLATE($name,var) longueur_entree]
- Checkbutton
designe un ensemble 'label + checkbutton'
syntaxe : [list CheckButton wn "label" TEMPLATE($name,var)]
- RadioButton
designe un ensemble 'label + radiobutton'
syntaxe : [list RadioButton wn "label" TEMPLATE($name,var) anchor value]
- SelectButtons
designe une liste de boutons d'options avec la possibilite de combiner les selections (selection simple ou multiples)
Pour executer une commande selon le bouton clique, utiliser trave variable, soit :
trace variable TEMPLATE($name,var) w "commande a executer quand la valeur change"
S'il s'agit de switcher entre un mode 'enable' et 'disable' pour un ensemble de widget, utiliser la macro suivante :
EnableStatus TRUNCATE($name,var) 0 [list $r.wn1 $r.wn2 ...]
ou r designe le path de la fenetre (retourne par la macro qui l'a creee). La valeur zero indique que les widgets listes ici seront 'enable', donc actifs si la valeur de TRUNCATE($name,var) est nulle. Il seront inactives chaque fois que cette variable passe a 1. La valeur 0 peut bien sur etre remplacee par nimporte quelle valeur de votre choix.
Pour plus de clarte dans la lecture du code, la macro DisableStatus, agit de la meme facon, mais selon la logique inverse.
- Control
designe un ensemble 'label + zone de saisie + 2 fleches pour increment/decrement'
syntaxe : [list Control wn "label " true minval maxval incr TEMPLATE($name,var) longueur_entree]
minval et maxval sont les bornes autorisees pour la valeur a saisir, et incr, le pas d'increment lorsque l'utilisateur actionne les fleches.
- Label
simple label ou texte
syntaxe : [list Label wn "label "]
- Button
simple bouton
syntaxe : [list Button wn "label" commande_a_executer]
- OptionMenu
affichage d'un menu offrant differentes propositions de valeur (Une seule valeur selectionnee)
syntaxe : [list OptionMenu wn "label " TEMPLATE($name,var) \
{"label value1" "value1" "label value2" "value2" "label value3" "value3" .... }]
STD_option_list
designe une double fenetre, dont la premiere est une liste de valeurs et la seconde, une zone ou les parametres affiches change en fonction de la selection dans la liste.
syntaxe : STD_option_list $f TEMPLATE($name,var) height { liste des options }
La liste d'option est compose de duplet de la forme {wn "label"}. Par exple :
{{wn1 label1} {wn2 label2} {wn3 label3} ....}
Pour remplir les zones de parametres :
soit fl le path retourne par la fonction STD_option_list (set fl [STD_option_list ....]) , alors
set w [$fl subwiget wn1]
STD_param_array $w vertical [ list \
...
]
remplit la zone d'affichage correspondante. A faire pour chaque wni.
Liste des macros tcl/tk pour la manipulation de graphiques (plot & display) :
------------------------------------------------------------------------
# Function name : Go_DisplayDC
#
# Description : Create an image display (standalone)
#
# Input :
#
# window, name of the window to create
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : Go_DisplayGC
#
# Description : Create a graphic display (standalone)
#
# Input :
#
# window, name of the window to create
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Close
#
# Description : Graphic display close
#
# Input :
#
# window, name of the window to close
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : Create_Graph
#
# Description : Create a new plot widget
#
# Input :
#
# g, name of the widget to create
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Plot_table_label
#
# Description : Launch plot_table and waiting output for table plot with label column
#
# Input :
#
# window, name of the graph's parent
# mode, plot or over
# filename, name of the table to plot
# legende, legend to display for this plot
# colx, label of the table column for X absciss
# coly, label of the table column for Y absciss
# colz, label of the table column for text display instead of symbol
# args, color, symbol ... etc ... for the plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Plot_table
#
# Description : Launch plot_table and waiting output for table plot
#
# Input :
#
# window, name of the graph's parent
# mode, plot or over
# filename, name of the table to plot
# legende, legend to display for this plot
# colx, label of the table column for X absciss
# coly, label of the table column for Y absciss
# args, color, symbol ... etc ... for the plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Plot_datacube
#
# Description : Launch plot_datacube and waiting output for spectrum plot
#
# Input :
#
# window, name of the graph's parent
# mode, plot or over
# filename, name of the datacube to plot
# lens, lens number
# flag, flag bad pixel
# datatype, data type (1=spectrum, 2=noise, 3=S/N)
# legende, legend to display for this plot
# args, color, symbol ... etc ... for the plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Plot_spectrum
#
# Description : Launch plot_spec and waiting output for spectrum plot
#
# Input :
#
# window, name of the graph's parent
# mode, plot or over
# filename, name of the spectrum to plot
# legende, legend to display for this plot
# args, color, symbol ... etc ... for the plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_OverPlot_line
#
# Description : Launch plot_line and waiting output for line overplot
#
# Input :
#
# window, name of the graph's parent
# filename, name of the spectrum to plot
# legende, legend to display for this plot
# args, color, symbol ... etc ... for the plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Plot_max
#
# Description : Launch plot_max and waiting output for Max plot
#
# Input :
#
# window, name of the graph's parent
# mode, plot or over
# filename, name of the spectrum to plot
# params, args for plot_max
# legende, legend to display for this plot
# args, color, symbol ... etc ... for the plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Plot_mask
#
# Description : Launch plot_optics and waiting output for Mask plot
#
# Input :
#
# window, name of the graph's parent
# mode, plot or over
# filename, name of the spectrum to plot
# params, args for plot_optics
# legende, legend to display for this plot
# args, color, symbol ... etc ... for the plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_title
#
# Description : Set the graph title
#
# Input :
#
# w, Graph root widget path
# title, title to set for this graph
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_xaxis
#
# Description : Configure Xaxis
#
# Input :
#
# w, Graph root widget path
# args, list of config args
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_yaxis
#
# Description : Configure Yaxis
#
# Input :
#
# w, Graph root widget path
# args, list of config args
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Print
#
# Description : Print current plot to PS printer
#
# Input :
#
# w, Graph root widget path
#
# Output : nothing
------------------------------------------------------------------------
# Function name : Add_maker
#
# Description : User want to display a text somewhere in the graphic
#
# Input :
#
# g, path of the graph widget
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : Create_marker
#
# Description : Display marker on the graphic
#
# Input :
#
# g, path of the graph widget
# id, identification of current marker
# coord, list of x and y coordinate on the graph
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : Line_Select
#
# Description : Select a line (or unselect) in edit reference table
#
# Input :
#
# g, path of the graph widget
# x, wavelength of the selected line
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayDC_Plot_Image
#
# Description : Open a new RTD display and load the specified image
#
# Input :
#
# filename, name of the image to plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayDC_Explorer
#
# Description : Launch 3D Explorer
#
# Input :
#
# filename, name of the image to plot
# cube, name of the datacube to plot
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : Graph_destroy
#
# Description : Destroy graph window
#
# Input :
#
# window, name of the window to destroy
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayDC_exist
#
# Description : Check if a display (Rtd or 3Dexplorer) is currently running
#
# Input :
#
# appli, name of the display to test (Rtd or 3Dexplorer)
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayDC_wait_the_end
#
# Description : Wait until the end of the current plot
#
# Input :
#
# g, current graph widget
#
# Output : nothing
#
------------------------------------------------------------------------
# Function name : DisplayGC_Plot_function
#
# Description : Launch plot_function and waiting output for function plot
#
# Input :
#
# window, name of the graph's parent
# curve, name of the curve
# mode, plot or over
# function, name of the function
# coefs, parameters of the function
# bounds, bounds between which to plot
# legende, legend to display for this plot
# args, color, symbol ... etc ... for the plot
#
# Output : nothing
#
------------------------------------------------------------------------
Arlette.Pecontal@obs.univ-lyon1.fr - 31/03/2003