====== Configuration de l'interface client ====== L'interface du client de jeu (appelée communément GUI : [[https://fr.wikipedia.org/wiki/Interface_graphique|Graphical User Interface]]) est gérée par des fichiers //.xml// qui se trouvent dans le répertoire "code/ryzom/client/data/gamedev/interfaces_v3" des sources. \\ On y trouve également la documentation sur le contenu de ces fichiers, dans deux documents : interface.txt et interface_notes.txt. Pour plus de commodité et de façon à en détailler éventuellement les explications, leur contenu a été recopié ci-dessous puis réorganisé et traduit. À noter que depuis le Google Summer of Code 2012, un [[gitlab>khaganat/khanat-code/tree/develop/code/studio/src/plugins/gui_editor|plugin de Ryzom Core Studio]] permet d'éditer très partiellement l'interface avec un outil graphique. Bien qu'en partie corrigée et reformatée, cette page demande encore du travail pour être lisible. Des morceaux de "codes" seront sans doute plus lisible en tableau ; il y a beaucoup d'anglicisme (mais c'est peut-être plus simple pour les informaticiens de les laisser). Faites-vous plaisir, éditez ! \\ Fait jusqu'à [[#CONTROLS]] --- //[[user:yannk|YannK]] 2016/12/21 23:24// {{INLINETOC}} ===== Commandes d'interface ===== Définition des commandes et des paramètres de l'interface. **Note:** dans la syntaxe et la description des paramètres, la valeur indiquée est la valeur par défaut. **Note:** le X va vers la droite, le Y vers le haut. Les valeurs sont en pixels. **Note:** //**DÉRIVÉ DE**// veut dire qu'on peut mettre les mêmes paramètres que celui de qui on dérive. Les modifiables sont aussi héritées. **Note:** //**MODIFIABLE**// veut dire que l'on peut modifier dynamiquement un paramètre dans le script (avec un link par exemple). **Note:** //**OBLIGATOIRE**// veut dire que l'option doit être présente sinon il y a crash ou non fonctionnement. **Note:** Identifiant de localisation locale de type string (fait référence à un //id// de [[gitlab>khaganat/khanat-ressources/blob/lirria/translation/work/wk.uxt|wk.uxt]] par exemple). Identifiant de localisation réseau de type //integer//. ===== BASICS ===== Chaque //VIEW//, //CONTROL//, ou //GROUP// peut avoir les paramètres suivants. DÉRIVÉ DE //interface_element//. ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |id| |id de l’élément. **OBLIGATOIRE**| |active|true|affiche ou pas **MODIFIABLE**| |x|0|position en X relative posref et posparent **MODIFIABLE**| |y|0|position en Y relative posref et posparent **MODIFIABLE**| |w|0|Taille de l’élément. Si l’élément possède un parent, prend le W du parent par défaut **MODIFIABLE**| |h|0|Taille de l’élément. Si l’élément possède un parent, prend le H du parent par défaut **MODIFIABLE**| |posref|BL BL|position de référence (Bottom Left, MiddleMiddle etc...). Se lit "PositionDuParent MaPosition". Ex: "BL TR" signifie "mon Top Right est fixé sur le Bottom Left du parent"| |posparent|parent|Definit le parent de l’élément pour ce qui est du positionnement| |sizeref| |valeurs possibles: "w", "h", "wh", "w?h?" ou ? est un facteur entre 1 et 9. Dans ce cas la taille du parent est multiplie par ce facteur puis divisee par 10. Au moment de l’affichage, ajoute la taille du parent W ou/et H a celle définit par w="" et h="". exemple: "w2h" implique que WAffiche = W + 2*parentW/10 et que HAffiche = H + parentH| |sizeparent| |Indique le parent que l on prend pour le calcul des tailles WAffiche et HAffiche si cette valeur n’est pas spécifié alors on prend le posparent pour le calcul de la taille| |global_color|true|si true modulate la couleur par la couleur globale| |render_layer|0|valeur de -16 à +14 décale l’ordre de rendu de l’élément| |avoid_resize_parent|false|Si cette valeur est mise a true, un group ayant un child_resize_x ne prendra pas en compte cet élément pour se resizer| ===== VIEWS ===== Une //VIEW// a un type qui est définit par le paramètre ''type=""''. Toutes les //VIEWS// partagent ce paramètre : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |alpha| |integer **MODIFIABLE**| ==== ==== BUT: affiche une bitmap Paramètres: ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |color|255 255 255 255|couleur (modulate) du bitmap (string)**MODIFIABLE**| |color_as_int| |couleur (modulate) du bitmap (int) **OPTIONNEL** **MODIFIABLE**| |color_as_rgba| |couleur (modulate) du bitmap (rgba) **OPTIONNEL** **MODIFIABLE**| |texture| |fichier de la texture (string) **MODIFIABLE**| |scale|false|si false, le W et le H sont forcés à être de la taille de la texture| |rot|0|définit valeur de rotation du bitmap| |flip|false| | |tile|false| | |align|0| | === === DÉRIVÉ DE [[#view_type_bitmap| BUT: affiche un bitmap dans des textures non condensées (plusieurs textures dans une seule) Paramètres ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |txtoffsetx|0|offset dans la texture (en haut à gauche et positif vers le bas à droite)| |txtoffsety|24|offset dans la texture| |txtwidth|800|taille de la texture| |txtheight|488| | === === DÉRIVÉ DE : [[#view_type_bitmap|]] BUT: Affiche une valeur sous forme de barre. Pour l’instant 4 versions : (normal, mini, ultra_mini et mini_thick) les bitmaps utilisés sont hardcodées en C++ Paramètres : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |value| |valeur courante (Valeur ou Lien DB)(int) **MODIFIABLE**| |range| |range (Valeur ou Lien DB)(int) **MODIFIABLE**| |reference| |Valeur soustraire de value et range (exemple: gestion de temps).(Valeur ou Lien DB)(int) **MODIFIABLE**| |color_negative| |couleur quand les valeurs sont négatives| |mini|true|Affiche la version mini| |ultra_mini|true|Affiche la version ultra mini| |mini_thick|true|Affiche la version mini thick| On peut aussi modifier le //value_dblink//(string), le //range_dblink//(string) ou le //reference_dblink//(string) si on en a utilisé. === === DÉRIVÉ DE : [[#view_type_bitmap|]] BUT: Un peu dans le même esprit que //[[#view_type_bar|]]// mais affiche directement 3 barres Paramètres : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |value1| |**MODIFIABLE**| |value2| |**MODIFIABLE**| |value3| |**MODIFIABLE**| |range1| |**MODIFIABLE**| |range2| |**MODIFIABLE**| |range3| |**MODIFIABLE**| |color1| | | |color2| | | |color3| | | |color1_negative| | | |color2_negative| | | |color3_negative| | | |mini|true | | ==== ==== BUT: affiche un texte. Paramètres : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |color|255 255 255 255|couleur (modulate) du text (string) **MODIFIABLE**| |color_rgba|255 255 255 255|couleur (modulate) du text (rgba) **OPTIONNEL** **MODIFIABLE**| |fontsize|12| | |shadow|false| | |shadow_color|0 0 0 255|la couleur de l’ombre du texte| |hardtext| |si présent définit le text affiché. (Identifiant de localisation local)(string) **MODIFIABLE**| |uc_hardtext| |si présent définit le text affiché. (Identifiant de localisation local)(ucstring) **OPTIONNEL** **MODIFIABLE**| |multi_line|false| | |multi_line_space|8| | |justification|dont_clip_word|//clip_word// : pas de justification| |:::|:::|//dont_clip_word// : Mots non coupés et non justifiés| |:::|:::|//justified// : Mots non coupés et justifiés| |underlined|false|souligne la phrase| |case_mode|0|Regle de majuscule| |:::|:::|0 : CaseNormal : Pas de modification majuscule minuscule| |:::|:::|1 : CaseLower Toutes les lettres sont forcées en minuscule| |:::|:::|2 : CaseUpper Toutes les lettres sont forcées en majuscule| |:::|:::|3 : CaseFirstStringLetterUp La première lettre du string est en majuscule| |:::|:::|4 : CaseFirstSentenceLetterUp La première lettre de la string et des phrases suivantes (séparées par un .) sont en majuscule| |:::|:::|5 : CaseFirstWordLetterUp La première lettre de chaque mot est en majuscule| |line_maxw|16384|maximum size of the line (multiline: minimized with the current wreal of the parent)| |multi_line_maxw_only|false|multiline: don t minimize linemaxw with parent wreal. Use only linemaxw| |over_extend_view_text|false|usefull only if some line_maxw specified. if true and if the text is clipped cause of line_maxw, and if the mouse over the view text, then a special tooltip will be displayed over, to show all the text| |over_extend_parent_rect|false|true to use in conjunction of over_extend_view_text: the over area is the parent, not the view| |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) |continuous_update|true|multiline text justification is recomputed continuously as the window parent is resized (not when the left button is released only) default is "false"| **Note:** **Il ne faut pas mettre de //sizeref// sur une //VIEW// texte**. **Note:** Les vues textes peuvent prendre la forme de //TextFormatTagged//. Mais **seules les vues textes multilignes interprètent correctement les tags**. \\ Les Tags possibles sont: * @{F3DF} : Tag De couleur (en hexadecimal, définition avec 0 à F (0 à 15 maxi donc) pour chaque composante RGBA) * @{T10} : Tag de Tabulation. Le chiffre indique l'espacement minimum (en nombre de caractère '_') \\ **Note:** Il n'est pas possible de préciser un //TextFormatTagged// autrement que par code C++, ou via la fonction LUA: ''setTextFormatTagged()'' === === DÉRIVÉ DE [[#vue_type_text|]] BUT: Affiche une entrée de la database (un nombre entier) sous forme de texte. Paramètres : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |value| |Lien vers la database pour lire la valeur **OBLIGATOIRE**.| |positive|true| | |suffix| | | |prefix| | | |format|false|make the number thousands formatted| === === DÉRIVÉ DE : [[#view_type_text|]] BUT: Affiche un texte. Si le texte contient les caractères spéciaux suivants, il y a un traitement particulier : * $p -> remplace par le nom du joueur * $P -> remplace par le nom du joueur en lettre capitale * $b -> remplace par le nom du NPC auquel le joueur est en train de parler * $s -> remplace par le nom du NPC auquel le joueur est en train de parler (sans le titre) * ui... -> remplace par la traduction i18n (puis effectue les remplacements précédents) Paramètres : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |format| |chaîne a remplacer (par défaut chaîne vide)| === === BUT: Affiche un nombre de la database sous la forme "8/10" (avec donc une valeur max de la database). Si le nombre est 0, cela affiche la string emptytext. Par défaut emptytext="", et dans ce cas, "0/80" est affiché (80 est la vraie valeur max en fait). Paramètres : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |value| |Lien vers la database pour lire la valeur OBLIGATOIRE.| |valuemax| |Lien vers la database pour lire la valeur Max. OBLIGATOIRE.| |emptytext| |quand valeur==0, string afficher. "" veut dire affiche 0/valeurMax| **Note :** emptytext contient un identifiant de localisation locale. === === DÉRIVÉ DE : [[#view_type_text|]] BUT: affiche un text en fonction d'un identifiant réseau (c'est une chaîne de caractères équivalent à //set_server_string(ah))// ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |textid| |identifiant lui-même ("654123") **MODIFIABLE**| |textid_dblink | |lien database vers un identifiant ("UI:TEMP:VAR1") (string) **OPTIONNEL** **MODIFIABLE**| |dynamic_string|true|si true la phrase est composée (CStringManagerClient::getDynString), sinon c’est un identifiant server (CStringManagerClient::getString)| == == DÉRIVÉ DE : [[#view_type_text_id|]] BUT: Un peu dans le même esprit que la //[[#view_type_text_formatted|VIEW text_formated]]//. Elle possède les mêmes traitements particuliers que //text_formated// auxquels il faut y rajouter : * $t -> remplacé par la valeur du text id Paramètres : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |format|$t|Par défaut| |textid| | Par exemple :"SERVER:BOTCHAT:DM_CHOICE2:TITLE"| ==== ==== BUT: Vue spéciale qui affiche un nombre avec des digits spéciaux (bitmaps). Paramètres : ^ Élément ^ Valeur par défaut ^ Usage / Description ^ |value|SERVER:....|lien sur la database. **OBLIGATOIRE**| |numdigit|2|nombre de digit affichs (eg 00 si la valeur est nulle). Defaut:2. Min:1 et Max: 10| |wspace|-1|espacement en pixel entre chaque digit. Défaut: -1| |color|255 255 255 255|comme les boutons, blanc par défaut| La taille totale est automatiquement calculée en fonction du digit 0 et du nombre de digit. ===== CONTROLS ===== DERIVE DE Un control a un type qui est défini par le paramètre type="". MODIFIABLE: alpha (int) ==== ==== BUT: Control qui dérive simplement de ctrl_base, et qui ne gère aucun événement et n'affiche rien. Son seul but est d'avoir une zone pour afficher un tooltip quand on passe dessus. SYNTAXE: ==== ==== BUT: boutton, push, radio ou toggle. SYNTAXE: MODIFIABLE: pushed (bool) col_normal (string ('#r #g #b #a')) col_over (string ('#r #g #b #a')) col_pushed (string ('#r #g #b #a')) col_normal_rgba (rgba) col_over_rgba (rgba) col_pushed_rgba (rgba) frozen (bool) params_l (string) texture (string) texture_pushed (string) texture_over (string) ==== ==== BUT: boutton, push, radio ou toggle. SYNTAXE: MODIFIABLE: pushed (bool) col_normal (string ('#r #g #b #a')) col_over (string ('#r #g #b #a')) col_pushed (string ('#r #g #b #a')) col_normal_rgba (rgba) col_over_rgba (rgba) col_pushed_rgba (rgba) frozen (bool) params_l (string) uc_hardtext (ucstring telle quelle) hardtext (string qui va etre localisee) ==== ==== BUT: scroll bar. SYNTAXE: ==== ==== BUT: affiche un bouton spécial d'item, brique etc... SYNTAXE: MODIFIABLE: sheet (string) (correspond a la value le lien vers la DB) color1 (rgba) color2 (rgba) back (int) symbol (int) invert_symbol (bool) ==== ==== BUT: affiche une image pour choisir que l on puisse choisir une couleur dedans SYNTAXE: MODIFIABLE: r, g, b, a (int) les composantes de la couleur sélectionnée color (string ('#r #g #b #a')) ===== GROUPS ===== ==== ==== DÉRIVÉ DE [[fr:configuration_interface_client#controls|]] BUT: Définit un //group// qui pourra contenir des //groups//, des //controls// ou des //views//. Aucun affichage n'est fait sinon celui des fils. Pour qu'un groupe soit affiché, il faut qu'il apparaisse dans une liste de '''' avec son id indiquée dans une //treenode//. \\ Dans ''login_main.xml'', les //tree node// sont listées à la fin, mais dans d'autres fichiers ce n'est pas le cas. SYNTAXE: MODIFIABLE: ofsx (int) ofsy (int) ==== ==== BUT: SYNTAXE: ==== ==== Hérite de group BUT: Afficher un container SYNTAXE: MODIFIABLE: title, title_opened, title_closed (string) uc_title_opened, uc_title_closed, uc_title (ucstring) title_color (string) pop_max_h (int) openable, opened (bool) lockable, locked (bool) Note: si global_color est à true le bouton et le titre sont colorés par la couleur globale ==== ==== Hérite de group BUT: comme un group mais affiche un cadre et un fond (fixé: bitmaps de la modal). SYNTAXE: MODIFIABLE: color (string ('#r #g #b #a')) ==== ==== Hérite du group de type "frame" (affiche donc un cadre) BUT: Affiche une fenêtre qui pourra être ouverte sur une action. Cachée par defaut (active=false) NOTE: un group modal NE DOIT PAS être défini dans les . En fait ils sont automatiquement ajoutés NB: par défaut les modals sont ESCAPABLE SYNTAXE: Certaines actions handlers prennent un id de window en paramètre (eg: "ui:interface:taskbar"). L'id spécial se nommant "ctrl_launch_modal" désigne en fait le bouton ou le control qui a fait ouvrir la fenêtre modal. eg: Un control sheet dans une fenêtre modal échange son sheet id avec le ctrl sheet qui a ouvert la modal: Dans le xml, il faut bien faire attention à ce que les modals soient à la racine sinon elles peuvent être affichées plusieurs fois. Il ne faut pas non plus qu'elles soient ajoutées en tant que node dans un ==== ==== Hérite du groupe de type "modal" BUT: Affiche un menu contextuel Caché par défaut SYNTAXE: // Ligne simple ... MODIFIABLE: pour une action : grayed, checked et tous les modifiables d’une vue texte on peut récupérer les usergroup en faisant comme d'habitude menuid:actionid:usergroupid ==== ==== BUT: affiche une liste variable de ctrl_sheet SYNTAXE: // 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 // Setup tyipque de scrollBar. L'alignement est hardcodé pour être Top. Le y devrait être égal à "-tmargin" du group list_sheet tx_bottomleft= "w_scroll_l123_b.tga" tx_middle= "w_scroll_l123_m.tga" tx_topright= "w_scroll_l123_t.tga" /> MODIFIABLE: nbelt (int en lecture seul !) le nombre d'element valide si array=false sinon maxelt ==== ==== BUT: affiche un tableau de familles de métier avec la bonne brick. son grand père DOIT être un container (pour initialiser son nom) SYNTAXE: // Boutons pour changer le niveau de brick voulu // vue qui affiche le niveau sélectionné // group de décoration qui affiche un fond derrière le texte (sert pour le scroll des levels à la molette) ==== ==== BUT: widget qui sert pour augmenter et diminuer un nombre de la database SYNTAXE: // une vue qui permettra d'afficher le nombre // bouton pour incrémenter // bouton pour décrémenter ==== ==== BUT: widget servant à afficher des lignes de chat ou autres défilant, avec une scrollBar et des boutons pour augmenter la taille de la fenêtre SYNTAXE: ==== ==== BUT: édition de texte SYNTAXE: MODIFIABLE: input_string (string) uc_input_string (ucstring) ==== ==== BUT: Widget de composition de magie SYNTAXE: // Brick racine // Brick mandatory // Brick optional // bouton de validation ==== ==== BUT: Widget de composition de magie SYNTAXE: // Brick racine // Brick optional // bouton de validation // Tool // MPs // Select number ==== ==== BUT: Widget d'affichage des sentence connues. cf list_job pour le lien "list_sentence" SYNTAXE: // 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 // Setup tyipque de scrollBar. L'alignement est hardcodé pour être Top. Le y devrait être égal à "-tmargin" du group list_sheet tx_bottomleft= "w_scroll_l123_b.tga" tx_middle= "w_scroll_l123_m.tga" tx_topright= "w_scroll_l123_t.tga" ==== ==== BUT: affiche une combo_box. Un bouton sur un texte qui fait apparaitre un menu de sélection de texte quand on clique dessus SYNTAXE: // Texte qui affiche le choix courant. // Boutton qui sert pour ouvrir la liste. // ajoute un choix pour la combo_box Note: il faut que "ui:interface:combo_box_select_menu" soit définie comme un avec les paramètres d'aspect que l'on veut. Les champs actions sont remplis quand la combo_box est ouverte EXEMPLE: Ce setup permet de faire une combo box ou le bouton est invisible et recouvre en fait tout le group: si on clique sur le texte, on ouvre alors la liste de choix. // un cadre juste pour faire joli // notre text // Note pas de texture définie sauf l'over: c'est fait exprès. ==== ==== hérite de group BUT: affiche un arbre (comme un menu) EXEMPLE: Sur les nodes qui contiennent des fils on peut setuper la valeur de départ à ouvert ou fermé ==== ==== " ul_begin_space="12" // H space when "
    " li_indent="-10" // W space when "
  • " ul_indent="30" // W space when "
      " 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" checkbox_bitmap_normal="checkbox_normal.tga" // The "off" bitmap use in form checkbox checkbox_bitmap_pushed="checkbox_pushed.tga" // The "on" bitmap use in form checkbox checkbox_bitmap_over="checkbox_over.tga" // The "over" bitmap use in form checkbox background_bitmap_view="bg" // The name of the child bitmap view used for background home="http://www.nevrax.org" // The home url (you can browsse to the home url with the url "home" browse_next_time="false" // If true, the url is browsed when the group is created > ==== (derived from HTML) ==== ==== (derived from group) ==== ==== (derived from group) ==== a html-like table : The table is essentially an array. Each line must have the same number of cells. The width of the table can be arbitrary. Either sizeref="w" or a fixed w can be used. using child_resize_w has undefined results. The height or the table is imposed by its children cells (like with html table) Table is specified using the standard & Option for the table : border : the same the html tables 'border' cellpadding : the same the html tables 'cellpadding' cellspacing : the same the html tables 'cellspacing' bgcolor : background color with format "R G B A" ("255 0 0 255" for example) width : wanted width of table in pixels (same than html "width"). could be a ratio like "100%" usually the table will specify sizeref="w" or w and width="100%" 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 Options for the cells ( tag) Cells can have an id. If none is given a id like cell_1_2 id generated (first number is column, second is row) align : horizontal alignment of cell content. Can be "left", "right" or "center" (same than HTML 'align') valign : vertical alignment of cell content. Can be 'top", "middle" or "bottom" (same than HTML 'valign') left_margin : offset added to the x position of the cell content nowrap : same then htlm table 'nowrap' bgcolor : color of the cell background (with the "R G B A" format) width : same then htlm table 'width' : gives width of column for that cell, or a percentage 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) height : minimum height of the cell ignore_max_width : if "true", the cell content max_used_w is ignored when computing the width of the cell ignore_min_width : if "true", the cell content min_used_w is ignored when computing the width of the cell ===== MISC: DEFINE, PROCEDURES, TEMPLATES, ANIM, SCENE3D, ... ===== ==== ==== BUT: Permet de définir une constante. SYNTAXE: EXAMPLE: .... Comme ça "Hello %pipo_title" est remplacé par "Hello yoyo" L'id du define ne peut contenir que les caractères: 'a' à 'z' 'A' à 'Z' '0' à '9' '_' Du coup si vous voulez vraiment afficher un % dans un string (par exemple "25 %"), il faut l'écrire en double "25 %%" ==== ==== BUT: Définis une action handler spéciale qui lance des actions handlers à la suite SYNTAXE: Les paramètres sont optionnels. Une action handler peut être elle-même une autre procédure (attention récursivité :)) La procédure se lance en utilisant l'action handler "proc" avec comme paramètre "nom_procédure" La procédure peut prendre des paramètres en entrée (voir l'action handler proc pour comment faire). Pour chaque action, le champ params="" est parsé. Toute chaine de type @#, ou # est un numéro (à N chiffres) copiera alors le paramètre (simple copie de chaine) au moment de l'appel. Note: de la même façon que les % dans les define, un double @ permet de ne pas considérer l'@ comme un descripteur de paramètre EXAMPLE: .... EXAMPLE paramètres: .... Dans cet exemple, sur un clic gauche du bouton, set sera appelé avec une valeur de 10!! Notez que l'index des paramètres commence à 0. ====