Introduction
L'interface graphique de MediaPortal est une solution modulaire qui emploie des skin pour séparer le design de l’application. Le fonctionnement de l’application MediaPortal repose sur des fenêtres d'interface utilisateur (GUIWindow) contenant beaucoup de commandes graphiques (GUIControl). Cependant, sans dossier skin, aucune interface n’est visible.
Les utilisateurs accèdent aux fonctionnalités apparentes de l’application au travers de skins qui sont définit en XML. L'application chargera le fichier skin XML approprié lors de l'initialisation. Par exemple, quand MediaPortal demarre, le premier skin à charger généralement sera le fichier skin home.xml.
L'utilisation de XML fournit simplement une manière structurée de dire à MediaPortal la disposition, le type de la commande et les coordonnées de chaque article sur l'écran tel que la couleur du texte, la transparence des graphismes etc... En changeant le fichier XML dans un skin le design peut-être entièrement modifié. Bien que les termes soient très différents, l'idée est identique que de réaliser une page Web cependant un XML est sensible à la case.
Les répertoires Skin
Les fichiers skin sont contenus dans le répertoire skin dans le répertoire principal de l’application MediaPortal. Dans le répertoire skin racine, il y a des sous-répertoires pour chaque skin (BlueTwo, ECM, MetalMedia, Projet X et Razor tous fonctionnent avec MediaPortal) et ces répertoires contiennent les différents fichiers skin (par exemple home.xml). Il y a également des sous-répertoires pour les polices, les médias et les sons. Le répertoire de médias a toutes les textures que le dossier skin emploie (normalement dans le format png pour la meilleure qualité).
Les fichiers spécifiques XML
Il y a deux fichiers spécifiques XML dans chaque répertoire de skin : fonts.xml et references.xml
Les polices (fonts.xml)
Les polices qui sont disponibles dans le skin sont définies dans le fichier fonts.xml. Les polices réelles sont stockées dans le sous-répertoire fonts.
Format du fichier fonts.xml
Entête :
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<fonts>
Déclaration de chaque police :
<font>
<name>font10</name>
<filename>Franklin Gothic Medium</filename>
<height>10</height>
<bold>[yes|no]</bold>
<italic>[yes|no]</italic>
<start>0</start>
<end>1536</end>
</font>
Pied de fichier :
</fonts>
Références (references.xml)
Le fichier references.xml contient au minimum les informations sur la version et la résolution du skin (largeur et hauteur). Il peut également inclure des valeurs par défaut pour n'importe laquelle des commandes (employant la balise <control>) qui sont employées dans le skin ainsi vous ne devez pas définir, par exemple, les tailles des boutons chaque fois que vous l’employez dans vos autres fichiers skin XML. Elle peut définit également les modèles qui peuvent être appliqués à n'importe quelle commande bien que ce dispositif ne soit pas couvert dans ce document.
Voici un exemple partiel décrivant les buts d'un fichier references.xml. Il prouve que ce skin est conçu pour un affichage de 720x576 Pixel (MediaPortal le mesurera automatiquement) et une version 0.1.0.15. Il contient également les valeurs par défaut qui seront employées pour n'importe quelle commande de bouton dans n'importe quel autre fichier skin XML dans ce répertoire Skin :
<controls>
<skin>
<width>720</width>
<height>576</height>
<version>0.1.0.15</version>
</skin>
<control>
<description>default button</description>
<type>button</type>
<id>1</id>
<posX>300</posX>
<posY>200</posY>
<width>190</width>
<height>32</height>
<textXOff>10</textXOff>
<textYOff>5</textYOff>
<textureFocus>menu_list_focus.png</textureFocus>
<textureNoFocus>menu_list_nofocus.png</textureNoFocus>
<font>font13</font>
<textcolor>ffffffff</textcolor>
<colordiffuse>ffffffff</colordiffuse>
<disabledcolor>60ffffff</disabledcolor>
</control>
...
...
| Nom de l'élément | Type de donnée | Description |
| width | Entier | Largeur du Skin |
| height | Entier | Hauteur du Skin |
| version | Chaine de Caractères | Version du Skin affiché dans l'application de configuration de Média portal |
Les informations sur les controls sont décrit dans le chapitre "Les types de Control".
Les répertoires Media et Sound
Le répertoire "Sound" contiennent des fichiers WAV employés par l'application et les plugins de MediaPortal.
Les sons suivants sont inclus par défaut dans les skins. Ils peuvent être ajustés dans l'application de configuration en employant le mappeur d'entrée.
- back.wav
- click.wav
- cursor.wav
- photo.wav
Les sons suivants sont employés par les plugins :
- notify.wav (MyMail plugin)
- MyTetris.Block.wav (MyTetris plugin)
- MyTetris.Knock.wav (MyTetris plugin)
- MyTetris.Level.wav (MyTetris plugin)
- MyTetris.Line.wav (MyTetris plugin)
Les fichiers package Graphique
Les packages graphiques sont produits lors de l'execution et sont utilisé pour garder le rendu de l'application aussi efficace que possible. Ils sont seulement créés quand les packages graphiques n'existe pas déjà. Ils sont identifiable par packedgfx au début du nom des fichiers et avec pour extensions bxml (xml binaire) ou png.
Quand les différents fichiers graphiques d'un skin sont modifiés les fichiers de package graphique doivent être supprimés sans quoi les modifications ne seront pas visible lors du lancement de l'application Médiaportal.
Les fichiers Skin
Cette section couvre les définitions de disposition et de balise pour les fichiers skin. À la différence des pages Web, les fichiers XML ne pardonnent aucune erreur et il est important de faire attention à utiliser les syntaxes correctes.
Les fichiers <import>
Les fichiers skin permettent d'inclure des fichiers import ou include dans les sections dédier a cela ( entre les balise <import></import> ou <include></include>). Le but est de pouvoir utiliser les mêmes ressources dans plusieurs fichier skin XML. Cela permet de réduire la taille des fichiers et de gérer plus facilement les modifications.
Afin de profiter des avantages des fichiers d'import/include il existe les balises <define>. Elles permettent le passage de valeur entre le fichiers skin appelant et les fichiers d'import/include.
Ce qui suit serait un exemple typique de la façon dont ce nouveau dispositif pourrait être employé :
<window> <br>
<!-- include the common window features here --> <br>
<define>#header.label:134</define> <bR>
<define>#header.image:videos_logo.png</define><br>
<define>#header.hover:hover_my videos.png</define> <br>
<controls> <br>
<!-- include the header logo, text and other common elements --> <br>
<import>common.window.xml</import> <br>
<control> <br>
...<br>
...<br>
Ce qui suit est un exemple de la façon dont un fichier import ou include pourrait être ecrit :
<window> <br>
<control> <br>
<type>image</type> <br>
<id>1</id> <br>
<posX>60</posX> <br>
<posY>20</posY> <br>
<texture>#header.image</texture> <br>
</control> <br>
<control> <br>
<type>label</type> <br>
<id>1</id> <br>
<posX>250</posX> <br>
<posY>70</posY> <br>
<label>#header.label</label> <br>
<font>font16</font> <br>
<textcolor>ffffffff</textcolor> <br>
</control> <br>
...<br>
Les éléments <window>
Le premier élément dans un fichier de Skin doit être le tag <window> qui contient l'information qui s'applique à la fenêtre entière. Voici un exemple partiel d'un fichier skin.xml . Chacun des tags est définie ci-dessous :
<window> <br>
<id>1234</id> <br>
<defaultcontrol>2</defaultcontrol> <br>
<allowoverlay>yes</allowoverlay> <br>
<autohidetopbar>no</autohidetopbar> <br>
<define>#header.label:5900</define> <br>
<define>#header.image:trailers_logo.png</define> <br>
<define>#header.hover:hover_my trailers.png</define> <br>
<controls> <br>
<import>common.window.xml</import> <br>
<control> <br>
... <br>
| Nom |
Type de donnée |
Description |
| id |
Entier |
Chaque fichier Skin doit avoir une identification unique et il doit correspondre à l'identification dans l'application ou le plugin. Cette identification est employée pour mettre en référence cette page de skin d'un hyperlien en une autre page de skin. |
| defaultcontrol |
Entier |
Indique l'identification de la commande par défaut dans ce fichier skin |
| allowoverlay |
Booléen (oui ou non) |
Montrez l'écran de prévision de video/tv/music dans le coin inférieur quand un fichier de type média joue |
| autohidetopbar |
Booléen (oui ou non) |
Cachez automatiquement la barre supérieure |
| define |
Chaine de caractère |
Indiquez une valeur de type "#Nom de l'Attribut:Valeur". toutes les occurrences de l'attribut représentées par son nom seront remplacées par la valeur appropriée dans tout les sous éléments importé. Cet élément doitt être répété autant de fois que le nombre d'attribut dans les sous-éléments. |
Les éléments <controls>
L'élément <controls> est un bloc contenant tous les commandes d'une page.
| Nom |
Type de donnée |
Description |
| import |
Chaine de caractères |
Le nom d'un fichier xml à importer dans le même repertoire skin. Utiliser pour référencer les éléments communs afin de réduire et simplifier le code des fichiers XML. Vous pouvez faire appel à autant de fichiers que necessaire. |
| include |
Chaine de caractères |
Identique à <import> |
| control |
Control |
Une commande graphique. Il y a autant de ce dernier qu'il y a d'éléments actifs (boutons,...) sur la fenêtre correspondante. |
Les éléments <control>
Toutes les commandes de l'interface sont mises entre la balise <controls> et </controls> et chacun est contenu dans une balise <control>. Certaines commandes (par exemple groupe) peuvent vous permettre de gérer des sous-commandes dans une commande ainsi vous pouvez avoir des balises <control> dans une balise <control> parent.
<window> <bR>
... <bR>
<controls> <br>
... <br>
<control> <bR>
<id>1</id> <br>
<description>default button</description> <br>
<type>button</type> <br>
... <br>
Voici l'ensemble des paramètres a définir dans les balises :
| Nom |
Type de donnée |
Description |
| id |
Entier |
L'id de la commande. L'id associe le fichier skin au code, ainsi si nous voulons vérifier qu'un utilisateur a appuyé sur un bouton, l'id sera exigée et il doit être unique. pour les commandes qui ne sont pas référencé dans le code il est conseillé de mettre l'id à "1". |
| description |
Chaine de caractères |
Une description facultative de la commande |
| type |
Chaine de caractères |
Le type de commande que vous voulez. Voir la liste ci-dessous pour les types valides de commande |
| posX |
Entier |
La position X sur la fenêtre pour cette commande |
| posY |
Entier |
La position Y sur la fenêtre pour cette commande |
| width |
Entier |
La largeur de la commande |
| height |
Entier |
La hauteur de la commande |
| onleft |
Entier |
Id correspondant à l'éléments se trouvant a gauche de la commande. Permet ensuite à l'utilisateur de passer sur l'élément de gauche de l'interface. Si non définit ou à "0" Mediaportal définit l'élément le plus proche a sa gauche. |
| onright |
Entier |
Id correspondant à l'éléments se trouvant a droite de la commande. Permet ensuite à l'utilisateur de passer sur l'élément de droite de l'interface. Si non définit ou à "0" Mediaportal définit l'élément le plus proche a sa droite. |
| onup |
Entier |
Id correspondant à l'éléments se trouvant au dessus de la commande. Permet ensuite à l'utilisateur de passer sur l'élément de dessus de l'interface. Si non définit ou à "0" Mediaportal définit l'élément le plus proche au dessus. |
| ondown |
Entier |
Id correspondant à l'éléments se trouvant en dessous de la commande. Permet ensuite à l'utilisateur de passer sur l'élément de dessous de l'interface. Si non définit ou à "0" Mediaportal définit l'élément le plus proche en dessous. |
| colordiffuse |
Hexa |
Vous permet de mélanger une couleur et une texture de graphiques. Par exemple si vous avez une texture de graphiques comme un bouton bleu que vous le mélangez à une couleur jaune diffuse alors le résultat sera vert. Par défaut définit à 0xFFFFFFFF |
| dimColor |
Entier |
Couleur pour une commande quand elle n'est pas focalisée. Par défaut définit à semi-transparent (0x60ffffff) |
Les types de commande
Selon le type de la commande définit dans l'élément de commande ci-dessus il y aura des balises additionnelles spécifiques à ce type de commande.
La liste ci-dessous contient tous les types de commande avec leur nom interne de classe dans le code de MediaPortal et une description courte :
| Nom |
Nom de la Classe |
Description |
| animation |
GUIAnimation |
Images animées (par l'utilisation de séquence d'image) |
| button |
GUIButtonControl |
Commande simple de bouton pour l'interaction utilisateur dans une fenêtre |
| button3part |
GUIButton3PartControl |
Commande interne de bouton avec trois partie (gauche, milieu, droit) |
| checklistcontrol |
GUICheckListControl |
Une liste d'articles chacune avec un checkbox |
| checkmark |
|
| facadeview |
|
| fadelabel |
|
| filmstrip |
|
| gridcontrol |
|
| group |
|
| hscrollbar |
|
| image |
GUIImage |
Commande d'image pour afficher tout type de texture dans une fenêtre |
| imagelist |
|
| label |
GUILabelControl |
Commande d'affichage de texte pour afficher le contenu dans une fenêtre |
| listcontrol |
GUIListControl |
Commande flexible de liste |
| playlistbutton |
|
| progress |
|
| selectbutton |
|
| slider |
|
| smsinput |
|
| sortbutton |
|
| spincontrol |
Commande d'affichage des pages précédentes et suivantes |
| statusbar |
|
| textbox |
|
| textboxscrollup |
|
| thumbnailpanel |
|
| togglebutton |
|
| tvprogress |
|
| updownbutton |
|
| updownlistcontrol |
|
| videowindow |
|
| volumebar |
|
| vscrollbar |
|
La Commande "button"
GUIButtonControl (button)
Image Bouton 1
| Nom |
Type de donnée |
Description |
| textureFocus |
Chaine de caractère |
Definit La texture (fichier image) a afficher quand le bouton a le focus / est selectionné (le #1 de l'image au-dessus) |
| textureNoFocus |
Chaine de caractère |
Definit La texture (fichier image) a afficher quand le bouton n'a pas le focus / n'est pas selectionné (le #2 de l'image au-dessus) |
| textcolor |
Hexa |
Definit La couleur du texte quand le bouton a le focus / est selectionné (le #3 de l'image au-dessus) |
| disabledcolor |
Hexa |
Definit La couleur du texte quand le bouton n'a pas le focus / n'est pas selectionné (le #3 de l'image au-dessus) |
| font |
Chaine de caractère |
La police utilisé pour le texte |
| hyperlink |
Entier |
L'id de la page skin xml que MediaPortal chargera quand le bouton est pressé |
| action |
Entier |
L'événement prédéfinit a executer lorsque le bouton est pressé |
| textalign |
Chaine de caractère |
Définit l'alignement du texte par rapport au bouton ('center', 'left', 'right') |
| application |
Chaine de caractère |
L'application à lancer quand le bouton est pressé. MediaPortal n'attend pas l'application pour sortir. |
| arguments |
Chaine de caractère |
Définit les arguments a passer lors de l'execution de l'application |
| hover |
Chaine de caractère |
l'mage à afficher lorsque le bouton a le focus / est selectionné |
| hoverX |
Entier |
La position X sur la fenêtre de l'affichage de l'image |
| hoverY |
Entier |
La position Y sur la fenêtre de l'affichage de l'image |
| hoverWidth |
Entier |
La largeur de l'image |
| hoverHeight |
Entier |
La hauteur de l'image |
| textYOff |
Entier |
Définit le nombre de pixels que le texte est excentrer par rapport au bord superieur de l'image (le #1 de l'image d'en-dessous) |
| textXOff |
Entier |
Définit le nombre de pixels que le texte est excentrer par rapport au bord gauche de l'image (le #4 de l'image d'en-dessous) |
| label |
Chaine de caractère |
Le texte, propriété ou un nombre qui correspond à un id dans le fichier strings.xml (le #5 de l'image d'en-dessous) |