Fix
[ryzomcore.git] / ryzom / client / data / gamedev / interfaces_v3 / interface.txt
blobcbe37b268565f5b522e8fb01c904ff13e4c0fc64
2 // ***************************************************************************
3 // ***************************************************************************
4 // INTERFACE COMMANDS
5 // ***************************************************************************
6 // ***************************************************************************
10 Fichier de definition des commandes et paramtres de l'interface
13 Note: dans la syntaxe et la description des parmptres, la valeur indique est la valeur par dffaut
15 Note: le X va vers la droite, le Y vers le haut. Les valeurs sont en pixels
17 Note: DERIVANT DE veut dire qu'on peut mettre les meme parametres que celui de qui on derive
18                                 les modifiables sont aussi herites
20 Note: MODIFIABLE veut dire que l'on peut modifier un paramtres dans le script (avec un link par exemple)
22 Note: OBLIGATOIRE veut dire que l'option doit tre presente sinon il y a crash ou non fonctionnement
24 Note: Identifiant de localisation local de type string (fait reference a un id de en.uxt par exemple)
25           Identifiant de localisation reseau de type integer
27 // ***************************************************************************
28 // ***************************************************************************
29 // BASICS
30 // ***************************************************************************
31 // ***************************************************************************
33 chaque vue, control, ou group DERIVE DE interface_element et peut avoir les parametres suivant:
35 <view_ctrl_group 
36         id=""                           // id de l element. OBLIGATOIRE
37         active="true"           // affiche ou pas
38         x="0"                           // position en X relative  posref et posparent
39         y="0"                           // position en Y relative  posref et posparent
40         w="0"                           // Taille de l element. Si l element possde un parent, prend le W du parent par defaut
41         h="0"                           // Taille de l element. Si l element possde un parent, prend le H du parent par defaut
42         posref="BL BL"          // position de reference (Bottom Left, MiddleMiddle etc...)
43                                                 // Se lit "PositionDuParent MaPosition"
44                                                 // Ex: "BL TR" signifie "mon Top Right est fixé sur le Bottom Left du parent"
45         posparent="parent"      // Definit le parent de l element pour ce qui est du positionnement
46         sizeref=""                      // valeurs possibles: "w", "h", "wh", "w?h?" ou ? est un facteur entre 1 et 9.
47                                                 // Dans ce cas la taille du parent est multiplie par ce facteur puis divisee par 10.
48                                                 // Au moment de l affichage, ajoute la taille du parent  W ou/et H a celle definit par 
49                                                 // w="" et h="". example: "w2h" implique que WAffiche = W + 2*parentW/10 et que 
50                                                 // HAffiche = H + parentH
51         sizeparent=""           // Indique le parent que l on prend pour le calcul des tailles WAffiche et HAffiche si cette 
52                                                 // valeur n est  pas specifiee alors on prends le posparent pour le calcul de la taille
53         global_color="true"     // si true modulate la couleur par la couleur globale
55         render_layer="0"        // valeur de -16 à +14 decale l ordre de rendu de l élement.
56         avoid_resize_parent="false" // Si cette valeur est mise a true, un group ayant un child_resize_x ne 
57                                                                 // prendra pas en compte cet element pour se resizer
60 MODIFIABLE: active              (bool)
61                         x, y, w, h      (int)
63 // ***************************************************************************
64 // ***************************************************************************
65 // VIEWS
66 // ***************************************************************************
67 // ***************************************************************************
69 Une vue a un type qui est dfinit par le parametre type="".
71 <view type="" />
73 MODIFIABLE: alpha (int)
75 // ***************************************************************************
76 // <view type="bitmap" />
77 // ***************************************************************************
79 BUT: 
80 affiche une bitmap
82 SYNTAXE:
83 <view type="bitmap" 
84         color="255 255 255 255"         // couleur (modulate) de la bitmap
85         texture=""                                      // fichier de la texture
86         scale="false"                           // si false, le W et le H sont forcs 7 etre de la taille de la texture
87         rot="0"                                         // definit valeur de rotation de la bitmap
88         flip="false"
89         tile="false"
90         align="0"
93 MODIFIABLE:     color                   (string)
94                         color_as_int    (int)
95                         color_rgba              (rgba)
96                         texture                 (string)
97                         alpha                   (int)
99 // ***************************************************************************
100 // <view type="background" />
101 // ***************************************************************************
103 Vue DERIVANT DE <view type="bitmap" />
105 BUT: 
106 affiche une bitmap dans des textures non condenses (plusieurs textures dans une seule)
108 SYNTAXE:
109 <view type="background" 
110         txtoffsetx="0"                  // offset dans la texture (en haut a gauche et positif vers le bas a droite)
111         txtoffsety="24"                 // offset dans la texture
112         txtwidth="800"                  // taille de la texture
113         txtheight="488"
116 texture sert pour le nom de la texture toute seule
118 // ***************************************************************************
119 // <view type="text" />
120 // ***************************************************************************
122 BUT: 
123 affiche un text
125 SYNTAXE:
126 <view type="text" 
127         color="255 255 255 255"         // couleur (modulate) du text
128         fontsize="12"
129         shadow="false"
130         shadow_color="0 0 0 255"        // la couleur de l ombre du texte
131         hardtext=""                                     // si present definit le text  afficher. (Identifiant de localisation local)
132         multi_line="false"
133         multi_line_space="8"
134         justification="dont_clip_word"  // clip_word : pas de justification
135                                                                         // dont_clip_word : Mots non coupés et non justifiés
136                                                                         // justified : Mots non coupés et justifiés
137         underlined="false"                      // sous ligne la phrase
138         case_mode="0"                           // Regle de majuscule   
139                                                                 // 0 : CaseNormal       Pas de modification majuscule minuscule
140                                                                 // 1 : CaseLower        Toutes les lettres sont force en minuscule
141                                                                 // 2 : CaseUpper        Toutes les lettres sont forcees en majuscule
142                                                                 // 3 : CaseFirstStringLetterUp          La premiere lettre de la string est en majuscule
143                                                                 // 4 : CaseFirstSentenceLetterUp        La premiere lettre de la string et des phrases 
144                                                                 //                                                                      suivantes (separes par un .) sont en majuscule
145                                                                 // 5 : CaseFirstWordLetterUp            La premiere lettre de chaque mot est en majuscule
147         line_maxw="16384"                               // maximum size of the line (multiline: minimized with the current wreal of the parent)
148         multi_line_maxw_only="false"    // multiline: don t minimize linemaxw with parent wreal. Use only linemaxw
150         over_extend_view_text="false"   // usefull only if some line_maxw specified. if true and if the text is clipped cause 
151                                                                         // of line_maxw, and if the mouse over the view text, then a special tooltip will be 
152                                                                         // displayed over, to show all the text
153         over_extend_parent_rect="false" // true to use in conjunction of over_extend_view_text: the over area is the parent, not the view
154         auto_clamp="true"               // when set to true, dots '...' will be added to the end of the line if the text is clipped by its parent (single line only)
155         continuous_update="true"        // multiline text justification is recomputed continuously as the window parent is resized (not when the left button is released only)
156                                         // default is "false"
159 MODIFIABLE:     hardtext        (string)
160                         uc_hardtext (ucstring)
161                         color           (string ('#r #g #b #a'))
162                         color_rgba      (rgba)
163                         alpha           (int)
165 NOTE: IL NE FAUT PAS mettre de sizeref sur une vue texte.
167 NOTE: Les vue textes peuvent prendre la forme de "TextFormatTagged".
168         MAIS SEULES les vues textes multilignes interprètent correctement les tags. 
169         Les Tags possibles sont:
170         @{F3DF}                 Tag De couleur (en hexadecimal, défintion avec 0 à F (0 à 15 maxi only donc) pour chaque composante RGBA)
171         @{T10}                  Tag de Tabulation. Le chiffre indique l'espacement minimum (en nombre de caractère '_')
173 NOTE: Il n'est pas posssible de préciser un TextFormatTaged, autrement que par code C++, ou via la fonction LUA:
174         setTextFormatTaged()
177 // ***************************************************************************
178 // <view type="text_id" />
179 // ***************************************************************************
181 BUT: 
182 Vue DERIVANT DE <view type="text" />
183 affiche un text en fonction d'un identifiant reseau (c'est une chaine de character equivalent a set_server_string (ah))
185 SYNTAXE:
186 <view type="text" 
187         textid=""                               // lien database vers un identifiant ("UI:TEMP:VAR1") ou identifiant lui meme ("654123")
188         dynamic_string="true"   // si true la phrase est composee               (CStringManagerClient::getDynString), 
189                                                         // sinon c est un identifiant server    (CStringManagerClient::getString)
192 MODIFIABLE:     textid                  (int)
193                         textid_dblink   (string)
195 // ***************************************************************************
196 // <view type="text_number" />
197 // ***************************************************************************
199 BUT: 
200 Vue DERIVANT DE <view type="text" />
201 Affiche une entre de la database (un nombre entier) sous forme de text
203 SYNTAXE:
204 <view type="text_number" 
205         value=""                                 // Lien vers la database pour lire la valeur OBLIGATOIRE.
206         positive="true"
207         suffix=""
208         prefix=""
209         format="false"                  // make the number thousands formatted 
213 // ***************************************************************************
214 // <view type="text_formated" />
215 // ***************************************************************************
217 BUT: 
218 Vue DERIVANT DE <view type="text" />
219 Affiche un texte. Si le texte contient les caracteres speciaux suivant, il y a un traitement particulier
220 $p -> remplace par le nom du joueur
221 $P -> remplace par le nom du joueur en lettre capitale
222 $b -> remplace par le nom du NPC auquel le joueur est en train de parler
223 $s -> remplace par le nom du NPC auquel le joueur est en train de parler (sans le titre)
224 ui... -> remplace par la traduction i18n (puis effectue les remplacements precedent)
226 SYNTAXE:
227 <view type="text_formated"
228         format="$b"                                     // chaine a remplacer (par defaut chaine vide)
231 // ***************************************************************************
232 // <view type="text_id_formated" />
233 // ***************************************************************************
235 BUT: 
236 Vue DERIVANT DE <view type="text_id" />
237 Un peu dans le meme esprit que la vue text_formated. Elle possede les memes traitements particuliers que
238 text_formated auxquels il faut y rajouter :
239 $t -> remplace par la valeur du text id
241 SYNTAXE:
242 <view type="text_id_formated" 
243         format="$t"                                     // Par defaut
244         textid="SERVER:BOTCHAT:DM_CHOICE2:TITLE"
247 // ***************************************************************************
248 // <view type="text_quantity" />
249 // ***************************************************************************
251 BUT: 
252 Vue DERIVANT DE <view type="text" />
253 Affiche un nombre de la database sous la forme "8/10" (avec donc une valeur max de la database). 
254 Si le nombre est  0, cela affiche la string emptytext. 
255 Par defaut emptytext="", et dans ce cas, "0/80" est affich (80 est la vraie valeur max en fait)
257 SYNTAXE:
258 <view type="text_quantity" 
259         value=""                                // Lien vers la database pour lire la valeur OBLIGATOIRE.
260         valuemax=""                             // Lien vers la database pour lire la valeur Max. OBLIGATOIRE.
261         emptytext=""                    // quand valeur==0, string  afficher. "" veut dire affiche 0/valeurMax
264 NB : emptytext contient un identifiant de localization local
266 // ***************************************************************************
267 // <view type="digit" />
268 // ***************************************************************************
270 BUT:
271 Vue speciale qui affiche un nombre avec des digits speciaux (bitmaps).
273 SYNTAXE:
274 <view type="digit"
275     value="SERVER:...."                         // lien sur la database. OBLIGATOIRE
276     numdigit="2"                                        // nombre de digit affichs (eg 00 si la valeur est nulle). Defaut:2. Min:1 et Max: 10
277     wspace="-1"                                         // espacement en pixel entre chaque digit. Defaut: -1
278     color="255 255 255 255"                     // comme les boutons, blanc par defaut
281 La taille totale est automatiquement calcule en fonction du digit 0 et du nombre de digit. 
282 bien sur, x,y,posref etc... marche toujours
285 // ***************************************************************************
286 // <view type="bar" />
287 // ***************************************************************************
289 BUT:
290 Vue DERIVANT DE <view type="bitmap" />
291 affiche une valeur sous forme de bar. Pour l instant 4 versions : (normal, mini, ultra_mini et mini_thick)
292 les bitmaps utilisees sont hardcodees en c++
294 SYNTAXE:
295 <view type="bar"
296         value=""                                                // valeur courante (Valeur ou Lien DB)
297         range=""                                                // range  (Valeur ou Lien DB)
298         reference=""                                    // Valeur soustraire de value et range (exemple: gestion de temps).(Valeur ou Lien DB)
299         color_negative=""                               // couleur quand les valeurs sont negatives
300         mini="true"                                             // Affiche la version mini
301         ultra_mini="true"                               // Affiche la version ultra mini
302         mini_thick="true"                               // Affiche la version mini thick
305 MODIFIABLE:
306                 value           (int)
307                 range           (int)
308                 reference       (int)
309                 value_dblink            (string)
310                 range_dblink            (string)
311                 reference_dblink        (string)
313 // ***************************************************************************
314 // <view type="bar3" />
315 // ***************************************************************************
317 BUT:
318 Vue DERIVANT DE <view type="bitmap" />
319 un peu dans le meme esprit que "bar" mais affiche directement 3 barres
321 SYNTAXE:
322 <view type="bar3"
323         value1=""
324         value2=""
325         value3=""
326         range1=""
327         range2=""
328         range3=""
329         color1=""
330         color2=""
331         color3=""
332         color1_negative=""
333         color2_negative=""
334         color3_negative=""
335         mini="true"
338 MODIFIABLE:
339                 value1  (int)
340                 value2  (int)
341                 value3  (int)
342                 range1  (int)
343                 range2  (int)
344                 range3  (int)
346 // ***************************************************************************
347 // ***************************************************************************
348 // CONTROLS
349 // ***************************************************************************
350 // ***************************************************************************
352 DERIVE DE <view type="" />
353 Un control a un type qui est définit par le paramètre type="".
355 <ctrl type="" 
356         tooltip=""                                              // aide contextuelle par defuat
357         tooltip_i18n=""                                 // idem tooltip, mais cherche forcément la définition dans le wk.uxt,
358                                                                         // même si le texte ne commence pas par "ui"
359         on_tooltip=""                                   // action handler qui permet de mettre une autre aide contextuelle
360         on_tooltip_params=""                    // les parametres de l action handler
361         instant_help="true"                             // Est ce que l aide contextuelle a affichee est affichee directement
363         tooltip_parent="ctrl"                   // "ctrl", "win" ou "mouse". Définit le parent relatif lors de l affichage
364                                                                         // du tooltip.
365                                                                                         "ctrl" veut dire que le tooltip est callé par rapport à ce control
366                                                                                         "win" veut dire que le tooltip est affiché par rapport à la fenetre
367                                                                                                         contenant le control
368                                                                                         "mouse" veut dire que le tooltip est callé par rapport à la souris
369         tooltip_posref="auto"                   // Position de référence du tooltip par rapport à son parent (cf tooltip_parent)
370                                                                                         "auto" la posution de référence est chosie intelligement suivant le
371                                                                                                         type de parent:
372                                                                                                         "ctrl": "TL BR" ou "TR BL" suivant que la fenetre contenant
373                                                                                                                 le control est plus à gauche ou à droite
374                                                                                                         "win": "TL BL" ou "BL TL" suivant que la fenetre contenant
375                                                                                                                 le control est plus en haut ou en bas
376                                                                                                         "mouse": "BL BL"
377                                                                                         "TL BR" (ou toute autre position de référence possible): calage fixe
381 MODIFIABLE:     alpha (int)
383 // ***************************************************************************
384 // <ctrl type="tooltip" />
385 // ***************************************************************************
387 BUT:
388 Control qui dérive simplement de ctrl_base, et qui ne gère aucun évenement et n'affiche rien.
389 Son seul but est d'avoir une zone pour afficher un tooltip quand on passe dessus.
391 SYNTAXE:
392 <ctrl type="tooltip" />
395 // ***************************************************************************
396 // <ctrl type="button" />
397 // ***************************************************************************
399 BUT:
400 boutton, push, radio ou toggle.
402 SYNTAXE:
403 <ctrl type="button" 
404         button_type="toggle_button"                     // type du boutton: "toggle_button", "push_button" ou "radio_button"
405         pushed="false"                                          // etat pushed par defaut
406         color="255 255 255 255"                         // couleur etat normal
407         col_pushed="255 255 255 255"            // couleur quand pushed
408         col_over="255 255 255 255"                      // couelur quand over
409         global_color_normal=""                          // remplace le setup global_color pour l etat normal du bouton
410         global_color_pushed=""                          // remplace le setup global_color pour l etat pushed du bouton
411         global_color_over=""                            // remplace le setup global_color pour l etat over du bouton
412         tx_normal=""                                            // texture etat normal
413         tx_pushed=""                                            // texture etat pushed
414         tx_over=""                                                      // texture etat over
415         scale="false"
416         onclick_l=""                                            // action à lancer sur un click gauche
417         params_l=""                                                     // parametres de l action à lancer sur un click gauche
418         onlongclick_l=""                                        // action a lancer sur un click long
419         params_longclick_l=""
420         onclick_r=""                                            // action à lancer sur un click droit
421         params_r=""                                                     // parametres de l action à lancer sur un click droit
422         align=""                                                        // si pas de scale et que zone définie plus grande que l image
423         menu_l=""                                                       // context menu à afficher sur un click bouton gauche (voir group de type menu)
424         menu_r=""                                                       // context menu à afficher sur un click bouton droit (voir group de type menu)
425         menu_b=""                                                       // context menu à afficher sur un click bouton droit ou gauche (voir group de type menu)
426         frozen="false"                                          // button is frozen
429 MODIFIABLE:     pushed                  (bool)
430                         col_normal              (string ('#r #g #b #a'))
431                         col_over                (string ('#r #g #b #a'))
432                         col_pushed              (string ('#r #g #b #a'))
433                         col_normal_rgba (rgba)
434                         col_over_rgba   (rgba)
435                         col_pushed_rgba (rgba)
436                         frozen                  (bool)
437                         params_l                (string)
439                         texture                 (string)
440                         texture_pushed  (string)
441                         texture_over    (string)
444 // ***************************************************************************
445 // <ctrl type="text_button" />
446 // ***************************************************************************
448 BUT:
449 boutton, push, radio ou toggle.
451 SYNTAXE:
452 <ctrl type="text_button" 
453         button_type="toggle_button"                     // type du boutton: "toggle_button", "push_button" ou "radio_button"
454         pushed="false"                                          // etat pushed par defaut
455         color="255 255 255 255"                         // couleur etat normal
456         col_pushed="255 255 255 255"            // couleur quand pushed
457         col_over="255 255 255 255"                      // couelur quand over
458         global_color_normal=""                          // remplace le setup global_color pour l etat normal du bouton
459         global_color_pushed=""                          // remplace le setup global_color pour l etat pushed du bouton
460         global_color_over=""                            // remplace le setup global_color pour l etat over du bouton
462         //  Textures: 
463         // contrairement aux boutons, ici il faut mettre seulement "textb_normal" par exemple. 
464         // les "_l.tga", "_m.tga", "_r.tga" etant ajoutees automatiquement pour trouver respectivement les parties
465         // gauches, millieu (celle qui est scalée en X) et droite.
467         tx_normal=""                                            // texture etat normal. 
468         tx_pushed=""                                            // texture etat pushed.
469         tx_over=""                                                      // texture etat over.
470         onclick_l=""                                            // action à lancer sur un click gauche
471         params_l=""                                                     // parametres de l action à lancer sur un click gauche
472         onlongclick_l=""                                        // action a lancer sur un click long
473         params_longclick_l=""
474         onclick_r=""                                            // action à lancer sur un click droit
475         params_r=""                                                     // parametres de l action à lancer sur un click droit
476         menu_l=""                                                       // context menu à afficher sur un click bouton gauche (voir group de type menu)
477         menu_r=""                                                       // context menu à afficher sur un click bouton droit (voir group de type menu)
478         menu_b=""                                                       // context menu à afficher sur un click bouton droit ou gauche (voir group de type menu)
480         // Texte infos:
481         hardtext=""
482         fontsize=""
483         shadow=""
484         underlined=""
486         // Comportement Special des Couleurs des Textes
487         text_color_normal="255 255 255 255"
488         text_color_pushed="255 255 255 255"
489         text_color_over="255 255 255 255"
490         text_shadow_color_normal="0 0 0 255"
491         text_shadow_color_pushed="0 0 0 255"
492         text_shadow_color_over="0 0 0 255"
493         text_global_color_normal=""
494         text_global_color_pushed=""
495         text_global_color_over=""
497         // Special:
498         text_y=""                                                       // décalage du texte en Y rapport au bouton (-2)
499         wmargin=""                                                      // taille à ajouter au texte pour avoir la taille du bouton
500         wmin=""                                                         // taille minimum du bouton
504 MODIFIABLE:     pushed                  (bool)
505                         col_normal              (string ('#r #g #b #a'))
506                         col_over                (string ('#r #g #b #a'))
507                         col_pushed              (string ('#r #g #b #a'))
508                         col_normal_rgba (rgba)
509                         col_over_rgba   (rgba)
510                         col_pushed_rgba (rgba)
511                         frozen                  (bool)
512                         params_l                (string)
514                         uc_hardtext             (ucstring telle quelle)
515                         hardtext                (string qui va etre localisee)
518 // ***************************************************************************
519 // <ctrl type="scroll" />
520 // ***************************************************************************
522 BUT:
523 scroll bar.
525 SYNTAXE:
526 <ctrl type="scroll"
528         tx_bottomleft=""                // Les textures du bouton (pas de background affiche) (bottom or left)
529         tx_middle=""
530         tx_topright=""                  // top or right (ca depends si la sb est verticale)
532         vertical=""                             // Est ce que c est une sb verticale ou horizontale
533         align=""                                // T, B, L ou R
534         
535         value=""                                // Value entree de DB ou nombre (si pas present alors la sb est linke a une target)
536         min=""                                  // Si la sb n est pas linke a une target alors le nombre qu elle 
537                                                         // represente varie de min a max
538         tracksize=""                    // Taille de la track bar (le boutton)
539         
540         onscroll=""                             // Action Handler appele lorsque la sb est deplacee
541         onscrollend=""                  // Appele quand on arrete de scroller
542         params=""
543         
544         target=""                               // Si la sb n est pas linke a une value alors elle peut etre linke a un group. Dans ce cas
545                                                         // le group est se deplace dans la limite de ses max_w et max_h relativement a ses w et h.
546         target_stepx=""                 // Donne la quantite de pixel a deplacer en une fois. Ce qui permet par exemple dans les 
547         target_stepy=""                 // listes de sheet d etre cale sur un sheet
548         step_value=""
551 // ***************************************************************************
552 // <ctrl type="sheet" />
553 // ***************************************************************************
555 BUT:
556 affiche un boutton spécial d'item, brique etc...
558 SYNTAXE:
559 <ctrl type="sheet"
560         value=""                                                        // Lien vers la database. OBLIGATOIRE.
561                                                                                 // example: SERVER:INVENTORY:8:1. NB: lien vers une branche de la database
562                                                                                 // qui DOIT contenir SHEET, et peut avoir QUANTITY et/ou QUALITY
563         nature="item"                                           // "item", "brick", "spell"
564         brick_type=""                                           // "COMBAT", "MAGIC". may be important for some filter (memory...)
565                                                                                 // Can also put multiple filter like this: "COMBAT|MAGIC|HARVEST"
566         tx_noitem=""
567         col_noitem="true"                                       // "true": quand pas d item, modulate la couleur avec la couelur globale
569         onclick_l=""                                            // action à lancer sur un click gauche
570         params_l=""                                                     // parametres de l action à lancer sur un click gauche
571         onclick_r=""                                            // action à lancer sur un click droit
572         params_r=""                                                     // parametres de l action à lancer sur un click droit
574         menu_l=""                                                       // context menu à afficher sur un click bouton gauche (voir group de type menu)
575         menu_r=""                                                       // context menu à afficher sur un click bouton droit (voir group de type menu)
576         menu_b=""                                                       // context menu à afficher sur un click bouton droit ou gauche (voir group de type menu)
578         dragable="false"                                        // drag and drop able?
579         oncandrop=""                                            // Action a lancer pour savoir si on peut Droper sur moi.
580         params_candrop=""
581         ondrop=""                                                       // Action a lancer sur un drop sur moi
582         params_drop=""
584         use_quantity="true"                                     // display the Item Quantity
585         use_quality="true"                                      // display the Item Quality
586         duplicate_on_drag="false"                       // when drag a sheet (item only), leave the bitmap in the original slot
587         use_slot_type_db_entry="false"          // Automatic Type.
589         grayed="false"                                          // init the sheet as grayed or not
590         auto_grayed="false"                                     // Gray auto the sheet according to Item LOCKED state or Brick LATENT state
591         slot="true"                                                     // Draw the slot
594 MODIFIABLE:
595                 sheet                   (string) (correspond a la value le lien vers la DB)
596                 color1                  (rgba)
597                 color2                  (rgba)
598                 back                    (int)
599                 symbol                  (int)
600                 invert_symbol   (bool)
603 // ***************************************************************************
604 // <ctrl type="colpick" />
605 // ***************************************************************************
607 BUT:
608 affiche une image pour choisir que l on puisse choisir une couleur dedans
610 SYNTAXE:
611 <ctrl type="colpick" 
612         texture="color_palette.tga"                     // La texture a utiliser (texture non groupee!)
613         onchange="proc"                                         // Action a lancer des que la couleur selectionnee change
614         onchange_params="proc_col_change"       // Les parametres de l action
615         dbcolr="UI:TEMP:COL:R"                          // .
616         dbcolg="UI:TEMP:COL:G"                          // .
617         dbcolb="UI:TEMP:COL:B"                          // .
618         dbcola="UI:TEMP:COL:A"                          // Liens direct avec la database de la couleur selectionnee
621 MODIFIABLE:     r, g, b, a (int) les composantes de la couleur selectionnee
622                         color (string ('#r #g #b #a'))
626 // ***************************************************************************
627 // ***************************************************************************
628 // GROUPS
629 // ***************************************************************************
630 // ***************************************************************************
632 // ***************************************************************************
633 // <group>
634 // ***************************************************************************
636 BUT:
637 DERIVE DE <ctrl type=""/>
638 Définit un group qui pourra contenir des groups, des controls ou des vues.
639 Aucun affichage n'est fait sinon celui des fils
640 Pour qu'un groupe soit affiché, il faut qu'il apparaisse dans les <tree node="">
642 SYNTAXE:
643 <group
644         overlappable="true"                     // Recupere les evenements      
645         child_resize_w="false"          // si true, resize le groupe en W selon ses fils.
646         child_resize_h="false"          // si true, resize le groupe en H selon ses fils.
647         child_resize_wmargin="0"        // si child_resize_w="true" ajoute une marge à la largeur totale des fils
648         child_resize_hmargin="0"        // si child_resize_h="true" ajoute une marge à la hauteur totale des fils
649         on_active=""                            // nom d un handler appelé quand la fenetre est activée
650         on_active_params=""                     // parametre passé au handler quand la fenetre est activée
651         on_deactive=""                          // nom d un handler appelé quand la fenetre est désactivée
652         on_deactive_params=""           // parametre passé au handler quand la fenetre est sactivée
653         on_enter=""                                     // windows et modal only: Gere l evenement entree : Quand on appuie sur enter (return)
654         on_enter_params=""                      // windows et modal only: Les parametres de l evenement entree
655         escapable="false"                       // windows only: true : ferme la fenetre si ESC appuyée.
657         max_w=""                                        // max_w et max_h definisse la taille maximum a afficher tandis que w et h definsse la
658         max_h=""                                        // taille du document (qui est a l interieur et peut donc etre scolle)
659         max_sizeref=""
660         max_sizeparent=""
661         group_onclick_r=""
662         group_params_r=""
663         group_onclick_l=""
664         group_params_l=""
665         win_priority=""
666         use_cursor=""
669 MODIFIABLE:     ofsx (int)
670                         ofsy (int)
672 // ***************************************************************************
673 // <group type="list">
674 // ***************************************************************************
676 BUT:
678 SYNTAXE:
679 <group type="list"
680         maxelements="10"
681         addelt="B"                              // "B", "T", "L" ou "R"
682         align="L"                               // "B", "T", "L" ou "R"
683         space="0"
684         chat="false"
685         
686         // Text options
687         color=""
688         fontsize=""
689         shadow=""
690         shadow_color=""
691         line_at_bottom=""
692         multi_line=""
693         justification=""
694         multi_line_space=""
696         over="false"                    // doit on afficher la selection sous la souris
697         col_over="255 255 255 32" // la couleur de la selection
699         // Initial text
700         hardtext="uiAZE"                // init la liste avec un texte a identifiant de localisation local
701         textid="654"                    // init la liste avec un texte a identifiant de localisation reseau
705 // ***************************************************************************
706 // <group type="container">
707 // ***************************************************************************
709 Herite de group
711 BUT:
712 Afficher un container
714 SYNTAXE:
715 <group type="container"
716         localize=""                                     // Def:true est ce que le titre doit etre localise ?
717         title=""
718         title_opened=""
719         title_closed=""
720         header_active="true"
721         header_color="UI:SAVE:MYCOLOR"  // db col entry
722         right_button="true"
723         movable="false"                         // true == on peut bouger la fenetre
724         popable="false"                         // true == la fenetre peut se detacher de son container parent
725         lockable=""                                     // Def:true
726         locked=""                                       // Def:false
727         openable="true"                         // peut on ouvrir le container en clickant sur la barre de titre
728         opened="false"                          // l etat initial en ouverture
729         open_when_popup="false"         // Ouvre le container quand on le popup (le ferme quand popin)
730         resizer="true"                          // est ce que l on peut resizer la fenetre
731         
732         on_open=""                                      // nom dun handler appelé quand le container est ouvert
733         on_open_params=""                       // parametre passé au handler quand le container est ouvert
734         on_close=""                                     // nom dun handler appelé quand le container est fermé
735         on_close_params=""                      // parametre passé au handler quand le container est fermé
737         on_deactive_check=""    
738         on_deactive_check_params=""     
740         max_w=""
741         min_w=""
743         pop_max_w=""
744         pop_min_w=""
745         pop_max_h=""
746         pop_min_h=""
748         movable_in_parent_list=""
749         savable="true"                          // true == la fenetre est sauvegardée sur disque et est dépendente des modes.
750         active_savable=""
751         modal_parent=""
752         options=""                                      // nom des options a utilisees (pas fonction d un layer)
755 MODIFIABLE: title, title_opened, title_closed (string)
756                         uc_title_opened, uc_title_closed, uc_title (ucstring)
757                         title_color (string)
758                         pop_max_h (int)
759                         openable, opened (bool)
760                         lockable, locked (bool)
762 Note: si global_color est à true le bouton et le titre sont colorés par la couleur globale
764 // ***************************************************************************
765 // <group type="frame">
766 // ***************************************************************************
768 Herite de group
770 BUT:
771 comme un group mais affiche un cadre et un fond (fixé: bitmaps de la modal).
773 SYNTAXE:
774 <group type="frame"
775         display="false"                                 // si false n affiche pas la frame (true par defaut)
776         color="255 255 255 255"
779 MODIFIABLE: color (string ('#r #g #b #a'))
781 // ***************************************************************************
782 // <group type="modal">
783 // ***************************************************************************
785 Herite du group de type "frame" (affiche donc un cadre)
787 BUT:
788 Affiche une fenetre qui pourra etre ouverte sur une action. Cachée par defaut (active=false)
789 NOTE: un group modal NE DOIT PAS être défini dans les <tree node="">.
790 En fait ils sont automatiquement ajoutés
791 NB: par defaut les modals sont ESCAPABLE
793 SYNTAXE:
794 <group type="modal"
795         mouse_pos="true"                                // si "true", Spawn la fenetre sur la position de la souris, en suivant posref""
796                                                                         // par exemple posref="BL TL" positionnera le coin TL de la fenetre sur la souris.
797                                                                         // NB: BL (posref du parent) est donc ignorée ici
798         exit_click_out="true"                   // si "true" la fenetre modal est fermeé si on clique à l exteriru
799         exit_click_l="false"                    // si "true" la fenetre modal est fermeé si on clique sur le bouton gauche 
800                                                                         // (après lancement eventuelle action de la modal)
801         exit_click_r="false"                    // si "true" la fenetre modal est fermeé si on clique sur le bouton droit
802                                                                         // (après lancement eventuelle action de la modal)
803         exit_click_b="false"                    // equivalent à exit_click_l="val" ET exit_click_r="val" (val: true ou false)
804         exit_key_pushed="false"                 // Close the modal if a key is pushed
806         force_inside_screen="false"             // Clip la fenetre à l interieur de l ecran. Note: automatique si mouse_pos="true"
807         onclick_out=""
808         onclick_out_params=""
811 certains actions handlers prennent un id de window en paramètre (eg: "ui:interface:taskbar"). L'id spécial
812 se nommant "ctrl_launch_modal" désigne en fait le bouton ou le control qui a fait ouvrir la fenetre modal.
815 Un control sheet dans une fenetre modal echange son sheet id avec le ctrl sheet qui a ouvert la modal:
816 <ctrl type="sheet" onclick_l="exchange" params_l="src=ctrl_launch_modal">
818 Dans le xml, il faut bien faire attention a ce que les modals soient a la racine sinon elles peuvent 
819 etre affichées plusieurs fois. Il ne faut pas non plus qu'elles soient ajoutées en tant que node dans un <tree>
822 // ***************************************************************************
823 // <group type="menu">
824 // ***************************************************************************
826 Herite du groupe de type "modal"
828 BUT:
829 Affiche un menu contextuel
830 Caché par défaut
832 SYNTAXE:
833 <group type="menu" id="cm_byes" 
834         context="true"                                          // "false" si doit etre utilisé (et donc affiché) dans un autre groupe
835                                                                                 // et non tout seul (sur un menu_r de bouton par exemple)
836         color="255 255 255 255"                         // couleur du texte
837         shadow_color="0 0 0 255"                        // couleur de l ombre du texte (noire par defaut)
838         fontsize="12"
839         shadow="false"
840         color_over="255 255 255 255"            // couleur du texte quand survole de la souris dessus
841         shadow_color_over="0 0 0 255"           // couleur de l ombre du texte quand survole de la souris (noire par defaut)
842         highlight_over="128 0 0 255"            // higlight sous le texte quand survolé. Mettre A=0 pour rien.
843         color_grayed="128 128 128 255"          // couleur du texte quand celui ci est inactif
844         shadow_color_grayed="0 0 0 255"         // couleur de l ombre du texte quand celui ci est inactif
845         >
846                 <action                         // Une action est une ligne de menu (ou de sous menu) (ici cette action possède un sous menu)
847                         id="aze"                // Identifiant facultatif si absent, l id est la position dans le menu (a partir de 0)
848                         name="Action1"  // Nom localise et affiche
849                         handler=""              // handler appele si la ligne est clickee (meme en cas de sous menu)
850                         params=""               // Les paramètres du handler
851                         grayed="true"   // est ce que la ligne est grisée ? facultatif
852                         usergroup_l=""                  // Nom d un template pour mettre un groupe a gauche du texte
853                         usergroup_params_l=""   // Parametres du template delimites par des | (...params_l="posref=TL TL|x=5" )
854                         usergroup_r=""                  // Pareil a droite
855                         usergroup_params_r=""
856                 >
857                         <action name="imbriquee" handler="" params="" /> // Ligne simple
858                 </action>
861         ...
862 </group>
864 MODIFIABLE: pour une action : grayed, checked et tous les modifiables d une vue texte
865 on peut recuperer les usergroup en faisant comme d'habitude menuid:actionid:usergroupid
867 // ***************************************************************************
868 // <group type="list_sheet">
869 // ***************************************************************************
871 BUT:
872 affiche une liste variable de ctrl_sheet
874 SYNTAXE:
875 <group type="list_sheet" id="pipo0" 
877         value="SERVER:INVENTORY:8"      // Pointe sur une branche de la database. OBLIGATOIRE
878                                                                 // Les fils doivent etre de type #number:SHEET (optionnel #number:QUALITY et #number:QUANTITY).
880         wspace="2" hspace="2"           // donne l espacement entre chaque slot. 0 par defaut
882         maxitem="12"                            // donne le nombre maximum d item lu dans la branch (eg: 6 pour un bag). 
883                                                                 // Nb: temporaire??, normalement c la database qui donne ce nombre. Defaut: infini
885         startitem="12"                          // donne l id de départ dans la database. utile pour les bag (bag0: 0, bag1: 6, bag2: 12, etc...)
887         array="false"                           // si "false", les sheet vides ne sont pas affichés. defaut: "true"
889         lmargin="12"                            // Marges left, right Top et bottom des slots par rapport au group. Defaut:0. Il Faut en mettre si ya une scrollBar et des bouton +- forcément...
890         rmargin="2"
891         tmargin="12"
892         bmargin="2"
894         rowmin="0"                                      // Nombre de ligne minium affichées. Defaut: 1. 
895                                                                 // Important si on veut par exemple afficher la liste des malus vide sans que le groupe se resize à H=0 (vide)
897         rowmax="2"                                      // Nombre de ligne maximum affichés. Defaut: infini. 
898                                                                 // Important si on veut afficher qu une seule ligne toujours (pour les malus par exemple) 
899                                                                 // quelque soit la largeur du parent. C est cette valeur qui est éditée par les boutons +- (si présents)
901         column_max="4294967295"         // taille maximum du nombre de sheet par ligne
902         column_factor="1"                       // si 3 par exemple, le nombre de sheet par ligne ne pourra etre que 3,6,9...
903         column_center="false"           // si true, centre les sheet en X suivant le WReal donnée par list_sheet
905         // Paramètres communs au ctrl type="sheet". Voir ce control pour les détails
907         nature=""
908         tx_noitem=""
909         onclick_l=""
910         params_l=""
911         onclick_r=""
912         params_r=""
913         dragable=""
914         oncandrop=""
915         params_candrop=""
916         ondrop=""
917         params_drop=""
918         menu_l=""
919         menu_r=""
920         menu_b=""
922         // Filters
924         onfilter=""
925         params_filter=""
926         >
928         // Le mode "Resize" n'existe pas en fait. Le scripteur est libre de mettre ou pas une scroll bar et/ou des boutons qui permettent de changer rowmax
930         <ctrl type="button" id="add_row" button_type="push_button" posref="TR TR" tx_normal="W_arrow_up_3.tga" tx_pushed="W_arrow_up_3.tga" tx_over="W_button_08_over.tga" />
931         <ctrl type="button" id="sub_row" button_type="push_button" posparent="add_row" posref="TL TR" tx_normal="W_arrow_down_3.tga" tx_pushed="W_arrow_down_3.tga" tx_over="W_button_08_over.tga" />
932         
933         // Setup tyipque de scrollBar. L'alignement est hardocé pour etre Top. Le y devrait etre egal à "-tmargin" du group list_sheet
935         <ctrl type="scroll" id="scroll_row" posref="TL TL" w="8" x="2" y="12" 
936                 <!-- choix des textures de la scroll -->
937                 tx_bottomleft= "w_scroll_l123_b.tga"
938                 tx_middle= "w_scroll_l123_m.tga"
939                 tx_topright= "w_scroll_l123_t.tga"
940         />
942 </group>
944 MODIFIABLE:     nbelt (int en lecture seul !) le nombre d'element valide si array=false sinon maxelt
946 // ***************************************************************************
947 // <group type="list_job">
948 // ***************************************************************************
950 BUT:
951 affiche un tableau de familles de métier avec la bonne brick.
952 sont grand pere DOIT etre un container (pour initialiser son nom)
954 SYNTAXE:
955 <group type="list_job" 
957         brick_type=""                           // MAGIC, COMBAT, FABER,... Obligatoire!!
958         career=""                                       // index OBLIGATOIRE de la carriere
959         job=""                                          // index OBLIGATOIRE du job. -1 si "all"
960         level=""                                        // varaible database qui donne le level du joueur dans ce job. OBLIGATOIRE
961         wspace="0"                                      // donne l espacement entre chaque slot. 0 par defaut
962         hspace="0"                                      // donne l espacement entre chaque slot. 0 par defaut
963         lmargin="0"                                     // Marges left, right Top et bottom des slots par rapport au group. Il Faut en mettre si ya des bouton +- forcément...
964         rmargin="0"
965         tmargin="0"
966         bmargin="0"
968         list_sentence=""                        // Pour la magie Pointe vers un group de type="list_sentence". Utilise pour savoir
969                                                                 // ou sont ajoutés les sentences nouvelles.
971         // Paramètres communs au ctrl type="sheet". Voir ce control pour les détails
973         nature=""                                       // la nature n est pas necessaire ici. C est FORCEMENT une "brick"
974         tx_noitem=""
975         onclick_l=""
976         params_l=""
977         onclick_r=""
978         params_r=""
979         dragable=""
980         oncandrop=""
981         params_candrop=""
982         ondrop=""
983         params_drop=""
985         />
987         // Boutons pour changer le niveau de brick voulu
989         <ctrl type="button" id="add_level" button_type="push_button" posref="TR TR" tx_normal="W_arrow_up_3.tga" tx_pushed="W_arrow_up_3.tga" tx_over="W_button_08_over.tga" />
990         <ctrl type="button" id="sub_level" button_type="push_button" posparent="add_row" posref="TL TR" tx_normal="W_arrow_down_3.tga" tx_pushed="W_arrow_down_3.tga" tx_over="W_button_08_over.tga" />
991         
992         // vue qui affiche le niveau selectionné
994         <view type="text" id="view_level" />
996         // group de décoration qui affiche un fond derriere le texte (sert pour le scroll des levels à la molette)
997         <group id="box_text" />
998 </group>
1000 // ***************************************************************************
1001 // <group type="select_number">
1002 // ***************************************************************************
1004 BUT:
1005 widget qui sert pour augmenter et diminuer un nombre de la database
1007 SYNTAXE:
1008 <group type="select_number" 
1009         value=""                                // lien vers la database. OBLIGATOIRE
1010         loop="true" 
1011         min="0" 
1012         max="9" 
1013         />
1014         <view type="text" id="number" />                                // une vue qui permettra d'afficher le nombre
1015         <ctrl type="button" id="arrow_up" />                    // boutton pour incrémenter
1016         <ctrl type="button" id="arrow_down" />                  // boutton pour décrémenter
1017 </group>
1020 // ***************************************************************************
1021 // <group type="scroll_text">
1022 // ***************************************************************************
1024 BUT:
1025 widget servant à afficher des lignes de chat ou autres défilant, avec une scrollBar et des boutons pour augmenter
1026 la taille  de la fenetre
1028 SYNTAXE:
1029 <group type="scroll_text" 
1030         min_height="16"
1031         max_height="128"
1032         invert_scroll_bar="true" 
1033         >
1034         <ctrl type="scroll" id="scroll_bar"/>
1035         <ctrl type="button" id="button_add"/>
1036         <ctrl type="button" id="button_sub"/>
1037         <group type="list"  id="text_list"/>
1038 </group>
1041 // ***************************************************************************
1042 // <group type="editbox" />
1043 // ***************************************************************************
1045 BUT:
1046 edition de texte
1048 SYNTAXE:
1049 <group type="edit_box" 
1050         onenter=""                                                      // Action a lancer quand ENTER est pressé
1051         params=""                                                       // paramètres de l Action a lancer quand ENTER est pressé
1052         onchange=""
1053         onchange_params=""
1054         enter_loose_focus="true"                        // si enter perd le focus
1055         max_num_chars="oo"                                      // chars maxi (infini par defaut)
1056         prompt=">"
1057         entry_type=""                                           // text, integer, positive_integer, alpha, alpha_num, password
1058         menu_r=""
1059         max_historic="0"                                        // Si !=0 enable l historique de l editBox (4Dos like). Sinon donne la taille de l historique
1060         >
1061         <view id="edit_text" type="text">
1062 </group>
1064 MODIFIABLE:     input_string (string)
1065                         uc_input_string (ucstring)
1068 // ***************************************************************************
1069 // <group type="build_sentence_magic" />
1070 // ***************************************************************************
1072 BUT:
1073 Widget de composition de magie
1075 SYNTAXE:
1076 <group type="build_sentence_magic" >
1077         // Brick racine
1078         <ctrl type="sheet" id="root_brick" nature="brick" />            
1079         // Brick mandatory
1080         <vector template="ctrl_brick_mandatory" id="mandatory_brick$i" _size="%BRICKS_PER_SENTENCE" index="$i" />
1081         // Brick optional
1082         <vector template="ctrl_brick_optional" id="optional_brick$i" _size="%BRICKS_PER_SENTENCE" index="$i" />
1084         // bouton de validation
1085         <ctrl type="button" id="valid_button" />
1086 </group>
1089 // ***************************************************************************
1090 // <group type="build_sentence_faber" />
1091 // ***************************************************************************
1093 BUT:
1094 Widget de composition de magie
1096 SYNTAXE:
1097 <group type="build_sentence_faber" >
1098         // Brick racine
1099         <ctrl type="sheet" id="root_brick" nature="brick" />            
1100         // Brick optional
1101         <vector template="ctrl_brick_optional" id="optional_brick$i" _size="%BRICKS_PER_SENTENCE" index="$i" />
1102         // bouton de validation
1103         <ctrl type="button" id="valid_button" />
1105         // Tool
1106         <ctrl type="sheet" id="tool" nature="item" />
1107         // MPs
1108         <vector template="ctrl_faber_mp" id="mp$i" _size="%MAX_FABER_REQ_MP" index="$i" />
1109         // Select number
1110         <group type="select_number" id="select_num_items" value="bricks:faber:num_items" loop="false" min="1" max="1" >
1111         </group>
1112 </group>
1116 // ***************************************************************************
1117 // <group type="list_sentence" />
1118 // ***************************************************************************
1120 BUT:
1121 Widget d'affichage des sentence connues. cf list_job pour le lien "list_sentence"
1124 SYNTAXE:
1125 <group type="list_sentence" id="pipo0" 
1127         wspace="2" hspace="2"           // donne l espacement entre chaque slot. 0 par defaut
1129         lmargin="12"                            // Marges left, right Top et bottom des slots par rapport au group. Defaut:0. Il Faut en mettre si ya une scrollBar et des bouton +- forcément...
1130         rmargin="2"
1131         tmargin="12"
1132         bmargin="2"
1134         rowmin="0"                                      // Nombre de ligne minium affichées. Defaut: 1. 
1135                                                                 // Important si on veut par exemple afficher la liste des malus vide sans que le groupe se resize à H=0 (vide)
1137         rowmax="2"                                      // Nombre de ligne maximum affichés. Defaut: infini. 
1138                                                                 // Important si on veut afficher qu une seule ligne toujours (pour les malus par exemple) 
1139                                                                 // quelque soit la largeur du parent. C est cette valeur qui est éditée par les boutons +- (si présents)
1141         sep_slot0=""                            // Image pour le separateur Root-Mandatory
1142         sep_slot1=""                            // Image pour le separateur Mandatory-Optional
1143         sep_w0="0"                                      // décalage Root-Mandatory
1144         sep_w1="0"                                      // décalage Mandatory-Optional
1146         selected_color="255 255 255 255"        // couleur du highlight de la sentence selectionnée
1148         // Paramètres communs au ctrl type="sheet". Voir ce control pour les détails
1150         nature=""                                       // forcé en type brick
1151         tx_noitem=""
1152         onclick_l=""
1153         params_l=""
1154         onclick_r=""
1155         params_r=""
1156         dragable=""
1157         oncandrop=""
1158         params_candrop=""
1159         ondrop=""
1160         params_drop=""
1161         menu_l=""
1162         menu_r=""
1163         menu_b=""
1164         >
1166         // Le mode "Resize" n'existe pas en fait. Le scripteur est libre de mettre ou pas une scroll bar et/ou des boutons qui permettent de changer rowmax
1168         <ctrl type="button" id="add_row" button_type="push_button" posref="TR TR" tx_normal="W_arrow_up_3.tga" tx_pushed="W_arrow_up_3.tga" tx_over="W_button_08_over.tga" />
1169         <ctrl type="button" id="sub_row" button_type="push_button" posparent="add_row" posref="TL TR" tx_normal="W_arrow_down_3.tga" tx_pushed="W_arrow_down_3.tga" tx_over="W_button_08_over.tga" />
1170         
1171         // Setup tyipque de scrollBar. L'alignement est hardocé pour etre Top. Le y devrait etre egal à "-tmargin" du group list_sheet
1173         <ctrl type="scroll" id="scroll_row" posref="TL TL" w="8" x="2" y="12" 
1174                 <!-- choix des textures de la scroll -->
1175                 tx_bottomleft= "w_scroll_l123_b.tga"
1176                 tx_middle= "w_scroll_l123_m.tga"
1177                 tx_topright= "w_scroll_l123_t.tga"
1179 </group>
1181 // ***************************************************************************
1182 // <group type="combo_box" />
1183 // ***************************************************************************
1185 BUT:
1186 affiche une combo_box. Un bouton sur un texte qui fait apparaitre un menu de selection de texte quand on clique dessus
1189 SYNTAXE:
1190 <group type="combo_box" 
1191         value=""                                        // Valeur de la database qui indique l index de selection de la comboBox.
1192         on_select_start=""                      // optionnel. ActionHandler appelé après ouverture des choix de la combo box
1193         >
1194         // Text qui affiche le choix courant.
1195         <view type="text" id="text" />
1196         // Boutton qui sert pour ouvrir la liste.
1197         <ctrl type="button" button_type="push_button" id="select" />
1198         // ajoute un choix pour la combo_box
1199         <combo_text     name="" />              
1200 </group>
1202 Note: il faut que "ui:interface:combo_box_select_menu" soit définie comme un <group type="menu"> avec
1203 les paramètres d'aspect que l'on veut. Les champs actions sont remplies quand la combo_box est ouverte
1205 EXEMPLE:
1206 Ce setup permet de faire une combo box ou le bouton est invisible et recouvre en fait tout le group:
1207 si on clique sur le texte, on ouvre alors la liste de choix.
1209 <group type="combo_box" id="combo1" w="100" h="18"
1210         value="UI:COMBO_SELECT1"
1211         >
1212         // un cadre juste pour faire joli
1213         <instance template="box_widget" id="back" sizeref="wh" w="0" h="0" />
1215         // notre text
1216         <view type="text" id="text" posref="ML ML" x="2" />
1217         // Note pas de texture définie sauf l'over: c fait exprès.
1218         <ctrl type="button" button_type="push_button" id="select" sizeref="wh" w="0" h="0" col_over="255 255 255 128" tx_over="blank.tga" scale="true" />
1220         <combo_text     name="choix 1" />               
1221         <combo_text     name="choix 2" />               
1222         <combo_text     name="choix 3" />               
1223         <combo_text     name="choix 4" />               
1225 </group>
1227 // ***************************************************************************
1228 // <group type="tree" />
1229 // ***************************************************************************
1231 hérite de group
1233 BUT:
1234 affiche un arbre (comme un menu)
1236 EXEMPLE:
1237 <group type="tree" id="pipo" col_over="255 255 255 128" col_select="255 128 128 128" fontsize="12" >
1238         <node id="invit"        name="uimGcmInvit" handler="" params="" />
1239         <node id="harvest1"     name="uimGcmHarvest" opened="true" >
1240                 <node id="dig"          name="uimGcmDigging"/>
1241                 <node id="har"          name="uimGcmHarvesting"/>
1242         </node>
1243 </group>
1245 Sur les nodes qui contiennent des fils on peut setuper la valeur de départ à ouvert ou fermé
1247 // ***************************************************************************
1248 // <group type="html" />
1249 // ***************************************************************************
1251 <group type="html" 
1252         error_color="255 0 0"                           // Error color
1253         link_color="128 128 255"                        // Link color
1254         text_color="255 255 255"                        // Text color
1255         h1_color="128 255 255"                          // Headline 1 color
1256         h2_color="255 128 255"                          // Headline 2 color
1257         h3_color="255 255 128"                          // Headline 3 color
1258         h4_color="255 255 255"                          // Headline 4 color
1259         h5_color="255 255 255"                          // Headline 5 color
1260         h6_color="255 255 255"                          // Headline 6 color
1261         error_color_global_color="false"        // Error uses global color
1262         link_color_global_color="false"         // Link uses global color
1263         text_color_global_color="false"         // Text uses global color
1264         h1_color_global_color="false"           // Headline 1 uses global color
1265         h2_color_global_color="false"           // Headline 2 uses global color
1266         h3_color_global_color="false"           // Headline 3 uses global color
1267         h4_color_global_color="false"           // Headline 4 uses global color
1268         h5_color_global_color="false"           // Headline 5 uses global color
1269         h6_color_global_color="false"           // Headline 6 uses global color
1270         text_font_size="12"                                     // Text font size
1271         h1_font_size="24"                                       // Headline 1 font size
1272         h2_font_size="20"                                       // Headline 2 font size
1273         h3_font_size="16"                                       // Headline 3 font size
1274         h4_font_size="16"                                       // Headline 4 font size
1275         h5_font_size="16"                                       // Headline 5 font size
1276         h6_font_size="16"                                       // Headline 6 font size
1277         paragraph_begin_space="12"                      // Space between paragraphs
1278         multi_line_space_factor="0.25"          // Space between 2 lines of a paragraph. Factor of the font size
1279         td_begin_space="0"                                      // Space at the beginning of a table cell
1280         li_begin_space="4"                                      // H space when "<IL>"
1281         ul_begin_space="12"                                     // H space when "<UL>"
1282         li_indent="-10"                                         // W space when "<LI>"
1283         ul_indent="30"                                          // W space when "<UL>"
1284         form_text_area_group="edit_box_widget"          // The group to instanciate for a form edit box. It must have a child group CGroupEditBox* with the id "eb"
1285         checkbox_bitmap_normal="checkbox_normal.tga"    // The "off" bitmap use in form checkbox
1286         checkbox_bitmap_pushed="checkbox_pushed.tga"    // The "on" bitmap use in form checkbox
1287         checkbox_bitmap_over="checkbox_over.tga"                // The "over" bitmap use in form checkbox
1288         background_bitmap_view="bg"                     // The name of the child bitmap view used for background
1289         home="http://www.nevrax.org"            // The home url (you can browsse to the home url with the url "home"
1290         browse_next_time="false"                        // If true, the url is browsed when the group is created
1292 </group>
1294 // ***************************************************************************
1295 // <group type="quick_help" /> (derived from HTML)
1296 // ***************************************************************************
1298 <group type="quick_help" 
1299         non_selected_color="255 0 0"            // The unselected paragraphes color
1300         non_selected_link_color"0 0 128"        // The unselected link color
1301         non_selected_global_color="true"        // The unselected paragraphes uses gobal color
1302         non_selected_font_size="10"                     // The unselected paragraphes font size
1304 </group>
1306 // ***************************************************************************
1307 // <group type="in_scene" /> (derived from group)
1308 // ***************************************************************************
1310 <group type="in_scene" 
1311         in_scene_offset_x="12"                          // Offset in pixels
1312         in_scene_offset_y="12"                          // Offset in pixels
1314 </group>
1316 // ***************************************************************************
1317 // <group type="table" /> (derived from group)
1318 // ***************************************************************************
1320 a html-like table :
1322 The table is essentially an array. Each line must have the same number of cells.
1323 The width of the table can be arbitrary. Either sizeref="w" or a fixed w can be used. 
1324 using child_resize_w has undefined results.
1325 The height or the table is imposed by its children cells (like with html table)
1327 Table is specified using the standard <TR> & <TD>
1329 // option for the table :
1330 border : the same the html tables 'border'
1331 cellpadding : the same the html tables 'cellpadding'
1332 cellspacing : the same the html tables 'cellspacing'
1333 bgcolor     : background color with format "R G B A" ("255 0 0 255" for example)
1334 width           : wanted width of table in pixels (same than html "width"). could be a ratio like "100%"
1335                           usually the table will specify sizeref="w" or w and width="100%"
1336 continuous_update : whan set to true, the table will be updated continuously has its parent container is resized, and not when mouse left button is released only
1338 // options for the cells (<TD> tag)
1339 Cells can have an id. If none is given a id like cell_1_2 id generated (first number is column, second is row)
1340 align  : horizontal alignment of cell content. Can be "left", "right" or "center" (same than HTML 'align')
1341 valign : vertical alignment of cell content. Can be 'top", "middle" or "bottom" (same than HTML 'valign')
1342 left_margin : offset added to the x position of the cell content
1343 nowrap : same then htlm table 'nowrap'
1344 bgcolor : color of the cell background (with the "R G B A" format)
1345 width : same then htlm table 'width' : gives width of column for that cell, or a percentage
1346 add_child_w : take the wanted size from the size of the children (equivalent to child_resize_h), and add the 'width' (not added if a percentage)
1347 height : minimum height of the cell
1348 ignore_max_width : if "true", the cell content max_used_w is ignored when computing the width of the cell
1349 ignore_min_width : if "true", the cell content min_used_w is ignored when computing the width of the cell
1353 <group type="table" id="my_table" posref="TL TL" sizeref="w" width="100%" border="2" bgcolor="0 255 0 255" y="-4"
1354                          cellspacing="1"
1355                          cellpadding="0"
1356                          continuous_update="true"
1357                         > 
1358                 <!-- test 1 -->                                                 
1359                 <TR>
1360                         <TD width="30%" bgcolor="0 0 0 127" height="30" align="center" valign="middle" id="optionnal_id">
1361                                 <view type="text" id="mon_text" global_color="true" fontsize="20" shadow="true" hardtext="cell 1 cell 1 cell 1 cell 1"
1362                                  multi_line="true"
1363                                 />                                      
1364                         </TD>
1365                         <TD bgcolor="255 0 0 127" height="30" align="center" valign="middle">
1366                                 <view type="text" id="mon_text" global_color="true" fontsize="20" shadow="true" hardtext="cell 2"/>
1367                         </TD>
1368                 </TR>
1369                 <TR>
1370                         <TD width="30%" bgcolor="0 0 0 192" height="30" align="center" valign="middle">
1371                                 <view type="text" id="mon_text" global_color="true" fontsize="20" shadow="true" hardtext="cell 3"/>
1372                         </TD>
1373                         <TD bgcolor="0 0 255 192" height="30" align="center" valign="middle">
1374                                 <view type="text" id="mon_text" global_color="true" fontsize="20" shadow="true" hardtext="cell 4"/>
1375                         </TD>
1376                 </TR>                   
1377                 <!--                    
1378                 <TR>                            
1379                         <TD width="100%" bgcolor="255 0 0 127" height="30">
1380                                 <view type="text" posref="TL TL" global_color="true" fontsize="20" shadow="true" hardtext="cell 2"/>
1381                         </TD>
1382                 </TR>                   
1383                 -->
1384         </group>                
1385 </group>
1387 // ***************************************************************************
1388 // ***************************************************************************
1389 // MISC: DEFINE, PROCEDURES, TEMPLATES, ANIM, SCENE3D, ...
1390 // ***************************************************************************
1391 // ***************************************************************************
1394 // ***************************************************************************
1395 // <define>
1396 // ***************************************************************************
1398 BUT:
1399 Permet de definir une constante.
1401 SYNTAXE:
1402 <define id="id_du_define" value="valeur_a_remplacer" />
1404 EXAMPLE:
1405 <define id="pipo_title" value="yoyo" />
1406 ....
1407 <group type="container" id="player" title="Hello %pipo_title" >
1410 Comme ca "Hello %pipo_title" est remplacé par "Hello yoyo"
1412 L'id du define ne peut contenir que les charactères:
1413     'a' à 'z'    
1414     'A' à 'Z'
1415     '0' à '9'
1416     '_'
1419 Du coup si vous voulez vraiment afficher un % dans une string (par exemple "25 %"), il faut l'ecrire en double "25 %%"
1422 // ***************************************************************************
1423 // <proc>
1424 // ***************************************************************************
1426 BUT:
1427 Definit un action handler special qui lance des action handlers à la suite
1430 SYNTAXE:
1431 <proc id="nom_procedure" >
1432         <action handler="action_handler0" params="" />
1433         <action handler="action_handler1" params="" />
1434         <action handler="action_handler2" params="@0|@1" />
1435 </proc>
1437 les paramètres sont optionnels.
1438 un action handler peut etre lui meme une autre procedure (attention recursivité :))
1440 La procédure se lance en utilisant l'action handler "proc" avec comme paramètre "nom_procedure"
1442 La procédure peut prendre des paramètres en entrée (voir l'action handler proc pour comment faire).
1443 Pour chaque action, le champ params="" est parsé. Tout chaine de type @#, ou # est un numéro 
1444 (à N chiffres) copiera alors le paramètre (simple copie de chaine) au moment de l'appel.
1446 Note: de la même facon que les % dans les define, un double @ permet de ne pas considérer l'@ comme un descripteur
1447 de paramètre
1449 EXAMPLE:
1450 <proc id="select_quit_modal" >
1451         <action handler="exchange" params="src=ctrl_launch_modal" />
1452         <action handler="leave_modal" />
1453 </proc>
1455 ....
1457 <ctrl type="button" onclick_l="proc" params_l="select_quit_modal">
1460 EXAMPLE paramètres:
1461 <proc id="set_quit_modal" >
1462         <action handler="set" params="dblink=SERVER:PIPO|value=@0" />
1463         <action handler="leave_modal" />
1464 </proc>
1466 ....
1468 <ctrl type="button" onclick_l="proc" params_l="set_quit_modal|10">
1470 Dans cet exemple, sur un cliok gauche du bouton, set sera appelé avec une valeur de 10!!
1471 Notez que l'index des paramètres commence à 0.
1475 // ***************************************************************************
1476 // <template>
1477 // ***************************************************************************
1479 BUT:
1480 Definit un patron qui permet d'instancier des groups, ctrls ou vues qui se ressemblent.
1482 SYNTAXE:
1483 Definition du template:
1484 <template name="nom_du_template" ...paramètres du template...>
1485         corps du template (group, controls etc...) qui reference les paramètres du template avec #
1486 </template>
1488 Instanciation du template:
1489 <instance template="nom_du_template" paramètres du template remplis />
1491 EXAMPLE:
1492 <!--Definit un template de nom "SNH" qui attend des paramètres id, value, loop etc... (si "" est mis à un paramètres, 
1493         celui-ci doit etre défini à l'instanciation)
1495 <template name="SNH" id="" value="" loop="true" min="0" max="9" posparent="parent" posref="MM MM" x="0" y="0" w="26" h="16" >
1496         <group type="select_number" id="#id" value="#value" loop="#loop" min="#min" max="#max" x="#x" y="#y" w="#w" h="#h" posparent="#posparent" posref="#posref" >
1497                 <view type="bitmap" id="slot_number" posref="TL TL" texture="W_slot_number.tga" />
1498                 <view type="text" id="number" posparent="slot_number" posref="MM MM" color="255 255 255 255" fontsize="12" shadow="true" hardtext="0" />
1499                 <ctrl type="button" id="arrow_up" button_type="push_button" posref="TR TR" tx_normal="W_arrow_up_3.tga" tx_pushed="W_arrow_up_3.tga" tx_over="W_button_08_over.tga" />
1500                 <ctrl type="button" id="arrow_down" button_type="push_button" posref="BR BR" tx_normal="W_arrow_down_3.tga" tx_pushed="W_arrow_down_3.tga" tx_over="W_button_08_over.tga" />
1501         </group>
1502 </template>
1504 <!--Instancie le template SNH
1506 <instance template="SNH" id="shortnumber" value="SERVER:USER:SAP" loop="true" min="0" max="9" posref="ML ML" />
1509 // ***************************************************************************
1510 // <vector>
1511 // ***************************************************************************
1513 BUT:
1514 Create an array of template's instances (mutli instance version of <instance>)
1516 SYNTAXE:
1517 <vector
1518         template="template_name"                // as in <instance....
1519         _size=""                                                // required. number of isntance to create
1520         _firstindex="0"                                 // optional to begin the index of instance to a number!=0
1522         // Next ones are required only if the template is a serie of interface elements (group, view....)
1523         // that need to be sticked against each other (eg: a vertical array of view text)
1524         _firstpos=""                                    // posref (TL TL...) of the first element, sticked to the parent
1525         _nextpos=""                                             // posref (TR TL...) of next elements, sticked to the previous one
1526         _xfirst=""                                              // special x of the first element
1527         _yfirst=""                                              // special y of the first element
1530 Then for each instance created, All properties of the XML node are parsed, and $i are replaced with the index of the instance
1532 EXAMPLE:
1533 <template name="temp_tab" keep="true" nb="" id="" posparent="" posref="" x="" >
1534         <ctrl style="tab_button_new" id="#id" posparent="#posparent" posref="#posref" 
1535                 group="content:group#nb" text="TabNo#nb" />
1536 </template>
1538 <vector template="temp_tab" _size="16" _firstpos="TR TL" _nextpos="TR TL" _xfirst="4" x="1" id="tab_array0_$i" nb="$i" posparent="tabref" />
1540 This will create 16 instances of ctrls (tab_array0_0, tab_array0_1, tab_array0_2....)
1541         The first one will be placed on right of "tabref", but with a x of 4 (_firstpos="TR TL" _xfirst="4")
1542         The next ones will be placed on right of each other, but sticked with a x of 1 (_nextpos="TR TL" x="1" )
1544 NB: if '_xfirst' is not defined, then 'x' will be taken for the first position also
1545 NB: if '_yfirst' is not defined, then 'y' will be taken for the first position also
1546 NB: Both _firstpos/_nextpos must be defined in order for the "stick system" to work
1547         also you must declare id="", posparent="" and posref="" in the template definition.
1550 // ***************************************************************************
1551 // <variable>
1552 // ***************************************************************************
1554 BUT: 
1555 crée une variable et associe une valeur
1557 SYNTAXE:
1558 <variable 
1559         entry=""                        // Obligatoire. lien vers la database.
1560         type=""                         // Obligatoire. sint32, sint64, float, double, bool, rgba, hotspot. 
1561                                                 // float et double on le meme effet
1562         value=""                        // valeur à mettre
1563         size=""                         // Si définit, alors <variable> sert à définir un tableau.
1566 EXAMPLE:
1567 <variable entry="UI:MODE" type="sint32" value="0"/>
1569 Dans le cas de définition d'un tableau, le premier "$i" rencontré est remplacé par l'index de 0 à size-1.
1570 <variable entry="UI:LIST:$i:SHEET" type="sint32" value="0" size="4" />
1572 // ***************************************************************************
1573 // <link>
1574 // ***************************************************************************
1575 BUT:
1576 lié une expression à une valeur d'une vue (target). L'expression doit dependre d'entrée de la database. A chaque fois qu'une
1577 entrée de la database est updatée, l'expression est recalculée, et le target est updatée.
1579 SYNTAXE:
1581 <link 
1582  expr=""     // obligatoire : expression a évaluer. L'expression doit dépendre au moins d'une entrée de la database
1583  target=""   // valeurs auxquelles doit etre affectée le résultat de l expression, relatif au groupe qui contient le link, ou considéré comme une adresse absolue si non trouvé
1584  action=""   // facultatif  : un action handler a appeller en cas d update
1585  params=""   // facultatif  : paramètre pour l action handler
1586  cond=""         // facultatif  : condition à l'execution de l'action handler
1589 EXAMPLE:
1591 <view type="bitmap" id="my_view" >
1592 <link expr="ne(@my_db_entry, 0)" target="my_view:active,my_other_view:active"/> // si l entrée de database 'my_db_view' ne vaut pas 0, alors my_view:active est mis à true
1594 CREATION DYNAMIQUE DE LIEN:
1595 Elle est utile si on veut que les update ne soient pris en compte qu'à un moment précis (par exemple dans une boite modale)
1596 C'est sutout bien dans le cas de test couteux ou si des textes non visibles sont updatés pour rien.
1598 // création :
1599 handler="add_link" params="id=identifier_unique|expr=expression_a_evaluer|target=dest_de_lexpression"
1601 // supression:
1602 handler="remove_link" params="id=identifier_unique|expr=expression_a_evaluer|target=dest_de_lexpression"
1605 par exemple, en reprenant l exemple precedent:
1607 handler="add_link" params="id=mon_lien|expr=ne(@my_db_entry, 0)|target=my_view:active" 
1608 handler="remove_link" params="id=mon_lien"
1610 // ***************************************************************************
1611 // <anim> <track> <key>
1612 // ***************************************************************************
1614 <anim 
1615         id="specie_in"                  // nom du timer
1616         duration="3.0"                  // temps en seconde pour faire varier l entree dans la database
1617         loop="true"                             // est ce que l anim doit boucler ?
1618         reverse="false"                 // est ce que l anim doit etre jouee a l envers 
1619         on_finish="ahwhenfini"  // action handler a lancer quand le timer arrive a la fin
1620         on_finish_params="ahp"  // les parametres de l action handler
1623 <track 
1624         type="linear"                   // linear, bezier, tcb
1625         target="specie:race:y"  // all the targets affected may be more than one
1626         dynamic="true"                  // (def:false) si true evalue tous les parametres des cles lors du lancement de l anim
1629 Si la track est de type linear :
1630 <key
1631         time="1.0"                              // Une valeur de temps comprise entre 0 et la duration de l anim
1632         value="15"                              // la valeur que prennent les targets au temps : time
1635 Si la track est de type bezier :
1636 <key
1637         time="1.0"                              // Une valeur de temps comprise entre 0 et la duration de l anim
1638         value="15"                              // la valeur que prennent les targets au temps : time
1639         intan="0.0"                             // float facultatif def:0               ???? aucune idee de ce a quoi ca peut servir
1640         outtan="0.0"                    // float facultatif def:0               ???? aucune idee de ce a quoi ca peut servir
1641         step="true"                             // bool  facultatif def:false   ???? aucune idee de ce a quoi ca peut servir
1644 Si la track est de type TCB :
1645 <key
1646         time="1.0"                              // Une valeur de temps comprise entre 0 et la duration de l anim
1647         value="15"                              // la valeur que prennent les targets au temps : time
1648         tension="1.0"                   // float facultatif def:0
1649         continuity="0.0"                // float facultatif def:0
1650         bias="1.0"                              // float facultatif def:0
1651         easeto="0.1"                    // float facultatif def:0
1652         easefrom="0.3"                  // float facultatif def:0
1656         
1658 un exemple typique est :
1660 <group id="specie" sizeref="wh" on_active="anim_start" on_active_params="anim=t1">
1661         <group id="race" posref="BL BL" x="16" y="64">
1662         </group>
1663 </group>
1665 <anim id ="t1" duration="3.0" >
1666         <track type="linear" target="specie:race:y">
1667                 <key time="0.0" value="-16"/>
1668                 <key time="3.0" value="64"/>
1669         </track>
1670 </anim>
1672 quand on va activer le groupe specie cela va lancer l'animation  t1. la valeur
1673 specie:race:y va etre modifiee -> cela va faire monter le groupe specie:race
1676 // ***************************************************************************
1677 // <scene3d> <character3d> <ig> <camera> <light>
1678 // ***************************************************************************
1680 // ---------------------------------------------------------------------------
1681 <scene3d
1682         reference="id_scene3d"          // Donne la reference sur une autre scene 3d (dans ce cas la c est juste une vue sur une autre scene)
1683         ambient="0 0 0" 
1684         sun_ambient="50 50 50" 
1685         sun_diffuse="255 255 255" 
1686         sun_specular="255 255 255" 
1687         sun_direction="-1.0 1.0 -1.0"
1688         curcam="id_camera"                      // Camera courante
1689         curcs="id_camera"                       // Cluster system courant (un ig avec des clusters)
1691         user_interaction="true"         // Interaction camera (qui doit etre callée en y (ie camx=tgtx & camz=tgtz)
1692         rotz_factor="0.005"                     // Facteur de vitesse lors d une rotation autour
1693         rotz_limit_min="-45"            // Limites d angles
1694         rotz_limit_max="45"
1695         roty_factor="0.005"                     // Facteur de vitesse lors d une rotation haut-bas
1696         roty_limit_min="-20"
1697         roty_limit_max="20"
1698         dist_factor="0.005"                     // Facteur de vitesse lors d un deplacement de distance
1699         dist_limit_min="0.1"            // Limites de distances en metres
1700         dist_limit_max="20"
1704 DERIVANT DE <group>
1706 MODIFIABLE: curcam (string)
1707                         curcs (string)
1708                         rotzfactor (float)
1710 // ---------------------------------------------------------------------------
1711 <character3d
1712         dblink="UI:TEMP:CHAR3D"
1713         pos="1.0 2.0 3.0"
1714         rot="0.0 0.0 90.0"
1717 MODIFIABLE: headx, heady, headz (float la position de la tete apres au moins une frame d animation)
1718                         posx, posy, posz (float la position)
1719                         rotx, roty, rotz (float angle en degres)
1720                         anim (int)
1722 // ---------------------------------------------------------------------------
1724         name="ig_name.ig"
1725         pos="1.0 2.0 3.0"
1726         rot="1.0 2.0 3.0"
1729 MODIFIABLE: posx, posy, posz (float la position)
1730                         posx, posy, posz (float l orientation en degree)
1731                         name (string)
1733 // ---------------------------------------------------------------------------
1734 <shape
1735         name="shape_name.shape"
1736         pos="1.0 2.0 3.0"
1737         rot="1.0 2.0 3.0"
1740 MODIFIABLE: posx, posy, posz (float la position)
1741                         posx, posy, posz (float l orientation en degree)
1742                         name (string)
1744 // ---------------------------------------------------------------------------
1745 <camera
1746         pos="1.0 2.0 3.0"
1747         target="2.0 3.0 4.0"
1748         fov="50.0"
1749         roll="0.0"
1752 MODIFIABLE: posx, posy, posz (float la position)
1753                         tgtx, tgty, tgtz (float la position de la target)
1754                         fov (float angle en degree)
1755                         roll (float angle en degree)
1757 // ---------------------------------------------------------------------------
1758 <light
1759         pos="1.0 2.0 3.0"
1760         near="3.0"
1761         far="10.0"
1762         color="127 255 64 255"
1765 MODIFIABLE: posx, posy, posz (float la position)
1766                         near, far (float)
1767                         colr, colg, colb (int)
1769 // ---------------------------------------------------------------------------
1771         name="sp_cast_loop.ps"
1772         pos="1.0 2.0 3.0"
1773         rot="0.0 0.0 0.0"
1776 MODIFIABLE: posx, posy, posz (float la position)
1777                         rotx, roty, rotz (float la rotation)
1778                         started (bool le fx est il en train d etre joue ?)
1781 un exemple typique :
1783 <scene3d id="char3d" x="576" y="-32" w="576" h="488" posref="TR TR" curcam="cam" 
1784                                         ambient="0 0 0" sun_ambient="50 50 50" sun_diffuse="255 255 255" sun_specular="255 255 255" sun_direction="-1.0 1.0 -1.0" >
1786         <character3d id="char" dblink="UI:TEMP:CHAR3D" pos="0.07 26.52 0.85" rot="0.0 0.0 -90.0" />
1788         <camera id="cam" fov="45" pos="0.01 22.29 2.5" target="0.01 37.9 1.53" roll="0" />
1790         <light id="l1" pos="-1.0 24.29 2.0" color="0 255 0" near="1.0" far="5.0" />
1792         <ig id="env" name="matis.ig" pos="0 0 0" />
1794         <fx id="fx1" pos="0.0 0.0 0.0" name="Sp_Cast_Loop.ps" />
1796 </scene3d>
1798 // ***************************************************************************
1799 // <action_category > 
1800 //              <action> 
1801 //                      <parameter> 
1802 //                              <value>
1803 // ***************************************************************************
1805 // Definition d'une category d'action
1806 <action_category 
1807         hardtext="uiUI"                 // Nom de la category localisé (defaut : "")
1810 // ---------------------------------------------------------------------------
1812 // Une definition d'action de base
1813 <action 
1814         repeat="0"                              // 1 : l'action est répétée avec la répétition clavier, 0 : elle n'est pas répétée. (defaut : 0)
1815         name="screenshot"               // Nom de l'action handler utilisé par l'action (defaut : "")
1816         hardtext="uiTakeScreenshot"                     // Nom localisé de l'action (defaut : "")
1819 // ---------------------------------------------------------------------------
1821 // Un paramètre d'action de base
1822 <parameter
1823         type="action_param_constant"    // Type de paramètre :
1824                                                                         // action_param_hidden : le paramètre est caché à l'utillisateur
1825                                                                         // action_param_constant : le paramètre est une valeur prédéterminée (voir <value>)
1826                                                                         // action_param_user : le paramètre est entré par l'utilisateur. Tous les characters sont permis.
1827                                                                         // action_param_user_name : le paramètre est entré par l'utilisateur. Uniquement les characters permis dans les noms sont utilisés.
1828                                                                         // (defaut : action_param_constant)
1829         name="filename"                         // Nom du paramètre (defaut : "")
1830         hardtext="uiFilename"           // Nom localisé du paramètre (defaut : "")
1831         value=""                                        // La valeur par defaut du paramètre (defaut : "")
1834 // ---------------------------------------------------------------------------
1836 // Une valeur prédéfinie de paramètre d'action de base
1837 <value
1838         value="toto"                            // La valeur (defaut : "")
1839         hardtext="uiToto"                       // Le nom localisé de la valeur (defaut : "")
1842 Exemple :
1844 <action_category hardtext="uiDivers">
1846         // Action pour envoyer un message à un joueur
1847         <action repeat="0" name="tell" hardText="uiTell">
1848                 <parameter type="action_param_user_name" name="user" hardText="uiUsername" visible="1"/>
1849                 <parameter type="action_param_user" name="message" hardText="uiMessage" visible="1"/>
1850         </action>
1852         // Action pour passer en mode labo
1853         <action name="set_mode" hardText="uiModelabo">
1854                 <parameter value="2" visible="0"/>
1855         </action>
1857         // Action pour ouvrir un inventaire de sac
1858         <action repeat="0" name="open_window" hardText="uiOpenWindow">
1859                 <parameter type="action_param_constant" name="" hardText="uiWindow" visible="1">
1860                         <value value="UI:BAG1" hardtext="uiBag1"/>
1861                         <value value="UI:BAG2" hardtext="uiBag2"/>
1862                         <value value="UI:BAG3" hardtext="uiBag3"/>
1863                 </parameter>
1864         </action>
1866 </action_category>
1868 // ***************************************************************************
1869 // <key> 
1870 // ***************************************************************************
1872 <key name="Key1" ctrl="0" shift="0" menu="0" action="run_shortcut" params="1"/>
1874 Bind a key combo to an action handler.
1876 // ***************************************************************************
1877 // ***************************************************************************
1878 // ACTIONS
1879 // ***************************************************************************
1880 // ***************************************************************************
1883 <action="enter_modal" params="group=ui:interface:yoyo_modal1">
1884 affiche la fenetre modal ui:interface:yoyo_modal1 ici.
1886 <action="leave_modal">
1887 cache la fenetre modal courante
1889 <action="proc" params="nom_procedure|arg0|arg1|...">
1890 lance une procédure. Les arguments sont séparés du nom de la procédure par des "|".
1892 <action="set" params="dblink=liendatabase|value=expr">
1893 set un sint32, resultat de l'evaluation de expr, dans la database.
1895 <action="set" params="target_property=target0,target1,...,targetn|value=expr">
1896 affecte le resultat de l'evaluation de expr a chacun des target (valeur exportée des elements de l'interface telle que 'active')
1898 <action="copy" params="dbdst=liendatabase|dbsrc=liendatabase">
1899 copie une valeur de la database dans une autre
1901 <oncandrop="isitem" params="">
1902 test si dropable est un item
1904 <oncandrop="isitem_slot" params="type=itemslot">
1905 test si dropable est un item d'un certain type (HEAD, ARMS...)
1907 <onfilter="filter_item" params_filter="type=itemslot">
1908 test si le ctrlSheet est un item d'un certain type (HEAD, ARMS...)
1909 à mettre sur les props de list_sheet
1911 <action="set_keyboard_focus" params="target=ui:interface_my_edit_box|select_all=true">
1912 Met le focus sur l'edit box en target. Selectionne tout le texte si select_all vaut true
1914 <on_active="timer_start" on_active_params="timer=specie_in">
1915 Lance un timer (voir <timer>)
1918 <action="set_server_id" params="value=@%user_name_id|target=player_name:uc_hardtext">
1919 Affecte une value a une target. La value represente un identifiant de mot reseau (nom des jouers par exemple)
1921 <action="set_server_string" params="value=@%user_name_id|target=player_name:uc_hardtext">
1922 Affecte une value a une target. La value represente un identifiant de chaine reseau (phrase composee de plusieurs mots)
1924 // ***************************************************************************
1925 // ***************************************************************************
1926 // COMMON EXPRESSIONS
1927 // ***************************************************************************
1928 // ***************************************************************************
1930 // ***************************************************************************
1932         arguments : 2
1933         return (arg1 + arg2)
1935 // ***************************************************************************
1937         arguments : 2
1938         return (arg1 - arg2)
1940 // ***************************************************************************
1942         arguments : 2
1943         return (arg1 * arg2)
1945 // ***************************************************************************
1947         arguments : 2
1948         return (arg1 / arg2)
1950 // ***************************************************************************
1952         arguments : 2
1953         return (arg1 % arg2)
1955 // ***************************************************************************
1957         arguments : 1
1958         return abs(arg1) (valeur absolue de arg1)
1960 // ***************************************************************************
1961 identity
1962         arguments : 1
1963         return (arg1)
1965 // ***************************************************************************
1967         arguments : 2
1968         return (arg1 != arg2)
1970 // ***************************************************************************
1972         arguments : 2
1973         return (arg1 == arg2)
1975 // ***************************************************************************
1977         arguments : 2
1978         return (arg1 <  arg2)
1980 // ***************************************************************************
1982         arguments : 2
1983         return (arg1 <= arg2)
1985 // ***************************************************************************
1987         arguments : 2
1988         return (arg1 >  arg2)
1990 // ***************************************************************************
1992         arguments : 2
1993         return (arg1 >= arg2)
1995 // ***************************************************************************
1997         arguments : n > 0
1998         return (arg1 || arg2 || ... || argn)
2000 // ***************************************************************************
2002         arguments : n > 0
2003         return (arg1 && arg2 && ... && argn)
2005 // ***************************************************************************
2007         arguments : 1
2008         return (!arg0)
2010 // ***************************************************************************
2012         arguments : n > 0
2013         converti tous les arguments en string et return arg1_str + arg2_str + ... + argn_str
2015 // ***************************************************************************
2017         arguments : 1
2018         converti l'argument en entier
2020 // ***************************************************************************
2021 ifthenelse
2022         arguments : 2 ou 3 (1er argument de type bool)
2023         retourne le 2eme argument si le 1er est vrai
2024         sinon retourne le 3eme argument (si il existe)
2026 // ***************************************************************************
2027 switch
2028         arguments : au moins 2 (1er argument de type int)
2029         retourne le n ieme argument ou n est la valeur du premier argument +1
2030         si arg1 vaut 0 on retourne arg2
2031         si arg1 vaut 1 on retourne arg3
2032         et ainsi de suite
2034 // ***************************************************************************
2035 ilinear
2036         arguments : 3 double (1er == interpolant (0 - 1.0)) (a 0 arg2 max, a 1 arg3 max)
2037         retourne arg2 + arg1 * (arg3 - arg2)
2039 // ***************************************************************************
2040 getbit
2041         arguments : 2 entiers (1er == valeur, 2nd == numero du bit desire)
2042         retourne le arg2_ieme bits de la valeur arg1
2044 // ***************************************************************************
2045 rand
2046         arguments : 2 double
2047         retourne une valeur comprise entre arg1 et arg2
2049 // ***************************************************************************
2050 dbcount
2051         arguments : 1 (string) (exemple : dbcount('SERVER:MODIFIERS:BONUS:$:SHEET')
2052         compte le nombre d occurences dans la database.
2053         si l entree est un noeud alors detecte qu il ne soit pas egal a zero
2054         il faut obligatoirement un $ (qui sera remplace par 0,1,2,...)
2056 // ***************************************************************************
2057 getprop
2058         arguments : 1 (string) (exemple : getprop('ui:interface:define_day_color:pick:b'))
2059         retourne la valeur MODIFIABLE d un element d interface
2061 // ***************************************************************************
2062 intToColor
2063         arguments : 1 (integer)
2064         retourne la meme valeur en rgba
2066 // ***************************************************************************
2067 getRed
2068         arguments : 1 (rgba)
2069         retourne la meme valeur du rouge
2071 // ***************************************************************************
2072 getGreen
2073         arguments : 1 (rgba)
2074         retourne la meme valeur du vert
2076 // ***************************************************************************
2077 getBlue
2078         arguments : 1 (rgba)
2079         retourne la meme valeur du bleu
2081 // ***************************************************************************
2082 getAlpha
2083         arguments : 1 (rgba)
2084         retourne la meme valeur de l alpha
2086 // ***************************************************************************
2087 makeRGB
2088         arguments : 3 ou 4 (int)
2089         retourne un rgb ou rgba
2091 // ***************************************************************************
2093         arguments : n>0 (int ou double)
2094         retourne la valeur minimum de tous les arguments
2096 // ***************************************************************************
2098         arguments : n>0 (int ou double)
2099         retourne la valeur maximum de tous les arguments
2101 // ***************************************************************************
2102 depends
2103         arguments : aucun
2104         retourne zero
2105         sert uniquement a creer des dependances sur des elements de database pour appeler des actions
2107 // ***************************************************************************
2108 identity
2109         arguments : n>0
2110         retourne le premier argument
2111         sert un peu comme depends mais en plus permet un setup direct d une target
2113 // ***************************************************************************
2114 band
2115         arguments : n>=0
2116         retourne AND bit à bit de tous les arguments. 0 si nargs==0.
2118 // ***************************************************************************
2120         arguments : n>=0
2121         retourne OR bit à bit de tous les arguments. 0 si nargs==0.
2123 // ***************************************************************************
2124 bxor
2125         arguments : n==2
2126         retourne XOR bit à bit des 2 arguments.
2128 // ***************************************************************************
2129 bnot
2130         arguments : n==1
2131         retourne NOT bit à bit de l'argument.
2135 // ***************************************************************************
2136 // ***************************************************************************
2137 // GAME EXPRESSIONS
2138 // ***************************************************************************
2139 // ***************************************************************************
2141 // ***************************************************************************
2142 isOpen
2143         TODO
2144         TODO
2146 // ***************************************************************************
2147 getCompassText
2148         arguments : 1
2149         convertit l'argument de type float (angle radian) en text
2151 // ***************************************************************************
2152 getPactText
2153         arguments : 1 entier
2154         convertit l'argument qui represente le numero du type de pacte en chaine de character
2156 // ***************************************************************************
2157 getDateText
2158         arguments : 1 entier
2159         convertit un jour ryzom (entier) en date sous le fromat 06 / 02 /03
2161 // ***************************************************************************
2162 getDifficultyText
2163         arguments : 1 entier
2164         retourne en ucstring le texte de difficulte internationalise
2166 // ***************************************************************************
2167 isCharSelSlotEmpty
2168         arguments : 1 entier
2169         retourne un booleen qui dit si le arg1_ieme (0-5) slot de character summary est vide ou non
2171 // ***************************************************************************
2172 getClientActionTypeText
2173         TODO
2174         TODO
2176 // ***************************************************************************
2177 getClientActionTypeColor
2178         TODO
2179         TODO
2181 // ***************************************************************************
2182 is2HandItem
2183         arguments : 1
2184         true si le sheetId définit un item à 2 mains
2186 // ***************************************************************************
2187 getSmoothServerTick
2188         arguments : 1
2189         convert a serverTick in smoothServerTick
2191 // ***************************************************************************
2192 getVSIndex
2193         arguments : 2 strings (exemple : getVSIndex('fy_cheveux_shave01.sitem','HEAD'))
2194         retourne (int) l index de visual slot en fonction d un nom d item et d un type de slot
2196 // ***************************************************************************
2197 getRoleId
2198         arguments : 1 string
2199         retourne un entier qui est le numero de la carriere (dans l enum)
2201 // ***************************************************************************
2202 getLightLevel
2203         arguments : 0
2204         donne le facteur de blend jour/nuit (un double de 0.0 a 1.0)
2206 // ***************************************************************************
2207 strToIntFlag
2208         arguments : 1 string (exemple : strToIntFlag('Combat'))
2209         retourne (int) le numero du flag correspondant a la string
2211 // ***************************************************************************
2212 getSheathSlot
2213         arguments : 1 string (exemple : getSheathSlot('ammo1'))
2214         retourne (int) le numero du fourreau en fonction de son nom
2216 // ***************************************************************************
2217 getInventorySlot
2218         arguments : 1 string (exemple : getInventorySlot('pack_animal1'))
2219         retourne (int) le numero du slot d inventaire en fonction de son nom
2221 // ***************************************************************************
2222 getEquipmentSlot
2223         arguments : 1 string (exemple : getEquipmentSlot('FingerL'))
2224         retourne (int) le numero du slot d equipement en fonction de son nom
2226 // ***************************************************************************
2227 getChatWin
2228         TODO
2229         TODO
2231 // ***************************************************************************
2232 // ***************************************************************************
2233 // USER EXPRESSIONS
2234 // ***************************************************************************
2235 // ***************************************************************************
2237 // ***************************************************************************
2238 getSelectedItemPrice
2239         arguments : 0
2240         Get the price of the current selected item (should come from bot inventory)
2242 // ***************************************************************************
2243 getDraggedSheet
2244         arguments : 0
2245         Get ptr object on the current dragged sheet
2247 // ***************************************************************************
2248 getSelectedSheet
2249         arguments : 0
2250         Get ptr object on the current selected sheet
2252 // ***************************************************************************
2253 getMenuItemSheet
2254         arguments : 0
2255         Get ptr object on the last sheet that trigerred menu.
2257 // ***************************************************************************
2258 getSheetID
2259         From a pointer on a sheet, get its sheetID
2261 // ***************************************************************************
2262 getSheetSelectionGroup
2263         From a pointer on a sheet, get its selection group name
2265 // ***************************************************************************
2266 getSheetName
2267         From a pointer on a sheet, or a sheet ID, get its name
2269 // ***************************************************************************
2270 getSheetIndex
2271         From a pointer on a sheet, get its index in the parent sheet list
2273 // ***************************************************************************
2274 getSheetQuantity
2275         From a pointer on a sheet, retrieve its quantity
2277 // ***************************************************************************
2278 getSheetQuality
2279         From a pointer on a sheet, retrieve its quality
2281 // ***************************************************************************
2282 isStackable
2283         From a pointer on a sheet, get its index in the parent sheet list
2285 // ***************************************************************************
2286 isTeleport
2287         From a pointer on a sheet or a sheet ID, test if an item is a teleport item
2289 // ***************************************************************************
2290 isPlainItem
2291         From a pointer on a sheet or a sheet ID, test if an item is a plain item (not a teleport, not a brick, not a pact)
2293 // ***************************************************************************
2294 isBrick
2295         From a sheet ID, test if an item is a brick
2297 // ***************************************************************************
2298 isPact
2299         From a sheet ID, test if an item is a pact
2301 // ***************************************************************************
2302 isRangeWeapon
2303         From a pointer on a sheet or a sheet ID, test if an item is a ran,ged weapon
2305 // ***************************************************************************
2306 isRoomLeftFor
2307         From a sheet ID, test if there's room for it in the inventory
2309 // ***************************************************************************
2310 getSelectionGroupNameFromId
2311         Get the name of a selection group from its id
2313 // ***************************************************************************
2314 getSelectionGroupIdFromName
2315         Get the id of a selection group from its name
2317 // ***************************************************************************
2318 getItemsWeight(basePath, firstItem, numItem)
2319         Get the sum of all item's weight at the given db path
2321 // ***************************************************************************
2322 getItemBranchsWeight(baseBranch, firstBranch, numBranch)
2323         Get the sum of all items located in several branchs
2325 // ***************************************************************************
2326 getSeedsWeight()
2327         Returns the weight of the seeds owned by the player
2329 // ***************************************************************************
2330 getArmoursWeight()
2331         Returns the weight of all armours pieces worn by the player
2333 // ***************************************************************************
2334 getInventoryWeight()
2335         Returns the weight of the whole inventory, not including beasts'inventory of course
2337 // ***************************************************************************
2338 getSheathWeight()
2339         Returns the weight of the sheaths
2341 // ***************************************************************************
2342 getBranchSheetCategory()
2343         return the types of items that are contained in a branch (with the enum CDBCtrlSheet::TSheetCategory
2345 // ***************************************************************************
2346 copySheet
2347         param 0 = pointer on a sheet, param 1 = dbAdress. 
2348         This copy characteristics of a sheet (quantity, quality, sheet id) at the given database adress