<chapter id="kdm-themes">
  <title
>Теми для вітального вікна &kdm;</title>

  <para
>У цьому розділі описано створення тем для вікна входу до системи. Приклади зі знімками екрана ви можете знайти у встановлених стандартних темах і темах з <ulink type="http" url="http://www.kde-look.org/index.php?xcontentmode=40"
>вебсайта тем</ulink
>. </para>

  <sect1 id="theme-overview">
    <title
>Огляд теми</title>

    <para
>Створити тему для &kdm; означає створитися XML-файл відповідно до специфікацій, визначених у файлі <filename
>$<envar
>KDEDIR</envar
>/share/apps/doc/kdm/greeter.dtd</filename
>. Файли тем зберігаються у каталозі <filename class="directory"
>$<envar
>KDEDIR</envar
>/share/apps/kdm/themes/<replaceable
>назва_теми</replaceable
></filename
>. У каталозі теми має міститися файл з назвою <filename
>KdmGreeterTheme.desktop</filename
>, формат якого подібний до інших файлів <filename class="extension"
>.desktop</filename
> і виглядає приблизно так: <programlisting
>[KdmGreeterTheme]
Greeter=circles.xml
Name=Circles
Name[uk]=Кола
Description=Theme with blue circles
Author=Bond, James Bond
Copyright=(c) 2002 Bond, James Bond
Screenshot=screenshot.png
</programlisting>
    </para>

    <para
>Поля <literal
>Name</literal
>, <literal
>Description</literal
>, <literal
>Author</literal
> і <literal
>Copyright</literal
> можна перекладати у спосіб, подібних на той, що використовується у інших файлах <filename class="extension"
>.desktop</filename
>. Всі згадані у цьому файлі файли повинні знаходитися у одній теці. Поле <literal
>Screenshot</literal
> має вказувати на файл знімка екрана теми у дії, розміром 200x150 пікселів (нічого, якщо такого файла не буде, але, з точки зору користувача, було б краще, якби ви все ж його зробили). Запис <literal
>Greeter</literal
> вказує на XML-файл, у якому міститься опис теми. </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
>Після того, як ви проведете повне випробування теми, запакуйте у архів (.tar.bz2) каталог з темою, щоб згодом його можна було встановити до каталогу <filename class="directory"
>$<envar
>KDEDIR</envar
>/share/apps/kdm/themes</filename
>. Цей архів і є стандартним форматом для поширення тем &kdm;. </para>
  </sect1>

  <sect1 id="theme-format">
    <title
>Докладний опис XML-формату теми</title>

    <sect2 id="greeter-tag">
      <title
>Вузол найвищого рівня</title>

      <para
>Теми &kdm; — це XML-файли з кореневим тегом &lt;greeter&gt;. Вузлом найвищого рівня є <link linkend="item-nodes"
>вузол item</link
> типу <literal
>rect</literal
> з неявним <link linkend="fixed-nodes"
>фіксованим компонуванням</link
>. </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
>У наступних розділах цього документа описано вузли, що можуть міститися між тегами greeter. Деякі з цих вузлів є контейнерами (вузли layout і item), всередині яких містяться інші вузли. </para>
    </sect2>

    <sect2 id="item-nodes">
      <title
>Вузли Item</title>

      <para
>Тема &kdm; створюється побудовою ієрархії вузлів item і layout. Вузли item можуть мати такі значення атрибута <literal
>type</literal
>: </para>

      <variablelist>

        <varlistentry>
          <term
>button</term>
          <listitem>
            <para
>Поле кнопки. Це поле використовує кнопку Qt. </para>
            <para
>Також можна зробити поведінку будь-якого іншого елемента подібною на поведінку кнопки, якщо встановити його атрибут <literal
>button</literal
> у значення <literal
>true</literal
>. Але краще все ж використовувати у &kdm; Qt-кнопки, оскільки до таких кнопок легше отримати доступ користувачам з обмеженими можливостями. </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>entry</term>
          <listitem>
            <para
>Віджет для введення інформації на зразок поля редагування або спадного списку. Зауважте, що це лише заповнювач для віджетів Qt.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>label</term>
          <listitem>
            <para
>Текстова мітка. У ній має міститися або <link linkend="text-nodes"
>вузол <literal
>text</literal
></link
>, або <link linkend="stock-nodes"
>вузол <literal
>stock</literal
></link
>, який визначатиме текст мітки. </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>list</term>
          <listitem>
            <para
