<othercredit role="translator"><firstname>Иван</firstname><surname>Кашуков</surname><affiliation><address><email>dolphin210@yandex.ru</email></address></affiliation><contrib>Перевод на русский язык</contrib></othercredit><othercredit role="translator"><firstname>Николай</firstname><surname>Шафоростов</surname><affiliation><address><email>shafff@ukr.net</email></address></affiliation><contrib>Обновление перевода</contrib></othercredit> <othercredit role="translator"><firstname>Виктор</firstname><surname>Ерёмин </surname><affiliation><address><email>ErV2005@rambler.ru</email></address></affiliation><contrib>Перевод на русский язык</contrib></othercredit>
<para>&ksplash; — симпатичный экран, показывающий процесс загрузки KDE. Вопросы и пожелания отправляйте в списки рассылки &kde;. Отличительные особенности &ksplash;: </para>
<para>Это руководство объясняет, как создавать темы для использования с уже доступными подключаемыми модулями. Если ни один из доступных модулей не удовлетворяет вашему вкусу, вы можете научиться полностью настраивать внешний вид &ksplash;, создавая подключаемые модули на C++. </para>
<para>Чтобы использовать темы с <ulink url="http://www.kde-look.org">KDE-Look</ulink>, скопируйте их в <filename>~/.trinity/apps/ksplash/Themes/</filename> (для одного пользователя) или в <filename>$<envar>TDEDIR</envar>/share/apps/ksplash/Themes/</filename> (чтобы сделать их доступными для всех пользователей вашей системы).</para>
<para>Чтобы сделать это автоматически, используйте модуль <guilabel>Заставка</guilabel> раздела <guilabel>Внешний вид и темы</guilabel> Центра управления &kde;.</para>
<para>Этот модуль позволяет устанавливать, проверять и удалять темы &ksplash;.</para>
<para>Внизу расположен список доступных тем &ksplash;. При выборе одной из последних, её предварительный просмотр появится в соответствующей части окна. Чтобы активировать тему, нажмите <guibutton>OK</guibutton> или <guibutton>Применить</guibutton>.</para>
<para>Чтобы установить новые модули, нажмите <guibutton>Добавить...</guibutton>. Не нужно распаковывать файлы тем, они могут обрабатываться и в сжатом виде.</para>
<para>Чтобы удалить тему, воспользуйтесь кнопкой <guibutton>Удалить</guibutton>. Если тема установлена для всех пользователей, то удалять её нужно с правами администратора. Также, мы не рекомендуем удалять тему «<guilabel>По умолчанию</guilabel>».</para>
<para>Создавать свои собственные темы для &ksplash; достаточно легко. Когда вы закончили свою тему, вы можете отправить её на <ulink url="http://www.kde-look.org">KDE-Look</ulink>, чтобы её могли использовать другие.</para>
<para>Давайте создадим тему под названием <literal>MyCoolTheme</literal>. Чтобы тема была найдена &ksplash;, следует поместить её в папку <filename class="directory">MyCoolTheme</filename> в папке <filename class="directory">~/.trinity/apps/ksplash/Themes/</filename>. В ней должен содержаться файл <filename>Theme.rc</filename>, содержащий настройки темы. Вы можете установить множество особенностей для темы, изменить движок подключаемых модулей и т. д. Не обязательно использовать все доступные параметры, обычно используются только некоторые. Синтаксис записей файла <filename>Theme.rc</filename>: <literal>[параметр] = [значение]</literal>. Параметры описаны в следующих разделах.</para>
<para>После того как вы задали имя, описание и автора темы, вам следует выбрать движок темы (подключаемый модуль). Затем вы сможете настроить разнообразные характеристики движка темы, устанавливая пары параметр=значение, как в вышеприведённом файле.</para>
<para>Важно, чтобы имя папки, в которой хранятся файлы темы (<filename class="directory">~/.trinity/apps/ksplash/Themes/MyCoolTheme</filename> в данном примере) и идентификатор (<literal>[KSplash Theme: MyCoolTheme] </literal> в данном примере) в <filename>Theme.rc</filename> совпадали. В противном случае, &ksplash; не распознает тему.</para>
<para>При запуске &ksplash; пытается найти файл фона, соответствующий текущему разрешению экрана (если файл используется движком темы). Формат названия файла фона: <filename>Background-<replaceable>WWWxHHH</replaceable>.png</filename>, где WWW-ширина, а HHH-высота изображения.</para>
<para>Например, вам надо использовать файл <filename>Background-1024x768</filename>. Если файл, соответствующий текущему разрешению экрана, не найден, программа пытается изменить размер файла <filename>Background.png</filename> (или другого, заданного в <filename>Theme.rc</filename>) так, чтобы он соответствовал разрешению. Изменение размера <quote>на лету</quote> занимает некоторое время, так что вам следует создать файлы как минимум для следующих разрешений экрана: 1280x1024, 1024x768 и 800x600.</para>
<para>В этой главе описывается простой метод использования &ksplash; в качестве заставки для вашего приложения &kde;. Если вы не разрабатываете приложения для &kde;, вы можете опустить эту главу.</para>
<para>Ваше приложение &kde; должно работать с &DCOP;. &DCOP; — это технология &kde;, использующаяся для коммуникации между приложениями. Если вы используете <ulink url="http://developer.kde.org">стандартную структуру приложения &kde;</ulink>, это обеспечивается автоматически. Чтобы получить информацию о &DCOP; и связанных технологиях &kde;, посетите <ulink url="http://developer.kde.org">сайт разработчиков &kde;</ulink>.</para>
<para>Каждый раз, когда вы вызываете <constant>programStarted</constant>, шаги заканчиваются. Когда ваша программа закончила запуск, выполните следующие команды, чтобы убрать заставку:</para>
<para>Создавать подключаемые модули &ksplash; нетрудно. В этой главе мы напишем простой модуль, который эмулирует экран загрузки одной очень известной операционной системы. Предполагается, что вы знакомы с основами языка C++ и хотя бы немного — с программированием для KDE/Qt.</para>
<para>Мы создадим модуль с названием <literal>2k</literal>. Название используется во многих местах. Важно не исказить его, чтобы модуль был распознан &ksplash;. Модули &ksplash; являются динамически загружаемыми библиотеками со следующими объявлениями: </para>
<member>Библиотеку следует называть по образцу: <filename>ksplash+название_темы_в_нижнем_регистре</filename>. В нашем случае название будет <filename>ksplash2k</filename>.</member>
<member>Тема должна иметь свой файл desktop, который следует назвать <filename>ksplash+название_темы_в_нижнем_регистре.desktop</filename>. В нашем случае — <filename>ksplash2k.desktop</filename>. </member>
<member>Наконец, библиотека должна возвращать класс с названием <literal>Theme+название_темы</literal>, в нашем случае — <literal>Theme2k</literal>.</member>
<para>Не беспокойтесь, если вы не поняли всё вышесказанное. Далее мы рассмотрим каждый шаг в деталях. Важной деталью является то, что класс модуля вы должны взять из <literal>ThemeEngine</literal>. </para>
<para>При создании модуля мы будем использовать основу для приложения &kde;, которая обеспечит независимость от платформы во всех частях нашей работы. Убедитесь, что в вашей системе установлен пакет <filename>tdesdk</filename>. Выполните команду <literal>kapptemplate</literal>, чтобы создать приложение с названием "2k". Будет создана папка, содержащая основные файлы (такие как AUTHORS и т.п.). Нам нужна подпапка <filename class="directory">2k</filename>. Удалите все файлы в ней, и основа готова. </para>
<para>На следующем этапе вы должны создать файл <filename>.desktop</filename>, который, после установки, сообщит &ksplash;, что подключаемый модуль доступен. В соответствии с правилами наименования файлов, которые даны <link linkend="basic-requirements">в предыдущей секции</link>, создайте файл <filename>ksplash2k.desktop</filename>. Он должен содержать следующие строки: </para>
<para>Параметры <literal>Encoding</literal>, <literal>Type</literal>, <literal>Comment</literal> и <literal>ServiceTypes</literal> одинаковы для всех подключаемых модулей. Название модуля и библиотеки следуют вышеописанным правилам. Параметр <literal>X-KSplash-Default</literal> может принимать одно из двух значений (true или false). Он определяет, будет ли этот модуль показан в Центре управления KDE. За исключением некоторых очень редких случаев, его значение должно быть <constant>true</constant>. </para>
<title>Объявление класса подключаемого модуля</title>
<para>Теперь, когда мы закончили подготовительную работу, начинается действительно интересная часть — создание класса, который обеспечивает нужное поведение модуля. Хотя мы вольны делать с этим классом всё, что хотим, существует несколько ограничений.</para>
<listitem><para>Классы модуля должны наследоваться от класса <constant>ThemeEngine</constant>.</para></listitem>
<listitem><para>Классы модуля следует называть в соответствии с правилом: <classname>Theme+название_модуля</classname>.</para></listitem>
<listitem><para>Классы модуля должны обеспечивать <literal>статическую</literal> функцию с названием <function>names</function>, которая возвращает список названий, под которыми она может быть задействована.</para></listitem>
<listitem><para>Чтобы модуль можно было настраивать из Центра управления KDE, он должен включать класс, основанный на классе <literal>ThemeEngineConfig</literal>.</para></listitem>
<listitem><para>Классы модуля должны перекрывать хотя бы одну из следующих виртуальных функций: <function>slotSetText</function>, <function>slotSetPixmap</function>, <function>slotUpdateProgress</function> и <function>slotUpdateSteps</function>, чтобы обеспечить возможность использования.</para></listitem>
<listitem><para>Разработчик должен создать конструктор <literal>ThemeEngine( QWidget *parent, const char *name, const QStringList &args )</literal>, чтобы модуль можно было использовать из <classname>KGenericFactory</classname>.</para></listitem>
<para>Последнее требование может показаться сложным, но, как мы увидим позже, вы можете обычно игнорировать его, добавив одну строку к исходному коду.</para>
<para>Давайте проанализируем вышеприведённое. Класс <classname>Theme2k</classname>, унаследованный от <classname>ThemeEngine</classname> удовлетворяет объявлениям. Он обеспечивает метод <methodname>Theme2k::names()</methodname>, и имеет конструктор, который принимает необходимые параметры: <function>Theme2k( QWidget *, const char *, const QStringList& );</function>, и к тому же обеспечивает простой метод <methodname>Theme2k::slotSetText()</methodname>. На данном этапе вам не следует беспокоиться насчёт класса <classname>RotWidget</classname>. Это небольшой элемент графического интерфейса, который делает программу более наглядной для пользователя. Наш подключаемый модуль очень прост: он не показывает ни значков, ни индикатора загрузки. Если вы хотите использовать значки, перекройте функцию <function>slotSetPixmap</function>. Подобные функции есть для установки индикатора загрузки (<function>slotUpdateSteps</function>) и увеличения счётчика (<function>slotUpdateProgress</function>) текущего шага. </para>
<para>Мы проверим только связанные части реализации. В приложении находится описание всей реализации. В первую очередь нам необходимо удовлетворить требованиям библиотеки:</para>
<para>Объявление макроса <constant>K_EXPORT_COMPONENT_FACTORY</constant> содержится в файле <filename>kgenericfactory.h</filename>. Теперь перейдём к конструктору. Так как подключаемый модуль совсем прост, конструктор тоже несложен.</para>
<para>Метод <function>readSettings()</function> является иллюстрацией подходящего способа получить параметры темы (вы ведь хотите, чтобы люди могли использовать ваш модуль для своих тем?)</para>
<para>Так как мы работаем для пользователей, следует обеспечить подходящие параметры по умолчанию для параметров, которые не представлены в файле темы. Обратите внимание, что группу следует устанавливать следующим образом: "KSplash Theme: название_темы", чтобы обеспечить совместимость с будущими спецификациями темы. Метод <function>initUI()</function> не представляет большого интереса, он просто организует элементы графического интерфейса. Детали указаны в приложении. </para>
<para>Для компиляции модуля мы решили использовать основу &kde;, поэтому необходимо создать файл <filename>Makefile.am</filename>. Он должен выглядеть следующим образом:</para>
<para>Чтобы получить дальнейшую информацию по созданию <filename>Makefile.am</filename>, загляните на <ulink url="http://developer.kde.org/documentation/other/makefile_am_howto.html">веб-сайт</ulink> разработчиков &kde;. Заметим, что мы создаём тему по умолчанию, основанную на этом модуле, и прилагаем к нему графический файл фона. В качестве жеста доброй воли по отношению к пользователям создайте файл <filename>Theme.rc</filename>, иллюстрирующий примеры использования различных параметров.</para>
<para>Возможно, у вас нет соответствующих подключаемых модулей для тем. Модули содержатся в пакете <literal>tdeartwork</literal>. Скачайте, установите его и попытайтесь запустить темы снова.</para>
<para><filename>Theme.rc</filename> — это файл, где вы можете задать параметры темы. Информация по нему находится в разделе <link linkend="themes">Как создавать темы для &ksplash;</link>. </para>
<para>Чтобы иметь возможность использовать возможности &ksplash; вам необходим &kde; версии 3.2 или выше. Если тема не работает, свяжитесь с её автором, чтобы выяснить, где можно взять подходящий подключаемый модуль.</para>