# Creant temes per a la benvinguda de &kdm;

En aquesta secció es descriu la creació de temes per a la benvinguda de tema. Per exemple inclou captures de pantalla, veure els temes instal·lats estàndards i els temes del lloc web de tema.

## Vista general dels temes

Els temes de &kdm; es poden crear mitjançant la creació d'un fitxer XML que segueixi l'especificació en `$`KDEDIR`/share/apps/doc/kdm/greeter.dtd`. Els fitxers de tema es desen en el directori `$`KDEDIR`/share/apps/kdm/themes/`nom_tema``. El directori de tema ha de contenir un fitxer anomenat `KdmGreeterTheme.desktop` que tindrà un format similar a altres fitxers `.desktop` i s'assembla a:

    [KdmGreeterTheme]
    Greeter=cercles.xml
    Name=Cercles
    Description=Tema amb cercles blaus
    Author=Bond, James Bond
    Copyright=(c) 2002 Bond, James Bond
    Screenshot=captura_de_pantalla.png

Els camps `Name`, `Description`, `Author` i `Copyright` poden ser traduïts igual que en altres fitxers `.desktop`. Tots els fitxers que s'esmenten han d'estar al mateix directori de tema. El camp `Screenshot` apunta a un fitxer que ha de ser una captura de pantalla 200x150 del tema en acció (està bé no tenir-ne una, però és més bonic de cara a l'usuari). L'entrada `Greeter` apunta a un fitxer XML que conté la descripció del tema.

Una vegada que el tema ha estat completament provat, feu-ne un arxiu tar que contingui el directori, ja que serà instal·lat al directori `$`KDEDIR`/share/apps/kdm/themes`. Aquest és el format estàndard per a la distribució de temes de &kdm;.

## Descripció detallada del format XML del tema

### El node de nivell superior

Els temes de &kdm; són fitxers XML amb la marca <greeter> en la seva arrel. El node de nivell superior és un node d'element de tipus `rect` amb un implícit d'estructura fixa.

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

Inclosa dins de la marca «greeter» que pot estar els nodes descrits en les següents seccions d'aquest document. Alguns d'aquests nodes són contenidors (els nodes «layout», els nodes «item») que alhora poden contenir altres nodes.

### Els nodes «item»

Un tema de &kdm; es crea mitjançant l'especificació d'una jerarquia de nodes d'element i de disposició. Els nodes d'element poden tenir el següent valor per a l'atribut `type`:

button

- Un camp de botó. Aquest camp utilitza un botó de Qt.

  També és possible crear qualsevol altre element d'acció com un botó d'ajust amb `button` i el seu atribut a `true`. No obstant, és millor utilitzar els botons de Qt en temes de &kdm; ja que aquests són accessibles a usuaris amb discapacitat.

entry

- Un estri d'entrada com una línia d'edició o un quadre combinat. Tingueu en compte que aquest només és un marcador de posició pels estris Qt.

label

- Una etiqueta de text. Ha de contenir un node `text` o un node `stock` per a especificar el text.

list

- Un estri navegador de cares.

pixmap

- Una imatge de mapa de bits en un format compatible amb Qt, &pex;, PNG, JPEG, TIFF, &etc;

rect

- Un rectangle pla.

svg

- Una imatge vectorial en format SVG.

Per exemple:

    <item type="label">

Un element que actua com un botó:

    <item type="rect" id="botó_desconnecta" button="true">.

Per omissió, la pantalla d'accés de &kdm; desapareixerà després de l'autenticació. Això pot produir parpelleig entre la pantalla d'inici de sessió i la sessió. L'atribut `background` permet als usuaris especificar quins elements del tema són la imatge de fons. Quan s'usi, aquesta farà que el &kdm; elimini tots els elements de no-fons de la pantalla i mostrarà la resta dels elements `background` a la finestra arrel. Això es pot usar per a crear una transició suau entre la pantalla d'inici de sessió i la sessió:

    <item type="rect" background="true">
      <normal file="fons.svg"/>
      <pos x="0" y="0" width="100%" height="-75"/>
    </item>

Per a utilitzar un fons diferent per a la transició en l'accés que l'utilitzada per a l'accés, el tema ha d'especificar dos nodes d'element (que poden contenir mapes de píxels o imatges SVG, per exemple). L'element que correspon al fons de la benvinguda no hauria de tenir la propietat `background`, mentre que l'element que correspon a la transició del fons sí l'ha de tenir. Per exemple:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE greeter SYSTEM "greeter.dtd">
    <greeter>
      <item type="rect" background="true">
        <normal file="fons_per_accedir.svg" element="background"/>
        <pos x="0" y="0" width="100%" height="100%"/>
      </item>
      <item type="rect">
        <normal file="fons_de_benvinguda.svg"/>
        <pos x="0" y="0" width="100%" height="100%"/>
      </item>
      [...]
    </greeter>

En configuracions multi-pantalla, els temes també poden especificar l'aspecte de les pantalles que no siguin la finestra de benvinguda -però els elements de fons normalment només apareixeran allà-. Per especificar en quina(es) pantalla(es) apareixerà un element, l'atribut `screen` es pot utilitzar amb un dels valors `greeter`, `other` o `all`, és a dir, la pantalla de benvinguda està activada, totes les pantalles de benvinguda estan desactivades i activada a totes les pantalles, respectivament.

Es pot donar un nom a cada element mitjançant l'atribut `id`. Algunes identificacions són reconegudes pel &kdm; per a donar als elements una funció especial:

Els elements `button` i els elements amb l'atribut `button="true"`.

- Els botons solen desencadenar certes accions. De manera addicional, el &kdm; ocultarà els botons per a les accions que no estiguin disponibles per alguna raó.

  Identificador Acció
  - chooser_button Executa el selector XDMCP.
  - disconnect_button Desconnecta de la sessió remota.
  - session_button Obre el menú de selecció de tipus de sessió.
  - system_button Obre un menú de llista amb diverses opcions i accions, depenent de la configuració.

Els elements `label`

- El &kdm; mostrarà o ocultarà aquestes etiquetes i establirà el seu text en funció de l'estat del diàleg d'inici de sessió.

  Identificador Funció
  - pam-error Mostra el missatge Accés erroni.

Incrustar elements d'estri

- El &kdm; incrusta en particular estris Qt en aquests elements.

  Identificador Funció
  - user-entry Camp d'entrada per a introduir el nom d'usuari.
  - pw-entry Camp d'entrada per a introduir la contrasenya.
  - domain-entry Alguns connectors de «conversa» utilitzen aquest camp per a consulta un nom de domini. Si aquest camp està present, els elements incrustats relacionats hauran de tenir nodes de vista amb el tipus de `plugin-domain-entry`.
  - talker Aquest element haurà de ser de tipus `rect`. Representa la zona «calenta» de la benvinguda: Conté els elements `label` i `entry` que afecten el procés d'autenticació. Si un cert connector de «conversa» no pot coincidir amb els elements existents amb les seves necessitats, intenta incrustar un estri complex amb un disseny propi en aquest element, així torna a definir totalment al «parlador» de temes. Estrictament parlant, els temes de &kdm; no necessiten proveir en absolut d'un disseny de «parlant» propi, com tots els connectors d'autenticació de &kdm; són capaços de fer ús de l'element `talker`.
  - userlist Aquest element haurà de ser de tipus `list`. Si la característica llista d'usuaris està habilitada, &kdm; serà incrustat a l'estri llista d'usuaris aquí. En cas contrari, aquest element estarà ocult.
  - xconsole Aquest element haurà de ser de tipus `rect`. Si la característica `xconsole` ha estat compilada i habilitada, kdm incrustarà un estri de registre per consola. En cas contrari, aquest tema restarà ocult.

Altres elements

- El &kdm; mostrarà o ocultarà aquests elements en funció de la configuració i l'estat actual de la benvinguda. &kdm; no imposa requeriments de tipus sobre seu, però en general es presten a un tipus determinat.

  Identificador Mostra només quan...
  - timed-label ...el temps per a l'inici de sessió està en curs.
  - caps-lock-warning ...el bloqueig de majúscules està activat.
  - xauth-warning ...el &X-Server; no requereix l'autorització de X per a connectar.
  - userlist-rect ...la llista d'usuaris està habilitada. Incloent l'element `userlist` en aquesta, és possible crear quelcom a un marc al voltant de la llista i només mostrar-lo quan es mostri aquesta.
  - xconsole-rect ...la `xconsole` compilada està habilitada. Anàleg a `userlist-rect`.

### Els nodes «layout container»

Els nodes de disseny apareixen dins dels nodes d'element i altra vegada als nodes d'element contenidor. El tipus de node de disseny determina la disposició dels seus nodes fills. Un node d'element pot contenir un node de disseny de cada tipus.

#### Els nodes «box»

Els nodes «box» disposen automàticament als seus fills en una fila. Que s'especifiquen a continuació:

    <box orientation="alineació" min-width="núm" min-height="núm"
        xpadding="núm" ypadding="núm" spacing="núm"
        homogeneous="lògic">

En cas de `núm` significa el nombre de píxels i `lògic` serà o `true` o `false`. El valor `alineació` pot ser `horizontal` o `vertical`. Si sortiu de qualsevol atribut desactivat, es passarà per omissió a zero per als números, `false` per a lògic i `vertical` per a l'orientació.

La separació és la distància entre els elements fill veïns. El farciment és el marge exterior de la caixa. Si la caixa és homogènia, la mateixa quantitat d'espai serà assignat a cada element fill.

#### Els nodes «fixed»

Fix és un contenidor que té els seus fills establerts en coordenades precises. La mida d'aquest contenidor és el rectangle més petit que conté tots els fills. Fix no té atributs extra i pel que s'usa com:

    <fixed>

Després situeu els altres elements amb els nodes de posició correcta dins seu.

### Els nodes «position»

Cada element pot especificar la seva posició i mida a través del node `pos`. Per exemple:

    <pos x="0" y="4" width="100%" height="100%"/>

Si la mida no s'especifica, l'element serà de mida «natural», anomenat el consell de mida. Tingueu en compte que no tots els elements tenen un consell de mida útil.

La posició i la mida es poden donar en percentatge i es calcula en relació amb la mida del contenidor incrustat en aquest cas. Per als elements del nivell superior és el percentatge de tota la pantalla. Afegint circumflexos (`^`) a l'especificació de mida és possible modificar-lo per a ser relativa a la mida de l'envolcall de l'element envolvent del tema i així successivament.

Si l'element conté una caixa, `width` i `height` pot ser especificat per a ser `box` en el sentit que se suposa que són l'amplada i l'alçada de la caixa, és a dir, els elements de la caixa més el farciment.

Tant `width` com `height` es poden especificara ser `scale` en el sentit que s'han d'escalar d'acord amb l'altra dimensió de l'escala relativa al seu consell de mida. Utilitzeu aquesta opció per a preservar la relació d'aspecte de les imatges a escala de forma automàtica.

Si l'atribut `expand` s'especifica com a `true`, aquest element s'expandirà en la caixa que l'envolta tant com sigui possible (és a dir, se'ls donarà més espai si està disponible).

Si `width` o `height` és un número pla, un valor negatiu representa un desplaçament de la mida del contenidor envolcall. Tingueu en compte que és possible passar un desplaçament positiu escrivint dos signes menys.

En qualsevol cas, és possible limitar la mida final amb els atributs `min-width`, `min-height`, `max-width` i `max-height` que es poden especificar en la mateixa forma que `width` i `height`.

Si `x` o `y` és un número pla, un valor negatiu representarà un desplaçament respecte a la vora inferior dreta, a diferència de l'omissió que és respecte la vora superior esquerra.

També és possible especificar a quin punt dins de l'element es refereix la posició. Això s'anomena l'àncora i pot ser `c` per al centre o una de `n`, `ne`, `e`, `se`, `s`, `sw`, `w` i `nw` que representen les diferents vores/cantonades corresponent a les adreces en un mapa topogràfic. El valor per omissió és `nw`, que és la cantonada superior esquerra. Per exemple:

    <pos x="10%" y="50%" anchor="w" width="80%" height="95"/>

### Els nodes «show»

Podeu especificar l'atribut `type` per a indicar que certs elements només es mostra si el tipus està establert. Prefixar el tipus amb un signe d'exclamació (`!`) inverteix la condició. Els valors vàlids són els següents:

Tipus Mostra si...
- `chooser` El canviar a inici de sessió remot està permès.
- `halt` i `reboot` L'apagada del sistema està permesa.
- `system` Sense condició (sempre s'estableix en &kdm;).
- `plugin-``nom_entrada` El connector de «conversa» proporciona un camp d'entrada corresponent.

Per exemple:

    <show type="chooser"/>

També podeu especificar un valor `min-screen-width` o `min-screen-height` per indicar que certs elements només s'han de mostrar si la resolució de pantalla és almenys la mida especificada. Per exemple:

    <show min-screen-height="768"/>

### Els nodes «normal/active/prelight»

L'aspecte de la majoria de tipus d'elements es pot arranjar amb paràmetres mitjançant les següents marques:

`normal`

- Estat normal.

`prelight`

- Quan el ratolí es manté a sobre de l'element.

`active`

- Quan es fa clic amb un botó del ratolí sobre l'element.

El conjunt exacte dels atributs disponibles depèn del tipus d'element:

`rect`

-     <normal color="#000000" alpha="0.0"/>

  Qualsevol dels atributs es poden ometre, en aquest cas el valor per omissió s'utilitza (l'exemple representa els valors per omissió). `alpha` és un número de punt flotant entre zero (transparent) i un (opac). `color` és un signe numeral seguit per un número hexadecimal de sis digits, el format és «`#``rrggbb`». D'altra banda, `color` es pot especificar com un número hexadecimal de vuit digits, en aquest cas els dos primers dígits són el valor alfa.

`label`

-     <normal color="#ffffff" alpha="1.0" font="Sans 14"/>

  `alpha` i `color` s'especifiquen com en els elements «rect».

  `font` segueix el format «`llista-família` `opcions-estil` `mida`». Cada part és opcional.

  `llista-família` és una llista separada per comes de les famílies de tipus de lletra com «helvetica», «monospace», &etc;

  `opcions-estil` és una llista delimitada per espais de les paraules clau de l'estil de categories, l'amplada i estirament, de cada categoria almenys un. L'estil pot ser `normal`, `italic` o `oblique`. D'amplada poden ser `ultra-light`, `light`, `medium`, `semi-bold`, `bold`, `ultra-bold` o `heavy`. L'estirament permesos comprenen `ultra-condensed`, `extra-condensed`, `condensed`, `semi-condensed`, `normal`, `semi-expanded`, `expanded`, `extra-expanded` i `ultra-expanded`.

  La `mida` pot ser un número de punt flotant que representa la mida en punts (1/72 polzades) o un íntegre seguit pels `px` que representa la mida en píxels. Les mides en punts són preferibles, ja que són independents de la resolució de la pantalla.

  Si qualsevol dels atributs es queda fora, s'utilitzen els valors del node estil. Si no s'ha especificat color del text de la finestra s'utilitzarà el blanc. El tipus de lletra per omissió és el configurat en &kdmrc;.

`pixmap`

`svg`

-     <normal file="imatge.png" tint="#dddddd" alpha="1.0"/>

  `file` especifica el fitxer que conté la imatge. Les rutes relatives són relatives al directori de tema.

  `wallpaper` es pot utilitzar en comptes de `file` per a tenir l'aspecte de &kdm; per a les imatges en els llocs habituals per als fons d'escriptori &kde;. Els paquets de fons d'escriptori Plasma són compatibles.

  `element` especifica l'identificador de l'element d'un fitxer SVG. Si està buit, es representarà tota la imatge SVG.

  Per a nodes `pixmap`, és possible proporcionar imatges múltiples, de manera que la qualitat de la imatge millori per a una resolució donada. Els noms al fitxer de marques de mida tenen el format `nombase``-``amplada` `x` `llarg``.``extensió`. Si existeix el fitxer de marques de mida i aquest no és un paquet fons de pantalla Plasma, el &kdm; només acceptarà una correspondència perfecta per a una determinada mida, d'altra manera fallarà tornant al fitxer original. En cas contrari, mirarà de trobar una imatge amb dimensions que s'acostin el més possible a la mida requerida.

  `scalemode` especifica com ajustar la mida de les imatges que no coincideixen amb la mida de l'element. `free` (per omissió) simplement significa escalar la imatge a la mida adequada, possiblement distorsionant la seva relació d'aspecte. Els altres dos modes de mantenir la relació d'aspecte de la imatge: `fit` ampliant la imatge a la mida màxima que cap en la geometria de l'element. La imatge serà centrada. L'àrea restant no serà pintada per aquest element, pel que ha de ser col·locada en la part superior d'un farcit sòlid `rect`. `crop` captura la imatge a la mida mínima omplint del tot la geometria de l'element. La imatge serà retallada simètricament.

  Els elements `tint` i `alpha` formen una especificació de color com a `rect`. Cada píxel de la imatge es multiplica per aquest color per a cada component.

### Els nodes «widget style»

Aquesta marca permet canviar l'aparença de les etiquetes i estris Qt incrustats en el tema, &pex;, la línia d'edició, els botons o la llista d'usuaris. L'arranjament d'estil és heretat dels elements fills, però es poden tornar a definir individualment. Els valors per omissió es prenen de &kdmrc;.

L'atribut `font` defineix el tipus de lletra de tots els estris. Per a estris amb una funció d'entrada es poden tornar a definir amb l'atribut `edit-font`. Els tipus de lletra s'especifiquen de la mateixa manera que en els nodes normal/active/prelight.

En general, el motor de temes s'esforça molt per eliminar els marcs dels estris Qt, de manera que es fonen en el tema a la perfecció. En els casos en què això no es desitja, l'atribut `frame` es pot establir a `true`.

L'atribut `guistyle` es pot utilitzar per a tornar a definir la &IGU; a l'estil Qt per als estris incrustats. Per omissió és proposada per `GUIStyle` en &kdmrc;.

És possible especificar gairebé tota la paleta per als estris tal com es documenta al lloc de Trolltech. Els noms d'atribut es componen d'un àmbit, un paper de color i un sufix. Els àmbits possibles són -en ordre de prioritat cada vegada més gran- `all-` per a tots els grups de color, no hi ha àmbits pels grups de color actius i inactius i `active-`, `inactive-` i `disabled-` per als grups de color respectius. Els grups de color admesos són `window`, `window-text`, `base`, `alternate-base`, `text`, `bright-text`, `highlight`, `highlighted-text`, `button` i `button-text`. El sufix pot ser `-color` o `-alpha` amb el significat respectiu com en els nodes normal/active/prelight.

Com a alternativa a l'especificació a la línia de la paleta, l'atribut `colorscheme` es pot utilitzar per a carregar un complet esquema de colors del &kde;. Per omissió és proposat per `ColorScheme` en &kdmrc;. Especificacions individuals de `color` tornaran a definir els colors de l'esquema.

Exemple:

    <style edit-font="Comic 16" text-color="#dddddd" frame="true"/>

### Els nodes de color «face browser»

Els nodes de color permeten tornar a definir el color de fons dels elements en el navegador de cares. `labelcolor` i `altlabelcolor` són essencialment equivalents a `all-base-color` respectivament `all-alternate-base-color` en els nodes d'estil. Si només s'especifica `labelcolor` es deshabilitaran els demés elements de fons.

    <color labelcolor="#80ffffff" altlabelcolor="#80f0f0f0"/>

### Els nodes «text»

Les marques de text són utilitzades per les etiquetes. Es poden utilitzar per a mostrar text localitzat de la següent manera (si l'atribut `xml:lang` és omès, s'assumirà el locale POSIX):

    <text xml:lang="fr">Option</text>

Els nodes de text poden contenir les següents seqüències de caràcters especials que es tradueixen de la següent manera:

Seqüència Expansió
- %% Un caràcter % literal.
- %c Rellotge de paret amb l'hora i la data.
- %d Nom de la pantalla (la variable d'entorn `DISPLAY`).
- %h Nom de la màquina (la sortida de `gthostname`).
- %m Nom de la màquina (machine part de la sortida de `uname`).
- %n Nom del node (nodename part de la sortida de `uname`).
- %o Nom del domini (la sortida de `getdomainname`).
- %r Nom de la versió (release part de la sortida de `uname`).
- %s Nom del sistema (sysname part de la sortida de `uname`).
- %t Nombre de segons restants fins que es realitzi l'accés, més apropiada la forma i18n plural de «segon».
- %u Nom d'usuari per a l'inici de sessió automàtic.
- _ Fa que el següent caràcter sigui un accelerador.

`%t` i `%u` estan destinats a només ser utilitzats internament per a mostrar el missatge `timed-label`, el qual s'actualitza automàticament cada segon.

### Els nodes «stock»

Algunes etiquetes localitzades comunes poden especificar-se a través de les marques `stock`. La marca `text` és ignorada si s'utilitza la marca `stock`. Segur que heu utilitzat les marques de valors en comptes de posar totes les traduccions en els temes. Això produeix temps de càrrega més ràpid i millors traduccions. Els següents valors són vàlids:

Tipus Expansió
- caps-lock-warning El bloqueig de majúscules està activat
- chooser Selecto_r de XDMCP.
- quit _Surt.
- disconnect Desconn_ecta.
- halt _Apaga.
- language _Idioma.
- login _Accés.
- session _Tipus de sessió.
- reboot _Reinicia.
- system _Menú.
- timed-label L'usuari %u es connectarà en %t.
- domain-label _Domini:
- username-label Nom d'_usuari:
- password-label Contras_enya:
- welcome-label Benvingut a %h.

Per exemple:

    <stock type="welcome-label"/>

### Els nodes «buddy»

Els elements que no causen directament una acció poden assignar-se a un company. Al company se li dóna el focus d'entrada quan l'element està activat (feu clic o premeu un accelerador `label`).

Es fa referència al company pel id amb l'atribut `idref`. Òbviament, cal donar-li un id. Exemple:

    <item type="label">
      <stock type="username-label"/>
      <buddy idref="user-entry"/>
      [...]
    </item>
    [...]
    <item type="entry" id="user-entry">
      [...]
    </item>