>Віджет для перегляду зображень користувачів.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>pixmap</term>
          <listitem>
            <para
>Растрове зображення у форматі, який підтримує Qt, наприклад, PNG, JPEG, Tiff тощо.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>rect</term>
          <listitem>
            <para
>Простий прямокутний.</para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>svg</term>
          <listitem>
            <para
>Векторне зображення у форматі SVG.</para>
          </listitem>
        </varlistentry>
      </variablelist>

      <para
>Приклад: <programlisting>
&lt;item type=&quot;label&quot;&gt;
</programlisting
> Елемент, що працюватиме як кнопка: <programlisting
>&lt;item type=&quot;rect&quot; id=&quot;disconnect_button&quot; button=&quot;true&quot;&gt;.
</programlisting>
      </para>

      <para
>Типовою є поведінка, коли екран входу до системи &kdm; зникає після розпізнавання. Це може спричинити блимання між екраном входу і сеансом. Атрибут <literal
>background</literal
> надає користувачам можливість вказати, які саме елементи теми є зображеннями тла. Якщо використовувати цей атрибут, &kdm; після розпізнавання вилучить всі елементи, що не стосуються тла і показуватиме лише елементи з атрибутом <literal
>background</literal
> основного вікна. Таким чином перехід від вікна входу до сеансу буде плавним: <programlisting>
&lt;item type=&quot;rect&quot; background=&quot;true&quot;&gt;
  &lt;normal file="background.svg"/&gt;
  &lt;pos x=&quot;0&quot; y=&quot;0&quot; width=&quot;100%&quot; height=&quot;-75&quot;/&gt;
&lt;/item&gt;
</programlisting
> Щоб мати можливість використовувати тло для переходу до сеансу, відмінне від того, яке було використано під час розпізнавання, у темі слід визначити два вузли елементів (item), у яких мають міститися, наприклад, відомості про растрові або svg-зображення. Вузол item, який відповідатиме тлу вітального вікна (greeter) не повинен мати властивості <literal
>background</literal
>, тоді як вузол, що відповідатиме перехідному тлу повинен мати таку властивість. Приклад: <programlisting
>&lt;?xml version="1.0" encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE greeter SYSTEM &quot;greeter.dtd&quot;&gt;
&lt;greeter&gt;
  &lt;item type=&quot;rect&quot; background=&quot;true&quot;&gt;
    &lt;normal file="background_for_login.svg" element="background"/&gt;
    &lt;pos x=&quot;0&quot; y=&quot;0&quot; width=&quot;100%&quot; height=&quot;100%&quot;/&gt;
  &lt;/item&gt;
  &lt;item type=&quot;rect&quot;&gt;
    &lt;normal file="background_for_greeter.svg"/&gt;
    &lt;pos x=&quot;0&quot; y=&quot;0&quot; width=&quot;100%&quot; height=&quot;100%&quot;/&gt;
  &lt;/item&gt;
  [...]
&lt;/greeter&gt;
</programlisting>

      </para>

      <para
>У конфігураціях з декількома екранами за допомогою тем можна визначати вигляд екранів, відмінних від того, на якому з’являється вікно входу до системи, — але у такому випадку на них з’являтимуться лише елементи тла. Щоб визначити, на яких екранах має з’явитися елемент, можна скористатися атрибутом <literal
>screen</literal
>, який може приймати одне зі значень: <literal
>greeter</literal
>, <literal
>other</literal
> або <literal
>all</literal
>. Ці значення позначають екран, на якому відкрито вікно входу до системи, всі екрани, на яких цього вікна немає, та всі екрани, відповідно. </para>

      <variablelist>
        <para
>Кожному елементу (item) може бути надано назву за допомогою атрибута <literal
>id</literal
>. &kdm; розрізняє декілька id, які мають певне функціональне навантаження: </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
>елементи <literal
>button</literal
> і елементи з атрибутом <literal
>button=&quot;true&quot;</literal
>.</term>

          <listitem>
            <para
>Кнопки, зазвичай, використовуються для виконання певних дій. Крім того, &kdm; сховає кнопки, якщо пов’язані з ними дії недоступні з якоїсь причини. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Дія</segtitle>

              <seglistitem>
                <seg
>chooser_button</seg>
                <seg
>Запускає засіб вибору 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
>Від’єднатися від віддаленого сеансу.</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
>Відкриває меню вибору типу сеансу.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>system_button</seg>
                <seg
