Le but de ce document est de présenter les différents
choix efféctués pendant le développement de l'application
GRED.Nous présenterons successivement les variables globales
du système, les choix en matiéres d'algorithmique et de
représentation des données.
Les variables Globales
Le tableau globale gred
En premier lieu, le tableau gred contient des informations
générales à tout l'éditeur de grafcet.
- gred(date) Variable contenant la date inutilisé dans la suite !
- gred(exe) Exécutable gred.
- gred(setup,localfilerc) contient le fichier de ressource de
gred.
- gred(setup,userfilerc) contient le fichier de ressource utilisateur de gred.
- gred(setup) contient le repértoire de librairie de gred
- gred(setup,userlibs) contient le repértoire de librairie de
l'utilisateur.
- gred(grafcets) Liste des grafcets en cours d'édition.
- gred(grafcetUID) Identificateur unique de grafcet/window.
- gred(uid) Identification unique utilisable pour la creation des
widgets.
- gred(initialised) Vaut 1 quand l'initialisation de gred est terminé.
- gred(grafcetCourant) Gafcet en cours d'édition.
- gred(untitled) Nom de fichier par défaut.
- gred(etape,nameIndex) Nom à partir duquel le nom des
étapes sera détérminé. Si ce champs vaut, par exemple, "T3W", toutes
les transirtions auront pour nom: "TxW" ou x est un entier supérieur ou
égales à 3.
- gred(transition,nameIndex) Nom à partir duquel le nom des
transitions sera détérminé.
- gred(etape,options) Liste des champs associés à une étape.
- gred(etape,type) Liste des type associé à une étape. A valeur dans la
liste {Normal, Initial, Hyper, Macro,
MacroDebut, MacroFin}.
- gred(etape,name) Nom associé aux types définies précédement. A valeur
dans {"Etape normale", "Etape initiale",
"Hyper étape", "Macro étape", "Début de macro étape",
"Fin de macro étape"}
- gred(etape,state) Liste des état d'une étape. A valeur dans:
{active, inactive}.
- gred(transition,options) Liste des champs associés à une transition.
A valeur dans {name, receptivity, comment}.
Les préférences utilisateurs:
- gred(etape,border)
- gred(userMail) Nom de l'utilisateur.
- gred(grid) Taille de grille.
- gred(admin) Variable positionnée à "Vrai" si l'utilisateur est un
administrateur, vaut "faux" sinon.
- gred(fontSize) Taille du texte dans le canvas.
- gred(sequence,yStep) Pas entre étape/transition pour la création
de séquence.
- gred(grid,color) Couleur de la grille.
- gred(defaultSourceObjectType) Type d'objet source à créer par
défaut.
- gred(etape,height) Largeur d'une étape.
- gred(look,etapeBackground) Couleur du fond d'étape.
- gred(transition,width) Largeur d'une transition.
- gred(transition,showName) Afficher le nom de la transition oui/non.
- gred(transition,height) Hauteur d'une transition.
- gred(transition,link) Longueur mini du lien coté d'une transition.
- gred(doubleLine,height) Distance entre les doubles lignes d'une
transition.
- gred(link,width) Epaisseur des liens.
- gred(link,handlesize) Taille des poignées d'édition des liens.
- gred(doubleLine,xOffset) Longueur minimale du déplacement latéral
d'une double ligne.
- gred(doubleLine,yOffset) Longueur minimale du segment de droite
entre une transiton et sa double ligne.
- gred(look,transitionBackground) Couleur du fond de transition.
- gred(look,canvasBackground) Couleur du fond de la fenêtre
principale.
- gred(virtualColor) Couleur des objets virtuels.
- gred(drag,limit) Limite de déclenchement du mode Drag.
- gred(sel,color) Couleur de la sélection.
- gred(selectMode) Mode de capture de la sélection.
- gred(Meta) Définition de la touche Meta.
- gred(shift) Définition de la touche Shift.
- gred(arrowScroll) Mode de déplacement à l'aide des flèches.
Le tableau globale gred.grafcetX
En second lieu, le tableau gred.grafcetX contient des informations
relatives à la toplevel .grafcetX. Il contient des informations comme:
- gred.grafcetX(isDirty) vaut:
- 1, si le grafcet en cours d'édition dans la topleveldoit être
sauvegardé,
- 0 sinon.
- gred.grafcetX(oidSource) Contient le nom du l'oid source que l'on
vient de cliquer.
- gred.grafcetX(oidDesti) Contient le nom du l'oid destination que l'on
vient de cliquer.
- gred(mouse,xPress) et gred(mouse,yPress) sont deux variables
mémorisant la position du dernier click dans le canvas.
- gred.grafcetX(shiftActif) Vaut 1 si la touche "Shift" est appuyée.
- gred.grafcetX(status) Contient le dernier message d'erreur.
- gred.grafcetX(statusLog) Contient toutes les erreurs levées pendant
l'édition du grafcet.
Remarque: X est un entier qui s'incrémente à chaque nouveau grafcet
(cf variable gred(grafcetUID))
Le tableau globale grafcet.grafcetX
Ensuite, le tableau grafcet.grafcetXcontient des informations
relatives à un grafcet.
Ici, X est un entier qui s'incrémente à chaque
nouveau grafcet (cf variable gred(grafcetUID)).
Typiquement, dans la mesure où dans la version actuelle une fenêtre ne peut
éditer qu'un seul grafcet. La fenêtre toplevel .grafcetX contiendra
le grafcet contenu dans le tableau globale grafcet.grafcetX...
Informations globales
Les informations globales aux grafcets en cours d'edition sont:
- gred.grafcetX(filename) Nom du fichier en cours d'édition dans la
fenêtre.
- grafcet.grafcetX(EtapeNameId) Nom à partir duquel le nom des
étapes sera détérminé. Si ce champs vaut, par exemple, "T3W", toutes
les transirtions auront pour nom: "TxW" ou x est un entier supérieur ou
égales à 3. Vaut gred(etape,nameIndex) par défaut.
- grafcet.grafcetX(TransNameId) Nom à partir duquel le nom des
transitions sera détérminé. Vaut gred(transition,nameIndex) par
défaut.
Ce tableau contient aussi des informations nécessaires pour chaque type
d'oid contenu dans un grafcet:
- les étapes,
- les transitions,
- et les liens.
Informations concernant les étapes
On distingue les étapes les unes des autres par l'intermédiaire d'un
identificateur du type oidEtapeY où Y est un entier qui s'incrémente
à chaque nouvelle étape. Y prend ses valeurs suivant la variables
grafcet.grafcetX(EtapeUId).
Pour chaque étapes d'oid oidEtapeY du grafcet, on mémorise les champs:
- grafcet.grafcetX(oidEtapeY) qui vaut {} tant que cet objet existe.
Cette variable permet de savoir si une étape d'oid oidEtapeY
existe dans le grafcet.
- grafcet.grafcetX(oidEtapeY,x) et
grafcet.grafcetX(oidEtapeY,y) continennent les coordonnées de
l'étape.
- grafcet.grafcetX(oidEtapeY,name) est le nom l'étape.
- grafcet.grafcetX(oidEtapeY,type) prends ses valeurs dans la
liste {Normal, Initial, Hyper, Macro,
MacroDebut, MacroFin}. Permet de définir le type de l'étape.
On associe en plus au étape de type Macro un champs
grafcet.grafcetX(oidEtapeY,file) correspondant au fichier contenant
la description de la Macro.
- grafcet.grafcetX(oidEtapeY,file) contient un nom de fichier pour les
étape de type macro étape (i.e. de type Macro).
- grafcet.grafcetX(oidEtapeY,state) prend ses valeurs dans le
couple {active,inactive}. Permet de préciser si une variable
est oui ou non active.
- grafcet.grafcetX(oidEtapeY,comment) contient un commentaire lié
à l'etape. Contient une liste constituée des coordonnées du commentaire
(relative par rapport à la position de l'etape) et la valeur du commentaire.
- grafcet.grafcetX(oidEtapeY,action) est une liste de listes décrivant
les actions associées à l'étape. Par exemple l'action définit par la liste
{{A {ACTION 1} B}} correspond à une action de nom "ACTION 1" associé à
un symbole A et à une référence B.
- grafcet.grafcetX(oidEtapeY,command) décrit la commande permettant
de regénéré l'étape. Ce champs permet de redessiner facilement un grafcet,
une sauvegarde rapide du grafcet en cours d'édition.
Informations concernant les transitions
On distingue les transitions les unes des autres par l'intermédiaire d'un
identificateur du type oidTransY où Y est un entier qui s'incrémente
à chaque nouvelle transition. Y prend ses valeurs suivant la variables
grafcet.grafcetX(TransUId).
Pour chaque transition d'oid oidTransY du grafcet, on mémorise les
champs:
- grafcet.grafcetX(oidtransY) qui vaut {} tant que cet objet existe.
Cette variable permet de savoir si une transition d'oid oidTransY
existe dans le grafcet.
- grafcet.grafcetX(oidTransY,name) est le nom la transition.
- grafcet.grafcetX(oidTransY,x) et grafcet.grafcet1(oidTrans1,y)
sont les coordonnées de la transition.
- grafcet.grafcetX(oidTransY,receptivity) mémorise la recéptivité lié
à une transition.
- grafcet.grafcetX(oidTransY,comment) est le commentaire associé à une
transition. Contient une liste constituée des coordonnées du commentaire
(relative par rapport à la position de l'etape) et la valeur du commentaire.
- grafcet.grafcetX(oidTransY,command) décrit la commande permettant
de regénéré la transition. Ce champs permet de redessiner facilement un
grafcet, une sauvegarde rapide du grafcet en cours d'édition.
Informations concernant les liaisons
On distingue les transitions les unes des autres par l'intermédiaire d'un
identificateur du type oidLinkXEtapeYTransZ où X est un entier qui
s'incrémente à chaque nouvelle transition. Y prend ses valeurs suivant la
variables grafcet.grafcet1(LinkUId). L'exemple précédent dénote une
liaison liant l'étape d'oid oidEtapeY et la transition d'oid oidTransZ.
Choix de représentation des données
Nous allons commencer par présenter le principe de gestion des commentaires.
La gestion des commentaires
Les commentaires sont traitées de la même façon que ce soit pour les
étapes que pour les transitions. Un commentaire est une liste de 3 éléments:
- les 2 premiers réprésentant les coordonnées relatives de la position du
commentaire,
- le dernier élément indiquant le contenue du commentaire.
Lorsque l'on clique sur un commentaire (d'étape ou de transition), on rentre
en mode "commentEdit". Ce mode permet de définir les bindings permettant de
gérer le déplacement du commentaire. En mode "commentEdit", on sélectionne
un commentaire. Ensuite, on peut le "drag'n dropper" pour le déplacer.
La gestion est établi par plusieurs procédures:
- CommentEditB1Press: On clique sur le commentaire (déjà selectionné)
pour le déplacer. On mémorise la position du click (variable
gred(mouse,xPress) et gred(mouse,yPress)), la valeur
du commentaire avant déplacement dans la variable
gred(commentFieldBeforeMove), ainsi que la valeur de l'item
(représentant le commentaire) à déplacer (dans gred(commentItem)).
- CommentEditB1Motion: On déplace le commentaire (on n'a pas encore
encore relaché le bouton1). On utilise les variables
gred(mouse,xMove) et gred(mouse,yMove) pour mémoriser la
dernière position de la souris.
- CommentEditB1Release: On relache le bouton1. On update le
champs comment de l'oid (étape ou transition). On quitte le mode
"commentEdit". On efface la selection (à voir...).
La procédure LeaveModeCommentEdit permet de quitter le mode
"commentEdit".