<chapter id="kdm-themes">
  <title
>Criar temas para o ecrã de boas-vindas do &kdm;</title>

  <para
>Esta secção descreve a criação dos temas para o ecrã de boas-vindas. Para obter mais exemplos que incluam imagens, veja os temas-padrão instalados e os temas da <ulink type="http" url="http://www.kde-look.org/index.php?xcontentmode=40"
>página Web respectiva</ulink
>. </para>

  <sect1 id="theme-overview">
    <title
>Introdução ao Tema</title>

    <para
>Os temas do &kdm; podem ser criados se definir um ficheiro XML que siga a especificação em <filename
>$<envar
>KDEDIR</envar
>/share/apps/doc/kdm/greeter.dtd</filename
>. Os ficheiros dos temas são guardados na pasta <filename class="directory"
>$<envar
>KDEDIR</envar
>/share/apps/kdm/themes/<replaceable
>nome-tema</replaceable
></filename
>. A pasta dos temas deverá conter um ficheiro chamado <filename
>KdmGreeterTheme.desktop</filename
>, o qual tem um formato semelhante ao dos outros ficheiros <filename class="extension"
>.desktop</filename
>, sendo semelhante ao seguinte: <programlisting
>[KdmGreeterTheme]
Greeter=circulos.xml
Name=Círculos
Description=Tema com círculos azuis
Author=Bond, James Bond
Copyright=(c) 2002 Bond, James Bond
Screenshot=imagem.png
</programlisting>
    </para>

    <para
>Os campos <literal
>Name</literal
>, <literal
>Description</literal
>, <literal
>Author</literal
> e <literal
>Copyright</literal
> poderão ser traduzidos como acontece nos outros ficheiros <filename class="extension"
>.desktop</filename
>. Todos os ficheiros que sejam mencionados deverão estar na pasta do próprio tema. O campo <literal
>Screenshot</literal
> aponta para um ficheiro que deverá ser uma imagem em 200x150 do tema em acção (está correcto não ter nenhuma, mas é mais agradável para o utilizador). O item <literal
>Greeter</literal
> aponta para um ficheiro XML que contém a descrição do tema. </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
>Logo que tenha testado por completo um tema, crie um pacote que contém a pasta, tal como seria instalada na pasta <filename class="directory"
>$<envar
>KDEDIR</envar
>/share/apps/kdm/themes</filename
>. Este é o formato-padrão para distribuir temas do &kdm;. </para>
  </sect1>

  <sect1 id="theme-format">
    <title
>Descrição Detalhada do Formato XML do Tema</title>

    <sect2 id="greeter-tag">
      <title
>Nó do Topo</title>

      <para
>Os temas do &kdm; são ficheiros XML com a marca &lt;greeter&gt; no seu topo. O nó de topo é um <link linkend="item-nodes"
>nó de item</link
> do tipo <literal
>rect</literal
> com uma <link linkend="fixed-nodes"
>disposição fixa</link
> implícita. </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
>Dentro da marca 'greeter' poderão existir os nós descritos nas secções seguintes deste documento. Alguns destes nós são contentores (nós de disposição, nós de itens) que poderão conter ainda outros nós. </para>
    </sect2>

    <sect2 id="item-nodes">
      <title
>Nós de Itens</title>

      <para
>Um tema do &kdm; é criado ao definir uma hierarquia de nós de itens e disposição. Os nós de itens poderão ter o seguinte valor para o atributo <literal
>type</literal
>: </para>

      <variablelist>

        <varlistentry>
          <term
>button</term>
          <listitem>
            <para
>Um campo de botão. Este campo usa um botão do Qt. </para>
            <para
>Também é possível fazer com que outro item actue como se fosse um botão, definindo o seu atributo <literal
>button</literal
> como sendo <literal
>true</literal
>. Contudo, é melhor usar os botões do Qt nos temas do &kdm;, dado que são acessíveis para pessoas com necessidades especiais. </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>entry</term>
          <listitem>
            <para
>Um item de introdução de dados, como um campo de texto ou uma lista. Lembre-se que este é apenas um espaço de colocação para itens do Qt.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>label</term>
          <listitem>
            <para