>Відкриває загальне меню з різноманітними параметрами і діями, список яких залежить від конфігурації системи.</seg>
              </seglistitem>
            </segmentedlist>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
>Елементи <literal
>label</literal
></term>

          <listitem>
            <para
>&kdm; може показувати або ховати ці елементи і змінювати їх текст залежно від стану діалогового вікна входу до системи. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Функція</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
>Показує повідомлення <guilabel
>Спроба входу зазнала невдачі.</guilabel
>.</seg>
              </seglistitem>

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

        <varlistentry>
          <term
>Елементи для вбудовування віджетів</term>

          <listitem>
            <para
>У ці елементи &kdm; може вбудовувати окремі віджети Qt. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Функція</segtitle>

              <seglistitem>
                <seg
>user-entry</seg>
                <seg
>Поле для введення імені користувача.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>pw-entry</seg>
                <seg
>Поле для введення пароля.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>domain-entry</seg>
                <seg
>Деякі з додатків <quote
>обміну інформацією</quote
> використовують це поле для запиту щодо назви домену. Якщо у темі є це поле, відповідні внутрішні елементи повинні мати <link linkend="show-nodes"
>вузли show</link
> з типом <literal
>plugin-domain-entry</literal
>.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>talker</seg>
                <seg
>Цей елемент має належати до типу <literal
>rect</literal
>. Йому відповідає <quote
>робоча</quote
> частина вітального вікна: у ньому містяться елементи <literal
>label</literal
> і <literal
>entry</literal
>, які стосуються процесу розпізнавання. Якщо вказаний додаток <quote
>обміну інформацією</quote
> не може знайти потрібні елементи, він намагається вбудувати віджет з власним компонування у цей елемент, і таким чином, повністю заміщує <quote
>talker</quote
> з теми. Строго кажучи, темам &kdm; взагалі не потрібні елементи <quote
>talker</quote
>, оскільки всі додатки розпізнавання у &kdm; мають вбудовані елементи <literal
>talker</literal
>. </seg>
              </seglistitem>

              <seglistitem>
                <seg
>userlist</seg>
                <seg
>Цей елемент має належати до типу <literal
>list</literal
>. Якщо увімкнено можливість вибору користувача зі списку, &kdm; вбудує сюди віджет списку користувачів. У іншому випадку цей елемент буде приховано.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xconsole</seg>
                <seg
>Цей елемент має належати до типу <literal
>rect</literal
>. Якщо &kdm; зібрано з вбудованою можливістю <command
>xconsole</command
> і цю можливість увімкнено, &kdm; вбудує віджет журналу консолі у вказаному місці. У іншому випадку елемент буде приховано.</seg>
              </seglistitem>

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

        <varlistentry>
          <term
>Інші елементи</term>

          <listitem>
            <para
>&kdm; буде показувати або приховувати ці елементи залежно від налаштувань і поточного стану вітального вікна. &kdm; не накладає на них вимог належності до певного типу, але, зазвичай, вони самі належать до певного типу. </para>

            <segmentedlist>
              <?dbhtml list-presentation="table"?>
              <segtitle
>Id</segtitle
><segtitle
>Показувати, лише якщо...</segtitle>

              <seglistitem>
                <seg
>timed-label</seg>
                <seg
>... відбувається вхід за таймером.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>caps-lock-warning</seg>
                <seg
>... задіяно Caps Lock.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xauth-warning</seg>
                <seg
>... серверові X для з’єднання потрібне розпізнавання без X.</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
>... увімкнено можливість вибору користувача зі списку. Якщо розмістити елемент <literal
>userlist</literal
> всередині цього елемента, можна створити щось на зразок рамки навколо списку, яку буде показано, лише якщо показано сам список користувачів.</seg>
              </seglistitem>

              <seglistitem>
                <seg
>xconsole-rect</seg>
                <seg
>... увімкнено вбудовану <command
>xconsole</command
>. Подібний до <literal
>userlist-rect</literal
>.</seg>
              </seglistitem>

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

      </variablelist>

    </sect2>

    <sect2 id="layout-nodes">
      <title
>Вузли контейнерів компонування</title>

      <para
>Вузли компонування знаходяться всередині вузлів елементів (item) і самі містять вузли елементів. Тип вузла компонування визначає розташування його дочірніх вузлів. Вузол елемента може містити лише по одному вузлу компонування кожного типу. </para>

      <sect3 id="box-nodes">
        <title
>Вузли-блоки</title>

        <para
