<chapter id="kdm-themes">
  <title
>Création de thèmes pour l'écran de bienvenue &kdm;</title>

  <para
>Cette section décrit la création de thèmes pour l'écran de bienvenue. Pour des exemples comprenant des captures d'écran, voyez les thèmes standards installés et les thèmes du <ulink type="http" url="http://www.kde-look.org/index.php?xcontentmode=40"
>site web des thèmes</ulink
>. </para>

  <sect1 id="theme-overview">
    <title
>Aperçu de la création de thèmes</title>

    <para
>Vous pouvez construire des thèmes &kdm; en créant un fichier XML qui suit la spécification de <filename
>$<envar
>KDEDIR</envar
>/share/apps/doc/kdm/greeter.dtd</filename
>. Les fichiers de thème sont conservés dans le dossier <filename class="directory"
>$<envar
>KDEDIR</envar
>/share/apps/kdm/themes/<replaceable
>nom_du_thème</replaceable
> </filename
>. Le dossier du thème doit contenir un fichier nommé <filename
>KdmGreeterTheme.desktop</filename
> qui a un format similaire aux autres fichiers <filename class="extension"
>.desktop</filename
> et ressemble à ceci : <programlisting
>[KdmGreeterTheme]
 Greeter=cercles.xml
 Name=Cercles
 Description=Thème avec des cercles bleus
 Author=Bond, James Bond
 Copyright=(c) 2002 Bond, James Bond
 Screenshot=copie_d_écran.png
</programlisting>
    </para>

    <para
>Les champs <literal
>Name</literal
>, <literal
>Description</literal
>, <literal
>Author</literal
> et <literal
>Copyright</literal
> peuvent être traduits tout comme dans d'autres fichiers <filename class="extension"
>.desktop</filename
>. Tous les fichiers mentionnés doivent être dans dans le dossier du thème. Le champ <literal
>Screenshot</literal
> pointe vers un fichier qui doit être une copie d'écran de taille 200x150 du thème en situation réelle (il est possible de l'omettre, mais sa présence est préférable pour l'utilisateur). Le champ <literal
>Greeter</literal
> pointe vers un fichier XML qui contient la description du thème. </para>

    <!--
    <para>
      Once a theme is installed, it can be tested with the
      <command
>gdmthemetester</command
> program.  This program assumes that
      the X server supports a nested server command.  This command takes two
      arguments, first the environment that should be used.  The environment
      can be one of the following values: console, console-timed, flexi,
      remote-flexi, or xdmcp.  The &quot;console&quot; option tests the
      theme as it would be shown on an attached display.  The
      &quot;console-timed&quot; option tests the theme as it would be shown
      on an attached display with timed login enabled.  The &quot;flexi&quot;
      option tests the theme as it would be shown on an attached flexible
      display (such as started via Xnest).  Finally, the &quot;xdmcp&quot;
      option tests the theme as it would be shown for remote XDMCP 
      displays.  The second argument is the theme name.  For example, to 
      test how the circles theme would look in XDMP remote display mode,
      you would run the following command:
    </para>

<cmdsynopsis>
  <command
>gdmthemetester</command
> <arg
>xdmcp</arg
> <arg
><replaceable
>circles</replaceable
></arg>
</cmdsynopsis>

    <para>
      When developing a theme, make sure to test all the environments, and
      make sure to test how the caps lock warning looks by pressing the caps
      lock key.  Running <command
>gdmthemetester</command
> is also a good way
      to take screenshots of &kdm; themes.  Simply take a screenshot of the
      theme running in the nested display window.  This can be done in GNOME
      by focusing the nested login window and pressing Alt-PrintScreen.
    </para>
    -->

    <para
>Une fois qu'un thème a été complètement testé, créez une archive au format tarball contenant le dossier tel qu'il serait installé dans le dossier <filename class="directory"
>$<envar
> KDEDIR</envar
>/share/apps/kdm/themes</filename
>. Ceci est le format standard pour la distribution de thèmes &kdm;. </para>
  </sect1>

  <sect1 id="theme-format">
    <title
>Description détaillée du format XML des thèmes</title>

    <sect2 id="greeter-tag">
      <title
>Le nœud de premier niveau</title>

      <para
>Les thèmes &kdm; sont des fichiers XML avec la balise &lt;greeter&gt; à leur racine. Le nœud de premier niveau est un <link linkend="item-nodes"
>nœud item</link
> de type <literal
>rect</literal
> avec une <link linkend="fixed-nodes"
>mise en page fixe</link
> implicite. </para>

      <!--
      <para>
        You may specify a Qt GUI style to
        be used with this theme by using the gui-style attribute in the
          greeter tag as in the following example.
 gui-style=&quot;Plastique&quot;
      </para>
      -->

<programlisting
>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
 &lt;!DOCTYPE greeter SYSTEM "greeter.dtd"&gt;
 &lt;greeter&gt;
 [...]
 &lt;/greeter&gt;
</programlisting>

      <para
>Dans la balise greeter, vous pouvez trouver les nœuds décris dans les sections suivantes de ce document. Certains de ces nœuds sont des conteneurs (nœuds pour la mise en page, nœuds item) pouvant à leur tour contenir d'autres nœuds. </para>
    </sect2>

    <sect2 id="item-nodes">
      <title
>Les nœuds item</title>

      <para
>Un thème &kdm; est créé en spécifiant une hiérarchie de nœuds item et de nœuds de mise en page. Les nœuds item peuvent avoir la valeur suivante pour l'attribut <literal
>type</literal
> : </para>

      <variablelist>

        <varlistentry>
          <term
>button</term>
          <listitem>
            <para
>Un champ de type bouton. Ce champ utilise un bouton Qt. </para>
            <para
