menu


menus management

Principle
OpenGL
anyflo
scales
automatic menu
displ exec
See also

principle

       In interaction mode there is a menu default OpenGL available on right click of the mouse.
       It is possible to define cascading dropdown menus OpenGL or dynamic.
       It is also possible to define type anyflo programmable menus.

Note:
menu; (without parameters): clears the input char buffer and makes full screen the anyflo window.

dropdown menus OpenGL

simple dropdown menus

The command interaction menu defines some cascading dropdown menus of type OpenGL:
interaction menu("f1 f2 ...")
       Menu box appears at the top of the main dropdown menu (on right click). Click on the drop down menu shows f1 f2 ... fi click on the box causes the execution of the anyflo function fi.

Sub dropdown menus

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

       Menu box appears at the top of the main dropdown menu (on right click). Click on the drop down menu shows sm1 sm2, click on the box sm1 shows the submenu sm1 f F1_1 F1_2, click on the box f1_i causes the execution of the anyflo function f1_i ().
Can declare submenus of submenus:
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 are submenus level 1, f0 is a function.
sm3 et sm4 are submenus level 2 of submenu sm1.
sm5 et sm6 are submenus level 2 of submenu sm2.
f1 et f2 are functions of submenu sm3.
f3 et f4 are functions of submenu sm4.
f5 et f6 are functions of submenu sm5.
f7 et f8 are functions of submenu sm6.
See an example in function menu_cascade.func.

Menus de type anyflo

automatic
func
generation
text
menu
protocol
flickering
no
options
text
validate
yes

menu("MEN")func

Returne the names of the functions of the menu "MEN".

menu("MEN")text

Returne the textes assocoated to the submenus of the menu "MEN".

menu

menu("MEN")
Returns the list of function names (or submenus) called by the menu MEN.
Menu generation

menu(fff)text(ttt)poi(x,y)
     Generates a displayable menu in the graphic window:
fff is the list of the function names of the form:
     "f0;>f1;&f2;.f3;!f4;!f5;!f6;=f7;_f8"?f9;.
     fi is the name of a function that is in memory or of a previous declared menu.
     >f1 indicates that f1 is an exclusive sub menu (which must be declared before). It must be a function f1() will be executed when calling this sub menu. When an exclusive sub menu is validated, all others exclusive sub menus are invalidated.
     &f2 indicates that f2 is an inclusive sub menu (which must be declared before). It must be a function f2() will be executed when calling this sub menu.
     .f3 indicates that f3 is a toggle function (turn on and off).
     !f4;!f5;!f6 indicates that f4 f5 f6 are alternative functions which only one is active (activation of one of them disables the other).
It's possible to declare several groups of alternative functions by putting several ! (up to 6). for example:
     !f1;!f2!f3;!!g1;!!g2;!!g3;!!!h1;!!!h2;!!!h3;
     =f7 indicates that f7 is of type toggle and will run continuously until it is validated.
     _f8 indicates that f8 is a C function.
     ?f9 indicates that f9 is a priority function (ie it alone is executed, which display a lot of information without encroaching on others).

ttt is the list of the box names of the form "t0;t1;t2;t3;t4;t5;t6". There must be exactly the same number of fi and ti.
     ti is the name appearing in box i of the menu and may be different from the name of the corresponding function fi.

tti and thi may include several lines by putting \n, example:
ti=" one case text\n on 2 lines".

poi(x,y): is the menu position.
A small grey frame is displayed in the left menu, click on it allows translate the position.
The sizes of the boxes depend on the length of texts and font.

Options:
When a box is enabled the colors of text and frame are reversed.
col(r,g,b): text color (white is default).
col(r1,g1,b1, r2,g2,b2, ...): text color of box i (white is default).
frame(r,g,b): framed boxes color (r,g,b) (white default).
frame(r1,g1,b1, r2,g2,b2, ...): framed boxe i color (ri,vi,bi) (white default).
exec(c1,...): boxes ci of the menu will be executable cyclically and automatically during ti images(option time).
rectangle(r,g,b): boxes filled of color (r,g,b) (black by default).
rectangle(r1,g1,b1, r2,g2,b2, ...): boxe i filled of color (ri,gi,bi) (black by default).
mouse
mouse(0): non-blocking read (default).
mouse(1): blocking read .
mouse(2): continous read (without click).
text(th): displayed text above a box when the mouse passes over them.
time(t1,...): boxes ci of the menu will be executable cyclically and automatically during ti images (exec option).

