Manuale di KSplash
Manuale di KSplash
Avanti

Manuale di KSplash

Teemu Rytilahti

developer: Brian C. Ledbetter
developer: Ravikiran Rajagopal
Traduzione del manuale: Massimiliano Donno
Revisione 1.01.00 (2003-01-10)

È concesso il permesso di copiare, distribuire ovvero modificare questo documento sotto i termini della GNU Free Documentation License, versione 1.1 o qualsiasi versione successiva pubblicata dalla Free Software Foundation; con nessuna sezione invariante, con nessun testo di copertina anteriore e con nessun testo di copertina posteriore. Una copia di questa licenza è inclusa nella sezione intitolata "GNU Free Documentation License".

KSplash è un ottimo splash screen che visualizza il progresso di una applicazione in caricamento.


Capitolo 1. Introduzione
Introduzione
Indietro
Avanti

Capitolo 1. Introduzione

KSplash è un ottimo splash screen che visualizza il progresso di una applicazione in caricamento. Per favore riporta qualsiasi problema o richieste di funzionalità aggiuntive alla mailing list di KDE. Le funzionalità principali di KSplash:

Possibilità di usare Temi
Usa i plugin per una completa personalizzazione
Può essere usato da qualsiasi applicazione che usa DCOP

Questo manuale ti mostra come creare dei temi usabili con i plugin che sono già disponibili. Se nessuno dei plugin disponibili soddisfa i tuoi gusti, puoi imparare come personalizzare completamente le sembianze di KSplash scrivendo un plugin in C++.

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Capitolo 2. Usare Temi
Usare Temi
Indietro
Avanti

Capitolo 2. Usare Temi

Per usare i temi del sito KDE-Look, estraili in ~/.kde/share/apps/ksplash/Themes/ per ogni singolo utente, o in $KDEDIR/share/apps/ksplash/Themes/ per renderli disponibili a tutti gli utenti del sistema.

Puoi anche usare il modulo Schermata d'avvio in Aspetto e Temi nel centro di controllo di KDE per fare ciò in automatico.

Usare il modulo di KControl

Questo modulo permette di installare, testare e rimuovere temi di KSplash.

Su un lato del modulo c'è una lista di temi di KSplash subito disponibili. Appena se ne seleziona uno, verrà visualizzata un'anteprima nella parte centrale della finestra. Quando ne hai selezionato uno che desideri usare, premi Applica. Premi Ripristina per uscire dal modulo senza effettuare le modifiche, e Valori predefiniti per ripristinare la schermata di avvio predefinita.

Per installare nuovi moduli, premi Aggiungi..., e trova il tema sul tuo computer. Non devi decomprimere il file del tema, puoi tranquillamente selezionare il file del tema compresso. Installare un tema non significa cambiare quello attualmente in uso fin quando non lo si seleziona esplicitamente dalla lista e si preme Applica.

Puoi anche vedere un'anteprima dello splash screen in azione, per vedere come si comporta nell'uso reale, per esempio per renderti conto di come sono le animazioni. Puoi testare il tema selezionandolo dalla lista e fare clic sul pulsante Prova.

Puoi anche rimuovere un tema che non vuoi più usare, selezionandolo e premendo il pulsante Rimuovi. Nota che un utente semplice potrebbe non avere i permessi per rimuovere il tema installato per tutti gli utenti del sistema. Ti raccomando inoltre di non rimuovere lo splash screen Predefinito.

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Capitolo 3. Come creare temi per KSplash
Come creare temi per KSplash
Indietro
Avanti

Capitolo 3. Come creare temi per KSplash

Generale

Creare un tuo tema per KSplash è semplice. Una volta terminato il tema, puoi postarlo a KDE-Look per permettere ad altri utenti di utilizzarlo.

Identifica il tuo tema

Creiamo un tema chiamato MyCoolTheme. Per permettere al tema di essere riconosciuto da KSplash deve essere memorizzato nella cartella chiamata MyCoolTheme sotto ~/.kde/apps/ksplash/Themes/. Deve contenere anche un file chiamato Theme.rc, contenente le impostazioni per il tema. Puoi specificare un gran numero di elementi speciali del tema, cambiare il motore dei plugin da usare, e così via. Non hai bisogno di utilizzare tutte le impostazioni disponibili, perché generalmente le opzioni predefinite sono già buone. La sintassi di base per le linee nel fileTheme.rc è [opzione] = [valore]. Puoi trovare la definizione delle varie opzioni nelle sezioni successive.