>Вузли-блоки автоматично розташовують свої дочірні вузли у рядок. Ці вузли визначаються наступним чином: <programlisting>
&lt;box orientation=&quot;<replaceable
>alignment</replaceable
>&quot; min-width=&quot;<replaceable
>num</replaceable
>&quot; min-height=&quot;<replaceable
>num</replaceable
>&quot;
    xpadding=&quot;<replaceable
>num</replaceable
>&quot; ypadding=&quot;<replaceable
>num</replaceable
>&quot; spacing=&quot;<replaceable
>num</replaceable
>&quot;
    homogeneous=&quot;<replaceable
>bool</replaceable
>&quot;&gt;
</programlisting
> Де <replaceable
>num</replaceable
> відповідає кількості пікселів, а <replaceable
>bool</replaceable
> приймає значення <literal
>true</literal
> або <literal
>false</literal
>. Значенням параметра <replaceable
>alignment</replaceable
> може бути <literal
>horizontal</literal
> або <literal
>vertical</literal
>. Типовими значеннями атрибутів, які встановлюватимуться, якщо ви не вкажете значення, будуть нуль для числових атрибутів, <literal
>false</literal
> для булівських і <literal
>vertical</literal
> для орієнтації. </para>

        <para
>Параметр spacing визначає відстань між двома сусідніми дочірніми елементами. Параметр padding — зовнішнє поле блоку. Якщо блок складається з однакових елементів, кожному дочірньому елементу буде виділено однаковий простір. </para>
      </sect3>

      <sect3 id="fixed-nodes">
        <title
>Фіксовані вузли</title>

        <para
>Фіксованим називається контейнер, у якому дочірні елементи розташовано у точно визначених позиціях. Розмірами такого контейнера є сторони найменшого прямокутника, що містить всі його дочірні елементи. У фіксованого вузла немає атрибутів, отже, його можна записувати так: <programlisting>
&lt;fixed&gt;
</programlisting
> Після цього запису ви можете вказати інші елементи, що містять відповідні вузли розташування. </para>
      </sect3>

    </sect2>

    <sect2 id="position-nodes">
      <title
>Вузли розташування</title>

      <para
>Розташування і розмір кожного елемента можна вказати за допомогою вузла <literal
>pos</literal
>. Приклад: <programlisting
>&lt;pos x=&quot;0&quot; y=&quot;4&quot; width=&quot;100%&quot; height=&quot;100%&quot;/&gt;
</programlisting>
      </para>

      <para
>Якщо розмір не було вказано, ним буде <quote
>природній</quote
> розмір елемента, який також називають рекомендованим розміром. Зауважте, що не всі елементи мають належний рекомендований розмір. </para>

      <para
>Обидва значення, розташування і розмір, можна вказувати у відсотках, які буде обчислено відносно розмірів зовнішнього контейнера елементів. Для елементі найвищого рівня ці відсотки обчислюватимуться від розмірів екрана. Додаванням кришечки (<literal
>^</literal
>) до вказаного розміру можна визначити, що цей розмір у відсотках слід обчислювати не відносно зовнішнього контейнера, а відносно контейнера, що містить зовнішній контейнер. </para>

      <para
>Якщо у елементі міститься блок, величинам <literal
>width</literal
> і <literal
>height</literal
> можна надати значення <literal
>box</literal
>, це означатиме, що ці величини рівні ширині і висоті блоку, які обчислюються на основі розмірів елементів блоку і розмірів його полів. </para>

      <para
>Одна з величин <literal
>width</literal
> або <literal
>height</literal
> може приймати значення <literal
>scale</literal
>, що означає, що значення цієї величини слід обчислити на основі іншого розміру елемента і співвідношення рекомендованих розмірів елемента. Використовуйте подібний запис, щоб зберігати співвідношення сторін зображень у автоматичному режимі. </para>

      <para
>Якщо визначено атрибут <literal
>expand</literal
> і він має значення <literal
>true</literal
>, відповідний елемент буде максимально розтягнуто в рамках обмежувального блоку (тобто цьому елементу буде надано більше місця, якщо це можливо). </para>

      <para
>Якщо <literal
>width</literal
> або <literal
>height</literal
> є від’ємними числами, це означає, що відповідний розмір слід обчислити додавши це від’ємне значення до розмірів зовнішнього контейнера. Зауважте, що можна перевищувати розміри зовнішнього контейнера, якщо записати значення з двома знаками «мінус». </para>

      <para