>Il est aussi possible de faire en sorte que tout autre item se comporte comme un bouton en positionnant son attribut <literal
>button</literal
> à <literal
>true</literal
>. Cependant, il est préférable d'utiliser des boutons Qt dans les thèmes &kdm; car ceux-ci sont accessibles aux personnes ayant des problèmes d'accessibilité. </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>entry</term>
          <listitem>
            <para
>Une zone de saisie sur une ligne ou une liste déroulante. Veuillez noter que ceci est simplement un substituant aux composants graphiques de Qt.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>label</term>
          <listitem>
            <para
>Une zone de texte. Elle doit contenir soit un <link linkend="text-nodes"
>nœud <literal
>text</literal
></link
> soit un <link linkend="stock-nodes"
>nœud <literal
>stock</literal
></link
> afin de spécifier le texte. </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>list</term>
          <listitem>
            <para
>Une zone de sélection d'avatar.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>pixmap</term>
          <listitem>
            <para
>Une image raster dans un format pris en charge par Qt, &pex; PNG, JPEG, Tiff, &etc;</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>rect</term>
          <listitem>
            <para
>Un rectangle plein.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>svg</term>
          <listitem>
            <para
>Une image vectorielle au format SVG.</para>
          </listitem>
        </varlistentry>
      </variablelist>

      <para
>Par exemple : <programlisting>
 &lt;item type=&quot;label&quot;&gt;
 </programlisting
> Un item fonctionnant comme un bouton : <programlisting
>&lt;item type=&quot;rect&quot; id=&quot;bouton_déconnexion&quot; button=&quot;true&quot;&gt;.
</programlisting>
      </para>

      <para
>Par défaut, l'écran &kdm; disparaîtra après l'authentification. Ceci peut conduire à un scintillement de l'image entre les écrans de connexion et de session. L'attribut <literal
>background</literal
> permet aux utilisateurs de spécifier quels éléments du thème constituent l'image de fond. Lorsque cet attribut est utilisé, &kdm; supprime tous les éléments qui ne font pas partie de l'arrière-plan et effectue le rendu des éléments <literal
>background</literal
> qui restent sur la fenêtre racine. Ceci peut être utilisé pour créer une transition douce entre les écrans de connexion et de session :  <programlisting>
 &lt;item type=&quot;rect&quot; background=&quot;true&quot;&gt;
   &lt;normal file="background.svg"/&gt;
   &lt;pos x=&quot;0&quot; y=&quot;0&quot; width=&quot;100%&quot;  height=&quot;-75&quot;/&gt;
 &lt;/item&gt;
 </programlisting
> Afin d'utiliser un arrière-plan différent de celui de l'écran de connexion pour la transition, le thème doit spécifier deux nœuds item (qui peuvent contenir des pixmaps ou des images SVG, par exemple). Le nœud item qui correspond à l'arrière-plan de l'écran de bienvenue ne doit pas avoir d'attribut <literal
>background</literal
>, au contraire de celui qui correspond à l'arrière-plan de transition. Par exemple : <programlisting
>&lt;?xml version="1.0" encoding=&quot;UTF-8&quot;?&gt;
 &lt;!DOCTYPE greeter SYSTEM &quot;greeter.dtd&quot;&gt;
 &lt;greeter&gt;
   &lt;item type=&quot;rect&quot; background=&quot;true&quot;&gt;
     &lt;normal file="background_for_login.svg" element="background"/&gt;
     &lt;pos x=&quot;0&quot; y=&quot;0&quot; width=&quot;100%&quot;  height=&quot;100%&quot;/&gt;
   &lt;/item&gt;
   &lt;item type=&quot;rect&quot;&gt;
     &lt;normal file="background_for_greeter.svg"/&gt;
     &lt;pos x=&quot;0&quot; y=&quot;0&quot; width=&quot;100%&quot;  height=&quot;100%&quot;/&gt;
   &lt;/item&gt;
   [...]
 &lt;/greeter&gt;
</programlisting>

      </para>

      <para
>Dans les configurations multi-écrans, les thèmes peuvent aussi spécifier l'apparence des autres écrans que celui sur lequel est l'écran de bienvenue - mais typiquement seuls les éléments d'arrière-plan apparaîtront ici. Afin de spécifier sur quel(s) écran(s) un élément doit apparaître, l'attribut <literal
>screen</literal
> peut être utilisé avec une valeur parmi <literal
>greeter</literal
>, <literal
>other</literal
> ou <literal
>all</literal
>, ce qui signifie respectivement l'écran sur lequel l'écran de bienvenue est, tous les écrans sur lesquels l'écran de bienvenue n'est pas, et tous les écrans. </para>

      <variablelist>
        <para
>Un nom peut être donné à chaque nœud item via l'attribut <literal
>id</literal
>. Certains identifiants sont reconnus par &kdm; et donnent une fonction spéciale aux nœuds item afférents : </para>

        <!--
        <varlistentry>
          <term
><literal
>list</literal
> items</term>
          <listitem>

            <para>
              List items by default display as lists, but the
              <literal
>combo=&quot;true&quot;</literal
> attribute can be used
              to specify combo box style (combo style supported since &kde; ).
              Some predefined lists may be included in a theme by using the
              following id values.  Customized lists may also be defined,
              which are explained below.
            </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Function</segtitle>

              <seglistitem>
                <seg
>session</seg>
                <seg
>A list of available sessions, which allows the user to
                  pick the session to use.  Supported since &kde; .</seg>
              </seglistitem>

              <seglistitem>
                <seg
>language</seg>
                <seg
>A list of available languages, which allows the user to
                  pick the language to use.  Supported since &kde; .</seg>
              </seglistitem>

            </segmentedlist>
          </listitem>
        </varlistentry>
        -->

        <varlistentry>
          <term
>Les éléments <literal
>button</literal
> et ceux avec l'attribut <literal
>button=&quot;true&quot;</literal
>.</term>

          <listitem>
            <para
