You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1069 lines
42 KiB
1069 lines
42 KiB
<?xml version="1.0" ?>
|
|
<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN"
|
|
"dtd/kdex.dtd" [
|
|
<!ENTITY kappname "&ksplash;">
|
|
<!ENTITY package "tdebase">
|
|
<!ENTITY % addindex "IGNORE">
|
|
<!ENTITY % Portuguese "INCLUDE">
|
|
]>
|
|
|
|
<book lang="&language;">
|
|
|
|
<bookinfo>
|
|
<title>O Manual do &ksplash;</title>
|
|
|
|
<authorgroup>
|
|
<author>&Teemu.Rytilahti; &Teemu.Rytilahti.mail; </author>
|
|
|
|
<othercredit role="developer">&Brian.C.Ledbetter; &Brian.C.Ledbetter.mail; </othercredit>
|
|
|
|
<othercredit role="developer">&Ravikiran.Rajagopal; &Ravikiran.Rajagopal.mail; </othercredit>
|
|
|
|
<othercredit role="translator"><firstname>José</firstname><surname>Pires</surname><affiliation><address><email>jncp@netcabo.pt</email></address></affiliation><contrib>Tradução</contrib></othercredit>
|
|
|
|
</authorgroup>
|
|
|
|
<copyright>
|
|
<year>2003</year>
|
|
<holder>Teemu Rytilahti</holder>
|
|
</copyright>
|
|
<copyright>
|
|
<year>2003-04</year>
|
|
<holder>Ravikiran Rajagopal</holder>
|
|
</copyright>
|
|
<legalnotice>&FDLNotice;</legalnotice>
|
|
|
|
<date>2003-01-10</date>
|
|
<releaseinfo>1.01.00</releaseinfo>
|
|
|
|
<abstract>
|
|
<para>O &ksplash; é um ecrã inicial bonito que mostra o progresso de uma aplicação que está a ser carregada.</para>
|
|
</abstract>
|
|
|
|
<keywordset>
|
|
<keyword>KDE</keyword>
|
|
<keyword>tdebase</keyword>
|
|
<keyword>ksplash</keyword>
|
|
<keyword>ksplashml</keyword>
|
|
<keyword>ecrã inicial</keyword>
|
|
<keyword>belezas visuais</keyword>
|
|
</keywordset>
|
|
|
|
</bookinfo>
|
|
|
|
<chapter id="introduction">
|
|
<title>Introdução</title>
|
|
|
|
<para>O &ksplash; é um ecrã inicial bonito que mostra o progresso de uma aplicação que está a ser carregada. Por favor comunique quaisquer problemas ou pedidos de funcionalidades às listas de correio do &kde;. As principais funcionalidades do &ksplash; são: </para>
|
|
<simplelist>
|
|
<member>Temas Configuráveis</member>
|
|
<member>Utiliza 'plugins' para uma personalização completa</member>
|
|
<member>Pode ser usado por qualquer aplicação que utilize o DCOP</member>
|
|
</simplelist>
|
|
|
|
<para>Este manual mostrar-lhe-á como criar temas para usar com os 'plugins' que já estão disponíveis. Se nenhum dos 'plugins' disponíveis satisfaz o seu gosto, você poderá aprender como personalizar a aparência do &ksplash; por completo ao criar um 'plugin' em C++. </para>
|
|
</chapter>
|
|
|
|
<chapter id="using-themes">
|
|
<title>Usar os temas</title>
|
|
|
|
<para>Para usar os temas do <ulink url="http://www.kde-look.org">KDE-Look</ulink>, extraia-os para a pasta <filename>~/.trinity/share/apps/ksplash/Themes/</filename> para um único utilizador, ou para a <filename>$<envar>TDEDIR</envar>/share/apps/ksplash/Themes/</filename> para os tornar disponíveis para todos os utilizadores do seu sistema.</para>
|
|
|
|
<para>Você também poderá usar o módulo <guilabel>Ecrã Inicial</guilabel> da <guilabel>Aparência</guilabel> no centro de controlo do &kde; para fazer isto automaticamente.</para>
|
|
|
|
<sect1 id="using-kcontrol-module">
|
|
<title>Utilizar o Módulo do &kcontrol;</title>
|
|
|
|
<para>Este módulo permite-lhe instalar, testar e remover temas do &ksplash;.</para>
|
|
|
|
<para>Ao lado do módulo existe uma lista com os temas disponíveis de momento para o &ksplash;. Quando seleccionar um, irá aparecer uma antevisão na área principal da janela. Quando tiver seleccionado o item que deseja usar, carregue em <guibutton>OK</guibutton> ou em <guibutton>Aplicar</guibutton>. Carregue em <guibutton>Cancelar</guibutton> para sair do módulo sem ter feito nenhuma alteração ou em <guibutton>Predefinições</guibutton> para repor o ecrã inicial por omissão do sistema.</para>
|
|
|
|
<para>Para instalar novos módulos, carregue em <guibutton>Adicionar...</guibutton> e procure o tema no seu computador. Você não terá de descomprimir os ficheiros dos temas; poderá seleccionar sem problemas o ficheiro de tema comprimido. Se instalar um tema não o torna o tema por omissão, até que você o seleccione na lista e carregue em <guibutton>OK</guibutton> ou em <guibutton>Aplicar</guibutton>.</para>
|
|
|
|
<para>Ainda que você possa ver uma antevisão do ecrã inicial, você poderá querer ver como é que ele funciona realmente, por exemplo para ver como é que fica a animação. Você poderá testar os temas se os seleccionar na lista e carregar em <guibutton>Testar</guibutton>.</para>
|
|
|
|
<para>Você também poderá remover os temas que não deseja mais usar, se os seleccionar e carregar em <guibutton>Remover</guibutton>. Lembre-se que a sua conta de utilizador poderá não ter permissões para remover os temas instalados ao nível do sistema. Também é recomendado que não desinstale o ecrã inicial <guilabel>Por omissão</guilabel>.</para>
|
|
|
|
</sect1>
|
|
|
|
</chapter>
|
|
|
|
<chapter id="themes">
|
|
<title>Como criar temas para o &ksplash;</title>
|
|
<sect1 id="themes-general">
|
|
<title>Geral</title>
|
|
<para>Criar os seus próprios temas do &ksplash; é simples. Depois de você ter terminado os seus temas poderá publicá-los no <ulink url="http://www.kde-look.org">KDE-Look</ulink> para que as outras pessoas os possam usar.</para>
|
|
|
|
<sect2 id="theme-syntax">
|
|
<title>Identificar o seu tema</title>
|
|
|
|
<para>Vamos então criar um tema chamado <literal>OMeuTemaFixe</literal>. Para o tema ser reconhecido pelo &ksplash;, deverá ser guardado numa pasta chamada <filename class="directory">OMeuTemaFixe</filename> em <filename class="directory">~/.trinity/apps/ksplash/Themes/</filename>. Deverá ter um ficheiro chamado <filename>Theme.rc</filename>, o qual contém a configuração do tema. Você poderá indicar várias coisas especiais para o tema, alterar o motor do 'plugin' a usar, e assim por diante. Você não terá de usar todas as configurações disponíveis; normalmente, as configurações têm valores por omissão aceitáveis. A sintaxe básica dos itens no ficheiro <filename>Theme.rc</filename> é <literal>[opção] = [valor]</literal> Você poderá encontrar as definições das várias opções nas seguintes secções.</para>
|
|
|
|
<example>
|
|
<title>Ficheiro <filename>Theme.rc</filename> simples</title>
|
|
<programlisting>[Tema do KSplash: OMeuTemaFixe]
|
|
Name = OMeuTemaFixe
|
|
Description = Um tema giro usando um motor do tipo XP
|
|
Version = 1.0
|
|
Author = Nome Verdadeiro <nomeverdadeiro@mail.com>
|
|
## Usar o motor XpLike para este tema.
|
|
Engine = XpLike
|
|
Show Icon = false
|
|
Welcome Text = A carregar o KDE
|
|
</programlisting>
|
|
</example>
|
|
|
|
<para>Depois de indicar o nome, a descrição e o autor do tema, você deverá escolher primeiro um motor de temas (também conhecido por 'plugin'). A partir daí, você poderá personalizar várias funcionalidades do motor do tema ao atribuir pares (chave, valor) como no ficheiro de exemplo em cima.</para>
|
|
|
|
<important>
|
|
<para>Garanta que o nome da pasta onde os ficheiros dos temas são gravados (<filename class="directory">~/.trinity/apps/ksplash/Themes/OMeuTemaFixe</filename> no nosso caso) e o identificador (<literal>[Tema do KSplash: OMeuTemaFixe] </literal>, também no nosso caso) do tema no ficheiro <filename>Theme.rc</filename> sejam idênticos. Caso contrário, o &ksplash; não irá reconhecer o tema.</para>
|
|
</important>
|
|
|
|
</sect2>
|
|
|
|
<sect2 id="theme-files">
|
|
<title>Ficheiros com fundos</title>
|
|
|
|
<para>Quando o &ksplash; se inicia, ele tenta procurar uma imagem de fundo para a sua resolução de ecrã actual, se o motor do tema usar uma. O ficheiro com a imagem de fundo deverá ter um nome com o seguinte formato: <filename>Background-<replaceable>LLLxAAA</replaceable>.png</filename>, com o LLL sendo a largura em pixels e o AAA, a altura..</para>
|
|
|
|
<para>Por exemplo, você poderá usar um ficheiro chamado <filename>Background-1024x768</filename>. Se a imagem de fundo para a sua resolução não puder ser encontrada, ele tentará redimensionar o ficheiro original <filename>Background.png</filename> ou o ficheiro indicado no <filename>Theme.rc</filename> para se adequar à resolução actual. O redimensionamento imediato poderá levar algum tempo, como tal você deverá fornecer imagens de fundo para, pelo menos, os seguintes tamanhos: 1280x1024, 1024x768 e 800x600.</para>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="theme-engines">
|
|
<title>Opções para os Motores de Temas</title>
|
|
|
|
<sect2 id="default-themes">
|
|
<title>Tema por Omissão</title>
|
|
<table>
|
|
<title>Opções por Omissão do Tema</title>
|
|
<tgroup cols="3">
|
|
<tbody>
|
|
<row>
|
|
<entry>Nome</entry>
|
|
<entry>Argumento</entry>
|
|
<entry>Explicação</entry>
|
|
</row>
|
|
<!-- Statusbar -->
|
|
<row>
|
|
<entry>Mostrar Sempre o Progresso</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se o progresso do carregamento deverá ser mostrado ('true': sim; 'false': não). Por omissão é 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cor do Texto da Legenda</entry>
|
|
<entry>[cor]</entry>
|
|
<entry>Determina a cor do texto a usar na barra de estado. Por omissão é igual a '#FFFFFF' (branco).</entry>
|
|
</row>
|
|
<!-- Misc. things -->
|
|
<row>
|
|
<entry>Ícones a Piscar</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se os ícones devem <quote>piscar</quote>. ('true': sim; 'false': não). Por omissão, 'true'.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 id="standard-themes">
|
|
<title>Tema Padrão</title>
|
|
<table>
|
|
<title>Opções do Tema Padrão</title>
|
|
<tgroup cols="3">
|
|
<tbody>
|
|
<row>
|
|
<entry>Nome</entry>
|
|
<entry>Argumento</entry>
|
|
<entry>Explicação</entry>
|
|
</row>
|
|
<!-- Statusbar -->
|
|
<row>
|
|
<entry>Posição da Barra de Estado</entry>
|
|
<entry>[top/bottom]</entry>
|
|
<entry>Comuta a posição da barra de estado no ecrã: 'top' (em cima) ou 'bottom' (em baixo). O valor por omissão é o 'bottom'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Barra de Estado Visível</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se a barra de estado deverá ser mostrada ('true': sim; 'false': não). O valor por omissão é o 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Progresso Visível</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se o progresso do carregamento deverá ser mostrado ('true': sim; 'false': não). Por omissão é 'true'.</entry>
|
|
</row>
|
|
<!-- Fonts -->
|
|
<row>
|
|
<entry>Tipo de Letra da Barra de Estado</entry>
|
|
<entry>[nome do tipo de letra]</entry>
|
|
<entry>O tipo de letra usado na barra de estado. Por omissão é o Helvetica.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Tamanho da Letra da Barra de Estado</entry>
|
|
<entry>[tamanho]</entry>
|
|
<entry>O tamanho da letra usado na barra de estado. Por omissão é igual a 16.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Texto Negrito na Barra de Estado</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se o texto da barra de estado deverá aparecer negrito ('true': sim; 'false': não). Por omissão, é igual a 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Texto Itálico na Barra de Estado</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se o texto da barra de estado deverá aparecer em itálico ('true': sim; 'false': não). Por omissão, é igual a 'false'.</entry>
|
|
</row>
|
|
<!-- Misc. things -->
|
|
<row>
|
|
<entry>Cor do Texto da Barra de Estado</entry>
|
|
<entry>[cor]</entry>
|
|
<entry>A cor do texto na barra de estado. Por omissão é igual a 'white' (branco).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cor de Fundo da Barra de Estado</entry>
|
|
<entry>[cor]</entry>
|
|
<entry>A cor de fundo na barra de estado. Por omissão é igual a 'black' (preto).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ícone da Barra de Estado</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se a barra de estado deverá ter um ícone.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ícones Visíveis</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se os ícones deverão estar visíveis ('true': sim; 'false': não). Por omissão, está a 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ícones Saltitantes</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se os ícones deverão estar intermitentes ('true': sim; 'false': não). Por omissão é igual a 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Posição do Ícone</entry>
|
|
<entry>[0-3,10-13]</entry>
|
|
<entry>Posição onde os ícones são mostrados. Por omissão: 'bottom-left' (em baixo, à esquerda).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ecrã Inicial</entry>
|
|
<entry>[nome]</entry>
|
|
<entry>Altera imagem do ecrã inicial que é mostrada.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 id="redmond-themes">
|
|
<title>Tema do Redmond</title>
|
|
<table>
|
|
<title>Opções do tema Redmond</title>
|
|
<tgroup cols="3">
|
|
<tbody>
|
|
<row>
|
|
<entry>Nome</entry>
|
|
<entry>Argumento</entry>
|
|
<entry>Explicação</entry>
|
|
</row>
|
|
<!-- Main elements -->
|
|
<row>
|
|
<entry>Imagem de Fundo</entry>
|
|
<entry>[ficheiro]</entry>
|
|
<entry>A imagem de fundo definida pelo utilizador a usar.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ícone do Utilizador</entry>
|
|
<entry>[Nome de ícone]</entry>
|
|
<entry>O nome do ícone-padrão a mostrar para o utilizador. Por omissão é o <constant>go</constant>.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Texto de Boas-Vindas</entry>
|
|
<entry>[texto]</entry>
|
|
<entry>O texto mostrado no ecrã inicial. Por omissão é "Bem-vindo".</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Texto do Nome do Utilizador</entry>
|
|
<entry>[texto]</entry>
|
|
<entry>O texto que é mostrado em vez do nome verdadeiro do utilizador.</entry>
|
|
</row>
|
|
<!-- Positioning elements -->
|
|
<row>
|
|
<entry>Posição do Texto de Boas-Vindas</entry>
|
|
<entry>[x,y]</entry>
|
|
<entry>A posição no ecrã onde é mostrado o texto de Boas-Vindas.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Posição do Nome do Utilizador</entry>
|
|
<entry>[x,y]</entry>
|
|
<entry>A posição no ecrã onde é mostrado o nome do utilizador.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Posição do Texto da Acção</entry>
|
|
<entry>[x,y]</entry>
|
|
<entry>A posição no ecrã onde é mostrada a acção a decorrer.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Posição do Ícone</entry>
|
|
<entry>[x,y]</entry>
|
|
<entry>A posição no ecrã onde o ícone do utilizador é mostrado.</entry>
|
|
</row>
|
|
<!-- Show to show.. -->
|
|
<row>
|
|
<entry>Mostrar o Texto de Boas-Vindas</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Comuta a apresentação do texto de boas-vindas ('true': sim; 'false': não). Por omissão, é igual a 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Mostrar a Sombra das Boas-Vindas</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Comuta a apresentação do sombreado do texto de boas-vindas ('true': sim; 'false': não). Por omissão, é igual a 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Mostrar o Nome do Utilizador</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Comuta a apresentação do nome do utilizador ('true': sim; 'false': não). Por omissão é igual a 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Mostrar a Acção</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Comuta a apresentação da acção que está a ser efectuada de momento ('true': sim; 'false': não). Por omissão é igual a 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Mostrar o Ícone</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se o ícone deverá ser mostrado ('true': sim; 'false': não). Por omissão, 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Usar o Ícone do Utilizador do TDM</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Mostra o ícone da autenticação do utilizador ('true': sim; 'false': não). Por omissão, igual a 'true'.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 id="macx-themes">
|
|
<title>Tema do MacX</title>
|
|
<table>
|
|
<title>Opções do Tema MacX</title>
|
|
<tgroup cols="3">
|
|
<tbody>
|
|
<row>
|
|
<entry>Nome</entry>
|
|
<entry>Argumento</entry>
|
|
<entry>Explicação</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Tamanho Mínimo dos Ícones</entry>
|
|
<entry>[tamanho]</entry>
|
|
<entry>Atribui o tamanho mínimo para os ícones. Por omissão, é igual a 16.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Tamanho Máximo dos Ícones</entry>
|
|
<entry>[tamanho]</entry>
|
|
<entry>Atribui o tamanho máximo para os ícones. O valor por omissão é igual a 64.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Desenho Optimizado dos Ícones</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Optimiza o processo de desenho dos ícones ('true': sim; 'false': não). Por omissão, 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Barra de Progresso Visível</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Por omissão, igual a 'true' (sim). O outro valor possível será 'false' (não).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Posição da Barra de Progresso</entry>
|
|
<entry>[top/bottom]</entry>
|
|
<entry>Indica se a barra de estado deverá aparecer em cima ('top') ou em baixo ('bottom'). Por omissão é igual a 'bottom'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ícones Saltitantes</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se os ícones deverão estar saltitantes ('true': sim; 'false': não). Por omissão, é igual a 'false'.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 id="mac-classic-themes">
|
|
<title>Tema MacClassic</title>
|
|
<table>
|
|
<title>Opções do Tema MacClassic</title>
|
|
<tgroup cols="3">
|
|
<tbody>
|
|
<row>
|
|
<entry>Nome</entry>
|
|
<entry>Argumento</entry>
|
|
<entry>Explicação</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Posição do Ícone</entry>
|
|
<entry>[0-3,10-13]</entry>
|
|
<entry>A posição dos ícones no ecrã. Por omissão, é igual a 'bottom left' (em baixo, à esquerda).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ícones Saltitantes</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se os ícones deverão estar saltitantes ('true': sim; 'false': não). Por omissão, é igual a 'false'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ícones Visíveis</entry>
|
|
<entry>[true/false]</entry>
|
|
<entry>Indica se os ícones deverão estar visíveis ('true': sim; 'false': não). Por omissão, está a 'true'.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ecrã Inicial</entry>
|
|
<entry>[nome]</entry>
|
|
<entry>Altera imagem do ecrã inicial que é mostrada.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
|
|
<sect2 id="themes-2k">
|
|
<title>Tema 2k</title>
|
|
<table>
|
|
<title>Opções do tema 2k</title>
|
|
<tgroup cols="3">
|
|
<tbody>
|
|
<row>
|
|
<entry>Nome</entry>
|
|
<entry>Argumento</entry>
|
|
<entry>Explicação</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cor de Fundo do Título</entry>
|
|
<entry>[cor]</entry>
|
|
<entry>A cor de fundo do título. Por omissão é 'dark blue' (azul escuro).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cor do Texto do Título</entry>
|
|
<entry>[cor]</entry>
|
|
<entry>A cor do texto do título. Por omissão, é igual a 'white' (branco).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cor do Texto do Estado</entry>
|
|
<entry>[cor]</entry>
|
|
<entry>A cor dos textos de estado. Por omissão, é a mesma que a Cor de Fundo do Título.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cor da Rotação 1</entry>
|
|
<entry>[cor]</entry>
|
|
<entry>Indica a cor da rotação 1. Por omissão, é igual a 'dark blue' (azul escuro).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Cor da Rotação 2</entry>
|
|
<entry>[cor]</entry>
|
|
<entry>Indica a cor da rotação 2. Por omissão, é igual a 'cyan' (azul-cião).</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Velocidade da Rotação</entry>
|
|
<entry>[valor]</entry>
|
|
<entry>Define a velocidade da rotação. Por omissão, é igual a 30.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Título da Janela</entry>
|
|
<entry>[texto]</entry>
|
|
<entry>Indica o texto de título para a janela.</entry>
|
|
</row>
|
|
<row>
|
|
<entry>Ficheiro do Logótipo</entry>
|
|
<entry>[ficheiro]</entry>
|
|
<entry>Define o logótipo a usar.</entry>
|
|
</row>
|
|
</tbody>
|
|
</tgroup>
|
|
</table>
|
|
</sect2>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter id="from-other-applications">
|
|
<title>Usar o &ksplash; na sua Própria Aplicação</title>
|
|
|
|
<para>Neste capítulo, nós descrevemos um método simples para usar o &ksplash; como o ecrã inicial para a sua aplicação do &kde;. Se não você não desenvolve aplicações para o &kde;, poderá ignorar este capítulo.</para>
|
|
|
|
<sect1 id="basic-other-reqs">
|
|
<title>Requisitos Básicos</title>
|
|
|
|
<para>A sua aplicação do &kde; deverá lidar com o &DCOP;. O &DCOP; é a tecnologia do &kde; que é usada para comunicar entre as aplicações. Se você usar a <ulink url="http://developer.kde.org">plataforma-padrão de aplicações do &kde;</ulink>, isto é realizado automaticamente. Para mais informações sobre o &DCOP; e as tecnologias relacionadas do &kde; vá ao <ulink url="http://developer.kde.org">cantinho dos programadores do &kde;</ulink>.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="other-using">
|
|
<title>Iniciar o &ksplash;</title>
|
|
|
|
<para>Antes de a sua aplicação iniciar o seu trabalho intensivo, ou antes de começar a carregar os 'plugins', &etc;, invoke o &ksplash; como se mostra a seguir:</para>
|
|
|
|
<programlisting>DCOPClient *c = kapp->dcopClient();
|
|
QString erro;
|
|
QCString NomeKSplash;
|
|
int pid = 0;
|
|
QStringList args;
|
|
args << "--theme=OMeuTemaFixe" << "--managed";
|
|
if (kapp->startServiceByDesktopName("ksplash", args, &erro, &NomeKSplash, &pid))
|
|
{
|
|
KMessageBox::sorry(0, erro, "Não é possível invocar o KSplash");
|
|
// Algum processamento de erros aqui.
|
|
}
|
|
</programlisting>
|
|
|
|
<para>Nós iremos assumir que só existe uma instância do &ksplash; a correr. Os outros casos são ligeiramente mais complexos. Por favor, veja a documentação do &DCOP; para mais detalhes.</para>
|
|
</sect1>
|
|
|
|
<sect1 id="show-messages">
|
|
<title>Mostrar as mensagens</title>
|
|
|
|
<para>Antes de você poder mostrar quaisquer mensagens, você precisa de configurar o número de passos que irá mostrar. Por exemplo, o procedimento de arranque do &kde; utiliza 7 passos.</para>
|
|
|
|
<programlisting>QByteArray dados;
|
|
QDataStream arg(dados,IO_WriteOnly);
|
|
arg << umNumero;
|
|
if (!(c->send(NomeKSplash, "KSplashIface", "setStartupItemCount(int)", dados))
|
|
// Algum processamento de erros aqui.
|
|
</programlisting>
|
|
|
|
<para>Sempre que quiser mostrar uma mensagem com um ícone ou sem nenhum, use</para>
|
|
|
|
<programlisting>arg << QString("nomeIcone") << QString("nomePrograma") << QString("Uma descrição");
|
|
if (!(c->send(NomeKSplash, "KSplashIface", "programStarted(QString,QString,QString)", dados))
|
|
{
|
|
// Algum processamento de erros aqui.
|
|
}
|
|
</programlisting>
|
|
|
|
<para>De cada vez que você invocar o <constant>programStarted</constant>, os passos completos são incrementados. Quando o seu programa tiver terminado o seu arranque, faça o seguinte para fazer desaparecer o ecrã inicial:</para>
|
|
|
|
<programlisting>if (!(c->send(NomeKSplash, "KSplashIface", "startupComplete()", dados))
|
|
{
|
|
// Algum processamento de erros aqui.
|
|
}
|
|
</programlisting>
|
|
|
|
<para>Já está! Você não precisa de mais nada para tirar partido de tudo o que o &ksplash; tem para lhe oferecer.</para>
|
|
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<!-- FIXME: Better to leave this out until it's written, or the translators -->
|
|
<!-- will have to still translate it ... -->
|
|
|
|
<chapter id="wrplugins">
|
|
<title>Criar novos 'plugins' do &ksplash;</title>
|
|
|
|
<para>A criação de novos 'plugins' para o &ksplash; não é difícil. Neste capítulo, nós iremos criar um 'plugin' simples que irá emular o ecrã inicial de um sistema operativo bem conhecido. Este tutorial assume que você conhece as bases do C++ e um pouco de programação com o KDE/Qt.</para>
|
|
|
|
<sect1 id="basic-requirements">
|
|
<title>Requisitos Básicos</title>
|
|
<para>Nós iremos criar um 'plugin' chamado <literal>2k</literal>. O nome do 'plugin' é usado em vários sítios, e é importante que você o use de forma consistente, de modo a que o 'plugin' seja reconhecido pelo &ksplash;. Os 'plugins' do &ksplash; são de factos bibliotecas carregadas dinamicamente com a seguinte convenção de nomes: </para>
|
|
<simplelist>
|
|
<member>A biblioteca dever-se-á chamar <filename>ksplash+nomedotemaemminúsculas</filename>. Para o nosso tema, chamar-se-á <filename>ksplash2k</filename>.</member>
|
|
<member>Deverá ter um ficheiro 'desktop' correspondente com o nome formatado da seguinte forma <filename>ksplash+nomedotemaemminúsculas.desktop</filename>. Para o nosso tema, será igual a <filename>ksplash2k.desktop</filename>. </member>
|
|
<member>Finalmente, o objecto que é devolvido pela biblioteca deverá ser uma classe chamada <literal>Theme+nomedotema</literal>. Para o nosso exemplo, será a <literal>Theme2k</literal>.</member>
|
|
</simplelist>
|
|
<para>Não se preocupe com isso se não perceber nada da parte anterior. Nós vamos ter em consideração cada um desses pontos em detalhe mais tarde. O outro detalhe importante é que a classe do 'plugin' deverá ser derivada da classe <literal>ThemeEngine</literal>. </para>
|
|
</sect1>
|
|
<sect1 id="skeleton">
|
|
<title>Criar a plataforma de esqueleto</title>
|
|
<para>Nós iremos usar a plataforma de aplicações do &kde;, a qual tomará conta de construir o 'plugin' e que nos irá garantir alguma independência da plataforma, sem nenhum trabalho da nossa parte. Para o fazer, certifique-se que tem o pacote <filename>tdesdk</filename> instalado. Corra o comando <literal>kapptemplate</literal> para produzir uma aplicação chamada "2k". Ela irá criar uma pasta de topo que contém alguns ficheiros genéricos como o AUTHORS, &etc;. Nós estamos mais interessados na subpasta chamada <filename class="directory">2k</filename>. Vá para essa subpasta e remova todos os ficheiros que lá estejam. A partir de agora, temos o esqueleto que pretendemos. </para>
|
|
<para>O próximo passo é a criação de um ficheiro <filename>.desktop</filename> que, ao ser instalado, irá indicar ao &ksplash; que o nosso 'plugin' está disponível. Estando consistente com as convenções de nomes indicadas na <link linkend="basic-requirements">secção anterior</link>, crie um ficheiro chamado <filename>ksplash2k.desktop</filename> nessa pasta. Deverá conter as seguintes linhas: </para>
|
|
<programlisting><literal>
|
|
[Desktop Entry]
|
|
Encoding=UTF-8
|
|
Type=Service
|
|
Comment=Plugin do KSplash
|
|
Name=KSplash2k
|
|
ServiceTypes=KSplash/Plugin
|
|
X-TDE-Library=libksplash2k
|
|
X-KSplash-Default=true
|
|
X-KSplash-PluginName=2k
|
|
X-KSplash-ObjectName=Tema2k
|
|
</literal>
|
|
</programlisting>
|
|
<para>Os campos <literal>Encoding</literal>, <literal>Type</literal>, <literal>Comment</literal> e <literal>ServiceTypes</literal> são os mesmos para todos os 'plugins'. O nome do 'plugin' e da biblioteca seguem as convenções indicadas acima. O campo <literal>X-KSplash-Default</literal> usa um valor booleano que indica se deverá ser mostrado no módulo de configuração do painel de controlo por omissão. Excepto em casos muitos raros, deverá ser igual a <constant>true</constant>. </para>
|
|
</sect1>
|
|
<sect1 id="headerfile">
|
|
<title>Declaração da classe do 'plugin'</title>
|
|
<para>Agora que terminámos o trabalho preliminar, vamos para a parte divertida - criar uma classe que irá fornecer o comportamento que pretendemos. Embora tenhamos a liberdade de fazer com que esta classe faça praticamente tudo o que quisermos, existem algumas restrições.</para>
|
|
<orderedlist>
|
|
<listitem><para>As classes do 'plugin' deverão herdar da classe <constant>ThemeEngine</constant>.</para></listitem>
|
|
<listitem><para>As classes do 'plugin' deverão ter um nome de acordo com a regra: <classname>Theme+NomePlugin</classname>.</para></listitem>
|
|
<listitem><para>As classes do 'plugin' deverão oferecer uma função <literal>static</literal> chamada <function>names</function> que devolve uma lista com os nomes pela qual poderá ser invocada.</para></listitem>
|
|
<listitem><para>Se o 'plugin' puder ser configurado no módulo do centro de controlo, deverá oferecer uma classe baseada na <literal>ThemeEngineConfig</literal> para a configuração.</para></listitem>
|
|
<listitem><para>As classes do 'plugin' deverão reimplementar pelo menos uma das funções virtuais <function>slotSetText</function>, <function>slotSetPixmap</function>, <function>slotUpdateProgress</function> e <function>slotUpdateSteps</function> para serem úteis.</para></listitem>
|
|
<listitem><para>O construtor deverá ter a forma <literal>ThemeEngine( QWidget *mae, const char *nome, const QStringList &argumentos )</literal> para que possa ser usada com a <classname>KGenericFactory</classname>.</para></listitem>
|
|
</orderedlist>
|
|
<para>O último requisito poderá parecer complicado mas, como veremos mais tarde, ao adicionar uma única linha aos seus ficheiros de código, você poderá normalmente ignorá-lo.</para>
|
|
</sect1>
|
|
<sect1 id="headercode">
|
|
<title>Código do ficheiro de inclusão</title>
|
|
<para>Dadas as restrições, nós veremos agora que o ficheiro de inclusão <filename>theme2k.h</filename> ficará como o seguinte:</para>
|
|
<example>
|
|
<title>Listagem do <filename>theme2k.h</filename></title>
|
|
<programlisting>#ifndef __THEME2K_H__
|
|
#define __THEME2K_H__
|
|
|
|
#include <qlabel.h>
|
|
#include <qwidget.h>
|
|
|
|
#include <kdialogbase.h>
|
|
#include <kpixmap.h>
|
|
#include <ksplash/themeengine.h>
|
|
|
|
class RotWidget;
|
|
|
|
class Cfg2k: public ThemeEngineConfig
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
Cfg2k( TDEConfig * );
|
|
};
|
|
|
|
class ObjKsTheme;
|
|
class Theme2k: public ThemeEngine
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
Theme2k( QWidget *, const char *, const QStringList& );
|
|
|
|
inline const QString name()
|
|
{
|
|
return( QString("KSplash2k") );
|
|
}
|
|
inline const KDialogBase *config( TDEConfig *kc )
|
|
{
|
|
return new Cfg2k( kc );
|
|
}
|
|
static QStringList names()
|
|
{
|
|
QStringList Nomes;
|
|
Nomes << "KSplash2k";
|
|
Nomes << "ks2k";
|
|
Nomes << "2k";
|
|
Nomes << "2000";
|
|
return( Nomes );
|
|
};
|
|
|
|
public slots:
|
|
inline void slotSetText( const QString& s )
|
|
{
|
|
if( mTexto && mTexto->text() != s ) mTexto->setText( s );
|
|
};
|
|
|
|
private:
|
|
void initUi();
|
|
void readSettings();
|
|
|
|
QLabel *mTexto;
|
|
RotWidget *mRotacao;
|
|
QColor mTCorFundo, mTCorTexto, mRotCor1, mRot2, mCorEstado;
|
|
int mRotVelocidade;
|
|
QString mTitulo, mLogotipo;
|
|
};
|
|
|
|
#endif
|
|
</programlisting>
|
|
</example>
|
|
<para>Vamos então analisar a listagem em cima. A classe <classname>Theme2k</classname> satisfaz as convenções de nomes e herda da classe <classname>ThemeEngine</classname>. Ela contém um método <methodname>Theme2k::names()</methodname>, e tem um construtor que recebe os parâmetros obrigatórios: <function>Theme2k( QWidget *, const char *, const QStringList& );</function> e também contém um método simples <methodname>Theme2k::slotSetText()</methodname>. De momento, não se preocupe com a classe <classname>RotWidget</classname>. É um pequeno item que oferece alguma beleza visual para o utilizador. O nosso 'plugin' é muito simples e não mostra nenhuns ícones nem nenhuma barra de progresso. Se você quiser mostrar os ícones, implemente de novo a função <function>slotSetPixmap</function>. Existem funções semelhantes para definir o intervalo da barra de progresso (<function>slotUpdateSteps</function>) e para incrementar (<function>slotUpdateProgress</function>) o passo actual. </para>
|
|
</sect1>
|
|
<sect1 id="Implementation">
|
|
<title>Implementação do 'plugin'</title>
|
|
<para>Nós iremos examinar só as partes relevantes da implementação. Para uma listagem da implementação completa (e não traduzida), veja por favor o apêndice. A primeira coisa que será feita é descartar o requisito da biblioteca:</para>
|
|
<example>
|
|
<title>Requisito da biblioteca</title>
|
|
<programlisting>K_EXPORT_COMPONENT_FACTORY( ksplash2k, KGenericFactory<Theme2k> );
|
|
</programlisting>
|
|
</example>
|
|
<para>A macro <constant>K_EXPORT_COMPONENT_FACTORY</constant> é declarada no ficheiro <filename>kgenericfactory.h</filename>. Sigamos para o construtor! Dado que este é um 'plugin' muito simples, assim o é também o construtor.</para>
|
|
<example>
|
|
<title>Construtor do 'plugin'</title>
|
|
<programlisting>Theme2k::Theme2k( QWidget *mae, const char *nome, const QStringList &argumentos )
|
|
:ThemeEngine( mae, nome, argumentos )
|
|
{
|
|
readSettings();
|
|
initUi();
|
|
}
|
|
</programlisting>
|
|
</example>
|
|
<para>O método <function>readSettings()</function> ilustra a forma correcta de obter a configuração do seu tema. (Você deseja que as pessoas usem os seus 'plugins' nos temas delas, não deseja?)</para>
|
|
<example>
|
|
<title>Obter a configuração do tema</title>
|
|
<programlisting>void Theme2k::readSettings()
|
|
{
|
|
if( !mTheme )
|
|
return;
|
|
|
|
TDEConfig *cfg = mTheme->themeConfig();
|
|
if( !cfg )
|
|
return;
|
|
|
|
cfg->setGroup( QString("KSplash Theme: %1").arg(mTheme->theme()) );
|
|
|
|
QColor TCorFundoOmissao( Qt::darkBlue );
|
|
QColor TCorTextoOmissao( Qt::white );
|
|
|
|
mTCorFundo = cfg->readColorEntry( "Cor de Fundo do Título", &TCorFundoOmissao );
|
|
mTCorTexto = cfg->readColorEntry( "Cor do Texto do Título", &TCorTextoOmissao );
|
|
mCorEstado = cfg->readColorEntry("Cor do Texto do Estado", &mTCorFundo );
|
|
|
|
QColor Rot1Omissao( Qt::darkBlue );
|
|
QColor Rot2Omissao( Qt::cyan );
|
|
mRotCor1 = cfg->readColorEntry( "Cor 1 da Rotação", &Rot1Omissao );
|
|
mRotCor2 = cfg->readColorEntry( "Cor 2 da Rotação", &Rot2Omissao );
|
|
|
|
mRotVelocidade = cfg->readNumEntry( "Velocidade da Rotação", 30 );
|
|
mTitulo = cfg->readEntry( "Título da Janela", i18n("Espere por favor") );
|
|
mLogotipo = cfg->readEntry( "Ficheiro do Logotipo", QString::null );
|
|
}
|
|
</programlisting>
|
|
</example>
|
|
<para>Dado que gostamos dos nossos utilizadores, nós oferecemos valores razoáveis para os parâmetros que não estejam presentes no ficheiro do tema. Repare que devemos ser definir o nosso grupo para "KSplash Theme: nomedotema" para continuarmos compatíveis com as especificações dos temas futuras. O método <function>initUI()</function> não é muito interessante, dado que apenas cria a interface gráfica. Veja por favor o apêndice para mais detalhes. </para>
|
|
</sect1>
|
|
<sect1 id="compilingfile">
|
|
<title>Compilar o 'plugin'</title>
|
|
<para>Dado que decidimos usar a plataforma do &kde; para compilar o 'plugin', nós iremos precisar de criar um <filename>Makefile.am</filename>. Deverá ficar algo do género:</para>
|
|
<example>
|
|
<title>Listagem do <filename>Makefile.am</filename></title>
|
|
<programlisting>INCLUDES = $(all_includes)
|
|
|
|
kde_module_LTLIBRARIES = ksplash2k.la
|
|
|
|
ksplash2k_la_SOURCES = theme2k.cpp rotwidget.cpp
|
|
ksplash2k_la_LDFLAGS = $(all_libraries) $(KDE_RPATH)
|
|
ksplash2k_la_LIBADD = $(LIB_TDEUI) -lksplashthemes
|
|
|
|
METASOURCES = AUTO
|
|
|
|
noinst_HEADERS = theme2k.h rotwidget.h
|
|
|
|
servicesdir = $(kde_servicesdir)
|
|
services_DATA = ksplash2k.desktop
|
|
|
|
themedir = $(kde_datadir)/ksplash/Themes/2k
|
|
theme_DATA = Theme.rc Preview.png
|
|
</programlisting>
|
|
</example>
|
|
<para>Para mais informações sobre como criar os ficheiros <filename>Makefile.am</filename> para o &kde;, por favor veja o <ulink url="http://developer.kde.org/documentation/other/makefile_am_howto.html">'site' Web</ulink> dos programadores do &kde;. A única coisa a notar é que nós oferecemos um tema por omissão baseado neste 'plugin' e oferecemos uma imagem de antevisão para o mesmo. Por razões de cortesia para os seus utilizadores, você deverá oferecer um <filename>Theme.rc</filename> de exemplo e que ilustre a utilização das várias opções.</para>
|
|
</sect1>
|
|
</chapter>
|
|
|
|
<chapter id="faq">
|
|
<title>Perguntas e Respostas</title>
|
|
&reporting.bugs; &updating.documentation; <qandaset id="faqlist">
|
|
<qandaentry>
|
|
<question>
|
|
<para>Não consigo encontrar nenhuns temas que funcionem no &ksplash;. Porquê?</para>
|
|
</question>
|
|
<answer>
|
|
<para>Você provavelmente não tem os 'plugins' correctos para o tema. Os 'plugins' estão no pacote <literal>kde-artwork</literal>. Obtenha-os e instale-os, e tente de novo mais tarde.</para>
|
|
</answer>
|
|
</qandaentry>
|
|
<qandaentry>
|
|
<question>
|
|
<para>O que é o ficheiro <filename>Theme.rc</filename> e como é que crio um?</para>
|
|
</question>
|
|
<answer>
|
|
<para>O <filename>Theme.rc</filename> é o ficheiro onde você poderá indicar a configuração de um tema. Para mais informações, dê uma vista de olhos em <link linkend="themes">Como criar temas para o &ksplash;</link>. </para>
|
|
</answer>
|
|
</qandaentry>
|
|
</qandaset>
|
|
</chapter>
|
|
|
|
<chapter id="credits">
|
|
<title>Créditos e Licença</title>
|
|
|
|
<para>&ksplash;</para>
|
|
|
|
<para>Programa Copyright © 2003 &Ravikiran.Rajagopal; &Ravikiran.Rajagopal.mail;</para>
|
|
|
|
<itemizedlist>
|
|
<title>Contribuições</title>
|
|
<listitem><para>&Brian.C.Ledbetter; &Brian.C.Ledbetter.mail;</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<para>Documentação Copyright © 2003 &Teemu.Rytilahti; &Teemu.Rytilahti.mail;</para>
|
|
&underFDL; &underGPL; </chapter>
|
|
|
|
<appendix id="installation">
|
|
<title>Instalação</title>
|
|
|
|
<sect1 id="requirements">
|
|
<title>Requisitos</title>
|
|
|
|
<para>Para conseguir usar com sucesso o &ksplash;, você necessita do &kde; versão 3.2 ou superior. Alguns temas poderão necessitar de 'plugins' específicos. Se um tema não funcionar, por favor contacte o autor do tema para descobrir onde obter o 'plugin' apropriado.</para>
|
|
|
|
</sect1>
|
|
|
|
<sect1 id="compilation">
|
|
<title>Compilação e Instalação</title>
|
|
&install.compile.documentation; </sect1>
|
|
</appendix>
|
|
<appendix id="srccode">
|
|
<title>Código-fonte</title>
|
|
<sect1 id="theme2kcpp">
|
|
<title>Listagem não traduzida do <filename>theme2k.cpp</filename></title>
|
|
<programlisting>#include <qlabel.h>
|
|
#include <qwidget.h>
|
|
|
|
#include <tdeapplication.h>
|
|
#include <tdeconfig.h>
|
|
#include <kdebug.h>
|
|
#include <kdialogbase.h>
|
|
#include <kgenericfactory.h>
|
|
#include <tdeglobalsettings.h>
|
|
#include <tdelocale.h>
|
|
#include <ksplash/objkstheme.h>
|
|
#include <kstandarddirs.h>
|
|
|
|
#include "rotwidget.h"
|
|
#include "theme2k.h"
|
|
#include "theme2k.moc"
|
|
|
|
K_EXPORT_COMPONENT_FACTORY( ksplash2k, KGenericFactory<Theme2k> );
|
|
|
|
Cfg2k::Cfg2k( TDEConfig * )
|
|
{}
|
|
|
|
Theme2k::Theme2k( QWidget *parent, const char *name, const QStringList &args
|
|
)
|
|
:ThemeEngine( parent, name, args )
|
|
{
|
|
readSettings();
|
|
initUi();
|
|
}
|
|
|
|
void Theme2k::initUi()
|
|
{
|
|
QVBox *vbox = new QVBox( this );
|
|
vbox->setFrameShape( QFrame::WinPanel );
|
|
vbox->setFrameShadow( QFrame::Raised );
|
|
|
|
QHBox *labelBox = new QHBox( vbox );
|
|
labelBox->setPalette( mTBgColor );
|
|
labelBox->setMargin( 1 );
|
|
QLabel *lbl = new QLabel( mWndTitle, labelBox );
|
|
lbl->setFont( QFont( "Arial", 12, QFont::Bold ) );
|
|
lbl->setPaletteForegroundColor( mTFgColor );
|
|
|
|
QLabel *logo = new QLabel( vbox );
|
|
logo->setPalette( Qt::white );
|
|
|
|
QString px( locate( "appdata", mTheme->themeDir() +
|
|
(mLogoFile.isNull()?QString("/Logo.png"):mLogoFile) ) );
|
|
if (px.isNull())
|
|
px = locate("appdata","Themes/Default/splash_top.png");
|
|
if( !px.isNull() )
|
|
{
|
|
QPixmap pix( px );
|
|
logo->setPixmap( pix );
|
|
}
|
|
else
|
|
{
|
|
logo->setText( "<B>KDE</B>2000" );
|
|
logo->setAlignment( AlignCenter|AlignVCenter );
|
|
}
|
|
|
|
mRotator = new RotWidget( vbox, mRotColor1, mRotColor2, mRotSpeed );
|
|
|
|
QHBox *hbox = new QHBox( vbox );
|
|
labelBox->setSpacing( 4 );
|
|
labelBox->setMargin( 4 );
|
|
|
|
mText = new QLabel( hbox );
|
|
mText->setPaletteForegroundColor( mStatusColor );
|
|
mText->setPaletteBackgroundColor( mTFgColor );
|
|
mText->setText( mWndTitle );
|
|
mText->setFixedHeight( 48 );
|
|
|
|
setFixedSize( vbox->sizeHint() );
|
|
QRect rect(TDEGlobalSettings::splashScreenDesktopGeometry());
|
|
move( rect.x() + (rect.width() - size().width())/2,
|
|
rect.y() + (rect.height() - size().height())/2 );
|
|
}
|
|
|
|
void Theme2k::readSettings()
|
|
{
|
|
if( !mTheme )
|
|
return;
|
|
|
|
TDEConfig *cfg = mTheme->themeConfig();
|
|
if( !cfg )
|
|
return;
|
|
|
|
cfg->setGroup( QString("KSplash Theme: %1").arg(mTheme->theme()) );
|
|
|
|
QColor DefaultTBgColor( Qt::darkBlue );
|
|
QColor DefaultTFgColor( Qt::white );
|
|
|
|
mTBgColor = cfg->readColorEntry( "Title Background Color",
|
|
&DefaultTBgColor );
|
|
mTFgColor = cfg->readColorEntry( "Title Foreground Color",
|
|
&DefaultTFgColor );
|
|
mStatusColor = cfg->readColorEntry("Status Text Color", &mTBgColor );
|
|
|
|
QColor DefaultRot1( Qt::darkBlue );
|
|
QColor DefaultRot2( Qt::cyan );
|
|
mRotColor1 = cfg->readColorEntry( "Rotator Color 1", &DefaultRot1 );
|
|
mRotColor2 = cfg->readColorEntry( "Rotator Color 2", &DefaultRot2 );
|
|
|
|
mRotSpeed = cfg->readNumEntry( "Rotator Speed", 30 );
|
|
mWndTitle = cfg->readEntry( "Window Title", i18n("Please wait...") );
|
|
mLogoFile = cfg->readEntry( "Logo File", QString::null );
|
|
}
|
|
</programlisting>
|
|
</sect1>
|
|
<sect1 id="rotwidgeth">
|
|
<title>Listagem não traduzida do <filename>rotwidget.h</filename></title>
|
|
<programlisting>#ifndef __ROTWIDGET_H__
|
|
#define __ROTWIDGET_H__
|
|
|
|
#include <qlabel.h>
|
|
#include <qtimer.h>
|
|
#include <qwidget.h>
|
|
|
|
#include <kdialogbase.h>
|
|
#include <kpixmap.h>
|
|
|
|
/**
|
|
* @short Display a rotating-gradient widget.
|
|
*/
|
|
class RotWidget: public QWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
RotWidget( QWidget *, const QColor&, const QColor&, int );
|
|
~RotWidget();
|
|
|
|
private slots:
|
|
void stepEvent();
|
|
|
|
protected:
|
|
void preparePixmap( int );
|
|
void paintEvent( QPaintEvent * );
|
|
void resizeEvent( QResizeEvent * );
|
|
|
|
QColor m_color1, m_color2;
|
|
int m_step, m_speed;
|
|
QTimer *m_stepTimer;
|
|
|
|
QList<KPixmap> m_stepPixmap;
|
|
};
|
|
|
|
#endif
|
|
</programlisting>
|
|
</sect1>
|
|
<sect1 id="rotwidgetcpp">
|
|
<title>Listagem não traduzida <filename>rotwidget.cpp</filename></title>
|
|
<programlisting>#include <kdebug.h>
|
|
#include <kdialogbase.h>
|
|
#include <kpixmapeffect.h>
|
|
|
|
#include <qlabel.h>
|
|
#include <qpainter.h>
|
|
#include <qwidget.h>
|
|
|
|
#include "rotwidget.h"
|
|
#include "rotwidget.moc"
|
|
|
|
RotWidget::RotWidget( QWidget *parent, const QColor& c1, const QColor&
|
|
c2, int sp )
|
|
:QWidget(parent), m_color1(c1), m_color2(c2), m_step(0), m_speed(sp)
|
|
{
|
|
if( (m_speed <= 0) || (m_speed > 20) )
|
|
m_speed = 1;
|
|
setFixedHeight( 6 );
|
|
|
|
for( int i = 0; i <= width(); i++ )
|
|
preparePixmap( i );
|
|
|
|
m_stepTimer = new QTimer( this );
|
|
connect(m_stepTimer, SIGNAL(timeout()), this, SLOT(stepEvent()));
|
|
m_stepTimer->start( 50 );
|
|
}
|
|
|
|
RotWidget::~RotWidget()
|
|
{
|
|
}
|
|
|
|
void RotWidget::stepEvent()
|
|
{
|
|
// This is inefficient as we create too many pixmaps, optimize later.
|
|
m_step += m_speed;
|
|
if( m_step > width() )
|
|
m_step = 0;
|
|
repaint( true );
|
|
}
|
|
|
|
// Todo: Optimize drawing.
|
|
void RotWidget::paintEvent( QPaintEvent *pe )
|
|
{
|
|
QPainter p;
|
|
p.begin( this );
|
|
|
|
QRect r = pe->rect();
|
|
|
|
if( m_stepPixmap.at( m_step ) )
|
|
bitBlt( this, r.x(), r.y(), m_stepPixmap.at( m_step ), r.x(), r.y(),
|
|
r.width(), r.height() );
|
|
else
|
|
p.fillRect( rect(), Qt::black );
|
|
p.end();
|
|
}
|
|
|
|
void RotWidget::resizeEvent( QResizeEvent *re )
|
|
{
|
|
m_stepPixmap.clear();
|
|
for( int i = 0; i <= re->size().width(); i++ )
|
|
preparePixmap( i );
|
|
}
|
|
|
|
void RotWidget::preparePixmap( int step )
|
|
{
|
|
if( step < 0 )
|
|
return;
|
|
|
|
// Explicitly draw our first pixmap. The rest we will bitBlt() from here.
|
|
if( step == 0 )
|
|
{
|
|
KPixmap tmp; tmp.resize( size().width() / 2, size().height() );
|
|
KPixmap tmp2(tmp);
|
|
KPixmapEffect::gradient( tmp, m_color1, m_color2,
|
|
KPixmapEffect::HorizontalGradient );
|
|
KPixmapEffect::gradient( tmp2, m_color2, m_color1,
|
|
KPixmapEffect::HorizontalGradient );
|
|
KPixmap *px = new KPixmap( size() );
|
|
QPainter p;
|
|
p.begin( px );
|
|
p.drawPixmap( 0, 0, tmp );
|
|
p.drawPixmap( size().width()/2, 0, tmp2 );
|
|
p.end();
|
|
m_stepPixmap.append( px );
|
|
}
|
|
else if( m_stepPixmap.at( step-1 ) )
|
|
{
|
|
QPixmap *prev = m_stepPixmap.at( step-1 );
|
|
QPixmap next; next.resize( size() );
|
|
// convert
|
|
// prev = "[------------]"
|
|
// to
|
|
// next = "------------]["
|
|
bitBlt( &next, 0, 0, prev, 1, 0, prev->width()-1, prev->height()
|
|
);
|
|
bitBlt( &next, width()-1, 0, prev, 0, 0, 1, prev->height() );
|
|
KPixmap *n = new KPixmap( next );
|
|
m_stepPixmap.append( n );
|
|
}
|
|
}
|
|
</programlisting>
|
|
</sect1>
|
|
</appendix>
|
|
|
|
&documentation.index;
|
|
</book>
|