>У всіх випадках остаточні розміри можна обмежити за допомогою атрибутів <literal
>min-width</literal
>, <literal
>min-height</literal
>, <literal
>max-width</literal
> і <literal
>max-height</literal
>, які можна визначити у той же спосіб, що і <literal
>width</literal
> з <literal
>height</literal
>. </para>

      <para
>Якщо <literal
>x</literal
> або <literal
>y</literal
> є від’ємними значеннями, це означає, що відраховувати ці координати слід від правого і нижнього країв, а не від лівого і верхнього, як було б для додатних значень. </para>

      <para
>Також можна визначити, до якої точки елемента слід прив’язати вказані координати розташування. Цей атрибут називається anchor і може приймати значення <literal
>c</literal
> (центр), <literal
>n</literal
>, <literal
>ne</literal
>, <literal
>e</literal
>, <literal
>se</literal
>, <literal
>s</literal
>, <literal
>sw</literal
>, <literal
>w</literal
> і <literal
>nw</literal
>, які відповідають румбам на топографічній карті. Типовим значенням є <literal
>nw</literal
>, це відповідає верхньому лівому куту. Приклад: <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
>Вузли показу</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
>Ви можете вказати атрибут <literal
>type</literal
> (тип), щоб певні елементи було показано, лише якщо встановлено цей тип. Якщо розташувати перед типом знак оклику (<literal
>!</literal
>) умова перетвориться на протилежну. Можливі значення такі: </para>
        <segmentedlist>
          <?dbhtml list-presentation="table"?>
          <segtitle
>Тип</segtitle
><segtitle
>Показувати якщо...</segtitle>

          <seglistitem>
            <seg
><literal
>chooser</literal
></seg>
            <seg
>дозволено перемикання на віддалений вхід до системи.</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
> і <literal
>reboot</literal
></seg>
            <seg
>дозволено завершувати роботу системи.</seg>
          </seglistitem>

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

          <seglistitem>
            <seg
><literal
>system</literal
></seg>
            <seg