>Uma legenda de texto. Deverá conter um <link linkend="text-nodes"
>nó <literal
>text</literal
></link
> ou um <link linkend="stock-nodes"
>nó <literal
>stock</literal
></link
> para definir  o texto. </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>list</term>
          <listitem>
            <para
>Um item de navegação de fotos das pessoas.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>pixmap</term>
          <listitem>
            <para
>Uma imagem rasterizada num formato que o Qt suporta, &eg; PNG, JPEG, Tiff, etc.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>rect</term>
          <listitem>
            <para
>Um rectângulo simples.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>svg</term>
          <listitem>
            <para
>Uma imagem vectorial no formato SVG.</para>
          </listitem>
        </varlistentry>
      </variablelist>

      <para
>Por exemplo: <programlisting>
&lt;item type=&quot;label&quot;&gt;
</programlisting
> Um item que actua como um botão: <programlisting
>&lt;item type=&quot;rect&quot; id=&quot;botao_desligar&quot; button=&quot;true&quot;&gt;.
</programlisting>
      </para>

      <para
>Por omissão, o ecrã de autenticação do &kdm; irá desaparecer após a autenticação. Isto poderá resultar numa intermitência entre o ecrã de autenticação e a sessão. O atributo <literal
>background</literal
> permite aos utilizadores indicarem os elementos do item que são a imagem de fundo. Quando for usado, isto fará com que o &kdm; remova todos os itens fora do fundo do ecrã e apresente os outros itens <literal
>background</literal
> restantes na janela de topo. Isto poderá ser usado para criar uma transição suave entre o ecrã de autenticação e a sessão:<programlisting>
&lt;item type=&quot;rect&quot; background=&quot;true&quot;&gt;
  &lt;normal file="fundo.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
> Para usar um fundo diferente para a transição da autenticação do que é usado na autenticação, o tema deverá definir dois nós de itens (que deverão conter imagens rasterizadas ou SVG, por exemplo). O item que corresponder ao fundo do ecrã de boas-vindas não deverá ter a propriedade <literal
>background</literal
>, enquanto o item que corresponde ao fundo de transição deverá ter a propriedade <literal
>background</literal
>. Por exemplo : <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="fundo_autenticacao.svg" element="fundo"/&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="fundo_boas_vindas.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
>Nas configurações em vários ecrãs, os temas poderão também definir a aparência dos outros ecrãs diferentes do ecrã em que aparece a mensagem de boas-vindas - contudo, tipicamente só aparecem os itens de fundo nesse caso. Se quiser indicar em que ecrãs um dado item deverá aparecer, poderá usar o atributo <literal
>screen</literal
> com o valor igual a <literal
>greeter</literal
>, <literal
>other</literal
> ou <literal
>all</literal
>, o que corresponde ao ecrã da mensagem de boas-vindas, nos outros ecrãs onde esta mensagem não aparece ou em todos, respectivamente. </para>

      <variablelist>
        <para
>Cada item poderá ter um nome próprio com o atributo <literal
>id</literal
>. Alguns ID's são reconhecidos pelo &kdm; para dar a esses itens uma função especial: </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
>Itens <literal
>button</literal
> e itens com o atributo <literal
>button=&quot;true&quot;</literal
>.</term>

          <listitem>
            <para
>Os botões tipicamente despoletam algumas acções. Para além disso, o &kdm; irá esconder os botões cujas acções não estejam disponíveis por alguma razão. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Acção</segtitle>

              <seglistitem>
                <seg
>chooser_button</seg>
                <seg
>Executa o seleccionador do 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
>Desligar da sessão remota.</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
>Abre o menu de selecção do tipo de sessão.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>system_button</seg>
                <seg
>Abre um menu de selecção completa com várias opções e acções, dependendo da configuração.</seg>
              </seglistitem>
            </segmentedlist>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>Itens <literal
>label</literal
></term>

          <listitem>
            <para
>O &kdm; irá mostrar/esconder estes itens e definir o seu texto com base no estado da janela de autenticação. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Função</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
>Isto mostra a mensagem <guilabel
>A autenticação falhou.</guilabel
>.</seg>
              </seglistitem>

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

        <varlistentry>
          <term