Notes:
exec(c1,...)exec make immediate execution.

frame(r1,v1,b1, r2,v2,b2,rh2, ...), col(r1,v1,b1, r2,v2,b2, ...) as well as rectangle(r1,v1,b1, r2,v2,b2, ...) are used to color the boxes individually.
mouse(s1,s2,...) can assign different input modes on the boxes.

In order to force alternative functions they can been decalred as sub menus.
Protocole:
To facilitate the development the following protocol is recommended:
     give the same name to a box and the corresponding function (uppercase).
     call the main menu MEN.
     if a sub menu called SM, call SM_XXX boxes and dependent functions.
     External variables names begin with a capital.
     the first charactere of a function name should not be a _ (reserved for C functions).
(All demos respect this protocol).

See examples:
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

Note:
It is advisable do rem menu ("M") before changing the name of the M menu, otherwise the old name still correspond to a menu with boxes not necessarily correspond with existing functions.
In all case ini menu avoids problems.

rem menu("m") deletes the menu "m".
ini menu deletes all menus.

no menu

     Makes invisible menus.

no menu("SM")

     Makes invisible the submenu SM of a menu (as validate menu("SM")=0).

yes menu

     Makes visible menus (default).

yes menu("SM")

     Makes visible the submenu SM of a menu (as
validate menu("SM")=1).

validate menu

Validation of a function of a menu validate menu("f0")
     Returns the validation of function f0.
validate menu("f0")=v
     Changes this validation (0: off, 1: on).
inv validate menu("f0")
     Reverses this validation.
validate menu("f0")menu("fi")
     Returns the validation of function fi of menu f0. (> 0 if active, < 0 if passive, 0 if neutral).
validate menu("f0")menu("fi")=1
     ACtivates the function fi pf menu f0.
validate menu("f0")menu("fi")=0
     Inhibits the function fi of menu f0.
Note: "fi" may be replaced by the number of the box in the menu.
inv validate menu("f0")menu("fi") reverses the validation of function fi of menu f0.
Validation of a submenu of a menu
validate menu("MEN")menu("SM")=1; activates the submenu SM of menu ME.
validate menu("MEN")menu("SM")=-1; inhibits the submenu SM of menu ME and all functions and all submenus.

Notes:

In a submenu "M_S" of a menu "M" this submenu can be referenced by:
       menu("M")menu("M_S")
or by:
       menu("M")menu(name func)
since name func is the name of the function just executed.

To return to the keyboard can:
Press the key escape
Or call a function in a menu like this:
retour()
{
end interaction;
}

2) The input menu are in blocking mode.

Scales

       Scales used to enter information graphics using the mouse:
Float or integer values of dimensions 1, 2 ou 3.
Color or view parameters.

Note:

The entry on a scale are non-blocking mode. It is the responsibility of the user to test whether the reading is changed, for example:
n=scale("n")poi(-200,0,200,20)coe(0,1,N,0);
if(n!=N){N=n;executer(n);}

executer(n); will only be executed if a new value is read on the scale.

Automatic menu

Some menu functions fi of a menu nnn can be performed cyclically and automatically (although this menu is disabled) during ti images with the command exec(f1,f2,...)time(t1,t2,...)menu("nnn")exec.
Example:
exec(2,3)time(50,100)menu("MEN_SUB")exec;
lauchese an automatically execution of the functions numbered 2 and 3 of the sub menu MEN_SUB of the menu MEN respectively during 50 and 100 images.
See examples in test.func.

displ exec

The command displ exec can quickly build a simple menu.
Example:
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);

Constructs a menu of 3 boxes executable:
The first builds a cube dimension random..
The second calls the function f().
And last returns to the interpreter mode.

See also

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