>Typiquement, les boutons déclenchent certaines actions. De plus, &kdm; cachera les boutons dont les actions sont indisponibles pour une quelconque raison. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Identifiant (id)</segtitle
><segtitle
>Action</segtitle>

              <seglistitem>
                <seg
>chooser_button</seg>
                <seg
>Lance le sélecteur XDMCP.</seg>
              </seglistitem>

              <!--
              <seglistitem>
                <seg
>custom_cmd_button[0-9]</seg>
                <seg
>Runs the <filename
>n-th</filename
> custom command.</seg>
              </seglistitem>
              -->

              <seglistitem>
                <seg
>disconnect_button</seg>
                <seg
>Déconnexion d'une session à distance.</seg>
              </seglistitem>

              <!--
              <seglistitem>
                <seg
>language_button</seg>
                <seg
>Open the language selection menu.</seg>
              </seglistitem>
              -->

              <!--
              <seglistitem>
                <seg
>halt_button</seg>
                <seg
>Power off the system.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>reboot_button</seg>
                <seg
>Restart the system.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>suspend_button</seg>
                <seg
>Suspend the system.</seg>
              </seglistitem>
              -->

              <seglistitem>
                <seg
>session_button</seg>
                <seg
>Ouvre le menu de sélection du type de session.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>system_button</seg>
                <seg
>Ouvre une menu fourre-tout avec diverses options et actions qui dépendent de la configuration.</seg>
              </seglistitem>
            </segmentedlist>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>Éléments <literal
>label</literal
></term>

          <listitem>
            <para
>&kdm; affichera/cachera ces zones de texte et définira leur texte en fonction de l'état de la boîte de dialogue. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Identifiant (id)</segtitle
><segtitle
>Fonction</segtitle>

              <!--
              <seglistitem>
                <seg
>pam-prompt</seg>
                <seg
>Label that displays the <acronym
>PAM</acronym
> prompt.
                  This is the prompt that <acronym
>PAM</acronym>
                  uses to ask for username, password, etc.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>pam-message</seg>
                <seg
>Label that displays the <acronym
>PAM</acronym
> message.
                  These are messages that <acronym
>PAM</acronym
>/&kdm; gives
                  about state of the account, help about the prompts and other
                  information.</seg>
              </seglistitem>
              -->

              <seglistitem>
                <seg
>pam-error</seg>
                <seg
>Ceci affiche le message <guilabel
>Échec de la connexion</guilabel
>.</seg>
              </seglistitem>

            </segmentedlist>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>Éléments intégrant des composants graphiques</term>

          <listitem>
            <para
>&kdm; intégrera des composants graphiques Qt particuliers dans ces éléments. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Identifiant (id)</segtitle
><segtitle
>Fonction</segtitle>

              <seglistitem>
                <seg
>user-entry</seg>
                <seg
>Champ pour la saisie du nom d'utilisateur.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>pw-entry</seg>
                <seg
>Champ pour la saisie du mot de passe.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>domain-entry</seg>
                <seg
>Certains modules externes de <quote
>communication</quote
> utilisent ce champ pour effectuer une requête sur un nom de domaine. Si ce champ est présent, les éléments qui l'englobent doivent avoir des <link linkend="show-nodes"
>nœuds d'affichage</link
> avec le type <literal
>plugin-domain-entry</literal
>.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>talker</seg>
                <seg
>Cet élément devrait être du type <literal
>rect</literal
>. Il représente la zone <quote
>chaude</quote
> de l'écran de bienvenue : il contient les éléments <literal
>label</literal
> et <literal
>entry</literal
> qui concernent le processus d'authentification. Si un module externe de <quote
>communication</quote
> ne peut pas effectuer de correspondance entre ses besoins et les éléments existants, il tente d'embarquer, dans cet élément, un composant graphique complexe avec sa propre mise en page, ce qui a pour effet de ne pas du tout tenir compte du <quote
>talker</quote
> du thème. Strictement parlant, les thèmes &kdm; n'ont pas du tout besoin de fournir de propres conceptions de <quote
>talker</quote
>, car tous les modules externes d'authentification de &kdm; sont capables d'utiliser l'élément <literal
>talker</literal
>. </seg>
              </seglistitem>

              <seglistitem>
                <seg
>userlist</seg>
                <seg
>Cet élément doit être du type <literal
>list</literal
>. Si la fonctionnalité d'affichage de la liste d'utilisateurs est activée, &kdm; embarque ici le composant graphique d'affichage de la liste d'utilisateurs. Sinon, cet élément est caché.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xconsole</seg>
                <seg
>Cet élément devrait être du type <literal
>rect</literal
>. Si la fonctionnalité intégrée <command
>xconsole</command
> est compilée et activée, &kdm; embarquera ici le composant graphique de journalisation de console. Sinon, cet élément est caché.</seg>
              </seglistitem>

            </segmentedlist>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>Autres éléments</term>

          <listitem>
            <para
>&kdm; affichera ou cachera ces éléments en fonction de la configuration et de l'état actuel de l'écran de bienvenue. &kdm; ne leur impose pas d'exigences, mais ils se prêtent généralement à un type particulier. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Identifiant (id)</segtitle
><segtitle
>N'est affiché que lorsque...</segtitle>

              <seglistitem>
                <seg
>timed-label</seg>
                <seg
>... une connexion temporisée est en cours.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>caps-lock-warning</seg>
                <seg
>... le verrouillage majuscule est activé.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xauth-warning</seg>
                <seg
>... le &X-Server; ne requiert pas d'autorisation X pour se connecter.</seg>
              </seglistitem>

              <!--
              <seglistitem>
                <seg
>pam-error-logo</seg>
                <seg
>... a pam-error message is being displayed.
                  This is useful for displaying an <guiicon
>Attention</guiicon>
                  icon, for example.</seg>
              </seglistitem>
              -->

              <seglistitem>
                <seg