>Itens de incorporação de elementos</term>

          <listitem>
            <para
>O &kdm; irá incorporar os itens particulares do Qt nestes itens. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Função</segtitle>

              <seglistitem>
                <seg
>user-entry</seg>
                <seg
>Campo de introdução do nome do utilizador.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>pw-entry</seg>
                <seg
>Campo de introdução da senha.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>domain-entry</seg>
                <seg
>Alguns 'plugins' de <quote
>conversação</quote
> usam este campo para questionar o nome de um domínio. Se este campo estiver presente, os itens envolventes relacionados com este deverão ter <link linkend="show-nodes"
>nós de apresentação</link
> com o tipo <literal
>plugin-domain-entry</literal
>.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>talker</seg>
                <seg
>Este item deverá ser do tipo <literal
>rect</literal
>. Ele representa a área <quote
>quente</quote
> do ecrã  de boas-vindas: contém os itens <literal
>label</literal
> e <literal
>entry</literal
> que dizem respeito ao processo de autenticação. Se um dado 'plugin' de <quote
>conversação</quote
> não corresponder aos itens existente com as suas necessidades, tenta incorporar um item complexo com uma disposição própria neste item, substituindo por completo o <quote
>locutor</quote
> do tema. Estritamente falando, os temas do &kdm; não necessitam de fornecer desenhos de <quote
>locutores</quote
> de todo, dado que todos os 'plugins0 de autenticação do &kdm; podem tirar partido do item <literal
>talker</literal
>. </seg>
              </seglistitem>

              <seglistitem>
                <seg
>userlist</seg>
                <seg
>Este item deverá ser do tipo <literal
>list</literal
>. Se a funcionalidade da lista de utilizadores estiver activa, o &kdm; irá incorporar o item da lista de utilizadores aqui. Caso contrário, este item fica escondido.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xconsole</seg>
                <seg
>Este item deverá ser do tipo <literal
>rect</literal
>. Se a funcionalidade do <command
>xconsole</command
> incorporado estiver compilada e activada, o &kdm; irá incorporar o item de registo da consola aqui. Caso contrário, este item fica escondido.</seg>
              </seglistitem>

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

        <varlistentry>
          <term
>Outros itens</term>

          <listitem>
            <para
>O &kdm; irá mostrar/esconder os itens que dependerem da configuração e do estado actual do ecrã de boas-vindas. O &kdm; não impõe requisitos de tipos sobre eles, se bem que estes digam respeito normalmente a um tipo em particular. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Mostrar apenas quando ...</segtitle>

              <seglistitem>
                <seg
>timed-label</seg>
                <seg
>... estiver uma autenticação temporizada em curso.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>caps-lock-warning</seg>
                <seg
>... o Caps Lock estiver activo.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xauth-warning</seg>
                <seg
>... o &X-Server; não necessitar de autorização do X para se ligar.</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
>... a lista de utilizadores estiver activa. Ao incorporar o item <literal
>userlist</literal
> dentro deste, é possível criar algo semelhante a uma moldura em torno da lista, apresentando-a apenas quando for apresentada a lista  de utilizadores propriamente dita.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xconsole-rect</seg>
                <seg
>... o <command
>xconsole</command
> incorporado estiver activo. É semelhante ao <literal
>userlist-rect</literal
>.</seg>
              </seglistitem>

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

      </variablelist>

    </sect2>

    <sect2 id="layout-nodes">
      <title
>Nós Contentores de Disposição</title>

      <para
>Os nós de disposição aparecem dentro dos nós de itens e contêm mais outros nós de itens. O tipo do nó de disposição determina a organização dos nós-filhos. Um nó de item pode conter um nó de disposição de cada tipo. </para>

      <sect3 id="box-nodes">
        <title
>Nós de Caixas</title>

        <para
>Os nós de caixas organizam automaticamente os seus filhos numa fila. São definidos da seguinte forma:<programlisting>
&lt;box orientation=&quot;<replaceable
>alinhamento</replaceable
>&quot; min-width=&quot;<replaceable
>núm</replaceable
>&quot; min-height=&quot;<replaceable
>núm</replaceable
>&quot;
    xpadding=&quot;<replaceable