Esempio 3.1. Semplice file Theme.rc

[KSplash Theme: MyCoolTheme]
Name = MioTemaFico
Description = Un tema simpatico usando il motore XpLike
Version = 1.0
Author = Real Name <realmail@mail.com>
## Usa il motore XpLike per questo tema.
Engine = XpLike
Show Icon = false
Welcome Text = Sto caricando KDE

Dopo aver specificato il nome, la descrizione e l'autore del tema, devi scegliere un motore per il tema (anche conosciuto come plugin). Dopodiché puoi personalizzare le varie funzionalità del motore assegnando una coppia di valori chiave come nel seguente file di esempio.

Importante

Il nome della cartella sotto la quale i file del tema sono memorizzati ( ~/.kde/apps/ksplash/Themes/MyCoolTheme nel nostro caso) e l'identificativo del tema ([KSplash Theme: MyCoolTheme] nel nostro caso) nel file Theme.rc DEVE essere lo stesso. Altrimenti KSplash non riconoscerà il tema.

File di Sfondo

Quando KSplash parte, tenta di cercare un immagine di sfondo per la risoluzione dello schermo attuale, sempre se il motore del tema ne usa uno. Il file dell'immagine di sfondo deve essere chiamato nel seguente formato: Background-LLLxAAA .png.

Per esempio potresti usare un file chiamato Background-1024x768 . Se l'immagine di sfondo per la risoluzione dello schermo attuale non può essere trovata, ksplash tenta di ridimensionare la immagine originale Background.png o il file specificato in Theme.rc per meglio asservire la risoluzione corrente. Il ridimensionamento al volo prenderà un certo tempo, quindi dovresti provvedere diverse immagini di sfondo per almeno le seguenti risoluzioni: 1280x1024, 1024x768 e 800x600.

Opzioni per i motori del tema
Opzioni per i motori del tema

Opzioni per i motori del tema

Tema Predefinito

Tabella 3.1. Opzioni del tema predefinito

Name #NomeArgument #ArgomentoExplanation #Spiegazione
Always Show Progress #Mostra sempre la barra di progresso[true/false] #si/noIndica se il progresso del caricamento deve essere mostrato. Predefinito è true (visualizzato).
Label Foreground #Primo piano dell'etichetta[color] #coloreIl colore di primo piano per il testo della barra di stato. Predefinito è #FFFFFF (bianco).
Icons Flashing #lampeggio delle icone[true/false] #si/noDecide se l'icona deve “lampeggiare” o meno. Predefinito è true (si).

Tema standard