>userlist-rect</seg>
                <seg
>... la liste d'utilisateurs est active. En imbriquant l'élément <literal
>userlist</literal
> dans celui-ci, il est possible de créer quelque chose qui ressemble à un cadre autour de la liste et qu'il ne soit affiché que lorsque la liste d'utilisateurs elle-même est affichée.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xconsole-rect</seg>
                <seg
>... la fonctionnalité <command
>xconsole</command
> est activée. Est similaire à <literal
>userlist-rect</literal
>.</seg>
              </seglistitem>

            </segmentedlist>
          </listitem>
        </varlistentry>

      </variablelist>

    </sect2>

    <sect2 id="layout-nodes">
      <title
>Nœuds conteneurs pour la mise en page</title>

      <para
>Les nœuds de mise en page apparaissent dans les nœuds item et contiennent d'autres nœuds item. Le type de nœud de mise en page détermine la disposition de ses nœuds fils. Un nœud item peut contenir un nœud de mise en page de chaque type. </para>

      <sect3 id="box-nodes">
        <title
>Nœuds « box »</title>

        <para
>Les nœuds « box » organisent automatiquement leurs enfants en ligne. Ils sont spécifiés ainsi : <programlisting>
 &lt;box orientation=&quot;<replaceable
>alignement</replaceable
> &quot; min-width=&quot;<replaceable
>num</replaceable
> &quot; min-height=&quot;<replaceable
>num</replaceable
>&quot;
     xpadding=&quot;<replaceable
>num</replaceable
>&quot;  ypadding=&quot;<replaceable
>num</replaceable
>&quot; spacing=&quot;<replaceable
> num</replaceable
>&quot;
     homogeneous=&quot;<replaceable
>bool</replaceable
>&quot;&gt;
 </programlisting
> Où <replaceable
>num</replaceable
>  est un nombre de pixels et <replaceable
>bool</replaceable
>  vaut soit <literal
>true</literal
> soit <literal
>false</literal
> . La valeur <replaceable
>alignement</replaceable
> peut être soit <literal
> horizontal</literal
> soit <literal
>vertical</literal
>. Si vous ne mettez pas de valeur  à un attribut, sa valeur part défaut sera zéro pour les nombres, <literal
>false</literal
>  pour les booléens et <literal
>vertical</literal
> pour l'orientation. </para>

        <para
>Le « spacing » est la distance séparant les nœuds « item » enfants voisins. Le « padding » est la marge extérieure du nœud « box ». Si le nœud « box » est homogène, l'espace alloué à chaque nœud « item » enfant est le même. </para>
      </sect3>

      <sect3 id="fixed-nodes">
        <title
>Nœuds « fixed »</title>

        <para
>Le nœud « fixed » est un conteneur dont les fils sont disposés à des coordonnées précises. La taille de ce conteneur est le plus petit rectangle qui contient tous les enfants. Le nœud « fixed » n'a pas d'attributs supplémentaires et vous utilisez simplement : <programlisting>
 &lt;fixed&gt;
 </programlisting
> Puis vous placez à l'intérieur de ce nœud d'autres nœuds « item » avec des nœuds « pos » adéquats. </para>
      </sect3>

    </sect2>

    <sect2 id="position-nodes">
      <title
>Nœuds « pos »</title>

      <para
>Chaque élément peut spécifier ses position et taille via le nœud <literal
>pos</literal
>. Par exemple : <programlisting
>&lt;pos x=&quot;0&quot; y=&quot;4&quot; width=&quot;100%&quot;  height=&quot;100%&quot;/&gt;
</programlisting>
      </para>

      <para
>Si la taille n'est pas spécifiée, elle sera la taille <quote
>naturelle</quote
> du nœud « item », appelée la taille indiquée. Remarquez que tous les « items » n'ont pas de taille indiquée. </para>

      <para
>À la fois la position et la taille peuvent être fournis en pourcentage et seront dans ce cas calculés relativement à la taille du conteneur les englobant. Pour les nœuds « item » de niveau supérieur, il s'agit du pourcentage de l'écran entier. En ajoutant des accents circonflexes (<literal
>^</literal
>) à la spécification de la taille, il est possible de la modifier pour qu'elle soit relative à la taille de l'élément englobant l'élément qui l'englobe, et ainsi de suite... </para>

      <para
>Si le nœud « item » contient un nœud « box », <literal
>width</literal
> et <literal
>height</literal
>  peuvent être spécifiés à <literal
>box</literal
> afin de signifier qu'ils sont supposés être de la largeur et de la hauteur du nœud « box », c'est-à-dire les nœuds « item » dans le nœud « box » plus le « padding ». </para>

      <para
>La valeur d'un des attributs <literal
>width</literal
> et <literal
>height</literal
> peut être spécifiée à <literal
>scale</literal
> afin de signifier qu'il devrait être recalculé en fonction de l'échelle de l'autre dimension et relativement à sa taille indiquée. Utilisez ceci afin de conserver automatiquement la proportion des images redimensionnées. </para>

      <para
>Si l'attribut <literal
>expand</literal
> est spécifié et qu'il vaut<literal
>true</literal
>, ce nœud « item » sera développé autant que possible dans le conteneur qui l'englobe (c'est-à-dire que toute place disponible lui sera allouée). </para>

      <para
>Si <literal
>width</literal
> ou <literal
>height</literal
> sont des nombres, une valeur négative représente un décalage par rapport à la taille du conteneur qui l'englobe. Remarquez qu'il est possible de spécifier un décalage positif en utilisant deux signes négatifs. </para>

      <para
>Dans tous les cas, il est possible de contraindre la taille finale avec les attributs <literal
>min-width</literal
>, <literal
>min-height</literal
>, <literal
>max-width</literal
> et <literal
>max-height</literal
> qui peuvent être spécifiés de la même manière que <literal
>width</literal
> et <literal
>height</literal
>. </para>

      <para