>núm</replaceable
>&quot; ypadding=&quot;<replaceable
>núm</replaceable
>&quot; spacing=&quot;<replaceable
>núm</replaceable
>&quot;
    homogeneous=&quot;<replaceable
>booleano</replaceable
>&quot;&gt;
</programlisting
> Onde o <replaceable
>núm</replaceable
> corresponde ao número de pixels e o <replaceable
>booleano</replaceable
> como <literal
>true</literal
> ou <literal
>false</literal
>. O valor do <replaceable
>alinhamento</replaceable
> poderá ser <literal
>horizontal</literal
> ou <literal
>vertical</literal
>. Se deixar algum atributo desactivado, será igual a zero nos números, <literal
>false</literal
> para os booleanos e <literal
>vertical</literal
> para a orientação. </para>

        <para
>O espaço é a distância entre os itens-filhos vizinhos. O preenchimento é a margem exterior da caixa. Se a caixa for homogénea, é reservada a mesma quantidade de espaço para cada item-filho. </para>
      </sect3>

      <sect3 id="fixed-nodes">
        <title
>Nós Fixos</title>

        <para
>O nó 'fixed' é um contentor que tem os seus filhos dispostos em coordenadas exactas. O tamanho do contentor é o menor rectângulo que conseguir conter todos os filhos. O nó 'fixed' não tem atributos extra e por isso basta escrever: <programlisting>
&lt;fixed&gt;
</programlisting
> e colocar outros itens com nós de posição adequados dentro dele. </para>
      </sect3>

    </sect2>

    <sect2 id="position-nodes">
      <title
>Nós de Posição</title>

      <para
>Cada item poderá definir a sua posição e tamanho com o nó <literal
>pos</literal
>. Por exemplo: <programlisting
>&lt;pos x=&quot;0&quot; y=&quot;4&quot; width=&quot;100%&quot; height=&quot;100%&quot;/&gt;
</programlisting>
      </para>

      <para
>Se o tamanho não for definido, será o tamanho <quote
>natural</quote
> do item, chamado de "sugestão de tamanho". Lembre-se que nem todos os itens têm uma sugestão de tamanho útil. </para>

      <para
>Tanto a posição como o tamanho podem ser definidos como uma percentagem e serão calculados em relação ao tamanho do contentor envolvente neste caso. Para os itens de topo, é a percentagem do ecrã completo. Ao adicionar acentos circunflexos (<literal
>^</literal
>) à definição do tamanho, é possível modificá-lo como sendo o tamanho do item envolvente do item envolvente, e assim por diante. </para>

      <para
>Se o item tiver uma caixa, o <literal
>width</literal
> e o <literal
>height</literal
> poderão ser definidos como <literal
>box</literal
>, o que significa que terá a largura e a altura da caixa, o que corresponde aos itens na caixa mais o preenchimento. </para>

      <para
>Poderá definir um dos atributos <literal
>width</literal
> ou <literal
>height</literal
> como sendo <literal
>scale</literal
>, o que significa que deverá ser dimensionado em relação à escala relativa da outra dimensão, baseando-se na sua sugestão de tamanho. Use isto para manter automaticamente as proporções das imagens dimensionadas. </para>

      <para
>Se o atributo <literal
>expand</literal
> for definido e for igual a <literal
>true</literal
>, este item será expandido na caixa envolvente o mais possível (inclusive poderá ter mais espaço, se estiver disponível). </para>

      <para
>Se o <literal
>width</literal
> ou o <literal
>height</literal
> forem um número simples, um valor negativo representa um deslocamento a partir do tamanho do contentor envolvente. Lembre-se que é possível definir um deslocamento positivo, escrevendo dois sinais negativos. </para>

      <para
>Em qualquer um dos casos, é possível restringir o tamanho final com os atributos <literal
>min-width</literal
>, <literal
>min-height</literal
>, <literal
>max-width</literal
> e <literal
>max-height</literal
>, que poderão ser definidos da mesma forma que o <literal
>width</literal
> e o <literal
>height</literal
>. </para>

      <para
