menu


gestion des menus

Principe
OpenGL
anyflo
échelles
menu automatique
displ exec
Voir aussi

principe:

       En mode interaction il existe un menu OpenGL par défaut accessible sur clic droit de la souris.
       Il est possible de définir des menus déroulant OpenGL en cascade ou dynamiques.
       Il est possible aussi de définir des menus programmables de type anyflo.

Note:
menu; (sans paramètres): vide le buffer input char et affiche la fenêtre anyflo en plein écran.

Menus déroulants de type OpenGL

Menu déroulant simple

La commande interaction menu permet de définir des menus déroulant en cascade de type OpenGL:
interaction menu("f1 f2 ...")
       La case menu apparait en tête du menu déroulant principal (sur clic droite). Cliquer dessus fait apparaître le menu déroulant f1 f2 ..., cliquer sur la case fi provoque l´exécution de la fonction anyflo fi().

Sous menus déroulant

interaction menu(">sm1 f1_1 f1_2")
menu(">sm2 f2_1 f2_2")
menu(">sm1 sm2")

       La case menu apparait en tête du menu déroulant principal (sur clic dtoite). Cliquer dessus fait apparaître le menu déroulant sm1 sm2, cliquer sur la case sm1 fait apparaître le sous menu déroulant sm1 f f1_1 f1_2, cliquer sur la case f1_i provoque l´exécution de la fonction anyflo f1_i().
On peut déclarer des sous menus de sous menus:
interaction
menu(">sm3 f1 f2")
menu(">sm4 f3 f4")
menu(">sm5 f5 f6")
menu(">sm6 f7 f8")
menu(">sm1 sm3 sm4")
menu(">sm2 sm5 sm6")
menu("sm1 sm2 f0")

sm1 et sm2 sont des sous menus de niveau 1, f0 est une fonction.
sm3 et sm4 sont des sous menus de niveau 2 du sous menu sm1.
sm5 et sm6 sont des sous menus de niveau 2 du sous menu sm2.
f1 et f2 sont les fonctions du sous menu sm3.
f3 et f4 sont les fonctions du sous menu sm4.
f5 et f6 sont les fonctions du sous menu sm5.
f7 et f8 sont les fonctions du sous menu sm6.
Voir un exemple dans la fonction menu_cascade.func.

Menus de type anyflo

automatic
func
génération
text
menu
protocole
flickering
no
options
text
validate
yes

menu("MEN")func

Returne the names of the fonctions of the menu "MEN".
Génération de menu

menu("MEN")text

Retourne les textes associés aux sous menus du menu "MEN".

menu

menu("MEN")
Retourne la liste des noms des fonctions (ou sous menus) appelés par le menu MEN.

menu(fff)text(ttt)poi(x,y)
     Génère un menu affichable dans la fenêtre graphic:
fff est la liste des noms des fonctiins de la forme:
     "f0;>f1;&f2;.f3;!f4;!f5;!f6;=f7;_f8";?f9.
     fi est le nom d´une fonction présente en mémoire ou d´un menu déclaré avant.
     >f1 indique que f1 est un sous menu exclusif (qui devra être déclaré avant). Il devra exister une fonction f1() qui sera exécutée lors de l´appel à ce sous menu. Lorsqu´un sous menu exclusif est validé, tous les autres sous menus exclusifs sont invalidés.
     &f2 indique que f2 est un sous menu inclusif (qui devra être déclaré avant). Il devra exister une fonction f2() qui sera exécutée lors de l´appel à ce sous menu.
     .f3 indique que f3 est une fonction bascule (alternativement on et off).
     !f4;!f5;!f6 indique que f4 f5 f6 sont des fonctions exclusives dont une seule est active (l´activation de l´une d´entre elles désactive les autres).
Il est posible de déclarer plusieurs groupes de fonctions exclusives en mettant plusieurs ! (jusqu´à 6), par exemple:
     !f1;!f2!f3;!!g1;!!g2;!!g3;!!!h1;!!!h2;!!!h3;
     =f7 indique que f7 est de type bascule et sera exécutée continuellement tant qu´elle sera validée.
     _f8 indique que f8 est une fonction C.
     ?f9 indique que f9 est une fonction prioritaire (c´est à dire qu´elle seule est executée, ce qui permet d´afficher de nombreuses informations sans empieter sur les autres).

ttt est la liste des noms des cases de la forme "t0;t1;t2;t3;t4;t5;t6". Il doit y avoir exactement le même nombre de fi et de ti.
     ti est le nom apparaissant dans la case i du menu et pouvant être différent du nom fi de la fonction correspondante.

tti et thi peuvent comporter plusieurs lignes en mettant \n, exemple:
ti=" texte d´une case\n sur 2 lignes".

poi(x,y): est la position du menu.
Un petit cadre gris s´affiche à gauche du menu, cliquer dessus permet de translater sa position.
Les tailles des cases dépendent de la longueur des textes et de la font.

Options:
Lorsqu´une case est validée les couleurs du texte et du cadre sont inversées.
col(r,v,b): couleur du texte (blanc par défaut).
col(r1,v2,b2, r2,v2,b2, ...): couleur du texte de la case i (blanc par défaut).
frame(r,v,b): cases encadrées en (r,v,b) (blanc par défaut).
frame(r1,v1,b1, r2,v2,b2, ...): case i encadrée en (ri,vi,bi) (blanc par défaut).
exec(c1,...): les cases ci du menu seront exécutables cycliquement et automatiquement sur ti images (option time).
rectangle(r,v,b): cases pleines de couleur (r,v,b) (noir par défaut).
rectangle(r1,v1,b1, r2,v2,b2, ...): case i pleine de couleur (ri,vi,bi) (noir par défaut).
mouse
mouse(0): lecture non bloquante (par défaut).
mouse(1): lecture bloquante.
mouse(2): lecture à la volée (sans cliquer).
text(th): texte affiché sous une case lorsque la souris passe dessus.
time(t1,...): les cases ci du menu seront exécutables cycliquement et automatiquement sur ti images (option exec).