>Si <literal
>x</literal
> ou <literal
>y</literal
> sont des nombres, une valeur négative représente un décalage par rapport au bord inférieur droit, à l'inverse de la valeur par défaut qui est le bord supérieur gauche. </para>

      <para
>Il est aussi possible de spécifier le point à l'intérieur du nœud « item » auquel se réfère la position. Celui-ci est appelé l'ancre et peut au choix être <literal
>c</literal
> pour le centre, ou bien <literal
>n</literal
>, <literal
>ne</literal
>, <literal
>e</literal
>, <literal
>se</literal
>, <literal
>s</literal
>, <literal
>sw</literal
>, <literal
>w</literal
> ou <literal
>nw</literal
> qui représentent les positions cardinales des différents bords/coins. La valeur par défaut est <literal
>nw</literal
>, qui correspond au coin supérieur gauche. Par exemple : <programlisting
>&lt;pos x=&quot;10%&quot; y=&quot;50%&quot; anchor=&quot;w&quot; width=&quot;80%&quot; height=&quot;95&quot;/&gt;
</programlisting>
      </para>

    </sect2>

    <sect2 id="show-nodes">
      <title
>Afficher des nœuds</title>

      <!-- not really implemented
      <para>
        Some items may only display in certain modes, like when doing a
        remote display.  Multiple values can be specified and must be
        separated with commas.  The following values are possible:
      </para>

      <para>
        <filename
>console</filename
> - In console mode.
      </para>
      <para>
        <filename
>console-fixed</filename
> - In console non-flexi mode.
      </para>
      <para>
        <filename
>console-flexi</filename
> - In console &amp; flexi mode.
      </para>
      <para>
        <filename
>flexi</filename
> - In flexi mode.
      </para>
      <para>
        <filename
>remote</filename
> - In remote mode.
      </para>
      <para>
        <filename
>remote-flexi</filename
> - In remote &amp; flexi mode.
      </para>

      <para>
        For example:
<programlisting
>
&lt;show modes=&quot;flexi,remote&quot;/&gt;
</programlisting>
      </para>
      -->

      <para
>Vous pouvez spécifier l'attribut <literal
>type</literal
> afin d'indiquer que certains nœuds « item » ne devraient être affichés que si le type est défini. En préfixant le type d'un point d'exclamation (<literal
>!</literal
>), la condition est inversée. Les valeurs valables incluent : </para>
        <segmentedlist>
          <?dbhtml list-presentation="table"?>
          <segtitle
>Type</segtitle
><segtitle
>Afficher si...</segtitle>

          <seglistitem>
            <seg
><literal
>chooser</literal
></seg>
            <seg
>il est permis de basculer en mode de connexion à distance.</seg>
          </seglistitem>

          <!--
          <seglistitem>
            <seg
><literal
>custom_cmd[0-9]</literal
></seg>
            <seg
><literal
>n-th</literal
> CustomCommand is specified in
              the &kdm; configuration.</seg>
          </seglistitem>
          -->

          <seglistitem>
            <seg
><literal
>halt</literal
> et <literal
>reboot</literal
></seg>
            <seg
>il est permis d'effectuer un arrêt du système.</seg>
          </seglistitem>

          <!--
          <seglistitem>
            <seg
><literal
>suspend</literal
></seg>
            <seg
>suspending the system is permitted.</seg>
          </seglistitem>
          -->

          <seglistitem>
            <seg
><literal
>system</literal
></seg>
            <seg
>aucune condition (toujours défini dans &kdm;).</seg>
          </seglistitem>

          <!--
          <seglistitem>
            <seg
><literal
>timed</literal
></seg>
            <seg
>a timed login is being counted down.</seg>
          </seglistitem>
          -->

          <seglistitem>
            <seg
><literal
>plugin-</literal
><replaceable
>nom</replaceable
></seg>
            <seg
>le module externe <quote
>conversation</quote
> fournit un champ de saisie éponyme.</seg>
          </seglistitem>

        </segmentedlist>


      <para
>Par exemple : <programlisting
>&lt;show type=&quot;chooser&quot;/&gt;
</programlisting>
      </para>

      <para
>De manière alternative, vous pouvez spécifier une valeur <literal
>min-screen-width</literal
> ou <literal
>min-screen-height</literal
> afin d'indiquer que certains nœuds « item » ne doivent être affichés que si la résolution d'écran est au moins de la taille spécifiée. Par exemple : <programlisting
>&lt;show min-screen-height=&quot;768&quot;/&gt;
</programlisting>
      </para>

    </sect2>

    <sect2 id="nor-act-pre-nodes">
      <title
>Nœuds « Normal »/« Active »/« Prelight »</title>

      <para
>L'apparence de la plupart des types d'éléments peut être paramétrée via les balises suivantes : </para>

      <variablelist>
        <varlistentry>
          <term
><literal
>normal</literal
></term>
          <listitem>
            <para
>État normal.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term
><literal
>prelight</literal
></term>
          <listitem>
            <para
>Lorsque la souris survole l'élément.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term
><literal
>active</literal
></term>
          <listitem>
            <para
>Lorsqu'un bouton de souris est pressé sur l'élément.</para>
          </listitem>
        </varlistentry>
      </variablelist>

      <variablelist>

        <para
>L'ensemble exact d'attributs disponibles dépend du type d'éléments : </para>

        <varlistentry>
          <term
><literal
>rect</literal
></term>
          <listitem>
            <para>
