1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
|
<?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 % Spanish "INCLUDE">
]>
<book lang="&language;">
<bookinfo>
<title>Manual de &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>Marcos</firstname> <surname>Fouces Lago</surname> <affiliation><address><email>mfouces@yahoo.es</email></address></affiliation> <contrib>Traductor</contrib> </othercredit> <othercredit role="translator"> <firstname>Santiago</firstname> <surname>Fernández Sancho</surname> <affiliation><address><email>santi@kde-es.org</email></address></affiliation> <contrib>Traductor</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>&ksplash; es una bonita pantalla que le muestra el progreso de una aplicación que se esté cargando.</para>
</abstract>
<keywordset>
<keyword>KDE</keyword>
<keyword>tdebase</keyword>
<keyword>ksplash</keyword>
<keyword>ksplashml</keyword>
<keyword>splashscreen</keyword>
<keyword>eye candy</keyword>
</keywordset>
</bookinfo>
<chapter id="introduction">
<title>Introducción</title>
<para>&ksplash; es una bonita pantalla que muestra el progreso de una aplicación que se esté cargando. Por favor, informe de cualquier problema o petición de característica a través de las listas de correo de &kde;. Las características principales de &ksplash; son: </para>
<simplelist>
<member>Es posible utilizar temas.</member>
<member>Utiliza complementos para conseguir una personalización completa.</member>
<member>Puede ser utilizado por cualquier aplicación que utilice DCOP.</member>
</simplelist>
<para>Este manual le mostrará cómo crear temas para utilizar con los complementos que estén disponibles. Si ninguno de los complementos disponibles satisface sus gustos, puede aprender a personalizar por completo el aspecto de &ksplash; escribiendo un complemento en C++. </para>
</chapter>
<chapter id="using-themes">
<title>Utilizar temas</title>
<para>Para utilizar los temas de <ulink url="http://www.kde-look.org">KDE-Look</ulink>, extraígalos a <filename>~/.trinity/share/apps/ksplash/Themes/</filename> para un usuario concreto, o a <filename>$<envar>TDEDIR</envar>/share/apps/ksplash/Themes/</filename> para que estén disponibles para todos los usuarios de su sistema.</para>
<para>También puede utilizar el módulo <guilabel>Pantalla anunciadora</guilabel> en <guilabel>Aspecto</guilabel> en el centro de control de &kde; para hacer esto automáticamente.</para>
<sect1 id="using-kcontrol-module">
<title>Utilizar el módulo de &kcontrol;</title>
<para>Este módulo le permite instalar, comprobar y eliminar temas de &ksplash;.Este módulo le permite instalar, comprobar y eliminar temas de &ksplash;.</para>
<para>En la parte inferior de este módulo hay una lista con los temas disponibles para &ksplash;. Una vez que haya seleccionado una, se mostrará una previsualización en la parte principal de la ventana. Una vez que haya seleccionado la que desea utilizar, pulse <guibutton>Aceptar</guibutton> o <guibutton>Aplicar</guibutton>. Pulse <guibutton>Cancelar</guibutton> para salir del módulo sin hacer cambios, y <guibutton>Predeterminados</guibutton> para restaurar los valores predeterminados de la pantalla.</para>
<para>Para instalar nuevos módulos, pulse <guibutton>Añadir...</guibutton>, y encuentre el tema en su ordenador. No necesita desempaquetar el archivo con el tema, solo tiene que seleccionar el archivo comprimido. El hecho de instalar un tema no hace de él el tema en uso, deberá seleccionarlo de la lista y pulsar <guibutton>Aceptar</guibutton> o <guibutton>Aplicar</guibutton>.</para>
<para>Aunque pueda ver una vista previa de la pantalla anunciadora, puede que quiera ver cómo aparece realmente, por ejemplo, para ver cómo es la animación. Podrá verificar los temas seleccionables pulsando el botón <guibutton>Test</guibutton>.</para>
<para>También podrá eliminar temas que no vaya a volver a utilizar, seleccionándolos y pulsando el botón <guibutton>Eliminar</guibutton>. Tenga en cuenta que su cuenta de usuario puede no tener permisos para eliminar los temas instalados para todo el sistema. También es recomendable no desinstalar la pantalla anunciadora <guilabel>predeterminada</guilabel>.</para>
</sect1>
</chapter>
<chapter id="themes">
<title>Cómo hacer temas para &ksplash;</title>
<sect1 id="themes-general">
<title>General</title>
<para>Hacer sus propios temas para &ksplash; es sencillo. Una vez que haya terminado su tema podrá enviarlo a <ulink url="http://www.kde-look.org">KDE-Look</ulink> para que otros puedan utilizarlo.</para>
<sect2 id="theme-syntax">
<title>Identificar su tema</title>
<para>Permítanos crear un tema llamado <literal>MiBonitoTema</literal>. Para que el tema sea reconocido por &ksplash;, debería guardarse en una carpeta llamada <filename class="directory">MiBonitoTema</filename> en <filename class="directory">~/.trinity/apps/ksplash/Themes/</filename>. Debería tener un archivo llamado <filename>Theme.rc</filename>, conteniendo las configuraciones del tema. Puede especificar numerosas cosas en el tema, cambiar el complemento del motor de uso, etc. No necesita utilizar todas las configuraciones disponibles. Normalmente los valores predeterminados suelen ser correctos. La sintaxis básica para las entradas del archivo <filename>Theme.rc</filename> es <literal>[opción] = [valor]</literal>. Podrá encontrar las definiciones de varias opciones en las siguientes secciones.</para>
<example>
<title>Un archivo <filename>Theme.rc</filename> sencillo</title>
<programlisting>[KSplash Theme: MiBonitoTema]
Name = MiBonitoTema
Description = Un bonito tema utilizando el motor XpLike
Version = 1.0
Author = Nombre real <nombrereal@correo.com>
## Utiliza el motor XpLike para este tema.
Engine = XpLike
Show Icon = false
Welcome Text = Cargando KDE
</programlisting>
</example>
<para>Después de especificar el nombre, la descripción y el autor del tema, debe seleccionar el motor del tema (es un complemento). A continuación podrá personalizar varias características del motor del tema asignando pares clave-valor como en el ejemplo anterior.</para>
<important>
<para>Es importante que el nombre del directorio bajo el que se hayan guardado los archivos del tema (<filename class="directory">~/.trinity/apps/ksplash/Themes/MiBonitoTema</filename> en nuestro caso) y el identificador (<literal>[KSplash Theme: MiBonitoTema]</literal> en nuestro caso) en el archivo <filename>Theme.rc</filename> sean idénticos. Sino &ksplash; no reconocerá el tema.</para>
</important>
</sect2>
<sect2 id="theme-files">
<title>Archivos de fondo</title>
<para>Cuando se inicia &ksplash;, intenta encontrar una imagen de fondo para su resolución de pantalla actual, si es que el motor del tema utiliza una. El archivo de imagen del fondo debería tener un nombre que siga el formato <filename>Background-<replaceable>WWWxHHH</replaceable>.png</filename>.</para>
<para>Por ejemplo, podría utilizar un archivo llamado <filename>Background-1024x768</filename>. Sino puede encontrar una imagen de fondo para su resolución de pantalla, intenta redimensionar el <filename>Background.png</filename> original o el archivo especificado en <filename>Theme.rc</filename> para adaptarlo a la resolución actual. Redimensionar la imagen sobre la marcha llevará cierto tiempo, por tanto, debería proporcionar imágenes de fondo, al menos para los siguientes tamaños: 1280x1024, 1024x768 y 800x600.</para>
</sect2>
</sect1>
<sect1 id="theme-engines">
<title>Opciones del motor de temas</title>
<sect2 id="default-themes">
<title>Tema predeterminado</title>
<table>
<title>Opciones del tema predeterminado</title>
<tgroup cols="3">
<tbody>
<row>
<entry>Nombre</entry>
<entry>Argumento</entry>
<entry>Descripción</entry>
</row>
<!-- Statusbar -->
<row>
<entry>Mostrar siempre el progreso</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se debe mostrar el progreso de carga. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Etiqueta del segundo plano</entry>
<entry>[color]</entry>
<entry>Determina el color que se utilizará en el texto de la barra de estado. El valor predeterminado es #FFFFFF (blanco).</entry>
</row>
<!-- Misc. things -->
<row>
<entry>Iconos destelleantes</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se mostrarán los iconos con «destellos». El valor predeterminado es true (verdadero).</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="standard-themes">
<title>Tema estándar</title>
<table>
<title>Opciones del tema estándar</title>
<tgroup cols="3">
<tbody>
<row>
<entry>Nombre</entry>
<entry>Argumento</entry>
<entry>Descripción</entry>
</row>
<!-- Statusbar -->
<row>
<entry>Statusbar Position</entry>
<entry>[top/bottom] (arriba/abajo)</entry>
<entry>Cambia la posición de la barra de estado en la pantalla. El valor predeterminado es bottom (abajo).</entry>
</row>
<row>
<entry>Statusbar Visible</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se debe mostrar la barra de estado. El valor predeterminado es true (verdadero).Indica si se debe mostrar la barra de estado. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Progress Visible</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se debe mostrar el progreso de carga. El valor predeterminado es true (verdadero).</entry>
</row>
<!-- Fonts -->
<row>
<entry>Statusbar Font</entry>
<entry>[nombreletra]</entry>
<entry>El tipo de letra utilizado en la barra de estado. El valor predeterminado es Helvetica.El tipo de letra utilizado en la barra de estado. El valor predeterminado es Helvetica.</entry>
</row>
<row>
<entry>Statusbar Font Size</entry>
<entry>[tamaño]</entry>
<entry>El tamaño de la letra para la barra de estado. El valor predeterminado es 16.El tamaño de la letra para la barra de estado. El valor predeterminado es 16.</entry>
</row>
<row>
<entry>Statusbar Font Bold</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si la letra de la barra de estado debe estar en negrita. El valor predeterminado es true (verdadero).Indica si la letra de la barra de estado debe estar en negrita. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Statusbar Font Italic</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si la letra de la barra de estado debe estar en cursiva. El valor predeterminado es false (falso).Indica si la letra de la barra de estado debe estar en cursiva. El valor predeterminado es false (falso).</entry>
</row>
<!-- Misc. things -->
<row>
<entry>Statusbar Foreground</entry>
<entry>[color]</entry>
<entry>El color del primer plano de la barra de estado. El valor predeterminado es white (blanco).El color del primer plano de la barra de estado. El valor predeterminado es white (blanco).</entry>
</row>
<row>
<entry>Statusbar Background</entry>
<entry>[color]</entry>
<entry>El color del fondo de la barra de estado. El valor predeterminado es black (negro).El color del fondo de la barra de estado. El valor predeterminado es black (negro).</entry>
</row>
<row>
<entry>Statusbar Icon</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si la barra de estado tendrá un icono.</entry>
</row>
<row>
<entry>Icons Visible</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si los iconos serán visibles. El valor predeterminado es true (verdadero).Indica si los iconos serán visibles. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Icons Jumping</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si los iconos saltarán. El valor predeterminado es true (verdadero).Indica si los iconos saltarán. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Icon Position</entry>
<entry>[0-3,10-13]</entry>
<entry>Indica la posición en la que se muestran los iconos. El valor predeterminado es abajo a la izquierda.Indica la posición en la que se muestran los iconos. El valor predeterminado es abajo a la izquierda.</entry>
</row>
<row>
<entry>Splash Screen</entry>
<entry>[nombre]</entry>
<entry>Cambia la imagen que se muestra en la pantalla de inicio.</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="redmond-themes">
<title>Tema Redmond</title>
<table>
<title>Opciones del tema Redmon</title>
<tgroup cols="3">
<tbody>
<row>
<entry>Nombre</entry>
<entry>Argumento</entry>
<entry>Descripción</entry>
</row>
<!-- Main elements -->
<row>
<entry>Background Image</entry>
<entry>[nombrearchivo]</entry>
<entry>Imagen a utilizar como fondo.</entry>
</row>
<row>
<entry>User Icon</entry>
<entry>[nombreicono]</entry>
<entry>Nombre del icono estándar que se utilizará para el usuario. El valor predeterminado es <constant>go</constant>.</entry>
</row>
<row>
<entry>Welcome Text</entry>
<entry>[texto]</entry>
<entry>Texto que se muestra en la pantalla de inicio. El valor predeterminado es «Bienvenido».Texto que se muestra en la pantalla de inicio. El valor predeterminado es «Bienvenido».</entry>
</row>
<row>
<entry>Username Text</entry>
<entry>[texto]</entry>
<entry>Texto que se muestra en lugar del nombre real del usuario.</entry>
</row>
<!-- Positioning elements -->
<row>
<entry>Welcome Text Position</entry>
<entry>[x,y]</entry>
<entry>Posición en la que se mostrará el texto de Bienvenida.</entry>
</row>
<row>
<entry>Username Text Position</entry>
<entry>[x,y]</entry>
<entry>Posición de la pantalla en la que se mostrará el nombre del usuario.</entry>
</row>
<row>
<entry>Action Text Position</entry>
<entry>[x,y]</entry>
<entry>Posición de la pantalla en la que se mostrará la acción que se está realizando.Posición de la pantalla en la que se mostrará la acción que se está realizando.</entry>
</row>
<row>
<entry>Icon Position</entry>
<entry>[x,y]</entry>
<entry>Posición de la pantalla en la que se mostrará el icono de usuario.</entry>
</row>
<!-- Show to show.. -->
<row>
<entry>Show Welcome Text</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se mostrará el texto de bienvenida. El valor predeterminado es true (verdadero).Indica si se mostrará el texto de bienvenida. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Show Welcome Shadow</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se sombreará el texto de bienvenida. El valor predeterminado es true (verdadero).Indica si se sombreará el texto de bienvenida. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Show Username</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se mostrará el nombre de usuario. El valor predeterminado es true (verdadero).Indica si se mostrará el nombre de usuario. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Show Action</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se mostrará la acción que se está llevando a cabo. El valor predeterminado es true (verdadero).Indica si se mostrará la acción que se está llevando a cabo. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Show Icon</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se mostrará el icono. El valor predeterminado es true (verdadero).Indica si se mostrará el icono. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Use TDM User Icon</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se mostrará el icono de acceso del usuario. El valor predeterminado es true (verdadero).Indica si se mostrará el icono de acceso del usuario. El valor predeterminado es true (verdadero).</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="macx-themes">
<title>Tema MacX</title>
<table>
<title>Opciones del tema MacX</title>
<tgroup cols="3">
<tbody>
<row>
<entry>Nombre</entry>
<entry>Argumento</entry>
<entry>Descripción</entry>
</row>
<row>
<entry>Icon Size Minimum</entry>
<entry>[tamaño]</entry>
<entry>Establece el tamaño mínimo de los iconos. El valor predeterminado es 16.Establece el tamaño mínimo de los iconos. El valor predeterminado es 16.</entry>
</row>
<row>
<entry>Icon Size Maximum</entry>
<entry>[tamaño]</entry>
<entry>Establece el tamaño máximo de los iconos. El valor predeterminado es 64.Establece el tamaño máximo de los iconos. El valor predeterminado es 64.</entry>
</row>
<row>
<entry>Optimized Icon Rendering</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si se optimizará la presentación del icono. El valor predeterminado es true (verdadero).Indica si se optimizará la presentación del icono. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Progress Bar Visible</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si la barra de progreso estará visible. El valor predeterminado es true (verdadero).Indica si la barra de progreso estará visible. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Progress Bar Position</entry>
<entry>[top/bottom] (arriba/abajo)</entry>
<entry>Indica si la barra de estado se situará en la parte superior o inferior. El valor predeterminado es bottom (abajo).</entry>
</row>
<row>
<entry>Icons Jumping</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si los iconos saltarán. El valor predeterminado es false (falso).Indica si los iconos saltarán. El valor predeterminado es false (falso).</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="mac-classic-themes">
<title>Tema MacClassic</title>
<table>
<title>Opciones del tema MacClassic</title>
<tgroup cols="3">
<tbody>
<row>
<entry>Nombre</entry>
<entry>Argumento</entry>
<entry>Descripción</entry>
</row>
<row>
<entry>Icon Position</entry>
<entry>[0-3,10-13]</entry>
<entry>Posición de los iconos en la pantalla. El valor predeterminado es abajo a la izquierda.Posición de los iconos en la pantalla. El valor predeterminado es abajo a la izquierda.</entry>
</row>
<row>
<entry>Icons Jumping</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si los iconos saltarán. El valor predeterminado es false (falso).Indica si los iconos saltarán. El valor predeterminado es false (falso).</entry>
</row>
<row>
<entry>Icons Visible</entry>
<entry>[true/false] (verdadero/falso)</entry>
<entry>Indica si los iconos serán visibles. El valor predeterminado es true (verdadero).Indica si los iconos serán visibles. El valor predeterminado es true (verdadero).</entry>
</row>
<row>
<entry>Splash Screen</entry>
<entry>[nombre]</entry>
<entry>Cambia la imagen que se muestra en la pantalla de inicio.</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 id="themes-2k">
<title>Tema 2k</title>
<table>
<title>Opciones del tema 2k</title>
<tgroup cols="3">
<tbody>
<row>
<entry>Nombre</entry>
<entry>Argumento</entry>
<entry>Descripción</entry>
</row>
<row>
<entry>Title Background Color</entry>
<entry>[color]</entry>
<entry>Color del fondo del título. El valor predeterminado es dark blue (azul oscuro).Color del fondo del título. El valor predeterminado es dark blue (azul oscuro).</entry>
</row>
<row>
<entry>Title Foreground Color</entry>
<entry>[color]</entry>
<entry>Color del primer plano del título. El valor predeterminado es white (blanco).Color del primer plano del título. El valor predeterminado es white (blanco).</entry>
</row>
<row>
<entry>Status Text Color</entry>
<entry>[color]</entry>
<entry>Color del texto de estado. De forma predeterminada será el mismo que el del fondo.Color del texto de estado. De forma predeterminada será el mismo que el del fondo.</entry>
</row>
<row>
<entry>Rotator Color 1</entry>
<entry>[color]</entry>
<entry>Define el color del rotador 1. El valor predeterminado es dark blue (azul oscuro).Define el color del rotador 1. El valor predeterminado es dark blue (azul oscuro).</entry>
</row>
<row>
<entry>Rotator Color 2</entry>
<entry>[color]</entry>
<entry>Define el color del rotador 2. El valor predeterminado es cyan (azul cian).Define el color del rotador 2. El valor predeterminado es cyan (azul cian).</entry>
</row>
<row>
<entry>Rotator Speed</entry>
<entry>[valor]</entry>
<entry>Define la velocidad de giro. El valor predeterminado es 30.</entry>
</row>
<row>
<entry>Window Title</entry>
<entry>[texto]</entry>
<entry>Especifica el texto del título de la ventana.</entry>
</row>
<row>
<entry>Logo File</entry>
<entry>[nombrearchivo]</entry>
<entry>Define el logotipo utilizado.</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
</sect1>
</chapter>
<chapter id="from-other-applications">
<title>Utilizar &ksplash; dentro de su aplicación.</title>
<para>En este capítulo describiremos un método sencillo para utilizar &ksplash; como la pantalla de inicio de su aplicación &kde;. Sino desarrolla aplicaciones para &kde; puede saltarse este capítulo.</para>
<sect1 id="basic-other-reqs">
<title>Requisitos básicos</title>
<para>Sus aplicaciones &kde;, deberían ser capaces de utilizar &DCOP;. &DCOP; es la tecnología de &kde; utilizada para la comunicación entre aplicaciones. Si utiliza la <ulink url="http://developer.kde.org">estructura de aplicación &kde;</ulink> estándar, se incluirá automáticamente. Para obtener información sobre &DCOP; y las tecnologías relacionadas con &kde;, vea la <ulink url="http://developer.kde.org">página de los desarrolladores de &kde;</ulink>.</para>
</sect1>
<sect1 id="other-using">
<title>Iniciando &ksplash;</title>
<para>Antes de que su aplicación se inicie comience a trabajar, o antes de que comience a cargar complementos, &etc;, llame a &ksplash; de la siguiente forma:</para>
<programlisting>DCOPClient *c = kapp->dcopClient();
QString error;
QCString KSplashName;
int pid = 0;
QStringList args;
args << "--theme=MiBonitoTema" << "--managed";
if (kapp->startServiceByDesktopName("ksplash", args, &error, &KSplashName, &pid))
{
KMessageBox::sorry(0, error, "Imposible llamar a KSplash");
// Aquí se procesará el error.
}
</programlisting>
<para>Asumiremos que solo hay una instancia de &ksplash; en ejecución. El resto de los casos son algo más complejos. Por favor, vea la documentación de &DCOP; para obtener detalles más amplios.</para>
</sect1>
<sect1 id="show-messages">
<title>Mostrar mensajes</title>
<para>Antes de mostrar cualquier mensaje, necesitará definir el número de pasos que se mostrarán. Por ejemplo, el procedimiento de inicio de &kde; utiliza 7 pasos.</para>
<programlisting>QByteArray data;
QDataStream arg(data,IO_WriteOnly);
arg << cualquierNumero;
if (!(c->send(KSplashName, "KSplashIface", "setStartupItemCount(int)", data))
// Aquí se procesará el error.
</programlisting>
<para>Cuando quiera mostrar un mensaje, con o sin icono, utilice:</para>
<programlisting>arg << QString("nombreIcono") << QString("nombrePrograma") << QString("Alguna descripción");
if (!(c->send(KSplashName, "KSplashIface", "programStarted(QString,QString,QString)", data))
{
// Aquí se procesará el error.
}
</programlisting>
<para>Cada vez que llame a <constant>programStarted</constant>, se incrementarán los pasos completados. Cuando su programa haya terminado de iniciarse, haga lo siguiente para hacer que la pantalla de inicio desaparezca:</para>
<programlisting>if (!(c->send(KSplashName, "KSplashIface", "startupComplete()", data))
{
// Aquí se procesará el error.
}
</programlisting>
<para>¡Ya está! si es que no necesita nada más de todas las posibilidades que le ofrece &ksplash;.¡Ya está! si es que no necesita nada más de todas las posibilidades que le ofrece &ksplash;.</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>Escribiendo nuevos complementos para &ksplash;</title>
<para>Escribir complementos nuevos para &ksplash; no es difícil. En este capítulo, escribiremos un complemento sencillo que emulará la pantalla de inicio de un sistema operativo bien conocido. Este tutorial asume que tiene conocimientos básicos de C++ y un poco de programación KDE/Qt.</para>
<sect1 id="basic-requirements">
<title>Requisitos básicos</title>
<para>Crearemos un complemento llamado <literal>2k</literal>. El nombre del complemento se utiliza en varios lugares, y es importante que lo utilice consistentemente para que el complemento sea reconocido por &ksplash;. Los complementos de &ksplash; son bibliotecas que se pueden cargar dinámicamente y que siguen la siguiente convención para los nombres: </para>
<simplelist>
<member>La biblioteca debería llamarse <filename>ksplash+nombretemaenminusculas</filename>. En nuestro caso será <filename>ksplash2k</filename>.</member>
<member>Debería tener su correspondiente archivo desktop llamado <filename>ksplash+nombretemaenminusculas.desktop</filename>. En nuestro caso será <filename>ksplash2k.desktop</filename>. </member>
<member>Finalmente, el objeto devuelto por la biblioteca debería ser una clase llamada <literal>Theme+nombretema</literal>. En nuestro caso, será <literal>Theme2k</literal>.</member>
</simplelist>
<para>No se preocupe sino entiende todo lo anterior. Veremos cada uno de estos puntos con más detalle posteriormente. Otro detalle importante es que la clase del complemento debería derivar de <literal>ThemeEngine</literal>. </para>
</sect1>
<sect1 id="skeleton">
<title>Construir la estructura del esqueleto</title>
<para>Utilizaremos la estructura de una aplicación &kde; para construir el complemento de forma que sea independiente de la plataforma, y ello, sin ningún trabajo por nuestra parte. Para hacer esto asegúrese de que tiene instalado el paquete <filename>tdesdk</filename>. Ejecute la orden <literal>kapptemplate</literal> para crear una aplicación llamada «2k». Esto creará una estructura de carpetas que contendrán archivos genéricos tales como AUTHORS, &etc;. Estamos más interesados en la subcarpeta llamada <filename class="directory">2k</filename>. Vaya a la subcarpeta y borre todos sus archivos. Ahora ya tenemos el esqueleto que necesitamos. </para>
<para>El siguiente paso es crear un archivo <filename>.desktop</filename> que, cuando se instale, le diga a &ksplash; que nuestro complemento está disponible. De acuerdo con la convención de nombre tratada en la <link linkend="basic-requirements">sección anterior</link>, crearemos un archivo llamado <filename>ksplash2k.desktop</filename> en esta carpeta. Debería contener las siguientes líneas: </para>
<programlisting><literal>
[Desktop Entry]
Encoding=UTF-8
Type=Service
Comment=Complemento KSplash
Name=KSplash2k
ServiceTypes=KSplash/Plugin
X-TDE-Library=ksplash2k
X-KSplash-Default=true
X-KSplash-PluginName=2k
X-KSplash-ObjectName=Theme2k
</literal>
</programlisting>
<para><literal>Encoding</literal>, <literal>Type</literal>, <literal>Comment</literal> y <literal>ServiceTypes</literal> son iguales para todas los complementos. El nombre del complemento y de la biblioteca siguen las convenciones tratadas antes. La entrada <literal>X-KSplash-Default</literal> es un valor lógico que determina si se mostrará en el módulo de configuración del panel de control de forma predeterminada. Excepto para casos muy raros debería ser <constant>true</constant> (verdadero). </para>
</sect1>
<sect1 id="headerfile">
<title>Declaración de la clase del complemento</title>
<para>Ya tenemos el trabajo previo hecho, déjenos introducirle en la parte más divertida, crear una clase que proporcionará el comportamiento deseado. A pesar de que somos libres para que esta clase haga lo que queramos, existen algunas restricciones.</para>
<orderedlist>
<listitem><para>Las clases de los complementos deben heredarse de la clase <constant>ThemeEngine</constant>.</para></listitem>
<listitem><para>Las clases de los complementos deben nombrarse de acuerdo con la regla: <classname>Tema+NombreExtension</classname>.</para></listitem>
<listitem><para>Las clases de los complementos deberían proporcionar una función <literal>static</literal> llamada <function>names</function> que devuelva una lista de nombres que puedan ser llamados.</para></listitem>
<listitem><para>Si el complemento puede configurarse en el módulo del centro de control, debería proporcionar una clase basada en <literal>ThemeEngineConfig</literal> para la configuración.</para></listitem>
<listitem><para>Las clases de los complementos pueden sobreescribir, al menos, las funciones virtuales <function>slotSetText</function>, <function>slotSetPixmap</function>, <function>slotUpdateProgress</function> y <function>slotUpdateSteps</function> para hacerlo utilizable.</para></listitem>
<listitem><para>El constructor debería tener la forma <literal>ThemeEngine( QWidget *parent, const char *name, const QStringList &args )</literal>, y por tanto, puede ser utilizado con <classname>KGenericFactory</classname>.</para></listitem>
</orderedlist>
<para>El último requisito puede parecer complicado, pero, como se verá posteriormente bastará con añadir una línea a sus archivos fuente, y que generalmente podrá ignorar.</para>
</sect1>
<sect1 id="headercode">
<title>Código para el archivo de cabecera</title>
<para>Proporciona las constantes, y veremos que el archivo de cabecera <filename>theme2k.h</filename> debería ser algo parecido a esto:</para>
<example>
<title>Listado de <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 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
</programlisting>
</example>
<para>Analicemos el listado anterior. La clase <classname>Theme2k</classname> cumple con la convención de nombres, y está heredada de <classname>ThemeEngine</classname>. Proporciona <methodname>Theme2k::names()</methodname>, y tiene un constructor que toma los parámetros requeridos: <function>Theme2k( QWidget *, const char *, const QStringList& );</function> y también proporciona un método simple <methodname>Theme2k::slotSetText()</methodname>. Por el momento no se preocupe de la clase <classname>RotWidget</classname>. Es un pequeño componente que proporcionará algo que le gustará al usuario. Nuestro complemento es muy simple y no muestra iconos en la barra de progreso. Si desea mostrar iconos, sobreescriba la función <function>slotSetPixmap</function>. Existen funciones similares para configurar los pasos de la barra de progreso (<function>slotUpdateSteps</function>) e incrementan el paso actual (<function>slotUpdateProgress</function>). </para>
</sect1>
<sect1 id="Implementation">
<title>Implementación del complemento</title>
<para>Sólo examinaremos las partes relevantes de la implementación. Para obtener la impletación completa, véa el apéndice. Lo primero que haremos es cargar la librería:</para>
<example>
<title>Librería requerida</title>
<programlisting>K_EXPORT_COMPONENT_FACTORY( ksplash2k, KGenericFactory<Theme2k> );K_EXPORT_COMPONENT_FACTORY( ksplash2k, KGenericFactory<Theme2k> );
</programlisting>
</example>
<para>La macro <constant>K_EXPORT_COMPONENT_FACTORY</constant> está declarada en <filename>kgenericfactory.h</filename>. ¡Ahora vamos con el constructor! Como esta es un complemento muy sencillo, el constructor es muy sencillo.</para>
<example>
<title>Constructor del complemento</title>
<programlisting>Theme2k::Theme2k( QWidget *parent, const char *name, const QStringList &args
)
:ThemeEngine( parent, name, args )
{
readSettings();
initUi();
}
</programlisting>
</example>
<para>El método <function>readSettings()</function> ilustra la forma de obtener la configuración de su tema (Desea que la gente utilice sus complementos ¿no es cierto?).</para>
<example>
<title>Obtener las configuraciones del tema</title>
<programlisting>void Theme2k::readSettings()
{
if( !mTheme )
return;
TDEConfig *cfg = mTheme->themeConfig();
if( !cfg )
return;
cfg->setGroup( QString("Tema KSplash: %1").arg(mTheme->theme()) );
QColor DefaultTBgColor( Qt::darkBlue );
QColor DefaultTFgColor( Qt::white );
mTBgColor = cfg->readColorEntry( "Color del fondo del título", &DefaultTBgColor );
mTFgColor = cfg->readColorEntry( "Color del primer plano del título", &DefaultTFgColor );
mStatusColor = cfg->readColorEntry("Status Text Color", &mTBgColor );
QColor DefaultRot1( Qt::darkBlue );
QColor DefaultRot2( Qt::cyan );
mRotColor1 = cfg->readColorEntry( "Color del rotator 1", &DefaultRot1 );
mRotColor2 = cfg->readColorEntry( "Color del rotador 2", &DefaultRot2 );
mRotSpeed = cfg->readNumEntry( "Velocidad de rotación", 30 );
mWndTitle = cfg->readEntry( "Título de la ventana", i18n("Por favor espere...") );
mLogoFile = cfg->readEntry( "Archivo de logotipo", QString::null );
}
</programlisting>
</example>
<para>Cómo deseamos que nuestros usuarios sean razonables proporcionaremos valores predeterminados adecuados a los parámetros que no existan en el archivo del tema. Tenga en cuenta que siempre debería configurar nuestro grupo con «KSplash Theme: nombretema» para hacerlo compatible con futuras especificaciones del tema. El método <function>initUI</function> no es muy interesante, y simplemente construye el componente. Por favor, véa el apéndice para obtener más detalles. </para>
</sect1>
<sect1 id="compilingfile">
<title>Compilar el complemento</title>
<para>Puesto que hemos decidido utilizar una estructura &kde; para compilar el complemento, necesitaremos crear un <filename>Makefile.am</filename>. Debería ser algo similar a:</para>
<example>
<title>Contenido de <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 obtener más información de cómo escribir archivos <filename>Makefile.am</filename> para &kde;, por favor vea el <ulink url="http://developer.kde.org/documentation/other/makefile_am_howto.html">sitio web de los desarrolladores de &kde;</ulink>. Lo único que debe tener en cuenta es proporcionar un tema predeterminado basado en este complemento y proporcionar una imagen para ella. Como muestra de cortesía hacia nuestros usuarios, debería proporcionar un archivo <filename>Theme.rc</filename> de ejemplo ilustrando el uso de las diferentes opciones.</para>
</sect1>
</chapter>
<chapter id="faq">
<title>Preguntas y respuestas</title>
&reporting.bugs; &updating.documentation; <qandaset id="faqlist">
<qandaentry>
<question>
<para>No puedo encontrar ningún tema que funcione en &ksplash; ¿Por qué?</para>
</question>
<answer>
<para>Probablemente no tenga los complementos correctos para el tema. Los complementos se encuentran en el paquete <literal>kde-artwork</literal>. Descárguelo, instálelo e inténtelo de nuevo.</para>
</answer>
</qandaentry>
<qandaentry>
<question>
<para>¿Qué es el archivo <filename>Theme.rc</filename> y cómo puedo hacer uno?¿Qué es el archivo <filename>Theme.rc</filename> y cómo puedo hacer uno?</para>
</question>
<answer>
<para><filename>Theme.rc</filename> es el archivo en el que puede especificar una configuración del tema. Para obtener más información, eche un vistazo a <link linkend="themes">Cómo hacer temas para &ksplash;</link>. </para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<chapter id="credits">
<title>Créditos y licencia</title>
<para>&ksplash;</para>
<para>Derechos de autor del programa © 2003 &Ravikiran.Rajagopal; &Ravikiran.Rajagopal.mail;.</para>
<itemizedlist>
<title>Contribuciones</title>
<listitem><para>&Brian.C.Ledbetter; &Brian.C.Ledbetter.mail;.</para>
</listitem>
</itemizedlist>
<para>Derechos de autor de la documentación © 2003 &Teemu.Rytilahti; &Teemu.Rytilahti.mail;.</para>
&underFDL; &underGPL; </chapter>
<appendix id="installation">
<title>Instalación</title>
<sect1 id="requirements">
<title>Requisitos</title>
<para>Para utilizar &ksplash;, necesita &kde; 3.2 o superior. Algunos temas puede requerir también complementos adicionales. Si un tema no funciona, contacte con su autor para pedirle información.</para>
</sect1>
<sect1 id="compilation">
<title>Compilación e instalación</title>
&install.compile.documentation; </sect1>
</appendix>
<appendix id="srccode">
<title>Código fuente</title>
<sect1 id="theme2kcpp">
<title>Listado de <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( "Color del rotador 1", &DefaultRot1 );
mRotColor2 = cfg->readColorEntry( "Color del rotador 2", &DefaultRot2 );
mRotSpeed = cfg->readNumEntry( "Velocidad del rotador", 30 );
mWndTitle = cfg->readEntry( "Ventana del título", i18n("Por favor, espere...") );
mLogoFile = cfg->readEntry( "Archivo de logotipo", QString::null );
}
</programlisting>
</sect1>
<sect1 id="rotwidgeth">
<title>Listado de <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 Muestra un gradiente girando.
*/
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>Listado de <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()
{
// Esto es ineficaz dado que creamos demasiados mapas de imagen, a optimizar después.
m_step += m_speed;
if( m_step > width() )
m_step = 0;
repaint( true );
}
// por hacer. Optimizar el dibujado.
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;
// Dibujaremos explícitamente nuestro primer punto. El resto lo hará bitBlt().
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>
<!--
Local Variables:
mode: xml
sgml-minimize-attributes:nil
sgml-general-insert-case:lower
sgml-indent-step:0
sgml-indent-data:nil
End:
vim:tabstop=2:shiftwidth=2:expandtab
-->
|