>Se o <literal
>x</literal
> ou o <literal
>y</literal
> forem um número simples, um valor negativo representa um deslocamento face ao extremo direito ou inferior, respectivamente, ao contrário da situação predefinida no extremo esquerdo ou superior, respectivamente. </para>

      <para
>Também é possível especificar o ponto dentro do item a que a posição diz respeito. Este chama-se 'anchor' e poderá ser igual a um dos seguintes valores <literal
>n</literal
>, <literal
>ne</literal
>, <literal
>e</literal
>, <literal
>se</literal
>, <literal
>s</literal
>, <literal
>sw</literal
>, <literal
>w</literal
> e <literal
>nw</literal
>, ou então <literal
>c</literal
> que correspondem respectivamente aos diferentes cantos/lados (baseado nas direcções de um mapa topográfico) ou ao centro (por omissão). O valor por omissão é o <literal
>nw</literal
>, que corresponde ao canto superior esquerdo. Por exemplo: <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
>Nós de Apresentação</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
>Poderá indicar o atributo <literal
>type</literal
> para referir que certos itens só podem ser apresentados se o tipo estiver definido. Se anteceder o tipo com um ponto de exclamação (<literal
>!</literal
>) irá inverter a condição. Os valores válidos incluem os seguintes: </para>
        <segmentedlist>
          <?dbhtml list-presentation="table"?>
          <segtitle
>Tipo</segtitle
><segtitle
>Mostrar se ...</segtitle>

          <seglistitem>
            <seg
><literal
>chooser</literal
></seg>
            <seg
>a mudança para a autenticação remota for permitida.</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
> e <literal
>reboot</literal
></seg>
            <seg
>o encerramento do sistema for permitido.</seg>
          </seglistitem>

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

          <seglistitem>
            <seg
><literal
>system</literal
></seg>
            <seg
