# Creazione temi per il Gestore di accessi &kdm;

Questa sezione descrive la creazione di temi per il Gestore degli accessi. Per esempi dotati di screenshot, vedi i temi standard installati e i temi su, il sito su cui sono raccolti i temi.

## Panoramica dei temi

I temi di &kdm; possono essere realizzati usando un file XML che segue le specifiche in `$`KDEDIR`/share/apps/doc/kdm/greeter.dtd`. I file dei temi sono salvati nella cartella `$`KDEDIR`/share/apps/kdm/themes/`nome del tema`` . La cartella del tema dovrebbe contenere un file chiamato `KdmGreeterTheme.desktop` che ha un formato simile agli altri file `.desktop` e contiene qualcosa di simile a questo:

    [KdmGreeterTheme]
    Greeter=cerchi.xml
    Name=Cerchi
    Description=Tema con cerchi blu
    Author=Bond, James Bond
    Copyright=(c) 2002 Bond, James Bond
    Screenshot=screenshot.png

I campi `Name`, `Description`, `Author` e `Copyright` possono essere tradotti come negli altri file `.desktop`. Tutti i file che sono menzionati dovrebbero trovarsi nella cartella del tema stesso. Il campo `Screenshot` punta a un file che dovrebbe essere uno screenshot 200x150 del tema in azione (va bene lo stesso non averne uno, ma se c'è è meglio). Il campo `Greeter` punta ad un file XML che contiene la descrizione del tema.

Una volta che il tema è stato pienamente testato, crea un archivio che contenga la cartella che dovrebbe essere installata in `$`KDEDIR`/share/apps/kdm/themes`. Questo è il formato standard in cui distribuire i temi per &kdm;.

## Descrizione dettagliata del formato XML del tema

### Nodo principale

I temi di &kdm; sono file XML con una tag «greeter» come radice. Il nodo di primo livello è un nodo oggetto di tipo `rect` con un layout fisso implicito.

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

Il contenuto del tag «greeter» può essere uno dei nodi descritti nella prossima sezione di questo documento. Alcuni di questi nodi sono contenitori (nodi di layout, nodi oggetto) che possono contenere a loro volta altri nodi.

### Nodi oggetto

Un tema &kdm; è creato specificando una gerarchia di elementi e nodi di layout. I nodi oggetto possono avere il seguente valore per l'attributo `type`:

button

- Un campo pulsante. Questo campo usa un pulsante Qt.

  É anche possibile far agire qualunque altro elemento come un pulsante impotando il suo attributo `button` = `true`. Comunque è meglio usare pulsanti Qt nei temi &kdm; poiché questi sono accessibili da utenti diversamente abili.

entry

- Un oggetto di inserimento come una casella di testo o una casella combinata. Nota che questo è solo un segnaposto per gli oggetti Qt.

label

- Un'etichetta di testo. Deve contenere o un nodo `text` o un nodo `stock` per specificare il testo.

list

- Oggetto con la lista con le immagini degli utenti.

pixmap

- Un'immagine raster in un formato che Qt supporta, ⪚ PNG, JPEG, Tiff, ecc.

rect

- Un rettangolo semplice.

svg

- Un'immagine vettoriale nel formato SVG.

Per esempio:

    <item type="label">

Un oggetto che agisce come un pulsante:

    <item type="rect" id="disconnect_button" button="true">.

Di default, la schermata di accesso di &kdm; scomparirà dopo l'autenticazione. Questo può causare uno sfarfallio tra la schermata di accesso e la sessione. L'attributo `background` permette agli utenti di specificare quali elementi del tema costituiscono l'immagine di sfondo. Quando usato,questo farà sì che &kdm; rimuoverà tutti gli elementi non di sfondo dallo schermo e disegnerà i rimanenti oggetti `background` sullo sfondo. Ciò può essere sfruttato per realizzare una transizione graduale tra la schermata di accesso e la sessione:

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

Per usare un diverso sfondo per la transizione da quello della schermata di accesso, il tema dovrebbe specificare due nodi oggetto (che potrebbero contenere pixmap o immagini svg, per esempio). L'oggetto che corrisponde allo sfondo del gestore non dovrebbe avere la proprietà `background` mentre l'oggetto che corrisponde allo sfondo della transizione dovrebbe avere la proprietà `background`. Per esempio:

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

Nelle configurazioni multi schermo, i temi posso anche specificare l'aspetto degli altri schermi diversi da quello in cui è attivo il gestore degli accessi, ma in genere vi appariranno solo gli oggetti di sfondo. Per specificare su quale/i schermo/i deve essere visualizzato un elemento si può usare l'attributo `screen` con un valore scelto tra `greeter`, `other` o `all`, che indicano rispettivamente lo schermo in cui è presente il gestore degli accessi, tutti gli schermi in cui non è presente il gestore degli accessi, e tutti gli schermi.

Ad ogni elemento può essere dato un nome tramite l'attributo `id`. Certi id sono riconosciuti da &kdm; per dare a quegli oggetti funzioni speciali:

oggetti `button`e oggetti con l'attributo `button="true"`.

- I pulsanti solitamente fanno da interruttori per certe azioni.In più &kdm; nasconderà i pulsanti le cui azioni non sono disponibili.

  Id Azione
  - chooser_button Avvia il selettore XDMCP.
  - disconnect_button Disconnette dalla sessione remota.
  - session_button Apre il menu di selezione della sessione.
  - system_button Apre un menu omnicomprensivo con svariate opzioni e azioni, a seconda della configurazione.

oggetti `label`

- &kdm; mostrerà/nasconderà queste etichette e imposterà il testo in base allo stato della finestra di accesso.

  Id Funzione
  - pam-error Questo mostra il messaggio Accesso non riuscito..

Oggetti che incorporano widget

- &kdm; incorporerà particolari widget Qt in questi oggetti.

  Id Funzione
  - user-entry Campo di inserimento del nome utente.
  - pw-entry Campo di inserimento della password.
  - domain-entry Alcune estensioni di tipo conversation usano questo campo per richiedere il nome di dominio. Se questo campo è presente, il relativo elemento contenitore dovrebbe avere mostra nodi con il tipo `plugin-domain-entry`.
  - talker Questo elemento dovrebbe essere del tipo `rect`. Rappresenta la parte principale del gestore degli accessi: contiene gli oggetti `label` e `entry` che riguardano il processo di autenticazione. Se una data estensione di tipo conversation non può soddisfare le necessità degli altri oggetti, questa cerca di incorporare un complesso widget con un proprio layout dentro questo oggetto, sovrascrivendo così interamente il talker del tema. Per essere precisi i temi di &kdm;non necessitano per nulla di fornire dei design talker, perché tutte le estensioni di autenticazione di &kdm; sono in grado di fare uso dell'oggetto `talker`.
  - userlist Questo oggetto deve essere del tipo `list`. Se l'opzione lista utenti è selezionata, &kdm;incorporerà qui il widget lista utenti. Altrimenti questo oggetto è nascosto.
  - xconsole Questo oggetto dovrebbe essere del tipo `rect`. Se l'opzione integrata `xconsole` è compilata e attivata, &kdm; incorporerà il widget del log della console qui. Altrimenti questo oggetto è nascosto.

Altri oggetti

- &kdm; mostrerà/nasconderà questi oggetti in base alla configurazione e allo stato attuale del gestore accessi. &kdm; non impone requisiti di tipo su di loro, ma solitamente gli si assegna un tipo specifico.

  Id Mostra solo quando...
  - timed-label ... accesso temporizzato in corso.
  - caps-lock-warning ... Bloc Maiusc è acceso.
  - xauth-warning ... l' &X-Server; non richiede nessuna X autorizzazione per connettersi.
  - userlist-rect ... la lista utente è attiva. Dall'annidamento dell'oggetto `userlist` in questo, è possibile creare qualcosa di simile ad una cornice intorno alla lista e averla mostrata solo quando la lista lista è mostrata.
  - xconsole-rect ... l'opzione integrata `xconsole` è attiva. Analogo a `userlist-rect`.

### Nodi contenitori di layout

I nodi di layout appaiono dentro nodi oggetto e contengono a loro volta nodi oggetto. Il tipo del nodo di layout determina la disposizione dei nodi figli. Un nodo oggetto può contenere on nodo di layout di ogni tipo.

#### Nodi casella

I nodi casella automaticamente dispongono i loro figli in linea. Sono specificati come segue:

    <box orientation="allineamento" min-width="num" min-height="num"
        xpadding="num" ypadding="num" spacing="num"
        homogeneous="bool">

Dove per`num` si intende il numero di pixel e `bool` significa o `true` o `false`. Il valore `allineamento` può essere o `horizontal` o `vertical`. Se tu lasci qualche attributo spento, sarà 0 di default per i numeri, `false` per le variabili e `vertical` per l'orientamento.

La spaziatura è la distanza tra elementi figli adiacenti. Il riempimento è il margine esterno della casella. Se la casella è omogenea, la stessa quantità di spazio è assegnata per ogni elemento figlio.

#### Nodi fissi

Fisso è un contenitore che ha i suoi figli disposti in precise coordinate. La dimensione di questo contenitore è il più piccolo rettangolo che contiene tutti i figli.Fisso non ha attributi extra e così usa soltanto:

    <fixed>

Dunque metti al suo interno altri oggetti con la corretta posizione.

### Nodi di posizione

Ogni oggetto può specificare la sua posizione tramite il nodo `pos`. Per esempio:

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

Se la dimensione non è specificata, verrà impostata la dimensione «naturale» dell'oggetto, chiamata la dimensione suggerimento. N.B. Non tutti gli oggetti hanno una dimensione suggerimento utile.

Sia la posizione che la dimensione possono essere date in percentuale e saranno calcolate relativamente alla dimensione dell'elemento contenitore che le racchiude in questo caso. Per elementi di primo livello sulla percentuale dell'intero schermo. Aggiungendo gli accenti circonflessi (`^`) alla specificazione della dimensione è possibile modificarla per essere relativa alla dimensione dell'elemento che contiene e così via.

Se l'oggetto contiene una casella, `width` e `height` possono essere specificate per essere `box` intendendo che devono essere la larghezza e l'altezza della casella, che includono gli oggetti nella casella più il riempimento.

Uno tra `width` e `height` può essere specificato come `scale` intendendo che esso dovrebbe essere in scala con la scala delle altre dimensioni relativamente alla dimensione suggerita. Usa questa possibilità per mantenere automaticamente l'aspetto delle immagini riscalate.

Se è specificato l'attributo `expand` ed è impostato su `true`, questo elemento sarà espanso il più possibile nella casella che lo racchiude (questo significa che riceverà più spazio se disponibile).

Se `width` o `height` sono numeri, un valore negativo rappresenta una sporgenza dalla dimensione del contenitore. N.B. È possibile specificare una sporgenza positiva scrivendo due segni meno.

In entrambi i casi è possibile vincolare la dimensione finale con gli attributi `min-width`, `min-height`, `max-width` e `max-height` che possono essere specificati allo stesso modo di `width` e `height`.

Se `x` o `y` sono numeri, un valore negativo indica una posizione da destra e dal basso, diversamente dal default che è da sinistra dall'alto.

È anche possibile specificare a quale punto nell'oggetto si riferisca la posizione. Questo è chiamato ancora e può essere o `c` per centro o uno tra `n`, `ne`, `e`, `se`, `s`, `sw`, `w` and `nw` or `c` che stanno per i diversi lati/angoli come per una mappa topografica, L'impostazione di default è `nw`, che è l'angolo in alto a sinistra. Ad esempio:

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

### Mostra nodi

Puoi specificare l'attributo `type` per indicare che certi oggetti devono essere mostrati solo se è impostato il tipo. Inserire prima del tipo un punto esclamativo (`!`) inverte la condizione. I valori validi includono i seguenti:

Tipo Mostra se...
- `chooser` passare all'accesso remoto è consentito.
- `halt` e `reboot` spegnere il sistema è consentito.
- `system` nessuna condizione (sempre impostato in &kdm;).
- `plugin-``nome` l'estensione di tipo conversation fornisce un corrispondente campo d'inserimento.

Per esempio:

    <show type="chooser"/>

Altrimenti puoi specificare i valori `min-screen-width` o `min-screen-height` per indicare che certi oggetti devono essere mostrati solo se la risoluzione dello schermo è maggiore o uguale a quella specificata. Ad esempio:

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

### Nodi normale/attivo/preilluminato

L'aspetto di molti oggetti può essere regolato tramite i seguenti tag:

`normal`

- Stato normale.

`prelight`

- Quando il mouse passa sull'oggetto.

`active`

- Quando si fa clic sull'oggetto.

L'esatto insieme di attributi disponibili dipende dal tipo di oggetto:

`rect`

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

  Entrambi gli attributi possono essere omessi, nel qual caso viene usato il default (l'esempio rappresenta i default). `alpha` è un numero a virgola mobile tra 0 (trasparente) e 1 (opaco). `color` è un indicatore seguito da un numero esadecimale a sei cifre; il formato è `#``rrggbb`. Alternativamente, `color` può essere specificato come numero esadecimale a otto cifre, nel qual caso le prime due cifre sono il valore alpha.

`label`

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

  `alpha` e `color` sono specificati come negli oggetti rect.

  `font` segue il formato «`lista famiglia` `opzioni stile` `dimensione`». Ogni parte è facoltativa.

  `lista famiglia` è una lista di famiglie di font come «helvetica», «monospace», ecc.

  `opzioni stile` è una lista di parole chiave dallo stile, spessore e spaziatura dalle categorie; al massimo uno da ogni categoria. Lo stile può essere `normal`, `italic` o `oblique`. Spessore può essere `ultra-light`, `light`, `medium`, `semi-bold`, `bold`, `ultra-bold` o `heavy`. Spaziature ammesse sono `ultra-condensed`, `extra-condensed`, `condensed`, `semi-condensed`, `normal`, `semi-expanded`, `expanded`, `extra-expanded` e `ultra-expanded`.

  `dimensione` è o un numero a virgola mobile che rappresenta la dimensione in punti (0,35277 mm) o un intero seguito da `px` che rappresenta la dimensione in pixel. Dimensioni in punti sono preferibili, essendo indipendenti dalla risoluzione dello schermo.

  Se qualche attributo non è specificato, sono usati i valori dei nodi stile. Se questo non restituisce informazioni sul colore del testo della finestra, verrà usato il bianco. La font di default è configurata in &kdmrc;.

`pixmap`

`svg`

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

  `file` specifica il file contenente l'immagine. Percorsi relativi sono relativi alla cartella del tema.

  `wallpaper` può essere usato al posto di un `file` per &kdm; cercare le immagini nelle solite posizioni degli sfondi di &kde;Gli sfondi di Plasma sono supportati.

  `element` specifica l'id di un elemento di un file SVG. Se vuoto, sarà disegnata l'intera immagine SVG.

  Per i nodi `pixmap`,è possibile fornire immagini multiple, in modo che l'immagine di migliore qualità per una data risoluzione venga usata. I file devono avere il formato che corrisponda a `nomebase` `x-``larghezza` `x` `altezza``.``estensione`. Se il file non esiste e non è uno sfondo di Plasma, &kdm; accetterà solo una corrispondenza perfetta altrimenti tornerà al file originale. Se non vi è corrispondenza diretta cercherà di trovare un'immagine le cui dimensioni siamo le più vicine possibili.

  La modalità `ridimensionamento` specifica come sistemare la dimensione dell'immagine che non corrisponde alla dimensione dell'elemento.`libero` (predefinito) significa semplicemente ridimensionare l'immagine alla dimensione corretta, possibilmente senza mantenere il rapporto delle dimensioni. Le altre due modalità preservano il rapporto delle dimensioni dell'immagine: `adatta` significa ingrandire l'immagine fino alla dimensione massima che si adatta alla geometria dell'elemento. L'immagine verrà centrata. L'area restante non verrà disegnata da questo elemento, quindi verrà posizionata sopra un `rettangolo` di colore pieno. `ritaglia` significa ingrandire l'immagine fino alla dimensione minima che riempe completamente la geometria dell'elemento. L'immagine verrà tagliata simmetricamente.

  `tint` e `alpha` costituiscono specifiche sul colore come negli oggetti `rect`. Ogni pixel dell'immagine è moltiplicato con questo colore per ogni componente.

### Nodi stile oggetto

Questo tag rende possibile cambiare l'aspetto di etichette e oggetti Qt incorporati nel tema (es., linee di modifica, pulsanti o liste utenti). Le impostazioni di stile sono ereditate dagli oggetti figli, ma possono essere sovrascritte individualmente. I default sono presi da &kdmrc;.

L'attributo `font` definisce la font di tutti gli oggetti. Per oggetti con funzione di input questo può essere sovrascritto con l'attributo `edit-font`. Le font sono specificate come in nodi normale/attivo/preilluminato.

Solitamente, il motore dei temi prova a rimuovere ogni cornice dagli oggetti Qt, così essi si fondono nel tema senza problemi. Nei casi in cui non lo si desidera, l'attributo `frame` può essere impostato su `true`.

L' attributo dello stile dell'`interfaccia` può essere usato per sovrascrivere lo stile Qt per gli oggetti incorporati. Quello predefinito è dato da `GUIStyle` nel file &kdmrc;

È possibile specificare quasi l'intera palette per gli oggetti come documentato sulsito di Trolltech. I nomi degli attributi sono composti da un'estensione, un ruolo di colore e un suffisso. Possibili scopi sono - ordinati per precedenza crescente - `all-` per tutti i gruppi di colori, nessun estensione per i gruppi di colore attivi e inattivi e `active-`, `inactive-` e `disabled-` per il gruppo di colori corrispondente. I ruoli di colore supportati sono `window`, `window-text`, `base`, `alternate-base`, `text`, `bright-text`, `highlight`, `highlighted-text`, `button` e `button-text`. Il suffisso può essere `-color` o `-alpha` con il rispettivo significato come in nodi normale/attivo/preilluminato.

Come alternativa a specificare la paletta nella riga, l'attributo `colorscheme` può essere usato per caricare uno schema di colori per &kde; completo. Quello predefinito è dato da `ColorScheme` in &kdmrc;. Specifiche individuali di `color` sovrascriveranno i colori impostati dallo schema.

Esempio:

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

### Nodi colore per il navigatore visuale

I nodi di colore permettono di sovrascrivere il colore di sfondo degli oggetti nel navigatore visuale. `labelcolor` e `altlabelcolor` sono essenzialemente equivalenti a `all-base-color` o rispettivamente `all-alternate-base-color` in nodi di stile. Solo se `labelcolor` è specificato, sfondi a voci alterne sono disabilitati.

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

### Nodi di testo

Le etichette usano tag di testo. Possono essere usate per mostrare testi tradotti come segue (se l'attributo `xml:lang` è omesso, il locale POSIX viene assunto):

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

I nodi di testo possono contenere le seguenti sequenze di caratteri speciali che saranno tradotte come segue:

Sequenza Espansione
- %% Un carattere %
- %c Ora e data dell'orologio
- %d Mostra nome (variabile d'ambiente `DISPLAY`)
- %h Nome host (output di `gethostname`)
- %m Nome della macchina (machine parte dell'output di `uname`)
- %n Nome del nodo (nodename parte dell'output di `uname`)
- %o Nome di dominio (output di `getdomainname`)
- %r Nome versione (release parte dell'output di `uname`)
- %s Nome del sistema (sysname parte dell'output di `uname`)
- %t Numero di secondi entro cui sarà effettuato l'accesso automatico, più l'appropriata forma internazionalizzata del plurale di «secondo»
- %u Nome utente per l'accesso automatico
- _ Rende il carattere seguente un acceleratore

`%t` e `%u` sono pensati per essere usati solo internamente per mostrare il messaggio `timed-label`, che è automaticamente aggiornato ogni secondo.

### Nodi predefiniti

Certe etichette localizzate comunemente possono essere specificate tramite i tag predefiniti. Il tag `text` è ignorato se viene usato il tag `stock`. Dovresti usare le etichette predefinite piuttosto che inserire tutte le traduzioni nei temi. Questo comporta tempi di caricamento più veloci e traduzioni sensibilmente migliori. Sono validi i seguenti valori:

Tipo Espansione
- caps-lock-warning Blocco maiuscole è inserito
- chooser XDMCP Choose_r
- quit _Esci
- disconnect Disconn_etti
- halt Speg_ni
- language Lin_gua
- accesso _Accesso
- session _Tipo di sessione
- reboot Riavvia
- system _Menu
- timed-label L'utente %u effettuerà il login in %t
- domain-label _Dominio:
- username-label Nome _utente:
- password-label _Password:
- welcome-label Benvenuto su %h

Per esempio:

    <stock type="welcome-label"/>

### Nodi compagno

Agli oggetti che non attivano direttamente un'azione si può assegnare un compagno. Al compagno è passato il fuoco di input quando l'oggetto è attivato (con un clic o un acceleratore della `label` è premuto).

Il compagno è collegato tramite id con l'attributo `idref`. Ovviamente gli deve essere fornito un ID. Per esempio:

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