Remarques:
exec(c1,...)exec rendent l´exécution immédiate.

frame(r1,v1,b1, r2,v2,b2,rh2, ...), col(r1,v1,b1, r2,v2,b2, ...) de même que rectangle(r1,v1,b1, r2,v2,b2, ...) permettent de colorer individuellement les cases.
mouse(s1,s2,...) permet d´affecter des modes de saisie.

Afin de forcer des fonctions alternative on peut les déclarer comme des sous menus. différents sur les cases.
Protocole:
Afin de faciliter la mise au point il est conseillé de suivre le protocole suivant:
     donner le même nom à une case et à la fonction correspondante (en majuscules).
     appeler MEN le menu principal.
     si un sous menu s´appelle SM, appeler SM_XXX les cases et les fonctions dépendantes.
     Les noms des variables externes commencent par une majuscule.
     le premier caractère d´une fonction ne doit pas être un _ (réservé pour les fonctions C).
(Toutes les démos respectent ce protocole).

Voir exemples:
demo1_menu.func
modele_menu.func
modele_menu_fichier_fra.func
modele_menu_fichier_eng.func
modele_multi_menu.func
modele_sous_menu.func
modele_sous_sous_menu.func

Remarque:
Il est conseillé de faire rem menu("M") avant tout changement du nom M de ce menu, sinon l´ancien nom correspondrait toujours à un menu dont les cases ne correspondraient pas nécessairement avec des fonctions existantes.
Dans tout les cas ini menu évite les problèmes.

rem menu("m") supprime le menu "m".
ini menu supprime tout les menus.

no menu

     Rend les menus invisibles.

no menu("SM")

     Rend invisible le sous menu SM d´un menu (comme validate menu("SM")=0).

yes menu

     Rend les menus visibles (valeur par défaut).

yes menu("SM")

     Rend visible le sous menu SM d´un menu (comme
validate menu("SM")=1).

validate menu

Validation d´une fonction d´un menu validate menu("f0")
     Retourne la validation de la fonction f0.
validate menu("f0")=v
     Modifie cette validation (0: off, 1: on).
inv validate menu("f0")
     Inverse cette validation
validate menu("f0")menu("fi")
     Retourne la validation de la fonction fi du menu f0. (>0 si actif, <0 si passif, 0 si neutre).
validate menu("f0")menu("fi")=1
     Rend active la fonction fi du menu f0.
validate menu("f0")menu("fi")=0
     Rend passive la fonction fi du menu f0.
Remarque: "fi" peut être remplacé par le numéro de la case dans le menu.
inv validate menu("f0")menu("fi") inverse la validation de la fonction fi du menu f0.
Validation d´un sous-menu d´un menu
validate menu("MEN")menu("SM")=1; rend actif le sous menu SM du menu MEN
validate menu("MEN")menu("SM")=-1; rend passif le sous menu SM du menu MEN ainsi que toutes les fonctions et tous les sous menus de SM.

Remarques:

Dans un sous menu "M_S" d´un menu "M" ce sous menu peut être référencé par:
       menu("M")menu("M_S")
ou par:
       menu("M")menu(name func)
puisque name func est le nom de la function actuellement exécutée.

Pour retourner au mode clavier on peut:
Enfoncer la touche escape
Ou appeler dans un menu une fonction du type:
retour()
{
end interaction;
}

2) Les saisie au menu se font en mode bloquant.

Les échelles

       Les échelles permettent de saisir des informations graphiques à la souris:
Valeurs de flottantes ou entières de dimensions 1, 2 ou 3.
Paramètres de couleurs ou de view.

Remarque:

Les saisie sur une échelle se font en mode non bloquant. Il est de la responsabilité de l´utilisateur de tester si la valeur lue est changée, par exemple:
n=scale("n")poi(-200,0,200,20)coe(0,1,N,0);
if(n!=N){N=n;executer(n);}

executer(n); ne sera exécuté que si on lit une nouvelle valeur sur l´échelle.

Menu automatique

Certaines fonctions fi d´un menu nnn peuvent être exécutées cycliquement et automatiquement (même si ce menu est invalidé) pendant ti images avec la commande exec(f1,f2,...)time(t1,t2,...)menu("nnn")exec.
Exemple:
exec(2,3)time(50,100)menu("MEN_SUB")exec;
lance l´exécution automatique des fonctions numéros 2 et 3 du sous menu MEN_SUB du menu MEN respectivement 50 et 100 images.
Voir un exemples in test.func.

displ exec

La commande displ exec permet de construire très rapidement un menu simple.
Exemple:
xp=-200,-200;
w=displ exec("cube(1)dim(rand2(10,100));")poi(p)text(1,1)rectangle(0)frame(0,1);
p+=w[0],0;w=displ exec("f()")text(1,1)poi(p)rectangle(0)frame(0,1);
p+=w[0],0;displ exec("interaction STOP")poi(p)text(1,1)rectangle(0)frame(0,1);

Construit un menu de 3 cases exécutables:
La première construit un cube de dimension aléatoire.
La seconde appelle la fonction f().
Et la dernière retourne au mode interpréteur.

Voir aussi

col menu
exec menu
frame menu
mouse menu
name menu
no menu
period menu
poi menu
rectangle menu
rem period menu
text menu
validate menu
yes menu