>sem condições (sempre definido no &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
>nome-item</replaceable
></seg>
            <seg
>o 'plugin' de <quote
>conversação</quote
> tiver um campo de introdução de dados correspondente.</seg>
          </seglistitem>

        </segmentedlist>


      <para
>Por exemplo: <programlisting
>&lt;show type=&quot;chooser&quot;/&gt;
</programlisting>
      </para>

      <para
>Em alternativa, poderá definir um valor <literal
>min-screen-width</literal
> ou <literal
>min-screen-height</literal
> para indicar que certos itens só deverão aparecer se a resolução do ecrã tiver pelo menos o valor definido. Por exemplo: <programlisting
>&lt;show min-screen-height=&quot;768&quot;/&gt;
</programlisting>
      </para>

    </sect2>

    <sect2 id="nor-act-pre-nodes">
      <title
>Nós Normais/Activos/Pré-Iluminados</title>

      <para
>A aparência da maior parte dos tipos de itens poderá ser parametrizada com as seguintes marcas: </para>

      <variablelist>
        <varlistentry>
          <term
><literal
>normal</literal
></term>
          <listitem>
            <para
>Estado normal.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term
><literal
>prelight</literal
></term>
          <listitem>
            <para
>Quando o cursor do rato passa por cima do item.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term
><literal
>active</literal
></term>
          <listitem>
            <para
>Quando se carrega um botão do rato sobre o item.</para>
          </listitem>
        </varlistentry>
      </variablelist>

      <variablelist>

        <para
>O conjunto exacto de atributos disponíveis depende do tipo de item: </para>

        <varlistentry>
          <term
><literal
>rect</literal
></term>
          <listitem>
            <para>
<programlisting
>&lt;normal color=&quot;#000000&quot; alpha=&quot;0.0&quot;/&gt;
</programlisting>
Qualquer um dos atributos poderá ser omitido; nesse caso, é usado o predefinido (o exemplo representa a predefinição). O <literal
>alpha</literal
> é um número de vírgula-flutuante entre zero (transparente) e um (opaco). A <literal
>color</literal
> é um cardinal seguido de um número hexadecimal de seis algarismos; o formato é <quote
><literal
>#</literal
><replaceable
>rrggbb</replaceable
></quote
>. Em alternativa, a <literal
>color</literal
> pode ser definida como um número de oito algarismos, onde os dois primeiros são os valores da transparência. </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>
Os atributos <literal
>alpha</literal
> e <literal
>color</literal
> são definidos como nos itens <quote
>rect</quote
>. </para>
            <para
>O <literal
>font</literal
> segue o formato <quote
><replaceable
>lista de famílias</replaceable
>&nbsp;<replaceable
>opções de estilo</replaceable
>&nbsp;<replaceable
>tamanho</replaceable
></quote
>. Cada um destes componentes é opcional. </para>
            <para
>A <replaceable
>lista de famílias</replaceable
> é uma lista separada por vírgulas de famílias de tipos de letra como por exemplo <quote
>helvetica</quote
>, <quote
>monospace</quote
>, etc. </para>
            <para
>As <replaceable
>opções de estilo</replaceable
> são uma lista delimitada por espaços de palavras-chave do estilo, peso e esticamento das categorias; em cada categoria existe no máximo uma instância. O estilo poderá ser <literal
>normal</literal
>, <literal
>italic</literal
> ou <literal
>oblique</literal
>. O peso poderá ser <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
>. Os esticamentos são compostos por <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
> e <literal
>ultra-expanded</literal
>. </para>
            <para
>O <replaceable
>tamanho</replaceable
> tanto pode ser um número de vírgula flutuante que representa o tamanho em pontos (1/72 polegada) ou um inteiro seguido de <literal
>px</literal
> para representar o tamanho em pixels. Os tamanhos dos pontos são preferíveis, dado que são independentes da resolução do ecrã. </para>
            <para
>Se algum dos atributos for omitido, são usados os valores do <link linkend="style-nodes"
>nó de estilo</link
>. Se não estiver definida nenhuma cor para o texto, é usado o branco. O tipo de letra predefinido é o que está configurado no &kdmrc;. </para>
          </listitem>
        </varlistentry>

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

            <para
>O <literal
>file</literal
> define o ficheiro que contém a imagem. Os locais dos ficheiros relativos baseiam-se na pasta do tema. </para>

            <para
>O <literal
>wallpaper</literal
> poderá ser usado em vez do <literal
>file</literal
> para que o &kdm; procure pelas imagens nos locais normais para papéis de parede do &kde;. São suportados os pacotes de papéis de parede do Plasma. </para>

            <para
>O <literal
>element</literal
> define o ID do elemento de um ficheiro SVG. Se estiver em branco, será representada toda a imagem SVG. </para>

            <para
>No caso dos nós <literal
>pixmap</literal
>, é possível fornecer várias imagens, de modo a usar a que tenha a melhor qualidade para uma dada resolução. Os nomes dos ficheiros com marcas de tamanho têm o formato <replaceable
>nome-de-base</replaceable
><literal
>-</literal
><replaceable
>largura</replaceable
><literal
>x</literal
><replaceable
>altura</replaceable
><literal
>.</literal
><replaceable
>extensão</replaceable
>. Se existir um ficheiro com um nome não-formatado para tamanhos, o &kdm; só irá aceitar uma correspondência perfeita para um dado tamanho, caso contrário irá usar o ficheiro original. Se tudo isso não se aplicar, irá tentar descobrir uma imagem cujas dimensões se aproximem mais do tamanho necessário, caso não se encontre uma correspondência perfeita. </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
>O <literal
>scalemode</literal
> define como ajustar o tamanho das imagens que não correspondam ao tamanho do elemento. O <literal
>free</literal
> (valor por omissão) significa que a imagem será dimensionada para ter o tamanho correcto, provocando alguma possível distorção nas suas proporções. Os outros dois modos mantêm as proporções da imagem: o <literal
>fit</literal
> significa que a imagem será ampliada para o tamanho máximo que caiba na geometria do elemento. A imagem será centrada. A área restante não será pintada por este elemento, pelo que deverá ser colocada no topo de um <literal
>rect</literal
> com cores sólidas. O <literal
>crop</literal
> corresponde a ampliar a imagem para o tamanho mínimo que preencha por completo a geometria do elemento. A imagem será recortada de forma simétrica. </para>

            <para
>O <literal
>tint</literal
> e o <literal
>alpha</literal
> geram uma definição de cor como nos itens <literal
>rect</literal
>. Cada pixel da imagem é multiplicado por esta cor a nível de cada componente. </para>
          </listitem>
        </varlistentry>

      </variablelist>

    </sect2>

    <sect2 id="style-nodes">
      <title
>Nós de Estilo dos Itens</title>

      <para
>Esta marca possibilita alterar a aparência das legendas e dos itens do Qt incorporados no tema, p.ex. os campos de texto, os botões ou a lista de utilizadores. A configuração do estilo é herdada pelos itens-filhos, mas poderá ser substituída individualmente. Os valores por omissão são retirados do &kdmrc;. </para>

      <para
>O atributo <literal
>font</literal
> define o tipo de letra de todos os itens. Para os itens com uma função de introdução de dados, este poderá ser substituído pelo atributo <literal
>edit-font</literal
>. Os tipos de letra são definidos da mesma forma que nos nós <link linkend="nor-act-pre-nodes"
>normais/activos/pré-iluminados</link
>. </para>

      <para
>Normalmente, o motor de temas tenta realmente remover todos os contornos dos itens do Qt, para que se incorporem de forma transparente no tema. Nos casos em que isso não seja o desejado, o atributo <literal
>frame</literal
> poderá ser definido como <literal
>true</literal
>. </para>

      <para
>O atributo <literal
>guistyle</literal
> pode ser usado para substituir o estilo de interface do Qt para os elementos incorporados. O valor por omissão é indicado em <option
>GUIStyle</option
> no &kdmrc; </para>

      <para
>É possível definir praticamente a paleta inteira dos itens que estão documentados na <ulink type="http" url="http://doc.trolltech.com/4.3/qpalette.html"
>página da Trolltech</ulink
>. Os nomes dos atributos são compostos a partir de um âmbito, um papel da cor e um sufixo. Os âmbitos possíveis são - por ordem de precedência crescente - <literal
>all-</literal
> para todos os grupos de cores, sem âmbito para os grupos de cores activa e inactiva e o <literal
>active-</literal
>, <literal
>inactive-</literal
> e <literal
>disabled-</literal
> para o grupo de cores respectivo. Os papéis das cores suportados são <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
> e <literal
>button-text</literal
>. O sufixo poderá ser <literal
>-color</literal
> ou <literal
>-alpha</literal
>, tendo o significado respectivo que tem nos <link linkend="nor-act-pre-nodes"
>nós normais/activos/pré-iluminados</link
>. </para>

      <para
>Como uma alternativa à definição da paleta incorporada, o atributo <literal
>colorscheme</literal
> poderá ser usado para carregar um esquema completo do &kde;. O valor por omissão é dado pelo <option
>ColorScheme</option
> do &kdmrc;. As definições individuais do <literal
>color</literal
> irão substituir as cores do esquema. </para>

      <para
>Exemplo: <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ós de Cores do Navegador de Caras</title>

      <para
>Os nós de cores permitem substituir a cor de fundo dos itens no navegador de caras. O <literal
>labelcolor</literal
> e o <literal
>altlabelcolor</literal
> são essencialmente equivalentes, respectivamente, ao <literal
>all-base-color</literal
> e <literal
>all-alternate-base-color</literal
> nos <link linkend="style-nodes"
>nós de estilo</link
>. Se só for definida a <literal
>labelcolor</literal
>, os fundos alternados dos itens ficam desactivados. </para>

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

    <sect2 id="text-nodes">
      <title
>Nós de Texto</title>

      <para
>As marcas de texto são usadas pelas legendas. Estas poderão ser usadas para mostrar texto traduzido da seguinte forma (se o atributo <literal
>xml:lang</literal
> estiver omitido, é usado o local POSIX): <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
>Os nós de texto poderão conter as seguintes sequências especiais de texto, que serão traduzidas da seguinte forma: </para>

      <segmentedlist>
        <?dbhtml list-presentation="table"?>
        <segtitle
>Sequência</segtitle
><segtitle
>Expansão</segtitle>

        <seglistitem>
          <seg
>%%</seg>
          <seg
>Um carácter % literal</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%c</seg>
          <seg
>Data e hora do relógio de parede</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%d</seg>
          <seg
>Nome do ecrã (variável de ambiente <envar
>DISPLAY</envar
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%h</seg>
          <seg
>Nome da máquina (resultado do <function
>gethostname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%m</seg>
          <seg
>Nome da máquina (resultado do <function
>uname</function
> da estrutura <structfield
>machine</structfield
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%n</seg>
          <seg
>Nome do nó (componente <structfield
>nodename</structfield
> do resultado do <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%o</seg>
          <seg
>Nome do domínio (resultado do <function
>getdomainname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%r</seg>
          <seg
>Nome da versão (componente <structfield
>release</structfield
> do resultado do <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%s</seg>
          <seg
>Nome do sistema (componente <structfield
>sysname</structfield
> do resultado do <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%t</seg>
          <seg
>Número restante de segundos até ser efectuada a autenticação temporizado, para além da forma plural de 'i18n' apropriada dos <quote
>segundos</quote
></seg>
        </seglistitem>

        <seglistitem>
          <seg
>%u</seg>
          <seg
>Utilizador da autenticação temporizada</seg>
        </seglistitem>

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

        <seglistitem>
          <seg
>_</seg>
          <seg
>Faz com que o seguinte carácter seja um acelerador</seg>
        </seglistitem>

      </segmentedlist>

      <para
>O <literal
>%t</literal
> e o <literal
>%u</literal
> pretendem ser usados apenas internamente para mostrar a mensagem <literal
>timed-label</literal
>, que é actualizada automaticamente todos os segundos. </para>
    </sect2>

    <sect2 id="stock-nodes">
      <title
>Nós de 'Stock'</title>

      <para
>Algumas legendas traduzidas comuns poderão ser definidas com as marcas de 'stock'. A marca <literal
>text</literal
> é ignorada se for usada a marca <literal
>stock</literal
>. Deverá realmente usar as legendas em 'stock' em vez de colocar todas as traduções nos temas. Isto conduz a tempos de carregamento mais reduzidos e a melhores traduções. Os seguintes valores são válidos: </para>

      <segmentedlist>
        <?dbhtml list-presentation="table"?>
        <segtitle
>Tipo</segtitle
><segtitle
>Expansão</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
>O Caps Lock está activo</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>chooser</seg>
          <seg
><quote
>Selecção de _XDMCP</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>quit</seg>
          <seg
><quote
>_Sair</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>disconnect</seg>
          <seg
><quote
>D_esligar</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>halt</seg>
          <seg
><quote
>Desligar _computador</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>língua</seg>
          <seg
><quote
>Lín_gua</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>autenticação</seg>
          <seg
><quote
>_Utilizador</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>sessão</seg>
          <seg
><quote
>_Tipo de Sessão</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>reboot</seg>
          <seg
><quote
>Rei_niciar</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
>O utilizador %u autenticar-se-á daqui a %t</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>domain-label</seg>
          <seg
><quote
>_Domínio:</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>username-label</seg>
          <seg
><quote
>_Utilizador:</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>password-label</seg>
          <seg
><quote
>Sen_ha:</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>welcome-label</seg>
          <seg
><quote
>Bem-vindo ao %h</quote
></seg>
        </seglistitem>

      </segmentedlist>

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

    <sect2 id="buddy-nodes">
      <title
>Nós de Companhia</title>

      <para
>Os itens que não provocam directamente uma acção poderão ter um companheiro atribuído. Este item de companhia fica em primeiro plano quando o outro item fica activado (ao carregar nele com o rato ou com um acelerador de uma <literal
>label</literal
>). </para>

      <para
>O companheiro é referenciado pelo seu ID com o atributo <literal
>idref</literal
>. Obviamente deverá ter um ID atribuído. Por exemplo: <programlisting
>&lt;item type=&quot;label&quot;&gt;
  &lt;stock type=&quot;username-label&quot;/&gt;
  &lt;buddy idref=&quot;campo-utilizador&quot;/&gt;
  [...]
&lt;/item&gt;
[...]
&lt;item type=&quot;entry&quot; id=&quot;campo-utilizador&quot;&gt;
  [...]
&lt;/item&gt;
</programlisting>
      </para>
    </sect2>

  </sect1>

</chapter>