>без умови (завжди встановлено у &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
>назва-запису</replaceable
></seg>
            <seg
>додаток <quote
>обміну інформацією</quote
> має відповідне поле для вводу інформації.</seg>
          </seglistitem>

        </segmentedlist>


      <para
>Приклад: <programlisting
>&lt;show type=&quot;chooser&quot;/&gt;
</programlisting>
      </para>

      <para
>Крім того, ви можете вказати значення <literal
>min-screen-width</literal
> або <literal
>min-screen-height</literal
>, щоб певні елементи було показано, лише якщо роздільна здатність екрана не менша за вказані значення. Приклад: <programlisting
>&lt;show min-screen-height=&quot;768&quot;/&gt;
</programlisting>
      </para>

    </sect2>

    <sect2 id="nor-act-pre-nodes">
      <title
>Вузли Normal/Active/Prelight</title>

      <para
>Вигляд більшості типів елементів можна параметризувати за такими тегами: </para>

      <variablelist>
        <varlistentry>
          <term
><literal
>normal</literal
></term>
          <listitem>
            <para
>Звичайний стан</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term
><literal
>prelight</literal
></term>
          <listitem>
            <para
>Стан, коли вказівник миші знаходиться над елементом.</para>
          </listitem>
        </varlistentry>
        <varlistentry>
          <term
><literal
>active</literal
></term>
          <listitem>
            <para
>Стан, коли ви натиснули на елемент за допомогою миші.</para>
          </listitem>
        </varlistentry>
      </variablelist>

      <variablelist>

        <para
>Повний список атрибутів залежить від типу елемента: </para>

        <varlistentry>
          <term
><literal
>rect</literal
></term>
          <listitem>
            <para>
<programlisting
>&lt;normal color=&quot;#000000&quot; alpha=&quot;0.0&quot;/&gt;
</programlisting>
Кожен з атрибутів може бути пропущено, у цьому випадку буде використано типове значення (у прикладі показано типові значення). <literal
>alpha</literal
> — це дійсне число з плаваючою крапкою, яке належить проміжку між нулем (прозорий елемент) і одиницею (повністю непрозорий елемент). <literal
>color</literal
> — має значення у вигляді значка решітки з наступним шістнадцятковим числом з шести цифр; його формат — <quote
><literal
>#</literal
><replaceable
>rrggbb</replaceable
></quote
>. Крім того, <literal
>color</literal
> можна визначити і у вигляді шістнадцяткового числа з восьми цифр, у цьому випадку перші дві цифри визначають значення прозорості (alpha). </para>
          </listitem>
        </varlistentry>

        <varlistentry>
          <term
><literal
>label</literal
></term>
          <listitem>
            <para>
<programlisting
>&lt;normal color=&quot;#ffffff&quot; alpha=&quot;1.0&quot; font=&quot;Sans 14&quot;/&gt;
</programlisting>
<literal
>alpha</literal
> і <literal
>color</literal
> визначаються так само, як і у елементах <quote
>rect</quote
>. </para>
            <para
><literal
>font</literal
> має формат <quote
><replaceable
>список сімей</replaceable
>&nbsp;<replaceable
>параметри_гарнітури</replaceable
>&nbsp;<replaceable
>розмір</replaceable
></quote
>. Всі ці частини не є обов’язковими. </para>
            <para
><replaceable
>список сімей</replaceable
> — це розділений комами список сімей шрифтів, на зразок <quote
>helvetica</quote
>, <quote
>monospace</quote
> тощо. </para>
            <para
><replaceable
>параметри_стилю</replaceable
> — це список розділений пробілами ключових слів з категорій гарнітури, ваги і розтягнутості; кожна категорія використовується не більше одного разу. Гарнітурою може бути <literal
>normal</literal
>, <literal
>italic</literal
> або <literal
>oblique</literal
>. Вага може бути <literal
>ultra-light</literal
>, <literal
>light</literal
>, <literal
>medium</literal
>, <literal
>semi-bold</literal
>, <literal
>bold</literal
>, <literal
>ultra-bold</literal
> або <literal
>heavy</literal
>. Можливі значення розтягування це <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
> і <literal
>ultra-expanded</literal
>. </para>
            <para
><replaceable
>розмір</replaceable
> є дійсним числом з плаваючою крапкою, що відповідає розміру шрифту у точках (1/72 дюйма) або цілим числом, за яким іде запис <literal
>px</literal
>, що відповідає розміру шрифту у пікселях. Слід віддавати перевагу розмірам у точках, оскільки вони не залежать від роздільної здатності екрана. </para>
            <para
>Якщо пропущено один з атрибутів, його значення буде встановлено за допомогою <link linkend="style-nodes"
>вузла style</link
>. Якщо цей вузол не містить визначень для кольорів вікна і тексту, буде використано білий. Типовим шрифтом буде налаштований у &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
><literal
>file</literal
> вказує на файл з зображенням. Відносні назви файлів визначаються відносно каталогу теми. </para>

            <para
><literal
>wallpaper</literal
> можна скористатися замість <literal
>file</literal
>, щоб наказати &kdm; шукати зображення у звичайним місцях для зберігання зображень тла (шпалер) &kde;. Передбачено підтримку пакунків шпалер Плазми. </para>

            <para
><literal
>element</literal
> вказує на ідентифікатор елемента файла SVG. Якщо має порожнє значення, буде показано ціле зображення SVG. </para>

            <para
>Ви можете визначати для вузлів <literal
>pixmap</literal
> декілька зображень так, щоб програма вибрала зображення з найбільшою можливою роздільною здатністю, файли відповідних роздільних здатностей матимуть назви у форматі <replaceable
>базова_назва</replaceable
><literal
>-</literal
><replaceable
>ширина</replaceable
><literal
>x</literal
><replaceable
>висота</replaceable
><literal
>.</literal
><replaceable
>суфікс</replaceable
>. Якщо буде виявлено файл без позначки розміру, який не належить до пакунка шпалер Плазми, &kdm; використає лише зображення з точною відповідністю вказаними розмірам і повернеться до використання початкового файла, якщо відповідності не буде. Якщо ж файл належить до пакунку Плазми, програма спробує знайти зображення з розмірами, які є найближчими до потрібних, якщо не буде встановлено точної відповідності розмірів. </para>

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

            <para
><literal
>scalemode</literal
> визначає спосіб зміни розмірів зображення, розміри якого не збігаються з розмірами відповідного елемента. Спосіб <literal
>free</literal
> (типовий) передбачає просте масштабування зображення до належних розмірів, можливо, зі зміною співвідношення сторін. За використання інших двох способів співвідношення сторін зображення зберігається: спосіб <literal
>fit</literal
> означає збільшення зображення до максимального розміру, який вкладається у геометричні параметри елемента. Зображення, змінене у такий спосіб, буде розташовано по центру. Решту площі елемента намальовано не буде: елемент буде просто розташовано на тлі суцільного кольору елемента <literal
>rect</literal
>. Спосіб <literal
>crop</literal
> означає зміну масштабу зображення до мінімального розміру, за якого воно повністю вкриватиме елемент. Зайву площу зображення буде просто симетрично обрізано. </para>

            <para
><literal
>tint</literal
> і <literal
>alpha</literal
> визначають колір подібно до того, як це робиться для елементів <literal
>rect</literal
>. Колір кожного пікселя зображення буде помножено на цей колі покомпонентно. </para>
          </listitem>
        </varlistentry>

      </variablelist>

    </sect2>

    <sect2 id="style-nodes">
      <title
>Вузли стилю віджетів (style)</title>

      <para
>Цей тег надає можливість змінювати вигляд міток і віджетів Qt, які вбудовано у тему, наприклад, полів редагування, кнопок або списку користувачів. Параметри стилю успадковуються дочірніми елементами, але можуть бути перевизначені у кожному окремому вузлі. Типові значення буде взято з &kdmrc;. </para>

      <para
>Атрибут <literal
>font</literal
> визначає шрифт для всіх віджетів. У віджетах для введення інформації його можна перевизначити за допомогою атрибута <literal
>edit-font</literal
>. Шрифти визначаються так само, як для <link linkend="nor-act-pre-nodes"
>вузлів normal/active/prelight</link
>. </para>

      <para
>Зазвичай, рушій для роботи з темами намагається вилучити всі рамки віджетів Qt так, щоб вони органічно влилися у тему. У випадку, коли така поведінка є небажаною, ви можете встановити значення атрибута <literal
>frame</literal
> рівним <literal
>true</literal
>. </para>

      <para
>Атрибутом <literal
>guistyle</literal
> можна скористатися для перевизначення стилю графічного інтерфейсу Qt для вбудованих віджетів. Типовий стиль визначається параметром <option
>GUIStyle</option
> у &kdmrc; </para>

      <para
>Можна визначити майже всі віджети, які є у документації на <ulink type="http" url="http://doc.trolltech.com/4.3/qpalette.html"
>сайті Trolltech</ulink
>. Назви атрибутів залежать від контексту, ролі кольору і суфікса. Можливими контекстами є, за порядком збільшення пріоритету: <literal
>all-</literal
> для всіх груп кольорів, без контексту для активний або неактивних груп кольорів, <literal
>active-</literal
>, <literal
>inactive-</literal
> і <literal
>disabled-</literal
> для відповідної групи кольорів. До ролей кольорів, що підтримуються, належать: <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
> ф <literal
>button-text</literal
>. Суфіксом може бути одне з значень: <literal
>-color</literal
> or <literal
>-alpha</literal
>, їх значення вже було пояснено у описі <link linkend="nor-act-pre-nodes"
>вузлів normal/active/prelight</link
>. </para>

      <para
>Альтернативою до вбудованого визначення палітри є атрибут <literal
>colorscheme</literal
>, яким можна скористатися для завантаження повної схеми кольорів &kde;. Типове значення схеми визначається параметром <option
>ColorScheme</option
> у &kdmrc;. Окремі визначення <literal
>color</literal
> змінять відповідні кольори з типової схеми. </para>

      <para
>Приклад: <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
>Вузли кольорів переглядача зображень користувачів</title>

      <para
>Вузли кольорів перевизначають колір тла елементів переглядача зображень користувачів. <literal
>labelcolor</literal
> і <literal
>altlabelcolor</literal
> по суті відповідають <literal
>all-base-color</literal
> та. <literal
>all-alternate-base-color</literal
> для <link linkend="style-nodes"
>вузлів стилю</link
>. Якщо вказано лише <literal
>labelcolor</literal
>, зміну тла елементів буде вимкнено. </para>

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

    <sect2 id="text-nodes">
      <title
>Текстові вузли</title>

      <para
>Текстові теги використовують для міток. Їх також можна використовувати для відображення локалізованого тексту ось так (якщо пропущено атрибут <literal
>xml:lang</literal
>, буде використано значення локалі POSIX locale): <programlisting
>&lt;text xml:lang=&quot;uk&quot;&gt;Параметр&lt;/текст&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
>Текстові вузли можуть містити такі особливі послідовності символів з відповідним значенням: </para>

      <segmentedlist>
        <?dbhtml list-presentation="table"?>
        <segtitle
>Послідовність</segtitle
><segtitle
>Значення</segtitle>

        <seglistitem>
          <seg
>%%</seg>
          <seg
>Позначення для символу %</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%c</seg>
          <seg
>Час і дата системного годинника</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%d</seg>
          <seg
>Назва дисплея (значення змінної середовища <envar
>DISPLAY</envar
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%h</seg>
          <seg
>Назва вузла (вивід команди <function
>gethostname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%m</seg>
          <seg
>Назва комп’ютера (частина <structfield
>machine</structfield
> виводу команди <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%n</seg>
          <seg
>Назва вузла (частина <structfield
>nodename</structfield
> виводу команди <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%o</seg>
          <seg
>Назва домену (вивід команди <function
>getdomainname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%r</seg>
          <seg
>Назва випуску системи (частина <structfield
>release</structfield
> виводу команди <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%s</seg>
          <seg
>Назва системи (частина <structfield
>sysname</structfield
> виводу команди <function
>uname</function
>)</seg>
        </seglistitem>

        <seglistitem>
          <seg
>%t</seg>
          <seg
>Час у секундах, що залишився до входу за таймером плюс відповідна форма множини i18n слова <quote
>секунда</quote
></seg>
        </seglistitem>

        <seglistitem>
          <seg
>%u</seg>
          <seg
>Ім’я користувача для входу за таймером</seg>
        </seglistitem>

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

        <seglistitem>
          <seg
>_</seg>
          <seg
>Робить клавішу для наступного символу клавіатурним скороченням</seg>
        </seglistitem>

      </segmentedlist>

      <para
><literal
>%t</literal
> і <literal
>%u</literal
> призначено лише для внутрішнього використання, щоб показати повідомлення <literal
>timed-label</literal
>, яке автоматично оновлюється щосекунди. </para>
    </sect2>

    <sect2 id="stock-nodes">
      <title
>Вузли-пакети</title>

      <para
>Деякі звичайні мітки для перекладу можна визначити за допомогою пакетних тегів (stock). Тег <literal
>text</literal
> буде проігноровано, якщо використано тег <literal
>stock</literal
>. Використанню пакетних тегів слід надавати перевагу перед простим додаванням перекладів прямо у тіло теми. Пакетні теги пришвидшують завантаження і можуть бути краще перекладені. Можна використовувати такі значення: </para>

      <segmentedlist>
        <?dbhtml list-presentation="table"?>
        <segtitle
>Тип</segtitle
><segtitle
>Значення</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
>Caps Lock is enabled</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>chooser</seg>
          <seg
><quote
>XDMCP Choose_r</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>quit</seg>
          <seg
><quote
>_Quit</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>disconnect</seg>
          <seg
><quote
>Disconn_ect</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>halt</seg>
          <seg
><quote
>Power o_ff</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>language</seg>
          <seg
><quote
>Lan_guage</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>login</seg>
          <seg
><quote
>_Login</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>session</seg>
          <seg
><quote
>Session _Type</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>reboot</seg>
          <seg
><quote
>Re_boot</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
>User %u will login in %t</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>domain-label</seg>
          <seg
><quote
>_Domain:</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>username-label</seg>
          <seg
><quote
>_Username:</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>password-label</seg>
          <seg
><quote
>_Password:</quote
></seg>
        </seglistitem>
        <seglistitem>
          <seg
>welcome-label</seg>
          <seg
><quote
>Welcome to %h</quote
></seg>
        </seglistitem>

      </segmentedlist>

      <para
>Приклад: <programlisting
>&lt;stock type=&quot;welcome-label&quot;/&gt;
</programlisting>
      </para>
    </sect2>

    <sect2 id="buddy-nodes">
      <title
>Вузли-приятелі (buddy)</title>

      <para
>Елементи, які не беруть участі у діях напряму, можна назвати приятелями (buddy). Приятель отримує фокус введення інформації, якщо задіяно початковий елемент (його натиснуто або введено клавіатурне скорочення, визначене <literal
>label</literal
>). </para>

      <para
>Посилання на приятеля виконується за ідентифікатором, який визначається атрибутом <literal
>idref</literal
>. Очевидно, йому слід передати значення ідентифікатора (id). Приклад: <programlisting
>&lt;item type=&quot;label&quot;&gt;
  &lt;stock type=&quot;username-label&quot;/&gt;
  &lt;buddy idref=&quot;user-entry&quot;/&gt;
  [...]
&lt;/item&gt;
[...]
&lt;item type=&quot;entry&quot; id=&quot;user-entry&quot;&gt;
  [...]
&lt;/item&gt;
</programlisting>
      </para>
    </sect2>

  </sect1>

</chapter>
