<para>&ksplash; er en opstartsskærm der viser fremskridt for et program der er ved at blive indlæst. Rapportér venligst om problemer eller ønsker om nye egenskaber til &kde;'s e-mail-lister. &ksplash;'s hovedegenskaber er: </para>
<para>Denne håndbog vil vise dig hvordan man laver temaer til brug med plugin der allerede findes. Hvis ingen af de tilgængelige plugin tilfredsstiller din smag, kan du lære hvordan du brugerindstiller &ksplash;'s udseende fuldstændigt ved at skrive et plugin i C++. </para>
<para>For at bruge temaer fra <ulink url="http://www.kde-look.org">KDE-Look</ulink>, pakkes de ud til <filename>~/.trinity/share/apps/ksplash/Themes/</filename> for en enkelt bruger, eller til <filename>$<envar>TDEDIR</envar>/share/apps/ksplash/Themes/</filename> for at gøre dem tilgængelige for alle brugerne på dit system.</para>
<para> Du kan også bruge <guilabel>Opstartsskærm</guilabel>-modulet under <guilabel>Udseende</guilabel> i &kde;'s kontrolcenter til at gøre dette automatisk.</para>
<para>Dette module tillader dig at installere, teste og fjerne &ksplash;-temaer.</para>
<para>Nede langs siden af modulet er en liste af de for øjeblikket tilgængelige &ksplash;-temaer. Når du vælger en, vil en forhåndsvisning blive vist i hoveddelen af vinduet. Når du har valgt den du ønsker at bruge, tryk så på <guibutton>O.k.</guibutton> eller <guibutton>Anvend</guibutton>. Tryk på <guibutton>Annullér</guibutton> for at afslutte modulet uden at lave ændringer, og <guibutton>Standard</guibutton> for at genoprette systemets standard-opstartsskærm.</para>
<para>Fro at installere nye moduler, trykkes på <guibutton>Tilføj...</guibutton>, og find temaet på din computer. Du behøver ikke at pakke temafiler ud, du kan blot vælge den komprimerede temafil. Installering af et tema gør det ikke til det tema der bruges før du vælger det på listen og trykker enten på <guibutton>O.k.</guibutton> eller <guibutton>Anvend</guibutton>.</para>
<para>Selvom du kan se en forhåndsvisning af opstartsskærmen, vil du måske gerne se hvordan det ser ud i rigtigt brug, for eksempel for at se hvordan animeringen ser ud. Du kan teste temaer ved at vælge dem på listen og klikke på <guibutton>Test</guibutton>-knappen.</para>
<para>Du kan også fjerne de temaer du ikke længere ønsker at bruge, ved at vælge dem og trykke på <guibutton>Fjern</guibutton>-knappen. bemærk at din brugerkonto måske ikke har lov til at fjerne temaer der er installeret systemomfattende. Det anbefales også at du ikke afinstallerer <guilabel>Standard</guilabel>-opstartskærmen.</para>
<para>Det er nemt at lave dine egne temaer for &ksplash;. Efter du er færdig med dine temaer kan du sende dem til <ulink url="http://www.kde-look.org">KDE-Look</ulink> så andre kan bruge dem.</para>
<para>Lad os lave et tema der hedder <literal>MitHeltEget</literal>. For at temaet skal blive genkendt af &ksplash;, skal det gemmes i en mappe der hedder <filename class="directory">MitHelEget</filename> under <filename class="directory">~/.trinity/apps/ksplash/Themes/</filename>. Det skal have en fil der hedder <filename>Theme.rc</filename>, der indeholder opsætningen af temaet. Du kan angive mange specielle ting i temaet, ændre den plugin-maskine der bruges, og så videre. Du behøver ikke at bruge alle de mulige indstillinger; sædvanligvis har indstillingerne en acceptabel standardværdi. Den basale syntaks for indgange i <filename>Theme.rc</filename>-filen er <literal>[option] = [value]</literal> Du kan finde definitionerne på de forskellige muligheder i de følgende afsnit.</para>
<para>Efter at have angivet navnet, beskrivelsen og forfatteren for temaet, skal du først vælge en tema-maskine (også kendt som et plugin). Så kan du brugerindstille forskellige egenskaber af tema-maskinen ved at tilknytte nøgle-værdi par som i eksempel-filen ovenfor.</para>
<para>Sørg for at navnet på mappen hvori temafilerne opbevares (<filename class="directory">~/.trinity/apps/ksplash/Themes/MitHeltEget</filename> i vores tilfælde) og identifikatoren (<literal>[KSplash Tema: MitHeltEget] </literal> i vores tilfælde) for temaet i <filename>Theme.rc</filename>-filen er identiske.Ellers vil &ksplash; ikke genkende temaet.</para>
<para>Når &ksplash; starter, prøver den at finde et baggrundsbillede der passer til skærmens opløsning hvis tema-maskinen bruger et. Baggrundsbilledfilen skan navngives i følgende: <filename>Background-<replaceable>WWWxHHH</replaceable>.png</filename>.</para>
<para>For eksempel vil du måske bruge en fil der hedder <filename>Background-1024x768</filename>. Hvis baggrundsbilledet for din skærms opløsning ikke kan findes, prøver den at ændre størrelse på den originale <filename>Background.png</filename> eller filen angivet i <filename>Theme.rc</filename> til at passe med den nuværende opløsning. Ændring af størrelse uden-videre vil selvfølgelig tage et stykke tid, så du bør sørge for baggrundsbilleder i det mindste i følgende størrelser: 1280x1024, 1024x768 og 800x600.</para>
<para>I dette kapitel beskriver en simpel metode at bruge &ksplash; som opstartskærm for dit &kde;-program. Hvis du ikke udvikler programmer for &kde;, kan du springe over dette kapitel.</para>
<para>Dit &kde;-program skal være klar over &DCOP;. &DCOP; er den teknik &kde; bruger til at kommunikere mellem programmer. Hvis du bruger <ulink url="http://developer.kde.org">&kde; application framework</ulink>, sker dette automatisk. For information om &DCOP; og relaterede &kde; teknologier, besøg venligst <ulink url="http://developer.kde.org">&kde; developers' corner</ulink>.</para>
<para>Før dit program starter sit beregningsintensive arbejde, eller før det begynder med at indlæse plugin, &etc;, startes &ksplash; som følger:</para>
<para>Vi vil antage at der kun er én udgave af &ksplash; der kører. Andre tilfælde er en smule mere komplicerede. Se venligst &DCOP;-dokumentationen for yderligere detaljer.</para>
<para>Hver gang du kalder <constant>programStarted</constant>, forøges antallet af færdige skridt. Når dit program er færdig med sin opstart, så gør følgende for at få opstartskærmen til at gå væk:</para>
<para>Det er ikke svært at skrive et nyt plugin for &ksplash;. I dette kapitel vil vi skrive et simpelt plugin der vil emulere opstartsskærmen for et velkendt operativsystem. Denne øvelse antager at du kender til basal C++, og en smule om KDE/Qt programmering.</para>
<para>Vi vil lave et plugin der hedder <literal>2k</literal>. Navnet på et plugin bruges forskellige steder, og det er vigtigt at du er konsistent i dets brug så dit plugin bliver genkendt af &ksplash;. &ksplash; plugin er rent faktisk dynamisk indlæsbare biblioteker med følgende navnekonvention: </para>
<member>Biblioteket skal hedde <filename>ksplash+temanavnmedsmaabogstaver</filename>. For vore tema, vil et være <filename>ksplash2k</filename>.</member>
<member>Det skal have en tilsvarende desktop-fil som hedder <filename>ksplash+temanavnmedsmaabogstaver.desktop</filename>. For vores tema vil det være <filename>ksplash2k.desktop</filename>. </member>
<member>Endelig skal objektet der returneres af biblioteket være en klasse som hedder <literal>Theme+temanavnet</literal>. For vores eksempel vil det være <literal>Theme2k</literal>.</member>
<para>Du skal ikke bekymre dig om du forstår alt dette. Vi vil betragte hvert af punkterne i detalje senere. Den anden meget vigtige detalje er at plugin-klassen skal være afledt fra <literal>ThemeEngine</literal>. </para>
<para>Vi vil bruge &kde;'s program-ramme som vil tage sig af at bygge dit plugin og vil sørge for uafhængighed af platform uden at vi skal gøre noget. For at gøre dette sørg for at du har <filename>tdesdk</filename>-pakken installeret. Kør kommandoen <literal>kapptemplate</literal> for at producere et program der hedder "2k". Det vil lave en mappe på topniveau som indeholder generiske filer såsom AUTHORS, &etc;. Vi er mest interesseret i undermappen der hedder <filename class="directory">2k</filename>. Gå ind i den undermappe og slet alle filerne der. Nu har vi det krævede skelet. </para>
<para>Næste skridt er at lave en <filename>.desktop</filename>-fil som, når den er installeret, vil fortælle &ksplash; at vores plugin er tilstede. Konsistent med navngivningkonventionerne lagt ud i <link linkend="basic-requirements">det foregående afsnit</link>, laves en fil der hedder <filename>ksplash2k.desktop</filename> i den mappe. Den skal indeholde følgende linjer: </para>
<para><literal>Encoding</literal>, <literal>Type</literal>, <literal>Comment</literal> og <literal>ServiceTypes</literal> er det samme for alle plugin. Navnet på dit plugin og biblioteksnavnet følger de konventioner ve bemærkede tidligere. Indgangen <literal>X-KSplash-Default</literal> tager en boolesk værdi som afgør om det vises som standard i kontrolpanelets indstillingsmodul. Undtagen i meget sjældne tilfælde skal det være <constant>true</constant>. </para>
<para>Nu da vi er færdige med det indledende arbejde, lad os begynde med den morsomme del - at lave en klasse der vil sørge for den opførsel vi ønsker. Mens vi er fire til at få denne klasse til at gøre næsten hvadsomhelst vi ønsker den skal gøre, er der nogle få begrænsninger.</para>
<listitem><para>Plugin-klasser skal arve <constant>ThemeEngine</constant>-klassen.</para></listitem>
<listitem><para>Plugin-klasser skal navngives efter reglen: <classname>Tema+PluginNavn</classname>.</para></listitem>
<listitem><para>Plugin-klasser skal sørge for en <literal>statisk</literal> funktion der hedder <function>names</function> der returnerer en liste af navne ved hvilke de kan startes.</para></listitem>
<listitem><para>Hvis dit plugin kan indstilles i kontrolcenter-modulet, skal det sørge for en <literal>ThemeEngineConfig</literal>-baseret klasse for indstillingen.</para></listitem>
<listitem><para>Plugin-klasser skal gå forud for mindst en af de virtuelle funktioner <function>slotSetText</function>, <function>slotSetPixmap</function>, <function>slotUpdateProgress</function> og <function>slotUpdateSteps</function> for at være brugbare.</para></listitem>
<listitem><para>Konstruktøren skal være på formen <literal>ThemeEngine( QWidget *parent, const char *name, const QStringList &args )</literal> så den kan bruges med <classname>KGenericFactory</classname>.</para></listitem>
<para>Det sidste krav synes måske kompliceret, men, som vi skal se senere, du kan sædvanligvis ignorere det ved at tilføje en enkelt linje til din kildefil.</para>
<para>Lad os analysere ovenstående. <classname>Theme2k</classname>-klassen tilfredsstiller navnekonventionerne, og er arvet fra <classname>ThemeEngine</classname>. Den sørger for en <methodname>Theme2k::names()</methodname>, og har en konstruktør der tager de krævede parametre: <function>Theme2k( QWidget *, const char *, const QStringList& );</function> og sørger også for en simpel <methodname>Theme2k::slotSetText()</methodname> metode. Indtil videre bekymrer vi os ikke om <classname>RotWidget</classname>-klassen. Det er en lille kontrol der sørger for nogle øjenlækkerier for brugeren. Vores plugin er meget simpelt og viser ikke nogen ikoner og har ingen fremgangslinje. Hvis du gerne vil vise ikoner, så sæt <function>slotSetPixmap</function>-funktionen ud af kraft. Lignende funktioner eksisterer til at sætte fremgangslinjens område (<function>slotUpdateSteps</function>) og til at forøge (<function>slotUpdateProgress</function>) det nuværende skridt. </para>
<para>Vi vil kun undersøge de relevante dele af implementationen. For en liste af hele implementationen, kig venligst i appendiks. Det første vi vil gøre er at bibliotekskravene til en side:</para>
<para>Makroen <constant>K_EXPORT_COMPONENT_FACTORY</constant> erklæres i <filename>kgenericfactory.h</filename>. Videre til konstruktøren! Da dette er et meget simpelt plugin, er konstruktøren temmelig ligetil.</para>
<para>Metoden <function>readSettings()</function> illustrerer den rigtige måde at opnå din temaopsætning. (Du ønsker at folk skal bruge dit plugin i deres temaer, ikke sandt?)</para>
<para>Da vi kan lide vore brugere, sørger vi for rimelige standardværdier for parametre der ikke er tilstede i temafilen. Bemærk at vi altid skal sætte vores gruppe til "KSplash Theme: themename" for at forblive kompatible med fremtidige tema-specifikationer. <function>initUI()</function>-metoden er ikke særlig interessant, da den blot opbygger kontrollerne. Se venligst appendiks for detaljer. </para>
<para>Da vi besluttede os for at bruge &kde;'s rammer til at kompilere vores plugin, må vi lave en <filename>Makefile.am</filename>. Den skal se sådan her ud:</para>
<para>For yderligere oplysninger om at skrive <filename>Makefile.am</filename>-filer for &kde;, se venligst &kde;-udviklernes' <ulink url="http://developer.kde.org/documentation/other/makefile_am_howto.html"> netside</ulink>. Det eneste der skal bemærkes er at vi sørger for et standardtema baseret på dette plugin, og vi sørger for et forhåndsbillede for det. Som en venlighed overfor dine brugere, bør du sørge for et eksempel på en <filename>Theme.rc</filename>-fil der illustrerer brugen af de forskellige tilvalg.</para>
<para>Du har formodentlig ikke de rigtige plugin for temaet. Plugin er i <literal>kde-artwork</literal> pakken. Hent den og installér den, og prøv så igen.</para>
<para><filename>Theme.rc</filename> er filen hvor du kan specificere temaets opsætning. For yderligere oplysninger kig i <link linkend="themes">Hvordan laver jeg temaer for &ksplash;</link>. </para>
<para>For at det skal lykkes at bruge &ksplash;, har du brug for &kde; version 3.2 eller højere. Nogle temaer vil måske kræve bestemte plugin. Hvis et tema ikke virker, så kontakt venligst temaets forfatter for at finde ud af hvor man får fat i et passende plugin.</para>