Tabella 3.2. Opzioni del tema standard (nel file di configurazione vanno riportati i comandi in inglese, la traduzione è solo esplicativa ed è un commento, in stile script per la shell, cioè tutto quello che segue il carattere #)

Name #NomeArgument #ArgomentoExplanation #Spiegazione
Statusbar Position #posizione della barra di stato[top/bottom] #alto/bassoScambia la posizione della barra di stato sullo schermo. Predefinito è bottom (in basso).
Statusbar Visible #barra di stato visibile[true/false] #si/noIndica se la barra di stato deve essere visualizzata. Predefinito è true (visualizzata).
Progress Visible #barra di progresso visibile[true/false] #si/noIndica se il progresso del caricamento deve essere mostrato. Predefinito è true (visualizzato).
Statusbar Font #Carattere della barra di stato[fontname] #nome del carattereIl carattere usato nella barra di stato. Predefinito è Helvetica.
Statusbar Font Size #dimensione del carattere della barra di stato[size] #dimensioneLa dimensione del carattere nella barra di stato. Predefinito è 16.
Statusbar Font Bold #Carattere grassetto per la barra di stato[true/false] #si/noIndica se il carattere della barra di stato deve essere grassetto. Predefinito è true (grassetto).
Statusbar Font Italic #Carattere corsivo per la barra di stato[true/false] #si/noIndica se il carattere della barra di stato deve essere corsivo. Predefinito è false (non in corsivo).
Statusbar Foreground #Primo piano della barra di stato[color] #coloreIl colore di primo piano della barra di stato. Predefinito è white (bianco).
Statusbar Background #sfondo della barra di stato[color] #coloreIl colore di sfondo della barra di stato. Predefinito è black (nero).
Statusbar Icon #Icona della barra di stato[true/false] #si/noIndica se la barra di stato deve avere un'icona.
Icons Visible #icone visibili[true/false] #si/noIndica se l'icona deve essere visibile. Predefinito è true (visibile).
Icons Jumping #salto tra icone[true/false] #si/noIndica se l'icona deve saltare. Predefinito è true (salta).
Icon Position #posizione delle icone[0-3,10-13]Posizione dove le icone sono mostrate. Predefinito è bottom-left (in basso a sinistra).
Splash Screen #schermata di splash[name] #nomeCambia l'immagine dello splash screen visualizzato.

tema Redmond

Tabella 3.3. opzioni del tema Redmond

Name #NomeArgument #ArgomentoExplanation #Spiegazione
Background Image #immagine di sfondo[filename] #nome del fileImmagine di sfondo definita dall'utente.
User Icon #icona utente[Iconname] #nome iconaNome dell'icona standard da usare. Predefinito ègo.
Welcome Text #messaggio di benvenuto[text] #testoTesto mostrato nello splash screen. Predefinito è "Welcome".
Username Text #testo del nome utente[text] #testoTesto mostrato al posto del nome reale dell'utente.
Welcome Text Position #posizione del testo di benvenuto[x,y]Posizione dello schermo dove è piazzato il testo di benvenuto.
Username Text Position #posizione del testo del nome utente[x,y]Posizione dello schermo dove è piazzato il nome utente.
Action Text Position #posizione del testo dove è l'azione corrente[x,y]Posizione dello schermo dove avviene la azione corrente.
Icon Position #posizione delle icone[x,y]Posizione dello schermo dove è visualizzata l'icona dell'utente.
Show Welcome Text #mostra testo di benvenuto[true/false] #si/noDecide se mostrare o no il testo di benvenuto. Predefinito è true (si).
Show Welcome Shadow #mostra l'ombra del testo di benvenuto[true/false] #si/noDecide se mostrare o no l'ombra del testo di benvenuto. Predefinito è true.
Show Username #mostra nome utente[true/false] #si/noDecide se mostrare o no il nome utente. Predefinito è true.
Show Action #mostra l'azione corrente[true/false] #si/noDecide se mostrare o no l'azione corrente. Predefinito è true.
Show Icon #mostra l'icona[true/false] #si/noDecide se mostrare o no l'icona. Predefinito è true.
Use KDM User Icon #usa le icone utenti di KDM[true/false] #si/noMostra le icone di login dell'utente. Predefinito è true.

Tema MacX

Tabella 3.4. Opzioni del tema MacX

Name #NomeArgument #ArgomentoExplanation #Spiegazione
Icon Size Minimum #minima dimensione icone[size] #dimensioneAssegna la dimensione minima delle icone. Predefinito è 16.
Icon Size Maximum #massima dimensione delle icone[size] #dimensioneAssegna la dimensione massima delle icone. Predefinito è 64.
Optimized Icon Rendering #ottimizzazione presentazione icone[true/false] #si/noOttimizza il rendering delle icone. Predefinito è true.
Progress Bar Visible #barra di progresso visibile[true/false] #si/noPredefinito è true
Progress Bar Position #posizione barra di progresso[top/bottom] #alto/bassoDecide se mostrare la barra di stato in basso o in alto. Predefinito è bottom (basso).
Icons Jumping #salto tra icone[true/false] #si/noIndica se le icone devono saltare. Predefinito è false.

Tema MacClassic

Tabella 3.5. Opzioni del tema MacClassic

Name #NomeArgument #ArgomentoExplanation #Spiegazione
Icon Position #posizione delle icone[0-3,10-13]Posizione delle icone sullo schermo. Predefinito è bottom-left (giu-sinistra).
Icons Jumping #salto tra icone[true/false] #si/noIndica se le icone devono saltare. Predefinito è false.
Icons Visible #icone visibili[true/false] #si/noIndica se l'icona deve essere visibile. Predefinito è true (visibile).
Splash Screen #schermata di splash[name] #nomeCambia l'immagine dello splash screen visualizzato.

Tema 2k

Tabella 3.6. Opzioni del tema 2k

Name #NomeArgument #ArgomentoExplanation #Spiegazione
Title Background Color #colore dello sfondo del titolo[color] #coloreIl colore di sfondo del titolo. Predefinito è dark blue (blu).
Title Foreground Color #colore del primo piano del titolo[color] #coloreIl colore di primo piano del titolo. Predefinito è white (bianco).
Status Text Color #Colore del testo di stato[color] #coloreIl colore del testo della barra di stato. Predefinito è lo stesso colore dello sfondo del titolo.
Rotator Color 1 #colore rotatore 1[color] #coloreDefinisce il colore del rotatore 1. Predefinito è dark blue.
Rotator Color 2 #colore rotatore 2[color] #coloreDefinisce il colore del rotatore 2. Predefinito è cyan (celeste).
Rotator Speed #velocità del rotatore[value] #valoreDefinisce la velocità del rotatore. Predefinito è 30.
Window Title #Titolo della finestra[text] #testoSpecifica il titolo della finestra.
Logo File #file dello stemma[filename] #nome del fileDefinisce il logo usato.


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Capitolo 4. Usare KSplash Dalle proprie applicazioni.
Usare KSplash Dalle proprie applicazioni.
Indietro
Avanti

Capitolo 4. Usare KSplash Dalle proprie applicazioni.

In questo capitolo descriviamo un semplice metodo per usare KSplash come splash screen per le tue applicazioni KDE. Se non sviluppi applicazioni per KDE puoi saltare questo capitolo.

Requisiti di base

Le tue applicazioni KDE devono esportare funzioni DCOP. DCOP è la tecnologia di KDE usata per comunicare con le applicazioni. Se usi l'infrastruttura delle applicazioni di KDE standard, questo avverrà automaticamente. Per informazioni su DCOP e le tecnologie KDE visita l'angolo dello sviluppatore KDE.

Avviare KSplash
Avviare KSplash

Avviare KSplash

Prima che l'applicazione inizi intensivi cicli di calcolo, o prima di caricare i plugin, ecc., invoca KSplash nel seguente modo:

DCOPClient *c = kapp->dcopClient();
QString error;
QCString KSplashName;
int pid = 0;
QStringList args;
args << "--theme=MyCoolTheme" << "--managed";
if (kapp->startServiceByDesktopName("ksplash", args, &error, &KSplashName, &pid))
{
  KMessageBox::sorry(0, error, "Impossibile invocare KSplash");
  // Qui gestisci gli errori.
}

Qui assumiamo che esiste una sola istanza di KSplash in esecuzione. Altri casi sono leggermente più complessi. Per favore vedi la documentazione DCOP per maggiori dettagli.



Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Mostrare messaggi
Mostrare messaggi

Mostrare messaggi

Prima di visualizzare qualsiasi messaggio, devi impostare il numero di passi che vuoi visualizzare. Per esempio la procedura di partenza di KDE impiega 7 passi.

QByteArray data;
    QDataStream arg(data,IO_WriteOnly);
    arg << someNumber;
    if (!(c->send(KSplashName, "KSplashIface", "setStartupItemCount(int)", data))
      // Processamento degli errori qui.

Quando vuoi mostrare un messaggio con o senza un'icona, usa

arg << QString("iconName") << QString("programName") << QString("Some description");
    if (!(c->send(KSplashName, "KSplashIface", "programStarted(QString,QString,QString)", data))
    {
      // Processamento degli errori qui .
    }

Ogni volta che chiami la funzione programStarted, il passo compiuto viene incrementato. Quando il programma ha finito la fase di startup, fai la seguente cosa per mandar via lo splash screen:

if (!(c->send(KSplashName, "KSplashIface", "startupComplete()", data))
    {
      // Qui gestisci gli errori.
    }

Ecco fatto! Non hai bisogno di nient'altro per sfruttare tutto quello che KSplash ti offre.



Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Capitolo 5. Scrivere nuovi plugin per KSplash
Scrivere nuovi plugin per KSplash
Indietro
Avanti

Capitolo 5. Scrivere nuovi plugin per KSplash

Scrivere un nuovo plugin di KSplash non è difficile. In questo capitolo scriveremo un semplice plugin che emula lo splash screen di un noto sistema operativo. Questo tutorial premette che tu conosca le basi del C++ e un po' di programmazione di KDE/Qt.

Requisiti di base

Creeremo un plugin chiamato 2k. Il nome del plugin è usato in vari posti, ed è importante che questo nome venga usato sempre senza modifiche, per permettere a KSplash di riconoscerlo. I plugin di KSplash sono librerie caricabili dinamicamente con la seguente convenzione sui nomi:

La libreria deve essere chiamata come ksplash+nomedeltemaminuscolo. Nel nostro esempio sarà ksplash2k.
Deve esserci un file .desktop corrispondente chiamato ksplash+nomedeltemaminuscolo.desktop. Nel nostro esempio sarà ksplash2k.desktop.
Infine l'oggetto restituito dalla libreria deve essere una classe, chiamata Theme+nometema. Nel nostro esempio la classe si chiamerà Theme2k.

Non preoccuparti se non hai capito quanto detto. Considereremo ognuno di questi punti in maggior dettaglio più avanti nel manuale. Un altro dettaglio molto importante è che la classe del plugin deve essere derivata dalla classe ThemeEngine.

Creare l'infrastruttura.
Creare l'infrastruttura.

Creare l'infrastruttura.

Useremo l'infrastruttura delle applicazioni di KDE, che si prenderà cura della compilazione del plugin e ci garantirà l'indipendenza dalla piattaforma senza nessun lavoro da parte nostra. Per fare ciò assicurati di avere il pacchetto kdesdk installato. Esegui il comando kapptemplate per produrre un applicazione chiamata "2k". Verrà creata una cartella che contiene file generici come AUTHORS, ecc.. Quello che ci interessa è una sottocartella chiamata 2k. Vai in questa cartella e cancella tutti i file presenti. Ora abbiamo lo scheletro di applicazione che ci serve.

Il prossimo passo consiste nel creare un file .desktop che, una volta installato, dirà a KSplash che il nostro plugin è disponibile. Coerentemente con la nomenclatura portata avanti nella sezione precedente, crea un file chiamato ksplash2k.desktop nella sottocartella suddetta. Deve contenere le seguenti linee.


[Desktop Entry]
Encoding=UTF-8
Type=Service
Comment=KSplash Plugin
Name=KSplash2k
ServiceTypes=KSplash/Plugin
X-KDE-Library=ksplash2k
X-KSplash-Default=true
X-KSplash-PluginName=2k
X-KSplash-ObjectName=Theme2k

Le linee Encoding, Type, Comment e ServiceTypes sono le stesse per tutti i plugin. Il nome del plugin e della libreria seguono la stessa nomenclatura già usata. La linea X-KSplash-Default accetta un valore booleano che determina se il plugin deve essere visualizzato nel modulo di configurazione nel centro di controllo. Ad eccezione di pochi casi, questa linea deve essere true.



Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Dichiarazione delle classi dei plugin
Dichiarazione delle classi dei plugin

Dichiarazione delle classi dei plugin

Adesso che abbiamo svolto le faccende preliminari, andiamo con la parte più divertente, creando una classe che fornirà il comportamento che vogliamo. Siete liberi di fare quasi tutto quello che volete con questa classe, segendo delle semplici restrizioni.

  1. Le classi dei plugin devono ereditare la classe ThemeEngine.

  2. Le classi dei plugin devono essere nominate in accordo al ruolo: Tema+NomePlugin.

  3. Le classi dei plugin devono avere una funzione static chiamata names che ritorna una lista di nomi attraverso i quali possono essere invocate.

  4. Se il plugin può essere configurato nel modulo del centro di controllo, dovrebbe provvedere una classe basata su ThemeEngineConfig per la configurazione.

  5. Le classi dei plugin devono sovrascrivere almeno una delle seguenti funzioni slotSetText, slotSetPixmap, slotUpdateProgress e slotUpdateSteps per renderle funzionanti.

  6. Il costruttore deve prendere la forma ThemeEngine( QWidget *parent, const char *name, const QStringList &args ) di modo che possa essere usato con la classe KGenericFactory.

L'ultima richiesta può sembrare complicata ma, come vedremo dopo, aggiungendo una singola linea al tuo file sorgente, puoi ignorarla.



Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Codice per il file di header
Codice per il file di header

Codice per il file di header

Dati i vincoli, possiamo ora vedere il file header theme2k.h che sarà:

Esempio 5.1. Listato di theme2k.h

#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( KConfig * );
};

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( KConfig *kc )
  {
    return new Cfg2k( kc );
  }
  static QStringList names()
  {
    QStringList Names;
    Names << "KSplash2k";
    Names << "ks2k";
    Names << "2k";
    Names << "2000";
    return( Names );
  };

public slots:
  inline void slotSetText( const QString& s )
  {
    if( mText && mText->text() != s ) mText->setText( s );
  };

private:
  void initUi();
  void readSettings();

  QLabel *mText;
  RotWidget *mRotator;
  QColor mTBgColor, mTFgColor, mRotColor1, mRotColor2, mStatusColor;
  int mRotSpeed;
  QString mWndTitle, mLogoFile;
};

#endif

Analizziamo il listato precedente. La classe Theme2k soddisfa la convenzione di nomi voluta, ed è ereditata dalla classe ThemeEngine. Fornisce un metodo Theme2k::names(), ed ha un costruttore che prende i parametri richiesti: Theme2k( QWidget *, const char *, const QStringList& ); e fornisce un semplice metodo Theme2k::slotSetText(). Per il momento non dobbiamo preoccuparci della classe RotWidget. Si tratta di un piccolo widget che fornisce alcuni effetti grafici. Il nostro plugin è molto semplice e non mostra icone o barre di progresso. Se vuoi mostrare delle icone devi overloadare la funzione slotSetPixmap . Funzioni simili esistono per impostare l'intervallo della barra di progresso (slotUpdateSteps) e incrementare il passo corrente (slotUpdateProgress).



Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Implementazione dei plugin
Implementazione dei plugin

Implementazione dei plugin

Esamineremo solo le parti rilevanti dell'implementazione. Per il listato completo vedi in appendice. La prima cosa che faremo è ottenere i requisiti delle librerie:

Esempio 5.2. Requisiti delle librerie

K_EXPORT_COMPONENT_FACTORY( libksplash2k, KGenericFactory<Theme2k> );

La macro K_EXPORT_COMPONENT_FACTORY è dichiarata in kgenericfactory.h. E ora il costruttore! Dato che questo plugin è super semplice, il costruttore è alquanto semplice.

Esempio 5.3. Costruttore del plugin

Theme2k::Theme2k( QWidget *parent, const char *name, const QStringList &args )
    :ThemeEngine( parent, name, args )
{
  readSettings();
  initUi();
}

Il metodo readSettings() illustra il modo giusto per ottenere le impostazioni del tema (Di sicuro vuoi che altre persone utilizzino il tuo plugin nel loro tema, giusto?)

Esempio 5.4. Ottenere le impostazioni del tema

void Theme2k::readSettings()
{
  if( !mTheme )
    return;

  KConfig *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 );
}

Siccome noi amiamo i nostri utenti, forniremo dei parametri di default che non sono presenti nel file del tema. Nota che dovresti sempre impostare il gruppo come "KSplash Theme: nome del tema" per rimanere compatibili con le future spacifiche per i temi. Il metodo initUI() non è interessante, in quanto crea semplicemente il widget. Per favore vedi in appendice per i dettagli.



Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Compilare il plugin
Compilare il plugin

Compilare il plugin

Dato che abbiamo deciso di utilizzare l'infrastruttura delle applicazioni di KDE per compilare il plugin, dobbiamo creare un Makefile.am. Dovrebbe apparire come segue:

Esempio 5.5. Listato di Makefile.am

INCLUDES = $(all_includes)

kde_module_LTLIBRARIES = libksplash2k.la

libksplash2k_la_SOURCES = theme2k.cpp rotwidget.cpp
libksplash2k_la_LDFLAGS = $(all_libraries) $(KDE_RPATH)
libksplash2k_la_LIBADD = $(LIB_KDEUI) -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

Per maggiori informazioni su come scrivere un file Makefile.am per KDE, per favore vedi il sito degli sviluppatori di KDE. La cosa da notare è che noi forniamo un tema predefinito basato su questo plugin, nonché un'anteprima di esso. Per una questione di cortesia ai tuoi utenti, dovresti fornire un file di esempio Theme.rc che illustra le varie opzioni.



Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Capitolo 6. Domande e risposte
Domande e risposte
Indietro
Avanti

Capitolo 6. Domande e risposte

6.1. Non riesco a trovare nessun tema che funzioni in KSplash. Perché?
6.2. Cos'è il file Theme.rc e come ne faccio uno?
6.1.

Non riesco a trovare nessun tema che funzioni in KSplash. Perché?

Probabilmente non hai il corretto plugin per il tema. I plugin sono nel pacchetto kde-artwork. Scaricalo e installalo, e poi riprova.

6.2.

Cos'è il file Theme.rc e come ne faccio uno?

Theme.rc è il file dove puoi specificare le impostazioni del tema. Per maggiori informazioni guarda Come to fare temi per KSplash.

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Capitolo 7. Riconoscimenti e License
Riconoscimenti e License
Indietro
Avanti

Capitolo 7. Riconoscimenti e License

KSplash

Copyright (c) programma 2003 Ravikiran Rajagopal

Contribuenti

  • Brian C. Ledbetter

Copyright (c) documentazione 2003 Teemu Rytilahti

Questa documentazione è concessa in licenza sotto i termini della GNU Free Documentation License.

Questo programma è concesso in licenza sotto i termini della GNU General Public License.

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Appendice A. installazione
installazione
Indietro
Avanti

Appendice A. installazione

Requisiti

Per usare correttamente KSplash hai bisogno di KDE versione 3.2 o superiore. Alcuni temi potrebbero richiedere specifici plugin. Se un tema non funziona, per favore contatta l'autore del tema per trovare come ottenere i plugin appropriati.

Compilazione e Installazione
Compilazione e Installazione

Compilazione e Installazione

Per compilare e installare KSplash sul tuo sistema, immetti i seguenti comandi nella directory di base della distribuzione di KSplash:

% ./configure
% make
% make install

Dato che KSplash usa autoconf e automake, non dovresti incontrare dei problemi per compilarlo. Se si verificasse qualche problema, per piacere segnalalo alle mailing list di KDE.



Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Appendice B. Codice sorgente
Codice sorgente
Indietro
Avanti

Appendice B. Codice sorgente

Listato di theme2k.cpp

#include <qlabel.h>
#include <qwidget.h>

#include <kapplication.h>
#include <kconfig.h>
#include <kdebug.h>
#include <kdialogbase.h>
#include <kgenericfactory.h>
#include <kglobalsettings.h>
#include <klocale.h>
#include <ksplash/objkstheme.h>
#include <kstandarddirs.h>

#include "rotwidget.h"
#include "theme2k.h"
#include "theme2k.moc"

K_EXPORT_COMPONENT_FACTORY( libksplash2k, KGenericFactory<Theme2k> );

Cfg2k::Cfg2k( KConfig * )
{}

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(KGlobalSettings::splashScreenDesktopGeometry());
  move( rect.x() + (rect.width() - size().width())/2,
        rect.y() + (rect.height() - size().height())/2 );
}

void Theme2k::readSettings()
{
  if( !mTheme )
    return;

  KConfig *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 );
}
Listato di rotwidget.h
Listato di rotwidget.h

Listato di rotwidget.h

#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


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Listato di rotwidget.cpp
Listato di rotwidget.cpp

Listato di rotwidget.cpp

#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 );
  }
}


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Indietro
Avanti
Partenza


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team

Avanti
 


Would you like to make a comment or contribute an update to this page?
Send feedback to the KDE Docs Team