<programlisting
>&lt;normal color=&quot;#000000&quot; alpha=&quot;0.0&quot;/&gt;
</programlisting>
Chacun des attributs peut être omis, auquel cas la valeur par défaut est utilisée (l'exemple représente les valeurs par défaut). <literal
>alpha</literal
> est un nombre à virgule flottante entre zéro (transparent) et un (opaque). <literal
>color</literal
> est un dièse suivi d'un nombre hexadécimal à six chiffres ; le format est <quote
><literal
>#</literal
><replaceable
>rrvvbb</replaceable
></quote
>. De manière alternative, <literal
>color</literal
> peut être spécifié comme un nombre hexadécimal à huit chiffres, auquel cas les deux premiers chiffres sont la valeur alpha. </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
><literal
>label</literal
></term>
          <listitem>
            <para>
<programlisting
>&lt;normal color=&quot;#ffffff&quot; alpha=&quot;1.0&quot; font=&quot;Sans  14&quot;/&gt;
</programlisting>
<literal
>alpha</literal
> et <literal
>color</literal
> sont spécifiés tout comme pour les nœuds <quote
>rect</quote
>. </para>
            <para
><literal
>font</literal
> suit le format <quote
><replaceable
>liste-de-famille</replaceable
>&nbsp;<replaceable
>options-de-style</replaceable
>&nbsp;<replaceable
>taille</replaceable
></quote
>. Chaque partie est optionnelle. </para>
            <para
><replaceable
>liste-de-famille</replaceable
> est une liste de familles de polices séparées par des virgules comme <quote
>helvetica</quote
>, <quote
>monospace</quote
>, etc. </para>
            <para
><replaceable
>options-de-style</replaceable
> est une liste de mots-clés séparés par des virgules et faisant partie des catégories style, poids et élasticité ; au plus un de chaque catégorie. Le style peut être <literal
>normal</literal
>, <literal
>italic</literal
> ou <literal
>oblique</literal
>. Le poids peut être <literal
>ultra-light</literal
>, <literal
>light</literal
>, <literal
>medium</literal
>, <literal
>semi-bold</literal
>, <literal
>bold</literal
>, <literal
>ultra-bold</literal
> ou <literal
>heavy</literal
>. Les élasticités permises sont parmi <literal
>ultra-condensed</literal
>, <literal
>extra-condensed</literal
>, <literal
>condensed</literal
>, <literal
>semi-condensed</literal
>, <literal
>normal</literal
>, <literal
>semi-expanded</literal
>, <literal
>expanded</literal
>, <literal
>extra-expanded</literal
> et <literal
>ultra-expanded</literal
>. </para>
            <para
><replaceable
>taille</replaceable
> est soit un nombre à virgule flottante représentant la taille en points (1/72 pouce), soit un entier suivi de <literal
>px</literal
> représentant la taille en pixels. Indiquer des tailles en points est préférable, car elles sont indépendantes de la résolution d'affichage. </para>
            <para
>Si l'un de ces attributs n'est pas spécifié, les valeurs du <link linkend="style-nodes"
>nœud de style</link
> sont utilisées. Si ceci n'amène à aucune spécification de couleur de texte de fenêtre, le blanc est utilisé. La police par défaut est celle configurée dans &kdmrc;. </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
><literal
>pixmap</literal
></term>
          <term
><literal
>svg</literal
></term>
          <listitem>
            <para>
<programlisting
>&lt;normal file=&quot;image.png&quot; tint=&quot;#dddddd&quot;  alpha=&quot;1.0&quot;/&gt;
</programlisting>
            </para>

            <para
><literal
>file</literal
> spécifie le fichier contenant l'image. Les chemins relatifs le sont par rapport au dossier du thème. </para>

            <para
><literal
>wallpaper</literal
> peut être utilisé au lieu de <literal
>file</literal
> pour que &kdm; recherche des images aux emplacements usuels de fonds d'écran de &kde;. Les paquetages de fonds d'écran Plasma sont pris en charge. </para>

            <para
><literal
>element</literal
> spécifie l'identifiant d'élément d'un fichier SVG. S'il est vide, le rendu de l'ensemble de l'image SVG sera effectué. </para>

            <para
>Pour les nœuds <literal
>pixmap</literal
>, il est possible de fournir plusieurs images, de telle sorte que l'image de meilleure qualité pour une résolution donnée puisse être utilisée. Le nom de fichier fait état de la taille de l'image en respectant le format suivant : <replaceable
>nom-de-base</replaceable
><literal
>-</literal
><replaceable
>largeur</replaceable
><literal
>x</literal
><replaceable
>hauteur</replaceable
><literal
>.</literal
><replaceable
>extension</replaceable
>. Si le fichier ne fait pas état de la taille et s'il n'est pas un paquet pour un fond d'écran Plasma, &kdm; n'acceptera seulement une correspondance exacte pour une taille donnée sinon il reviendra au fichier d'origine. Sinon il essayera de trouver une image dont la taille est quasiment la même que celle requise si aucune correspondance exacte n'est trouvée. </para>

            <!--
            <para>
              Note that an alternative image file can be specified using the
              <literal
>altfile</literal
><optional
><replaceable
>n</replaceable
></optional>
              attribute.  &kdm; will use the last valid image filename
              specified.  For example:
<programlisting
>
&lt;normal file=&quot;picture.png&quot; altfile1=&quot;distribution-blah-image.png&quot; altfile2=&quot;distribution-foo-image.png&quot;/&gt;
</programlisting>
              If <filename
>distribution-foo-image.png</filename
> is a valid
              image filename it will be used.
              Otherwise distribution-blah-image.png will be used if valid.
              This feature is supported since &kde; .
            </para>
            -->

            <para
><literal
>scalemode</literal
> spécifie la manière d'ajuster la taille des images qui ne correspondent pas à la taille de l'élément. <literal
>free</literal
> (par défaut) signifie de simplement redimensionner l'image à la bonne taille, ce qui peut la déformer. Les deux autres modes conservent les proportions de l'image : <literal
>fit</literal
> signifie d'agrandir l'image à la taille maximale tenant dans la forme de l'élément. L'image sera centrée. La zone restante ne sera pas remplie par cet élément, elle devrait donc être placée au-dessus d'un <literal
>rect</literal
> rempli. <literal
>crop</literal
> signifie de diminuer l'image à la taille minimale remplissant complètement la forme de l'élément. L'image sera coupée symétriquement. </para>

            <para
><literal
>tint</literal
> et <literal
>alpha</literal
> forment une spécification de couleur comme pour les nœuds <literal
>rect</literal
>. Chaque pixel de l'image est multiplié par cette couleur, eu égard au composant. </para>
          </listitem>
        </varlistentry>

      </variablelist>

    </sect2>

    <sect2 id="style-nodes">
      <title
>Nœuds de style de composant graphique (« widget »)</title>

      <para
>Cette balise permet de changer l'apparence d'étiquettes et des composants graphiques Qt widgets incrustés dans le thème, par exemple des zones de saisie sur une ligne, des boutons ou la liste d'utilisateurs. Les paramètres de style sont hérités par les nœuds enfants, mais ceux-ci peuvent être outrepassés individuellement. Les valeurs par défaut sont celles configurées dans &kdmrc;. </para>

      <para
>L'attribut <literal
>font</literal
> définit la police de caractères pour tous les composants graphiques. Pour les composants graphiques ayant une fonction de saisie, il peut être outrepassé avec l'attribut <literal
>edit-font</literal
>. Les polices de caractères sont spécifiées de la même manière que pour les <link linkend="nor-act-pre-nodes"
>nœuds normal/active/prelight</link
>. </para>

      <para
>De manière usuelle, le moteur de thèmes s'efforce de supprimer tous les cadres des composants graphiques Qt, de telle sorte qu'ils fusionnent de façon transparente dans le même thème. Dans les cas où ceci ne serait pas désiré, l'attribut <literal
>frame</literal
> peut être défini à <literal
>true</literal
>. </para>

      <para
>L'attribut <literal
>guistyle</literal
> peut être utilisé afin d'outrepasser le style du GUI Qt pour les composants graphiques fournis par défaut. Le style par défaut est défini par <option
>GUIStyle</option
> dans &kdmrc; </para>

      <para
>Il est possible de spécifier la palette presque entière pour les composants graphiques comme documenté sur le <ulink type="http" url="http://doc.trolltech.com/4.3/qpalette.html"
>site de Trolltech</ulink
>. Les noms d'attributs sont composés d'un cadre, d'un rôle de couleur et d'un suffixe. Les cadres possibles sont - par ordre d'importance croissante - <literal
>all-</literal
> pour tous les groupes de couleurs, pas de cadre pour les groupes de couleurs actif et inactif et <literal
>active-</literal
>, <literal
>inactive-</literal
> et <literal
>disabled-</literal
> pour les groupes de couleurs respectifs. Les rôles de couleurs pris en charge sont <literal
>window</literal
>, <literal
>window-text</literal
>, <literal
>base</literal
>, <literal
>alternate-base</literal
>, <literal
>text</literal
>, <literal
>bright-text</literal
>, <literal
>highlight</literal
>, <literal
>highlighted-text</literal
>, <literal
>button</literal
> et <literal
>button-text</literal
>. Le suffixe peut être <literal
>-color</literal
> ou <literal
>-alpha</literal
> avec la signification respective comme dans les <link linkend="nor-act-pre-nodes"
>normal/active/prelight nodes</link
>. </para>

      <para
>Une alternative pour spécifier la palette directement en ligne peut être l'utilisation de l'attribut <literal
>colorscheme</literal
> pour charger un jeu de couleurs &kde; complet. Par défaut, ce jeu de couleur est donné par <option
>ColorScheme</option
> dans &kdmrc;. Les spécifications de <literal
>couleurs</literal
> individuelles outrepasseront les couleurs du jeu de couleurs. </para>

      <para
>Exemple : <programlisting
>&lt;style edit-font=&quot;Comic 16&quot; text-color=&quot;#dddddd&quot;  frame=&quot;true&quot;/&gt;
</programlisting>
      </para>
    </sect2>

    <sect2 id="color-nodes">
      <title
>Nœuds de couleur de zone de sélection d'avatar</title>

      <para
>Les noeuds de couleurs permettent d'outrepasser la couleur d'arrière plan des éléments dans la zone de sélection d'avatar. <literal
>labelcolor</literal
> et <literal
>altlabelcolor</literal
> sont essentiellement équivalents à <literal
>all-base-color</literal
> respectivement <literal
>all-alternate-base-color</literal
> dans le <link linkend="style-nodes"
>style des noeuds</link
>. Si <literal
>labelcolor</literal
> est seulement spécifié, les éléments d'arrière plan alternatifs sont désactivés. </para>

      <para>
<programlisting
>&lt;color labelcolor=&quot;#80ffffff&quot;  altlabelcolor=&quot;#80f0f0f0&quot;/&gt;
</programlisting>
      </para>
    </sect2>

    <sect2 id="text-nodes">
      <title
>Nœuds de texte</title>

      <para
>Les balises de texte sont utilisées par les étiquettes. Elles peuvent être utilisées pour afficher un texte traduit comme suit (si l'attribut <literal
>xml:lang</literal
> est omis, la norme POSIX de la langue est supposée) : <programlisting
>&lt;text xml:lang=&quot;fr&quot;&gt;Option&lt;/text&gt;
</programlisting>
      </para>

      <!--
      <para>
        You can include pango markup in the text nodes for labels, however
        you must encode it.  So for example to have the label of
        &quot;foo&lt;sup&gt;bar&lt;/sup&gt;&quot;, you must type:
<programlisting
>
&lt;text&gt;&quot;foo&lt;sup&gt;bar&lt;/sup&gt;&quot;&lt;/text&gt;
</programlisting>
      </para>
      -->

      <para
>Les nœuds de texte peuvent contenir les séquences de caractères spéciaux suivantes, qui seront interprétées comme suit : </para>

      <segmentedlist>
        <?dbhtml list-presentation="table"?>
        <segtitle
>Séquence</segtitle
><segtitle
>Expansion</segtitle>

        <seglistitem>
          <seg
>%%</seg>
          <seg
>Un caractère « % »</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%c</seg>
          <seg
>Une horloge avec temps et date</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%d</seg>
          <seg
>Nom de l'affichage (variable d'environnement <envar
>DISPLAY</envar
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%h</seg>
          <seg
>Nom d'hôte (résultat de <function
>gethostname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%m</seg>
          <seg
>Nom de machine (partie <structfield
>machine</structfield
> du résultat de <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%n</seg>
          <seg
>Nom de nœud (partie <structfield
>nodename</structfield
> du résultat de <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%o</seg>
          <seg
>Nom de domaine (résultat de <function
>getdomainname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%r</seg>
          <seg
>Nom de version (partie <structfield
>release</structfield
> du résultat de <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%s</seg>
          <seg
>Nom de système (partie <structfield
>sysname</structfield
> du résultat de <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%t</seg>
          <seg
>Nombre de secondes restantes avant que la connexion temporisée soit effectuée, auquel est ajouté la forme plurielle i18n adéquate de <quote
>seconde</quote
></seg>
        </seglistitem>

        <seglistitem>
          <seg
>%u</seg>
          <seg
>Nom d'utilisateur pour la connexion temporisée</seg>
        </seglistitem>

        <!-- Need to switch to richtext painting for this purpose.
        <seglistitem>
          <seg
>\n</seg>
          <seg
>Newline</seg>
        </seglistitem>
        -->

        <seglistitem>
          <seg
>_</seg>
          <seg
>A pour effet de définir le caractère suivant comme accélérateur clavier</seg>
        </seglistitem>

      </segmentedlist>

      <para
><literal
>%t</literal
> et <literal
>%u</literal
> sont supposés être utilisés seulement en interne pour afficher le message de <literal
>timed-label</literal
> qui est automatiquement mis à jour toutes les secondes. </para>
    </sect2>

    <sect2 id="stock-nodes">
      <title
>Nœud « stock »</title>

      <para
>Certaines étiquettes usuelles traduites peuvent être spécifiées via les étiquettes stock. L'étiquette <literal
>text</literal
> est ignorée si l'étiquette <literal
>stock</literal
> est utilisée. Vous devriez vraiment utiliser les étiquettes stocks plutôt que d'insérer toutes les traductions dans les thèmes. Cela diminue le temps de chargement et donne de meilleures traductions. Les valeurs suivantes sont valables : </para>

      <segmentedlist>
        <?dbhtml list-presentation="table"?>
        <segtitle
>Type</segtitle
><segtitle
>Expansion</segtitle>

        <!--
        <seglistitem>
          <seg
>ok</seg>
          <seg
><quote
>_OK</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>cancel</seg>
          <seg
>_Cancel</seg>
        </seglistitem>
        <seglistitem>
          <seg
>options</seg>
          <seg
>_Options</seg>
        </seglistitem>
        <seglistitem>
          <seg
>custom_cmd[0-9]</seg>
          <seg
>Obtained from the config file.</seg>
        </seglistitem>
        -->
        <seglistitem>
          <seg
>caps-lock-warning</seg>
          <seg
><quote
>Le verrouillage majuscule est activé</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>chooser</seg>
          <seg
><quote
>Sélecteu_r XDMCP</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>quit</seg>
          <seg
><quote
>_Quitter</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>disconnect</seg>
          <seg
><quote
>Déconn_ecter</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>halt</seg>
          <seg
><quote
>Étei_ndre</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>langue</seg>
          <seg
><quote
>Lan_gue</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>login</seg>
          <seg
><quote
>_Connexion</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>session</seg>
          <seg
><quote
>_Type de session</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>reboot</seg>
          <seg
><quote
>Re_démarrer</quote
></seg>
        </seglistitem>
        <!--
        <seglistitem>
          <seg
>suspend</seg>
          <seg
><quote
>Sus_pend</quote
></seg>
        </seglistitem>
        -->
        <seglistitem>
          <seg
>system</seg>
          <seg
><quote
>_Menu</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>timed-label</seg>
          <seg
><quote
>L'utilisateur %u se connectera dans %t</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>domain-label</seg>
          <seg
><quote
>_Domaine :</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>username-label</seg>
          <seg
><quote
>_Nom d'utilisateur :</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>password-label</seg>
          <seg
><quote
>_Mot de passe :</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>welcome-label</seg>
          <seg
><quote
>Bienvenue sur %h</quote
></seg>
        </seglistitem>

      </segmentedlist>

      <para
>Par exemple : <programlisting
>&lt;stock type=&quot;welcome-label&quot;/&gt;
</programlisting>
      </para>
    </sect2>

    <sect2 id="buddy-nodes">
      <title
>Nœud « buddy »</title>

      <para
>Les éléments qui ne provoquent pas directement une action peuvent être assignées au buddy. Le buddy donne le focus en entrée quand l'élément est activé (cliqué ou un accélérateur d'<literal
>étiquette</literal
> appuyé). </para>

      <para
>Le buddy est référencé par identifiant avec l'attribut <literal
>idref</literal
>. Évidemment, vous devez donner un identifiant. Exemple : <programlisting
>&lt;item type=&quot;label&quot;&gt;
  &lt;stock type=&quot;username-label&quot;/&gt;
  &lt;buddy idref=&quot;user-entry&quot;/&gt;
  [...]
&lt;/item&gt;
[...]
&lt;item type=&quot;entry&quot; id=&quot;user-entry&quot;&gt;
  [...]
&lt;/item&gt;
</programlisting>
      </para>
    </sect2>

  </sect1>

</chapter>
