summaryrefslogtreecommitdiffstats
path: root/libkdegames
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-06 15:56:37 -0600
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-11-06 15:56:37 -0600
commit14c49c4f56792a934bcdc4efceebbd429d858571 (patch)
tree2f302410d5a5d678bf3ff10edead70d348be6644 /libkdegames
parentab0981b9689e4d3ad88e9572bfa4b4a5e36c51ae (diff)
downloadtdegames-14c49c4f56792a934bcdc4efceebbd429d858571.tar.gz
tdegames-14c49c4f56792a934bcdc4efceebbd429d858571.zip
Actually move the kde files that were renamed in the last commit
Diffstat (limited to 'libkdegames')
-rw-r--r--libkdegames/Makefile.am23
-rw-r--r--libkdegames/README25
-rw-r--r--libkdegames/TODO10
-rw-r--r--libkdegames/carddecks/Makefile.am24
-rw-r--r--libkdegames/carddecks/README12
-rw-r--r--libkdegames/carddecks/cards-aisleriot/1.pngbin1261 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/10.pngbin1933 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/11.pngbin2422 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/12.pngbin2387 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/13.pngbin1966 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/14.pngbin1794 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/15.pngbin2368 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/16.pngbin2343 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/17.pngbin2790 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/18.pngbin2092 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/19.pngbin2597 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/2.pngbin1125 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/20.pngbin2465 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/21.pngbin2503 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/22.pngbin1888 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/23.pngbin2470 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/24.pngbin2258 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/25.pngbin2063 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/26.pngbin1845 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/27.pngbin2226 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/28.pngbin2144 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/29.pngbin1980 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/3.pngbin1505 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/30.pngbin1788 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/31.pngbin2091 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/32.pngbin2097 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/33.pngbin1810 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/34.pngbin1685 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/35.pngbin1917 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/36.pngbin2006 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/37.pngbin1654 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/38.pngbin1737 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/39.pngbin2014 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/4.pngbin1559 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/40.pngbin1885 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/41.pngbin1449 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/42.pngbin1577 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/43.pngbin1798 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/44.pngbin1763 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/45.pngbin1619 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/46.pngbin1334 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/47.pngbin1768 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/48.pngbin1738 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/49.pngbin1312 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/5.pngbin2129 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/50.pngbin1126 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/51.pngbin1570 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/52.pngbin1584 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/6.pngbin1877 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/7.pngbin2403 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/8.pngbin2359 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/9.pngbin2143 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-aisleriot/COPYRIGHT10
-rw-r--r--libkdegames/carddecks/cards-aisleriot/index.desktop20
-rw-r--r--libkdegames/carddecks/cards-default/1.pngbin266 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/10.pngbin1002 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/11.pngbin1048 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/12.pngbin1028 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/13.pngbin952 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/14.pngbin924 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/15.pngbin940 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/16.pngbin896 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/17.pngbin415 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/18.pngbin425 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/19.pngbin451 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/2.pngbin418 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/20.pngbin415 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/21.pngbin403 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/22.pngbin410 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/23.pngbin441 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/24.pngbin400 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/25.pngbin349 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/26.pngbin367 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/27.pngbin395 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/28.pngbin395 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/29.pngbin361 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/3.pngbin303 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/30.pngbin373 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/31.pngbin414 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/32.pngbin373 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/33.pngbin336 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/34.pngbin356 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/35.pngbin388 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/36.pngbin357 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/37.pngbin347 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/38.pngbin367 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/39.pngbin395 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/4.pngbin290 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/40.pngbin368 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/41.pngbin308 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/42.pngbin321 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/43.pngbin346 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/44.pngbin332 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/45.pngbin321 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/46.pngbin326 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/47.pngbin361 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/48.pngbin342 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/49.pngbin300 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/5.pngbin890 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/50.pngbin304 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/51.pngbin333 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/52.pngbin314 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/6.pngbin911 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/7.pngbin1062 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/8.pngbin988 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/9.pngbin1064 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-default/index.desktop115
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/1.pngbin7122 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/10.pngbin6497 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/11.pngbin6381 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/12.pngbin6476 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/13.pngbin6642 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/14.pngbin6278 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/15.pngbin6542 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/16.pngbin6523 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/17.pngbin5118 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/18.pngbin5137 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/19.pngbin5239 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/2.pngbin7128 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/20.pngbin4894 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/21.pngbin4898 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/22.pngbin4867 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/23.pngbin5015 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/24.pngbin4677 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/25.pngbin4964 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/26.pngbin5025 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/27.pngbin4944 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/28.pngbin4820 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/29.pngbin4772 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/3.pngbin6723 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/30.pngbin4844 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/31.pngbin4757 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/32.pngbin4662 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/33.pngbin4607 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/34.pngbin4670 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/35.pngbin4584 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/36.pngbin4501 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/37.pngbin4411 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/38.pngbin4481 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/39.pngbin4410 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/4.pngbin6842 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/40.pngbin4315 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/41.pngbin4220 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/42.pngbin4294 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/43.pngbin4239 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/44.pngbin4185 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/45.pngbin4071 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/46.pngbin4118 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/47.pngbin4075 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/48.pngbin4044 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/49.pngbin3886 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/5.pngbin6779 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/50.pngbin3922 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/51.pngbin3892 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/52.pngbin3866 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/6.pngbin6679 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/7.pngbin6638 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/8.pngbin6642 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/9.pngbin6644 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT12
-rw-r--r--libkdegames/carddecks/cards-dondorf-whist-b/index.desktop17
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/1.pngbin1430 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/10.pngbin4774 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/11.pngbin4670 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/12.pngbin4746 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/13.pngbin4573 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/14.pngbin4580 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/15.pngbin4546 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/16.pngbin4636 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/17.pngbin2402 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/18.pngbin2276 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/19.pngbin2614 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/2.pngbin1408 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/20.pngbin2599 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/21.pngbin2397 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/22.pngbin2293 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/23.pngbin2626 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/24.pngbin2489 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/25.pngbin2227 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/26.pngbin2126 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/27.pngbin2434 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/28.pngbin2253 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/29.pngbin2352 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/3.pngbin1765 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/30.pngbin2204 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/31.pngbin2571 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/32.pngbin2385 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/33.pngbin2152 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/34.pngbin2049 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/35.pngbin2410 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/36.pngbin2251 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/37.pngbin2076 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/38.pngbin1994 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/39.pngbin2367 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/4.pngbin1679 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/40.pngbin2256 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/41.pngbin1870 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/42.pngbin1811 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/43.pngbin2160 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/44.pngbin2131 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/45.pngbin1891 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/46.pngbin1792 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/47.pngbin2191 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/48.pngbin2122 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/49.pngbin1701 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/5.pngbin5611 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/50.pngbin1642 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/51.pngbin2007 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/52.pngbin1989 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/6.pngbin5516 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/7.pngbin5609 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/8.pngbin5592 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/9.pngbin4594 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT13
-rw-r--r--libkdegames/carddecks/cards-gdkcard-bonded/index.desktop37
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/1.pngbin4371 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/10.pngbin4732 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/11.pngbin4488 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/12.pngbin4071 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/13.pngbin3948 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/14.pngbin4105 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/15.pngbin3901 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/16.pngbin3426 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/17.pngbin4134 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/18.pngbin4038 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/19.pngbin4732 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/2.pngbin4013 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/20.pngbin4147 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/21.pngbin4124 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/22.pngbin3459 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/23.pngbin4192 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/24.pngbin3610 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/25.pngbin5800 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/26.pngbin5042 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/27.pngbin4679 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/28.pngbin3785 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/29.pngbin4283 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/3.pngbin3626 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/30.pngbin4421 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/31.pngbin5930 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/32.pngbin5315 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/33.pngbin4687 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/34.pngbin4656 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/35.pngbin4573 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/36.pngbin4321 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/37.pngbin4132 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/38.pngbin3717 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/39.pngbin4222 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/4.pngbin3477 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/40.pngbin4219 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/41.pngbin3946 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/42.pngbin4477 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/43.pngbin3823 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/44.pngbin4917 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/45.pngbin3913 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/46.pngbin4945 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/47.pngbin5243 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/48.pngbin4677 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/49.pngbin5234 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/5.pngbin3864 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/50.pngbin4871 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/51.pngbin4339 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/52.pngbin3983 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/6.pngbin4269 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/7.pngbin4432 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/8.pngbin4201 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/9.pngbin5048 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/COPYRIGHT14
-rw-r--r--libkdegames/carddecks/cards-hard-a-port/index.desktop29
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/1.pngbin4366 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/10.pngbin4986 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/11.pngbin4978 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/12.pngbin4982 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/13.pngbin4420 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/14.pngbin4434 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/15.pngbin4282 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/16.pngbin4310 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/17.pngbin4112 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/18.pngbin4114 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/19.pngbin4125 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/2.pngbin4815 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/20.pngbin4116 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/21.pngbin4088 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/22.pngbin4066 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/23.pngbin4068 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/24.pngbin4081 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/25.pngbin4127 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/26.pngbin4126 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/27.pngbin4081 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/28.pngbin4153 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/29.pngbin4202 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/3.pngbin4328 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/30.pngbin4174 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/31.pngbin4193 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/32.pngbin4151 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/33.pngbin4251 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/34.pngbin4215 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/35.pngbin4256 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/36.pngbin4213 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/37.pngbin4294 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/38.pngbin4282 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/39.pngbin4275 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/4.pngbin4297 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/40.pngbin4228 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/41.pngbin4347 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/42.pngbin4329 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/43.pngbin4341 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/44.pngbin4252 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/45.pngbin4273 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/46.pngbin4228 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/47.pngbin4309 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/48.pngbin4105 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/49.pngbin4327 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/5.pngbin4959 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/50.pngbin4024 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/51.pngbin4031 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/52.pngbin3897 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/6.pngbin4973 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/7.pngbin4830 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/8.pngbin4896 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/9.pngbin4952 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-konqi-modern/index.desktop62
-rw-r--r--libkdegames/carddecks/cards-penguins/1.pngbin1869 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/10.pngbin2801 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/11.pngbin3040 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/12.pngbin2981 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/13.pngbin2161 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/14.pngbin2069 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/15.pngbin2367 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/16.pngbin2274 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/17.pngbin2416 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/18.pngbin2134 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/19.pngbin2381 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/2.pngbin3191 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/20.pngbin2212 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/21.pngbin2330 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/22.pngbin2056 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/23.pngbin2254 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/24.pngbin2035 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/25.pngbin2229 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/26.pngbin1989 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/27.pngbin2140 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/28.pngbin2005 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/29.pngbin2213 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/3.pngbin1739 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/30.pngbin1977 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/31.pngbin2111 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/32.pngbin1872 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/33.pngbin2077 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/34.pngbin1889 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/35.pngbin1991 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/36.pngbin1786 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/37.pngbin1918 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/38.pngbin1762 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/39.pngbin1879 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/4.pngbin1523 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/40.pngbin1741 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/41.pngbin1668 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/42.pngbin1536 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/43.pngbin1640 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/44.pngbin1523 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/45.pngbin1672 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/46.pngbin1563 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/47.pngbin1685 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/48.pngbin1571 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/49.pngbin1432 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/5.pngbin2781 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/50.pngbin1329 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/51.pngbin1462 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/52.pngbin1390 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/6.pngbin2699 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/7.pngbin2923 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/8.pngbin2866 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/9.pngbin2894 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-penguins/COPYRIGHT10
-rw-r--r--libkdegames/carddecks/cards-penguins/index.desktop67
-rw-r--r--libkdegames/carddecks/cards-spaced/1.pngbin5992 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/10.pngbin5927 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/11.pngbin5976 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/12.pngbin6113 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/13.pngbin5973 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/14.pngbin6036 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/15.pngbin5965 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/16.pngbin5621 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/17.pngbin6906 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/18.pngbin6794 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/19.pngbin6863 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/2.pngbin6041 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/20.pngbin6711 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/21.pngbin6800 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/22.pngbin6749 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/23.pngbin6883 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/24.pngbin6635 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/25.pngbin6736 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/26.pngbin6698 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/27.pngbin6778 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/28.pngbin6515 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/29.pngbin6675 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/3.pngbin6057 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/30.pngbin6594 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/31.pngbin6760 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/32.pngbin6506 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/33.pngbin6554 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/34.pngbin6520 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/35.pngbin6716 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/36.pngbin6444 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/37.pngbin6500 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/38.pngbin6448 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/39.pngbin6636 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/4.pngbin5898 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/40.pngbin6317 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/41.pngbin6381 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/42.pngbin6333 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/43.pngbin6515 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/44.pngbin6247 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/45.pngbin6281 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/46.pngbin6259 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/47.pngbin6378 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/48.pngbin6147 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/49.pngbin6156 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/5.pngbin5995 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/50.pngbin6132 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/51.pngbin6243 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/52.pngbin6043 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/6.pngbin6069 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/7.pngbin5927 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/8.pngbin5866 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/9.pngbin6014 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-spaced/COPYRIGHT16
-rw-r--r--libkdegames/carddecks/cards-spaced/index.desktop46
-rw-r--r--libkdegames/carddecks/cards-warwick/0.pngbin1606 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/1.pngbin500 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/10.pngbin1535 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/105.pngbin844 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/106.pngbin860 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/107.pngbin853 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/108.pngbin793 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/109.pngbin848 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/11.pngbin1553 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/110.pngbin868 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/111.pngbin856 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/112.pngbin773 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/113.pngbin746 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/114.pngbin778 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/115.pngbin771 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/116.pngbin663 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/12.pngbin1500 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/13.pngbin1444 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/14.pngbin1408 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/15.pngbin1452 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/16.pngbin1356 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/17.pngbin756 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/18.pngbin789 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/19.pngbin788 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/2.pngbin500 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/20.pngbin715 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/21.pngbin756 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/22.pngbin776 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/23.pngbin782 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/24.pngbin684 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/25.pngbin761 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/26.pngbin789 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/27.pngbin800 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/28.pngbin673 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/29.pngbin696 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/3.pngbin524 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/30.pngbin722 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/31.pngbin732 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/32.pngbin640 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/33.pngbin636 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/34.pngbin656 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/35.pngbin661 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/36.pngbin607 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/37.pngbin698 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/38.pngbin720 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/39.pngbin730 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/4.pngbin477 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/40.pngbin651 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/41.pngbin593 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/42.pngbin605 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/43.pngbin607 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/44.pngbin562 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/45.pngbin593 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/46.pngbin600 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/47.pngbin627 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/48.pngbin570 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/49.pngbin571 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/5.pngbin1517 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/50.pngbin572 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/51.pngbin591 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/52.pngbin543 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/6.pngbin1477 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/7.pngbin1536 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/8.pngbin1451 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/9.pngbin1617 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-warwick/index.desktop126
-rw-r--r--libkdegames/carddecks/cards-xskat-french/1.pngbin2525 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/10.pngbin11981 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/11.pngbin11495 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/12.pngbin11508 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/13.pngbin14544 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/14.pngbin13192 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/15.pngbin12722 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/16.pngbin12880 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/17.pngbin5891 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/18.pngbin4439 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/19.pngbin3308 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/2.pngbin2244 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/20.pngbin3016 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/21.pngbin5372 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/22.pngbin4037 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/23.pngbin3080 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/24.pngbin2786 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/25.pngbin5005 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/26.pngbin3925 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/27.pngbin2879 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/28.pngbin2777 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/29.pngbin4537 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/3.pngbin1928 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/30.pngbin3505 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/31.pngbin2647 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/32.pngbin2538 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/33.pngbin4139 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/34.pngbin3287 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/35.pngbin2402 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/36.pngbin2227 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/37.pngbin4228 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/38.pngbin3234 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/39.pngbin2528 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/4.pngbin1881 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/40.pngbin2437 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/41.pngbin3653 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/42.pngbin2841 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/43.pngbin2227 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/44.pngbin2123 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/45.pngbin3384 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/46.pngbin2888 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/47.pngbin2382 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/48.pngbin2295 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/49.pngbin2894 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/5.pngbin14410 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/50.pngbin2411 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/51.pngbin2159 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/52.pngbin2043 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/6.pngbin13796 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/7.pngbin13434 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/8.pngbin13344 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/9.pngbin12558 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-french/COPYRIGHT8
-rw-r--r--libkdegames/carddecks/cards-xskat-french/index.desktop55
-rw-r--r--libkdegames/carddecks/cards-xskat-german/1.pngbin3915 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/10.pngbin10814 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/11.pngbin10506 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/12.pngbin11304 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/13.pngbin12477 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/14.pngbin12487 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/15.pngbin12450 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/16.pngbin12614 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/17.pngbin7191 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/18.pngbin7804 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/19.pngbin6331 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/2.pngbin3618 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/20.pngbin7794 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/21.pngbin6694 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/22.pngbin7311 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/23.pngbin5828 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/24.pngbin7572 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/25.pngbin6612 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/26.pngbin7207 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/27.pngbin5627 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/28.pngbin6886 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/29.pngbin6141 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/3.pngbin3816 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/30.pngbin6695 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/31.pngbin5139 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/32.pngbin6181 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/33.pngbin5857 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/34.pngbin6473 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/35.pngbin4789 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/36.pngbin5734 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/37.pngbin5485 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/38.pngbin6006 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/39.pngbin4422 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/4.pngbin3891 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/40.pngbin5223 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/41.pngbin5148 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/42.pngbin5651 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/43.pngbin3821 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/44.pngbin4167 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/45.pngbin4642 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/46.pngbin5223 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/47.pngbin3355 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/48.pngbin3761 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/49.pngbin4505 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/5.pngbin13831 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/50.pngbin4802 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/51.pngbin2589 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/52.pngbin2548 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/6.pngbin14126 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/7.pngbin13910 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/8.pngbin14673 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/9.pngbin10522 -> 0 bytes
-rw-r--r--libkdegames/carddecks/cards-xskat-german/COPYRIGHT8
-rw-r--r--libkdegames/carddecks/cards-xskat-german/index.desktop55
-rwxr-xr-xlibkdegames/carddecks/convertpysols69
-rw-r--r--libkdegames/carddecks/decks/deck0.desktop113
-rw-r--r--libkdegames/carddecks/decks/deck0.pngbin4918 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck1.desktop56
-rw-r--r--libkdegames/carddecks/decks/deck1.pngbin4941 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck10.desktop66
-rw-r--r--libkdegames/carddecks/decks/deck10.pngbin950 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck11.desktop66
-rw-r--r--libkdegames/carddecks/decks/deck11.pngbin950 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck12.desktop41
-rw-r--r--libkdegames/carddecks/decks/deck12.pngbin6389 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck13.desktop63
-rw-r--r--libkdegames/carddecks/decks/deck13.pngbin4296 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck14.desktop66
-rw-r--r--libkdegames/carddecks/decks/deck14.pngbin2776 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck15.desktop19
-rw-r--r--libkdegames/carddecks/decks/deck15.pngbin2627 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck16.desktop60
-rw-r--r--libkdegames/carddecks/decks/deck16.pngbin406 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck17.desktop65
-rw-r--r--libkdegames/carddecks/decks/deck17.pngbin277 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck18.desktop19
-rw-r--r--libkdegames/carddecks/decks/deck18.pngbin5217 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck19.desktop63
-rw-r--r--libkdegames/carddecks/decks/deck19.pngbin5602 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck2.desktop49
-rw-r--r--libkdegames/carddecks/decks/deck2.pngbin5416 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck20.desktop71
-rw-r--r--libkdegames/carddecks/decks/deck20.pngbin6011 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck21.desktop65
-rw-r--r--libkdegames/carddecks/decks/deck21.pngbin6333 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck22.desktop58
-rw-r--r--libkdegames/carddecks/decks/deck22.pngbin6192 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck23.desktop55
-rw-r--r--libkdegames/carddecks/decks/deck23.pngbin5964 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck24.desktop60
-rw-r--r--libkdegames/carddecks/decks/deck24.pngbin4885 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck3.desktop60
-rw-r--r--libkdegames/carddecks/decks/deck3.pngbin6162 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck4.desktop93
-rw-r--r--libkdegames/carddecks/decks/deck4.pngbin6355 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck5.desktop67
-rw-r--r--libkdegames/carddecks/decks/deck5.pngbin4133 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck6.desktop66
-rw-r--r--libkdegames/carddecks/decks/deck6.pngbin4067 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck7.desktop67
-rw-r--r--libkdegames/carddecks/decks/deck7.pngbin3464 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck8.desktop67
-rw-r--r--libkdegames/carddecks/decks/deck8.pngbin3780 -> 0 bytes
-rw-r--r--libkdegames/carddecks/decks/deck9.desktop7
-rw-r--r--libkdegames/carddecks/decks/deck9.pngbin1019 -> 0 bytes
-rw-r--r--libkdegames/configure.in.in49
-rw-r--r--libkdegames/highscore/INSTALL12
-rw-r--r--libkdegames/highscore/Makefile.am19
-rw-r--r--libkdegames/highscore/kconfigrawbackend.cpp62
-rw-r--r--libkdegames/highscore/kconfigrawbackend.h58
-rw-r--r--libkdegames/highscore/kexthighscore.cpp289
-rw-r--r--libkdegames/highscore/kexthighscore.h367
-rw-r--r--libkdegames/highscore/kexthighscore_gui.cpp552
-rw-r--r--libkdegames/highscore/kexthighscore_gui.h215
-rw-r--r--libkdegames/highscore/kexthighscore_internal.cpp868
-rw-r--r--libkdegames/highscore/kexthighscore_internal.h277
-rw-r--r--libkdegames/highscore/kexthighscore_item.cpp312
-rw-r--r--libkdegames/highscore/kexthighscore_item.h317
-rw-r--r--libkdegames/highscore/kexthighscore_tab.cpp281
-rw-r--r--libkdegames/highscore/kexthighscore_tab.h121
-rw-r--r--libkdegames/highscore/kfilelock.cpp88
-rw-r--r--libkdegames/highscore/kfilelock.h53
-rw-r--r--libkdegames/highscore/khighscore.cpp262
-rw-r--r--libkdegames/highscore/khighscore.h312
-rw-r--r--libkdegames/highscore/kscoredialog.cpp411
-rw-r--r--libkdegames/highscore/kscoredialog.h126
-rw-r--r--libkdegames/kcanvasrootpixmap.cpp39
-rw-r--r--libkdegames/kcanvasrootpixmap.h62
-rw-r--r--libkdegames/kcarddialog.cpp808
-rw-r--r--libkdegames/kcarddialog.h346
-rw-r--r--libkdegames/kcarddialog.pngbin34451 -> 0 bytes
-rw-r--r--libkdegames/kchat.cpp115
-rw-r--r--libkdegames/kchat.h148
-rw-r--r--libkdegames/kchatbase.cpp530
-rw-r--r--libkdegames/kchatbase.h511
-rw-r--r--libkdegames/kchatdialog.cpp253
-rw-r--r--libkdegames/kchatdialog.h120
-rw-r--r--libkdegames/kgame/COMPAT55
-rw-r--r--libkdegames/kgame/DESIGN407
-rw-r--r--libkdegames/kgame/Makefile.am29
-rw-r--r--libkdegames/kgame/README.LIB12
-rw-r--r--libkdegames/kgame/TODO41
-rw-r--r--libkdegames/kgame/dialogs/Makefile.am17
-rw-r--r--libkdegames/kgame/dialogs/kgameconnectdialog.cpp278
-rw-r--r--libkdegames/kgame/dialogs/kgameconnectdialog.h171
-rw-r--r--libkdegames/kgame/dialogs/kgamedebugdialog.cpp548
-rw-r--r--libkdegames/kgame/dialogs/kgamedebugdialog.h150
-rw-r--r--libkdegames/kgame/dialogs/kgamedialog.cpp347
-rw-r--r--libkdegames/kgame/dialogs/kgamedialog.h321
-rw-r--r--libkdegames/kgame/dialogs/kgamedialogconfig.cpp773
-rw-r--r--libkdegames/kgame/dialogs/kgamedialogconfig.h368
-rw-r--r--libkdegames/kgame/dialogs/kgameerrordialog.cpp129
-rw-r--r--libkdegames/kgame/dialogs/kgameerrordialog.h115
-rw-r--r--libkdegames/kgame/kgame.cpp1475
-rw-r--r--libkdegames/kgame/kgame.h933
-rw-r--r--libkdegames/kgame/kgamechat.cpp341
-rw-r--r--libkdegames/kgame/kgamechat.h224
-rw-r--r--libkdegames/kgame/kgameerror.cpp80
-rw-r--r--libkdegames/kgame/kgameerror.h59
-rw-r--r--libkdegames/kgame/kgameio.cpp539
-rw-r--r--libkdegames/kgame/kgameio.h571
-rw-r--r--libkdegames/kgame/kgamemessage.cpp156
-rw-r--r--libkdegames/kgame/kgamemessage.h173
-rw-r--r--libkdegames/kgame/kgamenetwork.cpp516
-rw-r--r--libkdegames/kgame/kgamenetwork.h432
-rw-r--r--libkdegames/kgame/kgameprocess.cpp158
-rw-r--r--libkdegames/kgame/kgameprocess.h243
-rw-r--r--libkdegames/kgame/kgameproperty.cpp211
-rw-r--r--libkdegames/kgame/kgameproperty.h848
-rw-r--r--libkdegames/kgame/kgamepropertyarray.h309
-rw-r--r--libkdegames/kgame/kgamepropertyhandler.cpp407
-rw-r--r--libkdegames/kgame/kgamepropertyhandler.h354
-rw-r--r--libkdegames/kgame/kgamepropertylist.h258
-rw-r--r--libkdegames/kgame/kgamesequence.cpp125
-rw-r--r--libkdegames/kgame/kgamesequence.h88
-rw-r--r--libkdegames/kgame/kgameversion.h54
-rw-r--r--libkdegames/kgame/kmessageclient.cpp373
-rw-r--r--libkdegames/kgame/kmessageclient.h423
-rw-r--r--libkdegames/kgame/kmessageio.cpp482
-rw-r--r--libkdegames/kgame/kmessageio.h421
-rw-r--r--libkdegames/kgame/kmessageserver.cpp515
-rw-r--r--libkdegames/kgame/kmessageserver.h494
-rw-r--r--libkdegames/kgame/kmessageserver.pngbin7791 -> 0 bytes
-rw-r--r--libkdegames/kgame/kplayer.cpp446
-rw-r--r--libkdegames/kgame/kplayer.h472
-rw-r--r--libkdegames/kgame/libkdegames.html187
-rw-r--r--libkdegames/kgame/messages.txt93
-rw-r--r--libkdegames/kgame/scenario0.pngbin2413 -> 0 bytes
-rw-r--r--libkdegames/kgame/scenario1.pngbin8074 -> 0 bytes
-rw-r--r--libkdegames/kgame/scenario2.pngbin7398 -> 0 bytes
-rw-r--r--libkdegames/kgamelcd.cpp250
-rw-r--r--libkdegames/kgamelcd.h252
-rw-r--r--libkdegames/kgamemisc.cpp62
-rw-r--r--libkdegames/kgamemisc.h45
-rw-r--r--libkdegames/kgameprogress.cpp345
-rw-r--r--libkdegames/kgameprogress.h256
-rw-r--r--libkdegames/kgrid2d.h520
-rw-r--r--libkdegames/kstdgameaction.cpp209
-rw-r--r--libkdegames/kstdgameaction.h261
-rw-r--r--libkdegames/pics/Makefile.am4
-rw-r--r--libkdegames/pics/cr16-action-endturn.pngbin364 -> 0 bytes
-rw-r--r--libkdegames/pics/cr16-action-highscore.pngbin493 -> 0 bytes
-rw-r--r--libkdegames/pics/cr16-action-roll.pngbin988 -> 0 bytes
-rw-r--r--libkdegames/pics/cr22-action-roll.pngbin1284 -> 0 bytes
-rw-r--r--libkdegames/pics/cr32-action-endturn.pngbin751 -> 0 bytes
-rw-r--r--libkdegames/pics/cr32-action-highscore.pngbin2440 -> 0 bytes
-rw-r--r--libkdegames/pics/cr32-action-roll.pngbin2235 -> 0 bytes
-rw-r--r--libkdegames/pics/star.pngbin1103 -> 0 bytes
763 files changed, 0 insertions, 28773 deletions
diff --git a/libkdegames/Makefile.am b/libkdegames/Makefile.am
deleted file mode 100644
index aedac6ae..00000000
--- a/libkdegames/Makefile.am
+++ /dev/null
@@ -1,23 +0,0 @@
-
-lib_LTLIBRARIES = libtdegames.la
-libtdegames_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -no-undefined -version-info 3:0:2
-libtdegames_la_LIBADD = highscore/libkhighscore.la kgame/libkgame.la kgame/dialogs/libkgamedialogs.la \
- $(LIB_KSYCOCA) $(LIB_KDNSSD)
-
-libtdegames_la_SOURCES = kcarddialog.cpp kstdgameaction.cpp \
- kgamemisc.cpp kchatbase.cpp kchat.cpp \
- kchatdialog.cpp kgameprogress.cpp \
- kcanvasrootpixmap.cpp kgamelcd.cpp
-include_HEADERS = kgamemisc.h kcarddialog.h kstdgameaction.h \
- kchatbase.h kchat.h kchatdialog.h \
- kgameprogress.h kcanvasrootpixmap.h kgamelcd.h kgrid2d.h
-
-INCLUDES = $(all_includes)
-METASOURCES = AUTO
-
-SUBDIRS = carddecks highscore kgame pics
-
-messages:
- $(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot
-
-include ../admin/Doxyfile.am
diff --git a/libkdegames/README b/libkdegames/README
deleted file mode 100644
index b96c1772..00000000
--- a/libkdegames/README
+++ /dev/null
@@ -1,25 +0,0 @@
-This directory contains the library for the tdegames packege.
-It is a collection of functions used by some games or which
-are useful for other games.
-
-Packagers note: it is recommended to put the directory "carddecks" into a separate
-package, as not all games using libtdegames use the carddecks as well.
-
-Contents:
- kcarddialog: Access to carddeck selection and administration
- for cardgames
- kstdgameaction: just like kstdaction this provides some default action for
- kde games. games often use different entries than other apps
- (like "game" instead of "file"), so use this if possible
- kgamemisc: some static method i didn't know a good class name for. it
- currently features "randomName()" which will just give you a random name from
- a list (translators note: happy translating ;) i copied kde-common/accounts
- for this so there are nearly 300 entries...)
- kgame: this is a complete network/game handling library. it constists of a lot
- of classes which are explained in the kgame docu (as soon as it is
- written)
-if you use libtdegames in your game please also add
-KGlobal::locale()->insertCatalogue("libtdegames");
-to main()
-This will add libtdegames.pot to your game and therefore all libtdegames
-strings get translated.
diff --git a/libkdegames/TODO b/libkdegames/TODO
deleted file mode 100644
index 136c4fdd..00000000
--- a/libkdegames/TODO
+++ /dev/null
@@ -1,10 +0,0 @@
-- 17.04.2001: change version number of the kdenonbeta one
-- 10.07.2001: scaling has been added to KCard and KCardDialog. Find out if there
- is a memory leak!!
-- 10.07.2001: better layout for the resize box
-- 10.07.2001: global decks/carddirs need extensive testing
-
--These pertain to the highscore widget
-The Ok button when adding a name should be enabled when the lineedit is filled with a QString of length() > 0
-
-The lineedit by default should come up with the user name that is loged in.
diff --git a/libkdegames/carddecks/Makefile.am b/libkdegames/carddecks/Makefile.am
deleted file mode 100644
index 8effea93..00000000
--- a/libkdegames/carddecks/Makefile.am
+++ /dev/null
@@ -1,24 +0,0 @@
-DECKDIRS = cards-aisleriot cards-dondorf-whist-b cards-gdkcard-bonded cards-hard-a-port \
- cards-penguins cards-spaced cards-xskat-french cards-default decks cards-konqi-modern cards-warwick cards-xskat-german
-
-deckdir = $(kde_datadir)/carddecks
-
-uninstall-local:
- rm -rf $(DESTDIR)$(deckdir)
-
-install-data-local:
- @$(mkinstalldirs) $(DESTDIR)$(deckdir)
- @for i in $(DECKDIRS); do \
- if test -d $(DESTDIR)$(deckdir)/$$i; then \
- echo "refreshing and removing $$i" ;\
- rm -rf $(DESTDIR)$(deckdir)/$$i;\
- fi ;\
- echo "installing $$i" ;\
- mkdir $(DESTDIR)$(deckdir)/$$i ;\
- files=`cd $(srcdir)/$$i && ls -1d *` ;\
- for f in $$files; do \
- if test -f $(srcdir)/$$i/$$f; then \
- $(INSTALL_DATA) $(srcdir)/$$i/$$f $(DESTDIR)$(deckdir)/$$i/$$f ;\
- fi \
- done \
- done
diff --git a/libkdegames/carddecks/README b/libkdegames/carddecks/README
deleted file mode 100644
index bfac9f0d..00000000
--- a/libkdegames/carddecks/README
+++ /dev/null
@@ -1,12 +0,0 @@
-This directory contains all carddecks for KDE cardgames.
-
-The backsides of the cards are stored as PNG images in
-the directory decks as deck0.png, deck1.png, ...
-
-The cardsets with 52 cards are stored in the directories
-cards1,cards2,cards3,... where each directory contains 52
-PNG images of the cards labels 1.png,2.png,...52.png
-
-Access to these cards works by using the kcardialog library
-in libtdegames. See for documentation there.
-
diff --git a/libkdegames/carddecks/cards-aisleriot/1.png b/libkdegames/carddecks/cards-aisleriot/1.png
deleted file mode 100644
index d08a67d8..00000000
--- a/libkdegames/carddecks/cards-aisleriot/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/10.png b/libkdegames/carddecks/cards-aisleriot/10.png
deleted file mode 100644
index f9f00749..00000000
--- a/libkdegames/carddecks/cards-aisleriot/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/11.png b/libkdegames/carddecks/cards-aisleriot/11.png
deleted file mode 100644
index 036807ec..00000000
--- a/libkdegames/carddecks/cards-aisleriot/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/12.png b/libkdegames/carddecks/cards-aisleriot/12.png
deleted file mode 100644
index 2945ea93..00000000
--- a/libkdegames/carddecks/cards-aisleriot/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/13.png b/libkdegames/carddecks/cards-aisleriot/13.png
deleted file mode 100644
index 86ac688c..00000000
--- a/libkdegames/carddecks/cards-aisleriot/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/14.png b/libkdegames/carddecks/cards-aisleriot/14.png
deleted file mode 100644
index e5b64e0f..00000000
--- a/libkdegames/carddecks/cards-aisleriot/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/15.png b/libkdegames/carddecks/cards-aisleriot/15.png
deleted file mode 100644
index 3522414c..00000000
--- a/libkdegames/carddecks/cards-aisleriot/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/16.png b/libkdegames/carddecks/cards-aisleriot/16.png
deleted file mode 100644
index 098a50f4..00000000
--- a/libkdegames/carddecks/cards-aisleriot/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/17.png b/libkdegames/carddecks/cards-aisleriot/17.png
deleted file mode 100644
index a4abb694..00000000
--- a/libkdegames/carddecks/cards-aisleriot/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/18.png b/libkdegames/carddecks/cards-aisleriot/18.png
deleted file mode 100644
index b231456b..00000000
--- a/libkdegames/carddecks/cards-aisleriot/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/19.png b/libkdegames/carddecks/cards-aisleriot/19.png
deleted file mode 100644
index d77ff9c8..00000000
--- a/libkdegames/carddecks/cards-aisleriot/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/2.png b/libkdegames/carddecks/cards-aisleriot/2.png
deleted file mode 100644
index 5d610da7..00000000
--- a/libkdegames/carddecks/cards-aisleriot/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/20.png b/libkdegames/carddecks/cards-aisleriot/20.png
deleted file mode 100644
index bf9d586f..00000000
--- a/libkdegames/carddecks/cards-aisleriot/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/21.png b/libkdegames/carddecks/cards-aisleriot/21.png
deleted file mode 100644
index 7ae9b457..00000000
--- a/libkdegames/carddecks/cards-aisleriot/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/22.png b/libkdegames/carddecks/cards-aisleriot/22.png
deleted file mode 100644
index 86dee123..00000000
--- a/libkdegames/carddecks/cards-aisleriot/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/23.png b/libkdegames/carddecks/cards-aisleriot/23.png
deleted file mode 100644
index 0f6aba24..00000000
--- a/libkdegames/carddecks/cards-aisleriot/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/24.png b/libkdegames/carddecks/cards-aisleriot/24.png
deleted file mode 100644
index 5cf8d35c..00000000
--- a/libkdegames/carddecks/cards-aisleriot/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/25.png b/libkdegames/carddecks/cards-aisleriot/25.png
deleted file mode 100644
index a46de767..00000000
--- a/libkdegames/carddecks/cards-aisleriot/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/26.png b/libkdegames/carddecks/cards-aisleriot/26.png
deleted file mode 100644
index a21f883d..00000000
--- a/libkdegames/carddecks/cards-aisleriot/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/27.png b/libkdegames/carddecks/cards-aisleriot/27.png
deleted file mode 100644
index 724146ca..00000000
--- a/libkdegames/carddecks/cards-aisleriot/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/28.png b/libkdegames/carddecks/cards-aisleriot/28.png
deleted file mode 100644
index f446432e..00000000
--- a/libkdegames/carddecks/cards-aisleriot/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/29.png b/libkdegames/carddecks/cards-aisleriot/29.png
deleted file mode 100644
index 81060669..00000000
--- a/libkdegames/carddecks/cards-aisleriot/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/3.png b/libkdegames/carddecks/cards-aisleriot/3.png
deleted file mode 100644
index 9bc9a017..00000000
--- a/libkdegames/carddecks/cards-aisleriot/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/30.png b/libkdegames/carddecks/cards-aisleriot/30.png
deleted file mode 100644
index d506216a..00000000
--- a/libkdegames/carddecks/cards-aisleriot/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/31.png b/libkdegames/carddecks/cards-aisleriot/31.png
deleted file mode 100644
index e6643631..00000000
--- a/libkdegames/carddecks/cards-aisleriot/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/32.png b/libkdegames/carddecks/cards-aisleriot/32.png
deleted file mode 100644
index 225d9c3e..00000000
--- a/libkdegames/carddecks/cards-aisleriot/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/33.png b/libkdegames/carddecks/cards-aisleriot/33.png
deleted file mode 100644
index bb5bd4ec..00000000
--- a/libkdegames/carddecks/cards-aisleriot/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/34.png b/libkdegames/carddecks/cards-aisleriot/34.png
deleted file mode 100644
index a5a0f38d..00000000
--- a/libkdegames/carddecks/cards-aisleriot/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/35.png b/libkdegames/carddecks/cards-aisleriot/35.png
deleted file mode 100644
index 72cca325..00000000
--- a/libkdegames/carddecks/cards-aisleriot/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/36.png b/libkdegames/carddecks/cards-aisleriot/36.png
deleted file mode 100644
index 8c805d93..00000000
--- a/libkdegames/carddecks/cards-aisleriot/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/37.png b/libkdegames/carddecks/cards-aisleriot/37.png
deleted file mode 100644
index 36746eee..00000000
--- a/libkdegames/carddecks/cards-aisleriot/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/38.png b/libkdegames/carddecks/cards-aisleriot/38.png
deleted file mode 100644
index 58de88ae..00000000
--- a/libkdegames/carddecks/cards-aisleriot/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/39.png b/libkdegames/carddecks/cards-aisleriot/39.png
deleted file mode 100644
index 879c0f78..00000000
--- a/libkdegames/carddecks/cards-aisleriot/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/4.png b/libkdegames/carddecks/cards-aisleriot/4.png
deleted file mode 100644
index 6b723627..00000000
--- a/libkdegames/carddecks/cards-aisleriot/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/40.png b/libkdegames/carddecks/cards-aisleriot/40.png
deleted file mode 100644
index e20553ee..00000000
--- a/libkdegames/carddecks/cards-aisleriot/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/41.png b/libkdegames/carddecks/cards-aisleriot/41.png
deleted file mode 100644
index 9a023831..00000000
--- a/libkdegames/carddecks/cards-aisleriot/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/42.png b/libkdegames/carddecks/cards-aisleriot/42.png
deleted file mode 100644
index 363e44b2..00000000
--- a/libkdegames/carddecks/cards-aisleriot/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/43.png b/libkdegames/carddecks/cards-aisleriot/43.png
deleted file mode 100644
index e2e7b08c..00000000
--- a/libkdegames/carddecks/cards-aisleriot/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/44.png b/libkdegames/carddecks/cards-aisleriot/44.png
deleted file mode 100644
index aeb617f6..00000000
--- a/libkdegames/carddecks/cards-aisleriot/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/45.png b/libkdegames/carddecks/cards-aisleriot/45.png
deleted file mode 100644
index fee4dba0..00000000
--- a/libkdegames/carddecks/cards-aisleriot/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/46.png b/libkdegames/carddecks/cards-aisleriot/46.png
deleted file mode 100644
index f5948439..00000000
--- a/libkdegames/carddecks/cards-aisleriot/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/47.png b/libkdegames/carddecks/cards-aisleriot/47.png
deleted file mode 100644
index 0079b371..00000000
--- a/libkdegames/carddecks/cards-aisleriot/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/48.png b/libkdegames/carddecks/cards-aisleriot/48.png
deleted file mode 100644
index 62a487da..00000000
--- a/libkdegames/carddecks/cards-aisleriot/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/49.png b/libkdegames/carddecks/cards-aisleriot/49.png
deleted file mode 100644
index 87ede197..00000000
--- a/libkdegames/carddecks/cards-aisleriot/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/5.png b/libkdegames/carddecks/cards-aisleriot/5.png
deleted file mode 100644
index 8c5df649..00000000
--- a/libkdegames/carddecks/cards-aisleriot/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/50.png b/libkdegames/carddecks/cards-aisleriot/50.png
deleted file mode 100644
index a8a01853..00000000
--- a/libkdegames/carddecks/cards-aisleriot/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/51.png b/libkdegames/carddecks/cards-aisleriot/51.png
deleted file mode 100644
index 9f2d83b9..00000000
--- a/libkdegames/carddecks/cards-aisleriot/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/52.png b/libkdegames/carddecks/cards-aisleriot/52.png
deleted file mode 100644
index c5c754b3..00000000
--- a/libkdegames/carddecks/cards-aisleriot/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/6.png b/libkdegames/carddecks/cards-aisleriot/6.png
deleted file mode 100644
index d399ebbb..00000000
--- a/libkdegames/carddecks/cards-aisleriot/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/7.png b/libkdegames/carddecks/cards-aisleriot/7.png
deleted file mode 100644
index 754240cd..00000000
--- a/libkdegames/carddecks/cards-aisleriot/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/8.png b/libkdegames/carddecks/cards-aisleriot/8.png
deleted file mode 100644
index 805854c0..00000000
--- a/libkdegames/carddecks/cards-aisleriot/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/9.png b/libkdegames/carddecks/cards-aisleriot/9.png
deleted file mode 100644
index 9c032e48..00000000
--- a/libkdegames/carddecks/cards-aisleriot/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-aisleriot/COPYRIGHT b/libkdegames/carddecks/cards-aisleriot/COPYRIGHT
deleted file mode 100644
index bfbeeca7..00000000
--- a/libkdegames/carddecks/cards-aisleriot/COPYRIGHT
+++ /dev/null
@@ -1,10 +0,0 @@
-This PySol cardset was adapted from gnome-games 0.27 (aisleriot).
-http://www.gnome.org
-
-Copyright (C) 1998 Jonathan Blandford <jrb@mit.edu>
-Copyright (C) 1998 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-aisleriot/index.desktop b/libkdegames/carddecks/cards-aisleriot/index.desktop
deleted file mode 100644
index e70c235b..00000000
--- a/libkdegames/carddecks/cards-aisleriot/index.desktop
+++ /dev/null
@@ -1,20 +0,0 @@
-[KDE Backdeck]
-Name=AisleRiot
-Name[af]=Aisleriot
-Name[be]=Эслрыёт (пасьянсы)
-Name[bg]=Айсълриот
-Name[bn]=এইসলরায়োট
-Name[cs]=Pozdvižení v uličce
-Name[eo]=Simpla
-Name[hi]=एस्लेरियॉट
-Name[hr]=Pobuna u prolazu
-Name[ne]=आइस्ले रिओट
-Name[pa]=ਇਲਸੀਰਓਟ
-Name[ru]=ЭшлРиот (коллекция пасьянсов)
-Name[sv]=Kyrkouppror
-Name[ta]= அய்ஸில்ரியாட்
-Name[uk]=Заколот на човні
-Name[vi]= AisleRiot
-Name[zu]=I-AisleRiot
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-default/1.png b/libkdegames/carddecks/cards-default/1.png
deleted file mode 100644
index 8f5de97f..00000000
--- a/libkdegames/carddecks/cards-default/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/10.png b/libkdegames/carddecks/cards-default/10.png
deleted file mode 100644
index 6c7b87ea..00000000
--- a/libkdegames/carddecks/cards-default/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/11.png b/libkdegames/carddecks/cards-default/11.png
deleted file mode 100644
index a5938708..00000000
--- a/libkdegames/carddecks/cards-default/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/12.png b/libkdegames/carddecks/cards-default/12.png
deleted file mode 100644
index 4d43a730..00000000
--- a/libkdegames/carddecks/cards-default/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/13.png b/libkdegames/carddecks/cards-default/13.png
deleted file mode 100644
index c7d51207..00000000
--- a/libkdegames/carddecks/cards-default/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/14.png b/libkdegames/carddecks/cards-default/14.png
deleted file mode 100644
index 2efb9b18..00000000
--- a/libkdegames/carddecks/cards-default/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/15.png b/libkdegames/carddecks/cards-default/15.png
deleted file mode 100644
index 8208b271..00000000
--- a/libkdegames/carddecks/cards-default/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/16.png b/libkdegames/carddecks/cards-default/16.png
deleted file mode 100644
index 73c5fce5..00000000
--- a/libkdegames/carddecks/cards-default/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/17.png b/libkdegames/carddecks/cards-default/17.png
deleted file mode 100644
index 611b7aff..00000000
--- a/libkdegames/carddecks/cards-default/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/18.png b/libkdegames/carddecks/cards-default/18.png
deleted file mode 100644
index 8b7d1a1e..00000000
--- a/libkdegames/carddecks/cards-default/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/19.png b/libkdegames/carddecks/cards-default/19.png
deleted file mode 100644
index 0a9dac18..00000000
--- a/libkdegames/carddecks/cards-default/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/2.png b/libkdegames/carddecks/cards-default/2.png
deleted file mode 100644
index b0c67169..00000000
--- a/libkdegames/carddecks/cards-default/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/20.png b/libkdegames/carddecks/cards-default/20.png
deleted file mode 100644
index 0657a091..00000000
--- a/libkdegames/carddecks/cards-default/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/21.png b/libkdegames/carddecks/cards-default/21.png
deleted file mode 100644
index fe376ba1..00000000
--- a/libkdegames/carddecks/cards-default/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/22.png b/libkdegames/carddecks/cards-default/22.png
deleted file mode 100644
index 2a0e5d30..00000000
--- a/libkdegames/carddecks/cards-default/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/23.png b/libkdegames/carddecks/cards-default/23.png
deleted file mode 100644
index 52403931..00000000
--- a/libkdegames/carddecks/cards-default/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/24.png b/libkdegames/carddecks/cards-default/24.png
deleted file mode 100644
index 5af94ec7..00000000
--- a/libkdegames/carddecks/cards-default/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/25.png b/libkdegames/carddecks/cards-default/25.png
deleted file mode 100644
index cc437aea..00000000
--- a/libkdegames/carddecks/cards-default/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/26.png b/libkdegames/carddecks/cards-default/26.png
deleted file mode 100644
index d034f06f..00000000
--- a/libkdegames/carddecks/cards-default/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/27.png b/libkdegames/carddecks/cards-default/27.png
deleted file mode 100644
index a23fe6ff..00000000
--- a/libkdegames/carddecks/cards-default/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/28.png b/libkdegames/carddecks/cards-default/28.png
deleted file mode 100644
index dcccaac2..00000000
--- a/libkdegames/carddecks/cards-default/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/29.png b/libkdegames/carddecks/cards-default/29.png
deleted file mode 100644
index e19070bd..00000000
--- a/libkdegames/carddecks/cards-default/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/3.png b/libkdegames/carddecks/cards-default/3.png
deleted file mode 100644
index 1854faba..00000000
--- a/libkdegames/carddecks/cards-default/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/30.png b/libkdegames/carddecks/cards-default/30.png
deleted file mode 100644
index d9b285c0..00000000
--- a/libkdegames/carddecks/cards-default/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/31.png b/libkdegames/carddecks/cards-default/31.png
deleted file mode 100644
index b77a5d8d..00000000
--- a/libkdegames/carddecks/cards-default/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/32.png b/libkdegames/carddecks/cards-default/32.png
deleted file mode 100644
index 0e0649bf..00000000
--- a/libkdegames/carddecks/cards-default/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/33.png b/libkdegames/carddecks/cards-default/33.png
deleted file mode 100644
index d1344b0f..00000000
--- a/libkdegames/carddecks/cards-default/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/34.png b/libkdegames/carddecks/cards-default/34.png
deleted file mode 100644
index 9ff5f5aa..00000000
--- a/libkdegames/carddecks/cards-default/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/35.png b/libkdegames/carddecks/cards-default/35.png
deleted file mode 100644
index b247d95e..00000000
--- a/libkdegames/carddecks/cards-default/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/36.png b/libkdegames/carddecks/cards-default/36.png
deleted file mode 100644
index f5284e87..00000000
--- a/libkdegames/carddecks/cards-default/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/37.png b/libkdegames/carddecks/cards-default/37.png
deleted file mode 100644
index e4a2fa70..00000000
--- a/libkdegames/carddecks/cards-default/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/38.png b/libkdegames/carddecks/cards-default/38.png
deleted file mode 100644
index 859e4a52..00000000
--- a/libkdegames/carddecks/cards-default/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/39.png b/libkdegames/carddecks/cards-default/39.png
deleted file mode 100644
index b4392112..00000000
--- a/libkdegames/carddecks/cards-default/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/4.png b/libkdegames/carddecks/cards-default/4.png
deleted file mode 100644
index 136c3100..00000000
--- a/libkdegames/carddecks/cards-default/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/40.png b/libkdegames/carddecks/cards-default/40.png
deleted file mode 100644
index 2a30304a..00000000
--- a/libkdegames/carddecks/cards-default/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/41.png b/libkdegames/carddecks/cards-default/41.png
deleted file mode 100644
index 2c619dc3..00000000
--- a/libkdegames/carddecks/cards-default/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/42.png b/libkdegames/carddecks/cards-default/42.png
deleted file mode 100644
index 5200e878..00000000
--- a/libkdegames/carddecks/cards-default/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/43.png b/libkdegames/carddecks/cards-default/43.png
deleted file mode 100644
index ebd6db3f..00000000
--- a/libkdegames/carddecks/cards-default/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/44.png b/libkdegames/carddecks/cards-default/44.png
deleted file mode 100644
index 8cdcd68f..00000000
--- a/libkdegames/carddecks/cards-default/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/45.png b/libkdegames/carddecks/cards-default/45.png
deleted file mode 100644
index 9297d188..00000000
--- a/libkdegames/carddecks/cards-default/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/46.png b/libkdegames/carddecks/cards-default/46.png
deleted file mode 100644
index 1b47218e..00000000
--- a/libkdegames/carddecks/cards-default/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/47.png b/libkdegames/carddecks/cards-default/47.png
deleted file mode 100644
index 8fd3853d..00000000
--- a/libkdegames/carddecks/cards-default/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/48.png b/libkdegames/carddecks/cards-default/48.png
deleted file mode 100644
index 01eea71b..00000000
--- a/libkdegames/carddecks/cards-default/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/49.png b/libkdegames/carddecks/cards-default/49.png
deleted file mode 100644
index d6860e04..00000000
--- a/libkdegames/carddecks/cards-default/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/5.png b/libkdegames/carddecks/cards-default/5.png
deleted file mode 100644
index 64029ed0..00000000
--- a/libkdegames/carddecks/cards-default/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/50.png b/libkdegames/carddecks/cards-default/50.png
deleted file mode 100644
index 79c1ed05..00000000
--- a/libkdegames/carddecks/cards-default/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/51.png b/libkdegames/carddecks/cards-default/51.png
deleted file mode 100644
index f396b946..00000000
--- a/libkdegames/carddecks/cards-default/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/52.png b/libkdegames/carddecks/cards-default/52.png
deleted file mode 100644
index dcdc90e5..00000000
--- a/libkdegames/carddecks/cards-default/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/6.png b/libkdegames/carddecks/cards-default/6.png
deleted file mode 100644
index 1749b472..00000000
--- a/libkdegames/carddecks/cards-default/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/7.png b/libkdegames/carddecks/cards-default/7.png
deleted file mode 100644
index 2d33965c..00000000
--- a/libkdegames/carddecks/cards-default/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/8.png b/libkdegames/carddecks/cards-default/8.png
deleted file mode 100644
index 165bd76b..00000000
--- a/libkdegames/carddecks/cards-default/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/9.png b/libkdegames/carddecks/cards-default/9.png
deleted file mode 100644
index 9860c535..00000000
--- a/libkdegames/carddecks/cards-default/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-default/index.desktop b/libkdegames/carddecks/cards-default/index.desktop
deleted file mode 100644
index 63894a1b..00000000
--- a/libkdegames/carddecks/cards-default/index.desktop
+++ /dev/null
@@ -1,115 +0,0 @@
-[KDE Backdeck]
-Name=Standard
-Name[af]=Standaard
-Name[az]=Standart
-Name[be]=Звычайная
-Name[bg]=Стандарт
-Name[bn]=প্রমিত
-Name[br]=Reoliek
-Name[ca]=Estàndard
-Name[cs]=Standardní
-Name[cy]=Safonol
-Name[eo]=Normala
-Name[es]=Estándar
-Name[eu]=Estandarra
-Name[fa]=استاندارد
-Name[fi]=Normaali
-Name[ga]=Caighdeánach
-Name[gl]=Estándar
-Name[hi]=मानक
-Name[is]=Staðlað
-Name[ja]=標準
-Name[km]=ខ្នាត​គំរូ
-Name[ko]=표준
-Name[lt]=Standartas
-Name[lv]=Standarta
-Name[mk]=Стандард
-Name[ne]=मानक
-Name[nl]=Standaard
-Name[nso]=Lekanetse
-Name[pa]=ਮਿਆਰ
-Name[pt]=Normal
-Name[pt_BR]=Padrão
-Name[ru]=Стандарт
-Name[se]=Standárda
-Name[sk]=Štandard
-Name[sr]=Стандардни
-Name[sr@Latn]=Standardni
-Name[ta]= தரம்
-Name[tg]=Низоммеъёр
-Name[th]=มาตรฐาน
-Name[tr]=Standart
-Name[uk]=Типові
-Name[uz]=Andoza
-Name[uz@cyrillic]=Андоза
-Name[ven]=Murole
-Name[vi]=Tiêu chuẩn
-Name[wa]=Sitandård
-Name[xh]=Umgangatho
-Name[zh_CN]=标准
-Name[zh_TW]=標準
-Name[zu]=Okulingeneyo
-Preview=11.png
-PySol=false
-Comment=Standard KDE card set\nGPL license
-Comment[af]=Standaard Kde kaart stel\nGPL lisensie
-Comment[az]=Standart KDE kart dəstəsi\nGPL license
-Comment[be]=Звычайная калода картаў KDE\nGPL license
-Comment[bg]=Стандартна колода карти KDE\nОПЛ лиценз(GPL)
-Comment[bn]=কে.ডি.ই.-র সাধারণ তাস সেট\nজি.পি.এল. লাইসেন্স
-Comment[bs]=Standardni KDE špil karata\nGPL license
-Comment[ca]=Joc de cartes estàndard per al KDE sota\nLlicència GPL
-Comment[cs]=Standardní sada karet KDE\nGPL licence
-Comment[cy]=Trwydded GPL safonol\nar gyfer set cerdiau KDE
-Comment[da]=Standard KDE-kortspil\nGPL-licens
-Comment[de]=Standardmäßige KDE-Karten\nGPL-Lizenz
-Comment[el]=Προκαθορισμένο σετ καρτών του KDE\nΆδεια GPL
-Comment[en_GB]=Standard KDE card set\nGPL licence
-Comment[eo]=Normala KDEa kartaro\nGPL licenco
-Comment[es]=Juego de cartas estándar de KDE\nLicencia GPL
-Comment[et]=Standardne KDE kaardikomplekt\nGPL litsents
-Comment[eu]=KDE-ren karta-sorta estandarra\nGPL lizentzia
-Comment[fa]=مجموعه استاندارد کارت KDE\مجوز nGPL
-Comment[fi]=Normaali KDE:n korttipakka\nGPL lisenssi
-Comment[fr]=Jeu de cartes standard de KDE\nLicence GPL
-Comment[gl]=Baralla de cartas estándar de KDE\nGPL license
-Comment[he]=ערכת הקלפים הסטנדרטית של KDE\nרישיון GPL
-Comment[hi]=मानक केडीई ताश सेट\nजीपीएल अनुज्ञापत्र
-Comment[hr]=Standardni KDE komplet karata\nGPL licenca
-Comment[hu]=Standard KDE kártyacsomag\n(GPL licencű)
-Comment[is]=Venjulegi KDE spilastokkurinn\nGPL leyfi
-Comment[it]=Insieme di carte standard di KDE\nLicenza GPL
-Comment[ja]=標準 KDE カードセット\nGPL ライセンス
-Comment[km]=បណ្ដុំ​បៀ KDE ខ្នាត​គំរូ\nអជ្ញាបណ្ណ GPL
-Comment[ko]=표준 KDE 카드 모음\nGPL 라이선스
-Comment[lt]=Standartinis KDE kortų rinkinys\nGPL licencija
-Comment[lv]=Standarta KDE kāršu komplekts\n GPL licenze
-Comment[mk]=Стандарден комплет на карти во KDE\nGPL-лиценца
-Comment[mt]=Mazz karti standard KDE\nliċenzja GPL
-Comment[nb]=Standard KDE sett med kort\nGPL-lisens
-Comment[nds]=KDE-Standardkoorten\nGPL-Lizenz
-Comment[ne]=मानक केडीई कार्ड सेट\nGPL इजाजतपत्र
-Comment[nl]=Standaard KDE-kaartrug\nGPL-licentie
-Comment[nn]=Standard KDE-kortstokk\nGPL-lisens
-Comment[pl]=Standardowy zestaw kart KDE\nLicencja GPL
-Comment[pt]=Baralho de cartas normal do KDE\nLicença GPL
-Comment[pt_BR]=Jogo de cartas padrão do KDE\nLicença GPL
-Comment[ro]=Set de cărţi KDE standard\nLicenţă GPL
-Comment[ru]=Стандартная колода карт KDE\nЛицензия: GPL
-Comment[sk]=Štandardný balíček kariet KDE\nlicencia GPL
-Comment[sl]=Standardni nabor kart v KDE\nLicenca GPL
-Comment[sr]=Стандардни KDE-ов шпил карата\nGPL лиценца
-Comment[sr@Latn]=Standardni KDE-ov špil karata\nGPL licenca
-Comment[sv]=Förvald KDE-kortlek\nGPL-licens
-Comment[ta]=நிலையான கேடிஇ சீட்டு அமைப்பு \nGPL இயக்க ஆணை
-Comment[tg]=Маҷмӯи кортҳои низомии KDE\nлитсензияи GPL
-Comment[th]=ชุดของเกมไพ่ของ KDE\nลิขสิทธิ์แบบ GPL
-Comment[tr]=Standart KDE kart seti\nGPL lisansı
-Comment[uk]=Типовий набір карт KDE\nліцензія GPL
-Comment[ven]=U vhekanya ha magarata a KDE ya Murole\tendelo ya nGPL
-Comment[vi]=Thẻ KDE tiêu chuẩn đặt \nGPL license
-Comment[wa]=Cwårdjeus standård di KDE\ndizo licince GPL
-Comment[xh]=Umgangatho wekhadi le KDE iqela lekhadi \nGPL imvumelwano
-Comment[zh_CN]=标准 KDE 牌面\nGPL 授权
-Comment[zh_TW]=標準 KDE 牌局\nGPL 授權
-Comment[zu]=Iqoqo lamakhadi elilingeneyo le-KDE\n ilayisensi ye-GPL
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/1.png b/libkdegames/carddecks/cards-dondorf-whist-b/1.png
deleted file mode 100644
index 89c86909..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/10.png b/libkdegames/carddecks/cards-dondorf-whist-b/10.png
deleted file mode 100644
index 5113cad8..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/11.png b/libkdegames/carddecks/cards-dondorf-whist-b/11.png
deleted file mode 100644
index 11fc7e05..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/12.png b/libkdegames/carddecks/cards-dondorf-whist-b/12.png
deleted file mode 100644
index a2307ddc..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/13.png b/libkdegames/carddecks/cards-dondorf-whist-b/13.png
deleted file mode 100644
index 0b9e20cd..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/14.png b/libkdegames/carddecks/cards-dondorf-whist-b/14.png
deleted file mode 100644
index 1c49f750..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/15.png b/libkdegames/carddecks/cards-dondorf-whist-b/15.png
deleted file mode 100644
index ab295e25..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/16.png b/libkdegames/carddecks/cards-dondorf-whist-b/16.png
deleted file mode 100644
index d8bd8402..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/17.png b/libkdegames/carddecks/cards-dondorf-whist-b/17.png
deleted file mode 100644
index d3a3f6ed..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/18.png b/libkdegames/carddecks/cards-dondorf-whist-b/18.png
deleted file mode 100644
index 12831991..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/19.png b/libkdegames/carddecks/cards-dondorf-whist-b/19.png
deleted file mode 100644
index e7199dce..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/2.png b/libkdegames/carddecks/cards-dondorf-whist-b/2.png
deleted file mode 100644
index 93ec9944..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/20.png b/libkdegames/carddecks/cards-dondorf-whist-b/20.png
deleted file mode 100644
index 90b043f0..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/21.png b/libkdegames/carddecks/cards-dondorf-whist-b/21.png
deleted file mode 100644
index 905ccd6a..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/22.png b/libkdegames/carddecks/cards-dondorf-whist-b/22.png
deleted file mode 100644
index 2eee5bbc..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/23.png b/libkdegames/carddecks/cards-dondorf-whist-b/23.png
deleted file mode 100644
index b717110e..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/24.png b/libkdegames/carddecks/cards-dondorf-whist-b/24.png
deleted file mode 100644
index 4c05cd1d..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/25.png b/libkdegames/carddecks/cards-dondorf-whist-b/25.png
deleted file mode 100644
index c6701d0d..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/26.png b/libkdegames/carddecks/cards-dondorf-whist-b/26.png
deleted file mode 100644
index a737f469..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/27.png b/libkdegames/carddecks/cards-dondorf-whist-b/27.png
deleted file mode 100644
index c904309b..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/28.png b/libkdegames/carddecks/cards-dondorf-whist-b/28.png
deleted file mode 100644
index 8da263d7..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/29.png b/libkdegames/carddecks/cards-dondorf-whist-b/29.png
deleted file mode 100644
index 8ff7822d..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/3.png b/libkdegames/carddecks/cards-dondorf-whist-b/3.png
deleted file mode 100644
index 7f5644f8..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/30.png b/libkdegames/carddecks/cards-dondorf-whist-b/30.png
deleted file mode 100644
index c93c64dc..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/31.png b/libkdegames/carddecks/cards-dondorf-whist-b/31.png
deleted file mode 100644
index 912cbf79..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/32.png b/libkdegames/carddecks/cards-dondorf-whist-b/32.png
deleted file mode 100644
index 9b72443c..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/33.png b/libkdegames/carddecks/cards-dondorf-whist-b/33.png
deleted file mode 100644
index 20f863ac..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/34.png b/libkdegames/carddecks/cards-dondorf-whist-b/34.png
deleted file mode 100644
index 7763d965..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/35.png b/libkdegames/carddecks/cards-dondorf-whist-b/35.png
deleted file mode 100644
index 29eaef82..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/36.png b/libkdegames/carddecks/cards-dondorf-whist-b/36.png
deleted file mode 100644
index fd72b718..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/37.png b/libkdegames/carddecks/cards-dondorf-whist-b/37.png
deleted file mode 100644
index 15a2b979..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/38.png b/libkdegames/carddecks/cards-dondorf-whist-b/38.png
deleted file mode 100644
index 91551173..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/39.png b/libkdegames/carddecks/cards-dondorf-whist-b/39.png
deleted file mode 100644
index dcb66d00..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/4.png b/libkdegames/carddecks/cards-dondorf-whist-b/4.png
deleted file mode 100644
index 1033ffd0..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/40.png b/libkdegames/carddecks/cards-dondorf-whist-b/40.png
deleted file mode 100644
index a1b9b2e9..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/41.png b/libkdegames/carddecks/cards-dondorf-whist-b/41.png
deleted file mode 100644
index 8d7ca55b..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/42.png b/libkdegames/carddecks/cards-dondorf-whist-b/42.png
deleted file mode 100644
index 4570430b..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/43.png b/libkdegames/carddecks/cards-dondorf-whist-b/43.png
deleted file mode 100644
index c889b795..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/44.png b/libkdegames/carddecks/cards-dondorf-whist-b/44.png
deleted file mode 100644
index b73bd4d1..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/45.png b/libkdegames/carddecks/cards-dondorf-whist-b/45.png
deleted file mode 100644
index de6730cd..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/46.png b/libkdegames/carddecks/cards-dondorf-whist-b/46.png
deleted file mode 100644
index f20edcc9..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/47.png b/libkdegames/carddecks/cards-dondorf-whist-b/47.png
deleted file mode 100644
index 50ec6b95..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/48.png b/libkdegames/carddecks/cards-dondorf-whist-b/48.png
deleted file mode 100644
index c0bfdfbd..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/49.png b/libkdegames/carddecks/cards-dondorf-whist-b/49.png
deleted file mode 100644
index c8803ffa..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/5.png b/libkdegames/carddecks/cards-dondorf-whist-b/5.png
deleted file mode 100644
index 0fb9ffcf..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/50.png b/libkdegames/carddecks/cards-dondorf-whist-b/50.png
deleted file mode 100644
index 6d8c891e..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/51.png b/libkdegames/carddecks/cards-dondorf-whist-b/51.png
deleted file mode 100644
index fc2c76d0..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/52.png b/libkdegames/carddecks/cards-dondorf-whist-b/52.png
deleted file mode 100644
index 6aef81aa..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/6.png b/libkdegames/carddecks/cards-dondorf-whist-b/6.png
deleted file mode 100644
index f70072cf..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/7.png b/libkdegames/carddecks/cards-dondorf-whist-b/7.png
deleted file mode 100644
index 1dd352dc..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/8.png b/libkdegames/carddecks/cards-dondorf-whist-b/8.png
deleted file mode 100644
index 087906ca..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/9.png b/libkdegames/carddecks/cards-dondorf-whist-b/9.png
deleted file mode 100644
index 9bb290ee..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT b/libkdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT
deleted file mode 100644
index 917bc1e3..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/COPYRIGHT
+++ /dev/null
@@ -1,12 +0,0 @@
-This PySol cardset was created by T. Kirk.
-
-Copyright (C) 2000 T. Kirk <grania@mailcity.com>
-
-This card set uses the court and Ace images from a deck published
-by Dondorf and Co. of Frankfurt in 1896. The cards are double ended
-and have different images on each end. Two card sets were produced.
-
-This card set is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-dondorf-whist-b/index.desktop b/libkdegames/carddecks/cards-dondorf-whist-b/index.desktop
deleted file mode 100644
index 6626e825..00000000
--- a/libkdegames/carddecks/cards-dondorf-whist-b/index.desktop
+++ /dev/null
@@ -1,17 +0,0 @@
-[KDE Backdeck]
-Name=Dondorf
-Name[be]=Дандорф
-Name[bg]=Дондроф
-Name[bn]=ডনডর্ফ
-Name[eo]=Bela
-Name[hi]=डॉनड्रॉफ
-Name[lv]=Dondorfa
-Name[mk]=Дондорф
-Name[ne]=डनडोर्फ
-Name[ru]=Дондорф
-Name[sr]=Дондорф
-Name[ta]=டேன்டார்ஃப்
-Name[tg]=Дондорф
-Name[zu]=I-Dondorf
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/1.png b/libkdegames/carddecks/cards-gdkcard-bonded/1.png
deleted file mode 100644
index 17c1ac79..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/10.png b/libkdegames/carddecks/cards-gdkcard-bonded/10.png
deleted file mode 100644
index f9fe505b..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/11.png b/libkdegames/carddecks/cards-gdkcard-bonded/11.png
deleted file mode 100644
index 9fa6e5ec..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/12.png b/libkdegames/carddecks/cards-gdkcard-bonded/12.png
deleted file mode 100644
index 09089e70..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/13.png b/libkdegames/carddecks/cards-gdkcard-bonded/13.png
deleted file mode 100644
index cb6b0e6f..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/14.png b/libkdegames/carddecks/cards-gdkcard-bonded/14.png
deleted file mode 100644
index 027217be..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/15.png b/libkdegames/carddecks/cards-gdkcard-bonded/15.png
deleted file mode 100644
index b9054f4f..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/16.png b/libkdegames/carddecks/cards-gdkcard-bonded/16.png
deleted file mode 100644
index 7b14d54a..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/17.png b/libkdegames/carddecks/cards-gdkcard-bonded/17.png
deleted file mode 100644
index e4d9b798..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/18.png b/libkdegames/carddecks/cards-gdkcard-bonded/18.png
deleted file mode 100644
index c0fe1954..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/19.png b/libkdegames/carddecks/cards-gdkcard-bonded/19.png
deleted file mode 100644
index 7f24d523..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/2.png b/libkdegames/carddecks/cards-gdkcard-bonded/2.png
deleted file mode 100644
index 7d8cbbcb..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/20.png b/libkdegames/carddecks/cards-gdkcard-bonded/20.png
deleted file mode 100644
index 1a6e01c9..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/21.png b/libkdegames/carddecks/cards-gdkcard-bonded/21.png
deleted file mode 100644
index c217b982..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/22.png b/libkdegames/carddecks/cards-gdkcard-bonded/22.png
deleted file mode 100644
index 82ce9196..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/23.png b/libkdegames/carddecks/cards-gdkcard-bonded/23.png
deleted file mode 100644
index 03850bef..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/24.png b/libkdegames/carddecks/cards-gdkcard-bonded/24.png
deleted file mode 100644
index 990289f6..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/25.png b/libkdegames/carddecks/cards-gdkcard-bonded/25.png
deleted file mode 100644
index 04ea602f..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/26.png b/libkdegames/carddecks/cards-gdkcard-bonded/26.png
deleted file mode 100644
index 705a22a2..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/27.png b/libkdegames/carddecks/cards-gdkcard-bonded/27.png
deleted file mode 100644
index cf5ea112..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/28.png b/libkdegames/carddecks/cards-gdkcard-bonded/28.png
deleted file mode 100644
index d613413c..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/29.png b/libkdegames/carddecks/cards-gdkcard-bonded/29.png
deleted file mode 100644
index 8838c750..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/3.png b/libkdegames/carddecks/cards-gdkcard-bonded/3.png
deleted file mode 100644
index 563a6385..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/30.png b/libkdegames/carddecks/cards-gdkcard-bonded/30.png
deleted file mode 100644
index 4fb2901b..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/31.png b/libkdegames/carddecks/cards-gdkcard-bonded/31.png
deleted file mode 100644
index 8bcd3090..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/32.png b/libkdegames/carddecks/cards-gdkcard-bonded/32.png
deleted file mode 100644
index c5fb66db..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/33.png b/libkdegames/carddecks/cards-gdkcard-bonded/33.png
deleted file mode 100644
index 43d4df04..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/34.png b/libkdegames/carddecks/cards-gdkcard-bonded/34.png
deleted file mode 100644
index 1bf6c975..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/35.png b/libkdegames/carddecks/cards-gdkcard-bonded/35.png
deleted file mode 100644
index ba85c37e..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/36.png b/libkdegames/carddecks/cards-gdkcard-bonded/36.png
deleted file mode 100644
index c45008af..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/37.png b/libkdegames/carddecks/cards-gdkcard-bonded/37.png
deleted file mode 100644
index 05cac5a9..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/38.png b/libkdegames/carddecks/cards-gdkcard-bonded/38.png
deleted file mode 100644
index 7c52ecbf..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/39.png b/libkdegames/carddecks/cards-gdkcard-bonded/39.png
deleted file mode 100644
index 1404295a..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/4.png b/libkdegames/carddecks/cards-gdkcard-bonded/4.png
deleted file mode 100644
index fbf1b7d2..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/40.png b/libkdegames/carddecks/cards-gdkcard-bonded/40.png
deleted file mode 100644
index b1c0f317..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/41.png b/libkdegames/carddecks/cards-gdkcard-bonded/41.png
deleted file mode 100644
index a59a245c..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/42.png b/libkdegames/carddecks/cards-gdkcard-bonded/42.png
deleted file mode 100644
index 104836a5..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/43.png b/libkdegames/carddecks/cards-gdkcard-bonded/43.png
deleted file mode 100644
index 90b51009..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/44.png b/libkdegames/carddecks/cards-gdkcard-bonded/44.png
deleted file mode 100644
index 66960d0d..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/45.png b/libkdegames/carddecks/cards-gdkcard-bonded/45.png
deleted file mode 100644
index 7aabe88f..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/46.png b/libkdegames/carddecks/cards-gdkcard-bonded/46.png
deleted file mode 100644
index adfb2516..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/47.png b/libkdegames/carddecks/cards-gdkcard-bonded/47.png
deleted file mode 100644
index 0f48a363..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/48.png b/libkdegames/carddecks/cards-gdkcard-bonded/48.png
deleted file mode 100644
index 368c593a..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/49.png b/libkdegames/carddecks/cards-gdkcard-bonded/49.png
deleted file mode 100644
index a783b506..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/5.png b/libkdegames/carddecks/cards-gdkcard-bonded/5.png
deleted file mode 100644
index 9f809535..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/50.png b/libkdegames/carddecks/cards-gdkcard-bonded/50.png
deleted file mode 100644
index dacc26cd..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/51.png b/libkdegames/carddecks/cards-gdkcard-bonded/51.png
deleted file mode 100644
index 13a6e924..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/52.png b/libkdegames/carddecks/cards-gdkcard-bonded/52.png
deleted file mode 100644
index cce8c9f6..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/6.png b/libkdegames/carddecks/cards-gdkcard-bonded/6.png
deleted file mode 100644
index c679e0c3..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/7.png b/libkdegames/carddecks/cards-gdkcard-bonded/7.png
deleted file mode 100644
index 53b35fbf..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/8.png b/libkdegames/carddecks/cards-gdkcard-bonded/8.png
deleted file mode 100644
index 389d0069..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/9.png b/libkdegames/carddecks/cards-gdkcard-bonded/9.png
deleted file mode 100644
index 59551a1a..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT b/libkdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT
deleted file mode 100644
index 36052f95..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/COPYRIGHT
+++ /dev/null
@@ -1,13 +0,0 @@
-This PySol cardset was adapted from gnome-games 1.0.2 (gdk-card-image).
-http://www.gnome.org
-
-Copyright (C) 1994 Heiko Eissfeldt <heiko@colossus.escape.de>
-Copyright (C) 1994 Michael Bischoff <mbi@mo.math.nat.tu-bs.de>
-Copyright (C) 1998 Felix Bellaby <felix@pooh.u-net.com>
-Copyright (C) 1998 Ryu Changwoo <cwryu@eve.kaist.ac.kr>
-Copyright (C) 1999 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-gdkcard-bonded/index.desktop b/libkdegames/carddecks/cards-gdkcard-bonded/index.desktop
deleted file mode 100644
index 68f3ff21..00000000
--- a/libkdegames/carddecks/cards-gdkcard-bonded/index.desktop
+++ /dev/null
@@ -1,37 +0,0 @@
-[KDE Backdeck]
-Name=Bonded
-Name[af]=Geheg
-Name[az]=Bağlı
-Name[be]=Перапляценні
-Name[bg]=Завързан
-Name[bn]=আবদ্ধ
-Name[ca]=Unides
-Name[cs]=Lepenka
-Name[de]=Verbunden
-Name[eo]=Benda
-Name[es]=Unidas
-Name[eu]=Estekatua
-Name[fi]=Sidottu
-Name[fr]=Compact
-Name[gl]=Unidas
-Name[hi]=बॉन्डेड
-Name[hr]=Povezano
-Name[is]=Bundið
-Name[lv]=Vienkāršs
-Name[mk]=Врзани
-Name[mt]=Mehmuż
-Name[ne]=बन्डेड
-Name[pt]=Unidos
-Name[pt_BR]=Laçado
-Name[ru]=Переплетения
-Name[sr]=Везан
-Name[sr@Latn]=Vezan
-Name[ta]=பிணைக்கப்பட்ட
-Name[tg]=Печдарпечшавӣ
-Name[tr]=Bağlı
-Name[uk]=Бони
-Name[ven]=Zwo khwathiswa
-Name[xh]=Dibeneyo
-Name[zu]=Kuxhumene
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-hard-a-port/1.png b/libkdegames/carddecks/cards-hard-a-port/1.png
deleted file mode 100644
index 05c56268..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/10.png b/libkdegames/carddecks/cards-hard-a-port/10.png
deleted file mode 100644
index ee2d2072..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/11.png b/libkdegames/carddecks/cards-hard-a-port/11.png
deleted file mode 100644
index 4fd72b89..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/12.png b/libkdegames/carddecks/cards-hard-a-port/12.png
deleted file mode 100644
index 7dd80ce7..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/13.png b/libkdegames/carddecks/cards-hard-a-port/13.png
deleted file mode 100644
index 62edf27c..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/14.png b/libkdegames/carddecks/cards-hard-a-port/14.png
deleted file mode 100644
index 5cfa05ed..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/15.png b/libkdegames/carddecks/cards-hard-a-port/15.png
deleted file mode 100644
index a950a87c..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/16.png b/libkdegames/carddecks/cards-hard-a-port/16.png
deleted file mode 100644
index 8b0d76f3..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/17.png b/libkdegames/carddecks/cards-hard-a-port/17.png
deleted file mode 100644
index 9625563e..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/18.png b/libkdegames/carddecks/cards-hard-a-port/18.png
deleted file mode 100644
index 715c8443..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/19.png b/libkdegames/carddecks/cards-hard-a-port/19.png
deleted file mode 100644
index 7a3cf664..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/2.png b/libkdegames/carddecks/cards-hard-a-port/2.png
deleted file mode 100644
index bf4d601f..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/20.png b/libkdegames/carddecks/cards-hard-a-port/20.png
deleted file mode 100644
index 331abc3b..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/21.png b/libkdegames/carddecks/cards-hard-a-port/21.png
deleted file mode 100644
index 59adfb08..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/22.png b/libkdegames/carddecks/cards-hard-a-port/22.png
deleted file mode 100644
index a1ca8484..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/23.png b/libkdegames/carddecks/cards-hard-a-port/23.png
deleted file mode 100644
index d97de844..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/24.png b/libkdegames/carddecks/cards-hard-a-port/24.png
deleted file mode 100644
index 65e3da3c..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/25.png b/libkdegames/carddecks/cards-hard-a-port/25.png
deleted file mode 100644
index 14f82b7d..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/26.png b/libkdegames/carddecks/cards-hard-a-port/26.png
deleted file mode 100644
index e2601df6..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/27.png b/libkdegames/carddecks/cards-hard-a-port/27.png
deleted file mode 100644
index d18b29d7..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/28.png b/libkdegames/carddecks/cards-hard-a-port/28.png
deleted file mode 100644
index 3dcc0842..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/29.png b/libkdegames/carddecks/cards-hard-a-port/29.png
deleted file mode 100644
index a0cc5866..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/3.png b/libkdegames/carddecks/cards-hard-a-port/3.png
deleted file mode 100644
index b78502b9..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/30.png b/libkdegames/carddecks/cards-hard-a-port/30.png
deleted file mode 100644
index e659dc83..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/31.png b/libkdegames/carddecks/cards-hard-a-port/31.png
deleted file mode 100644
index db6f599c..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/32.png b/libkdegames/carddecks/cards-hard-a-port/32.png
deleted file mode 100644
index 9e42582f..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/33.png b/libkdegames/carddecks/cards-hard-a-port/33.png
deleted file mode 100644
index c19f1520..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/34.png b/libkdegames/carddecks/cards-hard-a-port/34.png
deleted file mode 100644
index 139dc9b4..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/35.png b/libkdegames/carddecks/cards-hard-a-port/35.png
deleted file mode 100644
index 62d8a9bc..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/36.png b/libkdegames/carddecks/cards-hard-a-port/36.png
deleted file mode 100644
index 510d150e..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/37.png b/libkdegames/carddecks/cards-hard-a-port/37.png
deleted file mode 100644
index 2e03c9e2..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/38.png b/libkdegames/carddecks/cards-hard-a-port/38.png
deleted file mode 100644
index e12131f0..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/39.png b/libkdegames/carddecks/cards-hard-a-port/39.png
deleted file mode 100644
index eae23793..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/4.png b/libkdegames/carddecks/cards-hard-a-port/4.png
deleted file mode 100644
index 9d7f80c1..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/40.png b/libkdegames/carddecks/cards-hard-a-port/40.png
deleted file mode 100644
index 733be70f..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/41.png b/libkdegames/carddecks/cards-hard-a-port/41.png
deleted file mode 100644
index b3e51b07..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/42.png b/libkdegames/carddecks/cards-hard-a-port/42.png
deleted file mode 100644
index a6f69d9f..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/43.png b/libkdegames/carddecks/cards-hard-a-port/43.png
deleted file mode 100644
index 49c20875..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/44.png b/libkdegames/carddecks/cards-hard-a-port/44.png
deleted file mode 100644
index 6fed6ead..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/45.png b/libkdegames/carddecks/cards-hard-a-port/45.png
deleted file mode 100644
index 81be70a2..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/46.png b/libkdegames/carddecks/cards-hard-a-port/46.png
deleted file mode 100644
index d82c5f60..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/47.png b/libkdegames/carddecks/cards-hard-a-port/47.png
deleted file mode 100644
index f6056465..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/48.png b/libkdegames/carddecks/cards-hard-a-port/48.png
deleted file mode 100644
index 6369f53b..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/49.png b/libkdegames/carddecks/cards-hard-a-port/49.png
deleted file mode 100644
index 49b5b53e..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/5.png b/libkdegames/carddecks/cards-hard-a-port/5.png
deleted file mode 100644
index 6ff98a13..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/50.png b/libkdegames/carddecks/cards-hard-a-port/50.png
deleted file mode 100644
index ce8e46db..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/51.png b/libkdegames/carddecks/cards-hard-a-port/51.png
deleted file mode 100644
index 46552bee..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/52.png b/libkdegames/carddecks/cards-hard-a-port/52.png
deleted file mode 100644
index b03db4a0..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/6.png b/libkdegames/carddecks/cards-hard-a-port/6.png
deleted file mode 100644
index 24fa84b0..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/7.png b/libkdegames/carddecks/cards-hard-a-port/7.png
deleted file mode 100644
index 11561878..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/8.png b/libkdegames/carddecks/cards-hard-a-port/8.png
deleted file mode 100644
index 08d124b7..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/9.png b/libkdegames/carddecks/cards-hard-a-port/9.png
deleted file mode 100644
index 14962b11..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-hard-a-port/COPYRIGHT b/libkdegames/carddecks/cards-hard-a-port/COPYRIGHT
deleted file mode 100644
index f5575c7b..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/COPYRIGHT
+++ /dev/null
@@ -1,14 +0,0 @@
-This PySol cardset was created by T. Kirk.
-
-Copyright (C) 2000 T. Kirk <grania@mailcity.com>
-
-This transformation card set uses images from a set of trade
-cards produced in the late 19th century in the United States
-of America. Cards of this type were given away as premiums
-with the purchase of various products. Each of the cards
-has a different image.
-
-This card set is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-hard-a-port/index.desktop b/libkdegames/carddecks/cards-hard-a-port/index.desktop
deleted file mode 100644
index d8e49aa5..00000000
--- a/libkdegames/carddecks/cards-hard-a-port/index.desktop
+++ /dev/null
@@ -1,29 +0,0 @@
-[KDE Backdeck]
-Name=Hard a Port
-Name[af]=Hard 'n Poort
-Name[be]=Пампушка
-Name[bg]=Дамски
-Name[bn]=হার্ড এ পোর্ট
-Name[de]=Hart Backbord
-Name[eo]=Tenta
-Name[hi]=हार्ड ए पोर्ट
-Name[hr]=Tvrdi na portu
-Name[is]=Hart á bakborða
-Name[it]=Donnine
-Name[km]=ច្រក​រឹង
-Name[lv]=Klasisks
-Name[nds]=Hatt Backboord
-Name[ne]=कडा एउटा पोर्ट
-Name[pt_BR]=Duramente um Porto
-Name[ro]=Licenţioase
-Name[ru]=Пышка
-Name[sr]=Хард-а-порт
-Name[sr@Latn]=Hard-a-port
-Name[sv]=Dikt babord
-Name[ta]=முனையத்தை கடினமாக்கு
-Name[tg]=Даргоҳи Сахт
-Name[ven]=Port yo Khwathaho
-Name[xh]=Izibuko Esport eqinileyo
-Name[zu]=Qinisa isikhumulo
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-konqi-modern/1.png b/libkdegames/carddecks/cards-konqi-modern/1.png
deleted file mode 100644
index 68dfb0ff..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/10.png b/libkdegames/carddecks/cards-konqi-modern/10.png
deleted file mode 100644
index 6df3ad8d..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/11.png b/libkdegames/carddecks/cards-konqi-modern/11.png
deleted file mode 100644
index 665cb2a6..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/12.png b/libkdegames/carddecks/cards-konqi-modern/12.png
deleted file mode 100644
index 1f23d99e..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/13.png b/libkdegames/carddecks/cards-konqi-modern/13.png
deleted file mode 100644
index f1027fdc..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/14.png b/libkdegames/carddecks/cards-konqi-modern/14.png
deleted file mode 100644
index 80d11335..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/15.png b/libkdegames/carddecks/cards-konqi-modern/15.png
deleted file mode 100644
index 72913f7b..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/16.png b/libkdegames/carddecks/cards-konqi-modern/16.png
deleted file mode 100644
index 225f7774..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/17.png b/libkdegames/carddecks/cards-konqi-modern/17.png
deleted file mode 100644
index 0444e010..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/18.png b/libkdegames/carddecks/cards-konqi-modern/18.png
deleted file mode 100644
index f325c781..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/19.png b/libkdegames/carddecks/cards-konqi-modern/19.png
deleted file mode 100644
index 570e951e..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/2.png b/libkdegames/carddecks/cards-konqi-modern/2.png
deleted file mode 100644
index 89b2b4d5..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/20.png b/libkdegames/carddecks/cards-konqi-modern/20.png
deleted file mode 100644
index d4b47c7d..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/21.png b/libkdegames/carddecks/cards-konqi-modern/21.png
deleted file mode 100644
index 9ab04cc5..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/22.png b/libkdegames/carddecks/cards-konqi-modern/22.png
deleted file mode 100644
index 387c3203..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/23.png b/libkdegames/carddecks/cards-konqi-modern/23.png
deleted file mode 100644
index fcec2343..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/24.png b/libkdegames/carddecks/cards-konqi-modern/24.png
deleted file mode 100644
index 48c9ed02..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/25.png b/libkdegames/carddecks/cards-konqi-modern/25.png
deleted file mode 100644
index 80bbfdf1..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/26.png b/libkdegames/carddecks/cards-konqi-modern/26.png
deleted file mode 100644
index 2a879ec5..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/27.png b/libkdegames/carddecks/cards-konqi-modern/27.png
deleted file mode 100644
index 1e6141c0..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/28.png b/libkdegames/carddecks/cards-konqi-modern/28.png
deleted file mode 100644
index 1403437e..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/29.png b/libkdegames/carddecks/cards-konqi-modern/29.png
deleted file mode 100644
index 415b48cc..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/3.png b/libkdegames/carddecks/cards-konqi-modern/3.png
deleted file mode 100644
index 43067744..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/30.png b/libkdegames/carddecks/cards-konqi-modern/30.png
deleted file mode 100644
index 8a1b885d..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/31.png b/libkdegames/carddecks/cards-konqi-modern/31.png
deleted file mode 100644
index c7de49ed..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/32.png b/libkdegames/carddecks/cards-konqi-modern/32.png
deleted file mode 100644
index 57e0015f..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/33.png b/libkdegames/carddecks/cards-konqi-modern/33.png
deleted file mode 100644
index a502ae94..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/34.png b/libkdegames/carddecks/cards-konqi-modern/34.png
deleted file mode 100644
index 524768dc..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/35.png b/libkdegames/carddecks/cards-konqi-modern/35.png
deleted file mode 100644
index d15a240e..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/36.png b/libkdegames/carddecks/cards-konqi-modern/36.png
deleted file mode 100644
index b8dce3f8..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/37.png b/libkdegames/carddecks/cards-konqi-modern/37.png
deleted file mode 100644
index 2f193cc1..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/38.png b/libkdegames/carddecks/cards-konqi-modern/38.png
deleted file mode 100644
index 097d63ff..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/39.png b/libkdegames/carddecks/cards-konqi-modern/39.png
deleted file mode 100644
index a94a6009..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/4.png b/libkdegames/carddecks/cards-konqi-modern/4.png
deleted file mode 100644
index b4890c03..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/40.png b/libkdegames/carddecks/cards-konqi-modern/40.png
deleted file mode 100644
index d533469a..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/41.png b/libkdegames/carddecks/cards-konqi-modern/41.png
deleted file mode 100644
index f524f7ea..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/42.png b/libkdegames/carddecks/cards-konqi-modern/42.png
deleted file mode 100644
index 9e6ff5af..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/43.png b/libkdegames/carddecks/cards-konqi-modern/43.png
deleted file mode 100644
index 59e9e273..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/44.png b/libkdegames/carddecks/cards-konqi-modern/44.png
deleted file mode 100644
index a3114bd9..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/45.png b/libkdegames/carddecks/cards-konqi-modern/45.png
deleted file mode 100644
index 2614080b..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/46.png b/libkdegames/carddecks/cards-konqi-modern/46.png
deleted file mode 100644
index a3118981..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/47.png b/libkdegames/carddecks/cards-konqi-modern/47.png
deleted file mode 100644
index 423ec06e..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/48.png b/libkdegames/carddecks/cards-konqi-modern/48.png
deleted file mode 100644
index 5153c779..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/49.png b/libkdegames/carddecks/cards-konqi-modern/49.png
deleted file mode 100644
index 99f8ae96..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/5.png b/libkdegames/carddecks/cards-konqi-modern/5.png
deleted file mode 100644
index 5e167b1a..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/50.png b/libkdegames/carddecks/cards-konqi-modern/50.png
deleted file mode 100644
index a9c41757..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/51.png b/libkdegames/carddecks/cards-konqi-modern/51.png
deleted file mode 100644
index b322fc1b..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/52.png b/libkdegames/carddecks/cards-konqi-modern/52.png
deleted file mode 100644
index d614733f..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/6.png b/libkdegames/carddecks/cards-konqi-modern/6.png
deleted file mode 100644
index d614e646..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/7.png b/libkdegames/carddecks/cards-konqi-modern/7.png
deleted file mode 100644
index 961ac50f..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/8.png b/libkdegames/carddecks/cards-konqi-modern/8.png
deleted file mode 100644
index 1769d3db..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/9.png b/libkdegames/carddecks/cards-konqi-modern/9.png
deleted file mode 100644
index f86dcd48..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-konqi-modern/index.desktop b/libkdegames/carddecks/cards-konqi-modern/index.desktop
deleted file mode 100644
index 4dc5fe5c..00000000
--- a/libkdegames/carddecks/cards-konqi-modern/index.desktop
+++ /dev/null
@@ -1,62 +0,0 @@
-[KDE Backdeck]
-Name=Konqi
-Name[be]=Конкі
-Name[bg]=Конки
-Name[bn]=কনকি
-Name[cs]=Konqui
-Name[eo]=Konĉja
-Name[hi]=के-ऑन्गी
-Name[it]=Konqui
-Name[lv]=Konvi
-Name[ne]=कोन्क्वी
-Name[ru]=Конки
-Name[sr]=Конки
-Name[sr@Latn]=Konki
-Name[ta]=கான்கி
-Name[tg]=Конки
-Name[uk]=Конкі
-Name[zu]=I-Konqi
-Preview=11.png
-PySol=false
-Comment=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[bn]=আধুনিক কনকি - একটি পারিবারিক তাস খেলা\nডিজাইন: লরা লেল্যান্ড\n <l_layland@hotmail.com>\n Katie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nকনকি: স্টিফেন স্পাজ\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[bs]=Moderni Konqi - igrajte sa porodičnim špilom\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ca]=Konqi modern - jugueu amb la baralla familiar\nDisseny: Laura Layland\n <l_layland@hotmail.com>\nKatie per Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi per Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[cs]=Moderní Konqi - hrajte rodinnou hru\nNávrh: Laura Laylanda\n <l_layland@hotmail.com>\nKatie vytvořila Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqiho vytvořil Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[cy]=Set cerdiau cyfoes Konqi - chwarae yn erbyn y teulu\nDylunio:Laura Layland\n <l_layland@hotmail.com>\nKatie gan Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi gan Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[da]=Modern Konqi - spil familiekortspillet\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[de]=Modernes Konqi - Spielen Sie das Familienspiel\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie von Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi von Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[el]=Μοντέρνος Konqi - play the family θέμα καρτών\nΣχεδίαση: Laura Layland\n <l_layland@hotmail.com>\nKatie από Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi από Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[eo]=Moderna Konĉjo - ludu per la familiokartaro\nDesegno: Laura Layland\n <l_layland@hotmail.com>\nKonjo de Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonĉjo de Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[es]=Konqi moderno - juegue con la baraja familiar\nDiseño: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[et]=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[eu]=Konqi modernoa - kartetan jokatzeko\nDiseinua: Laura Layland\n <l_layland@hotmail.com>\nKatie-ren egilea: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi-ren egilea Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fa]=Konqi مدرن - بازی خانوادگی carddeck\nطرح: لورا \n لایلند <l_layland@hotmail.com>\nKatie توسط آگنیسکا زاکووسکا\n <agnieszka@imagegalaxy.de>\nKonqi توسط استفان اسپاتز\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fi]=Moderni Konqi - perheen korttipakka\nSuunnittelu: Laura Layland\n <l_layland@hotmail.com>a\nKatie Agnieszka Czajkowskaa\n <agnieszka@imagegalaxy.de>a\nKonqi Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fr]=Konqi moderne - pour jouer aux cartes\nConception : Laura Layland\n <l_layland@hotmail.com>\nKatie par Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi par Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[hr]=Suvremeni Konqi - obiteljska igra s kartama\nDizajn: Laura Layland\n <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[hu]=Modern Konqi - családi kártyacsomag\nTervezte: Laura Layland\n <l_layland@hotmail.com>\nKatie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi: Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[is]=Nútíma Konqi - spilastokkur fjölskyldunnar\nHönnun: Laura Layland\n <l_layland@hotmail.com>\nKatie e. Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi e. Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[it]=Konqui moderno - carte familiari\nDesign: Laura Layland\n<l_layland@hotmail.com>\nKatie di Agnieszka Czajkowska\n<agnieszka@imagegalaxy.de>\nKonqi di Stefan Spatz\n<stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ja]=モダン Konqi - ファミリ向けカードデッキ\nデザイン: Laura Layland\n <l_layland@hotmail.com>\nKatie の作者: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi の作者: Stefan Spatz \n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[lt]=Modern Konqi - žaisktie šeimos kortų žaidimą\nDizainas: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[lv]=Modernais Konkvi - spēlēt pie ģimenes kāršu galda\n Dizains: Laura Layland\n <l_layland@hotmail.com>\n Katie no Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\n Konkvi no Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[mk]=Модерен Konqi - играјте со семејниот шпил карти\nДизајн: Laura Layland\n<l_layland@hotmail.com>\nKatie од Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi од Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nb]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerxburg.de>
-Comment[nds]=Modern Konqi - Speel mit de Familienkoorten\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie vun Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi vun Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ne]=आधुनिक कोन्क्की - परिवारिक कार्डडेक \nडिजाइन प्ले: लाउरा लेल्यान्ड\n <l_layland@hotmail.com>\nKatie, अग्निज्का जज्कोस्काद्वारा\n <agnieszka@imagegalaxy.de>\nKonqi, स्टेफान स्पार्टजद्वारा \n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nl]=Modern Konqi - speel met de familie-kaartdek\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie door Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi door Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nn]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerxburg.de>
-Comment[pl]=Nowoczesny Konqi - zagraj w grę rodzinną\nProjekt: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie: Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>a\nKonqi: Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[pt]=Konqi Moderno - o baralho de cartas familiar\nConcepção: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[pt_BR]=Konqi Moderno - jogue com o baralho da família\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie por Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ru]=Современная колода с семейством Конки\nДизайн: Лаура Лейлэнд (Laura Layland) <l_layland@hotmail.com>\nКэйт нарисована Агниежкой Зайковской (Agnieszka Czajkowska) <agnieszka@imagegalaxy.de>\nКонки нарисован Штефаном Спартцом (Stefan Spatz) <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sk]=Moderný Konqi - hrajte rodinné kartové hry\nDesign: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie od Agnieszky Czajkowskeja\n <agnieszka@imagegalaxy.de>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sl]=Moderni Konqi - igrajte z družinskim kupom kart\nOblikovanje: Laura Laylanda\n <l_layland@hotmail.com>a\nKatie od Agnieszke Czajkowske\n <agnieszka@imagegalaxy.de>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sr]=Модеран Конки - играјте са породичним шпилом\nДизајн: Лора Лејленд (Laura Layland)\n <l_layland@hotmail.com>\nКети: Агњешка Чајковска (Agnieszka Czajkowska)\n <agnieszka@imagegalaxy.de>\nКонки: Штефан Шпац (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sr@Latn]=Moderan Konki - igrajte sa porodičnim špilom\nDizajn: Lora Lejlend (Laura Layland)\n <l_layland@hotmail.com>\nKeti: Agnješka Čajkovska (Agnieszka Czajkowska)\n <agnieszka@imagegalaxy.de>\nKonki: Štefan Špac (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sv]=Modern Konqi - spela familjens kortlek\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKatie av Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi av Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ta]=மார்டன் கான்கி - புதிய குடும்பச் சீட்டுத் தளத்தை விளையாடு\nவடிவமைப்பு: லெளரா லேலேண்டு\n <l_ayland@hotmail.com>\n Katie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[uk]=Сучасний Конкі - зіграйте у сімейні карти\nРозробка: Laura Laylanda\n <l_layland@hotmail.com>\nKatie від Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi від Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[wa]=Modiene Konqi - cwårdjeus des familes\nDessins: Laura Layland\n <l_layland@hotmail.com>\nKatie pa Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\nKonqi pa Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[zh_TW]=現代 Konqi - 玩家庭牌局\n設計︰Laura Layland...<l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska...<agnieszka@imagegalaxy.de>\nKonqi by Stefan Spatz...<stefan.spatz@stud-mail.uni-wuerzburg.de>
diff --git a/libkdegames/carddecks/cards-penguins/1.png b/libkdegames/carddecks/cards-penguins/1.png
deleted file mode 100644
index b59022e8..00000000
--- a/libkdegames/carddecks/cards-penguins/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/10.png b/libkdegames/carddecks/cards-penguins/10.png
deleted file mode 100644
index d54669fe..00000000
--- a/libkdegames/carddecks/cards-penguins/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/11.png b/libkdegames/carddecks/cards-penguins/11.png
deleted file mode 100644
index 02c2464c..00000000
--- a/libkdegames/carddecks/cards-penguins/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/12.png b/libkdegames/carddecks/cards-penguins/12.png
deleted file mode 100644
index d179eb99..00000000
--- a/libkdegames/carddecks/cards-penguins/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/13.png b/libkdegames/carddecks/cards-penguins/13.png
deleted file mode 100644
index 135af493..00000000
--- a/libkdegames/carddecks/cards-penguins/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/14.png b/libkdegames/carddecks/cards-penguins/14.png
deleted file mode 100644
index 4a179917..00000000
--- a/libkdegames/carddecks/cards-penguins/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/15.png b/libkdegames/carddecks/cards-penguins/15.png
deleted file mode 100644
index b5238d00..00000000
--- a/libkdegames/carddecks/cards-penguins/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/16.png b/libkdegames/carddecks/cards-penguins/16.png
deleted file mode 100644
index 33fe6b8e..00000000
--- a/libkdegames/carddecks/cards-penguins/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/17.png b/libkdegames/carddecks/cards-penguins/17.png
deleted file mode 100644
index 99b77ce8..00000000
--- a/libkdegames/carddecks/cards-penguins/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/18.png b/libkdegames/carddecks/cards-penguins/18.png
deleted file mode 100644
index b88ae958..00000000
--- a/libkdegames/carddecks/cards-penguins/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/19.png b/libkdegames/carddecks/cards-penguins/19.png
deleted file mode 100644
index 532899aa..00000000
--- a/libkdegames/carddecks/cards-penguins/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/2.png b/libkdegames/carddecks/cards-penguins/2.png
deleted file mode 100644
index 090cfd02..00000000
--- a/libkdegames/carddecks/cards-penguins/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/20.png b/libkdegames/carddecks/cards-penguins/20.png
deleted file mode 100644
index ed129a32..00000000
--- a/libkdegames/carddecks/cards-penguins/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/21.png b/libkdegames/carddecks/cards-penguins/21.png
deleted file mode 100644
index 5bf532f7..00000000
--- a/libkdegames/carddecks/cards-penguins/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/22.png b/libkdegames/carddecks/cards-penguins/22.png
deleted file mode 100644
index 07c61ced..00000000
--- a/libkdegames/carddecks/cards-penguins/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/23.png b/libkdegames/carddecks/cards-penguins/23.png
deleted file mode 100644
index ecce302b..00000000
--- a/libkdegames/carddecks/cards-penguins/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/24.png b/libkdegames/carddecks/cards-penguins/24.png
deleted file mode 100644
index feee0a9e..00000000
--- a/libkdegames/carddecks/cards-penguins/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/25.png b/libkdegames/carddecks/cards-penguins/25.png
deleted file mode 100644
index d42f2b2b..00000000
--- a/libkdegames/carddecks/cards-penguins/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/26.png b/libkdegames/carddecks/cards-penguins/26.png
deleted file mode 100644
index cc5e930f..00000000
--- a/libkdegames/carddecks/cards-penguins/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/27.png b/libkdegames/carddecks/cards-penguins/27.png
deleted file mode 100644
index 4ae7702a..00000000
--- a/libkdegames/carddecks/cards-penguins/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/28.png b/libkdegames/carddecks/cards-penguins/28.png
deleted file mode 100644
index ee9b40ea..00000000
--- a/libkdegames/carddecks/cards-penguins/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/29.png b/libkdegames/carddecks/cards-penguins/29.png
deleted file mode 100644
index ba2dfe7d..00000000
--- a/libkdegames/carddecks/cards-penguins/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/3.png b/libkdegames/carddecks/cards-penguins/3.png
deleted file mode 100644
index 7f53daf9..00000000
--- a/libkdegames/carddecks/cards-penguins/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/30.png b/libkdegames/carddecks/cards-penguins/30.png
deleted file mode 100644
index 1486cf98..00000000
--- a/libkdegames/carddecks/cards-penguins/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/31.png b/libkdegames/carddecks/cards-penguins/31.png
deleted file mode 100644
index 805d39e9..00000000
--- a/libkdegames/carddecks/cards-penguins/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/32.png b/libkdegames/carddecks/cards-penguins/32.png
deleted file mode 100644
index 4a1b12f0..00000000
--- a/libkdegames/carddecks/cards-penguins/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/33.png b/libkdegames/carddecks/cards-penguins/33.png
deleted file mode 100644
index b8ae8965..00000000
--- a/libkdegames/carddecks/cards-penguins/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/34.png b/libkdegames/carddecks/cards-penguins/34.png
deleted file mode 100644
index e2ce160c..00000000
--- a/libkdegames/carddecks/cards-penguins/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/35.png b/libkdegames/carddecks/cards-penguins/35.png
deleted file mode 100644
index 580c4d12..00000000
--- a/libkdegames/carddecks/cards-penguins/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/36.png b/libkdegames/carddecks/cards-penguins/36.png
deleted file mode 100644
index 296d4c7c..00000000
--- a/libkdegames/carddecks/cards-penguins/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/37.png b/libkdegames/carddecks/cards-penguins/37.png
deleted file mode 100644
index fbbefa84..00000000
--- a/libkdegames/carddecks/cards-penguins/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/38.png b/libkdegames/carddecks/cards-penguins/38.png
deleted file mode 100644
index 7d9a34bd..00000000
--- a/libkdegames/carddecks/cards-penguins/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/39.png b/libkdegames/carddecks/cards-penguins/39.png
deleted file mode 100644
index 23ffffaa..00000000
--- a/libkdegames/carddecks/cards-penguins/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/4.png b/libkdegames/carddecks/cards-penguins/4.png
deleted file mode 100644
index 79ced119..00000000
--- a/libkdegames/carddecks/cards-penguins/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/40.png b/libkdegames/carddecks/cards-penguins/40.png
deleted file mode 100644
index b9bed320..00000000
--- a/libkdegames/carddecks/cards-penguins/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/41.png b/libkdegames/carddecks/cards-penguins/41.png
deleted file mode 100644
index c5a65385..00000000
--- a/libkdegames/carddecks/cards-penguins/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/42.png b/libkdegames/carddecks/cards-penguins/42.png
deleted file mode 100644
index aba32e3e..00000000
--- a/libkdegames/carddecks/cards-penguins/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/43.png b/libkdegames/carddecks/cards-penguins/43.png
deleted file mode 100644
index 04623c1e..00000000
--- a/libkdegames/carddecks/cards-penguins/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/44.png b/libkdegames/carddecks/cards-penguins/44.png
deleted file mode 100644
index 7e6069e6..00000000
--- a/libkdegames/carddecks/cards-penguins/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/45.png b/libkdegames/carddecks/cards-penguins/45.png
deleted file mode 100644
index 36b67487..00000000
--- a/libkdegames/carddecks/cards-penguins/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/46.png b/libkdegames/carddecks/cards-penguins/46.png
deleted file mode 100644
index 80216f18..00000000
--- a/libkdegames/carddecks/cards-penguins/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/47.png b/libkdegames/carddecks/cards-penguins/47.png
deleted file mode 100644
index 9fb16882..00000000
--- a/libkdegames/carddecks/cards-penguins/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/48.png b/libkdegames/carddecks/cards-penguins/48.png
deleted file mode 100644
index 12f928e6..00000000
--- a/libkdegames/carddecks/cards-penguins/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/49.png b/libkdegames/carddecks/cards-penguins/49.png
deleted file mode 100644
index 9119c351..00000000
--- a/libkdegames/carddecks/cards-penguins/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/5.png b/libkdegames/carddecks/cards-penguins/5.png
deleted file mode 100644
index f18a3a57..00000000
--- a/libkdegames/carddecks/cards-penguins/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/50.png b/libkdegames/carddecks/cards-penguins/50.png
deleted file mode 100644
index e3dacdba..00000000
--- a/libkdegames/carddecks/cards-penguins/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/51.png b/libkdegames/carddecks/cards-penguins/51.png
deleted file mode 100644
index fa46ff72..00000000
--- a/libkdegames/carddecks/cards-penguins/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/52.png b/libkdegames/carddecks/cards-penguins/52.png
deleted file mode 100644
index 1522ed3f..00000000
--- a/libkdegames/carddecks/cards-penguins/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/6.png b/libkdegames/carddecks/cards-penguins/6.png
deleted file mode 100644
index 9d84eb8d..00000000
--- a/libkdegames/carddecks/cards-penguins/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/7.png b/libkdegames/carddecks/cards-penguins/7.png
deleted file mode 100644
index 2b8d0768..00000000
--- a/libkdegames/carddecks/cards-penguins/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/8.png b/libkdegames/carddecks/cards-penguins/8.png
deleted file mode 100644
index 933be6e7..00000000
--- a/libkdegames/carddecks/cards-penguins/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/9.png b/libkdegames/carddecks/cards-penguins/9.png
deleted file mode 100644
index 669d6e00..00000000
--- a/libkdegames/carddecks/cards-penguins/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-penguins/COPYRIGHT b/libkdegames/carddecks/cards-penguins/COPYRIGHT
deleted file mode 100644
index cf87594e..00000000
--- a/libkdegames/carddecks/cards-penguins/COPYRIGHT
+++ /dev/null
@@ -1,10 +0,0 @@
-This PySol cardset was adapted from the Ace of Penguins 1.0.
-http://www.delorie.com/store/ace/
-
-Copyright (C) 1998 DJ Delorie <dj@delorie.com>
-Copyright (C) 1998 Markus F.X.J. Oberhumer <markus.oberhumer@jk.uni-linz.ac.at>
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-penguins/index.desktop b/libkdegames/carddecks/cards-penguins/index.desktop
deleted file mode 100644
index 2fe12197..00000000
--- a/libkdegames/carddecks/cards-penguins/index.desktop
+++ /dev/null
@@ -1,67 +0,0 @@
-[KDE Backdeck]
-Name=Penguins
-Name[af]=Pikkewyne
-Name[ar]=بطاريق
-Name[az]=Pinqvinlər
-Name[be]=Пінгвіны
-Name[bg]=Пингвин
-Name[bn]=পেঙ্গুইন
-Name[br]=Pennoù-gwenn
-Name[bs]=Pingvini
-Name[ca]=Pingüins
-Name[cs]=Tučňáci
-Name[da]=Pingviner
-Name[de]=Pinguine
-Name[el]=Πιγκουίνοι
-Name[eo]=Pingvenoj
-Name[es]=Pingüinos
-Name[et]=Pingviinid
-Name[eu]=Pinguinoak
-Name[fa]=پنگوئنها
-Name[fi]=Pingviinit
-Name[fr]=Pingouins
-Name[gl]=Pingüíns
-Name[he]=פנגוינים
-Name[hi]=पेंग्विन्स
-Name[hr]=Pingvini
-Name[hu]=Pingvinek
-Name[is]=Mörgæsir
-Name[it]=Pinguini
-Name[km]=ភេនឃ្វីន
-Name[ko]=펭귄
-Name[lt]=Pingvinai
-Name[lv]=Pingvīni
-Name[mk]=Пингвини
-Name[mt]=Pingwini
-Name[nb]=Pingviner
-Name[nds]=Pinguins
-Name[ne]=पेन्गुइन
-Name[nl]=Pinguïns
-Name[nn]=Pingvinar
-Name[pa]=ਪੈਂਗੂਇਨ
-Name[pl]=Pingwiny
-Name[pt]=Pinguins
-Name[pt_BR]=Pingüins
-Name[ro]=Pinguini
-Name[ru]=Пингвины
-Name[se]=Pingviinnat
-Name[sk]=Tučniaci
-Name[sl]=Pingvini
-Name[sr]=Пингвини
-Name[sr@Latn]=Pingvini
-Name[sv]=Pingviner
-Name[ta]=பென்குயின்கள்
-Name[tg]=Пингвинҳо
-Name[th]=เพนกวิน
-Name[tr]=Penguenler
-Name[uk]=Пінгвіни
-Name[uz]=Pingvinlar
-Name[uz@cyrillic]=Пингвинлар
-Name[vi]=Chim cánh cụt
-Name[wa]=Pingwins
-Name[xh]=iintaka zaselwandle
-Name[zh_CN]=企鹅
-Name[zh_TW]=企鵝
-Name[zu]=Izinyoni zasemanzini
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-spaced/1.png b/libkdegames/carddecks/cards-spaced/1.png
deleted file mode 100644
index 62220b38..00000000
--- a/libkdegames/carddecks/cards-spaced/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/10.png b/libkdegames/carddecks/cards-spaced/10.png
deleted file mode 100644
index d0bcd828..00000000
--- a/libkdegames/carddecks/cards-spaced/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/11.png b/libkdegames/carddecks/cards-spaced/11.png
deleted file mode 100644
index b4e6016e..00000000
--- a/libkdegames/carddecks/cards-spaced/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/12.png b/libkdegames/carddecks/cards-spaced/12.png
deleted file mode 100644
index 45ab5cf5..00000000
--- a/libkdegames/carddecks/cards-spaced/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/13.png b/libkdegames/carddecks/cards-spaced/13.png
deleted file mode 100644
index 37e7c2ce..00000000
--- a/libkdegames/carddecks/cards-spaced/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/14.png b/libkdegames/carddecks/cards-spaced/14.png
deleted file mode 100644
index 97af1f02..00000000
--- a/libkdegames/carddecks/cards-spaced/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/15.png b/libkdegames/carddecks/cards-spaced/15.png
deleted file mode 100644
index fb2fcc76..00000000
--- a/libkdegames/carddecks/cards-spaced/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/16.png b/libkdegames/carddecks/cards-spaced/16.png
deleted file mode 100644
index 9042b161..00000000
--- a/libkdegames/carddecks/cards-spaced/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/17.png b/libkdegames/carddecks/cards-spaced/17.png
deleted file mode 100644
index a67b2832..00000000
--- a/libkdegames/carddecks/cards-spaced/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/18.png b/libkdegames/carddecks/cards-spaced/18.png
deleted file mode 100644
index f4c8a04b..00000000
--- a/libkdegames/carddecks/cards-spaced/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/19.png b/libkdegames/carddecks/cards-spaced/19.png
deleted file mode 100644
index fac5b199..00000000
--- a/libkdegames/carddecks/cards-spaced/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/2.png b/libkdegames/carddecks/cards-spaced/2.png
deleted file mode 100644
index af3c76fd..00000000
--- a/libkdegames/carddecks/cards-spaced/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/20.png b/libkdegames/carddecks/cards-spaced/20.png
deleted file mode 100644
index 12d43520..00000000
--- a/libkdegames/carddecks/cards-spaced/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/21.png b/libkdegames/carddecks/cards-spaced/21.png
deleted file mode 100644
index ea715adc..00000000
--- a/libkdegames/carddecks/cards-spaced/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/22.png b/libkdegames/carddecks/cards-spaced/22.png
deleted file mode 100644
index 13e6d7ae..00000000
--- a/libkdegames/carddecks/cards-spaced/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/23.png b/libkdegames/carddecks/cards-spaced/23.png
deleted file mode 100644
index f43a745f..00000000
--- a/libkdegames/carddecks/cards-spaced/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/24.png b/libkdegames/carddecks/cards-spaced/24.png
deleted file mode 100644
index 810f59ef..00000000
--- a/libkdegames/carddecks/cards-spaced/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/25.png b/libkdegames/carddecks/cards-spaced/25.png
deleted file mode 100644
index 836b9863..00000000
--- a/libkdegames/carddecks/cards-spaced/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/26.png b/libkdegames/carddecks/cards-spaced/26.png
deleted file mode 100644
index 27bc29bf..00000000
--- a/libkdegames/carddecks/cards-spaced/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/27.png b/libkdegames/carddecks/cards-spaced/27.png
deleted file mode 100644
index a44baa51..00000000
--- a/libkdegames/carddecks/cards-spaced/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/28.png b/libkdegames/carddecks/cards-spaced/28.png
deleted file mode 100644
index af480ddd..00000000
--- a/libkdegames/carddecks/cards-spaced/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/29.png b/libkdegames/carddecks/cards-spaced/29.png
deleted file mode 100644
index 622968f4..00000000
--- a/libkdegames/carddecks/cards-spaced/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/3.png b/libkdegames/carddecks/cards-spaced/3.png
deleted file mode 100644
index 5b31e13b..00000000
--- a/libkdegames/carddecks/cards-spaced/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/30.png b/libkdegames/carddecks/cards-spaced/30.png
deleted file mode 100644
index e43e9bd0..00000000
--- a/libkdegames/carddecks/cards-spaced/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/31.png b/libkdegames/carddecks/cards-spaced/31.png
deleted file mode 100644
index 382d0c11..00000000
--- a/libkdegames/carddecks/cards-spaced/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/32.png b/libkdegames/carddecks/cards-spaced/32.png
deleted file mode 100644
index 969e921d..00000000
--- a/libkdegames/carddecks/cards-spaced/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/33.png b/libkdegames/carddecks/cards-spaced/33.png
deleted file mode 100644
index e9dbd109..00000000
--- a/libkdegames/carddecks/cards-spaced/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/34.png b/libkdegames/carddecks/cards-spaced/34.png
deleted file mode 100644
index 49d26d66..00000000
--- a/libkdegames/carddecks/cards-spaced/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/35.png b/libkdegames/carddecks/cards-spaced/35.png
deleted file mode 100644
index f60149e5..00000000
--- a/libkdegames/carddecks/cards-spaced/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/36.png b/libkdegames/carddecks/cards-spaced/36.png
deleted file mode 100644
index 49b7044a..00000000
--- a/libkdegames/carddecks/cards-spaced/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/37.png b/libkdegames/carddecks/cards-spaced/37.png
deleted file mode 100644
index dafb3402..00000000
--- a/libkdegames/carddecks/cards-spaced/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/38.png b/libkdegames/carddecks/cards-spaced/38.png
deleted file mode 100644
index f1d7e030..00000000
--- a/libkdegames/carddecks/cards-spaced/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/39.png b/libkdegames/carddecks/cards-spaced/39.png
deleted file mode 100644
index 8e045381..00000000
--- a/libkdegames/carddecks/cards-spaced/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/4.png b/libkdegames/carddecks/cards-spaced/4.png
deleted file mode 100644
index e8ceab32..00000000
--- a/libkdegames/carddecks/cards-spaced/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/40.png b/libkdegames/carddecks/cards-spaced/40.png
deleted file mode 100644
index de378577..00000000
--- a/libkdegames/carddecks/cards-spaced/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/41.png b/libkdegames/carddecks/cards-spaced/41.png
deleted file mode 100644
index 0e4f3382..00000000
--- a/libkdegames/carddecks/cards-spaced/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/42.png b/libkdegames/carddecks/cards-spaced/42.png
deleted file mode 100644
index 910524a2..00000000
--- a/libkdegames/carddecks/cards-spaced/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/43.png b/libkdegames/carddecks/cards-spaced/43.png
deleted file mode 100644
index f9f218bf..00000000
--- a/libkdegames/carddecks/cards-spaced/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/44.png b/libkdegames/carddecks/cards-spaced/44.png
deleted file mode 100644
index fe64a155..00000000
--- a/libkdegames/carddecks/cards-spaced/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/45.png b/libkdegames/carddecks/cards-spaced/45.png
deleted file mode 100644
index d914f7b1..00000000
--- a/libkdegames/carddecks/cards-spaced/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/46.png b/libkdegames/carddecks/cards-spaced/46.png
deleted file mode 100644
index f6953f9d..00000000
--- a/libkdegames/carddecks/cards-spaced/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/47.png b/libkdegames/carddecks/cards-spaced/47.png
deleted file mode 100644
index bfaa56ff..00000000
--- a/libkdegames/carddecks/cards-spaced/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/48.png b/libkdegames/carddecks/cards-spaced/48.png
deleted file mode 100644
index b5d46c34..00000000
--- a/libkdegames/carddecks/cards-spaced/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/49.png b/libkdegames/carddecks/cards-spaced/49.png
deleted file mode 100644
index f890b5db..00000000
--- a/libkdegames/carddecks/cards-spaced/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/5.png b/libkdegames/carddecks/cards-spaced/5.png
deleted file mode 100644
index e160f9b3..00000000
--- a/libkdegames/carddecks/cards-spaced/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/50.png b/libkdegames/carddecks/cards-spaced/50.png
deleted file mode 100644
index 488eb5fa..00000000
--- a/libkdegames/carddecks/cards-spaced/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/51.png b/libkdegames/carddecks/cards-spaced/51.png
deleted file mode 100644
index 4d1f41b0..00000000
--- a/libkdegames/carddecks/cards-spaced/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/52.png b/libkdegames/carddecks/cards-spaced/52.png
deleted file mode 100644
index 345579f4..00000000
--- a/libkdegames/carddecks/cards-spaced/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/6.png b/libkdegames/carddecks/cards-spaced/6.png
deleted file mode 100644
index 90e8e998..00000000
--- a/libkdegames/carddecks/cards-spaced/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/7.png b/libkdegames/carddecks/cards-spaced/7.png
deleted file mode 100644
index 374ee771..00000000
--- a/libkdegames/carddecks/cards-spaced/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/8.png b/libkdegames/carddecks/cards-spaced/8.png
deleted file mode 100644
index 987a24c6..00000000
--- a/libkdegames/carddecks/cards-spaced/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/9.png b/libkdegames/carddecks/cards-spaced/9.png
deleted file mode 100644
index f2855e9f..00000000
--- a/libkdegames/carddecks/cards-spaced/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-spaced/COPYRIGHT b/libkdegames/carddecks/cards-spaced/COPYRIGHT
deleted file mode 100644
index f54e3a4e..00000000
--- a/libkdegames/carddecks/cards-spaced/COPYRIGHT
+++ /dev/null
@@ -1,16 +0,0 @@
-The backs for these cards came from the U.S. National Aeronautics
-and Space Administration. The original images can be found at:
-http://antwrp.gsfc.nasa.gov/apod/archivepix.html
-along with a lot more just like 'em.
-
-The penguins are by "The PAPA" <papalini@biancaneve.ing.unifi.it>
-and can be found at:
-http://biancaneve.ing.unifi.it/~papalini/
-and there's a lot more of those too.
-
-Copyright (C) 1999 T. Kirk <grania@mailcity.com>
-
-This card set is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-spaced/index.desktop b/libkdegames/carddecks/cards-spaced/index.desktop
deleted file mode 100644
index 0e9eadf0..00000000
--- a/libkdegames/carddecks/cards-spaced/index.desktop
+++ /dev/null
@@ -1,46 +0,0 @@
-[KDE Backdeck]
-Name=Spaced
-Name[af]=Gespasieer
-Name[az]=Boşluqlu
-Name[be]=Космас
-Name[bg]=Звезден
-Name[bn]=স্পেসযুক্ত
-Name[ca]=Espaiades
-Name[cs]=Vesmír
-Name[de]=Mit Abstand
-Name[eo]=Komika
-Name[es]=Espaciadas
-Name[eu]=Tartea
-Name[fr]=Spatial
-Name[gl]=Espaciadas
-Name[hi]=स्पेस्ड
-Name[hu]=Űr
-Name[is]=Speisað
-Name[it]=Spaziale
-Name[ko]=우주
-Name[lv]=Kosmisks
-Name[mk]=Раздалечени
-Name[mt]=Spazzjat
-Name[nb]=Rom-duell
-Name[nds]=Afstand
-Name[ne]=खाली स्थान
-Name[nl]=Ruimtelijk
-Name[nso]=Beetswe Sekgoba
-Name[pl]=Przestrzenny
-Name[pt]=Espacial
-Name[pt_BR]=Espaçado
-Name[ro]=Spaţiat
-Name[ru]=Космос
-Name[sl]=Vesoljski dvoboj
-Name[sr]=Размакнут
-Name[sr@Latn]=Razmaknut
-Name[sv]=Spejsad
-Name[ta]=இடம் விடப்பட்ட
-Name[tg]=Кайҳонӣ
-Name[tr]=Boşluklu
-Name[uk]=Космічний
-Name[ven]=Hu na zwikala
-Name[xh]=ukugqagqeneyo
-Name[zu]=Kunezikhala
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-warwick/0.png b/libkdegames/carddecks/cards-warwick/0.png
deleted file mode 100644
index e8fc5c76..00000000
--- a/libkdegames/carddecks/cards-warwick/0.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/1.png b/libkdegames/carddecks/cards-warwick/1.png
deleted file mode 100644
index 79fc960c..00000000
--- a/libkdegames/carddecks/cards-warwick/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/10.png b/libkdegames/carddecks/cards-warwick/10.png
deleted file mode 100644
index 9b459b5c..00000000
--- a/libkdegames/carddecks/cards-warwick/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/105.png b/libkdegames/carddecks/cards-warwick/105.png
deleted file mode 100644
index 0f49bdd9..00000000
--- a/libkdegames/carddecks/cards-warwick/105.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/106.png b/libkdegames/carddecks/cards-warwick/106.png
deleted file mode 100644
index 4e2371c1..00000000
--- a/libkdegames/carddecks/cards-warwick/106.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/107.png b/libkdegames/carddecks/cards-warwick/107.png
deleted file mode 100644
index c7a19052..00000000
--- a/libkdegames/carddecks/cards-warwick/107.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/108.png b/libkdegames/carddecks/cards-warwick/108.png
deleted file mode 100644
index 09ee0a0a..00000000
--- a/libkdegames/carddecks/cards-warwick/108.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/109.png b/libkdegames/carddecks/cards-warwick/109.png
deleted file mode 100644
index a48b134c..00000000
--- a/libkdegames/carddecks/cards-warwick/109.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/11.png b/libkdegames/carddecks/cards-warwick/11.png
deleted file mode 100644
index a78f94b7..00000000
--- a/libkdegames/carddecks/cards-warwick/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/110.png b/libkdegames/carddecks/cards-warwick/110.png
deleted file mode 100644
index 2a3fccd9..00000000
--- a/libkdegames/carddecks/cards-warwick/110.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/111.png b/libkdegames/carddecks/cards-warwick/111.png
deleted file mode 100644
index 20c9f0f9..00000000
--- a/libkdegames/carddecks/cards-warwick/111.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/112.png b/libkdegames/carddecks/cards-warwick/112.png
deleted file mode 100644
index 90935873..00000000
--- a/libkdegames/carddecks/cards-warwick/112.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/113.png b/libkdegames/carddecks/cards-warwick/113.png
deleted file mode 100644
index 7df5d9b1..00000000
--- a/libkdegames/carddecks/cards-warwick/113.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/114.png b/libkdegames/carddecks/cards-warwick/114.png
deleted file mode 100644
index 062ae319..00000000
--- a/libkdegames/carddecks/cards-warwick/114.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/115.png b/libkdegames/carddecks/cards-warwick/115.png
deleted file mode 100644
index fd4b83b4..00000000
--- a/libkdegames/carddecks/cards-warwick/115.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/116.png b/libkdegames/carddecks/cards-warwick/116.png
deleted file mode 100644
index 7f1c0dcd..00000000
--- a/libkdegames/carddecks/cards-warwick/116.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/12.png b/libkdegames/carddecks/cards-warwick/12.png
deleted file mode 100644
index 41d93ef2..00000000
--- a/libkdegames/carddecks/cards-warwick/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/13.png b/libkdegames/carddecks/cards-warwick/13.png
deleted file mode 100644
index b990c512..00000000
--- a/libkdegames/carddecks/cards-warwick/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/14.png b/libkdegames/carddecks/cards-warwick/14.png
deleted file mode 100644
index 45b94a15..00000000
--- a/libkdegames/carddecks/cards-warwick/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/15.png b/libkdegames/carddecks/cards-warwick/15.png
deleted file mode 100644
index 46c1f3f6..00000000
--- a/libkdegames/carddecks/cards-warwick/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/16.png b/libkdegames/carddecks/cards-warwick/16.png
deleted file mode 100644
index d8d118f9..00000000
--- a/libkdegames/carddecks/cards-warwick/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/17.png b/libkdegames/carddecks/cards-warwick/17.png
deleted file mode 100644
index e6e0aa93..00000000
--- a/libkdegames/carddecks/cards-warwick/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/18.png b/libkdegames/carddecks/cards-warwick/18.png
deleted file mode 100644
index eb84255b..00000000
--- a/libkdegames/carddecks/cards-warwick/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/19.png b/libkdegames/carddecks/cards-warwick/19.png
deleted file mode 100644
index 88d4d6d9..00000000
--- a/libkdegames/carddecks/cards-warwick/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/2.png b/libkdegames/carddecks/cards-warwick/2.png
deleted file mode 100644
index 98e798a1..00000000
--- a/libkdegames/carddecks/cards-warwick/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/20.png b/libkdegames/carddecks/cards-warwick/20.png
deleted file mode 100644
index 4f75de50..00000000
--- a/libkdegames/carddecks/cards-warwick/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/21.png b/libkdegames/carddecks/cards-warwick/21.png
deleted file mode 100644
index 39bba2f2..00000000
--- a/libkdegames/carddecks/cards-warwick/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/22.png b/libkdegames/carddecks/cards-warwick/22.png
deleted file mode 100644
index 733c396d..00000000
--- a/libkdegames/carddecks/cards-warwick/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/23.png b/libkdegames/carddecks/cards-warwick/23.png
deleted file mode 100644
index ab00c341..00000000
--- a/libkdegames/carddecks/cards-warwick/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/24.png b/libkdegames/carddecks/cards-warwick/24.png
deleted file mode 100644
index eeb73bdd..00000000
--- a/libkdegames/carddecks/cards-warwick/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/25.png b/libkdegames/carddecks/cards-warwick/25.png
deleted file mode 100644
index 25715b2f..00000000
--- a/libkdegames/carddecks/cards-warwick/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/26.png b/libkdegames/carddecks/cards-warwick/26.png
deleted file mode 100644
index e248ded1..00000000
--- a/libkdegames/carddecks/cards-warwick/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/27.png b/libkdegames/carddecks/cards-warwick/27.png
deleted file mode 100644
index 1bb2ab90..00000000
--- a/libkdegames/carddecks/cards-warwick/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/28.png b/libkdegames/carddecks/cards-warwick/28.png
deleted file mode 100644
index 33085ffb..00000000
--- a/libkdegames/carddecks/cards-warwick/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/29.png b/libkdegames/carddecks/cards-warwick/29.png
deleted file mode 100644
index 3f15d8d9..00000000
--- a/libkdegames/carddecks/cards-warwick/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/3.png b/libkdegames/carddecks/cards-warwick/3.png
deleted file mode 100644
index 7f298774..00000000
--- a/libkdegames/carddecks/cards-warwick/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/30.png b/libkdegames/carddecks/cards-warwick/30.png
deleted file mode 100644
index ce1f2dd9..00000000
--- a/libkdegames/carddecks/cards-warwick/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/31.png b/libkdegames/carddecks/cards-warwick/31.png
deleted file mode 100644
index fadee1b1..00000000
--- a/libkdegames/carddecks/cards-warwick/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/32.png b/libkdegames/carddecks/cards-warwick/32.png
deleted file mode 100644
index 4d4391d2..00000000
--- a/libkdegames/carddecks/cards-warwick/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/33.png b/libkdegames/carddecks/cards-warwick/33.png
deleted file mode 100644
index 7d1a106f..00000000
--- a/libkdegames/carddecks/cards-warwick/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/34.png b/libkdegames/carddecks/cards-warwick/34.png
deleted file mode 100644
index 8d2197e7..00000000
--- a/libkdegames/carddecks/cards-warwick/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/35.png b/libkdegames/carddecks/cards-warwick/35.png
deleted file mode 100644
index e8f5789d..00000000
--- a/libkdegames/carddecks/cards-warwick/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/36.png b/libkdegames/carddecks/cards-warwick/36.png
deleted file mode 100644
index 32bd75b8..00000000
--- a/libkdegames/carddecks/cards-warwick/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/37.png b/libkdegames/carddecks/cards-warwick/37.png
deleted file mode 100644
index 8a85b206..00000000
--- a/libkdegames/carddecks/cards-warwick/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/38.png b/libkdegames/carddecks/cards-warwick/38.png
deleted file mode 100644
index edc98fa9..00000000
--- a/libkdegames/carddecks/cards-warwick/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/39.png b/libkdegames/carddecks/cards-warwick/39.png
deleted file mode 100644
index 6ac9b1ab..00000000
--- a/libkdegames/carddecks/cards-warwick/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/4.png b/libkdegames/carddecks/cards-warwick/4.png
deleted file mode 100644
index ba94daeb..00000000
--- a/libkdegames/carddecks/cards-warwick/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/40.png b/libkdegames/carddecks/cards-warwick/40.png
deleted file mode 100644
index 046f281e..00000000
--- a/libkdegames/carddecks/cards-warwick/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/41.png b/libkdegames/carddecks/cards-warwick/41.png
deleted file mode 100644
index 278f7242..00000000
--- a/libkdegames/carddecks/cards-warwick/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/42.png b/libkdegames/carddecks/cards-warwick/42.png
deleted file mode 100644
index e0c8857d..00000000
--- a/libkdegames/carddecks/cards-warwick/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/43.png b/libkdegames/carddecks/cards-warwick/43.png
deleted file mode 100644
index 126b5d8e..00000000
--- a/libkdegames/carddecks/cards-warwick/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/44.png b/libkdegames/carddecks/cards-warwick/44.png
deleted file mode 100644
index 220f6e45..00000000
--- a/libkdegames/carddecks/cards-warwick/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/45.png b/libkdegames/carddecks/cards-warwick/45.png
deleted file mode 100644
index 0a5742e1..00000000
--- a/libkdegames/carddecks/cards-warwick/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/46.png b/libkdegames/carddecks/cards-warwick/46.png
deleted file mode 100644
index f4312a3b..00000000
--- a/libkdegames/carddecks/cards-warwick/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/47.png b/libkdegames/carddecks/cards-warwick/47.png
deleted file mode 100644
index a4495a2e..00000000
--- a/libkdegames/carddecks/cards-warwick/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/48.png b/libkdegames/carddecks/cards-warwick/48.png
deleted file mode 100644
index 039755f8..00000000
--- a/libkdegames/carddecks/cards-warwick/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/49.png b/libkdegames/carddecks/cards-warwick/49.png
deleted file mode 100644
index dd7b9779..00000000
--- a/libkdegames/carddecks/cards-warwick/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/5.png b/libkdegames/carddecks/cards-warwick/5.png
deleted file mode 100644
index d881d1a8..00000000
--- a/libkdegames/carddecks/cards-warwick/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/50.png b/libkdegames/carddecks/cards-warwick/50.png
deleted file mode 100644
index 5840d1a7..00000000
--- a/libkdegames/carddecks/cards-warwick/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/51.png b/libkdegames/carddecks/cards-warwick/51.png
deleted file mode 100644
index 04628627..00000000
--- a/libkdegames/carddecks/cards-warwick/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/52.png b/libkdegames/carddecks/cards-warwick/52.png
deleted file mode 100644
index 07efb60a..00000000
--- a/libkdegames/carddecks/cards-warwick/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/6.png b/libkdegames/carddecks/cards-warwick/6.png
deleted file mode 100644
index dbe64d0a..00000000
--- a/libkdegames/carddecks/cards-warwick/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/7.png b/libkdegames/carddecks/cards-warwick/7.png
deleted file mode 100644
index 16176ad2..00000000
--- a/libkdegames/carddecks/cards-warwick/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/8.png b/libkdegames/carddecks/cards-warwick/8.png
deleted file mode 100644
index f62b3441..00000000
--- a/libkdegames/carddecks/cards-warwick/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/9.png b/libkdegames/carddecks/cards-warwick/9.png
deleted file mode 100644
index a773d309..00000000
--- a/libkdegames/carddecks/cards-warwick/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-warwick/index.desktop b/libkdegames/carddecks/cards-warwick/index.desktop
deleted file mode 100644
index 042b6f1b..00000000
--- a/libkdegames/carddecks/cards-warwick/index.desktop
+++ /dev/null
@@ -1,126 +0,0 @@
-[KDE Backdeck]
-Name=Blue Balloon
-Name[af]=Blou Ballon
-Name[ar]=بالون أزرق
-Name[az]=Göy Balon
-Name[be]=Паветраны шар
-Name[bg]=Син балон
-Name[bn]=নীল বেলুন
-Name[br]=Boull glas
-Name[bs]=Plavi balon
-Name[ca]=Pilota blava
-Name[cs]=Modrý balón
-Name[cy]=Balwn Glas
-Name[da]=Blå ballon
-Name[de]=Blauer Ballon
-Name[el]=Μπλε μπαλόνι
-Name[eo]=Blua balono
-Name[es]=Globo azul
-Name[et]=Sinine õhupall
-Name[eu]=Globo urdina
-Name[fi]=Sininen pallo
-Name[fr]=Ballon bleu
-Name[gl]=Globo azul
-Name[he]=בלון כחול
-Name[hi]=ब्लू बलून
-Name[hr]=Plavi balon
-Name[hu]=Kék léggömb
-Name[is]=Blá blaðra
-Name[it]=Pallone blu
-Name[ja]=青風船
-Name[km]=បាល់​ខៀវ
-Name[ko]=파란 풍선
-Name[lt]=Mėlynas balionas
-Name[lv]=Zili baloni
-Name[mk]=Син балон
-Name[mt]=Bużżieqa Blu
-Name[nb]=Blå ballong
-Name[nds]=Blaag Ballon
-Name[ne]=निलो बेलुन
-Name[nl]=Blauwe ballon
-Name[nn]=Blå ballong
-Name[pa]=ਨੀਲਾ ਗੁਬਰਾ
-Name[pl]=Niebieski balon
-Name[pt]=Balão Azul
-Name[pt_BR]=Balão Azul
-Name[ro]=Balon albastru
-Name[ru]=Воздушный шар
-Name[se]=Alit balloŋga
-Name[sk]=Modrý balón
-Name[sl]=Modri balon
-Name[sr]=Плави балон
-Name[sr@Latn]=Plavi balon
-Name[sv]=Blå ballong
-Name[ta]=நீல பலூன்
-Name[tg]=Курраҳои Ҳавоӣ
-Name[th]=ลูกโป่งสีฟ้า - K
-Name[tr]=Mavi Balon
-Name[uk]=Блакитна кулька
-Name[ven]=Baloni la muvhala wa Lutombo
-Name[vi]=Bóng bay xanh
-Name[xh]=Ibhaluni eblowu
-Name[zh_CN]=蓝气球
-Name[zh_TW]=藍色氣球
-Name[zu]=Ibhelunde eliluhlaza
-Preview=11.png
-PySol=false
-Comment=Card set supplied by Warwick Allison
-Comment[af]=Kaart stel verskaf deur Warwick Allison
-Comment[az]=Warwick Allison tərəfindən düzəldilən kart dəstəsi
-Comment[be]=Калода картаў ад Ворвіка Элісана (Warwick Allison)
-Comment[bg]=Колода карти от Warwick Allison
-Comment[bn]=কার্ডের সেট সরবরাহ করেছেন ওয়ারউইক এল্লিসন
-Comment[bs]=Špil je dostavio Warwick Allison
-Comment[ca]=Joc de cartes aportat per Warwick Allison
-Comment[cs]=Sada karet od Warwicka Allisona
-Comment[cy]=Set cerdiau wedi ei ddarparu gan Warwick Allison
-Comment[da]=Kortspil fra Warwick Allison
-Comment[de]=Karten von Warwick Allison
-Comment[el]=Σετ καρτών από τον Warwick Allison
-Comment[eo]=Kartaro donita de Warwick Allison
-Comment[es]=Juego de cartas suministrado por Warwick Allison
-Comment[et]=Warwick Allison'i poolt pakutud kaardipakk
-Comment[eu]=Warwick Allison-ek emandako karta-sorta
-Comment[fa]=مجموعه کارت توسط وارویک آلیسون تهیه شد
-Comment[fi]=Warwick Allison toimittama korttipakka
-Comment[fr]=Jeu de cartes fourni par Warwick Allison
-Comment[gl]=Baralla proporcionada por Warwick Allison
-Comment[he]=ערכת הקלפים סופקה על ידי וורויק אליסון
-Comment[hi]=ताश की गड्डी वारविक एलीसन द्वारा प्रदत्त किया गया
-Comment[hr]=Set karata, poklonio Warwick Allison
-Comment[hu]=Warwick Allison kártyacsomagja
-Comment[is]=Spilastokkur eftir Warwick Allison
-Comment[it]=Mazzo di carte fornito da Warwick Allison
-Comment[ja]=Warwick Allison 作のカードセット
-Comment[km]=បៀរ​ត្រូវ​កំណត់​ផ្ដល់​ដោយ Warwick Allison
-Comment[ko]=Warwick Allison이 만든 카드 셋
-Comment[lt]=Warwick Allison kortų rinkinys
-Comment[lv]=Kāršu komplekts no Warwick Allison
-Comment[mk]=Комплетот карти е обезбеден од Ворвик Алисон (Warwick Allison)
-Comment[mt]=Sett ta' karti mogħti minn Warwick Allison
-Comment[nb]=Kortstokk levert av Warwick Allison
-Comment[nds]=Koorten vun Warwick Allison
-Comment[ne]=वारविक एलिसोनद्वारा वितरण गरिएको कार्ड सेट
-Comment[nl]=Kaartset, geleverd door Warwick Allison
-Comment[nn]=Kortstokk frå Warwick Allison
-Comment[pl]=Zestaw kart dostarczony przez Warwicka Allisona
-Comment[pt]=Baralho de cartas fornecido por Warwick Allison
-Comment[pt_BR]=Jogo de cartas fornecido por Warwick Allison
-Comment[ro]=Set de cărţi de joc de Warwick Allison
-Comment[ru]=Колода карт от Warwick Allison
-Comment[sk]=Balíček kariet od Warwicka Allisona
-Comment[sl]=Nabor kart od Warwicka Allisona
-Comment[sr]=Шпил карата кога је обезбедио Варвик Алисон (Warwick Allison)
-Comment[sr@Latn]=Špil karata koga je obezbedio Varvik Alison (Warwick Allison)
-Comment[sv]=Kortuppsättning tillhandahållen av Warwick Allison
-Comment[ta]=சீட்டுக்கட்டு வில்லியம் எலிசனால் அனுப்பப்பட்டது
-Comment[tg]=Маҷмӯи Кортҳо, ки аз тарафи Warwick Allison пешниҳод шудаанд
-Comment[th]=ชุดไพ่สนับสนุนโดย Warwick Allison
-Comment[tr]=Kart kümeleri Warwick Allison tarafından sağlanmıştır
-Comment[uk]=Набір карт від Warwick Allison
-Comment[ven]=Garata yo diswa nga Warwick Allison
-Comment[vi]=BềEthẻ được cung cấp bởi Warwick Allison
-Comment[xh]=Imfano nye yamakhadi inikwe ngu Warwick Allison
-Comment[zh_CN]=牌面由 Warwick Allison 提供
-Comment[zh_TW]=牌局由 Warwick Allison 提供
-Comment[zu]=Iqoqo lamakhadi linikelwe ngu-Warwick Allison
diff --git a/libkdegames/carddecks/cards-xskat-french/1.png b/libkdegames/carddecks/cards-xskat-french/1.png
deleted file mode 100644
index fdc71a26..00000000
--- a/libkdegames/carddecks/cards-xskat-french/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/10.png b/libkdegames/carddecks/cards-xskat-french/10.png
deleted file mode 100644
index 9dede1c7..00000000
--- a/libkdegames/carddecks/cards-xskat-french/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/11.png b/libkdegames/carddecks/cards-xskat-french/11.png
deleted file mode 100644
index 4c1dbf2a..00000000
--- a/libkdegames/carddecks/cards-xskat-french/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/12.png b/libkdegames/carddecks/cards-xskat-french/12.png
deleted file mode 100644
index e34fc6bb..00000000
--- a/libkdegames/carddecks/cards-xskat-french/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/13.png b/libkdegames/carddecks/cards-xskat-french/13.png
deleted file mode 100644
index 842935ca..00000000
--- a/libkdegames/carddecks/cards-xskat-french/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/14.png b/libkdegames/carddecks/cards-xskat-french/14.png
deleted file mode 100644
index e87706aa..00000000
--- a/libkdegames/carddecks/cards-xskat-french/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/15.png b/libkdegames/carddecks/cards-xskat-french/15.png
deleted file mode 100644
index 28d82c71..00000000
--- a/libkdegames/carddecks/cards-xskat-french/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/16.png b/libkdegames/carddecks/cards-xskat-french/16.png
deleted file mode 100644
index 4920f2f4..00000000
--- a/libkdegames/carddecks/cards-xskat-french/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/17.png b/libkdegames/carddecks/cards-xskat-french/17.png
deleted file mode 100644
index 27658c7c..00000000
--- a/libkdegames/carddecks/cards-xskat-french/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/18.png b/libkdegames/carddecks/cards-xskat-french/18.png
deleted file mode 100644
index ea34c973..00000000
--- a/libkdegames/carddecks/cards-xskat-french/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/19.png b/libkdegames/carddecks/cards-xskat-french/19.png
deleted file mode 100644
index 80a0c22b..00000000
--- a/libkdegames/carddecks/cards-xskat-french/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/2.png b/libkdegames/carddecks/cards-xskat-french/2.png
deleted file mode 100644
index de465ef6..00000000
--- a/libkdegames/carddecks/cards-xskat-french/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/20.png b/libkdegames/carddecks/cards-xskat-french/20.png
deleted file mode 100644
index 4a0aca66..00000000
--- a/libkdegames/carddecks/cards-xskat-french/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/21.png b/libkdegames/carddecks/cards-xskat-french/21.png
deleted file mode 100644
index b7c6027f..00000000
--- a/libkdegames/carddecks/cards-xskat-french/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/22.png b/libkdegames/carddecks/cards-xskat-french/22.png
deleted file mode 100644
index ae77e460..00000000
--- a/libkdegames/carddecks/cards-xskat-french/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/23.png b/libkdegames/carddecks/cards-xskat-french/23.png
deleted file mode 100644
index 967385fc..00000000
--- a/libkdegames/carddecks/cards-xskat-french/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/24.png b/libkdegames/carddecks/cards-xskat-french/24.png
deleted file mode 100644
index e8b84baf..00000000
--- a/libkdegames/carddecks/cards-xskat-french/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/25.png b/libkdegames/carddecks/cards-xskat-french/25.png
deleted file mode 100644
index f933ca25..00000000
--- a/libkdegames/carddecks/cards-xskat-french/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/26.png b/libkdegames/carddecks/cards-xskat-french/26.png
deleted file mode 100644
index ab981154..00000000
--- a/libkdegames/carddecks/cards-xskat-french/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/27.png b/libkdegames/carddecks/cards-xskat-french/27.png
deleted file mode 100644
index f34477ff..00000000
--- a/libkdegames/carddecks/cards-xskat-french/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/28.png b/libkdegames/carddecks/cards-xskat-french/28.png
deleted file mode 100644
index 0d1d71ff..00000000
--- a/libkdegames/carddecks/cards-xskat-french/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/29.png b/libkdegames/carddecks/cards-xskat-french/29.png
deleted file mode 100644
index 80e86965..00000000
--- a/libkdegames/carddecks/cards-xskat-french/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/3.png b/libkdegames/carddecks/cards-xskat-french/3.png
deleted file mode 100644
index e4cc9d63..00000000
--- a/libkdegames/carddecks/cards-xskat-french/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/30.png b/libkdegames/carddecks/cards-xskat-french/30.png
deleted file mode 100644
index a935d55e..00000000
--- a/libkdegames/carddecks/cards-xskat-french/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/31.png b/libkdegames/carddecks/cards-xskat-french/31.png
deleted file mode 100644
index 6c8d2883..00000000
--- a/libkdegames/carddecks/cards-xskat-french/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/32.png b/libkdegames/carddecks/cards-xskat-french/32.png
deleted file mode 100644
index 5af0268b..00000000
--- a/libkdegames/carddecks/cards-xskat-french/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/33.png b/libkdegames/carddecks/cards-xskat-french/33.png
deleted file mode 100644
index 7bd0fbed..00000000
--- a/libkdegames/carddecks/cards-xskat-french/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/34.png b/libkdegames/carddecks/cards-xskat-french/34.png
deleted file mode 100644
index dc8bb29f..00000000
--- a/libkdegames/carddecks/cards-xskat-french/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/35.png b/libkdegames/carddecks/cards-xskat-french/35.png
deleted file mode 100644
index 7eb3f06f..00000000
--- a/libkdegames/carddecks/cards-xskat-french/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/36.png b/libkdegames/carddecks/cards-xskat-french/36.png
deleted file mode 100644
index 01902b33..00000000
--- a/libkdegames/carddecks/cards-xskat-french/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/37.png b/libkdegames/carddecks/cards-xskat-french/37.png
deleted file mode 100644
index 80599469..00000000
--- a/libkdegames/carddecks/cards-xskat-french/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/38.png b/libkdegames/carddecks/cards-xskat-french/38.png
deleted file mode 100644
index fb4a37e4..00000000
--- a/libkdegames/carddecks/cards-xskat-french/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/39.png b/libkdegames/carddecks/cards-xskat-french/39.png
deleted file mode 100644
index 01fe85ae..00000000
--- a/libkdegames/carddecks/cards-xskat-french/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/4.png b/libkdegames/carddecks/cards-xskat-french/4.png
deleted file mode 100644
index dff28353..00000000
--- a/libkdegames/carddecks/cards-xskat-french/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/40.png b/libkdegames/carddecks/cards-xskat-french/40.png
deleted file mode 100644
index a9e28170..00000000
--- a/libkdegames/carddecks/cards-xskat-french/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/41.png b/libkdegames/carddecks/cards-xskat-french/41.png
deleted file mode 100644
index 66e69166..00000000
--- a/libkdegames/carddecks/cards-xskat-french/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/42.png b/libkdegames/carddecks/cards-xskat-french/42.png
deleted file mode 100644
index 92e21830..00000000
--- a/libkdegames/carddecks/cards-xskat-french/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/43.png b/libkdegames/carddecks/cards-xskat-french/43.png
deleted file mode 100644
index b39a4afa..00000000
--- a/libkdegames/carddecks/cards-xskat-french/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/44.png b/libkdegames/carddecks/cards-xskat-french/44.png
deleted file mode 100644
index 94bf0fc7..00000000
--- a/libkdegames/carddecks/cards-xskat-french/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/45.png b/libkdegames/carddecks/cards-xskat-french/45.png
deleted file mode 100644
index bbdb0ad6..00000000
--- a/libkdegames/carddecks/cards-xskat-french/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/46.png b/libkdegames/carddecks/cards-xskat-french/46.png
deleted file mode 100644
index ed610b6a..00000000
--- a/libkdegames/carddecks/cards-xskat-french/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/47.png b/libkdegames/carddecks/cards-xskat-french/47.png
deleted file mode 100644
index 2688622a..00000000
--- a/libkdegames/carddecks/cards-xskat-french/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/48.png b/libkdegames/carddecks/cards-xskat-french/48.png
deleted file mode 100644
index 0dc1d52e..00000000
--- a/libkdegames/carddecks/cards-xskat-french/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/49.png b/libkdegames/carddecks/cards-xskat-french/49.png
deleted file mode 100644
index 4499c0fd..00000000
--- a/libkdegames/carddecks/cards-xskat-french/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/5.png b/libkdegames/carddecks/cards-xskat-french/5.png
deleted file mode 100644
index 702b65bc..00000000
--- a/libkdegames/carddecks/cards-xskat-french/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/50.png b/libkdegames/carddecks/cards-xskat-french/50.png
deleted file mode 100644
index 9b8b6619..00000000
--- a/libkdegames/carddecks/cards-xskat-french/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/51.png b/libkdegames/carddecks/cards-xskat-french/51.png
deleted file mode 100644
index 1edf32d5..00000000
--- a/libkdegames/carddecks/cards-xskat-french/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/52.png b/libkdegames/carddecks/cards-xskat-french/52.png
deleted file mode 100644
index 0fe25caa..00000000
--- a/libkdegames/carddecks/cards-xskat-french/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/6.png b/libkdegames/carddecks/cards-xskat-french/6.png
deleted file mode 100644
index 642225b1..00000000
--- a/libkdegames/carddecks/cards-xskat-french/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/7.png b/libkdegames/carddecks/cards-xskat-french/7.png
deleted file mode 100644
index a16236b0..00000000
--- a/libkdegames/carddecks/cards-xskat-french/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/8.png b/libkdegames/carddecks/cards-xskat-french/8.png
deleted file mode 100644
index 3cb261c4..00000000
--- a/libkdegames/carddecks/cards-xskat-french/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/9.png b/libkdegames/carddecks/cards-xskat-french/9.png
deleted file mode 100644
index 2b1d9c43..00000000
--- a/libkdegames/carddecks/cards-xskat-french/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-french/COPYRIGHT b/libkdegames/carddecks/cards-xskat-french/COPYRIGHT
deleted file mode 100644
index dc217dc3..00000000
--- a/libkdegames/carddecks/cards-xskat-french/COPYRIGHT
+++ /dev/null
@@ -1,8 +0,0 @@
-This PySol cardset was adapted from the game XSkat 4.0
-
-Copyright (C) 2004 Gunter Gerhardt (http://www.xskat.de)
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-xskat-french/index.desktop b/libkdegames/carddecks/cards-xskat-french/index.desktop
deleted file mode 100644
index 3dec4a0c..00000000
--- a/libkdegames/carddecks/cards-xskat-french/index.desktop
+++ /dev/null
@@ -1,55 +0,0 @@
-[KDE Backdeck]
-Name=XSkat French
-Name[be]=Французскі XSkat
-Name[bg]=Френски модел
-Name[bn]=ফরাসি এক্স-স্কাট
-Name[br]=XSkat gallek
-Name[bs]=XSkat Francuski
-Name[ca]=XSkat francès
-Name[cs]=Francouzský XSkat
-Name[cy]=XSkat Ffrangeg
-Name[da]=XSkat-fransk
-Name[de]=XSkat Französisch
-Name[el]=XSkat Γαλλικό
-Name[eo]=XSkat Franca
-Name[es]=XSkat francés
-Name[et]=XSkat (Prantsuse)
-Name[eu]=XSkat Frantsesa
-Name[fa]=XSkat فرانسوی
-Name[fi]=XSkat Ranska
-Name[fr]=XSkat français
-Name[he]=XSkat צרפתי
-Name[hr]=Francuski XSkat
-Name[hu]=FRancia XSkat
-Name[is]=XSkat á frönsku
-Name[it]=XSkat francese
-Name[ja]=XSkat フランス語
-Name[km]=XSkat បារាំង
-Name[ko]=프랑스 XSkat
-Name[lt]=XSkat Prancūziškai
-Name[lv]=XSkat Franču
-Name[mk]=Француски XSkat
-Name[nb]=Fransk XSkat
-Name[nds]=XSkat (Franzöösch)
-Name[ne]=एक्स स्क्याट फ्रेन्च
-Name[nl]=XSkat Frans
-Name[nn]=Fransk XSkat
-Name[pa]=XSkat ਫਰੈਂਚ
-Name[pl]=Francuski skat
-Name[pt]=XSkat Francês
-Name[pt_BR]=XSkat Francês
-Name[ru]=Французский XSkat
-Name[se]=Fránskkalaš XSkat
-Name[sk]=XSkat francúzsky
-Name[sl]=Francoski XSkat
-Name[sr]=XSkat француски
-Name[sr@Latn]=XSkat francuski
-Name[sv]=Fransk X-skat
-Name[ta]=XSkat ஃபிரஞ்ச்
-Name[tg]=XSkat Фаронсавӣ
-Name[tr]=XSkat Fransızca
-Name[uk]=Французький XSkat
-Name[zh_CN]=XSkat 法语
-Name[zh_TW]=XSkat 法語
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/cards-xskat-german/1.png b/libkdegames/carddecks/cards-xskat-german/1.png
deleted file mode 100644
index e679884b..00000000
--- a/libkdegames/carddecks/cards-xskat-german/1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/10.png b/libkdegames/carddecks/cards-xskat-german/10.png
deleted file mode 100644
index c9590dbb..00000000
--- a/libkdegames/carddecks/cards-xskat-german/10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/11.png b/libkdegames/carddecks/cards-xskat-german/11.png
deleted file mode 100644
index d1c6f500..00000000
--- a/libkdegames/carddecks/cards-xskat-german/11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/12.png b/libkdegames/carddecks/cards-xskat-german/12.png
deleted file mode 100644
index 5c92d83a..00000000
--- a/libkdegames/carddecks/cards-xskat-german/12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/13.png b/libkdegames/carddecks/cards-xskat-german/13.png
deleted file mode 100644
index d68f0c00..00000000
--- a/libkdegames/carddecks/cards-xskat-german/13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/14.png b/libkdegames/carddecks/cards-xskat-german/14.png
deleted file mode 100644
index 324e3756..00000000
--- a/libkdegames/carddecks/cards-xskat-german/14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/15.png b/libkdegames/carddecks/cards-xskat-german/15.png
deleted file mode 100644
index 9a516e30..00000000
--- a/libkdegames/carddecks/cards-xskat-german/15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/16.png b/libkdegames/carddecks/cards-xskat-german/16.png
deleted file mode 100644
index 9d9dec03..00000000
--- a/libkdegames/carddecks/cards-xskat-german/16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/17.png b/libkdegames/carddecks/cards-xskat-german/17.png
deleted file mode 100644
index 5dc10fa2..00000000
--- a/libkdegames/carddecks/cards-xskat-german/17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/18.png b/libkdegames/carddecks/cards-xskat-german/18.png
deleted file mode 100644
index 90562629..00000000
--- a/libkdegames/carddecks/cards-xskat-german/18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/19.png b/libkdegames/carddecks/cards-xskat-german/19.png
deleted file mode 100644
index 7e4552ab..00000000
--- a/libkdegames/carddecks/cards-xskat-german/19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/2.png b/libkdegames/carddecks/cards-xskat-german/2.png
deleted file mode 100644
index 1c1f8118..00000000
--- a/libkdegames/carddecks/cards-xskat-german/2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/20.png b/libkdegames/carddecks/cards-xskat-german/20.png
deleted file mode 100644
index a15534b6..00000000
--- a/libkdegames/carddecks/cards-xskat-german/20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/21.png b/libkdegames/carddecks/cards-xskat-german/21.png
deleted file mode 100644
index 7aca79e7..00000000
--- a/libkdegames/carddecks/cards-xskat-german/21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/22.png b/libkdegames/carddecks/cards-xskat-german/22.png
deleted file mode 100644
index b487a1c8..00000000
--- a/libkdegames/carddecks/cards-xskat-german/22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/23.png b/libkdegames/carddecks/cards-xskat-german/23.png
deleted file mode 100644
index 761d3bfe..00000000
--- a/libkdegames/carddecks/cards-xskat-german/23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/24.png b/libkdegames/carddecks/cards-xskat-german/24.png
deleted file mode 100644
index 537e590c..00000000
--- a/libkdegames/carddecks/cards-xskat-german/24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/25.png b/libkdegames/carddecks/cards-xskat-german/25.png
deleted file mode 100644
index 09567171..00000000
--- a/libkdegames/carddecks/cards-xskat-german/25.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/26.png b/libkdegames/carddecks/cards-xskat-german/26.png
deleted file mode 100644
index 761fc42d..00000000
--- a/libkdegames/carddecks/cards-xskat-german/26.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/27.png b/libkdegames/carddecks/cards-xskat-german/27.png
deleted file mode 100644
index 05083aa2..00000000
--- a/libkdegames/carddecks/cards-xskat-german/27.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/28.png b/libkdegames/carddecks/cards-xskat-german/28.png
deleted file mode 100644
index e885a908..00000000
--- a/libkdegames/carddecks/cards-xskat-german/28.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/29.png b/libkdegames/carddecks/cards-xskat-german/29.png
deleted file mode 100644
index 5b7244a0..00000000
--- a/libkdegames/carddecks/cards-xskat-german/29.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/3.png b/libkdegames/carddecks/cards-xskat-german/3.png
deleted file mode 100644
index 978e63c0..00000000
--- a/libkdegames/carddecks/cards-xskat-german/3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/30.png b/libkdegames/carddecks/cards-xskat-german/30.png
deleted file mode 100644
index 3f8b03ef..00000000
--- a/libkdegames/carddecks/cards-xskat-german/30.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/31.png b/libkdegames/carddecks/cards-xskat-german/31.png
deleted file mode 100644
index 9ab830ce..00000000
--- a/libkdegames/carddecks/cards-xskat-german/31.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/32.png b/libkdegames/carddecks/cards-xskat-german/32.png
deleted file mode 100644
index b87d68d0..00000000
--- a/libkdegames/carddecks/cards-xskat-german/32.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/33.png b/libkdegames/carddecks/cards-xskat-german/33.png
deleted file mode 100644
index 078abf39..00000000
--- a/libkdegames/carddecks/cards-xskat-german/33.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/34.png b/libkdegames/carddecks/cards-xskat-german/34.png
deleted file mode 100644
index 94c5297f..00000000
--- a/libkdegames/carddecks/cards-xskat-german/34.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/35.png b/libkdegames/carddecks/cards-xskat-german/35.png
deleted file mode 100644
index 241ba5dc..00000000
--- a/libkdegames/carddecks/cards-xskat-german/35.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/36.png b/libkdegames/carddecks/cards-xskat-german/36.png
deleted file mode 100644
index 339a155a..00000000
--- a/libkdegames/carddecks/cards-xskat-german/36.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/37.png b/libkdegames/carddecks/cards-xskat-german/37.png
deleted file mode 100644
index 106023f4..00000000
--- a/libkdegames/carddecks/cards-xskat-german/37.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/38.png b/libkdegames/carddecks/cards-xskat-german/38.png
deleted file mode 100644
index 848f9696..00000000
--- a/libkdegames/carddecks/cards-xskat-german/38.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/39.png b/libkdegames/carddecks/cards-xskat-german/39.png
deleted file mode 100644
index 43eaba16..00000000
--- a/libkdegames/carddecks/cards-xskat-german/39.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/4.png b/libkdegames/carddecks/cards-xskat-german/4.png
deleted file mode 100644
index d69848a0..00000000
--- a/libkdegames/carddecks/cards-xskat-german/4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/40.png b/libkdegames/carddecks/cards-xskat-german/40.png
deleted file mode 100644
index 87619dce..00000000
--- a/libkdegames/carddecks/cards-xskat-german/40.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/41.png b/libkdegames/carddecks/cards-xskat-german/41.png
deleted file mode 100644
index 6b09c88c..00000000
--- a/libkdegames/carddecks/cards-xskat-german/41.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/42.png b/libkdegames/carddecks/cards-xskat-german/42.png
deleted file mode 100644
index 04a1993b..00000000
--- a/libkdegames/carddecks/cards-xskat-german/42.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/43.png b/libkdegames/carddecks/cards-xskat-german/43.png
deleted file mode 100644
index d5b92e29..00000000
--- a/libkdegames/carddecks/cards-xskat-german/43.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/44.png b/libkdegames/carddecks/cards-xskat-german/44.png
deleted file mode 100644
index 6cf2e09b..00000000
--- a/libkdegames/carddecks/cards-xskat-german/44.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/45.png b/libkdegames/carddecks/cards-xskat-german/45.png
deleted file mode 100644
index b6a6a2a7..00000000
--- a/libkdegames/carddecks/cards-xskat-german/45.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/46.png b/libkdegames/carddecks/cards-xskat-german/46.png
deleted file mode 100644
index 05f686ab..00000000
--- a/libkdegames/carddecks/cards-xskat-german/46.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/47.png b/libkdegames/carddecks/cards-xskat-german/47.png
deleted file mode 100644
index f31c89f3..00000000
--- a/libkdegames/carddecks/cards-xskat-german/47.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/48.png b/libkdegames/carddecks/cards-xskat-german/48.png
deleted file mode 100644
index a8e1c51e..00000000
--- a/libkdegames/carddecks/cards-xskat-german/48.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/49.png b/libkdegames/carddecks/cards-xskat-german/49.png
deleted file mode 100644
index 2a473ac3..00000000
--- a/libkdegames/carddecks/cards-xskat-german/49.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/5.png b/libkdegames/carddecks/cards-xskat-german/5.png
deleted file mode 100644
index 66a4b568..00000000
--- a/libkdegames/carddecks/cards-xskat-german/5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/50.png b/libkdegames/carddecks/cards-xskat-german/50.png
deleted file mode 100644
index 3a7d6ac0..00000000
--- a/libkdegames/carddecks/cards-xskat-german/50.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/51.png b/libkdegames/carddecks/cards-xskat-german/51.png
deleted file mode 100644
index 09e25a6c..00000000
--- a/libkdegames/carddecks/cards-xskat-german/51.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/52.png b/libkdegames/carddecks/cards-xskat-german/52.png
deleted file mode 100644
index e7d74ae4..00000000
--- a/libkdegames/carddecks/cards-xskat-german/52.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/6.png b/libkdegames/carddecks/cards-xskat-german/6.png
deleted file mode 100644
index e4b1d7de..00000000
--- a/libkdegames/carddecks/cards-xskat-german/6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/7.png b/libkdegames/carddecks/cards-xskat-german/7.png
deleted file mode 100644
index 09e99d70..00000000
--- a/libkdegames/carddecks/cards-xskat-german/7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/8.png b/libkdegames/carddecks/cards-xskat-german/8.png
deleted file mode 100644
index 58fdc56e..00000000
--- a/libkdegames/carddecks/cards-xskat-german/8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/9.png b/libkdegames/carddecks/cards-xskat-german/9.png
deleted file mode 100644
index b55ee847..00000000
--- a/libkdegames/carddecks/cards-xskat-german/9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/cards-xskat-german/COPYRIGHT b/libkdegames/carddecks/cards-xskat-german/COPYRIGHT
deleted file mode 100644
index dc217dc3..00000000
--- a/libkdegames/carddecks/cards-xskat-german/COPYRIGHT
+++ /dev/null
@@ -1,8 +0,0 @@
-This PySol cardset was adapted from the game XSkat 4.0
-
-Copyright (C) 2004 Gunter Gerhardt (http://www.xskat.de)
-
-This cardset is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2 of
-the License, or (at your option) any later version.
diff --git a/libkdegames/carddecks/cards-xskat-german/index.desktop b/libkdegames/carddecks/cards-xskat-german/index.desktop
deleted file mode 100644
index 3f19d526..00000000
--- a/libkdegames/carddecks/cards-xskat-german/index.desktop
+++ /dev/null
@@ -1,55 +0,0 @@
-[KDE Backdeck]
-Name=XSkat German
-Name[be]=Нямецкі XSkat
-Name[bg]=Немски модел
-Name[bn]=জর্মন এক্স-স্কাট
-Name[br]=XSkat alamanek
-Name[bs]=XSkat Njemački
-Name[ca]=XSkat alemany
-Name[cs]=Německý XSkat
-Name[cy]=XSkat Almaeneg
-Name[da]=XSkat-tysk
-Name[de]=XSkat Deutsch
-Name[el]=XSkat Γερμανικό
-Name[eo]=XSkat Germana
-Name[es]=XSkat alemán
-Name[et]=XSkat (Saksa)
-Name[eu]=XSkat alemaniera
-Name[fa]=آلمانی XSkat
-Name[fi]=XSkat Saksa
-Name[fr]=XSkat allemand
-Name[he]=XSkat גרמני
-Name[hr]=Njemački XSkat
-Name[hu]=Német XSkat
-Name[is]=XSkat á þýsku
-Name[it]=XSkat tedesco
-Name[ja]=XSkat ドイツ語
-Name[km]=XSkat អាល្លឺម៉ង់
-Name[ko]=독일 XSkat
-Name[lt]=XSkat Vokiškai
-Name[lv]=XSkat Vācu
-Name[mk]=Германски XSkat
-Name[nb]=Tysk XSkat
-Name[nds]=XSkat (Düütsch)
-Name[ne]=एक्स स्क्याट जर्मन
-Name[nl]=XSkat Duits
-Name[nn]=Tysk XSkat
-Name[pa]=XSkat ਜਰਮਨ
-Name[pl]=Niemiecki skat
-Name[pt]=XSkat Alemã
-Name[pt_BR]=XSkat Alemão
-Name[ru]=Немецкий XSkat
-Name[se]=Duiskkalaš XSkat
-Name[sk]=XScat nemecký
-Name[sl]=Nemški XSkat
-Name[sr]=XSkat немачки
-Name[sr@Latn]=XSkat nemački
-Name[sv]=Tysk X-skat
-Name[ta]=XSkat ஜெர்மன்
-Name[tg]=XSkat Олмонӣ
-Name[tr]=XSkat Almanca
-Name[uk]=Німецький XSkat
-Name[zh_CN]=XSkat 德语
-Name[zh_TW]=XSkat 德語
-Preview=11.png
-PySol=yes
diff --git a/libkdegames/carddecks/convertpysols b/libkdegames/carddecks/convertpysols
deleted file mode 100755
index f2434475..00000000
--- a/libkdegames/carddecks/convertpysols
+++ /dev/null
@@ -1,69 +0,0 @@
-#! /bin/sh
-
-cd $1
-
-convert -format png -tqgeometry "72x96" 01c.gif 1.png
-convert -format png -tqgeometry "72x96" 01s.gif 2.png
-convert -format png -tqgeometry "72x96" 01h.gif 3.png
-convert -format png -tqgeometry "72x96" 01d.gif 4.png
-
-convert -format png -tqgeometry "72x96" 13c.gif 5.png
-convert -format png -tqgeometry "72x96" 13s.gif 6.png
-convert -format png -tqgeometry "72x96" 13h.gif 7.png
-convert -format png -tqgeometry "72x96" 13d.gif 8.png
-
-convert -format png -tqgeometry "72x96" 12c.gif 9.png
-convert -format png -tqgeometry "72x96" 12s.gif 10.png
-convert -format png -tqgeometry "72x96" 12h.gif 11.png
-convert -format png -tqgeometry "72x96" 12d.gif 12.png
-
-convert -format png -tqgeometry "72x96" 11c.gif 13.png
-convert -format png -tqgeometry "72x96" 11s.gif 14.png
-convert -format png -tqgeometry "72x96" 11h.gif 15.png
-convert -format png -tqgeometry "72x96" 11d.gif 16.png
-
-convert -format png -tqgeometry "72x96" 10c.gif 17.png
-convert -format png -tqgeometry "72x96" 10s.gif 18.png
-convert -format png -tqgeometry "72x96" 10h.gif 19.png
-convert -format png -tqgeometry "72x96" 10d.gif 20.png
-
-convert -format png -tqgeometry "72x96" 09c.gif 21.png
-convert -format png -tqgeometry "72x96" 09s.gif 22.png
-convert -format png -tqgeometry "72x96" 09h.gif 23.png
-convert -format png -tqgeometry "72x96" 09d.gif 24.png
-
-convert -format png -tqgeometry "72x96" 08c.gif 25.png
-convert -format png -tqgeometry "72x96" 08s.gif 26.png
-convert -format png -tqgeometry "72x96" 08h.gif 27.png
-convert -format png -tqgeometry "72x96" 08d.gif 28.png
-
-convert -format png -tqgeometry "72x96" 07c.gif 29.png
-convert -format png -tqgeometry "72x96" 07s.gif 30.png
-convert -format png -tqgeometry "72x96" 07h.gif 31.png
-convert -format png -tqgeometry "72x96" 07d.gif 32.png
-
-convert -format png -tqgeometry "72x96" 06c.gif 33.png
-convert -format png -tqgeometry "72x96" 06s.gif 34.png
-convert -format png -tqgeometry "72x96" 06h.gif 35.png
-convert -format png -tqgeometry "72x96" 06d.gif 36.png
-
-convert -format png -tqgeometry "72x96" 05c.gif 37.png
-convert -format png -tqgeometry "72x96" 05s.gif 38.png
-convert -format png -tqgeometry "72x96" 05h.gif 39.png
-convert -format png -tqgeometry "72x96" 05d.gif 40.png
-
-convert -format png -tqgeometry "72x96" 04c.gif 41.png
-convert -format png -tqgeometry "72x96" 04s.gif 42.png
-convert -format png -tqgeometry "72x96" 04h.gif 43.png
-convert -format png -tqgeometry "72x96" 04d.gif 44.png
-
-convert -format png -tqgeometry "72x96" 03c.gif 45.png
-convert -format png -tqgeometry "72x96" 03s.gif 46.png
-convert -format png -tqgeometry "72x96" 03h.gif 47.png
-convert -format png -tqgeometry "72x96" 03d.gif 48.png
-
-convert -format png -tqgeometry "72x96" 02c.gif 49.png
-convert -format png -tqgeometry "72x96" 02s.gif 50.png
-convert -format png -tqgeometry "72x96" 02h.gif 51.png
-convert -format png -tqgeometry "72x96" 02d.gif 52.png
-
diff --git a/libkdegames/carddecks/decks/deck0.desktop b/libkdegames/carddecks/decks/deck0.desktop
deleted file mode 100644
index 0388ea4b..00000000
--- a/libkdegames/carddecks/decks/deck0.desktop
+++ /dev/null
@@ -1,113 +0,0 @@
-[KDE Cards]
-Name=Technics
-Name[az]=Texnik
-Name[be]=Тэхніка
-Name[bg]=Техника
-Name[bn]=টেকনিক্স
-Name[bs]=Tehnički
-Name[ca]=Tècniques
-Name[cs]=Technika
-Name[eo]=Tekniko
-Name[es]=Técnicas
-Name[et]=Tehnika
-Name[eu]=Teknikoa
-Name[fi]=Tekniikka
-Name[fr]=Technique
-Name[gl]=Técnicas
-Name[hi]=टेक्निक्स
-Name[hr]=Tehnika
-Name[hu]=Technikai
-Name[id]=Teknik
-Name[is]=Tækni
-Name[it]=Tecnico
-Name[km]=វិធីសាស្ត្រ
-Name[lt]=Technika
-Name[lv]=Tehnika
-Name[mk]=Техника
-Name[mt]=Tekniċi
-Name[nb]=Teknisk
-Name[nds]=Technik
-Name[ne]=उपाय
-Name[nl]=Technisch
-Name[nn]=Teknisk
-Name[pt]=Técnico
-Name[pt_BR]=Técnicas
-Name[ro]=Tehnic
-Name[ru]=Шестерёнки
-Name[se]=Teknihkalaš
-Name[sk]=Technické
-Name[sl]=Tehnika
-Name[sr]=Техникс
-Name[sr@Latn]=Tehniks
-Name[sv]=Teknik
-Name[ta]=நுணுக்கங்கள்
-Name[tg]=Шомгонаҳо
-Name[th]=เทคนิค
-Name[tr]=Teknik
-Name[uk]=Шестерні
-Name[ven]=Madaela
-Name[vi]=Kĩ thuật
-Name[xh]=iindlela zokudlala
-Name[zh_CN]=工艺
-Name[zh_TW]=工藝
-Comment=Standard KDE card deck
-Comment[af]=Standaard Kde kaart pak
-Comment[az]=Standart KDE kart dəstəsi
-Comment[be]=Стандартная калода картаў KDE
-Comment[bg]=Стандартна колода карти за KDE
-Comment[bn]=কে.ডি.ই.-র সাধারণ তাস সেট
-Comment[bs]=Standardni KDE špil karata
-Comment[ca]=Joc de cartes estàndard del KDE
-Comment[cs]=Standardní sada karet KDE
-Comment[cy]=Set cerdiau safonol KDE
-Comment[da]=Standard KDE-kortspil
-Comment[de]=Standardmäßige KDE-Karten
-Comment[el]=Προκαθορισμένο σύνολο τράπουλας του KDE
-Comment[eo]=Normala KDEa kartaro
-Comment[es]=Baraja de cartas estándar de KDE
-Comment[et]=Standardne KDE kaardipakk
-Comment[eu]=KDE-ren karta-sorta
-Comment[fa]=دسته کارت استاندارد KDE
-Comment[fi]=Normaali KDE:n korttipakka
-Comment[fr]=Jeu de cartes standard de KDE
-Comment[gl]=Baralla de cartas estándar de KDE
-Comment[he]=חפיסת הקלפים הסטנדרטית של KDE
-Comment[hi]=मानक केडीई ताश गड्डी
-Comment[hr]=Standardni KDE komplet karata
-Comment[hu]=Standard KDE kártyacsomag
-Comment[is]=Venjulegi KDE spilastokkurinn
-Comment[it]=Mazzo di carte standard di KDE
-Comment[ja]=KDE 標準カードデッキ
-Comment[km]=ហូ​បៀ KDE ខ្នាត​គំរូ
-Comment[ko]=표준 KDE 카드 모음
-Comment[lt]=Standartinė KDE kortų kaladė
-Comment[lv]=Standarta KDE kāršu galds
-Comment[mk]=Стандарден шпил карти на KDE
-Comment[mt]=Mazz karti standard tal-KDE
-Comment[nb]=Standard KDE-kortstokk
-Comment[nds]=KDE-Standardkoorten
-Comment[ne]=मानक केडीई कार्ड डेक
-Comment[nl]=Standaard KDE-kaartrug
-Comment[nn]=Standard KDE-kortstokk
-Comment[pa]=ਮਿਆਰੀ KDE ਤਾਸ਼ ਪੱਤੇ
-Comment[pl]=Standardowy zestaw kart KDE
-Comment[pt]=Baralho de cartas por omissão do KDE
-Comment[pt_BR]=Baralho padrão do KDE
-Comment[ro]=Set de cărţi de joc KDE standard
-Comment[ru]=Стандартная колода карт KDE
-Comment[sk]=Štandardný balíček kariet KDE
-Comment[sl]=Standardni komplet kart za KDE
-Comment[sr]=Стандардни KDE-ов шпил карата
-Comment[sr@Latn]=Standardni KDE-ov špil karata
-Comment[sv]=Förvald KDE-kortlek
-Comment[ta]=நிலையான கேடிஇ சீட்டின் மேல் தளம்
-Comment[tg]=Маҷмӯи кортҳои муқаррарии KDE
-Comment[th]=ชุดไพ่มาตรฐานของ KDE
-Comment[tr]=Standart KDE kart destesi
-Comment[uk]=Типовий малюнок карт KDE
-Comment[ven]=Tshidzhumba tsha magarata tsha murole wa KDE
-Comment[vi]=KDE card deck chuẩn
-Comment[xh]=Umgangatho womphezulu wamakhadi eKDE
-Comment[zh_CN]=标准 KDE 牌垛
-Comment[zh_TW]=標準 KDE 紙牌花色
-Comment[zu]=Isigaxa samakhadi esilinganisiwe we-KDE
diff --git a/libkdegames/carddecks/decks/deck0.png b/libkdegames/carddecks/decks/deck0.png
deleted file mode 100644
index 0a877a51..00000000
--- a/libkdegames/carddecks/decks/deck0.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck1.desktop b/libkdegames/carddecks/decks/deck1.desktop
deleted file mode 100644
index 0a8c2cf7..00000000
--- a/libkdegames/carddecks/decks/deck1.desktop
+++ /dev/null
@@ -1,56 +0,0 @@
-[KDE Cards]
-Name=Fairy
-Name[af]=Fee
-Name[az]=Pəri
-Name[be]=Фея
-Name[bg]=Фея
-Name[bn]=পরী
-Name[ca]=Fada
-Name[cs]=Víla
-Name[cy]=Tylwyth Teg
-Name[da]=Fe
-Name[de]=Elfe
-Name[el]=Νεράιδα
-Name[eo]=Elfo
-Name[es]=Hada
-Name[et]=Haldjas
-Name[eu]=Maitagarria
-Name[fa]=جن و پری
-Name[fi]=Keijukainen
-Name[fr]=Féérie
-Name[gl]=Fada
-Name[hi]=परी
-Name[hr]=Vila
-Name[hu]=Tündéres
-Name[is]=Álfur
-Name[it]=Fata
-Name[km]=ទេវតា
-Name[ko]=요정
-Name[lt]=Fėja
-Name[lv]=Pasaku
-Name[mk]=Самовила
-Name[mt]=Għafrid
-Name[nb]=Fe
-Name[nds]=Fee
-Name[ne]=अप्सरा
-Name[nl]=Fee
-Name[nn]=Fe
-Name[pl]=Wróżkarski
-Name[pt]=Fada
-Name[pt_BR]=Mágico
-Name[ro]=Basm
-Name[ru]=Фея
-Name[sr]=Вила
-Name[sr@Latn]=Vila
-Name[sv]=Älva
-Name[ta]=தேவதை
-Name[tg]=Парӣ
-Name[tr]=Peri
-Name[uk]=Чарівний
-Name[uz]=Pari
-Name[uz@cyrillic]=Пари
-Name[ven]=Zwi a pfesesea
-Name[vi]=Xinh đẹp
-Name[zh_CN]=仙女
-Name[zh_TW]=仙女
-Name[zu]=Okunomlingo
diff --git a/libkdegames/carddecks/decks/deck1.png b/libkdegames/carddecks/decks/deck1.png
deleted file mode 100644
index 247875a2..00000000
--- a/libkdegames/carddecks/decks/deck1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck10.desktop b/libkdegames/carddecks/decks/deck10.desktop
deleted file mode 100644
index 5e871ede..00000000
--- a/libkdegames/carddecks/decks/deck10.desktop
+++ /dev/null
@@ -1,66 +0,0 @@
-[KDE Cards]
-Name=Classic Blue
-Name[af]=Klasieke Blou
-Name[ar]=أزرق كلاسيكي
-Name[az]=Klassik Göy
-Name[be]=Класічны сіні
-Name[bg]=Класическо синьо
-Name[bn]=ক্লাসিক নীল
-Name[bs]=Klasični plavi
-Name[ca]=Blau clàssic
-Name[cs]=Klasická modrá
-Name[cy]=Glas Clasurol
-Name[da]=Klassisk blå
-Name[de]=Klassisches Blau
-Name[el]=Κλασσικό μπλε
-Name[eo]=Klasika bluo
-Name[es]=Azul clásico
-Name[et]=Klassikaline sinine
-Name[eu]=Urdin klasikoa
-Name[fa]=آبی کلاسیک‌
-Name[fi]=Klassinen sininen
-Name[fr]=Bleu classique
-Name[gl]=Azul clásico
-Name[he]=כחול קלסי
-Name[hi]=आदर्श नीला
-Name[hr]=Klasično plava
-Name[hu]=Klasszikus kék
-Name[id]=Biru klasik
-Name[is]=Klassískur blár
-Name[it]=Blu classico
-Name[ja]=クラシックブルー
-Name[km]=ខៀវ​ក្លាស៊ិក
-Name[ko]=고전 파란색
-Name[lt]=Klasikinė mėlyna
-Name[lv]=Klasiski zils
-Name[mk]=Класично сино
-Name[mt]=Blu Klassiku
-Name[nb]=Klassisk Blå
-Name[nds]=Klass'sch Blaag
-Name[ne]=उत्कृष्ट निलो
-Name[nl]=Klassiek blauw
-Name[nn]=Klassisk blå
-Name[pa]=ਟਕਸਾਲੀ ਨੀਲੇ
-Name[pl]=Klasyczny niebieski
-Name[pt]=Azul Clássico
-Name[pt_BR]=Azul Clássico
-Name[ro]=Albastru clasic
-Name[ru]=Классический синий
-Name[se]=Klassihkalaš alit
-Name[sk]=Klasické modré
-Name[sl]=Klasična modra
-Name[sr]=Класични плави
-Name[sr@Latn]=Klasični plavi
-Name[sv]=Klassisk blå
-Name[ta]=சிறந்த நீலம்
-Name[tg]=Кабуди Классикӣ
-Name[th]=ฟ้าคลาสสิค
-Name[tr]=Klasik Mavi
-Name[uk]=Блакитний
-Name[ven]=Muvhala wa Lutombo wa Maimo
-Name[vi]=Màu xanh cềEđiển
-Name[wa]=Bleu classike
-Name[xh]=Umbala oblowu omdala
-Name[zh_CN]=经典蓝
-Name[zh_TW]=古典藍
-Name[zu]=Ubuluhlaza obuhle
diff --git a/libkdegames/carddecks/decks/deck10.png b/libkdegames/carddecks/decks/deck10.png
deleted file mode 100644
index c84dcf73..00000000
--- a/libkdegames/carddecks/decks/deck10.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck11.desktop b/libkdegames/carddecks/decks/deck11.desktop
deleted file mode 100644
index 8d0fbb44..00000000
--- a/libkdegames/carddecks/decks/deck11.desktop
+++ /dev/null
@@ -1,66 +0,0 @@
-[KDE Cards]
-Name=Classic Red
-Name[af]=Klasieke Rooi
-Name[ar]=أحمر كلاسيكي
-Name[az]=Klassik Qırmızı
-Name[be]=Класічны чырвоны
-Name[bg]=Класическо червено
-Name[bn]=ক্লাসিক লাল
-Name[bs]=Klasični crveni
-Name[ca]=Vermell clàssic
-Name[cs]=Klasická červená
-Name[cy]=Coch Clasurol
-Name[da]=Klassisk Rød
-Name[de]=Klassisches Rot
-Name[el]=Κλασσικό κόκκινο
-Name[eo]=Klasika ruĝo
-Name[es]=Rojo clásico
-Name[et]=Klassikaline punane
-Name[eu]=Gorri klasikoa
-Name[fa]=قرمز کلاسیک
-Name[fi]=Klassinen punainen
-Name[fr]=Rouge classique
-Name[gl]=Vermello clásico
-Name[he]=אדום קלסי
-Name[hi]=आदर्श लाल
-Name[hr]=Klasično crvena
-Name[hu]=klasszikus vörös
-Name[id]=Merah klasik
-Name[is]=Klassískur rauður
-Name[it]=Rosso classico
-Name[ja]=クラシックレッド
-Name[km]=ក្រហម​ក្លាស៊ិក
-Name[ko]=고전 빨간색
-Name[lt]=Klasikinė raudona
-Name[lv]=Klasiski sarkans
-Name[mk]=Класично црвено
-Name[mt]=Aħmar Klassiku
-Name[nb]=Klassisk Rød
-Name[nds]=Klass'sch Root
-Name[ne]=उत्कृष्ट रातो
-Name[nl]=Klassiek rood
-Name[nn]=Klassisk raud
-Name[pa]=ਟਕਸਾਲੀ ਲਾਲ
-Name[pl]=Klasyczny czerwony
-Name[pt]=Vermelho Clássico
-Name[pt_BR]=Vermelho Clássico
-Name[ro]=Roşu clasic
-Name[ru]=Классический красный
-Name[se]=Klassihkalaš ruoksat
-Name[sk]=Klasické červené
-Name[sl]=Klasična rdeča
-Name[sr]=Класични црвени
-Name[sr@Latn]=Klasični crveni
-Name[sv]=Klassisk röd
-Name[ta]= சிறந்த சிகப்பு
-Name[tg]=Сурхи Классикӣ
-Name[th]=แดงคลาสสิค
-Name[tr]=Klasik Kırmızı
-Name[uk]=Червоний
-Name[ven]=Muvhala Mutshuku wa Maimo
-Name[vi]=ĐềEcềEđiển
-Name[wa]=Rodje classike
-Name[xh]=Umbala obomvu wakudala
-Name[zh_CN]=经典红
-Name[zh_TW]=古典紅
-Name[zu]=Ububomvu obuhle
diff --git a/libkdegames/carddecks/decks/deck11.png b/libkdegames/carddecks/decks/deck11.png
deleted file mode 100644
index 0474a551..00000000
--- a/libkdegames/carddecks/decks/deck11.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck12.desktop b/libkdegames/carddecks/decks/deck12.desktop
deleted file mode 100644
index aa0918bd..00000000
--- a/libkdegames/carddecks/decks/deck12.desktop
+++ /dev/null
@@ -1,41 +0,0 @@
-[KDE Cards]
-Name=Chin
-Name[af]=Ken
-Name[az]=Çənə
-Name[be]=Памада
-Name[bg]=Чин
-Name[bn]=চিবুক
-Name[cs]=Brada
-Name[cy]=Gên
-Name[eo]=Vizaĝo
-Name[eu]=Kokotsa
-Name[fr]=Visage
-Name[hi]=ठोढ़ी
-Name[hr]=Brada
-Name[is]=Haka
-Name[it]=Mento
-Name[ja]=中国
-Name[km]=ចង្កា
-Name[lt]=Smakras
-Name[lv]=Seja
-Name[mk]=Брада
-Name[nds]=Kinn
-Name[ne]=चिन
-Name[nl]=Kin
-Name[pl]=Podbródek
-Name[ro]=Bărbie
-Name[ru]=Помада
-Name[sl]=Džin
-Name[sr]=Брада
-Name[sr@Latn]=Brada
-Name[sv]=Pingla
-Name[ta]=தாடை
-Name[tg]=Манаҳ
-Name[tr]=Çene
-Name[uk]=Красуня
-Name[uz@cyrillic]=Чин
-Name[ven]=Tshitefu
-Name[xh]=Isilevu
-Name[zh_CN]=头像
-Name[zh_TW]=中國
-Name[zu]=Isilevu
diff --git a/libkdegames/carddecks/decks/deck12.png b/libkdegames/carddecks/decks/deck12.png
deleted file mode 100644
index df9f6b71..00000000
--- a/libkdegames/carddecks/decks/deck12.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck13.desktop b/libkdegames/carddecks/decks/deck13.desktop
deleted file mode 100644
index 37180379..00000000
--- a/libkdegames/carddecks/decks/deck13.desktop
+++ /dev/null
@@ -1,63 +0,0 @@
-[KDE Cards]
-Name=Copy
-Name[af]=Kopie
-Name[ar]=إنسخ
-Name[az]=Köçür
-Name[be]=Скапіяваць
-Name[bg]=Ръка
-Name[bn]=কপি
-Name[br]=Eilañ
-Name[bs]=Kopiraj
-Name[ca]=Còpia
-Name[cs]=Kopie
-Name[cy]=Copio
-Name[da]=Kopi
-Name[de]=Kopie
-Name[eo]=Mano
-Name[es]=Copia
-Name[et]=Koopia
-Name[eu]=Kopiatu
-Name[fi]=Kopio
-Name[fo]=Avrit
-Name[fr]=Copie
-Name[ga]=Cóipeáil
-Name[gl]=Copia
-Name[hi]=नक़ल
-Name[hr]=Kopija
-Name[hu]=Másolás
-Name[id]=Salin
-Name[is]=Afrit
-Name[it]=Impronta
-Name[ja]=コピー
-Name[km]=ចម្លង
-Name[lt]=Kopija
-Name[lv]=Kopija
-Name[mk]=Копија
-Name[mt]=Kopja
-Name[nb]=Kopier
-Name[nds]=Kopie
-Name[ne]=प्रतिलिपि
-Name[nl]=Hand
-Name[nn]=Kopi
-Name[pl]=Kopia
-Name[pt]=Cópia
-Name[pt_BR]=Cópia
-Name[ro]=Copie
-Name[ru]=Отпечаток
-Name[se]=Máŋgus
-Name[sl]=Prepis
-Name[sr]=Копија
-Name[sr@Latn]=Kopija
-Name[sv]=Kopia
-Name[ta]=படியெடு
-Name[tg]=Нақш
-Name[tr]=Kopyala
-Name[uk]=Копія
-Name[uz]=Nusxa
-Name[uz@cyrillic]=Нусха
-Name[ven]=Tshikopololwa
-Name[wa]=Copyî
-Name[xh]=Ukukopa
-Name[zh_CN]=复制
-Name[zh_TW]=復制品
-Name[zu]=Khiphela
diff --git a/libkdegames/carddecks/decks/deck13.png b/libkdegames/carddecks/decks/deck13.png
deleted file mode 100644
index 377ec7a1..00000000
--- a/libkdegames/carddecks/decks/deck13.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck14.desktop b/libkdegames/carddecks/decks/deck14.desktop
deleted file mode 100644
index fd5df9f8..00000000
--- a/libkdegames/carddecks/decks/deck14.desktop
+++ /dev/null
@@ -1,66 +0,0 @@
-[KDE Cards]
-Name=Penguin
-Name[af]=Pikkewyn
-Name[ar]=بطريق
-Name[az]=Pinqvin
-Name[be]=Пінгвін
-Name[bg]=Пингвин
-Name[bn]=পেঙ্গুইন
-Name[br]=Penn-gwenn
-Name[bs]=Pingvin
-Name[ca]=Pingüí
-Name[cs]=Tučňák
-Name[cy]=Pengwin
-Name[da]=Pingvin
-Name[de]=Pinguin
-Name[el]=Πιγκουίνος
-Name[eo]=Pingveno
-Name[es]=Pingüino
-Name[et]=Pingviin
-Name[eu]=Pinguinoa
-Name[fa]=پنگوئن
-Name[fi]=Pingviini
-Name[fr]=Pingouin
-Name[gl]=Pingüín
-Name[he]=פינגווין
-Name[hi]=पेंग्विन
-Name[hr]=Pingvin
-Name[hu]=Pingvin
-Name[is]=Mörgæs
-Name[it]=Pinguino
-Name[km]=ផេនឃ្វីន
-Name[ko]=펭귄
-Name[lt]=Pingvinas
-Name[lv]=Pingvīns
-Name[mk]=Пингвин
-Name[mt]=Pingwin
-Name[nb]=Pingvin
-Name[nds]=Pinguin
-Name[ne]=पेन्गुइन
-Name[nl]=Pinguïn
-Name[nn]=Pingvin
-Name[pa]=ਪੈਂਗੂਇਨ
-Name[pl]=Pingwin
-Name[pt]=Pinguim
-Name[pt_BR]=Pingüim
-Name[ro]=Pinguin
-Name[ru]=Пингвин
-Name[se]=Piŋviidna
-Name[sk]=Tučniak
-Name[sl]=Pingvin
-Name[sr]=Пингвин
-Name[sr@Latn]=Pingvin
-Name[sv]=Pingvin
-Name[ta]=பென்குயின்
-Name[tg]=Пингвин
-Name[th]=เพนกวิน
-Name[tr]=Penguen
-Name[uk]=Пінгвін
-Name[uz]=Pingvin
-Name[uz@cyrillic]=Пингвин
-Name[vi]=Chim cánh cụt
-Name[wa]=Pingwin
-Name[xh]=Ipenguin
-Name[zh_CN]=企鹅
-Name[zh_TW]=企鵝
-Name[zu]=Inyoni yasemanzini
diff --git a/libkdegames/carddecks/decks/deck14.png b/libkdegames/carddecks/decks/deck14.png
deleted file mode 100644
index 694632bd..00000000
--- a/libkdegames/carddecks/decks/deck14.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck15.desktop b/libkdegames/carddecks/decks/deck15.desktop
deleted file mode 100644
index 92015b81..00000000
--- a/libkdegames/carddecks/decks/deck15.desktop
+++ /dev/null
@@ -1,19 +0,0 @@
-[KDE Cards]
-Name=Tristan
-Name[be]=Трыстан
-Name[bg]=Тристан
-Name[bn]=ত্রিস্তান
-Name[eo]=Ornamo
-Name[hi]=ट्राईस्टान
-Name[hu]=Trisztán
-Name[lv]=Tristans
-Name[mk]=Тристан
-Name[ne]=ट्रिस्टान
-Name[pt]=Tristão
-Name[ru]=Тристан
-Name[sr]=Тристан
-Name[ta]=ட்ரிஸ்டன்
-Name[tg]=Тристан
-Name[uk]=Трістан
-Name[uz@cyrillic]=Тристан
-Name[zu]=I-Tristan
diff --git a/libkdegames/carddecks/decks/deck15.png b/libkdegames/carddecks/decks/deck15.png
deleted file mode 100644
index 73c3b92c..00000000
--- a/libkdegames/carddecks/decks/deck15.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck16.desktop b/libkdegames/carddecks/decks/deck16.desktop
deleted file mode 100644
index 11ec9761..00000000
--- a/libkdegames/carddecks/decks/deck16.desktop
+++ /dev/null
@@ -1,60 +0,0 @@
-[KDE Cards]
-Name=Grandma
-Name[af]=Ouma
-Name[ar]=جدَة
-Name[az]=Nənə
-Name[be]=Бабуля
-Name[bg]=Стар стил
-Name[bn]=ঠাকুরমা, দাদী, নানী ইত্যাদি
-Name[br]=Mamm-goz
-Name[ca]=Àvia
-Name[cs]=Babička
-Name[cy]=Nain
-Name[da]=Bedstemor
-Name[de]=Großmutter
-Name[el]=Γιαγιά
-Name[eo]=Avinjo
-Name[es]=Abuela
-Name[et]=Vanaema
-Name[eu]=Amona
-Name[fi]=Isoäiti
-Name[fo]=Omma
-Name[fr]=Grand-mère
-Name[gl]=Aboa
-Name[he]=סבתא
-Name[hi]=दादी अम्मा
-Name[hr]=Baka
-Name[hu]=Nagyi
-Name[is]=Amma
-Name[it]=Nonna
-Name[km]=យាយ
-Name[ko]=할머니
-Name[lv]=Vecmāmiņa
-Name[mk]=Старовремско
-Name[mt]=Nanna
-Name[nb]=Bestemor
-Name[nds]=Oma
-Name[ne]=हजुरआमा
-Name[nl]=Grootmoeder
-Name[nn]=Bestemor
-Name[pl]=Babcia
-Name[pt]=Avó
-Name[pt_BR]=Vovó
-Name[ro]=Bunica
-Name[ru]=Бабуля
-Name[se]=Áhkku
-Name[sk]=Stará mama
-Name[sl]=Babica
-Name[sr]=Бака
-Name[sr@Latn]=Baka
-Name[sv]=Farmor
-Name[ta]=பாட்டி
-Name[tg]=Модаркалон
-Name[tr]=Büyük anne
-Name[uk]=Бабуся
-Name[ven]=Makhulu vha mukegulu
-Name[wa]=Grand-mere
-Name[xh]=Umakhulu
-Name[zh_CN]=祖母
-Name[zh_TW]=祖母
-Name[zu]=Ugogo
diff --git a/libkdegames/carddecks/decks/deck16.png b/libkdegames/carddecks/decks/deck16.png
deleted file mode 100644
index 8310ecbe..00000000
--- a/libkdegames/carddecks/decks/deck16.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck17.desktop b/libkdegames/carddecks/decks/deck17.desktop
deleted file mode 100644
index 1537939f..00000000
--- a/libkdegames/carddecks/decks/deck17.desktop
+++ /dev/null
@@ -1,65 +0,0 @@
-[KDE Cards]
-Name=Modern Red
-Name[af]=Moderne Rooi
-Name[ar]=أحمر حديث
-Name[az]=Çağdaş Qırmızı
-Name[be]=Сучасны чырвоны
-Name[bg]=Модерно червено
-Name[bn]=আধুনিক লাল
-Name[bs]=Moderna crvena
-Name[ca]=Vermell modern
-Name[cs]=Moderní červená
-Name[cy]=Coch Cyfoes
-Name[da]=Moderne rød
-Name[de]=Modernes Rot
-Name[el]=Μοντέρνο κόκκινο
-Name[eo]=Moderna ruĝo
-Name[es]=Rojo moderno
-Name[et]=Modernpunane
-Name[eu]=Gorri modernoa
-Name[fa]=قرمز مدرن‌
-Name[fi]=Moderni punainen
-Name[fr]=Rouge moderne
-Name[gl]=Vermello moderno
-Name[he]=אדום מודרני
-Name[hi]=आधुनिक लाल
-Name[hr]=Suvremeno crvena
-Name[hu]=Modern vörös
-Name[is]=Nútíma rauður
-Name[it]=Rosso moderno
-Name[ja]=モダンレッド
-Name[km]=ពណ៌​ក្រហម​ទំនើប
-Name[ko]=현대적 빨간색
-Name[lt]=Moderni raudona
-Name[lv]=Moderni sarkans
-Name[mk]=Модерно црвено
-Name[mt]=Aħmar modern
-Name[nb]=Moderne Rød
-Name[nds]=Modern Root
-Name[ne]=उन्नत रातो
-Name[nl]=Modern rood
-Name[nn]=Moderne raud
-Name[pa]=ਨਵਾਂ ਲਾਲ
-Name[pl]=Nowoczesny czerwony
-Name[pt]=Vermelho Moderno
-Name[pt_BR]=Vermelho Moderno
-Name[ro]=Roşu modern
-Name[ru]=Современный красный
-Name[se]=Ođđaáigásaš ruoksat
-Name[sk]=Moderné červené
-Name[sl]=Moderna rdeča
-Name[sr]=Модерни црвени
-Name[sr@Latn]=Moderni crveni
-Name[sv]=Modern röd
-Name[ta]=நவீன சிகப்பு
-Name[tg]=Сурхи Замонавӣ
-Name[th]=แดงทันสมัย
-Name[tr]=Modern Kırmızı
-Name[uk]=Плетінь
-Name[ven]=Muvhala Mutshuku wa Tshizwino
-Name[vi]=Màu đềEhiện đại
-Name[wa]=Rodje modiene
-Name[xh]=Umbala omtsha obomvu
-Name[zh_CN]=现代红
-Name[zh_TW]=現代紅
-Name[zu]=Ububomvu besimanje
diff --git a/libkdegames/carddecks/decks/deck17.png b/libkdegames/carddecks/decks/deck17.png
deleted file mode 100644
index 71054897..00000000
--- a/libkdegames/carddecks/decks/deck17.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck18.desktop b/libkdegames/carddecks/decks/deck18.desktop
deleted file mode 100644
index c3266a98..00000000
--- a/libkdegames/carddecks/decks/deck18.desktop
+++ /dev/null
@@ -1,19 +0,0 @@
-[KDE Cards]
-Name=Holstentor
-Name[be]=Палац
-Name[bg]=Замък
-Name[bn]=হোলস্টেনটর
-Name[eo]=Holsten-pordego
-Name[hi]=हॉल्स्टेंटर
-Name[lv]=Holšteina
-Name[mk]=Холстентор
-Name[nds]=Holstendoor
-Name[ne]=होल्सटेन्टर
-Name[ru]=Замок
-Name[sr]=Холстентор
-Name[ta]=ஹால்ஸ்டென்டர்
-Name[tg]=Қулф
-Name[uk]=Замок
-Name[ven]=Vhushavhelo
-Name[zh_CN]=豪斯顿门
-Name[zu]=I-Holstentor
diff --git a/libkdegames/carddecks/decks/deck18.png b/libkdegames/carddecks/decks/deck18.png
deleted file mode 100644
index fc93b02f..00000000
--- a/libkdegames/carddecks/decks/deck18.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck19.desktop b/libkdegames/carddecks/decks/deck19.desktop
deleted file mode 100644
index d77c2c98..00000000
--- a/libkdegames/carddecks/decks/deck19.desktop
+++ /dev/null
@@ -1,63 +0,0 @@
-[KDE Cards]
-Name=Horizon
-Name[af]=Horison
-Name[ar]=الأفق
-Name[az]=Üfüq
-Name[be]=Гарызонт
-Name[bg]=Хоризонт
-Name[bn]=দিগন্ত
-Name[br]=Dremmwel
-Name[bs]=Horizont
-Name[ca]=Horitzó
-Name[cs]=Horizont
-Name[cy]=Gorwel
-Name[da]=Horisont
-Name[de]=Horizont
-Name[el]=Ορίζοντας
-Name[eo]=Horizonto
-Name[es]=Horizonte
-Name[et]=Horisont
-Name[eu]=Zeruertza
-Name[fa]=افق
-Name[fi]=Horisontti
-Name[ga]=Léaslíne
-Name[gl]=Horizonte
-Name[he]=אופק
-Name[hi]=क्षितिज
-Name[hr]=Horizont
-Name[hu]=Horizont
-Name[is]=Sjóndeildarhringur
-Name[it]=Orizzonte
-Name[km]=ជើង​មេឃ
-Name[ko]=수평선
-Name[lv]=Horizonts
-Name[mk]=Хоризонт
-Name[mt]=Orizzont
-Name[nb]=Horisont
-Name[nds]=Kimm
-Name[ne]=क्षितिज
-Name[nn]=Horisont
-Name[pa]=ਖੇਤਰ
-Name[pl]=Horyzont
-Name[pt]=Horizonte
-Name[pt_BR]=Horizonte
-Name[ro]=Orizont
-Name[ru]=Горизонт
-Name[sk]=Horizont
-Name[sl]=Obzorje
-Name[sr]=Хоризонт
-Name[sr@Latn]=Horizont
-Name[sv]=Horisont
-Name[ta]=ஹாரிஸான்
-Name[tg]=Уфуқ
-Name[tr]=Ufuk
-Name[uk]=Обрій
-Name[uz]=Ufq
-Name[uz@cyrillic]=Уфқ
-Name[ven]=Magumoni a shango
-Name[vi]=Chân trời
-Name[wa]=Roye di cir
-Name[xh]=Ulundi
-Name[zh_CN]=地平线
-Name[zh_TW]=地平線
-Name[zu]=Okusesibhakabhakeni
diff --git a/libkdegames/carddecks/decks/deck19.png b/libkdegames/carddecks/decks/deck19.png
deleted file mode 100644
index 1526e0b3..00000000
--- a/libkdegames/carddecks/decks/deck19.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck2.desktop b/libkdegames/carddecks/decks/deck2.desktop
deleted file mode 100644
index 4e3906b2..00000000
--- a/libkdegames/carddecks/decks/deck2.desktop
+++ /dev/null
@@ -1,49 +0,0 @@
-[KDE Cards]
-Name=Starrise
-Name[ar]=ظهور النجوم
-Name[be]=Узыход зоркі
-Name[bg]=Звезди
-Name[bn]=তারার উদয়
-Name[ca]=Estrellat
-Name[cs]=Úsvit
-Name[cy]=Codiad y sêr
-Name[de]=Sternenaufgang
-Name[eo]=Stellumo
-Name[et]=Tähetõus
-Name[eu]=Izarrak
-Name[fa]=پدیدار شدن ستاره
-Name[fi]=Tähdennousu
-Name[fr]=Étoiles
-Name[he]=צאת הכוכבים
-Name[hi]=स्टार-राइज़
-Name[hr]=Uspon zvijezda
-Name[hu]=Csillagok
-Name[is]=Ris stjarna
-Name[it]=Alba spaziale
-Name[ko]=별무리
-Name[lv]=Zvaigžņu lēkts
-Name[mk]=Изгрев
-Name[mt]=SemaStilel
-Name[nb]=Stjerner
-Name[nds]=Steernopgang
-Name[ne]=स्टारराइज
-Name[nl]=Sterrijzenis
-Name[nn]=Stjerner
-Name[pa]=ਚੜਦਾ ਤਾਰਾ
-Name[pl]=Wschód gwiazdy
-Name[ro]=Stelar
-Name[ru]=Восход звезды
-Name[se]=Násttit
-Name[sk]=Východ hviezd
-Name[sl]=Vzhod zvezde
-Name[sr]=Сазвежђе
-Name[sr@Latn]=Sazvežđe
-Name[sv]=Stjärnuppgång
-Name[ta]=நட்சத்திர உதயம்
-Name[tg]=Пайдоиши ситора
-Name[uk]=Схід зірки
-Name[ven]=Vhubva naledzi
-Name[xh]=Inkwenkwezi ephumayo
-Name[zh_CN]=星空
-Name[zh_TW]=星空
-Name[zu]=Ukuvuka kwezinkanyezi
diff --git a/libkdegames/carddecks/decks/deck2.png b/libkdegames/carddecks/decks/deck2.png
deleted file mode 100644
index 52f1b67a..00000000
--- a/libkdegames/carddecks/decks/deck2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck20.desktop b/libkdegames/carddecks/decks/deck20.desktop
deleted file mode 100644
index 3403b23f..00000000
--- a/libkdegames/carddecks/decks/deck20.desktop
+++ /dev/null
@@ -1,71 +0,0 @@
-[KDE Cards]
-Name=Flowers
-Name[af]=Blomme
-Name[ar]=أزهار
-Name[az]=Çiçəklər
-Name[be]=Кветкі
-Name[bg]=Цветя
-Name[bn]=ফুল
-Name[br]=Bleunioù
-Name[bs]=Cvijeće
-Name[ca]=Flors
-Name[cs]=Květiny
-Name[cy]=Blodau
-Name[da]=Blomster
-Name[de]=Blumen
-Name[el]=Λουλούδια
-Name[eo]=Floroj
-Name[es]=Flores
-Name[et]=Lilled
-Name[eu]=Loreak
-Name[fa]=گلها
-Name[fi]=Kukat
-Name[fo]=Blómur
-Name[fr]=Fleurs
-Name[ga]=Bláthanna
-Name[gl]=Flores
-Name[he]=פרחים
-Name[hi]=पुष्प
-Name[hr]=Cvjetovi
-Name[hu]=Virágok
-Name[is]=Blóm
-Name[it]=Fiori
-Name[ja]=花
-Name[km]=ផ្កា
-Name[ko]=꽃
-Name[lt]=Gėlės
-Name[lv]=Puķes
-Name[mk]=Цвеќиња
-Name[mt]=Fjuri
-Name[nb]=Blomster
-Name[nds]=Blomen
-Name[ne]=फूल
-Name[nl]=Bloemen
-Name[nn]=Blomar
-Name[nso]=Maloba
-Name[pa]=ਫੁੱਲ
-Name[pl]=Kwiaty
-Name[pt]=Flores
-Name[pt_BR]=Flores
-Name[ro]=Flori
-Name[ru]=Цветы
-Name[se]=Lieđit
-Name[sk]=Kvety
-Name[sl]=Rože
-Name[sr]=Цвеће
-Name[sr@Latn]=Cveće
-Name[sv]=Blommor
-Name[ta]=மலர்கள்
-Name[tg]=Гулҳо
-Name[th]=ดอกไม้
-Name[tr]=Çiçekler
-Name[uk]=Квіти
-Name[uz]=Gullar
-Name[uz@cyrillic]=Гуллар
-Name[ven]=Maluvha
-Name[vi]=Hoa
-Name[wa]=Fleurs
-Name[xh]=Iintyatyambo
-Name[zh_CN]=鲜花
-Name[zh_TW]=鮮花
-Name[zu]=Izimbali
diff --git a/libkdegames/carddecks/decks/deck20.png b/libkdegames/carddecks/decks/deck20.png
deleted file mode 100644
index 73d76887..00000000
--- a/libkdegames/carddecks/decks/deck20.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck21.desktop b/libkdegames/carddecks/decks/deck21.desktop
deleted file mode 100644
index b170ee53..00000000
--- a/libkdegames/carddecks/decks/deck21.desktop
+++ /dev/null
@@ -1,65 +0,0 @@
-[KDE Cards]
-Name=Carpet
-Name[af]=Tapyt
-Name[ar]=سجادة
-Name[az]=Xalı
-Name[be]=Дыван
-Name[bg]=Килим
-Name[bn]=গালিচা
-Name[bs]=Ćilim
-Name[ca]=Catifa
-Name[cs]=Koberec
-Name[cy]=Carped
-Name[da]=Tæppe
-Name[de]=Teppich
-Name[el]=Μοκέτα
-Name[eo]=Tapiŝo
-Name[es]=Alfombra
-Name[et]=Vaip
-Name[eu]=Tapiza
-Name[fa]=فرش
-Name[fi]=Matto
-Name[fr]=Tapis
-Name[gl]=Alfombra
-Name[he]=שטיח
-Name[hi]=कालीन
-Name[hr]=Tepih
-Name[hu]=Szőnyeg
-Name[is]=Teppi
-Name[it]=Tappeto
-Name[km]=កម្រាល​ព្រំ
-Name[ko]=양탄자
-Name[lt]=Kilimas
-Name[lv]=Paklājs
-Name[mk]=Килим
-Name[mt]=Tapit
-Name[nb]=Teppe
-Name[nds]=Teppich
-Name[ne]=कार्पेट
-Name[nl]=Tapijt
-Name[nn]=Teppe
-Name[pa]=ਦਰੀ
-Name[pl]=Dywan
-Name[pt]=Carpete
-Name[pt_BR]=Carpete
-Name[ro]=Carpetă
-Name[ru]=Ковёр
-Name[se]=Máhttá
-Name[sl]=Preproga
-Name[sr]=Тепих
-Name[sr@Latn]=Tepih
-Name[sv]=Matta
-Name[ta]=கம்பளம்
-Name[tg]=Гилем
-Name[th]=พรม
-Name[tr]=Halı
-Name[uk]=Килим
-Name[uz]=Gilam
-Name[uz@cyrillic]=Гилам
-Name[ven]=Dzithovho
-Name[vi]=Thảm
-Name[wa]=Carpete
-Name[xh]=Ikhaphethi
-Name[zh_CN]=地毯
-Name[zh_TW]=地毯
-Name[zu]=UKhaphethi
diff --git a/libkdegames/carddecks/decks/deck21.png b/libkdegames/carddecks/decks/deck21.png
deleted file mode 100644
index 204156ba..00000000
--- a/libkdegames/carddecks/decks/deck21.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck22.desktop b/libkdegames/carddecks/decks/deck22.desktop
deleted file mode 100644
index 940b4f53..00000000
--- a/libkdegames/carddecks/decks/deck22.desktop
+++ /dev/null
@@ -1,58 +0,0 @@
-[KDE Cards]
-Name=Bathing
-Name[af]=Swem
-Name[ar]=يتحمم
-Name[az]=Çimmə
-Name[be]=Купанне
-Name[bg]=Море
-Name[bn]=গোসল, স্নান
-Name[bs]=Kupanje
-Name[ca]=Balneari
-Name[cs]=Koupel
-Name[cy]=Ymolchi
-Name[da]=Badning
-Name[de]=Baden
-Name[eo]=Banloko
-Name[es]=Balneario
-Name[et]=Suplus
-Name[eu]=Bainua
-Name[fi]=Kylpy
-Name[fr]=Baignade
-Name[gl]=Baño
-Name[he]=מקלחת
-Name[hi]=बाथिंग
-Name[hr]=Kupanje
-Name[hu]=Fürdő
-Name[is]=Í baði
-Name[it]=Balneare
-Name[km]=កំពុង​ងូត​ទឹក
-Name[ko]=목욕
-Name[lt]=Maudynės
-Name[lv]=Peldēšanās
-Name[mk]=Капење
-Name[mt]=Għawm
-Name[nb]=Bading
-Name[nds]=Baden
-Name[ne]=नुहाएको
-Name[nl]=Baden
-Name[nn]=Bad
-Name[pl]=Kąpiel
-Name[pt]=Banho
-Name[pt_BR]=Banho
-Name[ro]=Îmbăiere
-Name[ru]=Купание
-Name[se]=Lávgudeapmi
-Name[sl]=Kopel
-Name[sr]=Купање
-Name[sr@Latn]=Kupanje
-Name[sv]=Bad
-Name[ta]=குளியல்
-Name[tg]=Оббозӣ
-Name[tr]=Yüzme
-Name[uk]=Купання
-Name[ven]=Hu khou tambiwa
-Name[vi]=Tắm
-Name[xh]=Ukuhlamba
-Name[zh_CN]=游泳
-Name[zh_TW]=游泳
-Name[zu]=Ukugeza
diff --git a/libkdegames/carddecks/decks/deck22.png b/libkdegames/carddecks/decks/deck22.png
deleted file mode 100644
index ff3f9834..00000000
--- a/libkdegames/carddecks/decks/deck22.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck23.desktop b/libkdegames/carddecks/decks/deck23.desktop
deleted file mode 100644
index ef096f15..00000000
--- a/libkdegames/carddecks/decks/deck23.desktop
+++ /dev/null
@@ -1,55 +0,0 @@
-[KDE Cards]
-Name=Oasis
-Name[af]=Oase
-Name[ar]=واحة
-Name[az]=Oazis
-Name[be]=Аазіс
-Name[bg]=Оазис
-Name[bn]=মরুদ্যান
-Name[br]=Oazis
-Name[bs]=Oaza
-Name[cs]=Oáza
-Name[da]=Oase
-Name[de]=Oase
-Name[el]=Όαση
-Name[eo]=Oazo
-Name[et]=Oaas
-Name[eu]=Oasia
-Name[fa]=آبادی
-Name[fo]=Oasa
-Name[hi]=ओएसिस
-Name[hr]=Oaza
-Name[hu]=Oázis
-Name[is]=Vin
-Name[it]=Oasi
-Name[ko]=오아시스
-Name[lt]=Oazė
-Name[lv]=Oāze
-Name[mk]=Оаза
-Name[mt]=Oażi
-Name[nb]=Oase
-Name[nds]=Oaas
-Name[ne]=ओसिस
-Name[nl]=Oase
-Name[nn]=Oase
-Name[pl]=Oaza
-Name[pt]=Oásis
-Name[pt_BR]=Oásis
-Name[ru]=Оазис
-Name[sk]=Oáza
-Name[sl]=Oaza
-Name[sr]=Оаза
-Name[sr@Latn]=Oaza
-Name[sv]=Oas
-Name[ta]=ஒயாஸிஸ்
-Name[tg]=Оазис
-Name[th]=โอเอซิส
-Name[tr]=Vaha
-Name[uk]=Оазис
-Name[uz]=Voha
-Name[uz@cyrillic]=Воҳа
-Name[vi]=Ô'c đảo
-Name[xh]=Indawo esentlango enamanzi
-Name[zh_CN]=绿洲
-Name[zh_TW]=綠洲
-Name[zu]=Indawo evundileyo
diff --git a/libkdegames/carddecks/decks/deck23.png b/libkdegames/carddecks/decks/deck23.png
deleted file mode 100644
index a3025212..00000000
--- a/libkdegames/carddecks/decks/deck23.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck24.desktop b/libkdegames/carddecks/decks/deck24.desktop
deleted file mode 100644
index 002af784..00000000
--- a/libkdegames/carddecks/decks/deck24.desktop
+++ /dev/null
@@ -1,60 +0,0 @@
-[KDE Cards]
-Name=Konqi
-Name[be]=Конкі
-Name[bg]=Конки
-Name[bn]=কনকি
-Name[cs]=Konqui
-Name[eo]=Konĉja
-Name[hi]=के-ऑन्गी
-Name[it]=Konqui
-Name[lv]=Konvi
-Name[ne]=कोन्क्वी
-Name[ru]=Конки
-Name[sr]=Конки
-Name[sr@Latn]=Konki
-Name[ta]=கான்கி
-Name[tg]=Конки
-Name[uk]=Конкі
-Name[zu]=I-Konqi
-Comment=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[bn]=আধুনিক কনকি - একটি পারিবারিক তাস খেলা\nডিজাইন: লরা লেল্যান্ড\n <l_layland@hotmail.com>\nকনকি: স্টিফেন স্পাজ\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[bs]=Modern Konqi - igrajte sa porodičnim špilom\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ca]=Konqi modern - jugueu amb la baralla familiar\nDisseny: Laura Layland\n <l_layland@hotmail.com>\nKonqi per Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[cs]=Moderní Konqi - hrajte rodinnou hru\nNávrh: Laura Laylanda\n <l_layland@hotmail.com>\nKonqiho vytvořil Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[cy]=Set cerdiau cyfoes Konqi - chwarae yn erbyn y teulu\nDylunio:Laura Layland\n <l_layland@hotmail.com>\nKonqi gan Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[da]=Modern Konqi - spil familiekortspillet\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[de]=Modernes Konqi - Spielen Sie das Familienspiel\nDesign: Laura Laylanda\n <l_layland@hotmail.com>\nKonqi von Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[el]=Μοντέρνος Konqi - play the family θέμα καρτών\nΣχεδίαση: Laura Layland\n <l_layland@hotmail.com>\nKonqi από Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[eo]=Moderna Konĉjo - ludu per la familiokartaro\nDesegno: Laura Layland\n <l_layland@hotmail.com>\nKonĉjo de Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[es]=Konqi moderno - juegue con la baraja familiar\nDiseño: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[et]=Modern Konqi - play the family carddeck\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[eu]=Konqi modernoa - kartetan jokatzeko\nDiseinua: Laura Layland\n <l_layland@hotmail.com>\nKonqi-ren egilea Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fa]=Konqi مدرن - بازی خانوادگی carddeck\nطرح: لورا \n لایلند <l_layland@hotmail.com>\nKonqi توسط استفان اسپاتز\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fi]=Moderni Konqi - perheen korttipakka\nSuunnittelu: Laura Layland\n <l_layland@hotmail.com>\nKonqi Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[fr]=Konqi moderne - pour jouer aux cartes\nConception : Laura Layland\n <l_layland@hotmail.com>\nKonqi par Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[he]=קונקי מודרני - חפיסת קלים לכל השפחה\nעיצוב: Laura Layland\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[hr]=Suvremeni Konqi - obiteljska igra s kartama\nDizajn: Laura Layland\n <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[hu]=Modern Konqi - családi kártyacsomag\nTervezte: Laura Layland\n <l_layland@hotmail.com>\nKonqi: Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[it]=Konqui Moderno - carte familiari\nDesign: Laura Layland\n<l_layland@hotmail.com>\nKonqui di Stefan Spatz\n<stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ja]=モダン Konqi - ファミリ向けカードデッキ\nデザイン: Laura Layland\n <l_layland@hotmail.com>\nKonqi の作者: Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[lt]=Modern Konqi - žaisktie šeimos kortų žaidimą\nDizainas: Laura Layland\n <l_layland@hotmail.com>\nKatie by Agnieszka Czajkowska\n <agnieszka@imagegalaxy.de>\n
-Comment[lv]=Modernais Konkvi - spēlēt pie ģimenes kāršu galda\n Dizains: Laura Layland\n <l_layland@hotmail.com>\n Konkvi no Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[mk]=Модерен Konqi - играјте со семејниот шпил карти\nДизајн: Laura Layland\n<l_layland@hotmail.com>\nKatie од Agnieszka Czajkowska\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nb]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n <l_layland@hotmail.com>\nKonqi av Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerxburg.de>
-Comment[nds]=Modern Konqi - Speel mit de Familienkoorten\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi vun Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ne]=आधुनिक क्वोन्की - पारिवारिक कार्डडेक\nडिजाइन प्ले: लाउरा लेल्यान्ड\n <l_layland@hotmail.com>\nKonqi, स्टेफन स्पार्टजद्वारा\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nl]=Modern Konqi - speel met de familie-kaartdek\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi door Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[nn]=Moderne Konqi – familiekortstokken\nUtforming: Laura Layland\n <l_layland@hotmail.com>\nKonqi av Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerxburg.de>
-Comment[pl]=Nowoczesny Konqi - zagraj w grę rodzinną\nProjekt: Laura Laylanda\n <l_layland@hotmail.com>a\nKonqi: Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[pt]=Konqi Moderno - o baralho de cartas familiar\nConcepção: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[pt_BR]=Konqi Moderno - jogue com o baralho da família\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi por Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ru]=Колода с семейством Конки\nДизайн: Лаура Лейлэнд (Laura Layland) <l_layland@hotmail.com>\nКонки нарисован Штефаном Спартцом (Stefan Spatz) <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sk]=Moderný Konqi - hrajte rodinné kartové hry\nDesign: Laura Laylanda\n <l_layland@hotmail.com>a\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sl]=Moderni Konqi - igrajte z družinskim kupom kart\nOblikovanje: Laura Layland\n <l_layland@hotmail.com>\nKonqi od Stefana Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sr]=Модеран Конки - играјте са породичним шпилом\nДизајн: Лора Лејленд (Laura Layland)\n <l_layland@hotmail.com>\nКонки: Штефан Шпац (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sr@Latn]=Moderan Konki - igrajte sa porodičnim špilom\nDizajn: Lora Lejlend (Laura Layland)\n <l_layland@hotmail.com>\nKonki: Štefan Špac (Stefan Spatz)\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[sv]=Modern Konqi - spela familjens kortlek\nDesign: Laura Layland\n <l_layland@hotmail.com>\nKonqi av Stefan Spatza\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[ta]=மார்டன் கான்கி - குடும்பச் சீட்டுத் தளத்தை விளையாடு\nவடிவமைப்பு: லௌரா லேலாண்டு\n <l_layland@hotmail.com>\nKonqi by Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[uk]=Сучасний Конкі - зіграйте у сімейні карти\nРозробка: Laura Layland\n <l_layland@hotmail.com>\nKatie від Agnieszka Czajkowska\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[wa]=Modiene Konqi - cwårdjeus des familes\nDessins: Laura Layland\n <l_layland@hotmail.com>\nKonqi pa Stefan Spatz\n <stefan.spatz@stud-mail.uni-wuerzburg.de>
-Comment[zh_TW]=現代 Konqi - 玩家庭牌局\n設計︰Laura Layland...<l_layland@hotmail.com>\nKonqi by Stefan Spatz...<stefan.spatz@stud-mail.uni-wuerzburg.de>
diff --git a/libkdegames/carddecks/decks/deck24.png b/libkdegames/carddecks/decks/deck24.png
deleted file mode 100644
index 0596e919..00000000
--- a/libkdegames/carddecks/decks/deck24.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck3.desktop b/libkdegames/carddecks/decks/deck3.desktop
deleted file mode 100644
index a383495e..00000000
--- a/libkdegames/carddecks/decks/deck3.desktop
+++ /dev/null
@@ -1,60 +0,0 @@
-[KDE Cards]
-Name=Romantic
-Name[af]=Romantiese
-Name[ar]=رومانسي
-Name[az]=Romantik
-Name[be]=Рамантыка
-Name[bg]=Романтика
-Name[bn]=রোমান্টিক
-Name[bs]=Romantika
-Name[ca]=Romàntic
-Name[cs]=Romantika
-Name[cy]=Rhamantus
-Name[da]=Romantisk
-Name[de]=Romantisch
-Name[el]=Ρομαντικό
-Name[eo]=Romantiko
-Name[es]=Romántico
-Name[et]=Romantika
-Name[eu]=Erromantikoa
-Name[fa]=خیال‌انگیز
-Name[fi]=Romanttinen
-Name[fr]=Romantique
-Name[gl]=Romántica
-Name[he]=רומנטי
-Name[hi]=रूमानी
-Name[hr]=Romantika
-Name[hu]=Romantikus
-Name[is]=Rómantískt
-Name[it]=Romantico
-Name[km]=មនោសញ្ចេតនា
-Name[ko]=로맨틱
-Name[lt]=Romantika
-Name[lv]=Romantika
-Name[mk]=Романтика
-Name[mt]=Romantiku
-Name[nb]=Romantisk
-Name[nds]=Romantsch
-Name[ne]=रोमान्टिक
-Name[nl]=Romantisch
-Name[nn]=Romantisk
-Name[pa]=ਰੁਮਾਂਸਵਾਦੀ
-Name[pl]=Romantyczny
-Name[pt]=Romântico
-Name[pt_BR]=Romântico
-Name[ru]=Романтика
-Name[se]=Romántalaš
-Name[sk]=Romantické
-Name[sl]=Romantično
-Name[sr]=Романтичан
-Name[sr@Latn]=Romantičan
-Name[sv]=Romantisk
-Name[ta]=ரொமான்டிக்
-Name[tg]=Хаёлпарастӣ
-Name[th]=โรแมนติก
-Name[uk]=Романтичний
-Name[vi]=Lãng mạn
-Name[wa]=Romantike
-Name[zh_CN]=浪漫
-Name[zh_TW]=浪漫的
-Name[zu]=I-Romantic
diff --git a/libkdegames/carddecks/decks/deck3.png b/libkdegames/carddecks/decks/deck3.png
deleted file mode 100644
index dced5af7..00000000
--- a/libkdegames/carddecks/decks/deck3.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck4.desktop b/libkdegames/carddecks/decks/deck4.desktop
deleted file mode 100644
index c23f4963..00000000
--- a/libkdegames/carddecks/decks/deck4.desktop
+++ /dev/null
@@ -1,93 +0,0 @@
-[KDE Cards]
-Name=Panda
-Name[ar]=باندا
-Name[be]=Панда
-Name[bg]=Панда
-Name[bn]=পান্ডা
-Name[el]=Πάντα
-Name[eo]=Pando
-Name[fa]=پاندا
-Name[he]=פנדה
-Name[hi]=पाण्डा
-Name[is]=Pandabjörn
-Name[ko]=팬더
-Name[mk]=Панда
-Name[ne]=पान्डा
-Name[pa]=ਪਾਂਡਾ
-Name[ru]=Панда
-Name[sr]=Панда
-Name[ta]=பாண்டா
-Name[tg]=Панда
-Name[th]=แพนด้า
-Name[uk]=Панда
-Name[uz@cyrillic]=Панда
-Name[ven]=Tshivhingwi
-Name[vi]=Gấu mèo
-Name[xh]=Ibhere
-Name[zh_CN]=熊猫
-Name[zh_TW]=熊貓
-Name[zu]=Ibhele
-Comment=Dedicated to WWF
-Comment[af]=Opgedra na Wwf
-Comment[ar]=إهداء إلى المؤسسة العالمية للحفاظ على البيئة (WWF)
-Comment[az]=WWFyə hasr edilib
-Comment[be]=Прысвячаецца WWF
-Comment[bg]=Посвещава се на WWF
-Comment[bn]=WWF-এর প্রতি উত্‍সর্গীকৃত
-Comment[bs]=Posvećen WWFu
-Comment[ca]=Dedicat a WWF
-Comment[cs]=Věnované WWF
-Comment[cy]=Cyflwynedig i\'r WWF
-Comment[da]=Dedikeret til WWF
-Comment[de]=Dem WWF gewidmet
-Comment[el]=Αφιερωμένο στο WWF
-Comment[eo]=Dediĉita al WWF
-Comment[es]=Dedicado a WWF
-Comment[et]=Pühendatud organisatsioonile WWF
-Comment[eu]=WWF-ren ohorean
-Comment[fa]=مختص WWF
-Comment[fi]=Omistettu WWF:lle
-Comment[fr]=Dédicacé au WWF
-Comment[gl]=Adicado a WWF
-Comment[he]=מוקדש לקרן העולמית
-Comment[hi]=डब्लयूडब्लयूएफ को समर्पित
-Comment[hr]=Posvećeno WWF-u
-Comment[hu]=A WWF-nek dedikálva
-Comment[is]=Tileinkað WWF
-Comment[it]=Dedicato al WWF
-Comment[ja]=WWF に捧ぐ
-Comment[km]=ឧទ្ទិស​ជូន WWF
-Comment[ko]=WWF에 바침
-Comment[lt]=Skirta WWF
-Comment[lv]=Veltīts WWF
-Comment[mk]=Посветено на WWF (светска фондација за дивиот свет)
-Comment[mt]=Dedikat lill-WWF
-Comment[nb]=Dedikert til WWF
-Comment[nds]=Den WWF toeegt
-Comment[ne]=डब्लूडब्लूएफ प्रति समर्पित
-Comment[nl]=Opgedragen aan WWF (WereldNatuurFonds)
-Comment[nn]=Tileigna WWF
-Comment[pa]=WWF ਨੂੰ ਸਮਰਪਤ
-Comment[pl]=Przeznaczony do WWF
-Comment[pt]=Dedicado ao WWF
-Comment[pt_BR]=Dedicado ao WWF
-Comment[ro]=Dedicat lui WWF
-Comment[ru]=Посвящается WWF
-Comment[sk]=Venované WWF
-Comment[sl]=Posvečeno WWF
-Comment[sr]=Посвећено WWF-у
-Comment[sr@Latn]=Posvećeno WWF-u
-Comment[sv]=Tillägnad WWF
-Comment[ta]= WWF-க்கு அர்ப்பணிக்கப்பட்டது
-Comment[tg]=Бахшида шудааст ба WWF
-Comment[tr]=WWF'e adanmış
-Comment[uk]=Присвячено WWF
-Comment[uz]=WWF tashkilotiga bagʻishlangan
-Comment[uz@cyrillic]=WWF ташкилотига бағишланган
-Comment[ven]=Yo livhiswa kha WWF
-Comment[vi]=Dâng tặng WWF
-Comment[wa]=Dicåçté å WWF
-Comment[xh]=Yenzelwe ku WWF
-Comment[zh_CN]=献给 WWF
-Comment[zh_TW]=獻給 WWF
-Comment[zu]=Inikelwe kwi-WWF
diff --git a/libkdegames/carddecks/decks/deck4.png b/libkdegames/carddecks/decks/deck4.png
deleted file mode 100644
index 23fa4010..00000000
--- a/libkdegames/carddecks/decks/deck4.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck5.desktop b/libkdegames/carddecks/decks/deck5.desktop
deleted file mode 100644
index 5cbe2d6f..00000000
--- a/libkdegames/carddecks/decks/deck5.desktop
+++ /dev/null
@@ -1,67 +0,0 @@
-[KDE Cards]
-Name=Water
-Name[ar]=ماء
-Name[az]=Su
-Name[be]=Вада
-Name[bg]=Вода
-Name[bn]=পানি
-Name[br]=Dou
-Name[bs]=Voda
-Name[ca]=Aigua
-Name[cs]=Voda
-Name[cy]=Dŵr
-Name[da]=Vand
-Name[de]=Wasser
-Name[el]=Νερό
-Name[eo]=Akvo
-Name[es]=Agua
-Name[et]=Vesi
-Name[eu]=Ura
-Name[fa]=آب
-Name[fi]=Vesi
-Name[fo]=Vatn
-Name[fr]=Eau
-Name[ga]=Uisce
-Name[gl]=Auga
-Name[he]=מים
-Name[hi]=पानी
-Name[hr]=Voda
-Name[hu]=Víz
-Name[is]=Vatn
-Name[it]=Acqua
-Name[ja]=水
-Name[km]=ទឹក
-Name[ko]=물
-Name[lt]=Vanduo
-Name[lv]=Ūdens
-Name[mk]=Вода
-Name[mt]=Ilma
-Name[nb]=Vann
-Name[ne]=पानी
-Name[nn]=Vatn
-Name[nso]=Meetse
-Name[pa]=ਪਾਣੀ
-Name[pl]=Woda
-Name[pt]=Água
-Name[pt_BR]=Água
-Name[ro]=Apă
-Name[ru]=Вода
-Name[se]=Čáhci
-Name[sk]=Voda
-Name[sl]=Voda
-Name[sr]=Вода
-Name[sr@Latn]=Voda
-Name[sv]=Vatten
-Name[ta]=தண்ணீர்
-Name[tg]=Об
-Name[th]=น้ำ
-Name[uk]=Вода
-Name[uz]=Suv
-Name[uz@cyrillic]=Сув
-Name[ven]=Madi
-Name[vi]=Nước
-Name[wa]=Aiwe
-Name[xh]=Amanzi
-Name[zh_CN]=水
-Name[zh_TW]=水
-Name[zu]=Amanzi
diff --git a/libkdegames/carddecks/decks/deck5.png b/libkdegames/carddecks/decks/deck5.png
deleted file mode 100644
index 63cb6762..00000000
--- a/libkdegames/carddecks/decks/deck5.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck6.desktop b/libkdegames/carddecks/decks/deck6.desktop
deleted file mode 100644
index 6d84a8ad..00000000
--- a/libkdegames/carddecks/decks/deck6.desktop
+++ /dev/null
@@ -1,66 +0,0 @@
-[KDE Cards]
-Name=Beach
-Name[af]=Strand
-Name[ar]=شاطئ
-Name[az]=Çimərlik
-Name[be]=Пляж
-Name[bg]=Плаж
-Name[bn]=সৈকত
-Name[br]=Traezhenn
-Name[bs]=Plaža
-Name[ca]=Platja
-Name[cs]=Pláž
-Name[cy]=Traeth
-Name[da]=Strand
-Name[de]=Strand
-Name[el]=Παραλία
-Name[eo]=Plaĝo
-Name[es]=Playa
-Name[et]=Rand
-Name[eu]=Hondartza
-Name[fa]=ساحل
-Name[fi]=Ranta
-Name[fr]=Plage
-Name[gl]=Praia
-Name[he]=חוף
-Name[hi]=समुद्र तट
-Name[hr]=Plaža
-Name[hu]=Tengerpart
-Name[is]=Strönd
-Name[it]=Spiaggia
-Name[km]=ឆ្នេរ​ខ្សាច់
-Name[ko]=바닷가
-Name[lt]=Paplūdimys
-Name[lv]=Pludmale
-Name[mk]=Плажа
-Name[mt]=Ramla
-Name[nb]=Strand
-Name[nds]=Strand
-Name[ne]=किनारा
-Name[nl]=Strand
-Name[nn]=Strand
-Name[nso]=Lewatle
-Name[pa]=ਬੀਚ
-Name[pl]=Plaża
-Name[pt]=Praia
-Name[pt_BR]=Praia
-Name[ro]=Plajă
-Name[ru]=Пляж
-Name[se]=Fiervá
-Name[sk]=Pláž
-Name[sl]=Obala
-Name[sr]=Плажа
-Name[sr@Latn]=Plaža
-Name[sv]=Strand
-Name[ta]=கடல்
-Name[tg]=Пляж
-Name[th]=อ่าว
-Name[tr]=Sahil
-Name[uk]=Пляж
-Name[ven]=Bitshini
-Name[vi]=Bãi biển
-Name[wa]=Pladje
-Name[xh]=Ulwande
-Name[zh_CN]=海滩
-Name[zh_TW]=海灘
-Name[zu]=Ulwandle
diff --git a/libkdegames/carddecks/decks/deck6.png b/libkdegames/carddecks/decks/deck6.png
deleted file mode 100644
index 1708d784..00000000
--- a/libkdegames/carddecks/decks/deck6.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck7.desktop b/libkdegames/carddecks/decks/deck7.desktop
deleted file mode 100644
index 3590a15e..00000000
--- a/libkdegames/carddecks/decks/deck7.desktop
+++ /dev/null
@@ -1,67 +0,0 @@
-[KDE Cards]
-Name=Sunset
-Name[af]=Sonsondergang
-Name[ar]=غروب الشمس
-Name[az]=Gün doğuşu
-Name[be]=Заход
-Name[bg]=Залез
-Name[bn]=সূর্যাস্ত
-Name[br]=Kuzh-heol
-Name[bs]=Zalazak
-Name[ca]=Posta de sol
-Name[cs]=Západ slunce
-Name[cy]=Machlud
-Name[da]=Solnedgang
-Name[de]=Sonnenuntergang
-Name[el]=Ηλιοβασίλεμα
-Name[eo]=Sunsubiro
-Name[es]=Puesta de sol
-Name[et]=Loojang
-Name[eu]=Eguzki-sartzea
-Name[fa]=غروب
-Name[fi]=Auringonlasku
-Name[fo]=Sólsetur
-Name[fr]=Soleil
-Name[gl]=Entre lusco e fusco
-Name[he]=שקיעה
-Name[hi]=सूर्यास्त
-Name[hr]=Zalazak sunca
-Name[hu]=Naplemente
-Name[is]=Sólsetur
-Name[it]=Tramonto
-Name[km]=សុរិយា​អស្ដង្គត
-Name[ko]=저녁놀
-Name[lt]=Saulėlydis
-Name[lv]=Saullēkts
-Name[mk]=Зајдисонце
-Name[mt]=Għabex
-Name[nb]=Solnedgang
-Name[nds]=Sünnünnergang
-Name[ne]=सुर्यास्त
-Name[nl]=Zonsondergang
-Name[nn]=Solrenning
-Name[pa]=ਡੁੱਬਦਾ ਸੂਰਜ
-Name[pl]=Zachód słońca
-Name[pt]=Pôr-do-Sol
-Name[pt_BR]=Pôr-do-sol
-Name[ro]=Asfinţit
-Name[ru]=Закат
-Name[sk]=Západ slnka
-Name[sl]=Sončni zahod
-Name[sr]=Залазак сунца
-Name[sr@Latn]=Zalazak sunca
-Name[sv]=Solnedgång
-Name[ta]=சூரிய அஸ்தமம்
-Name[tg]=Ғуруби Офтоб
-Name[th]=พระอาทิตย์ตก
-Name[tr]=Gündoğumu
-Name[uk]=Захід сонця
-Name[uz]=Oqshom
-Name[uz@cyrillic]=Оқшом
-Name[ven]=Vhukovhela
-Name[vi]=Hoàng hôn
-Name[wa]=Solea djus
-Name[xh]=Ukutshona kwelanga
-Name[zh_CN]=日落
-Name[zh_TW]=日落
-Name[zu]=Ukushona kwelanga
diff --git a/libkdegames/carddecks/decks/deck7.png b/libkdegames/carddecks/decks/deck7.png
deleted file mode 100644
index c7f043db..00000000
--- a/libkdegames/carddecks/decks/deck7.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck8.desktop b/libkdegames/carddecks/decks/deck8.desktop
deleted file mode 100644
index 0c68bc9f..00000000
--- a/libkdegames/carddecks/decks/deck8.desktop
+++ /dev/null
@@ -1,67 +0,0 @@
-[KDE Cards]
-Name=Road
-Name[af]=Pad
-Name[ar]=طريق
-Name[az]=Yol
-Name[be]=Дарога
-Name[bg]=Път
-Name[bn]=পথ
-Name[bs]=Put
-Name[ca]=Carretera
-Name[cs]=Cesta
-Name[cy]=Ffordd
-Name[da]=Vej
-Name[de]=Straße
-Name[el]=Δρόμος
-Name[eo]=Strato
-Name[es]=Carretera
-Name[et]=Maantee
-Name[eu]=Errepidea
-Name[fa]=جاده
-Name[fi]=Tie
-Name[fo]=Vegur
-Name[fr]=Route
-Name[gl]=Estrada
-Name[he]=בדרכים
-Name[hi]=रास्ता
-Name[hr]=Cesta
-Name[hu]=Országút
-Name[is]=Vegur
-Name[it]=Strada
-Name[km]=ផ្លូវ
-Name[ko]=길
-Name[lt]=Kelias
-Name[lv]=Ceļš
-Name[mk]=Пат
-Name[mt]=Triq
-Name[nb]=Vei
-Name[nds]=Straat
-Name[ne]=बाटो
-Name[nl]=Weg
-Name[nn]=Veg
-Name[nso]=Tsela
-Name[pa]=ਰਾਹ
-Name[pl]=Droga
-Name[pt]=Estrada
-Name[pt_BR]=Estrada
-Name[ro]=Şosea
-Name[ru]=Дорога
-Name[se]=Geaidnu
-Name[sk]=Cesta
-Name[sl]=Cesta
-Name[sr]=Пут
-Name[sr@Latn]=Put
-Name[sv]=Väg
-Name[ta]=சாலை
-Name[tg]=Роҳ
-Name[th]=ถนน
-Name[tr]=Yol
-Name[uk]=Дорога
-Name[uz]=Yoʻl
-Name[uz@cyrillic]=Йўл
-Name[ven]=Bada
-Name[vi]=Con đường
-Name[xh]=Indlela
-Name[zh_CN]=路
-Name[zh_TW]=道路
-Name[zu]=Umgwaqo
diff --git a/libkdegames/carddecks/decks/deck8.png b/libkdegames/carddecks/decks/deck8.png
deleted file mode 100644
index 4fed86e6..00000000
--- a/libkdegames/carddecks/decks/deck8.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/carddecks/decks/deck9.desktop b/libkdegames/carddecks/decks/deck9.desktop
deleted file mode 100644
index 2541e22a..00000000
--- a/libkdegames/carddecks/decks/deck9.desktop
+++ /dev/null
@@ -1,7 +0,0 @@
-[KDE Cards]
-Name=KDE
-Name[af]=Kde
-Name[bn]=কে.ডি.ই.
-Name[hi]=केडीई
-Name[ne]=केडीई
-Name[ta]=கேடிஇ
diff --git a/libkdegames/carddecks/decks/deck9.png b/libkdegames/carddecks/decks/deck9.png
deleted file mode 100644
index 35abd0a8..00000000
--- a/libkdegames/carddecks/decks/deck9.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/configure.in.in b/libkdegames/configure.in.in
deleted file mode 100644
index ffcaf9c9..00000000
--- a/libkdegames/configure.in.in
+++ /dev/null
@@ -1,49 +0,0 @@
-dnl AB: checking for a system-wide highscore file. If "no" then the default
-dnl (just kapp->config()) is used. See KHighscore for details.
-
-AC_MSG_CHECKING(whether to use system-wide highscores)
-AC_ARG_ENABLE(highscore-dir,
-AC_HELP_STRING([--enable-highscore-dir=DIR], [system-wide highscore table @<:@default=no@:>@]), [use_highscore_dir=yes], [use_highscore_dir=no])
-
-if test "$use_highscore_dir" = "no"; then
- AC_MSG_RESULT(no)
- AC_SUBST(HIGHSCORE_DIRECTORY, "")
-else
- case "${enableval}" in
- yes) highscore_dir='${localstatedir}/games' ;;
- no) ;;
- *) highscore_dir=${enableval} ;;
- esac
- AC_DEFINE_UNQUOTED(HIGHSCORE_DIRECTORY, "$highscore_dir", [The system-wide highscore directory])
- AC_SUBST(HIGHSCORE_DIRECTORY, $highscore_dir)
- AC_MSG_RESULT($use_highscore_dir)
-fi
-
-AC_MSG_CHECKING(whether to setgid binaries)
-AC_ARG_ENABLE(setgid,
- [ --enable-setgid Enable the use of setgid binaries],
- [case "${enableval}" in
- yes)
- case "$use_highscore_dir" in
- yes) setgid=true;;
- no) setgid=false;;
- esac ;;
- no) setgid=false ;;
- *) AC_MSG_ERROR(bad value ${enableval} for --disable-setgid) ;;
- esac],[setgid=false])
-AC_SUBST(setgid)
-AC_MSG_RESULT($setgid)
-
-AC_MSG_CHECKING(what group to use for the highscore tables and binaries)
-AC_ARG_WITH(highscore-group,
-[ --with-highscore-group=group Group for the highscore tables and binaries],
-highscore_group="$withval",highscore_group="games")
-AC_SUBST(highscore_group)
-AC_MSG_RESULT($highscore_group)
-
-AC_MSG_CHECKING(what user to use for the highscore tables and binaries)
-AC_ARG_WITH(highscore-user,
-[ --with-highscore-user=user User for the highscore tables],
-highscore_user="$withval",highscore_user="games")
-AC_SUBST(highscore_user)
-AC_MSG_RESULT($highscore_user)
diff --git a/libkdegames/highscore/INSTALL b/libkdegames/highscore/INSTALL
deleted file mode 100644
index 5f9116cf..00000000
--- a/libkdegames/highscore/INSTALL
+++ /dev/null
@@ -1,12 +0,0 @@
-Installation notes for the highscore files ; this is only relevant if you
-configured libtdegames with option --enable-highscore-dir=DIR (usually DIR is
-/var/games) for using system-wide highscore files.
-
-For each game using the highscore system :
-
-- the game executable "mygame" should be installed sgid "games"
-
-- an empty file "mygame.scores" should be created in the directory pointed by
-the configuration option. It should be owned by group "games" with read and
-write permissions and should -not- be world readable (since it can contains
-possibly sensitive information associating username with game usage).
diff --git a/libkdegames/highscore/Makefile.am b/libkdegames/highscore/Makefile.am
deleted file mode 100644
index 6fa18cc0..00000000
--- a/libkdegames/highscore/Makefile.am
+++ /dev/null
@@ -1,19 +0,0 @@
-noinst_LTLIBRARIES = libkhighscore.la
-
-INCLUDES = $(all_includes)
-
-libkhighscore_la_SOURCES = kconfigrawbackend.cpp \
- kfilelock.cpp khighscore.cpp kscoredialog.cpp \
- kexthighscore_item.cpp kexthighscore_internal.cpp \
- kexthighscore_tab.cpp kexthighscore_gui.cpp \
- kexthighscore.cpp
-
-include_HEADERS = khighscore.h kscoredialog.h \
- kexthighscore_item.h kexthighscore.h
-
-noinst_HEADERS = kconfigrawbackend.h \
- kfilelock.h kexthighscore_internal.h kexthighscore_tab.h \
- kexthighscore_gui.h
-
-METASOURCES = kconfigrawbackend.moc khighscore.moc kscoredialog.moc \
- kexthighscore_tab.moc kexthighscore_gui.moc
diff --git a/libkdegames/highscore/kconfigrawbackend.cpp b/libkdegames/highscore/kconfigrawbackend.cpp
deleted file mode 100644
index c2643056..00000000
--- a/libkdegames/highscore/kconfigrawbackend.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kconfigrawbackend.h"
-#include "kconfigrawbackend.moc"
-
-#include <unistd.h>
-#include <tqfile.h>
-
-
-KConfigRawBackEnd::KConfigRawBackEnd(KConfigBase *_config, int fd)
- : KConfigINIBackEnd(_config, TQString(), "config", false),
- _fd(fd), _stream(0)
-{
- _file.open(IO_ReadOnly, _fd);
-}
-
-KConfigRawBackEnd::~KConfigRawBackEnd()
-{
- if (_stream) fclose(_stream);
-}
-
-bool KConfigRawBackEnd::parseConfigFiles()
-{
- _file.reset();
- parseSingleConfigFile(_file);
- return true;
-}
-
-void KConfigRawBackEnd::sync(bool bMerge)
-{
- // write-sync is only necessary if there are dirty entries
- if ( !pConfig->isDirty() || pConfig->isReadOnly() ) return;
-
- _file.reset();
- KEntryMap aTempMap;
- getEntryMap(aTempMap, false, bMerge ? &_file : 0);
-
- if ( _stream==0 ) {
- _stream = fdopen(_fd, "w");
- if ( _stream==0 ) return;
- }
- ftruncate(_fd, 0);
- writeEntries(_stream, aTempMap);
- fflush(_stream);
-}
diff --git a/libkdegames/highscore/kconfigrawbackend.h b/libkdegames/highscore/kconfigrawbackend.h
deleted file mode 100644
index 6a1ea4b9..00000000
--- a/libkdegames/highscore/kconfigrawbackend.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef _KCONFIGRAWBACKEND_H
-#define _KCONFIGRAWBACKEND_H
-
-#include <tqfile.h>
-
-#include <kconfigbackend.h>
-#include <ksimpleconfig.h>
-
-
-class KConfigRawBackEnd : public KConfigINIBackEnd
-{
-public:
- KConfigRawBackEnd(KConfigBase *_config, int fd);
- ~KConfigRawBackEnd();
-
- bool parseConfigFiles();
-
- void sync(bool bMerge = true);
-
-private:
- int _fd;
- FILE *_stream;
- TQFile _file;
-
- class KConfigRawBackEndPrivate;
- KConfigRawBackEndPrivate *d;
-};
-
-class KRawConfig : public KSimpleConfig
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KRawConfig(int fd, bool readOnly)
- : KSimpleConfig(new KConfigRawBackEnd(this, fd), readOnly) {}
-};
-
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore.cpp b/libkdegames/highscore/kexthighscore.cpp
deleted file mode 100644
index d352a266..00000000
--- a/libkdegames/highscore/kexthighscore.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore.h"
-
-#include <tqlayout.h>
-
-#include <kdebug.h>
-
-#include "kexthighscore_internal.h"
-#include "kexthighscore_gui.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-ManagerPrivate *internal = 0;
-
-uint gameType()
-{
- internal->checkFirst();
- return internal->gameType();
-}
-
-void setGameType(uint type)
-{
- internal->setGameType(type);
-}
-
-bool configure(TQWidget *parent)
-{
- internal->checkFirst();
- ConfigDialog *cd = new ConfigDialog(parent);
- cd->exec();
- bool saved = cd->hasBeenSaved();
- delete cd;
- return saved;
-}
-
-void show(TQWidget *parent, int rank)
-{
- HighscoresDialog *hd = new HighscoresDialog(rank, parent);
- hd->exec();
- delete hd;
-}
-
-void submitScore(const Score &score, TQWidget *widget)
-{
- int rank = internal->submitScore(score, widget,
- internal->showMode!=Manager::NeverShow);
-
- switch (internal->showMode) {
- case Manager::AlwaysShow:
- show(widget, -1);
- break;
- case Manager::ShowForHigherScore:
- if ( rank!=-1) show(widget, rank);
- break;
- case Manager::ShowForHighestScore:
- if ( rank==0 ) show(widget, rank);
- break;
- case Manager::NeverShow:
- break;
- }
-}
-
-void show(TQWidget *widget)
-{
- internal->checkFirst();
- show(widget, -1);
-}
-
-Score lastScore()
-{
- internal->checkFirst();
- internal->hsConfig().readCurrentConfig();
- uint nb = internal->scoreInfos().maxNbEntries();
- return internal->readScore(nb-1);
-}
-
-Score firstScore()
-{
- internal->checkFirst();
- internal->hsConfig().readCurrentConfig();
- return internal->readScore(0);
-}
-
-
-//-----------------------------------------------------------------------------
-Manager::Manager(uint nbGameTypes, uint maxNbEntries)
-{
- Q_ASSERT(nbGameTypes);
- Q_ASSERT(maxNbEntries);
- if (internal)
- kdFatal(11002) << "A highscore object already exists" << endl;
- internal = new ManagerPrivate(nbGameTypes, *this);
- internal->init(maxNbEntries);
-}
-
-Manager::~Manager()
-{
- delete internal;
- internal = 0;
-}
-
-void Manager::setTrackLostGames(bool track)
-{
- internal->trackLostGames = track;
-}
-
-void Manager::setTrackDrawGames(bool track)
-{
- internal->trackDrawGames = track;
-}
-
-void Manager::setShowStatistics(bool show)
-{
- internal->showStatistics = show;
-}
-
-void Manager::showStatistics(bool show)
-{
- internal->showStatistics = show;
-}
-
-void Manager::setShowDrawGamesStatistic(bool show)
-{
- internal->showDrawGames = show;
-}
-
-void Manager::setWWHighscores(const KURL &url, const TQString &version)
-{
- Q_ASSERT( url.isValid() );
- internal->serverURL = url;
- const char *HS_WW_URL = "ww hs url";
- ConfigGroup cg;
- if ( cg.config()->hasKey(HS_WW_URL) )
- internal->serverURL = cg.config()->readEntry(HS_WW_URL);
- else cg.config()->writeEntry(HS_WW_URL, url.url());
- internal->version = version;
-}
-
-void Manager::setScoreHistogram(const TQMemArray<uint> &scores,
- ScoreTypeBound type)
-{
- Q_ASSERT( scores.size()>=2 );
- for (uint i=0; i<scores.size()-1; i++)
- Q_ASSERT( scores[i]<scores[i+1] );
- internal->playerInfos().createHistoItems(scores, type==ScoreBound);
-}
-
-void Manager::setShowMode(ShowMode mode)
-{
- internal->showMode = mode;
-}
-
-void Manager::setScoreType(ScoreType type)
-{
- switch (type) {
- case Normal:
- return;
- case MinuteTime: {
- Item *item = createItem(ScoreDefault);
- item->setPrettyFormat(Item::MinuteTime);
- setScoreItem(0, item);
-
- item = createItem(MeanScoreDefault);
- item->setPrettyFormat(Item::MinuteTime);
- setPlayerItem(MeanScore, item);
-
- item = createItem(BestScoreDefault);
- item->setPrettyFormat(Item::MinuteTime);
- setPlayerItem(BestScore, item);
- return;
- }
- }
-}
-
-void Manager::submitLegacyScore(const Score &score) const
-{
- internal->submitLocal(score);
-}
-
-bool Manager::isStrictlyLess(const Score &s1, const Score &s2) const
-{
- return s1.score()<s2.score();
-}
-
-Item *Manager::createItem(ItemType type)
-{
- Item *item = 0;
- switch (type) {
- case ScoreDefault:
- item = new Item((uint)0, i18n("Score"), TQt::AlignRight);
- break;
- case MeanScoreDefault:
- item = new Item((double)0, i18n("Mean Score"), TQt::AlignRight);
- item->setPrettyFormat(Item::OneDecimal);
- item->setPrettySpecial(Item::DefaultNotDefined);
- break;
- case BestScoreDefault:
- item = new Item((uint)0, i18n("Best Score"), TQt::AlignRight);
- item->setPrettySpecial(Item::DefaultNotDefined);
- break;
- case ElapsedTime:
- item = new Item((uint)0, i18n("Elapsed Time"), TQt::AlignRight);
- item->setPrettyFormat(Item::MinuteTime);
- item->setPrettySpecial(Item::ZeroNotDefined);
- break;
- }
- return item;
-}
-
-void Manager::setScoreItem(uint worstScore, Item *item)
-{
- item->setDefaultValue(worstScore);
- internal->scoreInfos().setItem("score", item);
- internal->playerInfos().item("mean score")
- ->item()->setDefaultValue(double(worstScore));
- internal->playerInfos().item("best score")
- ->item()->setDefaultValue(worstScore);
-}
-
-void Manager::addScoreItem(const TQString &name, Item *item)
-{
- internal->scoreInfos().addItem(name, item, true);
-}
-
-void Manager::setPlayerItem(PlayerItemType type, Item *item)
-{
- const Item *scoreItem = internal->scoreInfos().item("score")->item();
- uint def = scoreItem->defaultValue().toUInt();
- TQString name;
- switch (type) {
- case MeanScore:
- name = "mean score";
- item->setDefaultValue(double(def));
- break;
- case BestScore:
- name = "best score";
- item->setDefaultValue(def);
- break;
- }
- internal->playerInfos().setItem(name, item);
-}
-
-TQString Manager::gameTypeLabel(uint gameType, LabelType type) const
-{
- if ( gameType!=0 )
- kdFatal(11002) << "You need to reimplement KExtHighscore::Manager for "
- << "multiple game types" << endl;
- switch (type) {
- case Icon:
- case Standard:
- case I18N: break;
- case WW: return "normal";
- }
- return TQString();
-}
-
-void Manager::addToQueryURL(KURL &url, const TQString &item,
- const TQString &content)
-{
- Q_ASSERT( !item.isEmpty() && url.queryItem(item).isNull() );
-
- TQString query = url.query();
- if ( !query.isEmpty() ) query += '&';
- query += item + '=' + KURL::encode_string(content);
- url.setQuery(query);
-}
-
-} // namescape
diff --git a/libkdegames/highscore/kexthighscore.h b/libkdegames/highscore/kexthighscore.h
deleted file mode 100644
index 5809a896..00000000
--- a/libkdegames/highscore/kexthighscore.h
+++ /dev/null
@@ -1,367 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_H
-#define KEXTHIGHSCORE_H
-
-#include "kexthighscore_item.h"
-
-#include <kurl.h>
-#include <kdemacros.h>
-
-class TQTabWidget;
-
-
-namespace KExtHighscore
-{
-
-class Score;
-class Item;
-
-class ManagerPrivate;
-extern ManagerPrivate *internal;
-
-/**
- * Get the current game type.
- */
-KDE_EXPORT uint gameType();
-
-/**
- * Set the current game type.
- */
-KDE_EXPORT void setGameType(uint gameType);
-
-/**
- * Configure the highscores.
- * @return true if the configuration has been modified and saved
- */
-KDE_EXPORT bool configure(TQWidget *parent);
-
-/**
- * Show the highscores lists.
- */
-KDE_EXPORT void show(TQWidget *parent);
-
-/**
- * Submit a score. See @ref Manager for usage example.
- *
- * @param widget a widget used as parent for error message box.
- */
-KDE_EXPORT void submitScore(const Score &score, TQWidget *widget);
-
-/**
- * @return the last score in the local list of highscores. The worst possible
- * score if there are less items than the maximum number.
- */
-KDE_EXPORT Score lastScore();
-
-/**
- * @return the first score in the local list of highscores (the worst possible
- * score if there is no entry).
- */
-KDE_EXPORT Score firstScore();
-
-/**
- * This class manages highscores and players entries (several players can
- * share the same highscores list if the libkdegame library is built to
- * support a common highscores file; NOTE that to correctly implement such
- * feature we probably need a locking mechanism in @ref KHighscore).
- *
- * You need one instance of this class during the application lifetime ; in
- * main() just insert
- * \code
- * KExtHighscore::Manager highscoresManager;
- * \endcode
- * with the needed arguments. Use the derived class if you need to
- * reimplement some of the default methods.
- *
- * This class has three functions :
- * <ul>
- * <li> Update the highscores list when new entries are submitted </li>
- * <li> Display the highscores list and the players list </li>
- * <li> Send query to an optionnal web server to support world-wide
- * highscores </li>
- * </ul>
- *
- * The highscores and the players lists contain several items described by
- * the @ref Item class.
- *
- * The highscores list contains by default :
- * <ul>
- * <li> the player name (automatically set from the config value)</li>
- * <li> the score value </li>
- * <li> the time and date of the highscore (automatically set) </li>
- * </ul>
- * You can replace the score item (for e.g. displaying it differently) with
- * setScoreItem or add an item with addScoreItem.
- *
- * The players list contains :
- * <ul>
- * <li> the player name (as defined by the user in the configuration
- * dialog) </li>
- * <li> the number of games played </li>
- * <li> the mean score </li>
- * <li> the best score </li>
- * <li> the best score time and date </li>
- * <li> the player comment (as defined by the user in the
- * configuration dialog) </li>
- * </ul>
- * You can replace the best score and the mean score items
- * by calling setPlayerItem.
- *
- * To submit a new score at game end, just construct a Score, set the
- * score data and then call submitScore().
- * \code
- * KExtHighscore::Score score(KExtHighscore::Won);
- * score.setScore(myScore);
- * KExtHighscore::submitScore(score, widget);
- * \endcode
- * You only need to set the score value with Score::setScore()
- * and the value of the items that you have optionnally added
- * with Score::setData() ; player name and date are set automatically.
- */
-class KDE_EXPORT Manager
-{
- public:
- /**
- * Constructor
- *
- * @param nbGameTypes the number of different game types (usually one).
- * For example KMines has easy, normal and expert levels.
- * @param maxNbEntries the maximum numbers of highscores entries (by game
- * types)
- */
- Manager(uint nbGameTypes = 1, uint maxNbEntries = 10);
- virtual ~Manager();
-
- /**
- * Set the world-wide highscores.
- * By default there is no world-wide highscores.
- *
- * Note: should be called at construction time.
- *
- * @param url the web server url
- * @param version the game version which is sent to the web server (it can
- * be useful for backward compatibility on the server side).
- */
- void setWWHighscores(const KURL &url, const TQString &version);
-
- /**
- * Set if the number of lost games should be track for the world-wide
- * highscores statistics. By default, there is no tracking.
- * False by default.
- *
- * Note: should be called at construction time.
- */
- void setTrackLostGames(bool track);
-
- /**
- * @since 3.3
- * Set if the number of "draw" games should be track for the world-wide
- * highscores statistics. By default, there is no tracking.
- * False by default.
- *
- * Note: should be called at construction time.
- */
- void setTrackDrawGames(bool track);
-
- /**
- * @since 3.3
- * Set if the statistics tab should be shown in the highscores dialog.
- * You only want to show this tab if it makes sense to lose or to win the
- * game (for e.g. it makes no sense for a tetris game but it does for a
- * minesweeper game).
- * False by default.
- *
- * Note: should be called at construction time.
- */
- void setShowStatistics(bool show);
-
- /** @obsolete */
- // KDE4 remove this
- void showStatistics(bool show) KDE_DEPRECATED;
-
- /**
- * @since 3.3
- * Set if draw games statistics should be shown (enable this if
- * draws are possible in your game).
- * False by default.
- */
- void setShowDrawGamesStatistic(bool show);
-
- enum ScoreTypeBound { ScoreNotBound, ScoreBound };
- /**
- * Set the ranges for the score histogram.
- *
- * Note: should be called at construction time.
- */
- void setScoreHistogram(const TQMemArray<uint> &scores, ScoreTypeBound type);
-
- /**
- * Enumerate different conditions under which to show the
- * high score dialog.
- */
- enum ShowMode { AlwaysShow, ///< Always show the dialog
- NeverShow, ///< Never show the dialog
- ShowForHigherScore, ///< Show if score has improved
- ShowForHighestScore ///< Only for the top spot
- };
- /**
- * Set how the highscores dialog is shown at game end.
- * By default, the mode is ShowForHigherScore.
- *
- * Note: should be called at construction time.
- */
- void setShowMode(ShowMode mode);
-
- /**
- * Score type (@see setScoreType).
- * @p Normal default score (unsigned integer without upper bound)
- * @p MinuteTime score by time bound at 3599 seconds (for e.g. kmines)
- */
- enum ScoreType { Normal, MinuteTime };
- /**
- * Set score type. Helper method to quickly set the type of score.
- * By default the type is Normal.
- *
- * Note: should be called at construction time.
- */
- void setScoreType(ScoreType type);
-
- /**
- * Some predefined item types.
- * @p ScoreDefault default item for the score in the highscores list.
- * @p MeanScoreDefault default item for the mean score (only show one decimal and
- * 0 is shown as "--".
- * @p BestScoreDefault default item for the best score (0 is shown as "--").
- * @p ElapsedTime optionnal item for elapsed time (maximum value is 3599 seconds).
- */
- enum ItemType { ScoreDefault, MeanScoreDefault, BestScoreDefault,
- ElapsedTime };
- /**
- * Create a predefined item.
- */
- static Item *createItem(ItemType type);
-
- /**
- * Replace the default score item in the highscores list by the given one.
- * @p worstScore is the worst possible score. By default it is 0.
- *
- * Note : This method should be called at construction time.
- */
- void setScoreItem(uint worstScore, Item *item);
-
- /**
- * Add an item in the highscores list (it will add a column to this list).
- *
- * Note : This method should be called at construction time.
- */
- void addScoreItem(const TQString &name, Item *item);
-
- enum PlayerItemType { MeanScore, BestScore };
- /**
- * Replace an item in the players list.
- *
- * Note : This method should be called at construction time.
- */
- void setPlayerItem(PlayerItemType type, Item *item);
-
- /**
- * @return true if the first score is strictly worse than the second one.
- * By default return <pre>s1.score()<s2.score()</pre>. You can reimplement
- * this method if additional items added to @ref Score can further
- * differentiate the scores (for e.g. the time spent).
- *
- * Note that you do not need to use directly this method, simply write
- * <pre>s1<s2</pre> since the operator calls this method.
- */
- virtual bool isStrictlyLess(const Score &s1, const Score &s2) const;
-
- /**
- * Possible type of label (@see gameTypeLabel).
- * @p Standard label used in config file.
- * @p I18N label used to display the game type.
- * @p WW label used when contacting the world-wide highscores server.
- * @p Icon label used to load the icon corresponding to the game type.
- */
- enum LabelType { Standard, I18N, WW, Icon };
-
- /**
- * @return the label corresponding to the game type. The default
- * implementation works only for one game type : you need to reimplement
- * this method if the number of game types is more than one.
- */
- virtual TQString gameTypeLabel(uint gameType, LabelType type) const;
-
- protected:
- /**
- * This method is called once for each player (ie for each user). You
- * can reimplement it to convert old style highscores to the new mechanism
- * (@see submitLegacyScore). By default this method does nothing.
- *
- * @param gameType the game type
- */
- virtual void convertLegacy(uint gameType) { Q_UNUSED(gameType); }
-
- /**
- * This method should be called from @ref convertLegacy. It is used
- * to submit an old highscore (it will not be send over the network).
- * For each score do something like:
- * \code
- * Score score(Won);
- * score.setScore(oldScore);
- * score.setData("name", name);
- * submitLegacyScore(score);
- * \endcode
- * Note that here you can set the player "name" and the highscore "date"
- * if they are known.
- */
- void submitLegacyScore(const Score &score) const;
-
- /**
- * This method is called before submitting a score to the world-wide
- * highscores server. You can reimplement this method to add an entry
- * with @ref addToQueryURL. By default this method does nothing.
- *
- * @param url the URL to query
- * @param score the score to be submitted.
- */
- virtual void additionalQueryItems(KURL &url, const Score &score) const
- { Q_UNUSED(url); Q_UNUSED(score); }
-
- /**
- * Add an entry to the url to be submitted (@see additionalQueryItems).
- *
- * @param url the URL to query
- * @param item the item name
- * @param content the item content
- */
- static void addToQueryURL(KURL &url, const TQString &item,
- const TQString &content);
-
- friend class ManagerPrivate;
-
- private:
- Manager(const Manager &);
- Manager &operator =(const Manager &);
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore_gui.cpp b/libkdegames/highscore/kexthighscore_gui.cpp
deleted file mode 100644
index 02ea99b6..00000000
--- a/libkdegames/highscore/kexthighscore_gui.cpp
+++ /dev/null
@@ -1,552 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore_gui.h"
-#include "kexthighscore_gui.moc"
-
-#include <tqlayout.h>
-#include <tqtextstream.h>
-#include <tqheader.h>
-#include <tqgrid.h>
-#include <tqvgroupbox.h>
-
-#include <kapplication.h>
-#include <kmessagebox.h>
-#include <kurllabel.h>
-#include <kopenwith.h>
-#include <krun.h>
-#include <kfiledialog.h>
-#include <ktempfile.h>
-#include <kio/netaccess.h>
-#include <kiconloader.h>
-
-#include "kexthighscore_internal.h"
-#include "kexthighscore.h"
-#include "kexthighscore_tab.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-ShowItem::ShowItem(TQListView *list, bool highlight)
- : KListViewItem(list), _highlight(highlight)
-{}
-
-void ShowItem::paintCell(TQPainter *p, const TQColorGroup &cg,
- int column, int width, int align)
-{
- TQColorGroup cgrp(cg);
- if (_highlight) cgrp.setColor(TQColorGroup::Text, red);
- KListViewItem::paintCell(p, cgrp, column, width, align);
-}
-
-//-----------------------------------------------------------------------------
-ScoresList::ScoresList(TQWidget *parent)
- : KListView(parent)
-{
- setSelectionMode(TQListView::NoSelection);
- setItemMargin(3);
- setAllColumnsShowFocus(true);
- setSorting(-1);
- header()->setClickEnabled(false);
- header()->setMovingEnabled(false);
-}
-
-void ScoresList::addHeader(const ItemArray &items)
-{
- addLineItem(items, 0, 0);
-}
-
-TQListViewItem *ScoresList::addLine(const ItemArray &items,
- uint index, bool highlight)
-{
- TQListViewItem *item = new ShowItem(this, highlight);
- addLineItem(items, index, item);
- return item;
-}
-
-void ScoresList::addLineItem(const ItemArray &items,
- uint index, TQListViewItem *line)
-{
- uint k = 0;
- for (uint i=0; i<items.size(); i++) {
- const ItemContainer &container = *items[i];
- if ( !container.item()->isVisible() ) continue;
- if (line) line->setText(k, itemText(container, index));
- else {
- addColumn( container.item()->label() );
- setColumnAlignment(k, container.item()->tqalignment());
- }
- k++;
- }
-}
-
-//-----------------------------------------------------------------------------
-HighscoresList::HighscoresList(TQWidget *parent)
- : ScoresList(parent)
-{}
-
-TQString HighscoresList::itemText(const ItemContainer &item, uint row) const
-{
- return item.pretty(row);
-}
-
-void HighscoresList::load(const ItemArray &items, int highlight)
-{
- clear();
- TQListViewItem *line = 0;
- for (int j=items.nbEntries()-1; j>=0; j--) {
- TQListViewItem *item = addLine(items, j, j==highlight);
- if ( j==highlight ) line = item;
- }
- if (line) ensureItemVisible(line);
-}
-
-//-----------------------------------------------------------------------------
-HighscoresWidget::HighscoresWidget(TQWidget *parent)
- : TQWidget(parent, "show_highscores_widget"),
- _scoresUrl(0), _playersUrl(0), _statsTab(0), _histoTab(0)
-{
- const ScoreInfos &s = internal->scoreInfos();
- const PlayerInfos &p = internal->playerInfos();
-
- TQVBoxLayout *vbox = new TQVBoxLayout(this, KDialogBase::spacingHint());
-
- _tw = new TQTabWidget(this);
- connect(_tw, TQT_SIGNAL(currentChanged(TQWidget *)), TQT_SLOT(tabChanged()));
- vbox->addWidget(_tw);
-
- // scores tab
- _scoresList = new HighscoresList(_tw);
- _scoresList->addHeader(s);
- _tw->addTab(_scoresList, i18n("Best &Scores"));
-
- // players tab
- _playersList = new HighscoresList(_tw);
- _playersList->addHeader(p);
- _tw->addTab(_playersList, i18n("&Players"));
-
- // statistics tab
- if ( internal->showStatistics ) {
- _statsTab = new StatisticsTab(_tw);
- _tw->addTab(_statsTab, i18n("Statistics"));
- }
-
- // histogram tab
- if ( p.histogram().size()!=0 ) {
- _histoTab = new HistogramTab(_tw);
- _tw->addTab(_histoTab, i18n("Histogram"));
- }
-
- // url labels
- if ( internal->isWWHSAvailable() ) {
- KURL url = internal->queryURL(ManagerPrivate::Scores);
- _scoresUrl = new KURLLabel(url.url(),
- i18n("View world-wide highscores"), this);
- connect(_scoresUrl, TQT_SIGNAL(leftClickedURL(const TQString &)),
- TQT_SLOT(showURL(const TQString &)));
- vbox->addWidget(_scoresUrl);
-
- url = internal->queryURL(ManagerPrivate::Players);
- _playersUrl = new KURLLabel(url.url(),
- i18n("View world-wide players"), this);
- connect(_playersUrl, TQT_SIGNAL(leftClickedURL(const TQString &)),
- TQT_SLOT(showURL(const TQString &)));
- vbox->addWidget(_playersUrl);
- }
-}
-
-void HighscoresWidget::changeTab(int i)
-{
- if ( i!=_tw->currentPageIndex() )
- _tw->setCurrentPage(i);
-}
-
-void HighscoresWidget::showURL(const TQString &url) const
-{
- (void)new KRun(KURL(url));
-}
-
-void HighscoresWidget::load(int rank)
-{
- _scoresList->load(internal->scoreInfos(), rank);
- _playersList->load(internal->playerInfos(), internal->playerInfos().id());
- if (_scoresUrl)
- _scoresUrl->setURL(internal->queryURL(ManagerPrivate::Scores).url());
- if (_playersUrl)
- _playersUrl->setURL(internal->queryURL(ManagerPrivate::Players).url());
- if (_statsTab) _statsTab->load();
- if (_histoTab) _histoTab->load();
-}
-
-//-----------------------------------------------------------------------------
-HighscoresDialog::HighscoresDialog(int rank, TQWidget *parent)
- : KDialogBase(internal->nbGameTypes()>1 ? TreeList : Plain,
- i18n("Highscores"), Close|User1|User2, Close,
- parent, "show_highscores", true, true,
- KGuiItem(i18n("Configure..."), "configure"),
- KGuiItem(i18n("Export..."))), _rank(rank), _tab(0)
-{
- _widgets.resize(internal->nbGameTypes(), 0);
-
- if ( internal->nbGameTypes()>1 ) {
- for (uint i=0; i<internal->nbGameTypes(); i++) {
- TQString title = internal->manager.gameTypeLabel(i, Manager::I18N);
- TQString icon = internal->manager.gameTypeLabel(i, Manager::Icon);
- TQWidget *w = addVBoxPage(title, TQString(),
- BarIcon(icon, KIcon::SizeLarge));
- if ( i==internal->gameType() ) createPage(w);
- }
-
- connect(this, TQT_SIGNAL(aboutToShowPage(TQWidget *)),
- TQT_SLOT(createPage(TQWidget *)));
- showPage(internal->gameType());
- } else {
- TQVBoxLayout *vbox = new TQVBoxLayout(plainPage());
- createPage(plainPage());
- vbox->addWidget(_widgets[0]);
- setMainWidget(_widgets[0]);
- }
-}
-
-void HighscoresDialog::createPage(TQWidget *page)
-{
- internal->hsConfig().readCurrentConfig();
- _current = page;
- bool several = ( internal->nbGameTypes()>1 );
- int i = (several ? pageIndex(page) : 0);
- if ( _widgets[i]==0 ) {
- _widgets[i] = new HighscoresWidget(page);
- connect(_widgets[i], TQT_SIGNAL(tabChanged(int)), TQT_SLOT(tabChanged(int)));
- }
- uint type = internal->gameType();
- if (several) internal->setGameType(i);
- _widgets[i]->load(uint(i)==type ? _rank : -1);
- if (several) setGameType(type);
- _widgets[i]->changeTab(_tab);
-}
-
-void HighscoresDialog::slotUser1()
-{
- if ( KExtHighscore::configure(this) )
- createPage(_current);
-}
-
-void HighscoresDialog::slotUser2()
-{
- KURL url = KFileDialog::getSaveURL(TQString(), TQString(), this);
- if ( url.isEmpty() ) return;
- if ( KIO::NetAccess::exists(url, true, this) ) {
- KGuiItem gi = KStdGuiItem::save();
- gi.setText(i18n("Overwrite"));
- int res = KMessageBox::warningContinueCancel(this,
- i18n("The file already exists. Overwrite?"),
- i18n("Export"), gi);
- if ( res==KMessageBox::Cancel ) return;
- }
- KTempFile tmp;
- internal->exportHighscores(*tmp.textStream());
- tmp.close();
- KIO::NetAccess::upload(tmp.name(), url, this);
- tmp.unlink();
-}
-
-//-----------------------------------------------------------------------------
-LastMultipleScoresList::LastMultipleScoresList(
- const TQValueVector<Score> &scores, TQWidget *parent)
- : ScoresList(parent), _scores(scores)
-{
- const ScoreInfos &s = internal->scoreInfos();
- addHeader(s);
- for (uint i=0; i<scores.size(); i++) addLine(s, i, false);
-}
-
-void LastMultipleScoresList::addLineItem(const ItemArray &si,
- uint index, TQListViewItem *line)
-{
- uint k = 1; // skip "id"
- for (uint i=0; i<si.size()-2; i++) {
- if ( i==3 ) k = 5; // skip "date"
- const ItemContainer *container = si[k];
- k++;
- if (line) line->setText(i, itemText(*container, index));
- else {
- addColumn( container->item()->label() );
- setColumnAlignment(i, container->item()->tqalignment());
- }
- }
-}
-
-TQString LastMultipleScoresList::itemText(const ItemContainer &item,
- uint row) const
-{
- TQString name = item.name();
- if ( name=="rank" )
- return (_scores[row].type()==Won ? i18n("Winner") : TQString());
- TQVariant v = _scores[row].data(name);
- if ( name=="name" ) return v.toString();
- return item.item()->pretty(row, v);
-}
-
-//-----------------------------------------------------------------------------
-TotalMultipleScoresList::TotalMultipleScoresList(
- const TQValueVector<Score> &scores, TQWidget *parent)
- : ScoresList(parent), _scores(scores)
-{
- const ScoreInfos &s = internal->scoreInfos();
- addHeader(s);
- for (uint i=0; i<scores.size(); i++) addLine(s, i, false);
-}
-
-void TotalMultipleScoresList::addLineItem(const ItemArray &si,
- uint index, TQListViewItem *line)
-{
- const PlayerInfos &pi = internal->playerInfos();
- uint k = 1; // skip "id"
- for (uint i=0; i<4; i++) { // skip additional fields
- const ItemContainer *container;
- if ( i==2 ) container = pi.item("nb games");
- else if ( i==3 ) container = pi.item("mean score");
- else {
- container = si[k];
- k++;
- }
- if (line) line->setText(i, itemText(*container, index));
- else {
- TQString label =
- (i==2 ? i18n("Won Games") : container->item()->label());
- addColumn(label);
- setColumnAlignment(i, container->item()->tqalignment());
- }
- }
-}
-
-TQString TotalMultipleScoresList::itemText(const ItemContainer &item,
- uint row) const
-{
- TQString name = item.name();
- if ( name=="rank" ) return TQString::number(_scores.size()-row);
- if ( name=="nb games" )
- return TQString::number( _scores[row].data("nb won games").toUInt() );
- TQVariant v = _scores[row].data(name);
- if ( name=="name" ) return v.toString();
- return item.item()->pretty(row, v);
-}
-
-
-//-----------------------------------------------------------------------------
-ConfigDialog::ConfigDialog(TQWidget *parent)
- : KDialogBase(Swallow, i18n("Configure Highscores"),
- Ok|Apply|Cancel, Cancel,
- parent, "configure_highscores", true, true),
- _saved(false), _WWHEnabled(0)
-{
- TQWidget *page = 0;
- TQTabWidget *tab = 0;
- if ( internal->isWWHSAvailable() ) {
- tab = new TQTabWidget(this);
- setMainWidget(tab);
- page = new TQWidget(tab);
- tab->addTab(page, i18n("Main"));
- } else {
- page = new TQWidget(this);
- setMainWidget(page);
- }
-
- TQGridLayout *pageTop =
- new TQGridLayout(page, 2, 2, spacingHint(), spacingHint());
-
- TQLabel *label = new TQLabel(i18n("Nickname:"), page);
- pageTop->addWidget(label, 0, 0);
- _nickname = new TQLineEdit(page);
- connect(_nickname, TQT_SIGNAL(textChanged(const TQString &)),
- TQT_SLOT(modifiedSlot()));
- connect(_nickname, TQT_SIGNAL(textChanged(const TQString &)),
- TQT_SLOT(nickNameChanged(const TQString &)));
-
- _nickname->setMaxLength(16);
- pageTop->addWidget(_nickname, 0, 1);
-
- label = new TQLabel(i18n("Comment:"), page);
- pageTop->addWidget(label, 1, 0);
- _comment = new TQLineEdit(page);
- connect(_comment, TQT_SIGNAL(textChanged(const TQString &)),
- TQT_SLOT(modifiedSlot()));
- _comment->setMaxLength(50);
- pageTop->addWidget(_comment, 1, 1);
-
- if (tab) {
- _WWHEnabled
- = new TQCheckBox(i18n("World-wide highscores enabled"), page);
- connect(_WWHEnabled, TQT_SIGNAL(toggled(bool)),
- TQT_SLOT(modifiedSlot()));
- pageTop->addMultiCellWidget(_WWHEnabled, 2, 2, 0, 1);
-
- // advanced tab
- TQWidget *page = new TQWidget(tab);
- tab->addTab(page, i18n("Advanced"));
- TQVBoxLayout *pageTop =
- new TQVBoxLayout(page, spacingHint(), spacingHint());
-
- TQVGroupBox *group = new TQVGroupBox(i18n("Registration Data"), page);
- pageTop->addWidget(group);
- TQGrid *grid = new TQGrid(2, group);
- grid->setSpacing(spacingHint());
-
- label = new TQLabel(i18n("Nickname:"), grid);
- _registeredName = new KLineEdit(grid);
- _registeredName->setReadOnly(true);
-
- label = new TQLabel(i18n("Key:"), grid);
- _key = new KLineEdit(grid);
- _key->setReadOnly(true);
-
- KGuiItem gi = KStdGuiItem::clear();
- gi.setText(i18n("Remove"));
- _removeButton = new KPushButton(gi, grid);
- connect(_removeButton, TQT_SIGNAL(clicked()), TQT_SLOT(removeSlot()));
- }
-
- load();
- enableButtonOK( !_nickname->text().isEmpty() );
- enableButtonApply(false);
-}
-
-void ConfigDialog::nickNameChanged(const TQString &text)
-{
- enableButtonOK( !text.isEmpty() );
-}
-
-
-void ConfigDialog::modifiedSlot()
-{
- enableButtonApply(true && !_nickname->text().isEmpty() );
-}
-
-void ConfigDialog::accept()
-{
- if ( save() ) {
- KDialogBase::accept();
- kapp->config()->sync(); // safer
- }
-}
-
-void ConfigDialog::removeSlot()
-{
- KGuiItem gi = KStdGuiItem::clear();
- gi.setText(i18n("Remove"));
- int res = KMessageBox::warningContinueCancel(this,
- i18n("This will permanently remove your "
- "registration key. You will not be able to use "
- "the currently registered nickname anymore."),
- TQString(), gi);
- if ( res==KMessageBox::Continue ) {
- internal->playerInfos().removeKey();
- _registeredName->clear();
- _key->clear();
- _removeButton->setEnabled(false);
- _WWHEnabled->setChecked(false);
- modifiedSlot();
- }
-}
-
-void ConfigDialog::load()
-{
- internal->hsConfig().readCurrentConfig();
- const PlayerInfos &infos = internal->playerInfos();
- _nickname->setText(infos.isAnonymous() ? TQString() : infos.name());
- _comment->setText(infos.comment());
- if (_WWHEnabled) {
- _WWHEnabled->setChecked(infos.isWWEnabled());
- if ( !infos.key().isEmpty() ) {
- _registeredName->setText(infos.registeredName());
- _registeredName->home(false);
- _key->setText(infos.key());
- _key->home(false);
- }
- _removeButton->setEnabled(!infos.key().isEmpty());
- }
-}
-
-bool ConfigDialog::save()
-{
- bool enabled = (_WWHEnabled ? _WWHEnabled->isChecked() : false);
-
- // do not bother the user with "nickname empty" if he has not
- // messed with nickname settings ...
- TQString newName = _nickname->text();
- if ( newName.isEmpty() && !internal->playerInfos().isAnonymous()
- && !enabled ) return true;
-
- if ( newName.isEmpty() ) {
- KMessageBox::sorry(this, i18n("Please choose a non empty nickname."));
- return false;
- }
- if ( internal->playerInfos().isNameUsed(newName) ) {
- KMessageBox::sorry(this, i18n("Nickname already in use. Please "
- "choose another one"));
- return false;
- }
-
- int res =
- internal->modifySettings(newName, _comment->text(), enabled, this);
- if (res) {
- load(); // needed to update view when "apply" is clicked
- enableButtonApply(false);
- }
- _saved = true;
- return res;
-}
-
-//-----------------------------------------------------------------------------
-AskNameDialog::AskNameDialog(TQWidget *parent)
- : KDialogBase(Plain, i18n("Enter Your Nickname"), Ok | Cancel, Ok,
- parent, "ask_name_dialog")
-{
- internal->hsConfig().readCurrentConfig();
-
- TQVBoxLayout *top =
- new TQVBoxLayout(plainPage(), marginHint(), spacingHint());
- TQLabel *label =
- new TQLabel(i18n("Congratulations, you have won!"), plainPage());
- top->addWidget(label);
-
- TQHBoxLayout *hbox = new TQHBoxLayout(top);
- label = new TQLabel(i18n("Enter your nickname:"), plainPage());
- hbox->addWidget(label);
- _edit = new TQLineEdit(plainPage());
- _edit->setFocus();
- connect(_edit, TQT_SIGNAL(textChanged(const TQString &)), TQT_SLOT(nameChanged()));
- hbox->addWidget(_edit);
-
- top->addSpacing(spacingHint());
- _checkbox = new TQCheckBox(i18n("Do not ask again."), plainPage());
- top->addWidget(_checkbox);
-
- nameChanged();
-}
-
-void AskNameDialog::nameChanged()
-{
- enableButtonOK( !name().isEmpty()
- && !internal->playerInfos().isNameUsed(name()) );
-}
-
-} // namespace
diff --git a/libkdegames/highscore/kexthighscore_gui.h b/libkdegames/highscore/kexthighscore_gui.h
deleted file mode 100644
index f6b2336a..00000000
--- a/libkdegames/highscore/kexthighscore_gui.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-02 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_GUI_H
-#define KEXTHIGHSCORE_GUI_H
-
-#include <tqcheckbox.h>
-#include <tqlabel.h>
-#include <tqvbox.h>
-#include <tqtabwidget.h>
-
-#include <klistview.h>
-#include <klineedit.h>
-#include <kpushbutton.h>
-#include <kdialogbase.h>
-
-#include "kexthighscore.h"
-
-
-namespace KExtHighscore
-{
-
-class ItemContainer;
-class ItemArray;
-class Score;
-class AdditionalTab;
-
-//-----------------------------------------------------------------------------
-class ShowItem : public KListViewItem
-{
- public:
- ShowItem(TQListView *, bool highlight);
-
- protected:
- virtual void paintCell(TQPainter *, const TQColorGroup &, int column,
- int width, int align);
-
- private:
- bool _highlight;
-};
-
-class ScoresList : public KListView
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- ScoresList(TQWidget *parent);
-
- void addHeader(const ItemArray &);
-
- protected:
- TQListViewItem *addLine(const ItemArray &, uint index, bool highlight);
- virtual TQString itemText(const ItemContainer &, uint row) const = 0;
-
- private:
- virtual void addLineItem(const ItemArray &, uint index,
- TQListViewItem *item);
-};
-
-//-----------------------------------------------------------------------------
-class HighscoresList : public ScoresList
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- HighscoresList(TQWidget *parent);
-
- void load(const ItemArray &, int highlight);
-
- protected:
- TQString itemText(const ItemContainer &, uint row) const;
-};
-
-class HighscoresWidget : public TQWidget
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- HighscoresWidget(TQWidget *parent);
-
- void load(int rank);
-
- signals:
- void tabChanged(int i);
-
- public slots:
- void changeTab(int i);
-
- private slots:
- void showURL(const TQString &) const;
- void tabChanged() { emit tabChanged(_tw->currentPageIndex()); }
-
- private:
- TQTabWidget *_tw;
- HighscoresList *_scoresList, *_playersList;
- KURLLabel *_scoresUrl, *_playersUrl;
- AdditionalTab *_statsTab, *_histoTab;
-};
-
-class HighscoresDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- HighscoresDialog(int rank, TQWidget *parent);
-
- private slots:
- void slotUser1();
- void slotUser2();
- void tabChanged(int i) { _tab = i; }
- void createPage(TQWidget *);
-
- private:
- int _rank, _tab;
- TQWidget *_current;
- TQValueVector<HighscoresWidget *> _widgets;
-};
-
-//-----------------------------------------------------------------------------
-class LastMultipleScoresList : public ScoresList
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- LastMultipleScoresList(const TQValueVector<Score> &, TQWidget *parent);
-
-private:
- void addLineItem(const ItemArray &, uint index, TQListViewItem *line);
- TQString itemText(const ItemContainer &, uint row) const;
-
-private:
- const TQValueVector<Score> &_scores;
-};
-
-class TotalMultipleScoresList : public ScoresList
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- TotalMultipleScoresList(const TQValueVector<Score> &, TQWidget *parent);
-
-private:
- void addLineItem(const ItemArray &, uint index, TQListViewItem *line);
- TQString itemText(const ItemContainer &, uint row) const;
-
-private:
- const TQValueVector<Score> &_scores;
-};
-
-//-----------------------------------------------------------------------------
-class ConfigDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- ConfigDialog(TQWidget *parent);
-
- bool hasBeenSaved() const { return _saved; }
-
- private slots:
- void modifiedSlot();
- void removeSlot();
- void accept();
- void slotApply() { save(); }
- void nickNameChanged(const TQString &);
-
- private:
- bool _saved;
- TQCheckBox *_WWHEnabled;
- TQLineEdit *_nickname, *_comment;
- KLineEdit *_key, *_registeredName;
- KPushButton *_removeButton;
-
- void load();
- bool save();
-};
-
-//-----------------------------------------------------------------------------
-class AskNameDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- AskNameDialog(TQWidget *parent);
-
- TQString name() const { return _edit->text(); }
- bool dontAskAgain() const { return _checkbox->isChecked(); }
-
- private slots:
- void nameChanged();
-
- private:
- TQLineEdit *_edit;
- TQCheckBox *_checkbox;
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore_internal.cpp b/libkdegames/highscore/kexthighscore_internal.cpp
deleted file mode 100644
index a679002c..00000000
--- a/libkdegames/highscore/kexthighscore_internal.cpp
+++ /dev/null
@@ -1,868 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore_internal.h"
-
-#include <pwd.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <tqfile.h>
-#include <tqlayout.h>
-#include <tqdom.h>
-
-#include <kglobal.h>
-#include <kio/netaccess.h>
-#include <kio/job.h>
-#include <kmessagebox.h>
-#include <kmdcodec.h>
-#include <kdebug.h>
-
-#include "config.h"
-#include "kexthighscore.h"
-#include "kexthighscore_gui.h"
-#include "kemailsettings.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-const char ItemContainer::ANONYMOUS[] = "_";
-const char ItemContainer::ANONYMOUS_LABEL[] = I18N_NOOP("anonymous");
-
-ItemContainer::ItemContainer()
- : _item(0)
-{}
-
-ItemContainer::~ItemContainer()
-{
- delete _item;
-}
-
-void ItemContainer::setItem(Item *item)
-{
- delete _item;
- _item = item;
-}
-
-TQString ItemContainer::entryName() const
-{
- if ( _subGroup.isEmpty() ) return _name;
- return _name + "_" + _subGroup;
-}
-
-TQVariant ItemContainer::read(uint i) const
-{
- Q_ASSERT(_item);
-
- TQVariant v = _item->defaultValue();
- if ( isStored() ) {
- internal->hsConfig().setHighscoreGroup(_group);
- v = internal->hsConfig().readPropertyEntry(i+1, entryName(), v);
- }
- return _item->read(i, v);
-}
-
-TQString ItemContainer::pretty(uint i) const
-{
- Q_ASSERT(_item);
- return _item->pretty(i, read(i));
-}
-
-void ItemContainer::write(uint i, const TQVariant &value) const
-{
- Q_ASSERT( isStored() );
- Q_ASSERT( internal->hsConfig().isLocked() );
- internal->hsConfig().setHighscoreGroup(_group);
- internal->hsConfig().writeEntry(i+1, entryName(), value);
-}
-
-uint ItemContainer::increment(uint i) const
-{
- uint v = read(i).toUInt() + 1;
- write(i, v);
- return v;
-}
-
-//-----------------------------------------------------------------------------
-ItemArray::ItemArray()
- : _group(""), _subGroup("") // no null groups
-{}
-
-ItemArray::~ItemArray()
-{
- for (uint i=0; i<size(); i++) delete at(i);
-}
-
-int ItemArray::findIndex(const TQString &name) const
-{
- for (uint i=0; i<size(); i++)
- if ( at(i)->name()==name ) return i;
- return -1;
-}
-
-const ItemContainer *ItemArray::item(const TQString &name) const
-{
- int i = findIndex(name);
- if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
- << "\"" << endl;
- return at(i);
-}
-
-ItemContainer *ItemArray::item(const TQString &name)
-{
- int i = findIndex(name);
- if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
- << "\"" << endl;
- return at(i);
-}
-
-void ItemArray::setItem(const TQString &name, Item *item)
-{
- int i = findIndex(name);
- if ( i==-1 ) kdError(11002) << k_funcinfo << "no item named \"" << name
- << "\"" << endl;
- bool stored = at(i)->isStored();
- bool canHaveSubGroup = at(i)->canHaveSubGroup();
- _setItem(i, name, item, stored, canHaveSubGroup);
-}
-
-void ItemArray::addItem(const TQString &name, Item *item,
- bool stored, bool canHaveSubGroup)
-{
- if ( findIndex(name)!=-1 )
- kdError(11002) << "item already exists \"" << name << "\"" << endl;
- uint i = size();
- resize(i+1);
- at(i) = new ItemContainer;
- _setItem(i, name, item, stored, canHaveSubGroup);
-}
-
-void ItemArray::_setItem(uint i, const TQString &name, Item *item,
- bool stored, bool canHaveSubGroup)
-{
- at(i)->setItem(item);
- at(i)->setName(name);
- at(i)->setGroup(stored ? _group : TQString());
- at(i)->setSubGroup(canHaveSubGroup ? _subGroup : TQString());
-}
-
-void ItemArray::setGroup(const TQString &group)
-{
- Q_ASSERT( !group.isNull() );
- _group = group;
- for (uint i=0; i<size(); i++)
- if ( at(i)->isStored() ) at(i)->setGroup(group);
-}
-
-void ItemArray::setSubGroup(const TQString &subGroup)
-{
- Q_ASSERT( !subGroup.isNull() );
- _subGroup = subGroup;
- for (uint i=0; i<size(); i++)
- if ( at(i)->canHaveSubGroup() ) at(i)->setSubGroup(subGroup);
-}
-
-void ItemArray::read(uint k, Score &data) const
-{
- for (uint i=0; i<size(); i++) {
- if ( !at(i)->isStored() ) continue;
- data.setData(at(i)->name(), at(i)->read(k));
- }
-}
-
-void ItemArray::write(uint k, const Score &data, uint nb) const
-{
- for (uint i=0; i<size(); i++) {
- if ( !at(i)->isStored() ) continue;
- for (uint j=nb-1; j>k; j--) at(i)->write(j, at(i)->read(j-1));
- at(i)->write(k, data.data(at(i)->name()));
- }
-}
-
-void ItemArray::exportToText(TQTextStream &s) const
-{
- for (uint k=0; k<nbEntries()+1; k++) {
- for (uint i=0; i<size(); i++) {
- const Item *item = at(i)->item();
- if ( item->isVisible() ) {
- if ( i!=0 ) s << '\t';
- if ( k==0 ) s << item->label();
- else s << at(i)->pretty(k-1);
- }
- }
- s << endl;
- }
-}
-
-//-----------------------------------------------------------------------------
-class ScoreNameItem : public NameItem
-{
- public:
- ScoreNameItem(const ScoreInfos &score, const PlayerInfos &infos)
- : _score(score), _infos(infos) {}
-
- TQString pretty(uint i, const TQVariant &v) const {
- uint id = _score.item("id")->read(i).toUInt();
- if ( id==0 ) return NameItem::pretty(i, v);
- return _infos.prettyName(id-1);
- }
-
- private:
- const ScoreInfos &_score;
- const PlayerInfos &_infos;
-};
-
-//-----------------------------------------------------------------------------
-ScoreInfos::ScoreInfos(uint maxNbEntries, const PlayerInfos &infos)
- : _maxNbEntries(maxNbEntries)
-{
- addItem("id", new Item((uint)0));
- addItem("rank", new RankItem, false);
- addItem("name", new ScoreNameItem(*this, infos));
- addItem("score", Manager::createItem(Manager::ScoreDefault));
- addItem("date", new DateItem);
-}
-
-uint ScoreInfos::nbEntries() const
-{
- uint i = 0;
- for (; i<_maxNbEntries; i++)
- if ( item("score")->read(i)==item("score")->item()->defaultValue() )
- break;
- return i;
-}
-
-//-----------------------------------------------------------------------------
-const char *HS_ID = "player id";
-const char *HS_REGISTERED_NAME = "registered name";
-const char *HS_KEY = "player key";
-const char *HS_WW_ENABLED = "ww hs enabled";
-
-PlayerInfos::PlayerInfos()
-{
- setGroup("players");
-
- // standard items
- addItem("name", new NameItem);
- Item *it = new Item((uint)0, i18n("Games Count"),TQt::AlignRight);
- addItem("nb games", it, true, true);
- it = Manager::createItem(Manager::MeanScoreDefault);
- addItem("mean score", it, true, true);
- it = Manager::createItem(Manager::BestScoreDefault);
- addItem("best score", it, true, true);
- addItem("date", new DateItem, true, true);
- it = new Item(TQString(), i18n("Comment"), TQt::AlignLeft);
- addItem("comment", it);
-
- // statistics items
- addItem("nb black marks", new Item((uint)0), true, true); // legacy
- addItem("nb lost games", new Item((uint)0), true, true);
- addItem("nb draw games", new Item((uint)0), true, true);
- addItem("current trend", new Item((int)0), true, true);
- addItem("max lost trend", new Item((uint)0), true, true);
- addItem("max won trend", new Item((uint)0), true, true);
-
- struct passwd *pwd = getpwuid(getuid());
- TQString username = pwd->pw_name;
-#ifdef HIGHSCORE_DIRECTORY
- internal->hsConfig().setHighscoreGroup("players");
- for (uint i=0; ;i++) {
- if ( !internal->hsConfig().hasEntry(i+1, "username") ) {
- _newPlayer = true;
- _id = i;
- break;
- }
- if ( internal->hsConfig().readEntry(i+1, "username")==username ) {
- _newPlayer = false;
- _id = i;
- return;
- }
- }
-#endif
- internal->hsConfig().lockForWriting();
- KEMailSettings emailConfig;
- emailConfig.setProfile(emailConfig.defaultProfileName());
- TQString name = emailConfig.getSetting(KEMailSettings::RealName);
- if ( name.isEmpty() || isNameUsed(name) ) name = username;
- if ( isNameUsed(name) ) name= TQString(ItemContainer::ANONYMOUS);
-#ifdef HIGHSCORE_DIRECTORY
- internal->hsConfig().writeEntry(_id+1, "username", username);
- item("name")->write(_id, name);
-#endif
-
- ConfigGroup cg;
- _oldLocalPlayer = cg.config()->hasKey(HS_ID);
- _oldLocalId = cg.config()->readUnsignedNumEntry(HS_ID);
-#ifdef HIGHSCORE_DIRECTORY
- if (_oldLocalPlayer) { // player already exists in local config file
- // copy player data
- TQString prefix = TQString("%1_").tqarg(_oldLocalId+1);
- TQMap<TQString, TQString> entries =
- cg.config()->entryMap("KHighscore_players");
- TQMap<TQString, TQString>::const_iterator it;
- for (it=entries.begin(); it!=entries.end(); ++it) {
- TQString key = it.key();
- if ( key.find(prefix)==0 ) {
- TQString name = key.right(key.length()-prefix.length());
- if ( name!="name" || !isNameUsed(it.data()) )
- internal->hsConfig().writeEntry(_id+1, name, it.data());
- }
- }
- }
-#else
- _newPlayer = !_oldLocalPlayer;
- if (_oldLocalPlayer) _id = _oldLocalId;
- else {
- _id = nbEntries();
- cg.config()->writeEntry(HS_ID, _id);
- item("name")->write(_id, name);
- }
-#endif
- _bound = true;
- internal->hsConfig().writeAndUnlock();
-}
-
-void PlayerInfos::createHistoItems(const TQMemArray<uint> &scores, bool bound)
-{
- Q_ASSERT( _histogram.size()==0 );
- _bound = bound;
- _histogram = scores;
- for (uint i=1; i<histoSize(); i++)
- addItem(histoName(i), new Item((uint)0), true, true);
-}
-
-bool PlayerInfos::isAnonymous() const
-{
- return ( name()==ItemContainer::ANONYMOUS );
-}
-
-uint PlayerInfos::nbEntries() const
-{
- internal->hsConfig().setHighscoreGroup("players");
- TQStringList list = internal->hsConfig().readList("name", -1);
- return list.count();
-}
-
-TQString PlayerInfos::key() const
-{
- ConfigGroup cg;
- return cg.config()->readEntry(HS_KEY, TQString());
-}
-
-bool PlayerInfos::isWWEnabled() const
-{
- ConfigGroup cg;
- return cg.config()->readBoolEntry(HS_WW_ENABLED, false);
-}
-
-TQString PlayerInfos::histoName(uint i) const
-{
- const TQMemArray<uint> &sh = _histogram;
- Q_ASSERT( i<sh.size() || (_bound || i==sh.size()) );
- if ( i==sh.size() )
- return TQString("nb scores greater than %1").tqarg(sh[sh.size()-1]);
- return TQString("nb scores less than %1").tqarg(sh[i]);
-}
-
-uint PlayerInfos::histoSize() const
-{
- return _histogram.size() + (_bound ? 0 : 1);
-}
-
-void PlayerInfos::submitScore(const Score &score) const
-{
- // update counts
- uint nbGames = item("nb games")->increment(_id);
- switch (score.type()) {
- case Lost:
- item("nb lost games")->increment(_id);
- break;
- case Won: break;
- case Draw:
- item("nb draw games")->increment(_id);
- break;
- };
-
- // update mean
- if ( score.type()==Won ) {
- uint nbWonGames = nbGames - item("nb lost games")->read(_id).toUInt()
- - item("nb draw games")->read(_id).toUInt()
- - item("nb black marks")->read(_id).toUInt(); // legacy
- double mean = (nbWonGames==1 ? 0.0
- : item("mean score")->read(_id).toDouble());
- mean += (double(score.score()) - mean) / nbWonGames;
- item("mean score")->write(_id, mean);
- }
-
- // update best score
- Score best = score; // copy optionnal fields (there are not taken into account here)
- best.setScore( item("best score")->read(_id).toUInt() );
- if ( best<score ) {
- item("best score")->write(_id, score.score());
- item("date")->write(_id, score.data("date").toDateTime());
- }
-
- // update trends
- int current = item("current trend")->read(_id).toInt();
- switch (score.type()) {
- case Won: {
- if ( current<0 ) current = 0;
- current++;
- uint won = item("max won trend")->read(_id).toUInt();
- if ( (uint)current>won ) item("max won trend")->write(_id, current);
- break;
- }
- case Lost: {
- if ( current>0 ) current = 0;
- current--;
- uint lost = item("max lost trend")->read(_id).toUInt();
- uint clost = -current;
- if ( clost>lost ) item("max lost trend")->write(_id, clost);
- break;
- }
- case Draw:
- current = 0;
- break;
- }
- item("current trend")->write(_id, current);
-
- // update histogram
- if ( score.type()==Won ) {
- const TQMemArray<uint> &sh = _histogram;
- for (uint i=1; i<histoSize(); i++)
- if ( i==sh.size() || score.score()<sh[i] ) {
- item(histoName(i))->increment(_id);
- break;
- }
- }
-}
-
-bool PlayerInfos::isNameUsed(const TQString &newName) const
-{
- if ( newName==name() ) return false; // own name...
- for (uint i=0; i<nbEntries(); i++)
- if ( newName.lower()==item("name")->read(i).toString().lower() ) return true;
- if ( newName==i18n(ItemContainer::ANONYMOUS_LABEL) ) return true;
- return false;
-}
-
-void PlayerInfos::modifyName(const TQString &newName) const
-{
- item("name")->write(_id, newName);
-}
-
-void PlayerInfos::modifySettings(const TQString &newName,
- const TQString &comment, bool WWEnabled,
- const TQString &newKey) const
-{
- modifyName(newName);
- item("comment")->write(_id, comment);
- ConfigGroup cg;
- cg.config()->writeEntry(HS_WW_ENABLED, WWEnabled);
- if ( !newKey.isEmpty() ) cg.config()->writeEntry(HS_KEY, newKey);
- if (WWEnabled) cg.config()->writeEntry(HS_REGISTERED_NAME, newName);
-}
-
-TQString PlayerInfos::registeredName() const
-{
- ConfigGroup cg;
- return cg.config()->readEntry(HS_REGISTERED_NAME, TQString());
-}
-
-void PlayerInfos::removeKey()
-{
- ConfigGroup cg;
-
- // save old key/nickname
- uint i = 0;
- TQString str = "%1 old #%2";
- TQString sk;
- do {
- i++;
- sk = str.tqarg(HS_KEY).tqarg(i);
- } while ( !cg.config()->readEntry(sk, TQString()).isEmpty() );
- cg.config()->writeEntry(sk, key());
- cg.config()->writeEntry(str.tqarg(HS_REGISTERED_NAME).tqarg(i),
- registeredName());
-
- // clear current key/nickname
- cg.config()->deleteEntry(HS_KEY);
- cg.config()->deleteEntry(HS_REGISTERED_NAME);
- cg.config()->writeEntry(HS_WW_ENABLED, false);
-}
-
-//-----------------------------------------------------------------------------
-ManagerPrivate::ManagerPrivate(uint nbGameTypes, Manager &m)
- : manager(m), showStatistics(false), showDrawGames(false),
- trackLostGames(false), trackDrawGames(false),
- showMode(Manager::ShowForHigherScore),
- _first(true), _nbGameTypes(nbGameTypes), _gameType(0)
-{}
-
-void ManagerPrivate::init(uint maxNbEntries)
-{
- _hsConfig = new KHighscore(false, 0);
- _playerInfos = new PlayerInfos;
- _scoreInfos = new ScoreInfos(maxNbEntries, *_playerInfos);
-}
-
-ManagerPrivate::~ManagerPrivate()
-{
- delete _scoreInfos;
- delete _playerInfos;
- delete _hsConfig;
-}
-
-KURL ManagerPrivate::queryURL(QueryType type, const TQString &newName) const
-{
- KURL url = serverURL;
- TQString nameItem = "nickname";
- TQString name = _playerInfos->registeredName();
- bool withVersion = true;
- bool key = false;
- bool level = false;
-
- switch (type) {
- case Submit:
- url.addPath("submit.php");
- level = true;
- key = true;
- break;
- case Register:
- url.addPath("register.php");
- name = newName;
- break;
- case Change:
- url.addPath("change.php");
- key = true;
- if ( newName!=name )
- Manager::addToQueryURL(url, "new_nickname", newName);
- break;
- case Players:
- url.addPath("players.php");
- nameItem = "highlight";
- withVersion = false;
- break;
- case Scores:
- url.addPath("highscores.php");
- withVersion = false;
- if ( _nbGameTypes>1 ) level = true;
- break;
- }
-
- if (withVersion) Manager::addToQueryURL(url, "version", version);
- if ( !name.isEmpty() ) Manager::addToQueryURL(url, nameItem, name);
- if (key) Manager::addToQueryURL(url, "key", _playerInfos->key());
- if (level) {
- TQString label = manager.gameTypeLabel(_gameType, Manager::WW);
- if ( !label.isEmpty() ) Manager::addToQueryURL(url, "level", label);
- }
-
- return url;
-}
-
-// strings that needs to be translated (coming from the highscores server)
-const char *DUMMY_STRINGS[] = {
- I18N_NOOP("Undefined error."),
- I18N_NOOP("Missing argument(s)."),
- I18N_NOOP("Invalid argument(s)."),
-
- I18N_NOOP("Unable to connect to MySQL server."),
- I18N_NOOP("Unable to select database."),
- I18N_NOOP("Error on database query."),
- I18N_NOOP("Error on database insert."),
-
- I18N_NOOP("Nickname already registered."),
- I18N_NOOP("Nickname not registered."),
- I18N_NOOP("Invalid key."),
- I18N_NOOP("Invalid submit key."),
-
- I18N_NOOP("Invalid level."),
- I18N_NOOP("Invalid score.")
-};
-
-const char *UNABLE_TO_CONTACT =
- I18N_NOOP("Unable to contact world-wide highscore server");
-
-bool ManagerPrivate::doQuery(const KURL &url, TQWidget *parent,
- TQDomNamedNodeMap *map)
-{
- KIO::http_update_cache(url, true, 0); // remove cache !
-
- TQString tmpFile;
- if ( !KIO::NetAccess::download(url, tmpFile, parent) ) {
- TQString details = i18n("Server URL: %1").tqarg(url.host());
- KMessageBox::detailedSorry(parent, i18n(UNABLE_TO_CONTACT), details);
- return false;
- }
-
- TQFile file(tmpFile);
- if ( !file.open(IO_ReadOnly) ) {
- KIO::NetAccess::removeTempFile(tmpFile);
- TQString details = i18n("Unable to open temporary file.");
- KMessageBox::detailedSorry(parent, i18n(UNABLE_TO_CONTACT), details);
- return false;
- }
-
- TQTextStream t(&file);
- TQString content = t.read().stripWhiteSpace();
- file.close();
- KIO::NetAccess::removeTempFile(tmpFile);
-
- TQDomDocument doc;
- if ( doc.setContent(content) ) {
- TQDomElement root = doc.documentElement();
- TQDomElement element = root.firstChild().toElement();
- if ( element.tagName()=="success" ) {
- if (map) *map = element.attributes();
- return true;
- }
- if ( element.tagName()=="error" ) {
- TQDomAttr attr = element.attributes().namedItem("label").toAttr();
- if ( !attr.isNull() ) {
- TQString msg = i18n(attr.value().latin1());
- TQString caption = i18n("Message from world-wide highscores "
- "server");
- KMessageBox::sorry(parent, msg, caption);
- return false;
- }
- }
- }
- TQString msg = i18n("Invalid answer from world-wide highscores server.");
- TQString details = i18n("Raw message: %1").tqarg(content);
- KMessageBox::detailedSorry(parent, msg, details);
- return false;
-}
-
-bool ManagerPrivate::getFromQuery(const TQDomNamedNodeMap &map,
- const TQString &name, TQString &value,
- TQWidget *parent)
-{
- TQDomAttr attr = map.namedItem(name).toAttr();
- if ( attr.isNull() ) {
- KMessageBox::sorry(parent,
- i18n("Invalid answer from world-wide "
- "highscores server (missing item: %1).").tqarg(name));
- return false;
- }
- value = attr.value();
- return true;
-}
-
-Score ManagerPrivate::readScore(uint i) const
-{
- Score score(Won);
- _scoreInfos->read(i, score);
- return score;
-}
-
-int ManagerPrivate::rank(const Score &score) const
-{
- uint nb = _scoreInfos->nbEntries();
- uint i = 0;
- for (; i<nb; i++)
- if ( readScore(i)<score ) break;
- return (i<_scoreInfos->maxNbEntries() ? (int)i : -1);
-}
-
-bool ManagerPrivate::modifySettings(const TQString &newName,
- const TQString &comment, bool WWEnabled,
- TQWidget *widget)
-{
- TQString newKey;
- bool newPlayer = false;
-
- if (WWEnabled) {
- newPlayer = _playerInfos->key().isEmpty()
- || _playerInfos->registeredName().isEmpty();
- KURL url = queryURL((newPlayer ? Register : Change), newName);
- Manager::addToQueryURL(url, "comment", comment);
-
- TQDomNamedNodeMap map;
- bool ok = doQuery(url, widget, &map);
- if ( !ok || (newPlayer && !getFromQuery(map, "key", newKey, widget)) )
- return false;
- }
-
- bool ok = _hsConfig->lockForWriting(widget); // no GUI when locking
- if (ok) {
- // check again name in case the config file has been changed...
- // if it has, it is unfortunate because the WWW name is already
- // committed but should be very rare and not really problematic
- ok = ( !_playerInfos->isNameUsed(newName) );
- if (ok)
- _playerInfos->modifySettings(newName, comment, WWEnabled, newKey);
- _hsConfig->writeAndUnlock();
- }
- return ok;
-}
-
-void ManagerPrivate::convertToGlobal()
-{
- // read old highscores
- KHighscore *tmp = _hsConfig;
- _hsConfig = new KHighscore(true, 0);
- TQValueVector<Score> scores(_scoreInfos->nbEntries());
- for (uint i=0; i<scores.count(); i++)
- scores[i] = readScore(i);
-
- // commit them
- delete _hsConfig;
- _hsConfig = tmp;
- _hsConfig->lockForWriting();
- for (uint i=0; i<scores.count(); i++)
- if ( scores[i].data("id").toUInt()==_playerInfos->oldLocalId()+1 )
- submitLocal(scores[i]);
- _hsConfig->writeAndUnlock();
-}
-
-void ManagerPrivate::setGameType(uint type)
-{
- if (_first) {
- _first = false;
- if ( _playerInfos->isNewPlayer() ) {
- // convert legacy highscores
- for (uint i=0; i<_nbGameTypes; i++) {
- setGameType(i);
- manager.convertLegacy(i);
- }
-
-#ifdef HIGHSCORE_DIRECTORY
- if ( _playerInfos->isOldLocalPlayer() ) {
- // convert local to global highscores
- for (uint i=0; i<_nbGameTypes; i++) {
- setGameType(i);
- convertToGlobal();
- }
- }
-#endif
- }
- }
-
- Q_ASSERT( type<_nbGameTypes );
- _gameType = kMin(type, _nbGameTypes-1);
- TQString str = "scores";
- TQString lab = manager.gameTypeLabel(_gameType, Manager::Standard);
- if ( !lab.isEmpty() ) {
- _playerInfos->setSubGroup(lab);
- str += "_" + lab;
- }
- _scoreInfos->setGroup(str);
-}
-
-void ManagerPrivate::checkFirst()
-{
- if (_first) setGameType(0);
-}
-
-int ManagerPrivate::submitScore(const Score &ascore,
- TQWidget *widget, bool askIfAnonymous)
-{
- checkFirst();
-
- Score score = ascore;
- score.setData("id", _playerInfos->id() + 1);
- score.setData("date", TQDateTime::tqcurrentDateTime());
-
- // ask new name if anonymous and winner
- const char *dontAskAgainName = "highscore_ask_name_dialog";
- TQString newName;
- KMessageBox::ButtonCode dummy;
- if ( score.type()==Won && askIfAnonymous && _playerInfos->isAnonymous()
- && KMessageBox::shouldBeShownYesNo(dontAskAgainName, dummy) ) {
- AskNameDialog d(widget);
- if ( d.exec()==TQDialog::Accepted ) newName = d.name();
- if ( d.dontAskAgain() )
- KMessageBox::saveDontShowAgainYesNo(dontAskAgainName,
- KMessageBox::No);
- }
-
- int rank = -1;
- if ( _hsConfig->lockForWriting(widget) ) { // no GUI when locking
- // check again new name in case the config file has been changed...
- if ( !newName.isEmpty() && !_playerInfos->isNameUsed(newName) )
- _playerInfos->modifyName(newName);
-
- // commit locally
- _playerInfos->submitScore(score);
- if ( score.type()==Won ) rank = submitLocal(score);
- _hsConfig->writeAndUnlock();
- }
-
- if ( _playerInfos->isWWEnabled() )
- submitWorldWide(score, widget);
-
- return rank;
-}
-
-int ManagerPrivate::submitLocal(const Score &score)
-{
- int r = rank(score);
- if ( r!=-1 ) {
- uint nb = _scoreInfos->nbEntries();
- if ( nb<_scoreInfos->maxNbEntries() ) nb++;
- _scoreInfos->write(r, score, nb);
- }
- return r;
-}
-
-bool ManagerPrivate::submitWorldWide(const Score &score,
- TQWidget *widget) const
-{
- if ( score.type()==Lost && !trackLostGames ) return true;
- if ( score.type()==Draw && !trackDrawGames ) return true;
-
- KURL url = queryURL(Submit);
- manager.additionalQueryItems(url, score);
- int s = (score.type()==Won ? score.score() : (int)score.type());
- TQString str = TQString::number(s);
- Manager::addToQueryURL(url, "score", str);
- KMD5 context(TQString(_playerInfos->registeredName() + str).latin1());
- Manager::addToQueryURL(url, "check", context.hexDigest());
-
- return doQuery(url, widget);
-}
-
-void ManagerPrivate::exportHighscores(TQTextStream &s)
-{
- uint tmp = _gameType;
-
- for (uint i=0; i<_nbGameTypes; i++) {
- setGameType(i);
- if ( _nbGameTypes>1 ) {
- if ( i!=0 ) s << endl;
- s << "--------------------------------" << endl;
- s << "Game type: "
- << manager.gameTypeLabel(_gameType, Manager::I18N)
- << endl;
- s << endl;
- }
- s << "Players list:" << endl;
- _playerInfos->exportToText(s);
- s << endl;
- s << "Highscores list:" << endl;
- _scoreInfos->exportToText(s);
- }
-
- setGameType(tmp);
-}
-
-} // namespace
diff --git a/libkdegames/highscore/kexthighscore_internal.h b/libkdegames/highscore/kexthighscore_internal.h
deleted file mode 100644
index 0bd4f9ef..00000000
--- a/libkdegames/highscore/kexthighscore_internal.h
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2004 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_INTERNAL_H
-#define KEXTHIGHSCORE_INTERNAL_H
-
-#include <kapplication.h>
-#include <kconfig.h>
-#include <klocale.h>
-#include <kurl.h>
-
-#include "khighscore.h"
-#include "kexthighscore.h"
-
-class TQTextStream;
-class TQTabWidget;
-class TQDomNamedNodeMap;
-
-
-namespace KExtHighscore
-{
-
-class PlayerInfos;
-class Score;
-class Manager;
-
-
-//-----------------------------------------------------------------------------
-class RankItem : public Item
-{
- public:
- RankItem()
- : Item((uint)0, i18n("Rank"), TQt::AlignRight) {}
-
- TQVariant read(uint rank, const TQVariant &) const { return rank; }
- TQString pretty(uint rank, const TQVariant &) const
- { return TQString::number(rank+1); }
-};
-
-class NameItem : public Item
-{
- public:
- NameItem()
- : Item(TQString(), i18n("Name"), TQt::AlignLeft) {
- setPrettySpecial(Anonymous);
- }
-};
-
-class DateItem : public Item
-{
- public:
- DateItem()
- : Item(TQDateTime(), i18n("Date"), TQt::AlignRight) {
- setPrettyFormat(DateTime);
- }
-};
-
-class SuccessPercentageItem : public Item
-{
- public:
- SuccessPercentageItem()
- : Item((double)-1, i18n("Success"), TQt::AlignRight) {
- setPrettyFormat(Percentage);
- setPrettySpecial(NegativeNotDefined);
- }
-};
-
-//-----------------------------------------------------------------------------
-class ItemContainer
-{
- public:
- ItemContainer();
- ~ItemContainer();
-
- void setItem(Item *item);
- const Item *item() const { return _item; }
- Item *item() { return _item; }
-
- void setName(const TQString &name) { _name = name; }
- TQString name() const { return _name; }
-
- void setGroup(const TQString &group) { _group = group; }
- bool isStored() const { return !_group.isNull(); }
-
- void setSubGroup(const TQString &subGroup) { _subGroup = subGroup; }
- bool canHaveSubGroup() const { return !_subGroup.isNull(); }
-
- static const char ANONYMOUS[]; // name assigned to anonymous players
- static const char ANONYMOUS_LABEL[];
-
- TQVariant read(uint i) const;
- TQString pretty(uint i) const;
- void write(uint i, const TQVariant &value) const;
- // for UInt TQVariant (return new value)
- uint increment(uint i) const;
-
- private:
- Item *_item;
- TQString _name, _group, _subGroup;
-
- TQString entryName() const;
-
- ItemContainer(const ItemContainer &);
- ItemContainer &operator =(const ItemContainer &);
-};
-
-//-----------------------------------------------------------------------------
-/**
- * Manage a bunch of @ref Item which are saved under the same group
- * in KHighscores config file.
- */
-class ItemArray : public TQMemArray<ItemContainer *>
-{
- public:
- ItemArray();
- virtual ~ItemArray();
-
- virtual uint nbEntries() const = 0;
-
- const ItemContainer *item(const TQString &name) const;
- ItemContainer *item(const TQString &name);
-
- void addItem(const TQString &name, Item *, bool stored = true,
- bool canHaveSubGroup = false);
- void setItem(const TQString &name, Item *);
- int findIndex(const TQString &name) const;
-
- void setGroup(const TQString &group);
- void setSubGroup(const TQString &subGroup);
-
- void read(uint k, Score &data) const;
- void write(uint k, const Score &data, uint maxNbLines) const;
-
- void exportToText(TQTextStream &) const;
-
- private:
- TQString _group, _subGroup;
-
- void _setItem(uint i, const TQString &name, Item *, bool stored,
- bool canHaveSubGroup);
-
- ItemArray(const ItemArray &);
- ItemArray &operator =(const ItemArray &);
-};
-
-//-----------------------------------------------------------------------------
-class ScoreInfos : public ItemArray
-{
- public:
- ScoreInfos(uint maxNbEntries, const PlayerInfos &infos);
-
- uint nbEntries() const;
- uint maxNbEntries() const { return _maxNbEntries; }
-
- private:
- uint _maxNbEntries;
-};
-
-//-----------------------------------------------------------------------------
-class ConfigGroup : public KConfigGroupSaver
-{
- public:
- ConfigGroup(const TQString &group = TQString())
- : KConfigGroupSaver(kapp->config(), group) {}
-};
-
-//-----------------------------------------------------------------------------
-class PlayerInfos : public ItemArray
-{
- public:
- PlayerInfos();
-
- bool isNewPlayer() const { return _newPlayer; }
- bool isOldLocalPlayer() const { return _oldLocalPlayer; }
- uint nbEntries() const;
- TQString name() const { return item("name")->read(_id).toString(); }
- bool isAnonymous() const;
- TQString prettyName() const { return prettyName(_id); }
- TQString prettyName(uint id) const { return item("name")->pretty(id); }
- TQString registeredName() const;
- TQString comment() const { return item("comment")->pretty(_id); }
- bool isWWEnabled() const;
- TQString key() const;
- uint id() const { return _id; }
- uint oldLocalId() const { return _oldLocalId; }
-
- void createHistoItems(const TQMemArray<uint> &scores, bool bound);
- TQString histoName(uint i) const;
- uint histoSize() const;
- const TQMemArray<uint> &histogram() const { return _histogram; }
-
- void submitScore(const Score &) const;
- // return true if the nickname is already used locally
- bool isNameUsed(const TQString &name) const;
- void modifyName(const TQString &newName) const;
- void modifySettings(const TQString &newName, const TQString &comment,
- bool WWEnabled, const TQString &newKey) const;
- void removeKey();
-
- private:
- bool _newPlayer, _bound, _oldLocalPlayer;
- uint _id, _oldLocalId;
- TQMemArray<uint> _histogram;
-};
-
-//-----------------------------------------------------------------------------
-class ManagerPrivate
-{
- public:
- ManagerPrivate(uint nbGameTypes, Manager &manager);
- void init(uint maxNbentries);
- ~ManagerPrivate();
-
- bool modifySettings(const TQString &newName, const TQString &comment,
- bool WWEnabled, TQWidget *widget);
-
- void setGameType(uint type);
- void checkFirst();
- int submitLocal(const Score &score);
- int submitScore(const Score &score, TQWidget *widget, bool askIfAnonymous);
- Score readScore(uint i) const;
-
- uint gameType() const { return _gameType; }
- uint nbGameTypes() const { return _nbGameTypes; }
- bool isWWHSAvailable() const { return !serverURL.isEmpty(); }
- ScoreInfos &scoreInfos() { return *_scoreInfos; }
- PlayerInfos &playerInfos() { return *_playerInfos; }
- KHighscore &hsConfig() { return *_hsConfig; }
- enum QueryType { Submit, Register, Change, Players, Scores };
- KURL queryURL(QueryType type, const TQString &newName=TQString()) const;
-
- void exportHighscores(TQTextStream &);
-
- Manager &manager;
- KURL serverURL;
- TQString version;
- bool showStatistics, showDrawGames, trackLostGames, trackDrawGames;
- Manager::ShowMode showMode;
-
- private:
- KHighscore *_hsConfig;
- PlayerInfos *_playerInfos;
- ScoreInfos *_scoreInfos;
- bool _first;
- const uint _nbGameTypes;
- uint _gameType;
-
- // return -1 if not a local best score
- int rank(const Score &score) const;
-
- bool submitWorldWide(const Score &score, TQWidget *parent) const;
- static bool doQuery(const KURL &url, TQWidget *parent,
- TQDomNamedNodeMap *map = 0);
- static bool getFromQuery(const TQDomNamedNodeMap &map, const TQString &name,
- TQString &value, TQWidget *parent);
- void convertToGlobal();
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore_item.cpp b/libkdegames/highscore/kexthighscore_item.cpp
deleted file mode 100644
index 4b48a0ee..00000000
--- a/libkdegames/highscore/kexthighscore_item.cpp
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore_item.h"
-
-#include <tqlayout.h>
-#include <kglobal.h>
-#include <kdialogbase.h>
-#include <kdebug.h>
-
-#include "khighscore.h"
-#include "kexthighscore_internal.h"
-#include "kexthighscore_gui.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-Item::Item(const TQVariant &def, const TQString &label, int tqalignment)
- : _default(def), _label(label), _tqalignment(tqalignment),
- _format(NoFormat), _special(NoSpecial)
-{}
-
-Item::~Item()
-{}
-
-TQVariant Item::read(uint, const TQVariant &value) const
-{
- return value;
-}
-
-void Item::setPrettyFormat(Format format)
-{
- bool buint = ( _default.type()==TQVariant::UInt );
- bool bdouble = ( _default.type()==TQVariant::Double );
- bool bnum = ( buint || bdouble || _default.type()==TQVariant::Int );
-
- switch (format) {
- case OneDecimal:
- case Percentage:
- Q_ASSERT(bdouble);
- break;
- case MinuteTime:
- Q_ASSERT(bnum);
- break;
- case DateTime:
- Q_ASSERT( _default.type()==TQVariant::DateTime );
- break;
- case NoFormat:
- break;
- }
-
- _format = format;
-}
-
-void Item::setPrettySpecial(Special special)
-{
- bool buint = ( _default.type()==TQVariant::UInt );
- bool bnum = ( buint || _default.type()==TQVariant::Double
- || _default.type()==TQVariant::Int );
-
- switch (special) {
- case ZeroNotDefined:
- Q_ASSERT(bnum);
- break;
- case NegativeNotDefined:
- Q_ASSERT(bnum && !buint);
- break;
- case DefaultNotDefined:
- break;
- case Anonymous:
- Q_ASSERT( _default.type()==TQVariant::String );
- break;
- case NoSpecial:
- break;
- }
-
- _special = special;
-}
-
-TQString Item::timeFormat(uint n)
-{
- Q_ASSERT( n<=3600 && n!=0 );
- n = 3600 - n;
- return TQString::number(n / 60).rightJustify(2, '0') + ':'
- + TQString::number(n % 60).rightJustify(2, '0');
-}
-
-TQString Item::pretty(uint, const TQVariant &value) const
-{
- switch (_special) {
- case ZeroNotDefined:
- if ( value.toUInt()==0 ) return "--";
- break;
- case NegativeNotDefined:
- if ( value.toInt()<0 ) return "--";
- break;
- case DefaultNotDefined:
- if ( value==_default ) return "--";
- break;
- case Anonymous:
- if ( value.toString()==ItemContainer::ANONYMOUS )
- return i18n(ItemContainer::ANONYMOUS_LABEL);
- break;
- case NoFormat:
- break;
- }
-
- switch (_format) {
- case OneDecimal:
- return TQString::number(value.toDouble(), 'f', 1);
- case Percentage:
- return TQString::number(value.toDouble(), 'f', 1) + "%";
- case MinuteTime:
- return timeFormat(value.toUInt());
- case DateTime:
- if ( value.toDateTime().isNull() ) return "--";
- return KGlobal::locale()->formatDateTime(value.toDateTime());
- case NoSpecial:
- break;
- }
-
- return value.toString();
-}
-
-//-----------------------------------------------------------------------------
-Score::Score(ScoreType type)
- : _type(type)
-{
- const ItemArray &items = internal->scoreInfos();
- for (uint i=0; i<items.size(); i++)
- _data[items[i]->name()] = items[i]->item()->defaultValue();
-}
-
-Score::~Score()
-{}
-
-const TQVariant &Score::data(const TQString &name) const
-{
- Q_ASSERT( _data.contains(name) );
- return _data[name];
-}
-
-void Score::setData(const TQString &name, const TQVariant &value)
-{
- Q_ASSERT( _data.contains(name) );
- Q_ASSERT( _data[name].type()==value.type() );
- _data[name] = value;
-}
-
-bool Score::isTheWorst() const
-{
- Score s;
- return score()==s.score();
-}
-
-bool Score::operator <(const Score &score)
-{
- return internal->manager.isStrictlyLess(*this, score);
-}
-
-TQDataStream &operator <<(TQDataStream &s, const Score &score)
-{
- s << (TQ_UINT8)score.type();
- s << score._data;
- return s;
-}
-
-TQDataStream &operator >>(TQDataStream &s, Score &score)
-{
- TQ_UINT8 type;
- s >> type;
- score._type = (ScoreType)type;
- s >> score._data;
- return s;
-}
-
-//-----------------------------------------------------------------------------
-MultiplayerScores::MultiplayerScores()
-{}
-
-MultiplayerScores::~MultiplayerScores()
-{}
-
-void MultiplayerScores::clear()
-{
- Score score;
- for (uint i=0; i<_scores.size(); i++) {
- _nbGames[i] = 0;
- TQVariant name = _scores[i].data("name");
- _scores[i] = score;
- _scores[i].setData("name", name);
- _scores[i]._data["mean score"] = double(0);
- _scores[i]._data["nb won games"] = uint(0);
- }
-}
-
-void MultiplayerScores::setPlayerCount(uint nb)
-{
- _nbGames.resize(nb);
- _scores.resize(nb);
- clear();
-}
-
-void MultiplayerScores::setName(uint i, const TQString &name)
-{
- _scores[i].setData("name", name);
-}
-
-void MultiplayerScores::addScore(uint i, const Score &score)
-{
- TQVariant name = _scores[i].data("name");
- double mean = _scores[i].data("mean score").toDouble();
- uint won = _scores[i].data("nb won games").toUInt();
- _scores[i] = score;
- _scores[i].setData("name", name);
- _nbGames[i]++;
- mean += (double(score.score()) - mean) / _nbGames[i];
- _scores[i]._data["mean score"] = mean;
- if ( score.type()==Won ) won++;
- _scores[i]._data["nb won games"] = won;
-}
-
-void MultiplayerScores::show(TQWidget *parent)
-{
- // check consistency
- if ( _nbGames.size()<2 ) kdWarning(11002) << "less than 2 players" << endl;
- else {
- bool ok = true;
- uint nb = _nbGames[0];
- for (uint i=1; i<_nbGames.size(); i++)
- if ( _nbGames[i]!=nb ) ok = false;
- if (!ok)
- kdWarning(11002) << "players have not same number of games" << endl;
- }
-
- // order the players according to the number of won games
- TQValueVector<Score> ordered;
- for (uint i=0; i<_scores.size(); i++) {
- uint won = _scores[i].data("nb won games").toUInt();
- double mean = _scores[i].data("mean score").toDouble();
- TQValueVector<Score>::iterator it;
- for(it = ordered.begin(); it!=ordered.end(); ++it) {
- uint cwon = (*it).data("nb won games").toUInt();
- double cmean = (*it).data("mean score").toDouble();
- if ( won<cwon || (won==cwon && mean<cmean) ) {
- ordered.insert(it, _scores[i]);
- break;
- }
- }
- if ( it==ordered.end() ) ordered.push_back(_scores[i]);
- }
-
- // show the scores
- KDialogBase dialog(KDialogBase::Plain, i18n("Multiplayers Scores"),
- KDialogBase::Close, KDialogBase::Close,
- parent, "show_multiplayers_score", true, true);
- TQHBoxLayout *hbox = new TQHBoxLayout(dialog.plainPage(),
- KDialog::marginHint(), KDialog::spacingHint());
-
- TQVBox *vbox = new TQVBox(dialog.plainPage());
- hbox->addWidget(vbox);
- if ( _nbGames[0]==0 ) (void)new TQLabel(i18n("No game played."), vbox);
- else {
- (void)new TQLabel(i18n("Scores for last game:"), vbox);
- (void)new LastMultipleScoresList(ordered, vbox);
- }
-
- if ( _nbGames[0]>1 ) {
- vbox = new TQVBox(dialog.plainPage());
- hbox->addWidget(vbox);
- (void)new TQLabel(i18n("Scores for the last %1 games:")
- .tqarg(_nbGames[0]), vbox);
- (void)new TotalMultipleScoresList(ordered, vbox);
- }
-
- dialog.enableButtonSeparator(false);
- dialog.exec();
-}
-
-TQDataStream &operator <<(TQDataStream &s, const MultiplayerScores &score)
-{
- s << score._scores;
- s << score._nbGames;
- return s;
-}
-
-TQDataStream &operator >>(TQDataStream &s, MultiplayerScores &score)
-{
- s >> score._scores;
- s >> score._nbGames;
- return s;
-}
-
-} // namespace
diff --git a/libkdegames/highscore/kexthighscore_item.h b/libkdegames/highscore/kexthighscore_item.h
deleted file mode 100644
index b32f32e7..00000000
--- a/libkdegames/highscore/kexthighscore_item.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2003 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_ITEM_H
-#define KEXTHIGHSCORE_ITEM_H
-
-#include <tqvariant.h>
-#include <tqnamespace.h>
-#include <tqmap.h>
-#include <tqvaluevector.h>
-#include <kdemacros.h>
-class TQWidget;
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-/**
- * This class defines how to convert and how to display
- * a highscore element (such as the score, the date, ...) or a player
- * info (such as the player name, the best score, ...).
- */
-class KDE_EXPORT Item
-{
- public:
- /**
- * Possible display format.
- * <ul>
- * <li> @p NoFormat : no formatting (default) </li>
- * <li> @p OneDecimal : with one decimal (only for Double) </li>
- * <li> @p Percentage : with one decimal + % (only for Double) </li>
- * <li> @p MinuteTime : MM:SS ie 3600 is 00:00, 1 is 59:59 and 0 is
- * undefined (only for UInt, Int and Double) </li>
- * <li> @p DateTime : date and time according to locale (only for
- * DateTime) </li>
- * </ul>
- */
- enum Format { NoFormat, OneDecimal, Percentage, MinuteTime,
- DateTime };
-
- /**
- * Possible special value for display format.
- * <ul>
- * <li> @p NoSpecial : no special value ; a null DateTime is replaced by
- * "--" (default) </li>
- * <li> ZeroNotDefined : 0 is replaced by "--" (only for UInt, Int and
- * Double) </li>
- * <li> @p NegativeNotDefined : negative values are replaced by "--" (only
- * for Int and Double) </li>
- * <li> @p DefaultNotDefined : default value is replaced by "--" </li>
- * <li> @p Anonymous : replace the special value ItemBase::ANONYMOUS
- * by i18n("anonymous") (only for String) </li>
- * </ul>
- */
- enum Special { NoSpecial, ZeroNotDefined, NegativeNotDefined,
- DefaultNotDefined, Anonymous };
-
- /**
- * Constructor.
- *
- * @param def default value ; the TQVariant also gives the type of data.
- * Be sure to cast the value to the required type (for e.g. with uint).
- * @param label the label corresponding to the item. If empty, the item
- * is not shown.
- * @param tqalignment the tqalignment of the item.
- */
- Item(const TQVariant &def = TQVariant::Invalid,
- const TQString &label = TQString(), int tqalignment = TQt::AlignRight);
-
- virtual ~Item();
-
- /**
- * Set the display format.
- * @see Format
- */
- void setPrettyFormat(Format format);
-
- /**
- * Set the special value for display.
- * @see Special
- */
- void setPrettySpecial(Special special);
-
- /**
- * @return if the item is shown.
- */
- bool isVisible() const { return !_label.isEmpty(); }
-
- /**
- * Set the label.
- */
- void setLabel(const TQString &label) { _label = label; }
-
- /**
- * @return the label.
- */
- TQString label() const { return _label; }
-
- /**
- * @return the tqalignment.
- */
- int tqalignment() const { return _tqalignment; }
-
- /**
- * Set default value.
- */
- void setDefaultValue(const TQVariant &value) { _default = value; }
-
- /**
- * @return the default value.
- */
- const TQVariant &defaultValue() const { return _default; }
-
- /**
- * @return the converted value (by default the value is left
- * unchanged). Most of the time you don't need to reimplement this method.
- *
- * @param i the element index ("rank" for score / "id" for player)
- * @param value the value to convert
- */
- virtual TQVariant read(uint i, const TQVariant &value) const;
-
- /**
- * @return the string to be displayed. You may need to reimplement this
- * method for special formatting (different from the standard ones).
- *
- * @param i the element index ("rank" for score / "id" for player)
- * @param value the value to convert
- */
- virtual TQString pretty(uint i, const TQVariant &value) const;
-
- private:
- TQVariant _default;
- TQString _label;
- int _tqalignment;
- Format _format;
- Special _special;
-
- class ItemPrivate;
- ItemPrivate *d;
-
- static TQString timeFormat(uint);
-};
-
-//-----------------------------------------------------------------------------
-/**
- * Possible score type.
- * @p Won the game has been won.
- * @p Lost the game has been lost or has been aborted.
- * @p Draw the game is a draw.
- */
-enum ScoreType { Won = 0, Lost = -1, Draw = -2 };
-
-/**
- * This class contains data for a score. You should not inherit from
- * this class but reimplement the methods in Highscores.
- */
-class KDE_EXPORT Score
-{
- public:
- Score(ScoreType type = Won);
-
- ~Score();
-
- /**
- * @return the game type.
- */
- ScoreType type() const { return _type; }
-
- /**
- * Set the game type.
- */
- void setType(ScoreType type) { _type = type; }
-
- /**
- * @return the data associated with the named Item.
- */
- const TQVariant &data(const TQString &name) const;
-
- /**
- * Set the data associated with the named Item. Note that the
- * value should have the type of the default value of the
- * Item.
- */
- void setData(const TQString &name, const TQVariant &value);
-
- /**
- * @return the score value.
- *
- * Equivalent to <pre>data("score").toUInt()</pre>.
- */
- uint score() const { return data("score").toUInt(); }
-
- /**
- * Set the score value.
- *
- * Equivalent to <pre>setData("score", score)</pre>.
- */
- void setScore(uint score) { setData("score", score); }
-
- /**
- * @return true if this is the worst possible score (ie the default
- * argument of ScoreItem).
- */
- bool isTheWorst() const;
-
- /**
- * Comparison operator.
- *
- * @see Manager::isStrictlyLess
- */
- bool operator <(const Score &score);
-
- private:
- ScoreType _type;
- TQMap<TQString, TQVariant> _data;
-
- class ScorePrivate;
- ScorePrivate *d;
-
- friend class MultiplayerScores;
-
- friend TQDataStream &operator <<(TQDataStream &stream, const Score &score);
- friend TQDataStream &operator >>(TQDataStream &stream, Score &score);
-};
-
-KDE_EXPORT TQDataStream &operator <<(TQDataStream &stream, const Score &score);
-KDE_EXPORT TQDataStream &operator >>(TQDataStream &stream, Score &score);
-
-/**
- * This class is used to store and show scores for multiplayer games.
- *
- * Example of use:
- * Initialize the class:
- * <pre>
- * KExtHighscore::MultiScore ms(2);
- * ms.setPlayerName(0, "player 1");
- * ms.setPlayerName(1, "player 2");
- * </pre>
- * At the end of each game, add the score of each players:
- * <pre>
- * KExtHighscore::Score score(KExtHighscore::Won);
- * score.setScore(100);
- * ms.addScore(0, score);
- * score.setType(KExtHighscore::Lost);
- * score.setScore(20);
- * ms.addScore(1, score);
- * </pre>
- */
-class KDE_EXPORT MultiplayerScores
-{
- public:
- MultiplayerScores();
-
- ~MultiplayerScores();
-
- /**
- * Set the number of players and clear the scores.
- */
- void setPlayerCount(uint nb);
-
- /**
- * Set the name of player.
- */
- void setName(uint player, const TQString &name);
-
- /**
- * Add the score of player.
- */
- void addScore(uint player, const Score &score);
-
- /**
- * Clear all scores.
- */
- void clear();
-
- /**
- * Show scores.
- */
- void show(TQWidget *parent);
-
- private:
- TQValueVector<uint> _nbGames;
- TQValueVector<Score> _scores;
-
- class MultiplayerScoresPrivate;
- MultiplayerScoresPrivate *d;
-
- friend TQDataStream &operator <<(TQDataStream &stream,
- const MultiplayerScores &score);
- friend TQDataStream &operator >>(TQDataStream &stream,
- MultiplayerScores &score);
-};
-
-KDE_EXPORT TQDataStream &operator <<(TQDataStream &stream, const MultiplayerScores &score);
-KDE_EXPORT TQDataStream &operator >>(TQDataStream &stream, MultiplayerScores &score);
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kexthighscore_tab.cpp b/libkdegames/highscore/kexthighscore_tab.cpp
deleted file mode 100644
index d47b35a6..00000000
--- a/libkdegames/highscore/kexthighscore_tab.cpp
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2002 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kexthighscore_tab.h"
-#include "kexthighscore_tab.moc"
-
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <tqvgroupbox.h>
-#include <tqgrid.h>
-#include <tqheader.h>
-
-#include <kdialogbase.h>
-#include <klistview.h>
-#include <kdebug.h>
-#include <kglobal.h>
-
-#include "kexthighscore.h"
-#include "kexthighscore_internal.h"
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-PlayersCombo::PlayersCombo(TQWidget *parent, const char *name)
- : TQComboBox(parent, name)
-{
- const PlayerInfos &p = internal->playerInfos();
- for (uint i = 0; i<p.nbEntries(); i++)
- insertItem(p.prettyName(i));
- insertItem(TQString("<") + i18n("all") + '>');
- connect(this, TQT_SIGNAL(activated(int)), TQT_SLOT(activatedSlot(int)));
-}
-
-void PlayersCombo::activatedSlot(int i)
-{
- const PlayerInfos &p = internal->playerInfos();
- if ( i==(int)p.nbEntries() ) emit allSelected();
- else if ( i==(int)p.nbEntries()+1 ) emit noneSelected();
- else emit playerSelected(i);
-}
-
-void PlayersCombo::load()
-{
- const PlayerInfos &p = internal->playerInfos();
- for (uint i = 0; i<p.nbEntries(); i++)
- changeItem(p.prettyName(i), i);
-}
-
-//-----------------------------------------------------------------------------
-AdditionalTab::AdditionalTab(TQWidget *parent, const char *name)
- : TQWidget(parent, name)
-{
- TQVBoxLayout *top = new TQVBoxLayout(this, KDialogBase::marginHint(),
- KDialogBase::spacingHint());
-
- TQHBoxLayout *hbox = new TQHBoxLayout(top);
- TQLabel *label = new TQLabel(i18n("Select player:"), this);
- hbox->addWidget(label);
- _combo = new PlayersCombo(this);
- connect(_combo, TQT_SIGNAL(playerSelected(uint)),
- TQT_SLOT(playerSelected(uint)));
- connect(_combo, TQT_SIGNAL(allSelected()), TQT_SLOT(allSelected()));
- hbox->addWidget(_combo);
- hbox->addStretch(1);
-}
-
-void AdditionalTab::init()
-{
- uint id = internal->playerInfos().id();
- _combo->setCurrentItem(id);
- playerSelected(id);
-}
-
-void AdditionalTab::allSelected()
-{
- display(internal->playerInfos().nbEntries());
-}
-
-TQString AdditionalTab::percent(uint n, uint total, bool withBraces)
-{
- if ( n==0 || total==0 ) return TQString();
- TQString s = TQString("%1%").tqarg(100.0 * n / total, 0, 'f', 1);
- return (withBraces ? TQString("(") + s + ")" : s);
-}
-
-void AdditionalTab::load()
-{
- _combo->load();
-}
-
-
-//-----------------------------------------------------------------------------
-const char *StatisticsTab::COUNT_LABELS[Nb_Counts] = {
- I18N_NOOP("Total:"), I18N_NOOP("Won:"), I18N_NOOP("Lost:"),
- I18N_NOOP("Draw:")
-};
-const char *StatisticsTab::TREND_LABELS[Nb_Trends] = {
- I18N_NOOP("Current:"), I18N_NOOP("Max won:"), I18N_NOOP("Max lost:")
-};
-
-StatisticsTab::StatisticsTab(TQWidget *parent)
- : AdditionalTab(parent, "statistics_tab")
-{
- // construct GUI
- TQVBoxLayout *top = static_cast<TQVBoxLayout *>(tqlayout());
-
- TQHBoxLayout *hbox = new TQHBoxLayout(top);
- TQVBoxLayout *vbox = new TQVBoxLayout(hbox);
- TQVGroupBox *group = new TQVGroupBox(i18n("Game Counts"), this);
- vbox->addWidget(group);
- TQGrid *grid = new TQGrid(3, group);
- grid->setSpacing(KDialogBase::spacingHint());
- for (uint k=0; k<Nb_Counts; k++) {
- if ( Count(k)==Draw && !internal->showDrawGames ) continue;
- (void)new TQLabel(i18n(COUNT_LABELS[k]), grid);
- _nbs[k] = new TQLabel(grid);
- _percents[k] = new TQLabel(grid);
- }
-
- group = new TQVGroupBox(i18n("Trends"), this);
- vbox->addWidget(group);
- grid = new TQGrid(2, group);
- grid->setSpacing(KDialogBase::spacingHint());
- for (uint k=0; k<Nb_Trends; k++) {
- (void)new TQLabel(i18n(TREND_LABELS[k]), grid);
- _trends[k] = new TQLabel(grid);
- }
-
- hbox->addStretch(1);
- top->addStretch(1);
-}
-
-void StatisticsTab::load()
-{
- AdditionalTab::load();
- const PlayerInfos &pi = internal->playerInfos();
- uint nb = pi.nbEntries();
- _data.resize(nb+1);
- for (uint i=0; i<_data.size()-1; i++) {
- _data[i].count[Total] = pi.item("nb games")->read(i).toUInt();
- _data[i].count[Lost] = pi.item("nb lost games")->read(i).toUInt()
- + pi.item("nb black marks")->read(i).toUInt(); // legacy
- _data[i].count[Draw] = pi.item("nb draw games")->read(i).toUInt();
- _data[i].count[Won] = _data[i].count[Total] - _data[i].count[Lost]
- - _data[i].count[Draw];
- _data[i].trend[CurrentTrend] =
- pi.item("current trend")->read(i).toInt();
- _data[i].trend[WonTrend] = pi.item("max won trend")->read(i).toUInt();
- _data[i].trend[LostTrend] =
- -(int)pi.item("max lost trend")->read(i).toUInt();
- }
-
- for (uint k=0; k<Nb_Counts; k++) _data[nb].count[k] = 0;
- for (uint k=0; k<Nb_Trends; k++) _data[nb].trend[k] = 0;
- for (uint i=0; i<_data.size()-1; i++) {
- for (uint k=0; k<Nb_Counts; k++)
- _data[nb].count[k] += _data[i].count[k];
- for (uint k=0; k<Nb_Trends; k++)
- _data[nb].trend[k] += _data[i].trend[k];
- }
- for (uint k=0; k<Nb_Trends; k++)
- _data[nb].trend[k] /= (_data.size()-1);
-
- init();
-}
-
-TQString StatisticsTab::percent(const Data &d, Count count) const
-{
- if ( count==Total ) return TQString();
- return AdditionalTab::percent(d.count[count], d.count[Total], true);
-}
-
-void StatisticsTab::display(uint i)
-{
- const Data &d = _data[i];
- for (uint k=0; k<Nb_Counts; k++) {
- if ( Count(k) && !internal->showDrawGames ) continue;
- _nbs[k]->setText(TQString::number(d.count[k]));
- _percents[k]->setText(percent(d, Count(k)));
- }
- for (uint k=0; k<Nb_Trends; k++) {
- TQString s;
- if ( d.trend[k]>0 ) s = '+';
- int prec = (i==internal->playerInfos().nbEntries() ? 1 : 0);
- _trends[k]->setText(s + TQString::number(d.trend[k], 'f', prec));
- }
-}
-
-//-----------------------------------------------------------------------------
-HistogramTab::HistogramTab(TQWidget *parent)
- : AdditionalTab(parent, "histogram_tab")
-{
- // construct GUI
- TQVBoxLayout *top = static_cast<TQVBoxLayout *>(tqlayout());
-
- _list = new KListView(this);
- _list->setSelectionMode(TQListView::NoSelection);
- _list->setItemMargin(3);
- _list->setAllColumnsShowFocus(true);
- _list->setSorting(-1);
- _list->header()->setClickEnabled(false);
- _list->header()->setMovingEnabled(false);
- top->addWidget(_list);
-
- _list->addColumn(i18n("From"));
- _list->addColumn(i18n("To"));
- _list->addColumn(i18n("Count"));
- _list->addColumn(i18n("Percent"));
- for (uint i=0; i<4; i++) _list->setColumnAlignment(i, AlignRight);
- _list->addColumn(TQString());
-
- const Item *sitem = internal->scoreInfos().item("score")->item();
- const PlayerInfos &pi = internal->playerInfos();
- const TQMemArray<uint> &sh = pi.histogram();
- for (uint k=1; k<pi.histoSize(); k++) {
- TQString s1 = sitem->pretty(0, sh[k-1]);
- TQString s2;
- if ( k==sh.size() ) s2 = "...";
- else if ( sh[k]!=sh[k-1]+1 ) s2 = sitem->pretty(0, sh[k]);
- (void)new KListViewItem(_list, s1, s2);
- }
-}
-
-void HistogramTab::load()
-{
- AdditionalTab::load();
- const PlayerInfos &pi = internal->playerInfos();
- uint n = pi.nbEntries();
- uint s = pi.histoSize() - 1;
- _counts.resize((n+1) * s);
- _data.fill(0, n+1);
- for (uint k=0; k<s; k++) {
- _counts[n*s + k] = 0;
- for (uint i=0; i<n; i++) {
- uint nb = pi.item(pi.histoName(k+1))->read(i).toUInt();
- _counts[i*s + k] = nb;
- _counts[n*s + k] += nb;
- _data[i] += nb;
- _data[n] += nb;
- }
- }
-
- init();
-}
-
-void HistogramTab::display(uint i)
-{
- const PlayerInfos &pi = internal->playerInfos();
- TQListViewItem *item = _list->firstChild();
- uint s = pi.histoSize() - 1;
- for (int k=s-1; k>=0; k--) {
- uint nb = _counts[i*s + k];
- item->setText(2, TQString::number(nb));
- item->setText(3, percent(nb, _data[i]));
- uint width = (_data[i]==0 ? 0 : tqRound(150.0 * nb / _data[i]));
- TQPixmap pixmap(width, 10);
- pixmap.fill(blue);
- item->setPixmap(4, pixmap);
- item = item->nextSibling();
- }
-}
-
-} // namespace
diff --git a/libkdegames/highscore/kexthighscore_tab.h b/libkdegames/highscore/kexthighscore_tab.h
deleted file mode 100644
index d59afeb5..00000000
--- a/libkdegames/highscore/kexthighscore_tab.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2002 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KEXTHIGHSCORE_TAB_H
-#define KEXTHIGHSCORE_TAB_H
-
-#include <tqcombobox.h>
-#include <tqmemarray.h>
-
-class TQLabel;
-class KListView;
-
-
-namespace KExtHighscore
-{
-
-//-----------------------------------------------------------------------------
-class PlayersCombo : public TQComboBox
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- PlayersCombo(TQWidget *parent = 0, const char *name = 0);
-
- void load();
-
- signals:
- void playerSelected(uint i);
- void allSelected();
- void noneSelected();
-
- private slots:
- void activatedSlot(int i);
-};
-
-//-----------------------------------------------------------------------------
-class AdditionalTab : public TQWidget
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- AdditionalTab(TQWidget *parent, const char *name);
-
- virtual void load();
-
- private slots:
- void playerSelected(uint i) { display(i) ; }
- void allSelected();
-
- protected:
- void init();
- static TQString percent(uint n, uint total, bool withBraces = false);
- virtual void display(uint i) = 0;
-
- private:
- PlayersCombo *_combo;
-};
-
-//-----------------------------------------------------------------------------
-class StatisticsTab : public AdditionalTab
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- StatisticsTab(TQWidget *parent);
-
- void load();
-
- private:
- enum Count { Total = 0, Won, Lost, Draw, Nb_Counts };
- static const char *COUNT_LABELS[Nb_Counts];
- enum Trend { CurrentTrend = 0, WonTrend, LostTrend, Nb_Trends };
- static const char *TREND_LABELS[Nb_Trends];
- struct Data {
- uint count[Nb_Counts];
- double trend[Nb_Trends];
- };
- TQMemArray<Data> _data;
- TQLabel *_nbs[Nb_Counts], *_percents[Nb_Counts], *_trends[Nb_Trends];
-
- TQString percent(const Data &, Count) const;
- void display(uint i);
-};
-
-//-----------------------------------------------------------------------------
-class HistogramTab : public AdditionalTab
-{
- Q_OBJECT
- TQ_OBJECT
- public:
- HistogramTab(TQWidget *parent);
-
- void load();
-
- private:
- TQMemArray<uint> _counts;
- TQMemArray<uint> _data;
- KListView *_list;
-
- void display(uint i);
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/highscore/kfilelock.cpp b/libkdegames/highscore/kfilelock.cpp
deleted file mode 100644
index 7dc83b96..00000000
--- a/libkdegames/highscore/kfilelock.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kfilelock.h"
-
-#include <unistd.h>
-#include <sys/file.h>
-#include <errno.h>
-
-#include <kdebug.h>
-
-
-KFileLock::KFileLock(int fd)
- : _fd(fd), _locked(false)
-{}
-
-int KFileLock::lock()
-{
- kdDebug(11002) << "lock fd=" << _fd << endl;
-#ifdef F_SETLK
-# ifndef SEEK_SET
-# define SEEK_SET 0
-# endif
- struct flock lock_data;
- lock_data.l_type = F_WRLCK;
- lock_data.l_whence = SEEK_SET;
- lock_data.l_start = lock_data.l_len = 0;
- if ( fcntl(_fd, F_SETLK, &lock_data)==-1 ) {
- if ( errno==EAGAIN ) return -2;
- return -1;
- }
-#else
-# ifdef LOCK_EX
- if ( flock (_fd, LOCK_EX|LOCK_NB)==-1 ) {
- if ( errno==EWOULDBLOCK ) return -2;
- return -1;
- }
-# else
- if ( lockf(_fd, F_TLOCK, 0)==-1 ) {
- if ( errno==EACCES ) return -2;
- return -1;
- }
-# endif
-#endif
- _locked = true;
- return 0;
-}
-
-KFileLock::~KFileLock()
-{
- unlock();
-}
-
-void KFileLock::unlock()
-{
- if ( !_locked ) return;
- kdDebug(11002) << "unlock" << endl;
-# ifdef F_SETLK
- struct flock lock_data;
- lock_data.l_type = F_UNLCK;
- lock_data.l_whence = SEEK_SET;
- lock_data.l_start = lock_data.l_len = 0;
- (void)fcntl(_fd, F_SETLK, &lock_data);
-# else
-# ifdef F_ULOCK
- lockf(_fd, F_ULOCK, 0);
-# else
- flock(_fd, LOCK_UN);
-# endif
-# endif
- _locked = false;
-}
diff --git a/libkdegames/highscore/kfilelock.h b/libkdegames/highscore/kfilelock.h
deleted file mode 100644
index 2e1841ba..00000000
--- a/libkdegames/highscore/kfilelock.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-#ifndef KFILELOCK_H
-#define KFILELOCK_H
-
-
-class KFileLock
-{
-public:
- KFileLock(int fd);
-
- /** Call unlock(). */
- ~KFileLock();
-
- /** @return the file descriptor. */
- int fd() const { return _fd; }
-
- /*
- * Lock the file.
- * @return 0 on success, -1 on failure (no permission) and -2 if another
- * process is currently locking the file.
- */
- int lock();
-
- /** Unlock the file. */
- void unlock();
-
- /** @return true if we currently lock the file. */
- bool isLocked() const { return _locked; }
-
-private:
- int _fd;
- bool _locked;
-};
-
-
-#endif
diff --git a/libkdegames/highscore/khighscore.cpp b/libkdegames/highscore/khighscore.cpp
deleted file mode 100644
index 6d696020..00000000
--- a/libkdegames/highscore/khighscore.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include <config.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/file.h>
-
-#include <kapplication.h>
-#include <ksimpleconfig.h>
-#include <kglobal.h>
-#include <kstdguiitem.h>
-#include <klocale.h>
-#include <kmessagebox.h>
-#include <kdebug.h>
-#include <kstaticdeleter.h>
-
-#include "khighscore.h"
-#include "kconfigrawbackend.h"
-#include "kfilelock.h"
-
-#define GROUP "KHighscore"
-
-class KHighscorePrivate
-{
-public:
- KHighscorePrivate() {}
-
- TQString group;
- bool global;
-};
-
-KFileLock *KHighscore::_lock = 0;
-KRawConfig *KHighscore::_config = 0;
-static KStaticDeleter<KFileLock> lockSD;
-static KStaticDeleter<KRawConfig> configSD;
-
-
-KHighscore::KHighscore(TQObject* parent)
- : TQObject(parent)
-{
- init(true);
-}
-
-KHighscore::KHighscore(bool forceLocal, TQObject* parent)
- : TQObject(parent)
-{
- init(forceLocal);
-}
-
-void KHighscore::init(bool forceLocal)
-{
- d = new KHighscorePrivate;
-#ifdef HIGHSCORE_DIRECTORY
- d->global = !forceLocal;
- if ( d->global && _lock==0 )
- kdFatal(11002) << "KHighscore::init should be called before!!" << endl;
-#else
- d->global = false;
- Q_UNUSED(forceLocal);
-#endif
- readCurrentConfig();
-}
-
-bool KHighscore::isLocked() const
-{
- return (d->global ? _lock->isLocked() : true);
-}
-
-void KHighscore::readCurrentConfig()
-{
- if ( d->global ) _config->reparseConfiguration();
-}
-
-void KHighscore::init(const char *appname)
-{
-#ifdef HIGHSCORE_DIRECTORY
- const TQString filename = TQString::fromLocal8Bit("%1/%2.scores")
- .tqarg(HIGHSCORE_DIRECTORY).tqarg(appname);
- int fd = open(filename.local8Bit(), O_RDWR);
- if ( fd<0 ) kdFatal(11002) << "cannot open global highscore file \""
- << filename << "\"" << endl;
- lockSD.setObject(_lock, new KFileLock(fd));
- configSD.setObject(_config, new KRawConfig(fd, true)); // read-only
-
- // drop the effective gid
- int gid = getgid();
- setregid(gid, gid);
-#else
- Q_UNUSED(appname);
-#endif
-}
-
-bool KHighscore::lockForWriting(TQWidget *widget)
-{
- if ( isLocked() ) return true;
-
- bool first = true;
- for (;;) {
- kdDebug(11002) << "try locking" << endl;
- // lock the highscore file (it should exist)
- int result = _lock->lock();
- bool ok = ( result==0 );
- kdDebug(11002) << "locking system-wide highscore file res="
- << result << " (ok=" << ok << ")" << endl;
- if (ok) {
- readCurrentConfig();
- _config->setReadOnly(false);
- return true;
- }
-
- if ( !first ) {
- KGuiItem item = KStdGuiItem::cont();
- item.setText(i18n("Retry"));
- int res = KMessageBox::warningContinueCancel(widget, i18n("Cannot access the highscore file. Another user is probably currently writing to it."), TQString(), item, "ask_lock_global_highscore_file");
- if ( res==KMessageBox::Cancel ) break;
- } else sleep(1);
- first = false;
- }
- return false;
-}
-
-void KHighscore::writeAndUnlock()
-{
- if ( !d->global ) {
- kapp->config()->sync();
- return;
- }
- if ( !isLocked() ) return;
-
- kdDebug(11002) << "unlocking" << endl;
- _config->sync(); // write config
- _lock->unlock();
- _config->setReadOnly(true);
-}
-
-KHighscore::~KHighscore()
-{
- writeAndUnlock();
- delete d;
-}
-
-KConfig* KHighscore::config() const
-{
- return (d->global ? _config : kapp->config());
-}
-
-void KHighscore::writeEntry(int entry, const TQString& key, const TQVariant& value)
-{
- Q_ASSERT( isLocked() );
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- cg.config()->writeEntry(confKey, value);
-}
-
-void KHighscore::writeEntry(int entry, const TQString& key, int value)
-{
- Q_ASSERT( isLocked() );
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- cg.config()->writeEntry(confKey, value);
-}
-
-void KHighscore::writeEntry(int entry, const TQString& key, const TQString &value)
-{
- Q_ASSERT (isLocked() );
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- cg.config()->writeEntry(confKey, value);
-}
-
-TQVariant KHighscore::readPropertyEntry(int entry, const TQString& key, const TQVariant& pDefault) const
-{
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- return cg.config()->readPropertyEntry(confKey, pDefault);
-}
-
-TQString KHighscore::readEntry(int entry, const TQString& key, const TQString& pDefault) const
-{
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- return cg.config()->readEntry(confKey, pDefault);
-}
-
-int KHighscore::readNumEntry(int entry, const TQString& key, int pDefault) const
-{
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- return cg.config()->readNumEntry(confKey, pDefault);
-}
-
-bool KHighscore::hasEntry(int entry, const TQString& key) const
-{
- KConfigGroupSaver cg(config(), group());
- TQString confKey = TQString("%1_%2").tqarg(entry).tqarg(key);
- return cg.config()->hasKey(confKey);
-}
-
-TQStringList KHighscore::readList(const TQString& key, int lastEntry) const
-{
- TQStringList list;
- for (int i = 1; hasEntry(i, key) && ((lastEntry > 0) ? (i <= lastEntry) : true); i++) {
- list.append(readEntry(i, key));
- }
- return list;
-}
-
-void KHighscore::writeList(const TQString& key, const TQStringList& list)
-{
- for (int unsigned i = 1; i <= list.count(); i++) {
- writeEntry(i, key, list[i - 1]);
- }
-}
-
-void KHighscore::setHighscoreGroup(const TQString& group)
-{
- d->group = group;
-}
-
-const TQString& KHighscore::highscoreGroup() const
-{
- return d->group;
-}
-
-TQString KHighscore::group() const
-{
- if ( highscoreGroup().isNull() )
- return (d->global ? TQString() : GROUP);
- return (d->global ? highscoreGroup()
- : TQString("%1_%2").tqarg(GROUP).tqarg(highscoreGroup()));
-}
-
-bool KHighscore::hasTable() const
-{ return config()->hasGroup(group()); }
-
-void KHighscore::sync()
-{
- writeAndUnlock();
-}
-
-#include "khighscore.moc"
diff --git a/libkdegames/highscore/khighscore.h b/libkdegames/highscore/khighscore.h
deleted file mode 100644
index b7b6fb5e..00000000
--- a/libkdegames/highscore/khighscore.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2003 Nicolas Hadacek <hadacek@kde.org>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KHIGHSCORE_H__
-#define __KHIGHSCORE_H__
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <kdemacros.h>
-class KConfig;
-class KFileLock;
-class KRawConfig;
-class KHighscorePrivate;
-
-/**
- * @short Class for managing highscore tables
- *
- * This is the KDE class for saving and reading highscore tables. It offers the
- * possibility for system-wide highscore tables (configure with e.g.
- * --enable-highscore-dir=/var/games) and a theoretically unlimited number of
- * entries.
- *
- * You can specify different "keys" for an entry - just like the KConfig
- * keys. But it will be prefixed with the number of the entry. For example you
- * will probably use something like this to save the name of the player on the
- * top of the list (ie the winner):
- * \code
- * highscore->writeEntry(1, "name", myPlayer->name());
- * \endcode
- * Note that it doesn't really matter if you use "0" or "1" as the first entry
- * of the list as long as your program always uses the same for the first
- * entry. I recommend to use "1", as several convenience methods use this.
- *
- * You can also specify different groups using setHighscoreGroup. Just
- * like the keys mentioned above the groups behave like groups in KConfig
- * but are prefixed with "KHighscore_". The default group is just "KHighscore".
- * You might use this e.g. to create different highscore tables like
- * \code
- * table->setHighscoreGroup("Easy");
- * // write the highscores for level "easy" to the table
- * writeEasyHighscores(table);
- *
- * table->setHighscore("Player_1");
- * // write player specific highscores to the table
- * writePlayerHighscores(table);
- * \endcode
- * As you can see above you can also use this to write the highscores of a
- * single player, so the "best times" of a player. To write highscores for a
- * specific player in a specific level you will have to use a more complex way:
- * \code
- * TQString group = TQString("%1_%2").tqarg(player).tqarg(level);
- * table->setGroup(group);
- * writeHighscore(table, player, level);
- * \endcode
- *
- * Also note that you MUST NOT mark the key or the group for translation! I.e.
- * don't use i18n() for the keys or groups! Here is the code to read the above
- * written entry:
- * \code
- * TQString firstName = highscore->readEntry(0, "name");
- * \endcode
- * Easy, what?
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KHighscore : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- /** @obsolete
- * Constructor. The highscore file is forced to be local to support
- * games using the old behaviour.
- */
- KHighscore(TQObject* parent = 0);
-
- /**
- * Constructor.
- *
- * @param forceLocal if true, the local highscore file is used even
- * when the configuration has been set to use a system-wide file. This
- * is convenient for converting highscores from legacy applications.
- * @param parent parent widget for this widget
- * @since 3.2
- */
- KHighscore(bool forceLocal, TQObject *parent);
-
- /**
- * Read the current state of the highscore file. Remember that when
- * it's not locked for writing, this file can change at any time.
- * (This method is only useful for a system-wide highscore file).
- * @since 3.2
- */
- void readCurrentConfig();
-
- /** @since 3.2
- * This method open the system-wide highscore file using the effective
- * group id of the game executable (which should be "games"). The
- * effective group id is completely dropped afterwards.
- *
- * Note: this method should be called in main() before creating a
- * KApplication and doing anything else (KApplication checks that the
- * program is not suid/sgid and will exit the program for security
- * reason if it is the case).
- */
- static void init(const char *appname);
-
- /** @since 3.2
- * Lock the system-wide highscore file for writing (does nothing and
- * return true if the local file is used).
- * You should perform writing without GUI interaction to avoid
- * blocking and don't forget to unlock the file as soon as possible
- * with writeAndUnlock().
- *
- * If the config file cannot be locked,
- * the method waits for 1 second and, if it failed again, displays
- * a message box asking for retry or cancel.
- * @param widget used as the parent of the message box.
- *
- * @return false on error or if the config file is locked by another
- * process. In such case, the config stays read-only.
- */
- bool lockForWriting(TQWidget *widget = 0);
-
- /**
- * Effectively write and unlock the system-wide highscore file
- * (@see lockForWriting).
- * If using a local highscore file, it will sync the config.
- * @since 3.2
- */
- void writeAndUnlock();
-
- /**
- * @return true if the highscore file is locked or if a local
- * file is used.
- * @since 3.2
- */
- bool isLocked() const;
-
- /**
- * Destructor.
- * If necessary, write and unlock the highscore file.
- */
- ~KHighscore();
-
- /**
- * @param entry The number of the entry / the placing of the player
- * @param key A key for this entry. E.g. "name" for the name of the
- * player. Nearly the same as the usual keys in KConfig - but they
- * are prefixed with the entry number
- * @param value The value of this entry
- **/
- void writeEntry(int entry, const TQString& key, const TQString& value);
-
- /**
- * This is an overloaded member function, provided for convenience.
- * It differs from the above function only in what argument(s) it accepts.
- **/
- void writeEntry(int entry, const TQString& key, int value);
-
- /**
- * This is an overloaded member function, provided for convenience.
- * It differs from the above function only in what argument(s) it accepts.
- * See KConfigBase documentation for allowed TQVariant::Type.
- **/
- void writeEntry(int entry, const TQString& key, const TQVariant &value);
-
- /**
- * Reads an entry from the highscore table.
- * @param entry The number of the entry / the placing to be read
- * @param key The key of the entry. E.g. "name" for the name of the
- * player. Nearly the same as the usual keys in KConfig - but they
- * are prefixed with the entry number
- * @param pDefault This will be used as default value if the key+pair
- * entry can't be found.
- * @return The value of this entry+key pair or pDefault if the entry+key
- * pair doesn't exist
- **/
- TQString readEntry(int entry, const TQString& key, const TQString& pDefault = TQString()) const;
-
- /**
- * Read a numeric value.
- * @param entry The number of the entry / the placing to be read
- * @param key The key of the entry. E.g. "name" for the name of the
- * player. Nearly the same as the usual keys in KConfig - but they
- * are prefixed with the entry number
- * @param pDefault This will be used as default value if the key+pair
- * entry can't be found.
- * @return The value of this entry+key pair or pDefault if the entry+key
- * pair doesn't exist
- **/
- int readNumEntry(int entry, const TQString& key, int pDefault = -1) const;
-
- /**
- * Read a TQVariant entry.
- * See KConfigBase documentation for allowed TQVariant::Type.
- *
- * @return the value of this entry+key pair or pDefault if the entry+key
- * pair doesn't exist or
- */
- TQVariant readPropertyEntry(int entry, const TQString &key, const TQVariant &pDefault) const;
-
- /**
- * @return True if the highscore table conatins the entry/key pair,
- * otherwise false
- **/
- bool hasEntry(int entry, const TQString& key) const;
-
- /**
- * Reads a list of entries from the highscore table starting at 1 until
- * lastEntry. If an entry between those numbers doesn't exist the
- * function aborts reading even if after the missing entry is an
- * existing one. The first entry of the list is the first placing, the
- * last on is the last placing.
- * @return A list of the entries of this key. You could also call
- * readEntry(i, key) where i is from 1 to 20. Note that this function
- * depends on "1" as the first entry!
- * @param key The key of the entry. E.g. "name" for the name of the
- * player. Nearly the same as the usual keys in KConfig - but they
- * are prefixed with the entry number
- * @param lastEntry the last entry which will be includes into the list.
- * 1 will include a list with maximal 1 entry - 20 a list with maximal
- * 20 entries. If lastEntry is <= 0 then rading is only stopped when when an
- * entry does not exist.
- **/
- TQStringList readList(const TQString& key, int lastEntry = 20) const;
-
- /**
- * Writes a list of entries to the highscore table.
- *
- * The first entry is prefixed with "1". Using this method is a short
- * way of calling writeEntry(i, key, list[i]) from i = 1 to
- * list.count()
- * @param key A key for the entry. E.g. "name" for the name of the
- * player. Nearly the same as the usual keys in KConfig - but they
- * are prefixed with the entry number
- * @param list The list of values
- **/
- void writeList(const TQString& key, const TQStringList& list);
-
- /**
- * @return Whether a highscore table exists. You can use this
- * function to indicate whether KHighscore created a highscore table
- * before and - if not - read your old (non-KHighscore) table instead.
- * This way you can safely read an old table and save it using
- * KHighscore without losing any data
- **/
- bool hasTable() const;
-
- /** @obsolete
- * This does the same as writeAndUnlock().
- */
- void sync();
-
- /**
- * Set the new highscore group. The group is being prefixed with
- * "KHighscore_" in the table.
- * @param groupname The new groupname. E.g. use "easy" for the easy
- * level of your game. If you use TQString() (the default) the
- * default group is used.
- **/
- void setHighscoreGroup(const TQString& groupname = TQString());
-
- /**
- * @return The currently used group. This doesn't contain the prefix
- * ("KHighscore_") but the same as setHighscoreGroup uses. The
- * default is TQString()
- **/
- const TQString& highscoreGroup() const;
-
-protected:
- /**
- * @return A groupname to be used in KConfig. Used internally to
- * prefix the value from highscoreGroup() with "KHighscore_"
- **/
- TQString group() const;
-
- /**
- * @return A pointer to the KConfig object to be used. This is
- * either kapp->config() (default) or a KSimpleConfig object for
- * a system-wide highscore file.
- **/
- KConfig* config() const;
-
- void init(bool forceLocal);
-
-private:
- KHighscorePrivate* d;
-
- static KFileLock *_lock; // lock on system-wide highscore file
- static KRawConfig *_config; // config for system-wide highscore file
-};
-
-#endif
diff --git a/libkdegames/highscore/kscoredialog.cpp b/libkdegames/highscore/kscoredialog.cpp
deleted file mode 100644
index e799883b..00000000
--- a/libkdegames/highscore/kscoredialog.cpp
+++ /dev/null
@@ -1,411 +0,0 @@
-/****************************************************************
-Copyright (c) 1998 Sandro Sigala <ssigala@globalnet.it>.
-Copyright (c) 2001 Waldo Bastian <bastian@kde.org>
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of the author not be used in
-advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-The author disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness. In no event shall the author be liable for any
-special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
-****************************************************************/
-
-#include "config.h"
-
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqlineedit.h>
-#include <tqwidgetstack.h>
-#include <tqtimer.h>
-#include <tqevent.h>
-#include <tqptrvector.h>
-
-#include <kapplication.h>
-#include <kconfig.h>
-#include <klocale.h>
-#include <kseparator.h>
-
-#include "kscoredialog.h"
-
-class KScoreDialog::KScoreDialogPrivate
-{
-public:
- TQPtrList<FieldInfo> scores;
- TQWidget *page;
- TQGridLayout *tqlayout;
- TQLineEdit *edit;
- TQPtrVector<TQWidgetStack> stack;
- TQPtrVector<TQLabel> labels;
- TQLabel *commentLabel;
- TQString comment;
- int fields;
- int newName;
- int latest;
- int nrCols;
- bool loaded;
- TQString configGroup;
-
- TQMap<int, int> col;
- TQMap<int, TQString> header;
- TQMap<int, TQString> key;
- TQString player;
-};
-
-
-KScoreDialog::KScoreDialog(int fields, TQWidget *parent, const char *oname)
- : KDialogBase(parent, oname, true, i18n("High Scores"), Ok, Ok, true)
-{
- d = new KScoreDialogPrivate();
- d->edit = 0;
- d->fields = fields;
- d->newName = -1;
- d->latest = -1;
- d->loaded = false;
- d->nrCols = 0;
- d->configGroup = "High Score";
-
- d->scores.setAutoDelete(true);
- d->header[Name] = i18n("Name");
- d->key[Name] = "Name";
-
- d->header[Date] = i18n("Date");
- d->key[Date] = "Date";
-
- d->header[Level] = i18n("Level");
- d->key[Level] = "Level";
-
- d->header[Score] = i18n("Score");
- d->key[Score] = "Score";
- d->page = makeMainWidget();
-
- connect(this, TQT_SIGNAL(okClicked()), TQT_SLOT(slotGotName()));
-}
-
-KScoreDialog::~KScoreDialog()
-{
- delete d;
-}
-
-void KScoreDialog::setConfigGroup(const TQString &group)
-{
- d->configGroup = group;
- d->loaded = false;
-}
-
-void KScoreDialog::setComment(const TQString &comment)
-{
- d->comment = comment;
-}
-
-void KScoreDialog::addField(int field, const TQString &header, const TQString &key)
-{
- d->fields |= field;
- d->header[field] = header;
- d->key[field] = key;
-}
-
-void KScoreDialog::setupDialog()
-{
- d->nrCols = 1;
-
- for(int field = 1; field < d->fields; field = field * 2)
- {
- if (d->fields & field)
- d->col[field] = d->nrCols++;
- }
-
- d->tqlayout = new TQGridLayout(d->page, 15, d->nrCols, marginHint() + 20, spacingHint());
- d->tqlayout->addRowSpacing(4, 15);
-
- d->commentLabel = new TQLabel(d->page);
- d->commentLabel->tqsetAlignment(AlignVCenter | AlignHCenter);
- d->tqlayout->addMultiCellWidget(d->commentLabel, 1, 1, 0, d->nrCols-1);
-
- TQFont bold = font();
- bold.setBold(true);
-
- TQLabel *label;
- d->tqlayout->addColSpacing(0, 50);
- label = new TQLabel(i18n("Rank"), d->page);
- d->tqlayout->addWidget(label, 3, 0);
- label->setFont(bold);
-
- for(int field = 1; field < d->fields; field = field * 2)
- {
- if (d->fields & field)
- {
- d->tqlayout->addColSpacing(d->col[field], 50);
-
- label = new TQLabel(d->header[field], d->page);
- d->tqlayout->addWidget(label, 3, d->col[field], field <= Name ? AlignLeft : AlignRight);
- label->setFont(bold);
- }
- }
-
- KSeparator *sep = new KSeparator(Qt::Horizontal, d->page);
- d->tqlayout->addMultiCellWidget(sep, 4, 4, 0, d->nrCols-1);
-
- d->labels.resize(d->nrCols * 10);
- d->stack.resize(10);
-
- TQString num;
- for (int i = 1; i <= 10; ++i) {
- TQLabel *label;
- num.setNum(i);
- label = new TQLabel(i18n("#%1").tqarg(num), d->page);
- d->labels.insert((i-1)*d->nrCols + 0, label);
- d->tqlayout->addWidget(label, i+4, 0);
- if (d->fields & Name)
- {
- TQWidgetStack *stack = new TQWidgetStack(d->page);
- d->stack.insert(i-1, stack);
- d->tqlayout->addWidget(stack, i+4, d->col[Name]);
- label = new TQLabel(d->page);
- d->labels.insert((i-1)*d->nrCols + d->col[Name], label);
- stack->addWidget(label);
- stack->raiseWidget(label);
- }
- for(int field = Name * 2; field < d->fields; field = field * 2)
- {
- if (d->fields & field)
- {
- label = new TQLabel(d->page);
- d->labels.insert((i-1)*d->nrCols + d->col[field], label);
- d->tqlayout->addWidget(label, i+4, d->col[field], AlignRight);
- }
- }
- }
-}
-
-void KScoreDialog::aboutToShow()
-{
- if (!d->loaded)
- loadScores();
-
- if (!d->nrCols)
- setupDialog();
-
- d->commentLabel->setText(d->comment);
- if (d->comment.isEmpty())
- {
- d->commentLabel->setMinimumSize(TQSize(1,1));
- d->commentLabel->hide();
- d->tqlayout->addRowSpacing(0, -15);
- d->tqlayout->addRowSpacing(2, -15);
- }
- else
- {
- d->commentLabel->setMinimumSize(d->commentLabel->tqsizeHint());
- d->commentLabel->show();
- d->tqlayout->addRowSpacing(0, -10);
- d->tqlayout->addRowSpacing(2, 10);
- }
- d->comment = TQString();
-
- TQFont normal = font();
- TQFont bold = normal;
- bold.setBold(true);
-
- TQString num;
- for (int i = 1; i <= 10; ++i) {
- TQLabel *label;
- num.setNum(i);
- FieldInfo *score = d->scores.at(i-1);
- label = d->labels[(i-1)*d->nrCols + 0];
- if (i == d->latest)
- label->setFont(bold);
- else
- label->setFont(normal);
-
- if (d->fields & Name)
- {
- if (d->newName == i)
- {
- TQWidgetStack *stack = d->stack[i-1];
- d->edit = new TQLineEdit(d->player, stack);
- d->edit->setMinimumWidth(40);
- stack->addWidget(d->edit);
- stack->raiseWidget(d->edit);
- d->edit->setFocus();
- connect(d->edit, TQT_SIGNAL(returnPressed()),
- this, TQT_SLOT(slotGotReturn()));
- }
- else
- {
- label = d->labels[(i-1)*d->nrCols + d->col[Name]];
- if (i == d->latest)
- label->setFont(bold);
- else
- label->setFont(normal);
- label->setText((*score)[Name]);
- }
-
- }
- for(int field = Name * 2; field < d->fields; field = field * 2)
- {
- if (d->fields & field)
- {
- label = d->labels[(i-1)*d->nrCols + d->col[field]];
- if (i == d->latest)
- label->setFont(bold);
- else
- label->setFont(normal);
- label->setText((*score)[field]);
- }
- }
- }
- d->latest = -1;
- setFixedSize(tqminimumSizeHint());
-}
-
-void KScoreDialog::loadScores()
-{
- TQString key, value;
- d->loaded = true;
- d->scores.clear();
- KConfigGroup config(kapp->config(), d->configGroup.utf8());
-
- d->player = config.readEntry("LastPlayer");
-
- TQString num;
- for (int i = 1; i <= 10; ++i) {
- num.setNum(i);
- FieldInfo *score = new FieldInfo();
- for(int field = 1; field < d->fields; field = field * 2)
- {
- if (d->fields & field)
- {
- key = "Pos" + num + d->key[field];
- (*score)[field] = config.readEntry(key, "-");
- }
- }
- d->scores.append(score);
- }
-}
-
-void KScoreDialog::saveScores()
-{
- TQString key, value;
- KConfigGroup config(kapp->config(), d->configGroup.utf8());
-
- config.writeEntry("LastPlayer", d->player);
-
- TQString num;
- for (int i = 1; i <= 10; ++i) {
- num.setNum(i);
- FieldInfo *score = d->scores.at(i-1);
- for(int field = 1; field < d->fields; field = field * 2)
- {
- if (d->fields & field)
- {
- key = "Pos" + num + d->key[field];
- config.writeEntry(key, (*score)[field]);
- }
- }
- }
- kapp->config()->sync();
-}
-
-int KScoreDialog::addScore(int newScore, const FieldInfo &newInfo, bool askName)
-{
- return addScore(newScore, newInfo, askName, false);
-}
-
-int KScoreDialog::addScore(int newScore, const FieldInfo &newInfo, bool askName, bool lessIsMore)
-{
- if (!d->loaded)
- loadScores();
- FieldInfo *score = d->scores.first();
- int i = 1;
- for(; score; score = d->scores.next(), i++)
- {
- bool ok;
- int num_score = (*score)[Score].toLong(&ok);
- if (lessIsMore && !ok)
- num_score = 1 << 30;
- if (((newScore > num_score) && !lessIsMore) ||
- ((newScore < num_score) && lessIsMore))
- {
- score = new FieldInfo(newInfo);
- (*score)[Score].setNum(newScore);
- d->scores.insert(i-1, score);
- d->scores.remove(10);
- d->latest = i;
- if (askName)
- d->newName = i;
- else
- saveScores();
- if (i == 1)
- d->comment = i18n("Excellent!\nYou have a new high score!");
- else
- d->comment = i18n("Well done!\nYou made it to the high score list!");
- return i;
- }
- }
- return 0;
-}
-
-void KScoreDialog::show()
-{
- aboutToShow();
- KDialogBase::show();
-}
-
-void KScoreDialog::slotGotReturn()
-{
- TQTimer::singleShot(0, this, TQT_SLOT(slotGotName()));
-}
-
-void KScoreDialog::slotGotName()
-{
- if (d->newName == -1) return;
-
- d->player = d->edit->text();
-
- (*d->scores.at(d->newName-1))[Name] = d->player;
- saveScores();
-
- TQFont bold = font();
- bold.setBold(true);
-
- TQLabel *label = d->labels[(d->newName-1)*d->nrCols + d->col[Name]];
- label->setFont(bold);
- label->setText(d->player);
- d->stack[(d->newName-1)]->raiseWidget(label);
- delete d->edit;
- d->edit = 0;
- d->newName = -1;
-}
-
-int KScoreDialog::highScore()
-{
- if (!d->loaded)
- loadScores();
-
- return (*d->scores.first())[Score].toInt();
-}
-
-void KScoreDialog::keyPressEvent( TQKeyEvent *ev)
-{
- if ((d->newName != -1) && (ev->key() == Key_Return))
- {
- ev->ignore();
- return;
- }
- KDialogBase::keyPressEvent(ev);
-}
-
-
-#include "kscoredialog.moc"
diff --git a/libkdegames/highscore/kscoredialog.h b/libkdegames/highscore/kscoredialog.h
deleted file mode 100644
index 99a9f70b..00000000
--- a/libkdegames/highscore/kscoredialog.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************
-Copyright (c) 1998 Sandro Sigala <ssigala@globalnet.it>.
-Copyright (c) 2001 Waldo Bastian <bastian@kde.org>
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software
-and its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appear in all
-copies and that both that the copyright notice and this
-permission notice and warranty disclaimer appear in supporting
-documentation, and that the name of the author not be used in
-advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-The author disclaim all warranties with regard to this
-software, including all implied warranties of merchantability
-and fitness. In no event shall the author be liable for any
-special, indirect or consequential damages or any damages
-whatsoever resulting from loss of use, data or profits, whether
-in an action of contract, negligence or other tortious action,
-arising out of or in connection with the use or performance of
-this software.
-****************************************************************/
-
-#ifndef KSCOREDIALOG_H
-#define KSCOREDIALOG_H
-
-#include <tqmap.h>
-#include <tqptrlist.h>
-
-#include <kdialogbase.h>
-#include <kdemacros.h>
-class TQGridLayout;
-class TQLineEdit;
-class TQWidgetStack;
-
-/**
- * A simple high score dialog.
- */
-class KDE_EXPORT KScoreDialog : public KDialogBase {
- Q_OBJECT
- TQ_OBJECT
-
-public:
- enum Fields { Name = 1 << 0,
- Level = 1 << 1,
-
- Custom1 = 1 << 10,
- Custom2 = 1 << 11,
- Custom3 = 1 << 12,
-
- Date = 1 << 27,
- Time = 1 << 28,
- Score = 1 << 29 };
-
- typedef TQMap<int, TQString> FieldInfo;
-
- /**
- * @param fields Which fields should be listed.
- * @param parent passed to parent TQWidget constructor
- * @param name passed to parent TQWidget constructor
- */
- KScoreDialog(int fields, TQWidget *parent=0, const char *name=0);
-
- ~KScoreDialog();
-
- /**
- * @param group to use for reading/writing highscores from/to. By default
- * the class will use "High Score"
- */
- void setConfigGroup(const TQString &group);
-
- /**
- * @param comment to add when showing high-scores.
- * The comment is only used once.
- */
- void setComment(const TQString &comment);
-
- /**
- * Define an extra FieldInfo entry.
- * @param field Id of this field
- * @param header Header shown in the dialog for this field
- * @param key used to store this field with.
- */
- void addField(int field, const TQString &header, const TQString &key);
-
- /**
- * Adds a new score to the list.
- *
- * @param newScore the score of this game.
- * @param newInfo additional info about the score.
- * @param askName Whether to prompt for the players name.
- * @param lessIsMore If true, the lowest score is the best score.
- *
- * @returns The highscore position if the score was good enough to
- * make it into the list (1 being topscore) or 0 otherwise.
- */
- int addScore(int newScore, const FieldInfo &newInfo, bool askName, bool lessIsMore);
- int addScore(int newScore, const FieldInfo &newInfo, bool askName=true);
-
- /**
- * Returns the current best score.
- */
- int highScore();
-
- virtual void show();
-
-private slots:
- void slotGotReturn();
- void slotGotName();
-
-private:
- /* read scores */
- void loadScores();
- void saveScores();
-
- void aboutToShow();
- void setupDialog();
- void keyPressEvent( TQKeyEvent *ev);
-
-private:
- class KScoreDialogPrivate;
- KScoreDialogPrivate *d;
-};
-
-#endif // !KSCOREDIALOG_H
diff --git a/libkdegames/kcanvasrootpixmap.cpp b/libkdegames/kcanvasrootpixmap.cpp
deleted file mode 100644
index 20440458..00000000
--- a/libkdegames/kcanvasrootpixmap.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kcanvasrootpixmap.h"
-
-#include <tqcanvas.h>
-
-
-KCanvasRootPixmap::KCanvasRootPixmap(TQCanvasView *view, const char *name)
- : KRootPixmap(view, name), _view(view)
-{
- setCustomPainting(true);
- connect(this, TQT_SIGNAL(backgroundUpdated(const TQPixmap &)),
- TQT_SLOT(backgroundUpdatedSlot(const TQPixmap &)));
-}
-
-void KCanvasRootPixmap::backgroundUpdatedSlot(const TQPixmap &pixmap)
-{
- if ( _view && _view->canvas() )
- _view->canvas()->tqsetBackgroundPixmap(pixmap);
-}
-
-#include "kcanvasrootpixmap.moc"
diff --git a/libkdegames/kcanvasrootpixmap.h b/libkdegames/kcanvasrootpixmap.h
deleted file mode 100644
index 91dfa8bd..00000000
--- a/libkdegames/kcanvasrootpixmap.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef KCANVASROOTPIXMAP_H
-#define KCANVASROOTPIXMAP_H
-
-#include <krootpixmap.h>
-#include <kdemacros.h>
-
-class TQCanvasView;
-
-/**
- * Implement KRootPixmap for a TQCanvasView.
- *
- * The pixmap will be set as the background of the
- * TQCanvas associated with the view :
- * <ul>
- * <li>for correct positioning of the background pixmap, the given
- * TQCanvasView should be positioned at the origin of the canvas.</li>
- * <li>no other view of the same canvas should use KCanvasRootPixmap.</li>
- * <li>other views of the canvas will have the same background pixmap.</li>
- * </ul>
- */
-class KDE_EXPORT KCanvasRootPixmap : public KRootPixmap
-{
- Q_OBJECT
- TQ_OBJECT
-
- public:
- /**
- * Constructor.
- */
- KCanvasRootPixmap(TQCanvasView *view, const char *name = 0);
-
- private slots:
- void backgroundUpdatedSlot(const TQPixmap &);
-
- private:
- TQCanvasView *_view;
-
- class KCanvasRootPixmapPrivate;
- KCanvasRootPixmapPrivate *d;
-};
-
-#endif
-
diff --git a/libkdegames/kcarddialog.cpp b/libkdegames/kcarddialog.cpp
deleted file mode 100644
index fc73de22..00000000
--- a/libkdegames/kcarddialog.cpp
+++ /dev/null
@@ -1,808 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2000 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include <stdio.h>
-#include <assert.h>
-
-#include <tqgroupbox.h>
-#include <tqlabel.h>
-#include <tqcheckbox.h>
-#include <tqlayout.h>
-#include <tqtooltip.h>
-#include <tqslider.h>
-#include <tqwmatrix.h>
-
-#include <kapplication.h>
-#include <klocale.h>
-#include <kstandarddirs.h>
-#include <kiconview.h>
-#include <ksimpleconfig.h>
-
-#include "kcarddialog.h"
-#include <tqpushbutton.h>
-#include <kdebug.h>
-
-#define KCARD_DEFAULTDECK TQString::tqfromLatin1("deck0.png")
-#define KCARD_DEFAULTCARD TQString::tqfromLatin1("11.png")
-#define KCARD_DEFAULTCARDDIR TQString::tqfromLatin1("cards-default/")
-
-// values for the resize slider
-#define SLIDER_MIN 400
-#define SLIDER_MAX 3000
-
-// KConfig entries
-#define CONF_GROUP "KCardDialog"
-#define CONF_RANDOMDECK TQString::tqfromLatin1("RandomDeck")
-#define CONF_DECK TQString::tqfromLatin1("Deck")
-#define CONF_CARDDIR TQString::tqfromLatin1("CardDir")
-#define CONF_RANDOMCARDDIR TQString::tqfromLatin1("RandomCardDir")
-#define CONF_USEGLOBALDECK TQString::tqfromLatin1("GlobalDeck")
-#define CONF_USEGLOBALCARDDIR TQString::tqfromLatin1("GlobalCardDir")
-#define CONF_SCALE TQString::tqfromLatin1("Scale")
-
-#define CONF_GLOBAL_GROUP TQString::tqfromLatin1("KCardDialog Settings")
-#define CONF_GLOBAL_DECK TQString::tqfromLatin1("GlobalDeck")
-#define CONF_GLOBAL_CARDDIR TQString::tqfromLatin1("GlobalCardDir")
-#define CONF_GLOBAL_RANDOMDECK TQString::tqfromLatin1("GlobalRandomDeck")
-#define CONF_GLOBAL_RANDOMCARDDIR TQString::tqfromLatin1("GlobalRandomCardDir")
-
-
-class KCardDialogPrivate
-{
-public:
- KCardDialogPrivate()
- {
- deckLabel = 0;
- cardLabel = 0;
- deckIconView = 0;
- cardIconView = 0;
- randomDeck = 0;
- randomCardDir = 0;
- cPreview = 0;
- scaleSlider = 0;
- globalDeck = 0;
- globalCardDir = 0;
-
- cScale = 1;
- }
-
- TQLabel* deckLabel;
- TQLabel* cardLabel;
- KIconView* deckIconView;
- KIconView* cardIconView;
- TQCheckBox* randomDeck;
- TQCheckBox* randomCardDir;
- TQCheckBox* globalDeck;
- TQCheckBox* globalCardDir;
-
- TQSlider* scaleSlider;
- TQPixmap cPreviewPix;
- TQLabel* cPreview;
-
- TQMap<TQIconViewItem*, TQString> deckMap;
- TQMap<TQIconViewItem*, TQString> cardMap;
- TQMap<TQString, TQString> helpMap;
-
- //set query variables
- KCardDialog::CardFlags cFlags;
- TQString cDeck;
- TQString cCardDir;
- double cScale;
-};
-
-int KCardDialog::getCardDeck(TQString &pDeck, TQString &pCardDir, TQWidget *pParent,
- CardFlags pFlags, bool* pRandomDeck, bool* pRandomCardDir,
- double* pScale, KConfig* pConf)
-{
- KCardDialog dlg(pParent, "dlg", pFlags);
-
- dlg.setDeck(pDeck);
- dlg.setCardDir(pCardDir);
-
- dlg.setupDialog(pScale != 0);
- dlg.loadConfig(pConf);
- dlg.showRandomDeckBox(pRandomDeck != 0);
- dlg.showRandomCardDirBox(pRandomCardDir != 0);
- int result=dlg.exec();
- if (result==TQDialog::Accepted)
- {
- // TODO check for global cards/decks!!!!
- pDeck=dlg.deck();
- pCardDir=dlg.cardDir();
- if (!pCardDir.isNull() && pCardDir.right(1)!=TQString::tqfromLatin1("/"))
- {
- pCardDir+=TQString::tqfromLatin1("/");
- }
- if (pRandomDeck)
- {
- *pRandomDeck = dlg.isRandomDeck();
- }
- if (pRandomCardDir)
- {
- *pRandomCardDir = dlg.isRandomCardDir();
- }
- if (pScale)
- {
- *pScale = dlg.cardScale();
- }
-
- if (dlg.isGlobalDeck())
- {
- kdDebug(11000) << "use global deck" << endl;
- bool random;
- getGlobalDeck(pDeck, random);
- kdDebug(11000) << "use: " << pDeck<< endl;
- if (pRandomDeck)
- {
- *pRandomDeck=random;
- if (random)
- kdDebug(11000) << "use random deck" << endl;
- }
- }
- if (dlg.isGlobalCardDir())
- {
- kdDebug(11000) << "use global carddir" << endl;
- bool random;
- getGlobalCardDir(pCardDir, random);
- kdDebug(11000) << "use: " << pCardDir << endl;
- if (pRandomCardDir)
- {
- *pRandomCardDir=random;
- if (random)
- kdDebug(11000) << "use random carddir" << endl;
- }
- }
- }
- dlg.saveConfig(pConf);
- return result;
-}
-
-void KCardDialog::getConfigCardDeck(KConfig* conf, TQString &pDeck, TQString &pCardDir, double& pScale)
-{
-// TODO check for global cards/decks!!!!
- if (!conf) {
- return;
- }
- TQString origGroup = conf->group();
-
- conf->setGroup(CONF_GROUP);
- if (conf->readBoolEntry(CONF_RANDOMDECK) || !conf->hasKey(CONF_DECK)) {
- pDeck = getRandomDeck();
- } else {
- pDeck = conf->readEntry(CONF_DECK);
- }
- if (conf->readBoolEntry(CONF_RANDOMCARDDIR) || !conf->hasKey(CONF_CARDDIR)) {
- pCardDir = getRandomCardDir();
- } else {
- pCardDir = conf->readPathEntry(CONF_CARDDIR);
- }
- pScale = conf->readDoubleNumEntry(CONF_SCALE, 1.0);
-
- if (conf->readBoolEntry(CONF_USEGLOBALDECK, false)) {
- bool random;
- getGlobalDeck(pCardDir, random);
- if (random || pDeck.isNull() ) {
- pDeck = getRandomDeck();
- }
- }
- if (conf->readBoolEntry(CONF_USEGLOBALCARDDIR, false)) {
- bool random;
- getGlobalCardDir(pCardDir, random);
- if (random || pCardDir.isNull() ) {
- pCardDir = getRandomCardDir();
- }
- }
-
- conf->setGroup(origGroup);
-}
-
-TQString KCardDialog::getDefaultDeck()
-{
- KCardDialog::init();
- return locate("cards", TQString::tqfromLatin1("decks/") + KCARD_DEFAULTDECK);
-}
-
-TQString KCardDialog::getDefaultCardDir()
-{
- KCardDialog::init();
-
- TQString file = KCARD_DEFAULTCARDDIR + KCARD_DEFAULTCARD;
- return KGlobal::dirs()->findResourceDir("cards",file) + KCARD_DEFAULTCARDDIR;
-}
-
-TQString KCardDialog::getCardPath(const TQString &carddir, int index)
-{
- KCardDialog::init();
-
- TQString entry = carddir + TQString::number(index);
- if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".png")))
- return entry + TQString::tqfromLatin1(".png");
-
- // rather theoretical
- if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".xpm")))
- return entry + TQString::tqfromLatin1(".xpm");
-
- return TQString();
-}
-
-const TQString& KCardDialog::deck() const { return d->cDeck; }
-void KCardDialog::setDeck(const TQString& file) { d->cDeck=file; }
-const TQString& KCardDialog::cardDir() const { return d->cCardDir; }
-void KCardDialog::setCardDir(const TQString& dir) { d->cCardDir=dir; }
-KCardDialog::CardFlags KCardDialog::flags() const { return d->cFlags; }
-double KCardDialog::cardScale() const { return d->cScale; }
-bool KCardDialog::isRandomDeck() const
-{ return (d->randomDeck ? d->randomDeck->isChecked() : false); }
-bool KCardDialog::isRandomCardDir() const
-{ return (d->randomCardDir ? d->randomCardDir->isChecked() : false); }
-bool KCardDialog::isGlobalDeck() const
-{ return (d->globalDeck ? d->globalDeck->isChecked() : false); }
-bool KCardDialog::isGlobalCardDir() const
-{ return (d->globalCardDir ? d->globalCardDir->isChecked() : false); }
-
-void KCardDialog::setupDialog(bool showResizeBox)
-{
- TQHBoxLayout* topLayout = new TQHBoxLayout(plainPage(), spacingHint());
- TQVBoxLayout* cardLayout = new TQVBoxLayout(topLayout);
- TQString path, file;
- TQWMatrix m;
- m.scale(0.8,0.8);
-
- setInitialSize(TQSize(600,400));
-
- if (! (flags() & NoDeck))
- {
- TQHBoxLayout* tqlayout = new TQHBoxLayout(cardLayout);
-
- // Deck iconview
- TQGroupBox* grp1 = new TQGroupBox(1,Qt::Horizontal, i18n("Choose Backside"), plainPage());
- tqlayout->addWidget(grp1);
-
- d->deckIconView = new KIconView(grp1,"decks");
- d->deckIconView->setSpacing(8);
- /*
- deckIconView->setGridX(-1);
- deckIconView->setGridY(50);
- */
- d->deckIconView->setGridX(82);
- d->deckIconView->setGridY(106);
- d->deckIconView->setSelectionMode(TQIconView::Single);
- d->deckIconView->setResizeMode(TQIconView::Adjust);
- d->deckIconView->setMinimumWidth(360);
- d->deckIconView->setMinimumHeight(170);
- d->deckIconView->setWordWrapIconText(false);
- d->deckIconView->showToolTips();
-
- // deck select
- TQVBoxLayout* l = new TQVBoxLayout(tqlayout);
- TQGroupBox* grp3 = new TQGroupBox(i18n("Backside"), plainPage());
- grp3->setFixedSize(100, 130);
- l->addWidget(grp3, 0, AlignTop|AlignHCenter);
- d->deckLabel = new TQLabel(grp3);
- d->deckLabel->setText(i18n("empty"));
- d->deckLabel->tqsetAlignment(AlignHCenter|AlignVCenter);
- d->deckLabel->setGeometry(10, 20, 80, 90);
-
- d->randomDeck = new TQCheckBox(plainPage());
- d->randomDeck->setChecked(false);
- connect(d->randomDeck, TQT_SIGNAL(toggled(bool)), this,
- TQT_SLOT(slotRandomDeckToggled(bool)));
- d->randomDeck->setText(i18n("Random backside"));
- l->addWidget(d->randomDeck, 0, AlignTop|AlignHCenter);
-
- d->globalDeck = new TQCheckBox(plainPage());
- d->globalDeck->setChecked(false);
- d->globalDeck->setText(i18n("Use global backside"));
- l->addWidget(d->globalDeck, 0, AlignTop|AlignHCenter);
-
- TQPushButton* b = new TQPushButton(i18n("Make Backside Global"), plainPage());
- connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotSetGlobalDeck()));
- l->addWidget(b, 0, AlignTop|AlignHCenter);
-
- connect(d->deckIconView,TQT_SIGNAL(clicked(TQIconViewItem *)),
- this,TQT_SLOT(slotDeckClicked(TQIconViewItem *)));
- }
-
- if (! (flags() & NoCards))
- {
- // Cards iconview
- TQHBoxLayout* tqlayout = new TQHBoxLayout(cardLayout);
- TQGroupBox* grp2 = new TQGroupBox(1,Qt::Horizontal, i18n("Choose Frontside"), plainPage());
- tqlayout->addWidget(grp2);
-
- d->cardIconView =new KIconView(grp2,"cards");
- /*
- cardIconView->setGridX(36);
- cardIconView->setGridY(50);
- */
- d->cardIconView->setGridX(82);
- d->cardIconView->setGridY(106);
- d->cardIconView->setResizeMode(TQIconView::Adjust);
- d->cardIconView->setMinimumWidth(360);
- d->cardIconView->setMinimumHeight(170);
- d->cardIconView->setWordWrapIconText(false);
- d->cardIconView->showToolTips();
-
- // Card select
- TQVBoxLayout* l = new TQVBoxLayout(tqlayout);
- TQGroupBox* grp4 = new TQGroupBox(i18n("Frontside"), plainPage());
- grp4->setFixedSize(100, 130);
- l->addWidget(grp4, 0, AlignTop|AlignHCenter);
- d->cardLabel = new TQLabel(grp4);
- d->cardLabel->setText(i18n("empty"));
- d->cardLabel->tqsetAlignment(AlignHCenter|AlignVCenter);
- d->cardLabel->setGeometry(10, 20, 80, 90 );
-
- d->randomCardDir = new TQCheckBox(plainPage());
- d->randomCardDir->setChecked(false);
- connect(d->randomCardDir, TQT_SIGNAL(toggled(bool)), this,
- TQT_SLOT(slotRandomCardDirToggled(bool)));
- d->randomCardDir->setText(i18n("Random frontside"));
- l->addWidget(d->randomCardDir, 0, AlignTop|AlignHCenter);
-
- d->globalCardDir = new TQCheckBox(plainPage());
- d->globalCardDir->setChecked(false);
- d->globalCardDir->setText(i18n("Use global frontside"));
- l->addWidget(d->globalCardDir, 0, AlignTop|AlignHCenter);
-
- TQPushButton* b = new TQPushButton(i18n("Make Frontside Global"), plainPage());
- connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotSetGlobalCardDir()));
- l->addWidget(b, 0, AlignTop|AlignHCenter);
-
- connect(d->cardIconView,TQT_SIGNAL(clicked(TQIconViewItem *)),
- this,TQT_SLOT(slotCardClicked(TQIconViewItem *)));
- }
-
- // Insert deck icons
- // First find the default or alternate path
- if (! (flags() & NoDeck))
- {
- insertDeckIcons();
- d->deckIconView->arrangeItemsInGrid();
-
- // Set default icons if given
- if (!deck().isNull())
- {
- file=deck();
- TQPixmap pixmap(file);
- pixmap=pixmap.xForm(m);
- d->deckLabel->setPixmap(pixmap);
- TQToolTip::add(d->deckLabel,d->helpMap[file]);
- }
- }
-
- // Insert card icons
- if (! (flags() & NoCards))
- {
- insertCardIcons();
- d->cardIconView->arrangeItemsInGrid();
-
- // Set default icons if given
- if (!cardDir().isNull())
- {
- file = cardDir() + KCARD_DEFAULTCARD;
- TQPixmap pixmap(file);
- pixmap = pixmap.xForm(m);
- d->cardLabel->setPixmap(pixmap);
- TQToolTip::add(d->cardLabel,d->helpMap[cardDir()]);
- }
- }
-
- // insert resize box
- if (showResizeBox)
- {
- // this part is a little bit...tricky.
- // i'm sure there is a cleaner way but i cannot find it.
- // whenever the pixmap is resized (aka scaled) the box is resized, too. This
- // leads to an always resizing dialog which is *very* ugly. i worked around
- // this by using a TQWidget which is the only child widget of the group box.
- // The other widget are managed inside this TQWidget - a stretch area on the
- // right ensures that the KIconViews are not resized...
-
- // note that the dialog is still resized if you you scale the pixmap very
- // large. This is desired behaviour as i don't want to make the box even
- // larger but i want the complete pixmap to be displayed. the dialog is not
- // resized if you make the pixmap smaller again.
- TQVBoxLayout* tqlayout = new TQVBoxLayout(topLayout);
- TQGroupBox* grp = new TQGroupBox(1,Qt::Horizontal, i18n("Resize Cards"), plainPage());
- tqlayout->setResizeMode(TQLayout::Fixed);
- tqlayout->addWidget(grp);
- TQWidget* box = new TQWidget(grp);
- TQHBoxLayout* hbox = new TQHBoxLayout(box, 0, spacingHint());
- TQVBoxLayout* boxLayout = new TQVBoxLayout(hbox);
- hbox->addStretch(0);
-
- d->scaleSlider = new TQSlider(1, SLIDER_MAX, 1, (-1000+SLIDER_MIN+SLIDER_MAX),Qt::Horizontal, box);
- d->scaleSlider->setMinValue(SLIDER_MIN);
- connect(d->scaleSlider, TQT_SIGNAL(valueChanged(int)), this, TQT_SLOT(slotCardResized(int)));
- boxLayout->addWidget(d->scaleSlider, 0, AlignLeft);
-
- TQPushButton* b = new TQPushButton(i18n("Default Size"), box);
- connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotDefaultSize()));
- boxLayout->addWidget(b, 0, AlignLeft);
-
- TQLabel* l = new TQLabel(i18n("Preview:"), box);
- boxLayout->addWidget(l);
- d->cPreviewPix.load(getDefaultDeck());
- d->cPreview = new TQLabel(box);
- boxLayout->addWidget(d->cPreview, 0, AlignCenter|AlignVCenter);
-
- slotCardResized(d->scaleSlider->value());
- }
-}
-
-void KCardDialog::insertCardIcons()
-{
- TQStringList list = KGlobal::dirs()->findAllResources("cards", "card*/index.desktop", false, true);
- // kdDebug(11000) << "insert " << list.count() << endl;
- if (list.isEmpty())
- return;
-
- // We shrink the icons a little
- //
- TQWMatrix m;
- m.scale(0.8,0.8);
-
- for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
- {
- KSimpleConfig cfg(*it);
- cfg.setGroup(TQString::tqfromLatin1("KDE Backdeck"));
- TQString path = (*it).left((*it).findRev('/') + 1);
- assert(path[path.length() - 1] == '/');
- TQPixmap pixmap(path + cfg.readEntry("Preview", "12c.png"));
-
- if (pixmap.isNull())
- continue;
-
- TQString name=cfg.readEntry("Name", i18n("unnamed"));
- TQIconViewItem *item= new TQIconViewItem(d->cardIconView, name, pixmap);
-
- item->setDragEnabled(false);
- item->setDropEnabled(false);
- item->setRenameEnabled(false);
- item->setSelectable(true);
-
- d->cardMap[item] = path;
- d->helpMap[path] = cfg.readEntry("Comment",name);
- }
-}
-
-void KCardDialog::insertDeckIcons()
-{
- TQStringList list = KGlobal::dirs()->findAllResources("cards", "decks/*.desktop", false, true);
- if (list.isEmpty())
- return;
-
- TQString label;
-
- // We shrink the icons a little
- TQWMatrix m;
- m.scale(0.8,0.8);
-
- for (TQStringList::ConstIterator it = list.begin(); it != list.end(); ++it)
- {
- KSimpleConfig cfg(*it);
- TQPixmap pixmap(getDeckName(*it));
- if (pixmap.isNull())
- continue;
-
- // pixmap=pixmap.xForm(m);
-
- cfg.setGroup(TQString::tqfromLatin1("KDE Cards"));
- TQString name=cfg.readEntry("Name", i18n("unnamed"));
- TQIconViewItem *item= new TQIconViewItem(d->deckIconView,name, pixmap);
-
- item->setDragEnabled(false);
- item->setDropEnabled(false);
- item->setRenameEnabled(false);
-
- d->deckMap[item] = getDeckName(*it);
- d->helpMap[d->deckMap[item]] = cfg.readEntry("Comment",name);
- }
-}
-
-
-KCardDialog::~KCardDialog()
-{
- delete d;
-}
-
-
-// Create the dialog
-KCardDialog::KCardDialog( TQWidget *parent, const char *name, CardFlags mFlags)
- : KDialogBase( Plain, i18n("Carddeck Selection"), Ok|Cancel, Ok, parent, name, true, true)
-{
- KCardDialog::init();
-
- d = new KCardDialogPrivate;
- d->cFlags = mFlags;
-}
-
-void KCardDialog::slotDeckClicked(TQIconViewItem *item)
-{
- if (item && item->pixmap())
- {
- d->deckLabel->setPixmap(* (item->pixmap()));
- TQToolTip::remove( d->deckLabel );
- TQToolTip::add(d->deckLabel,d->helpMap[d->deckMap[item]]);
- setDeck(d->deckMap[item]);
- }
-}
-void KCardDialog::slotCardClicked(TQIconViewItem *item)
-{
- if (item && item->pixmap())
- {
- d->cardLabel->setPixmap(* (item->pixmap()));
- TQString path = d->cardMap[item];
- TQToolTip::remove( d->deckLabel );
- TQToolTip::add(d->cardLabel,d->helpMap[path]);
- setCardDir(path);
- }
-}
-
-TQString KCardDialog::getDeckName(const TQString &desktop)
-{
- TQString entry = desktop.left(desktop.length() - strlen(".desktop"));
- if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".png")))
- return entry + TQString::tqfromLatin1(".png");
-
- // rather theoretical
- if (KStandardDirs::exists(entry + TQString::tqfromLatin1(".xpm")))
- return entry + TQString::tqfromLatin1(".xpm");
- return TQString();
-}
-
-TQString KCardDialog::getRandomDeck()
-{
- KCardDialog::init();
-
- TQStringList list = KGlobal::dirs()->findAllResources("cards", "decks/*.desktop");
- if (list.isEmpty())
- return TQString();
-
- int d = KApplication::random() % list.count();
- return getDeckName(*list.at(d));
-}
-
-TQString KCardDialog::getRandomCardDir()
-{
- KCardDialog::init();
-
- TQStringList list = KGlobal::dirs()->findAllResources("cards", "card*/index.desktop");
- if (list.isEmpty())
- return TQString();
-
- int d = KApplication::random() % list.count();
- TQString entry = *list.at(d);
- return entry.left(entry.length() - strlen("index.desktop"));
-}
-
-void KCardDialog::showRandomDeckBox(bool s)
-{
- if (!d->randomDeck)
- return;
-
- if (s)
- d->randomDeck->show();
- else
- d->randomDeck->hide();
-}
-
-void KCardDialog::showRandomCardDirBox(bool s)
-{
- if (!d->randomCardDir)
- return;
-
- if (s)
- d->randomCardDir->show();
- else
- d->randomCardDir->hide();
-}
-
-void KCardDialog::slotRandomDeckToggled(bool on)
-{
- if (on) {
- d->deckLabel->setText("random");
- setDeck(getRandomDeck());
- } else {
- d->deckLabel->setText("empty");
- setDeck(0);
- }
-}
-
-void KCardDialog::slotRandomCardDirToggled(bool on)
-{
- if (on) {
- d->cardLabel->setText("random");
- setCardDir(getRandomCardDir());
- if (cardDir().length()>0 && cardDir().right(1)!=TQString::tqfromLatin1("/")) {
- setCardDir(cardDir() + TQString::tqfromLatin1("/"));
- }
- } else {
- d->cardLabel->setText("empty");
- setCardDir(0);
- }
-}
-
-void KCardDialog::loadConfig(KConfig* conf)
-{
- if (!conf) {
- return;
- }
-
- TQString origGroup = conf->group();
-
- conf->setGroup(CONF_GROUP);
- if (! (flags() & NoDeck)) {
- if (conf->hasKey(CONF_DECK)) {
- setDeck(conf->readEntry(CONF_DECK));
- }
-
- bool random = conf->readBoolEntry(CONF_RANDOMDECK, false);
- d->randomDeck->setChecked(random);
- slotRandomDeckToggled(random);
-
- if (conf->hasKey(CONF_USEGLOBALDECK) && conf->readBoolEntry(CONF_USEGLOBALDECK)) {
- d->globalDeck->setChecked(true);
- } else {
- d->globalDeck->setChecked(false);
- }
- }
- if (! (flags() & NoCards)) {
- if (conf->hasKey(CONF_CARDDIR)) {
- setCardDir(conf->readPathEntry(CONF_CARDDIR));
- }
-
- bool random = conf->readBoolEntry(CONF_RANDOMCARDDIR, false);
- d->randomCardDir->setChecked(random);
- slotRandomCardDirToggled(random);
-
- if (conf->hasKey(CONF_USEGLOBALCARDDIR) && conf->readBoolEntry(CONF_USEGLOBALCARDDIR)) {
- d->globalCardDir->setChecked(true);
- } else {
- d->globalCardDir->setChecked(false);
- }
- }
-
- d->cScale = conf->readDoubleNumEntry(CONF_SCALE, 1.0);
-
- conf->setGroup(origGroup);
-}
-
-void KCardDialog::slotCardResized(int s)
-{
- if (!d->cPreview) {
- return;
- }
- if (s < SLIDER_MIN || s > SLIDER_MAX) {
- kdError(11000) << "invalid scaling value!" << endl;
- return;
- }
-
- s *= -1;
- s += (SLIDER_MIN + SLIDER_MAX);
-
- TQWMatrix m;
- double scale = (double)1000/s;
- m.scale(scale, scale);
- TQPixmap pix = d->cPreviewPix.xForm(m);
- d->cPreview->setPixmap(pix);
- d->cScale = scale;
-}
-
-void KCardDialog::slotDefaultSize()
-{
- if (!d->scaleSlider) {
- return;
- }
- d->scaleSlider->setValue(-1000 + SLIDER_MIN + SLIDER_MAX);
-}
-
-void KCardDialog::saveConfig(KConfig* conf)
-{
- if (!conf) {
- return;
- }
- TQString origGroup = conf->group();
-
- conf->setGroup(CONF_GROUP);
- if (! (flags() & NoDeck)) {
- conf->writeEntry(CONF_DECK, deck());
- conf->writeEntry(CONF_RANDOMDECK, isRandomDeck());
- conf->writeEntry(CONF_USEGLOBALDECK, d->globalDeck->isChecked());
- }
- if (! (flags() & NoCards)) {
- conf->writePathEntry(CONF_CARDDIR, cardDir());
- conf->writeEntry(CONF_RANDOMCARDDIR, isRandomCardDir());
- conf->writeEntry(CONF_USEGLOBALCARDDIR, d->globalCardDir->isChecked());
- }
- conf->writeEntry(CONF_SCALE, d->cScale);
-
- conf->setGroup(origGroup);
-}
-
-void KCardDialog::slotSetGlobalDeck()
-{
- KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), false);
- conf->setGroup(CONF_GLOBAL_GROUP);
-
- conf->writeEntry(CONF_GLOBAL_DECK, deck());
- conf->writeEntry(CONF_GLOBAL_RANDOMDECK, isRandomDeck());
-
- delete conf;
-}
-
-void KCardDialog::slotSetGlobalCardDir()
-{
- KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), false);
- conf->setGroup(CONF_GLOBAL_GROUP);
-
- conf->writePathEntry(CONF_GLOBAL_CARDDIR, cardDir());
- conf->writeEntry(CONF_GLOBAL_RANDOMCARDDIR, isRandomCardDir());
-
- delete conf;
-}
-
-void KCardDialog::getGlobalDeck(TQString& deck, bool& random)
-{
- KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), true);
- conf->setGroup(CONF_GLOBAL_GROUP);
-
- if (!conf->hasKey(CONF_GLOBAL_DECK) || conf->readBoolEntry(CONF_GLOBAL_RANDOMDECK, false)) {
- deck = getRandomDeck();
- random = true;
- } else {
- deck = conf->readEntry(CONF_GLOBAL_DECK);
- random = conf->readBoolEntry(CONF_GLOBAL_RANDOMDECK, false);
- }
-
- delete conf;
-}
-
-void KCardDialog::getGlobalCardDir(TQString& dir, bool& random)
-{
- KSimpleConfig* conf = new KSimpleConfig(TQString::tqfromLatin1("kdeglobals"), true);
- conf->setGroup(CONF_GLOBAL_GROUP);
-
- if (!conf->hasKey(CONF_GLOBAL_CARDDIR) || conf->readBoolEntry(CONF_GLOBAL_RANDOMCARDDIR, false)) {
- dir = getRandomCardDir();
- random = true;
- } else {
- dir = conf->readPathEntry(CONF_GLOBAL_CARDDIR);
- random = conf->readBoolEntry(CONF_GLOBAL_RANDOMCARDDIR, false);
- }
-
- delete conf;
-}
-
-void KCardDialog::init()
-{
- static bool _inited = false;
- if (_inited)
- return;
- KGlobal::dirs()->addResourceType("cards", KStandardDirs::kde_default("data") + TQString::tqfromLatin1("carddecks/"));
-
- KGlobal::locale()->insertCatalogue("libtdegames");
- _inited = true;
-}
-
-#include "kcarddialog.moc"
diff --git a/libkdegames/kcarddialog.h b/libkdegames/kcarddialog.h
deleted file mode 100644
index c3a0f018..00000000
--- a/libkdegames/kcarddialog.h
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2000 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-#ifndef __KCARDDIALOG_H_
-#define __KCARDDIALOG_H_
-
-#include <tqstring.h>
-#include <kdialogbase.h>
-#include <tqmap.h> // TODO: remove - it is in kcarddialog.cpp now; left here for source compatibility
-
-#include <kdemacros.h>
-class TQIconViewItem;
-
-class KConfig;
-
-class KCardDialogPrivate;
-
-/**
- * @short A carddeck selection dialog for card games.
- *
- * The KCardDialog provides a dialog for interactive carddeck selection.
- * It gives cardgames an easy to use interface to select front and
- * back of the card sets. As card sets the KDE default cardsets are
- * offered as well as used specified ones.
- *
- * In most cases, the simplest
- * use of this class is the static method KCardDialog::getCardDeck,
- * which pops up the dialog, allows the user to select a carddeck, and
- * returns when the dialog is closed. Only if you really need some specific
- * behaviour or if you overwrite the dialog you need all the other access
- * functions.
- *
- * Example:
- *
- * \code
- * TQString deck,card;
- * int result = KCardDialog::getCardDeck(deck,card );
- * if ( result == KCardDialog::Accepted )
- * ...
- * \endcode
- *
- * Here you can see a card dialog in action
- * @image html "kcarddialog.png" KCarddialog
- *
- * KCardDialog::getCardDeck takes a lot of different parameters which are
- * probably very useful. You can e.g. use the parameters randomDeck and
- * randomCardDir to give the end-user the ability to choose a random
- * deck/carddir. You have to save the value of those parameters in your config
- * file - that's why the parameters are needed.
- *
- * You can also provide a KConfig pointer (usually kapp->config()). This
- * pointer is used to store information about the dialog in an own group
- * ("KCardDailog").
- * So you can just ignore the randomCardDir and randomDeck
- * values and call KCardDialog::getConfigCardDeck instead. The only reson
- * for this function is to read a previously written configuration and give you
- * the information about it. This way you don't have to save any configuration
- * on your own - KCardDialog does this for you.
- *
- * Another Parameter for KCardDialog::getCardDeck is scale. This pointer
- * to a double variable contains the scaling factor the user has chosen in the
- * dialog (the scale box won't be shown if you don't provide this parameter).
- * You might want to check out TQPixmap::xFrom which gives you access to
- * scaling. You can e.g. use
- * \code
- * TQWMatrix m;
- * m.scale(s,s);
- * pixmap.xForm(m);
- * \endcode
- * to scale your pixmap.
- *
- * @author Martin Heni <martin@heni-online.de>
- * @version $Id$
- */
-class KDE_EXPORT KCardDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
-
- /**
- * @li @p Both - both are shown
- * @li @p NoDeck - The deck (back) selection is not shown
- * @li @p NoCards - The cards (front) selection is not shown
- */
- enum CardFlags { Both=0, NoDeck=0x01, NoCards=0x02 };
-
- /**
- * Constructs a card deck selection dialog.
- *
- * @param parent The parent widget of the dialog, if any.
- * @param name The name of the dialog.
- * @param flags Specifies whether the dialog is modal or not.
- */
- KCardDialog (TQWidget* parent = NULL,const char* name = NULL,
- CardFlags flags = Both);
- /**
- * Destructs a card deck selection dialog.
- */
- ~KCardDialog();
-
- /**
- * Creates a modal carddeck dialog, lets the user choose a deck,
- * and returns when the dialog is closed.
- *
- * @param deck a reference to the filename used as backside of the
- * cards. It is an absolute path and can directly be loaded as
- * pixmap.
- *
- * @param carddir a reference to the directory name used as front of the
- * cards. The directory contains the card images as 1.png to 52.png
- *
- * @param parent an optional pointer to the parent window of the dialog
- *
- * @param flags what to show
- *
- * @param randomDeck if this pointer is non-zero, *ok is set to TRUE if
- * the user wants a random deck otherwise to FALSE. Use this in the
- * config file of your game to load a random deck on startup.
- * See @ref getRandomDeck()
- *
- * @param randomCardDir if this pointer is non-zero, *ok is set to TRUE if
- * the user wants a random card otherwise to FALSE.
- * Use this in the config file of your game to load a random card
- * foregrounds on startup.
- * See @ref getRandomCardDir()
- *
- * @param scale If non-zero a box is shown which provides the possibility to
- * change the size of the cards. The desired scaling factor is returned to the
- * game in this variable.
- *
- * @param conf If non-zero KCardDialog reads the initial settings for
- * this dialog from the applications config file and stores them there
- * when the dialog is closed. You can just use getConfigCardDeck
- * to get the deck/carddir the user selected before. Note that the
- * parameters randomDeck and randomCardDir overwrite the initial settings from the
- * config file.
- *
- * @return TQDialog::result().
- */
- static int getCardDeck(TQString &deck,TQString &carddir, TQWidget *parent=0,
- CardFlags flags=Both, bool* randomDeck=0,
- bool* randomCardDir=0, double* scale=0, KConfig* conf=0);
-
- /**
- * Read the configuration from the applications rc file and put the
- * previously chosen deck/frontside in the parameter deck and carddir.
- *
- * You probably want to use this function on startup of your program so that
- * the user gets exactly the card/frontside he/she chose before. Note that
- * you don't have to care whether the user wants to get a random carddeck or
- * not as this function takes care of this.
- * @param conf The config file to read from
- * @param deck This will contain the chosen deck from the config file (or a
- * random deck if this is desired according to the config)
- * @param cardDir This will contain the chosen cardDir from the config file (or a
- * random cardDir if this is desired according to the config)
- * @param scale The scaling factor (usually 1)
- **/
- static void getConfigCardDeck(KConfig* conf, TQString& deck, TQString& cardDir, double& scale);
-
- /**
- * Returns the default path to the card deck backsides. You want
- * to use this usually before the user used the card dialog the first
- * time to get a default deck. You can assume that
- * \code
- * getDefaultDeckPath()
- * \endcode
- * is a valid deck.
- *
- * @return The default path
- */
- static TQString getDefaultDeck();
-
- /**
- * Returns the default path to the card frontsides. You want
- * to use this usually before the user used the card dialog the first
- * time to get an default deck. You can assume that
- * \code
- * getCardPath(getDefaultCardPath(), *)
- * \endcode
- * are valid cards for * from 1 to 52.
- *
- * @return returns the path to the card directory
- */
- static TQString getDefaultCardDir();
-
- /**
- * Returns the path to the card frontside specified in dir carddir
- *
- * @param index the card to open
- * @param carddir The carddir which's path shall be searched for
- * @return returns the path to the card
- */
- static TQString getCardPath(const TQString &carddir, int index);
-
- /**
- * Returns a random deck in deckPath()
- * @return A random deck
- **/
- static TQString getRandomDeck();
-
- /**
- * Returns a random directory of cards
- * @return A random card dir
- **/
- static TQString getRandomCardDir();
-
- /**
- * Show or hides the "random backside" checkbox
- * @param s Shows the checkbox if true otherwise hides it
- **/
- void showRandomDeckBox(bool s);
-
- /**
- * Show or hides the "random foreside" checkbox
- * @param s Shows the checkbox if true otherwise hides it
- **/
- void showRandomCardDirBox(bool s);
-
- /**
- * Returns the chosen deck, which is a valid path to a imagefile.
- *
- * @return The deck
- */
- const TQString& deck() const;
-
- /**
- * Sets the default deck.
- * @param file The full path to an image file
- */
- void setDeck(const TQString& file);
-
- /**
- * @return The chosen card directory
- */
- const TQString& cardDir() const;
-
- /**
- * Sets the default card directory.
- * @param dir The full path to an card directory
- */
- void setCardDir(const TQString& dir);
-
- /**
- * @return the flags set to the dialog
- */
- CardFlags flags() const;
-
- /**
- * Creates the default widgets in the dialog. Must be called after
- * all flags are set. This is only needed if you do NOT use the
- * getCardDeck static function which provides all calls for you.
- */
- void setupDialog(bool showResizeBox = false);
-
- /**
- * @return TRUE if the selected deck is a random deck (i.e. the user checked
- * the random checkbox) otherwise FALSE
- **/
- bool isRandomDeck() const;
-
- /**
- * @return TRUE if the selected carddir is a random dir (i.e. the user
- * checked the random checkbox) otherwise FALSE
- **/
- bool isRandomCardDir() const;
-
- /**
- * @return TRUE if the global checkbox was selected
- **/
- bool isGlobalDeck() const;
-
- /**
- * @return TRUE if the global checkbox was selected
- **/
- bool isGlobalCardDir() const;
-
- /**
- * @return The scaling factor of the card pixmap
- **/
- double cardScale() const;
-
- /**
- * Load the default settings into the dialog (e.g. whether the "use random
- * deck" checkbox is checked or not).
- **/
- void loadConfig(KConfig* conf);
-
- /**
- * Saves the KCardDialog config into a config file. This should be the
- * applications config file - KCardDialog creates an own group
- * ("KCardDialog"). These settings are used by @ref loadConfig and @ref
- * getConfigCardDeck.
- **/
- void saveConfig(KConfig* conf);
-
-
-protected:
- void insertCardIcons();
- void insertDeckIcons();
-
- static void getGlobalDeck(TQString& cardDir, bool& random);
- static void getGlobalCardDir(TQString& deck, bool& random);
-
- static TQString getDeckName(const TQString& desktop);
-
- /**
- * @return the groupname used by functions like @ref saveConfig and @ref
- * loadConfig.
- **/
- static TQString group();
-
-protected slots:
- void slotDeckClicked(TQIconViewItem *);
- void slotCardClicked(TQIconViewItem *);
- void slotRandomCardDirToggled(bool on);
- void slotRandomDeckToggled(bool on);
- void slotCardResized(int);
- void slotDefaultSize();
- void slotSetGlobalDeck();
- void slotSetGlobalCardDir();
-
-private:
- static void init();
-
- KCardDialogPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kcarddialog.png b/libkdegames/kcarddialog.png
deleted file mode 100644
index 3446c461..00000000
--- a/libkdegames/kcarddialog.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/kchat.cpp b/libkdegames/kchat.cpp
deleted file mode 100644
index 2a9c3913..00000000
--- a/libkdegames/kchat.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <klocale.h>
-#include <kdebug.h>
-
-#include "kchat.h"
-
-class KChatPrivate
-{
-public:
- KChatPrivate()
- {
- }
-
- bool mAutoAddMessages;
-
- TQMap<int, TQString> mPlayerMap;
- int mPlayerId;
- int mFromId;
-};
-
-KChat::KChat(TQWidget* parent, bool twoPlayerGame) : KChatBase(parent, twoPlayerGame)
-{
- init();
-}
-
-KChat::~KChat()
-{
- kdDebug(11000) << "DESTRUCT KChat " << this << endl;
- delete d;
-}
-
-void KChat::init()
-{
- kdDebug(11001) << "INIT KChat " << this << endl;
- d = new KChatPrivate;
- d->mAutoAddMessages = true;
- d->mPlayerId = 1;
- d->mFromId = 1;
-}
-
-void KChat::setFromNickname(const TQString& n)
-{ d->mFromId = addPlayer(n); }
-const TQString& KChat::fromName() const
-{ return player(fromId()); }
-void KChat::setAutoAddMessages(bool add)
-{ d->mAutoAddMessages = add; }
-bool KChat::autoAddMessages() const
-{ return d->mAutoAddMessages; }
-int KChat::uniqueId()
-{ return d->mPlayerId++; }
-int KChat::fromId() const
-{ return d->mFromId; }
-const TQString& KChat::player(int id) const
-{ return d->mPlayerMap[id]; }
-
-void KChat::returnPressed(const TQString& text)
-{
- int id = fromId();
- if (id < 0) {
- // don't return - just display "unknown" as name
- kdWarning(11000) << "KChat: no fromNickname has been set!" << endl;
- }
- emit signalSendMessage(id, text);
- if (autoAddMessages()) {
- TQString p = player(id);
- if (p.isNull()) {
- p = i18n("Unknown");
- }
- kdDebug(11000) << "auto adding message from player " << p << " ;id=" << id << endl;
- addMessage(p, text);
- }
-}
-
-int KChat::addPlayer(const TQString& nickname)
-{
- int id = uniqueId();
- d->mPlayerMap.insert(id, nickname);
- return id;
-}
-
-void KChat::removePlayer(int id)
-{
- d->mPlayerMap.remove(id);
-}
-
-void KChat::removePlayer(const TQString& nickname)
-{
- TQMap<int, TQString>::Iterator it;
- for (it = d->mPlayerMap.begin(); it != d->mPlayerMap.end(); ++it) {
- if (it.data() == nickname) {
- d->mPlayerMap.remove(it);
- }
- }
-}
-
-
-#include "kchat.moc"
diff --git a/libkdegames/kchat.h b/libkdegames/kchat.h
deleted file mode 100644
index f6867c68..00000000
--- a/libkdegames/kchat.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-#ifndef __KCHAT_H__
-#define __KCHAT_H__
-
-#include <tqstring.h>
-
-#include "kchatbase.h"
-#include <kdemacros.h>
-
-class KChatPrivate;
-
-/**
- * @short A chat widget for non-KGame games
- *
- * Docu is TODO
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KChat : public KChatBase
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- /**
- * @param parent The parent widget for this widget.
- * @param twoPlayerGame If true the combo box where the player can
- * choose to send to a single player or to all players will not be added
- * as you will hardly need it in 2-player games.
- **/
- KChat(TQWidget* parent, bool twoPlayerGame = false);
-
- virtual ~KChat();
-
- /**
- * Equivalent to player(fromId())
- * @return The name that will be shown for messages from this widget.
- * That is the string from @ref setFromNickname
- **/
- virtual const TQString& fromName() const;
-
- /**
- * This sets the name that will be shown on all chat widgets if this
- * widget sends a message. See signalSendMessage
- * @param name The name of the player owning this widget
- **/
- void setFromNickname(const TQString& name);
-
-// TODO:
-// void setPlayerList(TQIntDict<TQString>);// use this for non-KGame use
-
- /**
- * Adds a player nickname.
- * @return The unique ID of the player
- **/
- int addPlayer(const TQString& nick);
-
- /**
- * Removes all players with this nickname. Better don't use this as it
- * will remove *all* players with this nickname. Save the id instead and
- * call removePlayer(id)
- * @param nick The nickname of the removed players
- **/
- void removePlayer(const TQString& nick);
-
- /**
- * Removes the player with this id, as returned by @ref addPlayer
- * @param id The id of the player to be removed
- **/
- void removePlayer(int id);
-
-
- /**
- * @return true if the messages which will be sent from here will be
- * added automatically using @ref KChatBase::addMessage. See also @ref
- * setAutoAddMessages
- **/
- bool autoAddMessages() const;
-
- /**
- * Usually the messages which will be sent from here (see @ref
- * signalSendMessage) are added autmatically to this widget. But under
- * some circumstances that would be very unhandy. So you can deactivate
- * this behaviour here and call @ref KChatBase::addMessage yourself
- * @param add If true (default) messages sent from here will be added
- * automatically. Otherwise you will have to add them yourself
- **/
- void setAutoAddMessages(bool add);
-
- /**
- * @return The nickname of the player which belongs to this id
- **/
- const TQString& player(int id) const;
-
- /**
- * @return The ID that belongs to the local player.
- * @see setFromNickname
- **/
- int fromId() const;
-
-
-signals:
- /**
- * This signal is emitted when the player wants to send a message.
- *
- * The message is added automatically using @ref KChatBase::addMessage if @ref
- * autoAddMessages is enabled.
- * @param id The id of the player who sends the message - see
- * setFromNickname and player
- * @param msg The message itself
- **/
- void signalSendMessage(int id, const TQString& msg);
-
-protected:
- /**
- * This emits @ref signalSendMessage and, if @ref autoAddMessages is
- * true, calls @ref KChatBase::addMessage
- **/
- virtual void returnPressed(const TQString&);
-
- /**
- * The Id of the next player. Incremented after every call.
- **/
- int uniqueId();
-
-private:
- void init();
-
- KChatPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kchatbase.cpp b/libkdegames/kchatbase.cpp
deleted file mode 100644
index 14f74103..00000000
--- a/libkdegames/kchatbase.cpp
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kchatbase.h"
-
-#include <klineedit.h>
-#include <klocale.h>
-#include <kstandarddirs.h>
-#include <kconfig.h>
-#include <kapplication.h>
-#include <kdebug.h>
-
-#include <tqlayout.h>
-#include <tqcombobox.h>
-#include <tqpainter.h>
-
-class KChatBaseTextPrivate
-{
-public:
- KChatBaseTextPrivate()
- {
- mNameFont = 0;
- mMessageFont = 0;
- }
-
- TQString mName;
- TQString mMessage;
-
- const TQFont* mNameFont;
- const TQFont* mMessageFont;
-};
-
-
-KChatBaseText::KChatBaseText(const TQString& name, const TQString& message) : TQListBoxText()
-{
- init();
- setName(name);
- setMessage(message);
-}
-
-KChatBaseText::KChatBaseText(const TQString& message) : TQListBoxText()
-{
- init();
- setMessage(message);
-}
-
-KChatBaseText::~KChatBaseText()
-{
- delete d;
-}
-
-void KChatBaseText::init()
-{
- d = new KChatBaseTextPrivate;
-}
-
-void KChatBaseText::setName(const TQString& n)
-{
-// d->mName = n;
- d->mName = TQString("%1: ").tqarg(n);
- setText(TQString("%1: %2").tqarg(name()).tqarg(message())); // esp. for sorting
-}
-
-void KChatBaseText::setMessage(const TQString& m)
-{
- d->mMessage = m;
- setText(TQString("%1: %2").tqarg(name()).tqarg(message())); // esp. for sorting
-}
-
-const TQString& KChatBaseText::name() const
-{ return d->mName; }
-
-const TQString& KChatBaseText::message() const
-{ return d->mMessage; }
-
-TQFont KChatBaseText::nameFont() const
-{
- if (d->mNameFont) {
- return *d->mNameFont;
- } else if (listBox()) {
- return listBox()->font();
- } else {
- return TQFont();
- }
-}
-
-TQFont KChatBaseText::messageFont() const
-{
- if (d->mMessageFont) {
- return *d->mMessageFont;
- } else if (listBox()) {
- return listBox()->font();
- } else {
- return TQFont();
- }
-}
-
-void KChatBaseText::setNameFont(const TQFont* f)
-{ d->mNameFont = f; }
-
-void KChatBaseText::setMessageFont(const TQFont* f)
-{ d->mMessageFont = f; }
-
-void KChatBaseText::paint(TQPainter* painter)
-{
- TQFontMetrics fm = painter->fontMetrics();
- painter->setFont(nameFont());
- painter->drawText(3, fm.ascent() + fm.leading()/2, name());
- painter->setFont(messageFont());
- painter->drawText(3 + TQFontMetrics(nameFont()).width(name()), fm.ascent() + fm.leading()/2, message());
-}
-
-int KChatBaseText::width(TQListBox* lb) const
-{
- int w = 0;
- if (lb) {
- w += 6;
- w += TQFontMetrics(nameFont()).width(name());
- w += TQFontMetrics(messageFont()).width(message());
- }
-// int w = lb ? lb->fontMetrics().width( text() ) + 6 : 0; // QT orig
- return TQMAX(w, TQApplication::globalStrut().width());
-}
-
-int KChatBaseText::height(TQListBox* lb) const
-{
- int h = 0;
- if (lb) {
- h += 2;
- // AB: is lineSpacing still correct?
- if (TQFontMetrics(nameFont()).lineSpacing() > TQFontMetrics(messageFont()).lineSpacing()) {
- h += TQFontMetrics(nameFont()).lineSpacing();
- } else {
- h += TQFontMetrics(messageFont()).lineSpacing();
- }
- }
-// int h = lb ? lb->fontMetrics().lineSpacing() + 2 : 0; // QT orig
- return TQMAX(h, TQApplication::globalStrut().height());
-}
-
-
-
-class KChatBasePrivate
-{
-public:
- KChatBasePrivate()
- {
- mBox = 0;
- mEdit = 0;
- mCombo = 0;
-
- mAcceptMessage = true;
- mMaxItems = -1;
- }
- TQListBox* mBox;
- KLineEdit* mEdit;
- TQComboBox* mCombo;
- bool mAcceptMessage;
- int mMaxItems;
-
- TQValueList<int> mIndex2Id;
-
- TQFont mNameFont;
- TQFont mMessageFont;
- TQFont mSystemNameFont;
- TQFont mSystemMessageFont;
-};
-
-KChatBase::KChatBase(TQWidget* parent, bool noComboBox) : TQFrame(parent)
-{
- init(noComboBox);
-}
-
-KChatBase::~KChatBase()
-{
-// kdDebug(11000) << "KChatBase: DESTRUCT (" << this << ")" << endl;
- saveConfig();
- delete d;
-}
-
-void KChatBase::init(bool noComboBox)
-{
-// kdDebug(11000) << "KChatBase: INIT (" << this << ")" << endl;
-
- d = new KChatBasePrivate;
-
- setMinimumWidth(100);
- setMinimumHeight(150);
-
- TQVBoxLayout* l = new TQVBoxLayout(this);
-
- d->mBox = new TQListBox(this);
- connect(d->mBox, TQT_SIGNAL(rightButtonClicked(TQListBoxItem*, const TQPoint&)),
- this, TQT_SIGNAL(rightButtonClicked(TQListBoxItem*, const TQPoint&)));
- l->addWidget(d->mBox);
- d->mBox->setVScrollBarMode(TQScrollView::AlwaysOn);
- d->mBox->setHScrollBarMode(TQScrollView::AlwaysOff);
- d->mBox->setFocusPolicy(TQ_NoFocus);
-// d->mBox->setSelectionMode(TQListBox::NoSelection);
- d->mBox->setSelectionMode(TQListBox::Single);
-
- l->addSpacing(5);
-
- TQHBoxLayout* h = new TQHBoxLayout(l);
- d->mEdit = new KLineEdit(this);
- d->mEdit->setHandleSignals(false);
- d->mEdit->setTrapReturnKey(true);
- d->mEdit->completionObject(); // add the completion object
- d->mEdit->setCompletionMode(KGlobalSettings::CompletionNone);
- connect(d->mEdit, TQT_SIGNAL(returnPressed(const TQString&)), this, TQT_SLOT(slotReturnPressed(const TQString&)));
- h->addWidget(d->mEdit);
-
- if (!noComboBox) {
- d->mCombo = new TQComboBox(this);
- h->addWidget(d->mCombo);
- addSendingEntry(i18n("Send to All Players"), SendToAll);//FIXME: where to put the id?
- }
-
- d->mAcceptMessage = true; // by default
- setMaxItems(-1); // unlimited
-
- if (kapp) {
- // kapp might be NULL as well - in case we are in TQt designer.
- readConfig();
- }
-}
-
-bool KChatBase::acceptMessage() const
-{ return d->mAcceptMessage; }
-
-void KChatBase::setAcceptMessage(bool a)
-{ d->mAcceptMessage = a; }
-
-bool KChatBase::addSendingEntry(const TQString& text, int id)
-{
-//FIXME: is ID used correctly?
-// do we need ID at all?
-// what the hell should be here?
-// d->mCombo->insertItem(i18n("Send to All Players"), SendToAll);
- return insertSendingEntry(text, id);
-}
-
-bool KChatBase::insertSendingEntry(const TQString& text, int id, int index)
-{
- if (!d->mCombo) {
- kdWarning(11000) << "KChatBase: Cannot add an entry to the combo box" << endl;
- return false;
- }
- if (d->mIndex2Id.findIndex(id) != -1) {
- kdError(11000) << "KChatBase: Cannot add more than one entry with the same ID! " << endl;
- kdError(11000) << "KChatBase: Text="<<text<<endl;
- return false;
- }
- d->mCombo->insertItem(text, index);
- if (index < 0) {
- d->mIndex2Id.append(id);
- } else {
- d->mIndex2Id.insert(d->mIndex2Id.at(index), id);
- }
- if (d->mIndex2Id.count() != (uint)d->mCombo->count()) {
- kdError(11000) << "KChatBase: internal ERROR - local IDs do not match combo box entries!" << endl;
- }
- return true;
-}
-
-int KChatBase::sendingEntry() const
-{
- if (!d->mCombo) {
- kdWarning(11001) << "Cannot retrieve index from NULL combo box" << endl;
- return -1;
- }
- int index = d->mCombo->currentItem();
- if (d->mIndex2Id.at(index) == d->mIndex2Id.end()) {
- kdWarning(11000) << "could not find the selected sending entry!" << endl;
- return -1;
- }
- return d->mIndex2Id[index];
-}
-
-void KChatBase::removeSendingEntry(int id)
-{
- if (!d->mCombo) {
- kdWarning(11000) << "KChatBase: Cannot remove an entry from the combo box" << endl;
- return;
- }
- d->mCombo->removeItem(findIndex(id));
- d->mIndex2Id.remove(id);
-}
-
-void KChatBase::changeSendingEntry(const TQString& text, int id)
-{
- if (!d->mCombo) {
- kdWarning(11000) << "KChatBase: Cannot change an entry in the combo box" << endl;
- return;
- }
- int index = findIndex(id);
- d->mCombo->changeItem(text, index);
-}
-
-void KChatBase::setSendingEntry(int id)
-{
- if (!d->mCombo) {
- kdWarning(11000) << "KChatBase: Cannot set an entry in the combo box" << endl;
- return;
- }
- d->mCombo->setCurrentItem(findIndex(id));
-}
-
-int KChatBase::findIndex(int id) const
-{
- return d->mIndex2Id.findIndex(id);
-}
-
-int KChatBase::nextId() const
-{
- int i = SendToAll + 1;
- while (d->mIndex2Id.findIndex(i) != -1) {
- i++;
- }
- return i;
-}
-
-void KChatBase::addItem(const TQListBoxItem* text)
-{
- d->mBox->insertItem(text);
- int index = d->mBox->count() -1;
- d->mBox->setBottomItem(index);//FIXME: don't scroll to bottom if user scrolled down manually
- if (maxItems() >= 0 && d->mBox->count() > (unsigned int)maxItems()) {
- d->mBox->removeItem(0);
- }
-}
-
-void KChatBase::addMessage(const TQString& fromName, const TQString& text)
-{
-//maybe "%1 says: %2" or so
- addItem(layoutMessage(fromName, text));
-}
-
-void KChatBase::addSystemMessage(const TQString& fromName, const TQString& text)
-{
- addItem(layoutSystemMessage(fromName, text));
-}
-
-TQListBoxItem* KChatBase::layoutMessage(const TQString& fromName, const TQString& text)
-{
- //TODO: KChatBaseConfigure? - e.g. color
- TQListBoxItem* message;
- if (text.startsWith("/me ")) {
- // replace "/me" by a nice star. leave one space after the star
- TQPixmap pix;
- pix.load(locate("data", TQString::tqfromLatin1("tdegames/pics/star.png")));
-
- //TODO KChatBasePixmap? Should change the font here!
-
- message = (TQListBoxItem*)new TQListBoxPixmap(pix, i18n("%1 %2").tqarg(fromName).tqarg(text.mid(3)));
- } else {
- // the text is not edited in any way. just return an item
- KChatBaseText* m = new KChatBaseText(fromName, text);
- m->setNameFont(&d->mNameFont);
- m->setMessageFont(&d->mMessageFont);
- message = (TQListBoxItem*)m;
- }
- return message;
-}
-
-TQListBoxItem* KChatBase::layoutSystemMessage(const TQString& fromName, const TQString& text)
-{
- //TODO: KChatBaseConfigure? - e.g. color
-
- // no need to check for /me etc.
- KChatBaseText* m = new KChatBaseText(i18n("--- %1").tqarg(fromName), text);
- m->setNameFont(&d->mSystemNameFont);
- m->setMessageFont(&d->mSystemMessageFont);
- return (TQListBoxItem*)m;
-}
-
-void KChatBase::slotReturnPressed(const TQString& text)
-{
- if (text.length() <= 0) {
- // no text entered - probably hit return by accident
- return;
- } else if (!acceptMessage()) {
- return;
- }
- d->mEdit->completionObject()->addItem(text);
-// connect(d->mEdit, TQT_SIGNAL(returnPressed(const TQString&)), comp, TQT_SLOT(addItem(const TQString&)));
- d->mEdit->clear();
- returnPressed(text);
-}
-
-TQString KChatBase::comboBoxItem(const TQString& name) const
-{ // TODO: such a function for "send to all" and "send to my group"
- return i18n("Send to %1").tqarg(name);
-}
-
-void KChatBase::slotClear()
-{
- d->mBox->clear();
-}
-
-void KChatBase::setCompletionMode(KGlobalSettings::Completion mode)
-{ d->mEdit->setCompletionMode(mode); }
-
-void KChatBase::setNameFont(const TQFont& font)
-{
- d->mNameFont = font;
- d->mBox->triggerUpdate(false);
-}
-
-void KChatBase::setMessageFont(const TQFont& font)
-{
- d->mMessageFont = font;
- d->mBox->triggerUpdate(false);
-}
-
-void KChatBase::setBothFont(const TQFont& font)
-{
- setNameFont(font);
- setMessageFont(font);
-}
-
-const TQFont& KChatBase::nameFont() const
-{ return d->mNameFont; }
-
-const TQFont& KChatBase::messageFont() const
-{ return d->mMessageFont; }
-
-void KChatBase::setSystemNameFont(const TQFont& font)
-{
- d->mSystemNameFont = font;
- d->mBox->triggerUpdate(false);
-}
-
-void KChatBase::setSystemMessageFont(const TQFont& font)
-{
- d->mSystemMessageFont = font;
- d->mBox->triggerUpdate(false);
-}
-
-void KChatBase::setSystemBothFont(const TQFont& font)
-{
- setSystemNameFont(font);
- setSystemMessageFont(font);
-}
-
-const TQFont& KChatBase::systemNameFont() const
-{ return d->mSystemNameFont; }
-
-const TQFont& KChatBase::systemMessageFont() const
-{ return d->mSystemMessageFont; }
-
-void KChatBase::saveConfig(KConfig* conf)
-{
- TQString oldGroup;
- if (!conf) {
- conf = kapp->config();
- oldGroup = conf->group();
- conf->setGroup("KChatBase");
- }
-
- conf->writeEntry("NameFont", nameFont());
- conf->writeEntry("MessageFont", messageFont());
- conf->writeEntry("SystemNameFont", systemNameFont());
- conf->writeEntry("SystemMessageFont", systemMessageFont());
- conf->writeEntry("MaxMessages", maxItems());
-
- if (!oldGroup.isNull()) {
- conf->setGroup(oldGroup);
- }
-}
-
-void KChatBase::readConfig(KConfig* conf)
-{
- TQString oldGroup;
- if (!conf) {
- conf = kapp->config();
- oldGroup = conf->group();
- conf->setGroup("KChatBase");
- }
-
- setNameFont(conf->readFontEntry("NameFont"));
- setMessageFont(conf->readFontEntry("MessageFont"));
- setSystemNameFont(conf->readFontEntry("SystemNameFont"));
- setSystemMessageFont(conf->readFontEntry("SystemMessageFont"));
- setMaxItems(conf->readNumEntry("MaxMessages", -1));
-
- if (!oldGroup.isNull()) {
- conf->setGroup(oldGroup);
- }
-}
-
-void KChatBase::clear()
-{
- d->mBox->clear();
-}
-
-void KChatBase::setMaxItems(int maxItems)
-{
- d->mMaxItems = maxItems;
- //TODO cut too many messages
- if (maxItems == 0) {
- clear();
- } else if (maxItems > 0) {
- while (d->mBox->count() > (unsigned int)maxItems) {
- d->mBox->removeItem(0);
- }
- }
-}
-
-int KChatBase::maxItems() const
-{ return d->mMaxItems; }
-
-
-#include "kchatbase.moc"
diff --git a/libkdegames/kchatbase.h b/libkdegames/kchatbase.h
deleted file mode 100644
index 892e5859..00000000
--- a/libkdegames/kchatbase.h
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-#ifndef __KCHATBASE_H__
-#define __KCHATBASE_H__
-
-#include <tqframe.h>
-#include <tqstring.h>
-#include <tqlistbox.h>
-
-#include <kglobalsettings.h>
-#include <kdemacros.h>
-class TQListBoxItem;
-
-class KConfig;
-
-
-class KChatBaseTextPrivate;
-
-/**
- * A TQListBoxText implementation for KChatBase.
- *
- * It supports different colors, text fonts, ...
- *
- * A KChatBaseText consists of two text items: first the player part then the
- * text part. This honors KChatBase::addMessage which also uses both.
- * You can leave the player part out if you don't need it - there won't be any
- * difference.
- *
- * You can set different colors and fonts for both parts. In the future there
- * will probably some kind of KChatBaseDialog which offers the user the ability
- * to configure things like color and font on the fly.
- **/
-class KChatBaseText : public TQListBoxText
-{
-public:
-
- /**
- * Constructs a KChatBaseText object with the player and text part
- **/
- KChatBaseText(const TQString& player, const TQString& text);
-
- /**
- * Constructs a KChatBaseText object without player part
- **/
- KChatBaseText(const TQString& text);
-
- /**
- * Destruct a KChatBaseText object.
- **/
- virtual ~KChatBaseText();
-
- /**
- * Set the name part of a message. A message is usually shown like
- * "name: text" and you can change both parts independently.
- *
- * @see setMessage
- * @param name The name of the sender (e.g. the player)
- **/
- void setName(const TQString& name);
-
- /**
- * Set the text part of a message. A message is usually shown like
- * "name: message" and you can change both parts independently.
- *
- * See also setName
- * @param message The message that has been sent
- **/
- void setMessage(const TQString& message);
-
- /**
- * @return The name part of a message.
- * @see setName
- **/
- const TQString& name() const;
-
- /**
- * @return The message text.
- * @see setMessage
- **/
- const TQString& message() const;
-
- /**
- * You can set the font of the sender name independently of the message
- * itself. This font is used as the "name: " part of the message.
- * @return The font that is used for the name
- **/
- TQFont nameFont() const;
-
- /**
- * You can set the font of the message independently of the sender name.
- * This font is used as the text part of the message.
- * @return The font thaz is used for message text
- **/
- TQFont messageFont() const;
-
- /**
- * Set the font for the name.
- * @see nameFont
- * @param font A pointer to the name font. Only the pointer is stored so
- * don't delete the object. This way there is only one object for a lot
- * of messages in memory.
- **/
- void setNameFont(const TQFont* font);
-
- /**
- * Set the font for the message text.
- * @see messageFont
- * @param font A pointer to the message font. Only the pointer is stored so
- * don't delete the object! This way there is only one object for a lot
- * of messages in memory.
- **/
- void setMessageFont(const TQFont* font);
-
- /**
- **/
- virtual int width(TQListBox* ) const;
-
- /**
- **/
- virtual int height(TQListBox* ) const;
-
-protected:
- /**
- **/
- virtual void paint(TQPainter*);
-
-private:
- void init();
-
-private:
- KChatBaseTextPrivate* d;
-};
-
-
-class KChatBasePrivate;
-
-/**
- * @short The base class for chat widgets
- *
- * This is the base class for both KChat and KGameChat. KGameChat is the class
- * you want to use if you write a KGame based game as it will do most things for
- * you. KChat is more or less the same but not KGame dependant
- *
- * KChatBase provides a complete chat widget, featuring different sending means
- * (e.g. "send to all", "send to player1", "send to group2" and so on - see
- * addSendingEntry). It also provides full auto-completion capabilities (see
- * KCompletion and KLineEdit) which defaults to disabled. The user can
- * change this by right-clicking on the KLineEdit widget and selecting the
- * desired behaviour. You can also change this manually by calling
- * setCompletionMode.
- *
- * To make KChatBase useful you have to overwrite at least returnPressed.
- * Here you should send the message to all of your clients (or just some of
- * them, depending on sendingEntry).
- *
- * To add a message just call addMessage with the nickname of the player
- * who sent the message and the message itself. If you don't want to use
- * layoutMessage by any reason you can also call addItem directly. But you
- * should better replace layoutMessage instead.
- *
- * You probably don't want to use the abstract class KChatBase directly but use
- * one of the derived classess KChat or KGameChat. The latter is the
- * widget of choice if you develop a KGame application as you don't have to
- * do anything but providing a KGame object.
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KChatBase : public TQFrame
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- /**
- * @param parent The parent widget for this widget.
- * @param noComboBox If true then the combo box where the player can
- * choose where to send messages to (either globally or just to some
- * players) will not be added.
- **/
- KChatBase(TQWidget* parent, bool noComboBox = false);
-
- /**
- * Destruct the KChatBase object
- *
- * Also calls saveConfig
- **/
- virtual ~KChatBase();
-
- enum SendingIds {
- SendToAll = 0
- };
-
- /**
- * @return The name that will be shown for messages from this widget. Either the
- * string that was set by setFromName or the name of the player
- * that was set by setFromPlayer
- **/
- virtual const TQString& fromName() const = 0;
-
- /**
- * Adds a new entry in the combo box. The default is "send to all
- * players" only. This function is provided for convenience. You can
- * also call inserSendingEntry with index = -1.
- * See also nextId!
- * @param text The text of the new entry
- * @param id An ID for this entry. This must be unique for this
- * entry. It has nothing to do with the position of the entry in the
- * combo box. See nextId
- * @return True if successful, otherwise false (e.g. if the id is already used)
- **/
- bool addSendingEntry(const TQString& text, int id);
-
- /**
- * Inserts a new entry in the combo box.
- * @param text The entry
- * @param id An ID for this entry. This must be unique for this
- * entry. It has nothing to do with the position of the entry in the
- * combo box!
- * @see nextId
- * @param index The position of the entry. If -1 the entry will be added
- * at the bottom
- * @return True if successful, otherwise false (e.g. if the id is already used)
- **/
- bool insertSendingEntry(const TQString& text, int id, int index = -1);
-
- /**
- * This changes a combo box entry.
- * @param text The new text of the entry
- * @param id The ID of the item to be changed
- **/
- void changeSendingEntry(const TQString& text, int id);
-
- /**
- * This selects a combo box entry.
- * @param id The ID of the item to be selected
- **/
- void setSendingEntry(int id);
-
- /**
- * Removes the entry with the ID id from the combo box. Note that id is
- * _not_ the index of the entry!
- * @see addSendingEntry
- * @param id The unique id of the entry
- **/
- void removeSendingEntry(int id);
-
- /**
- * @return The _unique ID_ of the sending entry that has been selected.
- * @see addSendingEntry
- *
- * Note that the entry "send to all" _always_ uses
- * KChatBase::SendToAll, i.e. 0 as id!
- **/
- int sendingEntry() const;
-
- /**
- * @return The index of the combo box entry with the given id
- **/
- int findIndex(int id) const;
-
- /**
- * @return An ID that has not yet been used in the combo box.
- * @see addSendingEntry
- **/
- int nextId() const;
-
- /**
- * @return True if this widget is able to send messages (see
- * returnPressed) and false if not. The default implementation returns
- * the value which has been set by setAcceptMessage (true by
- * default)
- **/
- virtual bool acceptMessage() const;
-
- /**
- * See KLineEdit::setCompletionMode
- **/
- void setCompletionMode(KGlobalSettings::Completion mode);
-
- /**
- * Set the font that used used for the name part of a message. See also
- * nameFont and setBothFont
- **/
- void setNameFont(const TQFont& font);
-
- /**
- * Set the font that used used for the message part of a message.
- * @see messageFont, setBothFont
- **/
- void setMessageFont(const TQFont& font);
-
- /**
- * This sets both - nameFont and messageFont to font. You
- * probably want to use this if you don't wish to distinguish between
- * these parts of a message.
- * @param font A font used for both nameFont and messageFont
- **/
- void setBothFont(const TQFont& font);
-
- /**
- * Same as setNameFont but applies only to system messages.
- * @see layoutSystemMessage
- **/
- void setSystemNameFont(const TQFont& font);
-
- /**
- * Same as setMessageFont but applies only to system messages.
- * @see layoutSystemMessage
- **/
- void setSystemMessageFont(const TQFont& font);
-
- /**
- * Same as setBothFont but applies only to system messages.
- * @see layoutSystemMessage
- **/
- void setSystemBothFont(const TQFont& font);
-
- /**
- * This font should be used for the name (the "from: " part) of a
- * message. layoutMessage uses this to set the font using
- * KChatBaseText::setNameFont but if you want to overwrite
- * layoutMessage you should do this yourself.
- * @return The font that is used for the name part of the message.
- **/
- const TQFont& nameFont() const;
-
- /**
- * This font should be used for a message. layoutMessage sets the
- * font of a message using KChatBaseText::setMessageFont but if ypu
- * replace layoutMessage with your own function you should use
- * messageFont() yourself.
- * @return The font that is used for a message
- **/
- const TQFont& messageFont() const;
-
- /**
- * Same as systemNameFont but applies only to system messages.
- * @see layoutSystemMessage
- **/
- const TQFont& systemNameFont() const;
-
- /**
- * Same as systemMessageFont but applies only to system messages.
- * @see layoutSystemMessage
- **/
- const TQFont& systemMessageFont() const;
-
- /**
- * Save the configuration of the dialog to a KConfig object. If
- * the supplied KConfig pointer is NULL then kapp->config() is used
- * instead (and the group is changed to "KChatBase") butr the current
- * group is restored at the end.
- * @param conf A pointer to the KConfig object to save the config
- * to. If you use 0 then kapp->config() is used and the group is changed
- * to "KChatBase" (the current group is restored at the end).
- **/
- virtual void saveConfig(KConfig* conf = 0);
-
- /**
- * Read the configuration from a KConfig object. If the pointer is
- * NULL kapp->config() is used and the group is changed to "KChatBase".
- * The current KConfig::group is restored after this call.
- **/
- virtual void readConfig(KConfig* conf = 0);
-
- /**
- * Set the maximum number of items in the list. If the number of item
- * exceeds the maximum as many items are deleted (oldest first) as
- * necessary. The number of items will never exceed this value.
- * @param maxItems the maximum number of items. -1 (default) for
- * unlimited.
- **/
- void setMaxItems(int maxItems);
-
- /**
- * Clear all messages in the list.
- **/
- void clear();
-
- /**
- * @return The maximum number of messages in the list. -1 is unlimited. See also
- * setMaxItems
- **/
- int maxItems() const;
-
-
-public slots:
- /**
- * Add a text in the listbox. See also signalSendMessage()
- *
- * Maybe you want to replace this with a function that creates a nicer text
- * than "fromName: text"
- *
- * Update: the function layoutMessage is called by this now. This
- * means that you will get user defined outlook on the messages :-)
- * @param fromName The player who sent this message
- * @param text The text to be added
- **/
- virtual void addMessage(const TQString& fromName, const TQString& text);
-
- /**
- * This works just like addMessage but adds a system message.
- * layoutSystemMessage is used to generate the displayed item. System
- * messages will have a different look than player messages.
- *
- * You may wish to use this to display status information from your game.
- **/
- virtual void addSystemMessage(const TQString& fromName, const TQString& text);
-
- /**
- * This member function is mainly internally used to add a message. It
- * is called by addMessage which creates a single text from a
- * player name and a text. You will hardly ever use this - but if you
- * need it it will be here ;-)
- *
- * But you may want to replace this in a derived class to create a
- * non-default (maybe nicer ;-) ) behaviour
- * @param item The TQListBoxItem that is being added
- **/
- virtual void addItem(const TQListBoxItem* item);
-
-
- /**
- * This clears all messages in the view. Note that only the messages are
- * cleared, not the sender names in the combo box!
- **/
- void slotClear();
-
- /**
- * @param a If false this widget cannot send a message until
- * setAcceptMessage(true) is called
- **/
- void setAcceptMessage(bool a);
-
-signals:
- /**
- * Emitted when the user right-clicks on a list item.
- * @see TQListBox::rightButtonClicked
- **/
- void rightButtonClicked(TQListBoxItem*, const TQPoint&);
-
-protected:
- /**
- * This is called whenever the user pushed return ie wants to send a
- * message.
- *
- * Note that you MUST add the message to the widget when this function
- * is called as it has already been added to the KCompletion object
- * of the KLineEdit widget!
- *
- * Must be implemented in derived classes
- * @param text The message to be sent
- **/
- virtual void returnPressed(const TQString& text) = 0;
-
- /**
- * Replace to customise the combo box.
- *
- * Default: i18n("Send to %1).tqarg(name)
- * @param name The name of the player
- * @return The string as it will be shown in the combo box
- **/
- virtual TQString comboBoxItem(const TQString& name) const;
-
- /**
- * Create a TQListBoxItem for this message. This function is not yet
- * written usefully - currently just a TQListBoxTex object is
- * created which shows the message in this format: "fromName: text".
- * This should fit most peoples needs but needs further improvements.
- **/
- virtual TQListBoxItem* layoutMessage(const TQString& fromName, const TQString& text);
-
- /**
- * Create a TQListBoxItem for this message. This does the same as
- * layoutMessage but generates a system message. You might want to
- * use such a message to display e.g. status information from your game.
- *
- * The default implementation just prepends "--- ".
- **/
- virtual TQListBoxItem* layoutSystemMessage(const TQString& fromName, const TQString& text);
-
-private slots:
- /**
- * Check if a text was entered and if acceptMessage returns true.
- * Then add the message to the KCompletion object of the KLineEdit
- * widget and call returnPressed
- **/
- void slotReturnPressed(const TQString&);
-
-private:
- void init(bool noComboBox);
-
- KChatBasePrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kchatdialog.cpp b/libkdegames/kchatdialog.cpp
deleted file mode 100644
index 7e0df7e8..00000000
--- a/libkdegames/kchatdialog.cpp
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kchatdialog.h"
-
-#include "kchatbase.h"
-
-#include <klocale.h>
-#include <kfontdialog.h>
-
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <tqpushbutton.h>
-
-class KChatDialogPrivate
-{
- public:
- KChatDialogPrivate()
- {
- mTextPage = 0;
-
- mNamePreview = 0;
- mTextPreview = 0;
- mSystemNamePreview = 0;
- mSystemTextPreview = 0;
-
- mChat = 0;
- }
-
- TQFrame* mTextPage;
-
- TQLabel* mNamePreview;
- TQLabel* mTextPreview;
- TQLabel* mSystemNamePreview;
- TQLabel* mSystemTextPreview;
-
- TQLineEdit* mMaxMessages;
-
- KChatBase* mChat;
-};
-
-KChatDialog::KChatDialog(KChatBase* chat, TQWidget* parent, bool modal)
-// : KDialogBase(Tabbed, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
- : KDialogBase(Plain, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
-{
- init();
- plugChatWidget(chat);
-}
-
-KChatDialog::KChatDialog(TQWidget* parent, bool modal)
-// : KDialogBase(Tabbed, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
- : KDialogBase(Plain, i18n("Configure Chat"), Ok|Default|Apply|Cancel, Ok, parent, 0, modal, true)
-{
- init();
-}
-
-KChatDialog::~KChatDialog()
-{
- delete d;
-}
-
-void KChatDialog::init()
-{
- d = new KChatDialogPrivate;
-// d->mTextPage = addPage(i18n("&Messages"));// not a good name - game Messages?
- d->mTextPage = plainPage();
- TQGridLayout* tqlayout = new TQGridLayout(d->mTextPage, 7, 2, KDialog::marginHint(), KDialog::spacingHint());
-
-// General fonts
- TQPushButton* nameFont = new TQPushButton(i18n("Name Font..."), d->mTextPage);
- connect(nameFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetNameFont()));
- tqlayout->addWidget(nameFont, 0, 0);
- TQPushButton* textFont = new TQPushButton(i18n("Text Font..."), d->mTextPage);
- connect(textFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetTextFont()));
- tqlayout->addWidget(textFont, 0, 1);
-
- TQFrame* messagePreview = new TQFrame(d->mTextPage);
- messagePreview->setFrameStyle(TQFrame::StyledPanel | TQFrame::Sunken);
- TQHBoxLayout* messageLayout = new TQHBoxLayout(messagePreview);
- tqlayout->addMultiCellWidget(messagePreview, 1, 1, 0, 1);
-
- d->mNamePreview = new TQLabel(i18n("Player: "), messagePreview);
- messageLayout->addWidget(d->mNamePreview, 0);
- d->mTextPreview = new TQLabel(i18n("This is a player message"), messagePreview);
- messageLayout->addWidget(d->mTextPreview, 1);
-
- tqlayout->addRowSpacing(2, 10);
-
-// System Message fonts
- TQLabel* systemMessages = new TQLabel(i18n("System Messages - Messages directly sent from the game"), d->mTextPage);
- tqlayout->addMultiCellWidget(systemMessages, 3, 3, 0, 1);
- TQPushButton* systemNameFont = new TQPushButton(i18n("Name Font..."), d->mTextPage);
- connect(systemNameFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetSystemNameFont()));
- tqlayout->addWidget(systemNameFont, 4, 0);
- TQPushButton* systemTextFont = new TQPushButton(i18n("Text Font..."), d->mTextPage);
- connect(systemTextFont, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotGetSystemTextFont()));
- tqlayout->addWidget(systemTextFont, 4, 1);
-
- TQFrame* systemMessagePreview = new TQFrame(d->mTextPage);
- systemMessagePreview->setFrameStyle(TQFrame::StyledPanel | TQFrame::Sunken);
- TQHBoxLayout* systemMessageLayout = new TQHBoxLayout(systemMessagePreview);
- tqlayout->addMultiCellWidget(systemMessagePreview, 5, 5, 0, 1);
-
- d->mSystemNamePreview = new TQLabel(i18n("--- Game: "), systemMessagePreview);
- systemMessageLayout->addWidget(d->mSystemNamePreview, 0);
- d->mSystemTextPreview = new TQLabel(i18n("This is a system message"), systemMessagePreview);
- systemMessageLayout->addWidget(d->mSystemTextPreview, 1);
-
-// message count
- TQLabel* maxMessages = new TQLabel(i18n("Maximal number of messages (-1 = unlimited):"), d->mTextPage);
- tqlayout->addWidget(maxMessages, 6, 0);
- d->mMaxMessages = new TQLineEdit(d->mTextPage);
- d->mMaxMessages->setText(TQString::number(-1));
- tqlayout->addWidget(d->mMaxMessages, 6, 1);
-}
-
-void KChatDialog::slotGetNameFont()
-{
- TQFont font = nameFont();
- KFontDialog::getFont(font);
- setNameFont(font);
-}
-
-void KChatDialog::slotGetTextFont()
-{
- TQFont font = textFont();
- KFontDialog::getFont(font);
- setTextFont(font);
-}
-
-void KChatDialog::slotGetSystemNameFont()
-{
- TQFont font = systemNameFont();
- KFontDialog::getFont(font);
- setSystemNameFont(font);
-}
-
-void KChatDialog::slotGetSystemTextFont()
-{
- TQFont font = systemTextFont();
- KFontDialog::getFont(font);
- setSystemTextFont(font);
-}
-
-TQFont KChatDialog::nameFont() const
-{
- return d->mNamePreview->font();
-}
-
-TQFont KChatDialog::textFont() const
-{
- return d->mTextPreview->font();
-}
-
-TQFont KChatDialog::systemNameFont() const
-{
- return d->mSystemNamePreview->font();
-}
-
-TQFont KChatDialog::systemTextFont() const
-{
- return d->mSystemTextPreview->font();
-}
-
-void KChatDialog::plugChatWidget(KChatBase* widget, bool applyFonts)
-{
- d->mChat = widget;
- if (applyFonts && d->mChat) {
- setNameFont(d->mChat->nameFont());
- setTextFont(d->mChat->messageFont());
- setSystemNameFont(d->mChat->systemNameFont());
- setSystemTextFont(d->mChat->systemMessageFont());
- setMaxMessages(d->mChat->maxItems());
- }
-}
-
-void KChatDialog::configureChatWidget(KChatBase* widget)
-{
- if (!widget) {
- return;
- }
- widget->setNameFont(nameFont());
- widget->setMessageFont(textFont());
-
- widget->setSystemNameFont(systemNameFont());
- widget->setSystemMessageFont(systemTextFont());
-
- widget->setMaxItems(maxMessages());
-}
-
-void KChatDialog::slotOk()
-{
- slotApply();
- KDialogBase::slotOk();
-}
-
-void KChatDialog::slotApply()
-{
- configureChatWidget(d->mChat);
-}
-
-void KChatDialog::setNameFont(TQFont f)
-{
- d->mNamePreview->setFont(f);
-}
-
-void KChatDialog::setTextFont(TQFont f)
-{
- d->mTextPreview->setFont(f);
-}
-
-void KChatDialog::setSystemNameFont(TQFont f)
-{
- d->mSystemNamePreview->setFont(f);
-}
-
-void KChatDialog::setSystemTextFont(TQFont f)
-{
- d->mSystemTextPreview->setFont(f);
-}
-
-void KChatDialog::setMaxMessages(int max)
-{
- d->mMaxMessages->setText(TQString::number(max));
-}
-
-int KChatDialog::maxMessages() const
-{
- bool ok;
- int max = d->mMaxMessages->text().toInt(&ok);
- if (!ok) {
- return -1; // unlimited is default
- }
- return max;
-}
-
-#include "kchatdialog.moc"
diff --git a/libkdegames/kchatdialog.h b/libkdegames/kchatdialog.h
deleted file mode 100644
index 8b374788..00000000
--- a/libkdegames/kchatdialog.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KCHATDIALOG_H__
-#define __KCHATDIALOG_H__
-
-#include <kdialogbase.h>
-#include <kdemacros.h>
-
-class KChatBase;
-
-class KChatDialogPrivate;
-
-class KDE_EXPORT KChatDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- /**
- * Construct a KChatDialog widget
- **/
- KChatDialog(TQWidget* parent, bool modal = false);
-
- /**
- * Construct a KChatDialog widget which automatically configures the
- * @ref KChatBase widget. You probably want to use this as you don't
- * have to care about the configuration stuff yourself.
- **/
- KChatDialog(KChatBase* chatWidget, TQWidget* parent, bool modal = false);
-
- /**
- * Destruct the dialog
- **/
- ~KChatDialog();
-
- /**
- * @return The font that shall be used as the "name: " part of a normal
- * message.
- **/
- TQFont nameFont() const;
-
- /**
- * @return The font that shall be used for normal messages.
- **/
- TQFont textFont() const;
-
- /**
- * @return The font that shall be used as the "name: " part of a system
- * (game) message.
- **/
- TQFont systemNameFont() const;
-
- /**
- * @return The font that shall be used for a system (game) message.
- **/
- TQFont systemTextFont() const;
-
- /**
- * Set the widget that will be configured by the dialog. Use this if you
- * don't want to configure the widget yourself.
- * @param widget The chat widget that shall be configured
- * @param Whether you want to have the current @ref KChatBase fonts as
- * defaults in the dialog
- **/
- void plugChatWidget(KChatBase* widget, bool applyFonts = true);
-
- /**
- * Used to configure the chat widget according to the user settings.
- * This is called automatically if @ref plugChatWidget was called
- * before.
- * @param widget The chat widget that shall be configured
- **/
- void configureChatWidget(KChatBase* widget);
-
- /**
- * @return The maximal allowed messages in the chat widget. -1 is
- * unlimited
- **/
- int maxMessages() const;
-
-protected slots:
- void slotGetNameFont();
- void slotGetTextFont();
- void slotGetSystemNameFont();
- void slotGetSystemTextFont();
-
- virtual void slotApply();
- virtual void slotOk();
-
-private:
- void setNameFont(TQFont);
- void setTextFont(TQFont);
- void setSystemNameFont(TQFont);
- void setSystemTextFont(TQFont);
- void setMaxMessages(int max);
-
-private:
- void init();
-
-private:
- KChatDialogPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/COMPAT b/libkdegames/kgame/COMPAT
deleted file mode 100644
index 4551c679..00000000
--- a/libkdegames/kgame/COMPAT
+++ /dev/null
@@ -1,55 +0,0 @@
-06.09.2001: replace the signal signalCreatePlayer by the virtual function
- createPlayer. It has the same arguments but the return value
- is the new player
-06.09.2001: the KGameConfig dialog changes the parameter initConfigs from bool
- to long. Use the ConfigOptions to specify what options you want
- to have enabled. Default is all
-06.09.2001: some int->Q_UINT32 in sender, receiver and player parameters. maybe
- more will follow.
-06.09.2001: KGameIO::signalPrepareMove(..., bool&) ->
- KGameIO::signalPrepareMove(..., bool*): don't know why this was
- necessary but it didn't work anymore...
-16.09.2001: KGamePropertyHandler uses bool* for the sent parameter now. This is
- because QT3 obviously doesn't honor referneces in Q_SIGNALS/Q_SLOTS.
- This might even be a QT bug. Bad situation - we use references
- everywhere in KGame... hope nothing else is affecterd by this
- problem (signalPrepareMove was fixed already by me)
-18.09.2001: bool* for Key/Mouseevents and IOAdded in kgameio.h too
-19.09.2001: Kgame:nextPlayer retunrs the KPlayer *nextplayer instead of bool
-19.09.2001: gameOver() renamed to checkGameOver() !!!!!
-18.09.2001: Question: Should the signal signalPlayerInput(QDataStream &,KPlayer *))
- be made a virtual function?
- MH: This is done now. As this is a central function your programs will
- not run anymore. Fix: rename your slot which is connected to the above
- signal to playerInput() and return TRUE in it. This will make it 100%
- compatible to the old version. I think this chagne is necessary especially
- as a signal is of no use here as you cannot read twice from the same stream.
- Therefore there can be only one function processing the input. If you really
- need a signal, you can of course simply emit it in the overwritten playerInput
- function
-20.09.2001 playerInputFinished(void->KPlayer *)
---------------------- KGAME_ALPHA_1 ---------------------
-06.10.2001 adding KGameNetwork::signalAdminStatusChanged - needed for
- KGameDialog
-06.10.2001 KGame::loadGame() doesn't call setPolicy() anymore!
-08.10.2001 KGamePropertyList now honor policies! Use setPolicy(PolicyDirty) to
- get the old behavior!
- The behavior of KGamePropertyArray may have changed in this turn,
- too!
- The API stays the same.
-11.10.2001 KGameDialogGeneralConfig now doesn't provide setMin/maxPlayers()
- anymore. The game should manage this internally. tqlayout() is
- obsolete as well
-18.10.2001 KPlayer::signalNetworkData contained QDataStream& instead of const
- QByteArray& parameter (oops!). This is fixed now. All apps which
- used this signal must be changed.
-18.10.2001 KGame::sendProperty(), KGame::sendPlayerProperty(),
- KPlayer::sendProperty() and related functions contain a "int msgid"
- parameter. This is the id() of the property handler. This parameter
- enables us to easily add any number of property handler to a game
- just by connecting it to existing send Q_SLOTS and call
- processMessage() in slotNetworkData()
-03.11.2001 KPlayer::signalNetworkData now emits msgid-KGameMessage::IdUser just
- like KGame::signalNetworkData does
-06.11.2001 KGameDialog has some small improvements - easier and IMHO better
- constructor code. Most code should be compatible :-)
diff --git a/libkdegames/kgame/DESIGN b/libkdegames/kgame/DESIGN
deleted file mode 100644
index cd737e3a..00000000
--- a/libkdegames/kgame/DESIGN
+++ /dev/null
@@ -1,407 +0,0 @@
-This document tries to describe the design of KGame - the KDE multiplayer
-library.
-This document has been written by:
- Andreas Beckermann <b_mann@gmx.de>
- M. Heni <martin@heni-online.de>
- Burkhard Lehner <Burkhard.Lehner@gmx.de>
-
-This document is published under the terms of the GNU FDL
-
-!!!
-Note that this is the initial version of this document and has not yet been
-aproved by all core developers (and is far from being complete)
-AB: please remove this comments as soon as all KGame hackers have read the
-document
-!!!
-
-Please refer the API documentation of every KGame class if you want up tp date
-information.
-
-
-0. Contents
------------
-
-1. DEFINITIONS
-1.1 Message Server
-1.2 Client or Message Client
-1.3 Master
-1.4 Admin
-1.5 Server
-1.6 Player
-
-2. Game Negotiation (M.Heni 20.05.2001)
-
-AB: 3.x is obsolete!
-3. Game Properties (Andreas Beckermann 28.07.2001) ( not yet completed )
-3.1 Using KGameProperty
-3.2 Custom Classes
-3.3 Concepts
-
-4. KGameIO (Andreas Beckermann 10.08.2001)
-
-5. Debugging (Andreas Beckermann 06.10.2001) TODO!
-5.1 KGameDebugDialog
-5.1.1 Debug KGame
-5.1.3 Debug Messages
-
----------------------------------------------------------------------
-1. DEFINITIONS
---------------
-
-First we have to clear some words. The main expressions used in KGame which
-need a definition are
-
-1.1 Message Server
-1.2 Client or Message Client
-1.3 Master
-1.4 Admin
-1.5 Server
-1.6 Player
-
-The most important and confusing ones are Master, Admin and Server. We make
-quite big differerences between those inside KGame.
-
-1.1 Message Server:
--------------------
-A game has always exactly one object of this class, for local games as well as
-for network games. For network games, this object can be on one of the users
-processes (usually inside KGame), or it can also be on an independant computer,
-that has no idea about what game is played on it.
-
-A KMessageClient object can connect to it. It's main purpose is transmitting
-messages between KMessageClient objects.
-
-The Message Server is the main communication object. It is represented by the
-class KMessageServer. Note that there is also a "Master" and a "Server" which
-both differ heavily from the Message Server!
-
-1.2 Client, Message Client:
----------------------------
-Each process that wants to take part in the game must have a
-KMessageClient object, that is connected to the Message Server. KGame creates
-this object and connects it to the Messager Server, so that you usually don't
-need to create these of your own. Even in a local game (no network) there
-must be a message server and one message client connected to it. This is usually
-done by the KGame object itself.
-
-Each message client has a unique ID number (a positive integer value, not zero).
-The KMessageClient object, which does the communication with the Message Server
-is called "Message Client" and to simplify the use we call any KGame object (or
-even the game process) that is connected to a game (i.e. even the Master) just
-"Client".
-
-The main purpose of a Client is to connect to a Master (i.e. to a game) and to
-communicate with it. A client has always a KGame object.
-
-1.3 Master:
------------
-The process that contains the Message Server is called "Master". In any local
-game this is the game process. The Message Server is started by KGame using
-KGame::setMaster(true) which is automatically done on startup. The Message
-Server is deleted automatically as soon as you connect to another Master.
-So in most cases there is exactly one KGame object / Client which is Master. But
-in one case there can be no KGame object / Client that is Master - if the
-Message Server is started as an own process. This "Message-Server-only" process
-is called "Master" then, although there is no KGame object which is Master. See
-also the definition of Admin!
-
-1.4 Admin:
-----------
-One (and only one) of the Clients is the Admin. He can configure the Message
-Server and the game in general in several ways. He can limit the maximum number
-of connected message clients and can drop the connection to some other clients,
-as well as he can configure game specific ssettings (like max/min players, start
-money, ...). The Admin also initializes newly connected Clients. If the Admin
-himself disconnects, another Client becomes Admin (The Admin can himself elect
-some other Client to become Admin. He himself loses that Admin status then).
-An Admin is *alway* a KGame object. The Admin is usually the same as the Master,
-but if the Master is an own process (i.e. the Message Server has been started
-outside KGame) then Master and Admin differ. An Admin *must* be a KGame object
-while the Master doesn't have to be.
-
-1.5 Server:
------------
-The definition of Server differs quite much from the definition of Master.
-A Master just accepts connections and forwards messages. The Server on the other
-side checks these messages, calculates results and sends the results to the
-Clients. That means the Server does all game calculations and doesn't directly
-forward the messages from one Clients to all other Clients.
-KGamer makes it possible to write multiplayer games even without a Server. All
-Clients just send their moves to the Master which forwards them to all Clients.
-Now all Clients calculate the result.
-E.g. in a poker game a player selects two of five cards to be exchanges and
-clicks on "draw" then the client sends the message "Exchange Card-1 and Card-2"
-to the Master. A no-Server solution forwards this to all Clients, and these
-Clients exchange the cards of the player. Note that in a no-Server solution
-(you can also see it as a "every-Client-is-a-Server solution") all Clients must
-have the same random seed and must be of the same version, i.e. the result must
-be the same on all Clients.
-In a Server-Solution on the other hand the Master forwards the Message
-("Exchange Card-1 and Card-2") to the Server only. This Server now calculates
-the result, and sends the new cards back to the Client.
-Both concepts have advantages and disadvantages. It is on you - the game
-developer - to decide which way is better for you.
-E.g. the Server-Solution makes it easier for you to write games. The version
-must not necessarily be the same, you have one central computer which does the
-calcultations. The No-Server-Solution on the other hand decreases network
-traffik as the Clients just send their moves and all Clients can calculate the
-reactions. I'm sure there are a lot of advantages/disadvantages more for both
-concepts.
-
-1.6 Player:
------------
-A KPlayer object is always connected to a KGame object and represents a
-player that participates the game. In a network game, every KPlayer object is
-duplicated on every other KGame object connected to the message server with
-virtual KPlayer objects. So at every time in the game, every KGame object has
-the same number of KPlayer objects.
-
-
-2. Game negotiation
--------------------
-Upon connection of a client the admin and the client try to negotiate
-the game setup. Basically this means the game of the admin is transferred
-(saved) on the client. However, the client's players are added to the game
-as far as possible. If the addition of the client's players would add more
-players than allowed some players are inactivated. Which players are
-inactivated depends on their networkPriority(). This procedure allows
-easy replacement of players in a constant number game (e.g. chess). If
-this feature is of no interest simply keep the priorities equal (all 0)
-and the client will only add only players if the number of players is
-less or equal the maximum player number.
-
-The following is the negotiation procedure as started by the connection
-of a client. It is initiated in the negotiateNetworkGame() virtual function
-of KGame:
-
-admin: client:
------------- ------------
-IdSetupGame
- QINT16 Library
- Version
- QINT32 Application
- cookie
- IdSetupGameContinue;
- QValueList<int> player id's
- QValueList<int> network priority's
-
-IdGameLoad
- all game data
-
-IdGameReactivate
- QValueList<int> id's
-
-IdSyncRandom
- int randomseed
-
-
-3. Game Properties
-------------------
-A very hard task in a network game is consistency. You have to achieve that all
-properties of the game and of all players have the same value on all clients
-every time. This is because
-a) the user might be confused if he sees "Player has $0" on client A but
-"Player has $10" on client B and
-b) Often game handling depends on those values, e.g. if the example above
-happens the computer might quit the game for the Player on client A because
-he/she doesn't have enough money. But the game continues on client B.
-Another not that easy task is the network protocol itself. You have to write
-several send() and receive() functions which apply changed values of properties
-to the local property.
-
-KGameProperty is designed to do all of this for you. KGameProperty is
-implemented as a template so you can use it theoretically for every type of data
-- even for your self defined classes.
-
-
-3.1 Using KGameProperty
------------------------
-It is basically very easy to use a KGameProperty. You first create your own
-class containing the property, e.g:
-class MyGame : public KGame
-{
-[...]
-protected:
- KGamePropertyInt money;
- KGamePropertyQString name;
- KGameProperty<AntotherClass> myProperty;
-};
-KGamePropertyInt is just a typedef for KGameProperty<int> - just like
-KGamePropertyQString. Now you need to register the properties in the constructor
-of the class to the KGamePropertyHandler:
-MyGame::MyGame() : KGame(myCookie)
-{
- money.registerData(KGamePropertyBase::IdUser+1, dataHandler(), "Money");
- name.registerData(KGamePropertyBase::IdUser+2, this, "Name");
- myProperty.registerData(KGamePropertyBase::IdUser+3, dataHandler(), "MyProperty");
-}
--> You need to specify a *unique* ID. This ID must be greater than
-KGamePropertyBase::IdUser. IDs below this are reserved for KGame. Probably this
-will be changed so that you cannot use IDs below IdUser in the future. Then you
-have to specify the dataHandler(). You can also use a KGame or KPlayer pointer.
-This will automatically use KGame::dataHandler() or KPlayer::dataHandler().
-Finally you *can* provide a name for the property. This will be used for
-debugging in KGameDebugDialog. If you want to save some memory you can leave
-this out.
-Note that if you use pointers to create the properties dynamically they are
-*not* deleted automatically! You MUST delete them yourself!
-Now you can use the KGameProperty like every variable else. See also Section
-"3.3 Concepts" for restrictions in use.
-
-3.2 Custom Classes
-------------------
-To make custom classes possible you have to implement several operators for your
-them: you need at least << and >> for QDataStream as well as "==" for your own
-class. To overload the "<<" you would e.g. do something like this:
-QDataStream& operator<<(QDataStream& stream, MyData& data)
-{
- int type = data.type;
- QString name = data.name;
- stream << type << name;
- return stream;
-}
-So you basically just have to split your class to several basic types and stream
-them.
-
-3.3 Concepts
-------------
-You can use KGameProperty basically in two completely different ways. You can
-also use a mixture of both but this is not recommended. The default behaviour
-and therefore also the recommended is the "clean" way:
-a) Always Consistent. This means that a KGameProperty has always the same value
-on *every* client. This is achieved by using KGameProperty::send() whenever you
-want to change the value using "=". You can still use changeValue() or
-setLocal() but send() will be the default. If you use send() then the value of
-the property does *NOT* change immediately. It is just sent to the
-KMessageServer which forwards the value to all clients. As soon as the new value
-is received from the message server the KGamePropertyHandler (a collection class
-for KGameProperty) calls KGameProperty::load() and changes the value of the
-property. So the game first has to go into the event loop, where the message is
-received. This means to you that you cannot do this:
-myIntProperty = 10;
-int value = myIntProperty;
-As myIntPoperty still has the old value when "value = myIntProperty" is called.
-This might seem to be quite complex, but
-KGamePropertyHandler::signalPropertyChanged() is emitted whenever a new value is
-assigned so you can connect to this and work immediately with the new value.
-You gain the certainty that the value is the same on every client every time.
-That will safe you a lot of time debugging!
-Another way is the "dirty" way:
-b) Not Always Consistent. Sometimes you really *want* to do something like
-myIntProperty = 10;
-int value = myIntProperty;
-but this is not possible with the default behaviour. If you call
-KGameProperty::setAlwaysConsistent(false) in the constructor (right after
-registerData()) you get another behaviour. "=" means changeValue() now.
-changeValue() also uses send() to change the value but additionally calls
-setLocal() to create a local copy of the property. This copy now has the value
-you supplied with "=" and is deleted again as soon as any value from the network
-is received.
-
-4. KGameIO
-----------
-The class KGameIO is used to let the players communicate with the server. You
-can plug as many KGameIO objects into a player as you want, e.g. you can plug a
-KGameMouseIO and a KGameKeyIO into a player so that you can control the player
-with the mouse and the keyboard - e.g. in a breakout game.
-You can probably see the advantage: as most of the control stuff is common in a
-lot of games you can use the same IO class in many different games with very
-small adjustments.
-You could also put all the IO stuff directly into your KPlayer object, like
-sendBet(int money) for a poker game. But there is a major disadvantage and I'm
-very sure you don't want to use a KPlayer object for your IO stuff as soon as
-you know which disadvantage:
-KGameIO is designed to be able to switch between different IOs "on the fly". So
-you might have a KGamePlayerIO, derived from KGameIO, for your game. But now
-this player (who "owns"/uses the KGamePlayerIO) leaves the game (e.g. because he
-was a remote player). So now the game would be over for every player as one
-player is now out of order. But with KGameIO you can just let any of the
-remaining clients create a KGameComputerIO and plug this into the player. So the
-player now is controlled by the computer and the game can continue.
-
-Think about it! You don't have to care about removing players when a player
-leaves as you can just replace it! The same works the other way round: imagine a
-game with 10 player (e.g. 5 human and 5 computer players) that has already
-started. You cannot add any further players without restarting. So if there are
-any additional player you can just call KPlayer::removeGameIO() which removes
-the IO of a computer player and then call KPlayer::addGameIO() for the same
-player which adds a GameIO for new human player. That's all!
-
-To achieve this you just have to make sure that you make *all* of your IO
-operations through a KGameIO! So instead of using MyPlayer::sendBet(int money)
-you should use something like MyIO::sendBet(). The amount of money would
-probably be calculated by the game IO itself.
-
-
-
-5. Debugging
-------------
-The general debugging concept (if there is one at all) or general debugging
-hints are not yet written. Feel free to do so
-
-5.1 KGameDebugDialog
---------------------
-A nice way of debugging a KGame based game is the KGameDebugDialog. Basically
-all you have to do is to add something like "Debug" to your game's menu and add
-a slot like
-slotDebug()
-{
- KGameDebugDialog* dialog = new KGameDebugDialog(mGame, this);
- connect(dialog, SIGNAL(finished()), dialog, SLOT(slotDelayedDestruct()));
- dialog->show();
-}
-that's it.
-You can now click on that menu entry and you get a non-modal dialog where you
-can start to debug :-)
-The dialog consist of several pages. You can easily add your own using
-KDialogBase::addVBoxPage() (for example).
-
-5.1.1 Debug KGame
------------------
-The first page, "Debug KGame" shows on the left most or even all status values of
-KGame. That contains e.g. minPlayers(), isAdmin(), gametqStatus(), ...
-The right side is probably the more important one. It lists *all* KGameProperties
-which have been inserted to this KGame object (only to this KGame object - not
-the ones that have been added to the players!). Most of the status variables of
-the left side are here again as they are implemented as KGameProperty. You can
-see the name of the property (together with its ID), its value and the policy
-this property uses. Note that "unknwon" will be displayed as name of the
-property if you haven't supplied one. See KGamePropertyBase::registerData() for
-info. You probably always want to supply a name for the property to debug it
-easily. In the future there will be something like
-KGamePropertyHandler::setDebug() so that you can switch off debugging and save
-the memory of the names in a release version.
-For as long as you use standard types for your properties (int, long, bool,
-...) you should always be able to see the value of the property. If you just see
-"unknown" then this type has not been implemented. You can connect to the signal
-KGamePropertyHandler::signalRequestValue() and supply a QString with the value
-yourself. If you do so for a standard type please also submit a bug report!
-
-Currently the dialog does *not* update automatically! So you alway have to click
-the "update" button when you want a current value. There are several reasons for
-this (and one of them is that i'm too lazy to implement the update ;)). E.g.
-often (very often) a property is just in the background - stores e.g. the
-available money in a game. But you don't want it to update whenever the value
-changes (a player receives/pays money) but only when the value on the screen
-changes.
-
-5.1.2 Debug Players
--------------------
-This page consists of three widgets. On the very left there is a list of all
-players in the game. Only the IDs are displayed to save space. If you click one
-the other widgets are filled with content. These widgets are quite much the same
-as the ones in "Debug KGame" - the left shows the value of the functions and the
-right one displays all KProperties of a player. Not much to say here - except:
-See "Debug KGame".
-
-If you change to another player the value are also updated.
-
-5.1.3 Debug Messages
---------------------
-This page is probably not as important as the other ones. It displays *every*
-message that is sent through the KGame object. As a KGameProperry also send
-messages you probably get a lot of them...
-You can exclude message IDs from being displayed (e.g. all game properties).
-You can also change the sorting of the list to see all messages of a certain ID.
-The default is to sort by time (which is displayed on the left side).
-
diff --git a/libkdegames/kgame/Makefile.am b/libkdegames/kgame/Makefile.am
deleted file mode 100644
index f49bc653..00000000
--- a/libkdegames/kgame/Makefile.am
+++ /dev/null
@@ -1,29 +0,0 @@
-
-noinst_LTLIBRARIES = libkgame.la
-
-# compile-order doesn't matter here but maybe we will split these section soon
-
-KGAME = kgame.cpp kplayer.cpp kgamenetwork.cpp kgameproperty.cpp \
- kgamemessage.cpp kgameio.cpp kgameprocess.cpp kgamechat.cpp \
- kgamepropertyhandler.cpp kgameerror.cpp kgamesequence.cpp
-KGAME_H = kgame.h kplayer.h kgamenetwork.h kgameproperty.h kgamemessage.h \
- kgameio.h kgameprocess.h kgamepropertyarray.h \
- kgamepropertylist.h kgamechat.h kgamepropertyhandler.h \
- kgameerror.h kgamesequence.h kgameversion.h
-
-KMESSAGE = kmessageio.cpp kmessageserver.cpp kmessageclient.cpp
-KMESSAGE_H = kmessageio.h kmessageserver.h kmessageclient.h
-
-libkgameincludedir=$(includedir)/kgame
-libkgame_la_SOURCES = $(KMESSAGE) $(KGAME)
-
-libkgameinclude_HEADERS = $(KMESSAGE_H) $(KGAME_H)
-
-INCLUDES = -I$(top_srcdir)/libtdegames $(all_includes)
-METASOURCES = AUTO
-
-SUBDIRS = . dialogs
-
-messages:
-# $(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot
-
diff --git a/libkdegames/kgame/README.LIB b/libkdegames/kgame/README.LIB
deleted file mode 100644
index 512edbac..00000000
--- a/libkdegames/kgame/README.LIB
+++ /dev/null
@@ -1,12 +0,0 @@
-some thoughts and comments about the lib - usually for KGame hackers
-
-- setMin/MaxPlayers() etc. use KGameProperty::changeValue() which is slightly
- unclean but as these functions can only called by the ADMIN it doesn't matter.
-- AB: KGamePropertyList && KGamePropertyArray:
- for PolicyClean||PolicyDirty the values are streamed into a QDataStream as usual
- for PolicyDirty||PolicyLocal the values are streamed as well but
- additionally command() is called immediately. The values are read from
- the stream there. This is some kind of performance loss as it would be
- faster *not* to stream it but imediately call e.g. insert(). But it will
- probably save a *lot* of bugs!
-
diff --git a/libkdegames/kgame/TODO b/libkdegames/kgame/TODO
deleted file mode 100644
index 2f100b8a..00000000
--- a/libkdegames/kgame/TODO
+++ /dev/null
@@ -1,41 +0,0 @@
-- 28.02.2001: Direct computer player for kpoker like games support needs to be
- improved. UPDATE (01/10/06): but what is needed there?
-- 05.03.2001: Documentation. I am thinking of an explaination of the
- class + methods and example code for the "key" methods. A sample
- implementation in a small game (like the current kdenonbeta/kgame
- but with a real sense - mabye use the QT tic-tac-toe example?)
- would be very great (this could be stuff of a tutorial instead of
- KGame documentation)
- MH: Even better idea
-- 03.06.2001: can KGameNetwork::sendSystemMessage be made protected (maybe using
- friends)? sendSystenMessage AND sendMessage is very confusing to
- the user...
-- 03.06.2001: can we translate the group of a KPlayer? Probably not as there are
- no international connections possible then... maybe a group id?
-- 05.06.2001: KGameDialog::saveConfig(KConfig*) might be useful (as well as
- KGameDialog::loadConfig(KConfig*). Should set an own group in the
- config file (setGroup("KGameDialog")). Problem: shalll network
- settings be saved? Could be used for startup configuration (i.e.
- load the config of the previous game) otherwise.
-- 21.06.2001: KPlayerPropertyArray does not yet support at() and operator[]
- assignments. Need to check whether the method from QBitArray
- can be applied
-- 02.04.2001: VERY DANGEROUS: property1=property2 does NOT assign the values, e.g. int
- but assignes the whole property, i.e. you have then two properties with
- the same id and everything is wrong
- 01/09/09: FIXED! (AB) TODO: check if this behavior also appears in
- KGamePropertyList and KGamePropertyArray. Althogh this should not
- be the case
-- 23.09.2001: does the virtual destructor make sense for KGamePropertyBase?
-- 29.09.2001: GGZ integration. I (Andi) already volunteered for this - it's just
- here so that I don't forget it
-- 06.10.2001: add KGamePropertyHandler::setDebug(false) to clear all debug names
- (and to not accept new names) of KGameProperty. Will save some
- memory
-- 06.10.2001: If one kicks a player (in KGameDialog) the client should be kicked
- as well. Perhaps always disconnect a client when all players from
- it have disappeared?
-- 07.10.2001: display (List) or (Array) for KGameProperty[List|Array] in
- KGameDebugDialog as value
-- 08.10.2001: KGamePropertyList|KGamePropertyArray must be ported to new QT3 API
- (e.g. erase instead of remove, ...)
diff --git a/libkdegames/kgame/dialogs/Makefile.am b/libkdegames/kgame/dialogs/Makefile.am
deleted file mode 100644
index f3c1adbe..00000000
--- a/libkdegames/kgame/dialogs/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-
-noinst_LTLIBRARIES = libkgamedialogs.la
-
-# compile-order doesn't matter here but maybe we will split these section soon
-
-
-libkgamedialogs_la_SOURCES = kgamedialog.cpp kgameconnectdialog.cpp kgameerrordialog.cpp kgamedebugdialog.cpp kgamedialogconfig.cpp
-
-libkgamedialogsincludedir=$(includedir)/kgame
-libkgamedialogsinclude_HEADERS = kgamedialog.h kgameconnectdialog.h kgameerrordialog.h kgamedebugdialog.h kgamedialogconfig.h
-
-INCLUDES = -I$(top_srcdir)/libtdegames -I$(top_srcdir)/libtdegames/kgame $(all_includes)
-METASOURCES = AUTO
-
-messages:
-# $(XGETTEXT) `find . -name \*.h -o -name \*.cpp -o -name \*.cc` -o $(podir)/libtdegames.pot
-
diff --git a/libkdegames/kgame/dialogs/kgameconnectdialog.cpp b/libkdegames/kgame/dialogs/kgameconnectdialog.cpp
deleted file mode 100644
index 98958ffd..00000000
--- a/libkdegames/kgame/dialogs/kgameconnectdialog.cpp
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-
-#include "kgameconnectdialog.h"
-
-#include <knuminput.h>
-#include <klocale.h>
-
-#include <tqlineedit.h>
-#include <tqcombobox.h>
-#include <tqvbuttongroup.h>
-#include <tqlayout.h>
-#include <tqradiobutton.h>
-#include <tqlabel.h>
-#include <dnssd/servicebrowser.h>
-#include <tqpushbutton.h>
-#include <tqgrid.h>
-
-class KGameConnectWidgetPrivate
-{
- public:
- KGameConnectWidgetPrivate()
- {
- mPort = 0;
- mHost = 0;
- mButtonGroup = 0;
- mBrowser = 0;
- }
-
- KIntNumInput* mPort;
- TQLineEdit* mHost; //KLineEdit?
- TQVButtonGroup* mButtonGroup;
- TQComboBox *mClientName;
- TQLabel *mClientNameLabel;
- DNSSD::ServiceBrowser *mBrowser;
- TQLabel *mServerNameLabel;
- TQLineEdit *mServerName;
- TQString mType;
-};
-
-KGameConnectWidget::KGameConnectWidget(TQWidget* parent) : TQWidget(parent)
-{
- d = new KGameConnectWidgetPrivate;
-
- TQVBoxLayout* vb = new TQVBoxLayout(this, KDialog::spacingHint());
- d->mButtonGroup = new TQVButtonGroup(this);
- vb->addWidget(d->mButtonGroup);
- connect(d->mButtonGroup, TQT_SIGNAL(clicked(int)), this, TQT_SLOT(slotTypeChanged(int)));
- (void)new TQRadioButton(i18n("Create a network game"), d->mButtonGroup);
- (void)new TQRadioButton(i18n("Join a network game"), d->mButtonGroup);
-
- TQGrid* g = new TQGrid(2, this);
- vb->addWidget(g);
- g->setSpacing(KDialog::spacingHint());
- d->mServerNameLabel = new TQLabel(i18n("Game name:"), g);
- d->mServerName = new TQLineEdit(g);
- d->mClientNameLabel = new TQLabel(i18n("Network games:"), g);
- d->mClientName = new TQComboBox(g);
- connect(d->mClientName,TQT_SIGNAL(activated(int)),TQT_SLOT(slotGameSelected(int)));
- (void)new TQLabel(i18n("Port to connect to:"), g);
- d->mPort = new KIntNumInput(g);
- (void)new TQLabel(i18n("Host to connect to:"), g);
- d->mHost = new TQLineEdit(g);
-
- TQPushButton *button=new TQPushButton(i18n("&Start Network"), this);
- connect(button, TQT_SIGNAL(clicked()), this, TQT_SIGNAL(signalNetworkSetup()));
- vb->addWidget(button);
- // Hide until type is set
- d->mClientName->hide();
- d->mClientNameLabel->hide();
- d->mServerName->hide();
- d->mServerNameLabel->hide();
-}
-
-void KGameConnectWidget::showDnssdControls()
-{
- if (!d->mBrowser) return;
- if (d->mHost->isEnabled()) { // client
- d->mClientName->show();
- d->mClientNameLabel->show();
- d->mServerName->hide();
- d->mServerNameLabel->hide();
- slotGameSelected(d->mClientName->currentItem());
- } else {
- d->mClientName->hide();
- d->mClientNameLabel->hide();
- d->mServerName->show();
- d->mServerNameLabel->show();
- }
-}
-
-void KGameConnectWidget::setType(const TQString& type)
-{
- d->mType = type;
- delete d->mBrowser;
- d->mBrowser = new DNSSD::ServiceBrowser(type);
- connect(d->mBrowser,TQT_SIGNAL(finished()),TQT_SLOT(slotGamesFound()));
- d->mBrowser->startBrowse();
- showDnssdControls();
-}
-
-void KGameConnectWidget::slotGamesFound()
-{
- bool autoselect=false;
- if (!d->mClientName->count()) autoselect=true;
- d->mClientName->clear();
- TQStringList names;
- TQValueList<DNSSD::RemoteService::Ptr>::ConstIterator itEnd = d->mBrowser->services().end();
- for (TQValueList<DNSSD::RemoteService::Ptr>::ConstIterator it = d->mBrowser->services().begin();
- it!=itEnd; ++it) names << (*it)->serviceName();
- d->mClientName->insertStringList(names);
- if (autoselect && d->mClientName->count()) slotGameSelected(0);
-}
-
-void KGameConnectWidget::setName(const TQString& name)
-{
- d->mServerName->setText(name);
-}
-
-TQString KGameConnectWidget::gameName() const
-{
- return d->mServerName->text();
-}
-
-TQString KGameConnectWidget::type() const
-{
- return d->mType;
-}
-
-void KGameConnectWidget::slotGameSelected(int nr)
-{
- if (nr>=(d->mBrowser->services().count()) || nr<0) return;
- if (!d->mHost->isEnabled()) return; // this is server mode, do not overwrite host and port controls
- DNSSD::RemoteService::Ptr srv = d->mBrowser->services()[nr];
- if (!srv->isResolved() && !srv->resolve()) return;
- d->mHost->setText(srv->hostName());
- d->mPort->setValue(srv->port());
-}
-KGameConnectWidget::~KGameConnectWidget()
-{
- delete d->mBrowser;
- delete d;
-}
-
-TQString KGameConnectWidget::host() const
-{
- if (d->mHost->isEnabled()) {
- return d->mHost->text();
- } else {
- return TQString();
- }
-}
-
-unsigned short int KGameConnectWidget::port() const
-{
- return d->mPort->value();
-}
-
-void KGameConnectWidget::setHost(const TQString& host)
-{
- d->mHost->setText(host);
-}
-
-void KGameConnectWidget::setPort(unsigned short int port)
-{
- d->mPort->setValue(port);
-}
-
-void KGameConnectWidget::setDefault(int state)
-{
- d->mButtonGroup->setButton(state);
- slotTypeChanged(state);
-}
-
-void KGameConnectWidget::slotTypeChanged(int t)
-{
- if (t == 0) {
- d->mHost->setEnabled(false);
- } else if (t == 1) {
- d->mHost->setEnabled(true);
- }
- showDnssdControls();
- emit signalServerTypeChanged(t);
-}
-
-class KGameConnectDialogPrivate
-{
- public:
- KGameConnectDialogPrivate()
- {
- mConnect = 0;
- }
-
- KGameConnectWidget* mConnect;
-};
-
-// buttonmask =Ok|Cancel
-KGameConnectDialog::KGameConnectDialog(TQWidget* parent,int buttonmask) : KDialogBase(Plain,
- i18n("Network Game"),buttonmask , Ok, parent, 0, true, buttonmask!=0)
-{
- d = new KGameConnectDialogPrivate;
- TQVBoxLayout* vb = new TQVBoxLayout(plainPage(), spacingHint());
- d->mConnect = new KGameConnectWidget(plainPage());
- vb->addWidget(d->mConnect);
-}
-
-KGameConnectDialog::~KGameConnectDialog()
-{
- delete d;
-}
-
-int KGameConnectDialog::initConnection( unsigned short int& port,
- TQString& host, TQWidget* parent, bool server)
-{
- KGameConnectDialog d(parent);
- d.setHost(host);
- d.setPort(port);
- if (server) {
- d.setDefault(0);
- } else {
- d.setDefault(1);
- }
-
- int result = d.exec();
- if (result == TQDialog::Accepted) {
- host = d.host();
- port = d.port();
- }
- return result;
-}
-
-TQString KGameConnectDialog::host() const
-{
- return d->mConnect->host();
-}
-
-unsigned short int KGameConnectDialog::port() const
-{
- return d->mConnect->port();
-}
-
-void KGameConnectDialog::setHost(const TQString& host)
-{
- d->mConnect->setHost(host);
-}
-
-void KGameConnectDialog::setPort(unsigned short int port)
-{
- d->mConnect->setPort(port);
-}
-
-void KGameConnectDialog::setDefault(int state)
-{
- d->mConnect->setDefault(state);
-}
-
-
-
-#include "kgameconnectdialog.moc"
-
diff --git a/libkdegames/kgame/dialogs/kgameconnectdialog.h b/libkdegames/kgame/dialogs/kgameconnectdialog.h
deleted file mode 100644
index 0a14183d..00000000
--- a/libkdegames/kgame/dialogs/kgameconnectdialog.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMECONNECTDIALOG_H__
-#define __KGAMECONNECTDIALOG_H__
-
-#include <kdialogbase.h>
-
-class KGameConnectDialogPrivate;
-class KGameConnectWidgetPrivate;
-
-class KGameConnectWidget : public TQWidget
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameConnectWidget(TQWidget* parent);
- virtual ~KGameConnectWidget();
-
- /**
- * @param host The host to connect to by default
- **/
- void setHost(const TQString& host);
-
- /**
- * @return The host to connect to or TQString() if the user wants to
- * be the MASTER
- **/
- TQString host() const;
-
- /**
- * @param port The port that will be shown by default
- **/
- void setPort(unsigned short int port);
-
- /**
- * @return The port to connect to / to listen
- **/
- unsigned short int port() const;
-
- /**
- * Specifies which state is the default (0 = server game; 1 = join game)
- * @param state The default state. 0 For a server game, 1 to join a game
- **/
- void setDefault(int state);
-
- /**
- * Sets DNS-SD service type, both for publishing and browsing
- * @param type Service type (something like _kwin4._tcp).
- * It should be unique for application.
- * @since 3.4
- **/
- void setType(const TQString& type);
-
- /**
- * @return service type
- */
- TQString type() const;
-
- /**
- * Set game name for publishing.
- * @param name Game name. Important only for server mode. If not
- * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
- */
- void setName(const TQString& name);
-
- /**
- * @return game name.
- */
- TQString gameName() const;
-
-protected slots:
- /**
- * The type has changed, ie the user switched between creating or
- * joining.
- **/
- void slotTypeChanged(int);
- void slotGamesFound();
- void slotGameSelected(int);
-
-signals:
- void signalNetworkSetup();
- void signalServerTypeChanged(int);
-
-private:
- void showDnssdControls();
- KGameConnectWidgetPrivate* d;
-
-};
-
-/**
- * @short Dialog to ask for host and port
- *
- * This Dialog is used to create a game. You call initConnection(port,
- * TQString(), parent, true) to create a network game (as a server)
- * or initConnection(port, host, parent) to join a network game.
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameConnectDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameConnectDialog(TQWidget* parent = 0,int buttonmask=Ok|Cancel);
- virtual ~KGameConnectDialog();
-
- /**
- * Shows a dialog to either connect to an existing game or to create a
- * server game, depending on user's choice.
- * @param port The port the user wants to connect to.
- * @param host The host the user wants to connect to. Will be
- * TQString() if server game is chosen
- * @param parent The parent of the dialog
- * @param server True to create a network game per default, false to
- * join a game by default
- **/
- static int initConnection(unsigned short int& port, TQString& host, TQWidget* parent, bool server = false);
-
- /**
- * @param host The host to connect to by default
- **/
- void setHost(const TQString& host);
-
- /**
- * @return The host to connect to or TQString() if the user wants to
- * be the MASTER
- **/
- TQString host() const;
-
- /**
- * @param port The port that will be shown by default
- **/
- void setPort(unsigned short int port);
-
- /**
- * @return The port to connect to / to listen
- **/
- unsigned short int port() const;
-
- /**
- * Specifies which state is the default (0 = server game; 1 = join game)
- * @param state The default state. 0 For a server game, 1 to join a game
- **/
- void setDefault(int state);
-
-signals:
- void signalNetworkSetup();
-
-private:
- KGameConnectDialogPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/dialogs/kgamedebugdialog.cpp b/libkdegames/kgame/dialogs/kgamedebugdialog.cpp
deleted file mode 100644
index 49623238..00000000
--- a/libkdegames/kgame/dialogs/kgamedebugdialog.cpp
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kgamedebugdialog.h"
-
-#include "kgamemessage.h"
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgamepropertyhandler.h"
-
-#include <klistview.h>
-#include <klistbox.h>
-#include <klocale.h>
-#include <kdebug.h>
-#include <kpushbutton.h>
-#include <kstdguiitem.h>
-
-#include <tqlayout.h>
-#include <tqstring.h>
-#include <tqintdict.h>
-#include <tqlabel.h>
-#include <tqdatetime.h>
-
-#include <typeinfo>
-
-
-class KGameDebugDialogPrivate
-{
-public:
- KGameDebugDialogPrivate()
- {
- mGame = 0;
-
- mGamePage = 0;
- mGameProperties = 0;
- mGameAddress = 0;
- mGameId = 0;
- mGameCookie = 0;
- mGameMaster = 0;
- mGameAdmin = 0;
- mGameOffering = 0;
- mGametqStatus = 0;
- mGameRunning = 0;
- mGameMaxPlayers = 0;
- mGameMinPlayers = 0;
- mGamePlayerCount = 0;
-
- mPlayerPage = 0;
- mPlayerList = 0;
- mPlayerProperties = 0;
- mPlayerAddress = 0;
- mPlayerId = 0;
- mPlayerName = 0;
- mPlayerGroup = 0;
- mPlayerUserId = 0;
- mPlayerMyTurn = 0;
- mPlayerAsyncInput= 0;
- mPlayerKGameAddress = 0;
- mPlayerVirtual = 0;
- mPlayerActive = 0;
- mPlayerRtti = 0;
- mPlayerNetworkPriority = 0;
-
- mMessagePage = 0;
- mMessageList = 0;
- mHideIdList = 0;
- }
-
- const KGame* mGame;
-
- TQFrame* mGamePage;
- KListView* mGameProperties;
- TQListViewItem* mGameAddress;
- TQListViewItem* mGameId;
- TQListViewItem* mGameCookie;
- TQListViewItem* mGameMaster;
- TQListViewItem* mGameAdmin;
- TQListViewItem* mGameOffering;
- TQListViewItem* mGametqStatus;
- TQListViewItem* mGameRunning;
- TQListViewItem* mGameMaxPlayers;
- TQListViewItem* mGameMinPlayers;
- TQListViewItem* mGamePlayerCount;
-
- TQFrame* mPlayerPage;
- KListBox* mPlayerList;
- KListView* mPlayerProperties;
- TQListViewItem* mPlayerAddress;
- TQListViewItem* mPlayerId;
- TQListViewItem* mPlayerName;
- TQListViewItem* mPlayerGroup;
- TQListViewItem* mPlayerUserId;
- TQListViewItem* mPlayerMyTurn;
- TQListViewItem* mPlayerAsyncInput;
- TQListViewItem* mPlayerKGameAddress;
- TQListViewItem* mPlayerVirtual;
- TQListViewItem* mPlayerActive;
- TQListViewItem* mPlayerRtti;
- TQListViewItem* mPlayerNetworkPriority;
-
- TQFrame* mMessagePage;
- KListView* mMessageList;
- KListBox* mHideIdList;
-};
-
-KGameDebugDialog::KGameDebugDialog(KGame* g, TQWidget* parent, bool modal) :
- KDialogBase(Tabbed, i18n("KGame Debug Dialog"), Close, Close,
- parent, 0, modal, true)
-{
- d = new KGameDebugDialogPrivate;
-
- initGamePage();
- initPlayerPage();
- initMessagePage();
-
- setKGame(g);
-}
-
-KGameDebugDialog::~KGameDebugDialog()
-{
- delete d;
-}
-
-void KGameDebugDialog::initGamePage()
-{
- d->mGamePage = addPage(i18n("Debug &KGame"));
- TQVBoxLayout* topLayout = new TQVBoxLayout(d->mGamePage, marginHint(), spacingHint());
- TQHBoxLayout* tqlayout = new TQHBoxLayout(topLayout);
-
- KListView* v = new KListView(d->mGamePage);
- v->addColumn(i18n("Data"));
- v->addColumn(i18n("Value"));
- tqlayout->addWidget(v);
-
- d->mGameProperties = new KListView(d->mGamePage);
- d->mGameProperties->addColumn(i18n("Property"));
- d->mGameProperties->addColumn(i18n("Value"));
- d->mGameProperties->addColumn(i18n("Policy"));
- tqlayout->addWidget(d->mGameProperties);
-
- TQPushButton* b = new TQPushButton(i18n("Update"), d->mGamePage);
- connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotUpdateGameData()));
- topLayout->addWidget(b);
-
-// game data
- d->mGameAddress = new TQListViewItem(v, i18n("KGame Pointer"));
- d->mGameId = new TQListViewItem(v, i18n("Game ID"));
- d->mGameCookie = new TQListViewItem(v, i18n("Game Cookie"));
- d->mGameMaster = new TQListViewItem(v, i18n("Is Master"));
- d->mGameAdmin = new TQListViewItem(v, i18n("Is Admin"));
- d->mGameOffering = new TQListViewItem(v, i18n("Is Offering Connections"));
- d->mGametqStatus = new TQListViewItem(v, i18n("Game Status"));
- d->mGameRunning = new TQListViewItem(v, i18n("Game is Running"));
- d->mGameMaxPlayers = new TQListViewItem(v, i18n("Maximal Players"));
- d->mGameMinPlayers = new TQListViewItem(v, i18n("Minimal Players"));
- d->mGamePlayerCount = new TQListViewItem(v, i18n("Players"));
-}
-
-void KGameDebugDialog::initPlayerPage()
-{
- d->mPlayerPage = addPage(i18n("Debug &Players"));
- TQVBoxLayout* topLayout = new TQVBoxLayout(d->mPlayerPage, marginHint(), spacingHint());
- TQHBoxLayout* tqlayout = new TQHBoxLayout(topLayout);
-
- //TODO: connect to the KGame signals for joined/removed players!!!
- TQVBoxLayout* listLayout = new TQVBoxLayout(tqlayout);
- TQLabel* listLabel = new TQLabel(i18n("Available Players"), d->mPlayerPage);
- listLayout->addWidget(listLabel);
- d->mPlayerList = new KListBox(d->mPlayerPage);
- connect(d->mPlayerList, TQT_SIGNAL(executed(TQListBoxItem*)), this, TQT_SLOT(slotUpdatePlayerData(TQListBoxItem*)));
- listLayout->addWidget(d->mPlayerList);
- d->mPlayerList->tqsetSizePolicy(TQSizePolicy(TQSizePolicy::Preferred, TQSizePolicy::Expanding));
-
- KListView* v = new KListView(d->mPlayerPage);
- tqlayout->addWidget(v);
- v->addColumn(i18n("Data"));
- v->addColumn(i18n("Value"));
-
- d->mPlayerProperties = new KListView(d->mPlayerPage);
- d->mPlayerProperties->addColumn(i18n("Property"));
- d->mPlayerProperties->addColumn(i18n("Value"));
- d->mPlayerProperties->addColumn(i18n("Policy"));
- tqlayout->addWidget(d->mPlayerProperties);
-
- TQPushButton* b = new TQPushButton(i18n("Update"), d->mPlayerPage);
- connect(b, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotUpdatePlayerList()));
- topLayout->addWidget(b);
-
- d->mPlayerAddress = new TQListViewItem(v, i18n("Player Pointer"));
- d->mPlayerId = new TQListViewItem(v, i18n("Player ID"));
- d->mPlayerName = new TQListViewItem(v, i18n("Player Name"));
- d->mPlayerGroup = new TQListViewItem(v, i18n("Player Group"));
- d->mPlayerUserId = new TQListViewItem(v, i18n("Player User ID"));
- d->mPlayerMyTurn = new TQListViewItem(v, i18n("My Turn"));
- d->mPlayerAsyncInput = new TQListViewItem(v, i18n("Async Input"));
- d->mPlayerKGameAddress = new TQListViewItem(v, i18n("KGame Address"));
- d->mPlayerVirtual = new TQListViewItem(v, i18n("Player is Virtual"));
- d->mPlayerActive = new TQListViewItem(v, i18n("Player is Active"));
- d->mPlayerRtti = new TQListViewItem(v, i18n("RTTI"));
- d->mPlayerNetworkPriority = new TQListViewItem(v, i18n("Network Priority"));
-}
-
-void KGameDebugDialog::initMessagePage()
-{
- d->mMessagePage = addPage(i18n("Debug &Messages"));
- TQGridLayout* tqlayout = new TQGridLayout(d->mMessagePage, 11, 7, marginHint(), spacingHint());
- d->mMessageList = new KListView(d->mMessagePage);
- tqlayout->addMultiCellWidget(d->mMessageList, 0, 9, 0, 3);
- d->mMessageList->addColumn(i18n("Time"));
- d->mMessageList->addColumn(i18n("ID"));
- d->mMessageList->addColumn(i18n("Receiver"));
- d->mMessageList->addColumn(i18n("Sender"));
- d->mMessageList->addColumn(i18n("ID - Text"));
-
- TQPushButton* hide = new TQPushButton(i18n("&>>"), d->mMessagePage);
- connect(hide, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotHideId()));
- tqlayout->addWidget(hide, 4, 4);
-
- TQPushButton* show = new TQPushButton(i18n("&<<"), d->mMessagePage);
- connect(show, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotShowId()));
- tqlayout->addWidget(show, 6, 4);
-
- TQLabel* l = new TQLabel(i18n("Do not show IDs:"), d->mMessagePage);
- tqlayout->addMultiCellWidget(l, 0, 0, 5, 6);
- d->mHideIdList = new KListBox(d->mMessagePage);
- tqlayout->addMultiCellWidget(d->mHideIdList, 1, 8, 5, 6);
-
- TQPushButton* clear = new KPushButton(KStdGuiItem::clear(), d->mMessagePage);
- connect(clear, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotClearMessages()));
- tqlayout->addMultiCellWidget(clear, 10, 10, 0, 6);
- //TODO: "show all but..." and "show nothing but..."
-}
-
-void KGameDebugDialog::clearPlayerData()
-{
- d->mPlayerAddress->setText(1, "");
- d->mPlayerId->setText(1, "");
- d->mPlayerName->setText(1, "");
- d->mPlayerGroup->setText(1, "");
- d->mPlayerUserId->setText(1, "");
- d->mPlayerMyTurn->setText(1, "");
- d->mPlayerAsyncInput->setText(1, "");
- d->mPlayerKGameAddress->setText(1, "");
- d->mPlayerVirtual->setText(1, "");
- d->mPlayerActive->setText(1, "");
- d->mPlayerRtti->setText(1, "");
- d->mPlayerNetworkPriority->setText(1, "");
-
- d->mPlayerProperties->clear();
-}
-
-void KGameDebugDialog::clearGameData()
-{
- d->mGameAddress->setText(1, "");
- d->mGameId->setText(1, "");
- d->mGameCookie->setText(1, "");
- d->mGameMaster->setText(1, "");
- d->mGameAdmin->setText(1, "");
- d->mGameOffering->setText(1, "");
- d->mGametqStatus->setText(1, "");
- d->mGameRunning->setText(1, "");
- d->mGameMaxPlayers->setText(1, "");
- d->mGameMinPlayers->setText(1, "");
-
- d->mGameProperties->clear();
-}
-
-void KGameDebugDialog::slotUpdatePlayerData()
-{
- if (!d->mGame || d->mPlayerList->currentItem() == -1) {
- return;
- }
- slotUpdatePlayerData(d->mPlayerList->item(d->mPlayerList->currentItem()));
-}
-
-void KGameDebugDialog::slotUpdatePlayerList()
-{
- TQListBoxItem* i = d->mPlayerList->firstItem();
- for (; i; i = d->mPlayerList->firstItem()) {
- removePlayer(i);
- }
-
- TQPtrList<KPlayer> list = *d->mGame->playerList();
- for (KPlayer* p = list.first(); p; p = list.next()) {
- addPlayer(p);
- }
-}
-
-void KGameDebugDialog::slotUpdateGameData()
-{
- if (!d->mGame) {
- d->mGameAddress->setText(1, i18n("NULL pointer"));
- return;
-}
-
- clearGameData();
-
- TQString buf;
- buf.sprintf("%p", d->mGame);
- d->mGameAddress->setText(1, buf);
- d->mGameId->setText(1, TQString::number(d->mGame->gameId()));
- d->mGameCookie->setText(1, TQString::number(d->mGame->cookie()));
- d->mGameMaster->setText(1, d->mGame->isMaster() ? i18n("True") : i18n("False"));
- d->mGameAdmin->setText(1, d->mGame->isAdmin() ? i18n("True") : i18n("False"));
- d->mGameOffering->setText(1, d->mGame->isOfferingConnections() ? i18n("True") : i18n("False"));
- d->mGametqStatus->setText(1, TQString::number(d->mGame->gametqStatus()));
- d->mGameRunning->setText(1, d->mGame->isRunning() ? i18n("True") : i18n("False"));
- d->mGameMaxPlayers->setText(1, TQString::number(d->mGame->maxPlayers()));
- d->mGameMinPlayers->setText(1, TQString::number(d->mGame->minPlayers()));
- d->mGamePlayerCount->setText(1, TQString::number(d->mGame->playerCount()));
-
-//TODO ios
-
- KGamePropertyHandler* handler = d->mGame->dataHandler();
- TQIntDictIterator<KGamePropertyBase> it(handler->dict());
- while (it.current()) {
- TQString policy;
- switch (it.current()->policy()) {
- case KGamePropertyBase::PolicyClean:
- policy = i18n("Clean");
- break;
- case KGamePropertyBase::PolicyDirty:
- policy = i18n("Dirty");
- break;
- case KGamePropertyBase::PolicyLocal:
- policy = i18n("Local");
- break;
- case KGamePropertyBase::PolicyUndefined:
- default:
- policy = i18n("Undefined");
- break;
- }
- (void) new TQListViewItem(d->mGameProperties,
- handler->propertyName(it.current()->id()),
- handler->propertyValue(it.current()),
- policy);
-// kdDebug(11001) << k_funcinfo << ": checking for all game properties: found property name " << name << endl;
- ++it;
- }
-}
-
-void KGameDebugDialog::slotUpdatePlayerData(TQListBoxItem* item)
-{
- if (!item || !d->mGame) {
- return;
- }
-
- KPlayer* p = d->mGame->findPlayer(item->text().toInt());
-
- if (!p) {
- kdError(11001) << k_funcinfo << ": cannot find player" << endl;
- return;
- }
-
- clearPlayerData();
-
- TQString buf;
- buf.sprintf("%p", p);
- d->mPlayerAddress->setText(1, buf);
- d->mPlayerId->setText(1, TQString::number(p->id()));
- d->mPlayerName->setText(1, p->name());
- d->mPlayerGroup->setText(1, p->group());
- d->mPlayerUserId->setText(1, TQString::number(p->userId()));
- d->mPlayerMyTurn->setText(1, p->myTurn() ? i18n("True") : i18n("False"));
- d->mPlayerAsyncInput->setText(1, p->asyncInput() ? i18n("True") : i18n("False"));
- buf.sprintf("%p", p->game());
- d->mPlayerKGameAddress->setText(1, buf);
- d->mPlayerVirtual->setText(1, p->isVirtual() ? i18n("True") : i18n("False"));
- d->mPlayerActive->setText(1, p->isActive() ? i18n("True") : i18n("False"));
- d->mPlayerRtti->setText(1, TQString::number(p->rtti()));
- d->mPlayerNetworkPriority->setText(1, TQString::number(p->networkPriority()));
-
-//TODO ios
-
-// Properties
- KGamePropertyHandler * handler = p->dataHandler();
- TQIntDictIterator<KGamePropertyBase> it((handler->dict()));
- while (it.current()) {
- TQString policy;
- switch (it.current()->policy()) {
- case KGamePropertyBase::PolicyClean:
- policy = i18n("Clean");
- break;
- case KGamePropertyBase::PolicyDirty:
- policy = i18n("Dirty");
- break;
- case KGamePropertyBase::PolicyLocal:
- policy = i18n("Local");
- break;
- case KGamePropertyBase::PolicyUndefined:
- default:
- policy = i18n("Undefined");
- break;
- }
- (void)new TQListViewItem(d->mPlayerProperties,
- handler->propertyName(it.current()->id()),
- handler->propertyValue(it.current()),
- policy);
- ++it;
- }
-}
-
-void KGameDebugDialog::clearPages()
-{
- clearPlayerData();
- clearGameData();
- d->mPlayerList->clear();
- slotClearMessages();
-}
-
-void KGameDebugDialog::setKGame(const KGame* g)
-{
- slotUnsetKGame();
- d->mGame = g;
- if (g) {
- //TODO: connect to the KGame signals for joined/removed players!!!
- connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
-// connect();
-
- TQPtrList<KPlayer> list = *d->mGame->playerList();
- for (KPlayer* p = list.first(); p; p = list.next()) {
- addPlayer(p);
- }
-
- slotUpdateGameData();
-
- connect(d->mGame, TQT_SIGNAL(signalMessageUpdate(int, TQ_UINT32, TQ_UINT32)), this, TQT_SLOT(slotMessageUpdate(int, TQ_UINT32, TQ_UINT32)));
- }
-}
-
-void KGameDebugDialog::slotUnsetKGame()
-{
- if (d->mGame) {
- disconnect(d->mGame, 0, this, 0);
- }
- d->mGame = 0;
- clearPages();
-}
-
-void KGameDebugDialog::addPlayer(KPlayer* p)
-{
- if (!p) {
- kdError(11001) << "trying to add NULL player" << endl;
- return;
- }
-
- (void) new TQListBoxText(d->mPlayerList, TQString::number(p->id()));
- //TODO connect to signals, like deleted/removed, ...
-}
-
-void KGameDebugDialog::removePlayer(TQListBoxItem* i)
-{
- if (!i || !d->mGame) {
- return;
- }
- KPlayer* p = d->mGame->findPlayer(i->text().toInt());
- if (!p) {
- return;
- }
- disconnect(p, 0, this, 0);
- if (i->isSelected()) {
- clearPlayerData();
- }
- delete i;
-}
-
-void KGameDebugDialog::slotMessageUpdate(int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- if (!showId(msgid)) {
- return;
- }
- TQString msgidText = KGameMessage::messageId2Text(msgid);
- if (msgidText.isNull()) {
- if (msgid > KGameMessage::IdUser) {
- emit signalRequestIdName(msgid-KGameMessage::IdUser, true, msgidText);
- } else {
- emit signalRequestIdName(msgid, false, msgidText);
- }
- if (msgidText.isNull()) {
- msgidText = i18n("Unknown");
- }
- }
- (void) new TQListViewItem( d->mMessageList, TQTime::currentTime().toString(),
- TQString::number(msgid), TQString::number(receiver),
- TQString::number(sender), msgidText);
-}
-
-void KGameDebugDialog::slotClearMessages()
-{
- d->mMessageList->clear();
-}
-
-void KGameDebugDialog::slotShowId()
-{
-/* TQListBoxItem* i = d->mHideIdList->firstItem();
- for (; i; i = i->next()) {
- if (i->selected()) {
- d->mHideIdList->removeItem(i->);
- }
- }*/
- if (!d->mHideIdList->currentItem()) {
- return;
- }
- d->mHideIdList->removeItem(d->mHideIdList->currentItem());
-}
-
-void KGameDebugDialog::slotHideId()
-{
- if (!d->mMessageList->currentItem()) {
- return;
- }
- int msgid = d->mMessageList->currentItem()->text(1).toInt();
- if (!showId(msgid)) {
- return;
- }
- (void)new TQListBoxText(d->mHideIdList, TQString::number(msgid));
-}
-
-bool KGameDebugDialog::showId(int msgid)
-{
- TQListBoxItem* i = d->mHideIdList->firstItem();
- for (; i; i = i->next()) {
- if (i->text().toInt() == msgid) {
- return false;
- }
- }
- return true;
-}
-
-
-#include "kgamedebugdialog.moc"
diff --git a/libkdegames/kgame/dialogs/kgamedebugdialog.h b/libkdegames/kgame/dialogs/kgamedebugdialog.h
deleted file mode 100644
index 92b35597..00000000
--- a/libkdegames/kgame/dialogs/kgamedebugdialog.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEDEBUGDIALOG_H__
-#define __KGAMEDEBUGDIALOG_H__
-
-#include <kdialogbase.h>
-#include <kdemacros.h>
-
-class KGame;
-class KGameIO;
-class KPlayer;
-class KGamePropertyBase;
-
-class KGameDebugDialogPrivate;
-
-class KDE_EXPORT KGameDebugDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameDebugDialog(KGame* g, TQWidget* parent, bool modal = false);
- ~KGameDebugDialog();
-
- /**
- * Automatically connects the KGame object to all error dependant slots.
- * Create a KGameErrorDialog object, call this function and forget
- * everything.
- * @param g The KGame which will emit the erorrs (or not ;-) )
- **/
- void setKGame(const KGame* g);
-
-public slots:
- /**
- * Unsets a @ref KGame which has been set using @ref setKGame before.
- * This is called automatically when the @ref KGame object is destroyed
- * and you normally don't have to call this yourself.
- *
- * Note that @ref setKGame also unsets an already existing @ref KGame
- * object if exising.
- **/
- void slotUnsetKGame();
-
- /**
- * Update the data of the @ref KGame object
- **/
- void slotUpdateGameData();
-
- /**
- * Update the properties of the currently selected player
- **/
- void slotUpdatePlayerData();
-
- /**
- * Updates the list of players and calls @ref clearPlayerData. Note that
- * after this call NO player is selected anymore.
- **/
- void slotUpdatePlayerList();
-
- void slotClearMessages();
-
-signals:
- /**
- * This signal is emitted when the "debug messages" page couldn't find
- * the name of a message id. This is usually the case for user-defined
- * messages. KGameDebugDialog asks you to give the msgid a name.
- * @param messageid The ID of the message. As given to @ref
- * KGame::sendMessage
- * @param userid User defined msgIds are internally increased by
- * @ref KGameMessage::IdUser. You don't have to care about this but if
- * this signal is emitted with userid=false (shouldn't happen) then the
- * name of an internal message as defined in @ref
- * KGameMessage::GameMessageIds couldn't be found.
- * @param name The name of the msgid. You have to fill this!
- **/
- void signalRequestIdName(int messageid, bool userid, TQString& name);
-
-protected:
- void clearPages();
-
- /**
- * Clear the data of the player view. Note that the player list is NOT
- * cleared.
- **/
- void clearPlayerData();
-
- /**
- * Clear the data view of the @ref KGame object
- **/
- void clearGameData();
-
- /**
- * Add a new player to the player list
- **/
- void addPlayer(KPlayer* p);
-
- /**
- * Remove a player from the list
- **/
- void removePlayer(TQListBoxItem* item);
-
- /**
- * @return Whether messages with this msgid shall be displayed or not
- **/
- bool showId(int msgid);
-
-protected slots:
- /**
- * Update the data of the player specified in item
- * @param item The @ref TQListBoxItem of the player to be updated. Note
- * that the text of this item MUST be the ID of the player
- **/
- void slotUpdatePlayerData(TQListBoxItem* item);
-
- void slotShowId();
- void slotHideId();
-
- /**
- * A message has been received - see @ref KGame::signalMessageUpdate
- **/
- void slotMessageUpdate(int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
-
-private:
- void initGamePage();
- void initPlayerPage();
- void initMessagePage();
-
-private:
- KGameDebugDialogPrivate* d;
-};
-
-
-#endif
diff --git a/libkdegames/kgame/dialogs/kgamedialog.cpp b/libkdegames/kgame/dialogs/kgamedialog.cpp
deleted file mode 100644
index c03df4ff..00000000
--- a/libkdegames/kgame/dialogs/kgamedialog.cpp
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <tqlayout.h>
-#include <tqvbox.h>
-
-#include <klocale.h>
-
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgamedialogconfig.h"
-
-#include "kgamedialog.h"
-
-#include "kgamedialog.moc"
-
-class KGameDialogPrivate
-{
-public:
- KGameDialogPrivate()
- {
- mGamePage = 0;
- mNetworkPage = 0;
- mMsgServerPage = 0;
- mTopLayout = 0;
-
- mNetworkConfig = 0;
- mGameConfig = 0;
-
- mOwner = 0;
- mGame = 0;
- }
-
- TQVBox* mGamePage;
- TQVBox* mNetworkPage;
- TQVBox* mMsgServerPage;// unused here?
- TQVBoxLayout* mTopLayout;
- KGameDialogNetworkConfig* mNetworkConfig;
- KGameDialogGeneralConfig* mGameConfig;
-
-// a list of all config widgets added to this dialog
- TQPtrList<KGameDialogConfig> mConfigWidgets;
-
-// just pointers:
- KPlayer* mOwner;
- KGame* mGame;
-};
-
-KGameDialog::KGameDialog(KGame* g, KPlayer* owner, const TQString& title,
- TQWidget* parent, bool modal)
- : KDialogBase(Tabbed, title, Ok|Default|Apply,
- Ok, parent, 0, modal, true)
-{
- init(g, owner);
-}
-
-KGameDialog::KGameDialog(KGame* g, KPlayer* owner, const TQString& title,
- TQWidget* parent, long initConfigs, int chatMsgId, bool modal)
- : KDialogBase(Tabbed, title, Ok|Default|Apply,
- Ok, parent, 0, modal, true)
-{
- init(g, owner);
- if ((ConfigOptions)initConfigs!=NoConfig) {
- initDefaultDialog((ConfigOptions)initConfigs, chatMsgId);
- }
-}
-
-void KGameDialog::init(KGame* g, KPlayer* owner)
-{
-//AB: do we need a "Cancel" Button? currently removed
-
-// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- d = new KGameDialogPrivate;
-
- setOwner(owner);
- setKGame(g);
- if (g) {
- setAdmin(g->isAdmin());
- } else {
- setAdmin(false);
- }
-}
-
-void KGameDialog::initDefaultDialog(ConfigOptions initConfigs, int chatMsgId)
-{
- if (initConfigs & GameConfig) {
- kdDebug() << "add gameconf" << endl;
- addGameConfig(new KGameDialogGeneralConfig(0));
- }
- if (initConfigs & NetworkConfig) {
- addNetworkConfig(new KGameDialogNetworkConfig(0));
- }
- if (initConfigs & (MsgServerConfig) ) {
- addMsgServerConfig(new KGameDialogMsgServerConfig(0));
- }
- if (initConfigs & ChatConfig) {
- KGameDialogChatConfig * c = new KGameDialogChatConfig(chatMsgId, 0);
- if (d->mGamePage) {
- addChatWidget(c, d->mGamePage);
- } else {
- addConfigPage(c, i18n("&Chat"));
- }
- }
- if (initConfigs & BanPlayerConfig) {
- // add the connection management system - ie the widget where the ADMIN can
- // kick players out
- if (d->mNetworkPage) {
- // put it on the network page
- addConnectionList(new KGameDialogConnectionConfig(0), d->mNetworkPage);
- } else {
- // if no network page available put it on an own page
- addConfigPage(new KGameDialogConnectionConfig(0), i18n("C&onnections"));
- }
- }
-}
-
-KGameDialog::~KGameDialog()
-{
-// kdDebug(11001) << "DESTRUCT KGameDialog" << this << endl;
- d->mConfigWidgets.setAutoDelete(true);
- d->mConfigWidgets.clear();
- delete d;
-}
-
-void KGameDialog::addGameConfig(KGameDialogGeneralConfig* conf)
-{
- if (!conf) {
- return;
- }
- d->mGameConfig = conf;
- d->mGamePage = addConfigPage(d->mGameConfig, i18n("&Game"));
-}
-
-void KGameDialog::addNetworkConfig(KGameDialogNetworkConfig* netConf)
-{
- if (!netConf) {
- return;
- }
- d->mNetworkConfig = netConf;
- d->mNetworkPage = addConfigPage(netConf, i18n("&Network"));
-}
-
-void KGameDialog::addMsgServerConfig(KGameDialogMsgServerConfig* msgConf)
-{
- if (!msgConf) {
- return;
- }
- d->mMsgServerPage = addConfigPage(msgConf, i18n("&Message Server"));
-}
-
-void KGameDialog::addChatWidget(KGameDialogChatConfig* chat, TQVBox* parent)
-{
- if (!chat) {
- return;
- }
- if (!parent) {
- parent = d->mGamePage;
- }
- if (!parent) {
- kdError(11001) << "cannot add chat widget without page" << endl;
- return;
- }
- addConfigWidget(chat, parent);
-}
-
-void KGameDialog::addConnectionList(KGameDialogConnectionConfig* c, TQVBox* parent)
-{
- if (!c) {
- return;
- }
- if (!parent) {
- parent = d->mNetworkPage;
- }
- if (!parent) {
- kdError(11001) << "Cannot add connection list without page" << endl;
- return;
- }
- addConfigWidget(c, parent);
-}
-
-TQVBox *KGameDialog::configPage(ConfigOptions which)
-{
- TQVBox *box = 0;
- switch(which)
- {
- case NetworkConfig:
- box = d->mNetworkPage;
- break;
- case GameConfig:
- box = d->mGamePage;
- break;
- case MsgServerConfig:
- box = d->mMsgServerPage;
- break;
- default:
- kdError(11001) << k_funcinfo << ": Parameter " << which << " not supported" << endl;
- }
- return box;
-}
-
-TQVBox* KGameDialog::addConfigPage(KGameDialogConfig* widget, const TQString& title)
-{
- if (!widget) {
- kdError(11001) << "Cannot add NULL config widget" << endl;
- return 0;
- }
- TQVBox* page = addVBoxPage(title);
- addConfigWidget(widget, page);
- return page;
-}
-
-void KGameDialog::addConfigWidget(KGameDialogConfig* widget, TQWidget* parent)
-{
- if (!widget) {
- kdError(11001) << "Cannot add NULL config widget" << endl;
- return;
- }
- if (!parent) {
- kdError(11001) << "Cannot reparent to NULL widget" << endl;
- return;
- }
-// kdDebug(11001) << "reparenting widget" << endl;
- widget->reparent(parent, TQPoint(0,0));
- d->mConfigWidgets.append(widget);
- connect(widget, TQT_SIGNAL(destroyed(TQObject*)), this, TQT_SLOT(slotRemoveConfigWidget(TQObject*)));
- if (!d->mGame) {
- kdWarning(11001) << "No game has been set!" << endl;
- } else {
- widget->setKGame(d->mGame);
- widget->setAdmin(d->mGame->isAdmin());
- }
- if (!d->mOwner) {
- kdWarning(11001) << "No player has been set!" << endl;
- } else {
- widget->setOwner(d->mOwner);
- }
- widget->show();
-}
-
-KGameDialogGeneralConfig* KGameDialog::gameConfig() const
-{ return d->mGameConfig; }
-KGameDialogNetworkConfig* KGameDialog::networkConfig() const
-{ return d->mNetworkConfig; }
-
-void KGameDialog::slotApply()
-{
- submitToKGame();
-}
-
-void KGameDialog::slotDefault()
-{
- if (!d->mGame) {
- return;
- }
-
-//TODO *only* call setKGame/setOwner for the *current* page!!
- setKGame(d->mGame);
- setOwner(d->mOwner);
-}
-
-void KGameDialog::slotOk()
-{
- slotApply();
- TQDialog::accept();
-}
-
-void KGameDialog::setOwner(KPlayer* owner)
-{
-//AB: note: NULL player is ok!
- d->mOwner = owner;
- for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
- if (d->mConfigWidgets.at(i)) {
- d->mConfigWidgets.at(i)->setOwner(d->mOwner);
- //TODO: hide playerName in KGameDialogGeneralConfig
- } else {
- kdError(11001) << "NULL widget??" << endl;
- }
- }
-}
-
-void KGameDialog::setKGame(KGame* g)
-{
- if (d->mGame) {
- disconnect(d->mGame, 0, this, 0);
- }
- d->mGame = g;
- for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
- d->mConfigWidgets.at(i)->setKGame(d->mGame);
- }
- if (d->mGame) {
- setAdmin(d->mGame->isAdmin());
- connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
- connect(d->mGame, TQT_SIGNAL(signalAdminStatusChanged(bool)),
- this, TQT_SLOT(setAdmin(bool)));
- }
-}
-
-void KGameDialog::setAdmin(bool admin)
-{
- for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
- d->mConfigWidgets.at(i)->setAdmin(admin);
- }
-}
-
-void KGameDialog::slotUnsetKGame() // called when KGame is destroyed
-{ setKGame(0); }
-
-void KGameDialog::submitToKGame()
-{
- if (!d->mGame) {
- kdError(11001) << k_funcinfo << ": no game has been set" << endl;
- return;
- }
- if (!d->mOwner) {
- kdError(11001) << k_funcinfo << ": no player has been set" << endl;
- return;
- }
-
- for (int unsigned i = 0; i < d->mConfigWidgets.count(); i++) {
-// kdDebug(11001) << "submit to kgame " << i << endl;
- d->mConfigWidgets.at(i)->submitToKGame(d->mGame, d->mOwner);
-// kdDebug(11001) << "done: submit to kgame " << i << endl;
- }
-}
-
-void KGameDialog::slotRemoveConfigWidget(TQObject* configWidget)
-{
- d->mConfigWidgets.removeRef((KGameDialogConfig*)configWidget);
-}
-
diff --git a/libkdegames/kgame/dialogs/kgamedialog.h b/libkdegames/kgame/dialogs/kgamedialog.h
deleted file mode 100644
index 423f5de1..00000000
--- a/libkdegames/kgame/dialogs/kgamedialog.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-// NAMING
-// please follow these naming rules if you add/change classes:
-// the main dialog is named KGameDialog and the base config widget
-// KGameDialogConfig. All config widgets are named KGameDialogXYZConfig (where
-// XYZ = the name of the config widget, like "general" or "network") and are
-// inherited from KGameDialogConfig.
-
-#ifndef __KGAMEDIALOG_H__
-#define __KGAMEDIALOG_H__
-
-#include <kdialogbase.h>
-#include <kdemacros.h>
-class TQGridLayout;
-class TQVBoxLayout;
-class TQListBoxItem;
-
-class KGame;
-class KPlayer;
-class KGamePropertyBase;
-
-class KGameDialogConfig;
-class KGameDialogGeneralConfig;
-class KGameDialogNetworkConfig;
-class KGameDialogMsgServerConfig;
-class KGameDialogChatConfig;
-class KGameDialogConnectionConfig;
-
-class KGameDialogPrivate;
-/**
- * TODO: rewrite entire documentation. Nearly nothing is valid anymore.
- * The main configuration dialog for KGame. Here all players meat each other,
- * every player can see how many players connected (and their names) and the
- * ADMIN can even "kick" players out. You can talk to each other (using
- * KGameChat and the ADMIN can define the maxPlayers/minPlayers as well as the
- * number of computer players.
- *
- *
- * AB: setDefaultXYZ is obsolete!!
- * You will usually create an instance of KGameDialog or any derived class and
- * call setDefaultXYZ methods. Example (maybe
- * obsoleted parameters - docu is currently changing very fast):
- * \code
- * KGameDialog dlg(kgame, i18n("New Game"), localPlayer, this, true,
- * ID_CHAT);
- * dlg.setDefaultNetworkInfo(port, host); // AB: obsolete!
- * dlg.exec();
- * \endcode
- * This will create a default modal dialog with the title "New Game". You don't
- * have to do more than this.
- *
- * @short Main configuration dialog for KGame
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KGameDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
-public:
-
- enum ConfigOptions
- {
- NoConfig = 0,
- ChatConfig = 1,
- GameConfig = 2,
- NetworkConfig = 4,
- MsgServerConfig = 8,
- BanPlayerConfig = 16,
- AllConfig = 0xffff
- };
-
- /**
- * Create an empty KGameDialog. You can add widgets using
- * addConfigPage.
- * @param g The KGame object of this game
- * @param owner The KPlayer object who is responsible for this
- * dialog, aka "the local player"
- * @param title The title of the dialog - see KDialog::setCaption
- * @param parent The parent of the dialog
- * @param modal Whether the dialog is modal or not
- **/
- KGameDialog(KGame* g, KPlayer* owner, const TQString& title,
- TQWidget* parent, bool modal = false);
-
- /**
- * Create a KGameDialog with the standard configuration widgets. This
- * creates the following widgets:
- * <ul>
- * <li> KGameDialogGeneralConfig
- * <li> KGameDialogNetworkConfig
- * <li> KGameDialogMsgServerConfig
- * <li> KGameDialogChatConfig
- * <li> KGameDialogConnectionConfig
- * </ul>
- * If you want to use your own implementations (or none) of the widgets
- * above you should subclass KGameDialog. Use addGameConfig,
- * addNetworkConfig, addMsgConfig, addChatWidget and
- * addConnectionList in this case.
- *
- * If you want to add further configuration widget you can simply use
- * addConfigPage
- * @param g The KGame object of this game
- * @param owner The KPlayer object who is responsible for this
- * dialog, aka "the local player"
- * @param title The title of the dialog - see KDialog::setCaption
- * @param parent The parent of the dialog
- * @param modal Whether the dialog is modal or not
- * @param initConfigs whether the default KGameDialogConfig widgets
- * shall be created using initDefaultDialog. Use false if you want
- * to use custom widgets.
- * @param chatMsgId The ID of Chat messages. See KGameChat. Unused
- * if initConfigs = false
- **/
- KGameDialog(KGame* g, KPlayer* owner, const TQString& title,
- TQWidget* parent, long initConfigs = AllConfig,
- int chatMsgId = 15432, bool modal = false);
-
- virtual ~KGameDialog();
-
-
- /**
- * Change the owner of the dialog. This will be used as the fromPlayer in
- * KGameChat and will receive the entered player name.
- * @param owner The owner of the dialog. It must already be added to the
- * KGame object!
- *
- * Calls the KGameDialogConfig::setOwner implementation of all
- * widgets that have been added by addConfigWidget
- * @param owner The new owner player of this dialog must already be
- * added to the KGame object. Can even be NULL (then no player
- * configuration is made)
- **/
- void setOwner(KPlayer* owner);
-
- /**
- * Change the KGame object this dialog is used for.
- *
- * Calls the KGameDialogConfig::setKGame implementation of all
- * widgets that have been added by addConfigWidget
- * @param g The new KGame object
- **/
- void setKGame(KGame* g);
-
- /**
- * This will submit all configuration data to the KGame object.
- * Automatically called by slotApply and slotOk
- * There is no need to replace this unless you
- * want to add widgets which are not derived from those classes
- **/
- virtual void submitToKGame();
-
- /**
- * Adds a KGameChat to the dialog. If no parent is specified the
- * game page will be used.
- * @param chat The chat widget
- * @param parent The parent of the chat widget. This MUST be an
- * already added config widget. Note that the game page will be used
- * if parent is 0.
- **/
- void addChatWidget(KGameDialogChatConfig* chat, TQVBox* parent = 0);
-
- /**
- * Add a connection list to the dialog. The list consists of a
- * KLisBox containing all players in the current game (see
- * KGame::playerList). The admin can "ban" players, ie kick them out of
- * the game.
- *
- * This is another not-really-config-config-widget. It just displays the
- * connections and lets you ban players.
- * @param c The KGameDialogConnectionConfig object
- * @param parent The parent of the widget. If 0 the networkConfig
- * page is used.
- **/
- void addConnectionList(KGameDialogConnectionConfig* c, TQVBox* parent = 0);
-
- /**
- * Add a new page to the dialog. The page will contain you new config
- * widget and will have your provided title.
- *
- * The widget will be reparented to this dialog. This also calls
- * KGameDialogConfig::setKGame and KGameDialogConfig::setOwner.
- * @param widget The new config widget
- * @param title The title of the newly added page.
- * @return The newly added page which contains your config widget.
- **/
- TQVBox* addConfigPage(KGameDialogConfig* widget, const TQString& title);
-
- /**
- * @return The TQVBox of the given key, The key is from ConfigOptions
- * Note that not all are supported yet
- **/
- TQVBox *configPage(ConfigOptions which);
-
- /**
- * @return The default netowrk config. Note that this always returns 0 if
- * you did not specify NetworkConfig in the constructor!
- **/
- KGameDialogNetworkConfig* networkConfig() const;
-
- /**
- * @return The default game config. Note that this always returns 0 if
- * you did not specify GameConfig in the constructor!
- **/
- KGameDialogGeneralConfig* gameConfig() const;
-
- /**
- * Add a config widget to the specified parent. Usually you call
- * addConfigPage for one widget and addConfigWidget for another to add
- * it to the same page. Just use the returned page of
- * addConfigPage.
- **/
- void addConfigWidget(KGameDialogConfig* widget, TQWidget* parent);
-
- /**
- * Used to add the main network config widget in a new page. Use this to
- * make networkConfig return something useful.
- **/
- void addNetworkConfig(KGameDialogNetworkConfig* netConf);
-
- /**
- * Add the main game config widget in a new page. Use this to make
- * gameConfig return something useful.
- **/
- void addGameConfig(KGameDialogGeneralConfig* conf);
-
- /**
- * Used to add the message server config widget in a new page.
- **/
- void addMsgServerConfig(KGameDialogMsgServerConfig* conf);
-
-protected:
-
- /**
- * This is used to create a dialog containing all the default widgets.
- *
- * You may want to use this if you just want to use your own
- * configuration widgets which inherit the standard ones.
- *
- * Note that if one of the widgets is NULL the default implementation
- * will be used! (except the chat widget - you need to create it
- * yourself as you have to provide a message id)
- * @param initConfigs The widgets to be created
- * @param chatMsgId The msgid for the chat config (only if specified in
- * initConfigs) - see KGameDialogChatConfig
- **/
- void initDefaultDialog(ConfigOptions initConfigs, int chatMsgId = 15432);
-
- /**
- * Go through all config widgets and call their
- * KGameDialogConfig::setKGame and KGameDialogConfig::setOwner implementation
- *
- * This function could be private and probably will be very soon.
- * Don't use it yourself
- **/
- void configureConfigWidgets();
-
-protected slots:
- /**
- * Called when the user clicks on Ok. Calls slotApply and
- * TQDialog::accept()
- **/
- virtual void slotOk();
-
- /**
- * Just calls submitToKGame()
- **/
- virtual void slotApply();
-
- /**
- * Sets the default values for the configuration widgets. Set these
- * values by (e.g.) setDefaultMaxPlayers()
- * @deprecated
- **/
- virtual void slotDefault();
-
- /**
- * Called when the KGame object is destroyed. Calls setKGame(0) so
- * that all widgets can disconnect their slots and so on.
- **/
- void slotUnsetKGame();
-
- /**
- * Called when the ADMIN status of this KGame client changes. See
- * KGameNetwork::signalAdminStatusChanged
- * @param isAdmin TRUE if this client is now the ADMIN otherwise FALSE
- **/
- void setAdmin(bool isAdmin);
-
- /**
- * Remove a config widget from the widget list.
- * @see TQObject::destroyed
- **/
- void slotRemoveConfigWidget(TQObject* configWidget);
-
-private:
- void init(KGame*, KPlayer*);
-
-private:
- KGameDialogPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/dialogs/kgamedialogconfig.cpp b/libkdegames/kgame/dialogs/kgamedialogconfig.cpp
deleted file mode 100644
index f6845650..00000000
--- a/libkdegames/kgame/dialogs/kgamedialogconfig.cpp
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kgamedialogconfig.h"
-
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgamechat.h"
-#include "kgameconnectdialog.h"
-
-#include <klocale.h>
-#include <knuminput.h>
-#include <kdialog.h>
-#include <klistbox.h>
-#include <kmessagebox.h>
-
-#include <tqlayout.h>
-#include <tqhgroupbox.h>
-#include <tqlabel.h>
-#include <tqpushbutton.h>
-#include <tqlineedit.h>
-#include <tqvbox.h>
-#include <tqptrdict.h>
-
-#include "kgamedialogconfig.moc"
-
-class KGameDialogConfigPrivate
-{
-public:
- KGameDialogConfigPrivate()
- {
- mOwner = 0;
- mGame = 0;
-
- mAdmin = false;
- }
-
- bool mAdmin;
- KGame* mGame;
- KPlayer* mOwner;
-};
-
-KGameDialogConfig::KGameDialogConfig(TQWidget* parent) : TQWidget(parent)
-{
- d = new KGameDialogConfigPrivate;
-}
-
-KGameDialogConfig::~KGameDialogConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogConfig::setKGame(KGame* g)
-{
- d->mGame = g;
-}
-
-void KGameDialogConfig::setOwner(KPlayer* p)
-{
- d->mOwner = p;
-}
-
-void KGameDialogConfig::setAdmin(bool a)
-{
- d->mAdmin = a;
-}
-
-KGame* KGameDialogConfig::game() const
-{ return d->mGame; }
-bool KGameDialogConfig::admin() const
-{ return d->mAdmin; }
-KPlayer* KGameDialogConfig::owner() const
-{ return d->mOwner; }
-
-/////////////////////////// KGameDialogNetworkConfig /////////////////////////
-class KGameDialogNetworkConfigPrivate
-{
-public:
- KGameDialogNetworkConfigPrivate()
- {
- mInitConnection = 0;
- mNetworkLabel = 0;
- mDisconnectButton = 0;
- mConnect = 0;
- mDefaultServer=true;
-
- }
-
- // TQPushButton* mInitConnection;
- TQHGroupBox* mInitConnection;
- TQLabel* mNetworkLabel;
- TQPushButton *mDisconnectButton;
-
- bool mDefaultServer;
- TQString mDefaultHost;
- unsigned short int mDefaultPort;
- KGameConnectWidget *mConnect;
-};
-
-
-KGameDialogNetworkConfig::KGameDialogNetworkConfig(TQWidget* parent)
- : KGameDialogConfig(parent)
-{
-// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- d = new KGameDialogNetworkConfigPrivate();
-
- TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint(), "toptqlayout");
-
- TQHBoxLayout *hb = new TQHBoxLayout(topLayout, KDialog::spacingHint());
-
- d->mNetworkLabel = new TQLabel(this);
- hb->addWidget(d->mNetworkLabel);
-
- d->mDisconnectButton=new TQPushButton(i18n("Disconnect"),this);
- connect(d->mDisconnectButton, TQT_SIGNAL(clicked()), this, TQT_SLOT(slotExitConnection()));
- hb->addWidget(d->mDisconnectButton);
-
- d->mInitConnection = new TQHGroupBox(i18n("Network Configuration"), this);
- topLayout->addWidget(d->mInitConnection);
-
- d->mConnect = new KGameConnectWidget(d->mInitConnection);
- connect(d->mConnect, TQT_SIGNAL(signalNetworkSetup()), this, TQT_SLOT(slotInitConnection()));
- connect(d->mConnect, TQT_SIGNAL(signalServerTypeChanged(int)),
- this, TQT_SIGNAL(signalServerTypeChanged(int)));
-
- // Needs to be AFTER the creation of the dialogs
- setConnected(false);
- setDefaultNetworkInfo("localhost", 7654,true);
-}
-
-KGameDialogNetworkConfig::~KGameDialogNetworkConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogNetworkConfig::slotExitConnection()
-{
- kdDebug(11001) << k_funcinfo << " !!!!!!!!!!!!!!!!!!!!!!!" << endl;
- if (game()) game()->disconnect();
- setConnected(false,false);
-}
-
-void KGameDialogNetworkConfig::slotInitConnection()
-{
- kdDebug(11001) << k_funcinfo << endl;
- bool connected = false;
- bool master = true;
- unsigned short int port = d->mConnect->port();
- TQString host = d->mConnect->host();
-
- if (host.isNull()) {
- master = true;
- if (game()) {
- game()->setDiscoveryInfo(d->mConnect->type(),d->mConnect->gameName());
- connected = game()->offerConnections(port);
- }
- } else {
- master = false;
- if (game()) {
- connected = game()->connectToServer(host, port);
- }
- // We need to learn about failed connections
- if (game()) {
- connect(game(), TQT_SIGNAL(signalConnectionBroken()),
- this, TQT_SLOT(slotConnectionBroken()));
- }
- }
- setConnected(connected, master);
-}
-
-void KGameDialogNetworkConfig::slotConnectionBroken()
-{
- kdDebug(11001) << k_funcinfo << endl;
- setConnected(false,false);
- KMessageBox::error(this, i18n("Cannot connect to the network"));
-}
-
-void KGameDialogNetworkConfig::setConnected(bool connected, bool master)
-{
- if (!connected) {
- d->mNetworkLabel->setText(i18n("Network status: No Network"));
- d->mInitConnection->setEnabled(true);
- d->mDisconnectButton->setEnabled(false);
- return;
- }
- if (master) {
- d->mNetworkLabel->setText(i18n("Network status: You are MASTER"));
- } else {
- d->mNetworkLabel->setText(i18n("Network status: You are connected"));
- }
- d->mInitConnection->setEnabled(false);
- d->mDisconnectButton->setEnabled(true);
-}
-
-void KGameDialogNetworkConfig::submitToKGame(KGame* , KPlayer* )
-{
-}
-
-void KGameDialogNetworkConfig::setKGame(KGame* g)
-{
- KGameDialogConfig::setKGame(g);
- if (!game()) {
- setConnected(false);
- return;
- }
- setConnected(game()->isNetwork(), game()->isMaster());
-}
-
-void KGameDialogNetworkConfig::setDefaultNetworkInfo(const TQString& host, unsigned short int port,bool server)
-{
- d->mDefaultPort = port;
- d->mDefaultHost = host;
- d->mDefaultServer = server;
-
- d->mConnect->setHost(host);
- d->mConnect->setPort(port);
- if (server) {
- d->mConnect->setDefault(0);
- } else {
- d->mConnect->setDefault(1);
- }
-}
-
-void KGameDialogNetworkConfig::setDiscoveryInfo(const TQString& type, const TQString& name)
-{
- d->mConnect->setType(type);
- d->mConnect->setName(name);
-}
-
-/////////////////////////// KGameDialogGeneralConfig /////////////////////////
-class KGameDialogGeneralConfigPrivate
-{
-public:
- KGameDialogGeneralConfigPrivate()
- {
- mTopLayout = 0;
- mName = 0;
- }
-
- TQLineEdit* mName;
-
- TQVBoxLayout* mTopLayout;
-};
-
-KGameDialogGeneralConfig::KGameDialogGeneralConfig(TQWidget* parent, bool initializeGUI)
- : KGameDialogConfig(parent)
-{
-// kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- d = new KGameDialogGeneralConfigPrivate;
-
- if (initializeGUI) {
- d->mTopLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
- d->mTopLayout->setAutoAdd(true);
-
- TQWidget* nameWidget = new TQWidget(this);
- TQHBoxLayout* l = new TQHBoxLayout(nameWidget);
- TQLabel* nameLabel = new TQLabel(i18n("Your name:"), nameWidget);
- l->addWidget(nameLabel);
- d->mName = new TQLineEdit(nameWidget);
- l->addWidget(d->mName);
- }
-}
-
-KGameDialogGeneralConfig::~KGameDialogGeneralConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogGeneralConfig::setPlayerName(const TQString& name)
-{
- if (d->mName) {
- d->mName->setText(name);
- }
-}
-
-TQString KGameDialogGeneralConfig::playerName() const
-{
- return d->mName ? d->mName->text() : TQString();
-}
-
-void KGameDialogGeneralConfig::setOwner(KPlayer* p)
-{
- if (owner()) {
- owner()->disconnect(this);
- }
- KGameDialogConfig::setOwner(p);
- if (!owner()) {
- // can this config be used at all?
- // maybe call hide()
- return;
- }
- connect(owner(), TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
- this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
- setPlayerName(p->name());
- //TODO: connect signalPropertyChanged and check for playername changes!
-}
-
-void KGameDialogGeneralConfig::setKGame(KGame* g)
-{
- KGameDialogConfig::setKGame(g);
- if (!g) {
- // TODO
- // can this config be used at all?
- // maybe call hide()
- return;
- }
-}
-
-void KGameDialogGeneralConfig::setAdmin(bool admin)
-{
- KGameDialogConfig::setAdmin(admin);
-// enable/disable widgets
-
-}
-
-void KGameDialogGeneralConfig::submitToKGame(KGame* g, KPlayer* p)
-{
-//FIXME
- if (p) {
- p->setName(playerName());
- }
- if (g) {
- }
-}
-
-void KGameDialogGeneralConfig::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* p)
-{
- if (!prop || !p || p != owner()) {
- return;
- }
- switch (prop->id()) {
- case KGamePropertyBase::IdName:
- setPlayerName(p->name());
- break;
- default:
- break;
- }
-}
-
-class KGameDialogMsgServerConfigPrivate
-{
-public:
- KGameDialogMsgServerConfigPrivate()
- {
- senderLayout = 0;
- localLayout = 0;
-
- changeMaxClients = 0;
- changeAdmin= 0;
- removeClient= 0;
- noAdmin = 0;
-
- noMaster = 0;
- }
-
- TQVBoxLayout* senderLayout;
- TQHBoxLayout* localLayout;
-
- TQPushButton* changeMaxClients;
- TQPushButton* changeAdmin;
- TQPushButton* removeClient;
- TQLabel* noAdmin;
-
- TQLabel* noMaster;
-};
-
-
-// TODO: change ADMIN ID, remove CLIENTS, change MAXCLIENTS
-// we do everything here with TQPushButtons as we want to wait a moment before
-// continuing - the message must be sent over network first
-KGameDialogMsgServerConfig::KGameDialogMsgServerConfig(TQWidget* parent)
- : KGameDialogConfig(parent)
-{
- d = new KGameDialogMsgServerConfigPrivate;
-
- TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
- d->senderLayout = new TQVBoxLayout(topLayout);
- d->localLayout = new TQHBoxLayout(topLayout);
-}
-
-KGameDialogMsgServerConfig::~KGameDialogMsgServerConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogMsgServerConfig::setKGame(KGame* g)
-{
- KGameDialogConfig::setKGame(g);
- //TODO display the ID of the admin if we aren't
- // connect(g, TQT_SIGNAL(signalAdminChanged(int)), this, TQT_SLOT(slotChangeIsAdmin(int)));//TODO
- if (!game()) {
- // we cannot do anything without a KGame object!
- setAdmin(false);
- return;
- }
- setAdmin(game()->isAdmin());
- setHasMsgServer(game()->messageServer());
-}
-
-
-void KGameDialogMsgServerConfig::slotChangeMaxClients()
-{
- if (!game()) {
- kdError(11001) << k_funcinfo << ": no valid game object available!" << endl;
- return;
- }
- if (!game()->isAdmin()) {
- kdError(11001) << k_funcinfo << ": only ADMIN is allowed to call this!" << endl;
- return;
- }
- int max;
-// edit->setText(TQString::number()); // current max clients! //TODO
-
- TQDialog* dialog = new TQDialog();
- dialog->setCaption(i18n("Maximal Number of Clients"));
- TQHBoxLayout* l = new TQHBoxLayout(dialog, KDialog::marginHint(), KDialog::spacingHint());
- l->setAutoAdd(true);
-
- (void) new TQLabel(i18n("Maximal number of clients (-1 = infinite):"), dialog);
- TQLineEdit* edit = new TQLineEdit(dialog);//TODO: use KIntNumInput
-// edit->setText(TQString::number(max)); // current max clients! //TODO
- if (dialog->exec() == TQDialog::Accepted) {
- bool ok;
- max = edit->text().toInt(&ok);
- if (ok) {
- game()->setMaxClients(max);
- }
- }
-
-}
-
-void KGameDialogMsgServerConfig::slotRemoveClient()
-{
-}
-
-void KGameDialogMsgServerConfig::slotChangeAdmin()
-{
- if (!game()) {
- kdError(11001) << k_funcinfo << ": no valid game object available!" << endl;
- return;
- }
- if (!admin()) {
- kdError(11001) << k_funcinfo << ": only ADMIN is allowed to call this!" << endl;
- return;
- }
- //TODO
- TQ_UINT32 newAdmin = 0;
-// newAdmin = ;
- game()->electAdmin(newAdmin);
-}
-
-void KGameDialogMsgServerConfig::removeClient(TQ_UINT32 /*id*/)
-{
-//TODO
-}
-
-void KGameDialogMsgServerConfig::setAdmin(bool a)
-{
- if (admin() == a) {
- // no need to do anything
- return;
- }
- KGameDialogConfig::setAdmin(a);
- if (admin()) {
- if (d->noAdmin) {
- delete d->noAdmin;
- d->noAdmin = 0;
- }
- d->changeMaxClients = new TQPushButton(i18n("Change Maximal Number of Clients"), this);
- connect(d->changeMaxClients, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotChangeMaxClients()));
- d->changeAdmin = new TQPushButton(i18n("Change Admin"), this);
- connect(d->changeAdmin, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotChangeAdmin()));
- d->removeClient = new TQPushButton(i18n("Remove Client with All Players"), this);
- connect(d->removeClient, TQT_SIGNAL(pressed()), this, TQT_SLOT(slotRemoveClient()));
- d->senderLayout->addWidget(d->changeMaxClients);
- d->senderLayout->addWidget(d->changeAdmin);
- d->senderLayout->addWidget(d->removeClient);
- } else {
- if (d->changeMaxClients) {
- delete d->changeMaxClients;
- d->changeMaxClients = 0;
- }
- if (d->changeAdmin) {
- delete d->changeAdmin;
- d->changeAdmin = 0;
- }
- if (d->removeClient) {
- delete d->removeClient;
- d->removeClient = 0;
- }
- d->noAdmin = new TQLabel(i18n("Only the admin can configure the message server!"), this);
- d->senderLayout->addWidget(d->noAdmin);
- }
-}
-
-
-void KGameDialogMsgServerConfig::setHasMsgServer(bool has)
-{
- if (!has) {
- // delete all inputs
- if (!d->noMaster) {
- d->noMaster = new TQLabel(i18n("You don't own the message server"), this);
- d->localLayout->addWidget(d->noMaster);
- }
- return;
- }
- if (d->noMaster) {
- delete d->noMaster;
- d->noMaster = 0;
- }
- //TODO
- // list all connections, data (max clients) and so on
- // cannot be done above (together with TQPushButtons) as it is possible that
- // this client is ADMIN but not MASTER (i.e. doesn't own the messageserver)
-}
-
-
-class KGameDialogChatConfigPrivate
-{
-public:
- KGameDialogChatConfigPrivate()
- {
- mChat = 0;
- }
-
- KGameChat* mChat;
-};
-
-KGameDialogChatConfig::KGameDialogChatConfig(int chatMsgId, TQWidget* parent)
- : KGameDialogConfig(parent)
-{
- d = new KGameDialogChatConfigPrivate;
- TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
- topLayout->setAutoAdd(true);
- TQHGroupBox* b = new TQHGroupBox(i18n("Chat"), this);
- d->mChat = new KGameChat(0, chatMsgId, b);
-}
-
-KGameDialogChatConfig::~KGameDialogChatConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameDialogChatConfig::setKGame(KGame* g)
-{
- KGameDialogConfig::setKGame(g);
- d->mChat->setKGame(game());
- if (!game()) {
- hide();
- } else {
- show();
- }
-}
-
-void KGameDialogChatConfig::setOwner(KPlayer* p)
-{
- KGameDialogConfig::setOwner(p);
- if (!owner()) {
- hide();
- return;
- }
- d->mChat->setFromPlayer(owner());
- show();
-}
-
-
-
-class KGameDialogConnectionConfigPrivate
-{
-public:
- KGameDialogConnectionConfigPrivate()
- {
- mPlayerBox = 0;
- }
-
- TQPtrDict<KPlayer> mItem2Player;
- KListBox* mPlayerBox;
-};
-
-KGameDialogConnectionConfig::KGameDialogConnectionConfig(TQWidget* parent)
- : KGameDialogConfig(parent)
-{
- //TODO: prevent player to ban himself
- d = new KGameDialogConnectionConfigPrivate;
- TQVBoxLayout* topLayout = new TQVBoxLayout(this, KDialog::marginHint(), KDialog::spacingHint());
- topLayout->setAutoAdd(true);
- TQHGroupBox* b = new TQHGroupBox(i18n("Connected Players"), this);
- d->mPlayerBox = new KListBox(b);
- setMinimumHeight(100);
-}
-
-KGameDialogConnectionConfig::~KGameDialogConnectionConfig()
-{
- kdDebug(11001) << k_funcinfo << endl;
- // d->mIem2Player.clear();
- delete d;
-}
-
-void KGameDialogConnectionConfig::setKGame(KGame* g)
-{
- if (game()) {
- disconnect(game(), 0, this, 0);
- }
- KGameDialogConfig::setKGame(g);
- slotClearPlayers();
- if (game()) {
-// react to changes in KGame::playerList()
- connect(game(), TQT_SIGNAL(signalPlayerJoinedGame(KPlayer*)),
- this, TQT_SLOT(slotPlayerJoinedGame(KPlayer*)));
- connect(game(), TQT_SIGNAL(signalPlayerLeftGame(KPlayer*)),
- this, TQT_SLOT(slotPlayerLeftGame(KPlayer*)));
-
- KGame::KGamePlayerList l = *game()->playerList();
- for (KPlayer* p = l.first(); p; p = l.next()) {
- slotPlayerJoinedGame(p);
- }
- }
-}
-
-void KGameDialogConnectionConfig::setOwner(KPlayer* p)
-{
- KGameDialogConfig::setOwner(p);
-}
-
-void KGameDialogConnectionConfig::setAdmin(bool a)
-{
- if (!game()) {// not possible... in theory
- return;
- }
- if (admin()) {
- disconnect(game(), TQT_SIGNAL(executed(TQListBoxItem*)), this, 0);
- }
- KGameDialogConfig::setAdmin(a);
- if (admin()) {
- connect(d->mPlayerBox, TQT_SIGNAL(executed(TQListBoxItem*)), this,
- TQT_SLOT(slotKickPlayerOut(TQListBoxItem*)));
- }
-}
-
-TQListBoxItem* KGameDialogConnectionConfig::item(KPlayer* p) const
-{
- TQPtrDictIterator<KPlayer> it(d->mItem2Player);
- while (it.current()) {
- if (it.current() == p) {
- return (TQListBoxItem*)it.currentKey();
- }
- ++it;
- }
- return 0;
-}
-
-void KGameDialogConnectionConfig::slotClearPlayers()
-{
- TQPtrDictIterator<KPlayer> it(d->mItem2Player);
- while (it.current()) {
- slotPlayerLeftGame(it.current());
- ++it;
- }
-
- if (d->mItem2Player.count() > 0) {
- kdWarning(11001) << k_funcinfo << ": itemList wasn't cleared properly" << endl;
- d->mItem2Player.clear();
- }
- if (d->mPlayerBox->count() > 0) {
- kdWarning(11001) << k_funcinfo << ": listBox wasn't cleared properly" << endl;
- d->mPlayerBox->clear();
- }
-
-}
-
-void KGameDialogConnectionConfig::slotPlayerJoinedGame(KPlayer* p)
-{
- if (!p) {
- kdError(11001) << k_funcinfo << ": Cannot add NULL player" << endl;
- }
- if (d->mItem2Player[p]) {
- kdError(11001) << k_funcinfo << ": attempt to double add player" << endl;
- return;
- }
- kdDebug(11001) << k_funcinfo << ": add player " << p->id() << endl;
- TQListBoxText* t = new TQListBoxText(p->name());
- d->mItem2Player.insert(t, p);
- d->mPlayerBox->insertItem(t);
-
- connect(p, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
- this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
-
-}
-
-void KGameDialogConnectionConfig::slotPlayerLeftGame(KPlayer* p)
-{
- // disconnect first
- this->disconnect(p);
- if (!item(p)) {
- kdError(11001) << k_funcinfo << ": cannot find " << p->id()
- << " in list" << endl;
- return;
- }
- d->mPlayerBox->removeItem(d->mPlayerBox->index(item(p)));
-
-}
-
-void KGameDialogConnectionConfig::slotKickPlayerOut(TQListBoxItem* item)
-{
- kdDebug(11001) << "kick player out" << endl;
- KPlayer* p = d->mItem2Player[item];
- if (!p) {
- kdError(11001) << "invalid item selected - no player found" << endl;
- return;
- }
- if (!game()) {
- kdWarning(11001) << "no game set" << endl;
- return;
- }
- if (!admin()) {
- kdDebug(11001) << "Only the ADMIN can kick players" << endl;
- return;
- }
- if (p == owner()) { // you wanna ban the ADMIN ??
- kdDebug(11001) << "you cannot kick the ADMIN" << endl;
- return;
- }
-
- if (KMessageBox::questionYesNo(this, i18n("Do you want to ban player \"%1\" from the game?").tqarg(
- p->name()), TQString(), i18n("Ban Player"), i18n("Do Not Ban")) == KMessageBox::Yes) {
- kdDebug(11001) << "will remove player " << p << endl;
- game()->removePlayer(p);
-// d->mPlayerBox->removeItem(d->mPlayerBox->index(item)); // should be done by signalPlayerLeftGame
- } else {
- kdDebug(11001) << "will NOT remove player " << p << endl;
- }
-}
-
-void KGameDialogConnectionConfig::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* player)
-{
- if(prop->id() == KGamePropertyBase::IdName) {
- TQListBoxText* old = 0;
- TQPtrDictIterator<KPlayer> it(d->mItem2Player);
- while (it.current() && !old) {
- if (it.current() == player) {
- old = (TQListBoxText*)it.currentKey();
- }
- ++it;
- }
- TQListBoxText* t = new TQListBoxText(player->name());
- d->mPlayerBox->changeItem(t, d->mPlayerBox->index(old));
- d->mItem2Player.remove(old);
- d->mItem2Player.insert(t, player);
- }
-}
-
diff --git a/libkdegames/kgame/dialogs/kgamedialogconfig.h b/libkdegames/kgame/dialogs/kgamedialogconfig.h
deleted file mode 100644
index a7f309ac..00000000
--- a/libkdegames/kgame/dialogs/kgamedialogconfig.h
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-// NAMING
-// please follow these naming rules if you add/change classes:
-// the main dialog is named KGameDialog and the base config widget
-// KGameDialogConfig. All config widgets are named KGameDialogXYZConfig (where
-// XYZ = the name of the config widget, like "general" or "network") and are
-// inherited from KGameDialogConfig.
-
-#ifndef __KGAMEDIALOGCONFIG_H__
-#define __KGAMEDIALOGCONFIG_H__
-
-#include <tqwidget.h>
-#include <kdemacros.h>
-
-class TQGridLayout;
-class TQVBoxLayout;
-class TQListBoxItem;
-
-class KGame;
-class KPlayer;
-class KGamePropertyBase;
-
-class KGameDialogConfigPrivate;
-/**
- * Base class for configuration widgets.
- *
- * You can inherit from this and implement @ref submitToKGame, @ref
- * setOwner and @ref setKGame to create your personal @ref KGame configuration widget :-)
- * @short Base class for configuration widgets
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KGameDialogConfig : public TQWidget
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameDialogConfig(TQWidget* parent = 0);
- virtual ~KGameDialogConfig();
-
- /**
- * Called by @ref KGameDialog to submit all settings to the KGame
- * Object.
- * You have to replace this if you add your own widgets!
- * @param g A pointer to your KGame.
- * @param p A pointer to the player owning this dialog
- **/
- virtual void submitToKGame(KGame* g, KPlayer* p) = 0;
-
- /**
- * The owner player of the dialog has been changed. The default
- * changes the pointer for owner so don't forget to call the
- * default implementation if you overwrite this!
- *
- * You can use this e.g. to change a line edit widget containing the
- * player name.
- *
- * Note: even NULL players are allowed!
- * @param p The new owner player of the dialog
- **/
- virtual void setOwner(KPlayer* p);
-
- /**
- * The KGame object of the dialog has been changed. The default
- * implementation changes the pointer for game so don't forget to
- * call the default implementation if you overwrite this!
- *
- * You can use this e.g. to re-read the min/max player settings.
- * @param g The KGame object
- **/
- virtual void setKGame(KGame* g);
-
- /**
- * The admin status has been changed.
- * If the KGame object of this config widget is the
- * admin the user is allowed to configure it. Otherwise most
- * widgets will have to be disabled. Note that you don't necessarily
- * need to deactivate all widget - e.g. the player name must be
- * configured by the player. Mainly the KGame configuration can be done
- * by the admin only.
- *
- * By default this does nothing. Changes the value for admin so
- * don't forget to call the default implementation in derived classes!
- * @param admin Whether the KGame object of this dialog can be
- * configured
- **/
- virtual void setAdmin(bool admin);
-
- /**
- * A pointer to the KGame object that has been set by @ref setKGame.
- *
- * Note that NULL is allowed!
- * @return The KGame object assigned to this dialog
- **/
- KGame* game() const;
-
- /**
- * A pointer to the KPlayer object that has been set by @ref
- * setOwner.
- *
- * Note that NULL is allowed!
- * @return The owner of the dialog
- **/
- KPlayer* owner() const;
-
- /**
- * @return True if the owner is ADMIN otherwise FALSE. See also
- * @ref setAdmin
- **/
- bool admin() const;
-
-protected:
-
-private:
- KGameDialogConfigPrivate* d;
-};
-
-/**
- * The main game configuration widget.
- *
- * It currently contains a line edit for the name of the player only. You can
- * add widgets by using the KGameDialogGeneralConfig as parent parameter as it
- * uses TQLayout::autoAdd == true.
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameDialogGeneralConfigPrivate;
-class KGameDialogGeneralConfig : public KGameDialogConfig
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- /**
- * Construct a KGameDialogGeneralConfig. Currently it contains a line
- * edit widget to change the player name only.
- *
- * If you just want to add more widgets you can just create your widgets
- * with the KGameDialogGeneralConfig as parent as it uses
- * TQLayout::setAutoAdd(true).
- *
- * @param parent Parent widget for this dialog.
- * @param initializeGUI If you really don't want to use the
- * predefined widget and/or tqlayout use FALSE here. Note that then none
- * of the predefined widgets (currently only the name of the player)
- * will exist anymore.
- *
- **/
- KGameDialogGeneralConfig(TQWidget* parent = 0, bool initializeGUI = true);
- virtual ~KGameDialogGeneralConfig();
-
- /**
- * Called by @ref KGameDialog to submit all settings to the KGame
- * Object.
- * You have to replace this if you add your own widgets!
- * @param g A pointer to your KGame.
- * @param p A pointer to the player owning this dialog
- **/
- virtual void submitToKGame(KGame* g, KPlayer* p);
-
- /**
- * Change the owner of the config widget.
- *
- * Changes the playername in the line edit
- * @param p The new owner player
- **/
- virtual void setOwner(KPlayer* p);
-
- /**
- * See @ref KGameDialogConfig::setKGame
- *
- * Sets the default values of all KGame related predefined widgets
- * (currently none)
- **/
- virtual void setKGame(KGame* g);
-
- /**
- * See @ref KGameDialogConfig::setAdmin
- *
- * This deactivates the min/max player widgets
- **/
- virtual void setAdmin(bool admin);
-
-protected slots:
- void slotPropertyChanged(KGamePropertyBase*, KPlayer*);
-
-protected:
- void setPlayerName(const TQString& name);
-
- TQString playerName() const;
-
-private:
- KGameDialogGeneralConfigPrivate* d;
-};
-
-class KGameDialogNetworkConfigPrivate;
-class KDE_EXPORT KGameDialogNetworkConfig : public KGameDialogConfig
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameDialogNetworkConfig(TQWidget* parent = 0);
- virtual ~KGameDialogNetworkConfig();
-
-
- void disableInitConnection();
-
- /**
- * Called by @ref KGameDialog to submit all settings to the KGame
- * Object.
- * You have to replace this if you add your own widgets!
- * @param g A pointer to your KGame.
- * @param p A pointer to the player owning this dialog
- **/
- virtual void submitToKGame(KGame* g, KPlayer* p);
-
- virtual void setKGame(KGame* g);
-
- /**
- * This sets the default port and host used in @ref KGameConnectDialog.
- * The user will be able to change these defaults!
- *
- * If you don't call this then host "localhost" and port "0" is used.
- * You are strongly encouraged to change at least the port!
- * @param port The default port to connect to / listen on
- * @param host The default host to connect to
- **/
- void setDefaultNetworkInfo(const TQString& host, unsigned short int port,bool server=true);
-
- /**
- * Set service type that will be published or browsed for and game name that will be displayed in
- * server browser. Without this publishing and discovery of LAN servers will not be enabled.
- * @param name Game name. Important only for server mode. If not
- * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
- * @param type Service type (something like _kwin4._tcp). It should be unique for application.
- * @since 3.4
- **/
- void setDiscoveryInfo(const TQString& type, const TQString& name=TQString());
-
-signals:
- /**
- * This signal is emmited if the user changes the server type (client/server)
- * in the network configuration dialog.
- *
- * @param t - type type (0/1) of the connection
- **/
- void signalServerTypeChanged(int);
-
-
-protected:
- void setConnected(bool connected, bool master = false);
-
-protected slots:
- void slotInitConnection();
- void slotExitConnection();
- void slotConnectionBroken();
-
-
-private:
- KGameDialogNetworkConfigPrivate* d;
-};
-
-class KGameDialogMsgServerConfigPrivate;
-class KGameDialogMsgServerConfig : public KGameDialogConfig
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameDialogMsgServerConfig(TQWidget* parent = 0);
- virtual ~KGameDialogMsgServerConfig();
-
- virtual void submitToKGame(KGame*, KPlayer*) {}
-
- void setHasMsgServer(bool);
-
- virtual void setKGame(KGame* g);
- virtual void setAdmin(bool);
-
-protected slots:
- void slotChangeMaxClients();
- void slotChangeAdmin();
- void slotRemoveClient();
-
-protected:
- void removeClient(TQ_UINT32 id);
-
-private:
- KGameDialogMsgServerConfigPrivate* d;
-};
-
-class KGameDialogChatConfigPrivate;
-/**
- * This is not really a configuration widget but rather a simple chat widget.
- * This widget does nothing but just providing a @ref KGameChat object.
- * @short A chat widget inside a @ref KGameDialog
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameDialogChatConfig : public KGameDialogConfig
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameDialogChatConfig(int chatMsgId, TQWidget* parent = 0);
- virtual ~KGameDialogChatConfig();
-
- virtual void setKGame(KGame* g);
- virtual void setOwner(KPlayer* p);
-
- virtual void submitToKGame(KGame* g, KPlayer* p) { Q_UNUSED(g); Q_UNUSED(p); }
-
-private:
- KGameDialogChatConfigPrivate* d;
-};
-
-/**
- * @short Lists all connected players and gives the ability to kick them off the
- * game
- **/
-class KGameDialogConnectionConfigPrivate;
-class KGameDialogConnectionConfig : public KGameDialogConfig
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameDialogConnectionConfig(TQWidget* parent = 0);
- virtual ~KGameDialogConnectionConfig();
-
- virtual void setKGame(KGame* g);
- virtual void setOwner(KPlayer* p);
- virtual void setAdmin(bool admin);
-
- virtual void submitToKGame(KGame* g, KPlayer* p) { Q_UNUSED(g); Q_UNUSED(p); }
-
-protected:
- /**
- * @param p A player
- * @return The TQListBoxItem that belongs to the player @p p
- **/
- TQListBoxItem* item(KPlayer* p) const;
-
-protected slots:
- void slotKickPlayerOut(TQListBoxItem* item);
- void slotPropertyChanged(KGamePropertyBase* prop, KPlayer* p);
- void slotPlayerLeftGame(KPlayer* p);
- void slotPlayerJoinedGame(KPlayer* p);
- void slotClearPlayers();
-
-private:
- KGameDialogConnectionConfigPrivate* d;
-
-};
-#endif
diff --git a/libkdegames/kgame/dialogs/kgameerrordialog.cpp b/libkdegames/kgame/dialogs/kgameerrordialog.cpp
deleted file mode 100644
index 6ab9d71c..00000000
--- a/libkdegames/kgame/dialogs/kgameerrordialog.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <kmessagebox.h>
-#include <klocale.h>
-#include <kdebug.h>
-
-#include "kgame.h"
-
-#include "kgameerrordialog.h"
-
-class KGameErrorDialogPrivate
-{
-public:
- KGameErrorDialogPrivate()
- {
- mGame = 0;
- }
-
- const KGame* mGame;
-};
-
-KGameErrorDialog::KGameErrorDialog(TQWidget* parent) : TQObject(parent)
-{
- d = new KGameErrorDialogPrivate;
-}
-
-KGameErrorDialog::~KGameErrorDialog()
-{
- delete d;
-}
-
-void KGameErrorDialog::setKGame(const KGame* g)
-{
- slotUnsetKGame();
- d->mGame = g;
-
- connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
-
-// the error signals:
- connect(d->mGame, TQT_SIGNAL(signalNetworkErrorMessage(int, TQString)),
- this, TQT_SLOT(slotError(int, TQString)));
- connect(d->mGame, TQT_SIGNAL(signalConnectionBroken()),
- this, TQT_SLOT(slotServerConnectionLost()));
- connect(d->mGame, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32,bool)),
- this, TQT_SLOT(slotClientConnectionLost(TQ_UINT32,bool)));
-}
-
-void KGameErrorDialog::slotUnsetKGame()
-{
- if (d->mGame) {
- disconnect(d->mGame, 0, this, 0);
- }
- d->mGame = 0;
-}
-
-void KGameErrorDialog::error(const TQString& errorText, TQWidget* parent)
-{ KMessageBox::error(parent, errorText); }
-
-void KGameErrorDialog::slotServerConnectionLost()
-{
-// TODO: add IP/port of the server
- TQString message = i18n("Connection to the server has been lost!");
- error(message, (TQWidget*)parent());
-}
-
-void KGameErrorDialog::slotClientConnectionLost(TQ_UINT32 /*id*/,bool)
-{
-//TODO: add IP/port of the client
- TQString message;
-// if (c) {
-// message = i18n("Connection to client has been lost!\nID: %1\nIP: %2").tqarg(c->id()).tqarg(c->IP());
-// } else {
-// message = i18n("Connection to client has been lost!");
-// }
- message = i18n("Connection to client has been lost!");
- error(message, (TQWidget*)parent());
-}
-
-void KGameErrorDialog::slotError(int errorNo, TQString text)
-{
- TQString message = i18n("Received a network error!\nError number: %1\nError message: %2").tqarg(errorNo).tqarg(text);
- error(message, (TQWidget*)parent());
-}
-
-void KGameErrorDialog::connectionError(TQString s)
-{
- TQString message;
- if (s.isNull()) {
- message = i18n("No connection could be created.");
- } else {
- message = i18n("No connection could be created.\nThe error message was:\n%1").tqarg(s);
- }
- error(message, (TQWidget*)parent());
-}
-
-
-
-// should become the real dialog - currently we just use messageboxes
-// -> maybe unused forever
-KGameErrorMessageDialog::KGameErrorMessageDialog(TQWidget* parent)
- : KDialogBase(Plain, i18n("Error"), Ok, Ok, parent, 0, true, true)
-{
-}
-
-KGameErrorMessageDialog::~KGameErrorMessageDialog()
-{
-}
-
-
-
-#include "kgameerrordialog.moc"
diff --git a/libkdegames/kgame/dialogs/kgameerrordialog.h b/libkdegames/kgame/dialogs/kgameerrordialog.h
deleted file mode 100644
index 08726dc2..00000000
--- a/libkdegames/kgame/dialogs/kgameerrordialog.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEERRORDIALOG_H__
-#define __KGAMEERRORDIALOG_H__
-
-#include <kdialogbase.h>
-
-class KGame;
-class KGameErrorDialogPrivate;
-
-/**
- * Use error(), warning() and information() to display the information about a
- * network game. Maybe a better solution is to use KMessageBoxes
- * You can connect to the public slots, too - they will call the static
- * functions, so that you can always have a KGameErrorDialog object lying around
- * without losing much memory (a KGameErrorMessageDialog Object will be
- * created)
- * @short Error handling for KGame
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameErrorDialog : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameErrorDialog(TQWidget* parent);
- ~KGameErrorDialog();
-
- /**
- * Automatically connects the KGame object to all error dependant slots.
- * Create a KGameErrorDialog object, call this function and forget
- * everything.
- * @param g The KGame which will emit the erorrs (or not ;-) )
- **/
- void setKGame(const KGame* g);
-
- /**
- * KGame couldn't establish a connection. Use this if
- * KGame::initConnection returns false
- * @param s A string that describes the error further (like port is
- * already in use). Will be ignored if TQString()
- **/
- void connectionError(TQString s = TQString());
-
-public slots:
- void slotError(int error, TQString text);
-
- /**
- * The connection to the @ref KMessageServer has been lost
- *
- * See @ref KGameNetwork::signalConnectionBroken
- **/
- void slotServerConnectionLost();
-
- /**
- * The connection to a client has been lost by accident
- *
- * See @ref KGameNetwork::signalClientDisconnected
- **/
- void slotClientConnectionLost(TQ_UINT32 clientID,bool broken);
-
- /**
- * Unsets a @ref KGame which has been set using @ref setKGame before.
- * This is called automatically when the @ref KGame object is destroyed
- * and you normally don't have to call this yourself.
- *
- * Note that @ref setKGame also unsets an already existing @ref KGame
- * object if exising.
- **/
- void slotUnsetKGame();
-
-protected:
- void error(const TQString& errorText, TQWidget* parent = 0);
-
-private:
- KGameErrorDialogPrivate* d;
-};
-
-/**
- * The real class for error messages. KGameErrorDialog uses this to create error
- * messages (not yet).
- * Use @ref KGameErrorDialog instead.
- * @short Internally used by @ref KGameErrorDialog
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameErrorMessageDialog : public KDialogBase
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameErrorMessageDialog(TQWidget* parent);
- ~KGameErrorMessageDialog();
-
-private:
-};
-
-#endif
diff --git a/libkdegames/kgame/kgame.cpp b/libkdegames/kgame/kgame.cpp
deleted file mode 100644
index 2eebac64..00000000
--- a/libkdegames/kgame/kgame.cpp
+++ /dev/null
@@ -1,1475 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgame.h"
-#include "kgame.moc"
-#include "kgamepropertyhandler.h"
-#include "kgameproperty.h"
-#include "kplayer.h"
-#include "kgameio.h"
-#include "kgameerror.h"
-#include "kgamesequence.h"
-
-#include "kgamemessage.h"
-
-#include <unistd.h>
-#include <stdio.h>
-#include <assert.h>
-
-#include <tqbuffer.h>
-#include <tqtimer.h>
-#include <tqptrqueue.h>
-#include <tqfile.h>
-
-#include <klocale.h>
-#include <krandomsequence.h>
-#include <kdebug.h>
-
-#define KGAME_LOAD_COOKIE 4210
-
-// try to place as much as possible here
-// many things are *not* possible here as KGame has to use some inline function
-class KGamePrivate
-{
-public:
- KGamePrivate()
- {
- mUniquePlayerNumber = 0;
- mPolicy=KGame::PolicyLocal;
- mGameSequence = 0;
- }
-
- int mUniquePlayerNumber;
- TQPtrQueue<KPlayer> mAddPlayerList;// this is a list of to-be-added players. See addPlayer() docu
- KRandomSequence* mRandom;
- KGame::GamePolicy mPolicy;
- KGameSequence* mGameSequence;
-
-
- KGamePropertyHandler* mProperties;
-
- // player lists
- KGame::KGamePlayerList mPlayerList;
- KGame::KGamePlayerList mInactivePlayerList;
-
- //KGamePropertys
- KGamePropertyInt mMaxPlayer;
- KGamePropertyUInt mMinPlayer;
- KGamePropertyInt mGametqStatus; // Game running?
- TQValueList<int> mInactiveIdList;
-
-};
-
-// ------------------- GAME CLASS --------------------------
-KGame::KGame(int cookie,TQObject* parent) : KGameNetwork(cookie,parent)
-{
- kdDebug(11001) << k_funcinfo << " - " << this << ", sizeof(KGame)=" << sizeof(KGame) << endl;
- d = new KGamePrivate;
-
- d->mProperties = new KGamePropertyHandler(this);
-
- d->mProperties->registerHandler(KGameMessage::IdGameProperty,
- this,TQT_SLOT(sendProperty(int, TQDataStream&, bool* )),
- TQT_SLOT(emitSignal(KGamePropertyBase *)));
- d->mMaxPlayer.registerData(KGamePropertyBase::IdMaxPlayer, this, i18n("MaxPlayers"));
- d->mMaxPlayer.setLocal(-1); // Infinite
- d->mMinPlayer.registerData(KGamePropertyBase::IdMinPlayer, this, i18n("MinPlayers"));
- d->mMinPlayer.setLocal(0); // Always ok
- d->mGametqStatus.registerData(KGamePropertyBase::IdGametqStatus, this, i18n("GameStatus"));
- d->mGametqStatus.setLocal(Init);
- // d->mUniquePlayerNumber = 0;
- d->mRandom = new KRandomSequence;
- d->mRandom->setSeed(0);
-
- connect(this, TQT_SIGNAL(signalClientConnected(TQ_UINT32)),
- this, TQT_SLOT(slotClientConnected(TQ_UINT32)));
- connect(this, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32,bool)),
- this, TQT_SLOT(slotClientDisconnected(TQ_UINT32,bool)));
- connect(this, TQT_SIGNAL(signalConnectionBroken()),
- this, TQT_SLOT(slotServerDisconnected()));
-
- setGameSequence(new KGameSequence());
-
- // BL: FIXME This signal does no longer exist. When we are merging
- // MH: super....and how do I find out about the lost conenction now?
- // KGame and KGameNetwork, this could be improved!
-// connect(this,TQT_SIGNAL(signalConnectionLost(KGameClient *)),
-// this,TQT_SLOT(slotConnectionLost(KGameClient *)));
-}
-
-KGame::~KGame()
-{
- kdDebug(11001) << k_funcinfo << endl;
-// Debug();
- reset();
- delete d->mGameSequence;
- delete d->mRandom;
- delete d;
- kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-bool KGame::reset()
-{
- deletePlayers();
- deleteInactivePlayers();
- return true;
-}
-
-void KGame::deletePlayers()
-{
-// kdDebug(11001) << k_funcinfo << endl;
- KGamePlayerList tmp = d->mPlayerList; // in case of PolicyClean player=d->mPlayerList.first() is infinite
- KPlayer *player;
- while((player=tmp.first()))
- {
- delete player; // delete and removes the player
- tmp.removeFirst();
- }
-// kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-void KGame::deleteInactivePlayers()
-{
- KPlayer *player;
- while((player=d->mInactivePlayerList.first()))
- {
- //player->setGame(0); // prevent call backs
- d->mInactivePlayerList.remove(player);
- delete player;
- }
-}
-
-bool KGame::load(TQString filename,bool reset)
-{
- if (filename.isNull())
- {
- return false;
- }
- TQFile f(filename);
- if (!f.open(IO_ReadOnly))
- {
- return false;
- }
- TQDataStream s( &f );
- load(s,reset);
- f.close();
- return true;
-}
-
-bool KGame::load(TQDataStream &stream,bool reset)
-{ return loadgame(stream, false,reset); }
-
-bool KGame::loadgame(TQDataStream &stream, bool network,bool resetgame)
-{
- // Load Game Data
-
- // internal data
- TQ_INT32 c;
- stream >> c; // cookie
-
- if (c!=cookie())
- {
- kdWarning(11001) << "Trying to load different game version we="<<cookie() << " saved=" << c << endl;
- bool result=false;
- emit signalLoadError(stream,network,(int)c,result);
- return result;
- }
- if (resetgame) reset();
-
- uint i;
- stream >> i;
-// setPolicy((GamePolicy)i);
-
- stream >> d->mUniquePlayerNumber;
-
- if (gameSequence())
- {
- gameSequence()->setCurrentPlayer(0); // TODO !!!
- }
- int newseed;
- stream >> newseed;
- d->mRandom->setSeed(newseed);
-
- // Switch off the direct emitting of signals while
- // loading properties. This can cause inconsistencies
- // otherwise if a property emits and this emit accesses
- // a property not yet loaded
- // Note we habe to have this external locking to prevent the games unlocking
- // to access the players
- dataHandler()->lockDirectEmit();
- KPlayer *player;
- for ( player=playerList()->first(); player != 0; player=playerList()->next() )
- {
- player->dataHandler()->lockDirectEmit();
- // kdDebug(11001) << "Player "<<player->id() << " to indirect emit" <<endl;
- }
-
- // Properties
- dataHandler()->load(stream);
-
- // If there is additional data to be loaded before players are loaded then do
- // this here.
- emit signalLoadPrePlayers(stream);
-
- // Load Playerobjects
- uint playercount;
- stream >> playercount;
- kdDebug(11001) << "Loading KGame " << playercount << " KPlayer objects " << endl;
- for (i=0;i<playercount;i++)
- {
- KPlayer *newplayer=loadPlayer(stream,network);
- systemAddPlayer(newplayer);
- }
-
- TQ_INT16 cookie;
- stream >> cookie;
- if (cookie==KGAME_LOAD_COOKIE) {
- kdDebug(11001) << " Game loaded propertly"<<endl;
- } else {
- kdError(11001) << " Game loading error. probably format error"<<endl;
- }
-
- // Switch back on the direct emitting of signals and emit the
- // queued signals.
- // Note we habe to have this external locking to prevent the games unlocking
- // to access the players
- dataHandler()->unlockDirectEmit();
- for ( player=playerList()->first(); player != 0; player=playerList()->next() )
- {
- player->dataHandler()->unlockDirectEmit();
- // kdDebug(11001) << "Player "<<player->id() << " to direct emit" <<endl;
- }
-
- emit signalLoad(stream);
- return true;
-}
-
-bool KGame::save(TQString filename,bool saveplayers)
-{
- if (filename.isNull())
- {
- return false;
- }
- TQFile f(filename);
- if (!f.open(IO_WriteOnly))
- {
- return false;
- }
- TQDataStream s( &f );
- save(s,saveplayers);
- f.close();
- return true;
-}
-
-bool KGame::save(TQDataStream &stream,bool saveplayers)
-{ return savegame(stream, false,saveplayers); }
-
-bool KGame::savegame(TQDataStream &stream,bool /*network*/,bool saveplayers)
-{
- // Save Game Data
-
- // internal variables
- TQ_INT32 c=cookie();
- stream << c;
-
- uint p=(uint)policy();
- stream << p;
- stream << d->mUniquePlayerNumber;
- int newseed=(int)d->mRandom->getLong(65535);
- stream << newseed;
- d->mRandom->setSeed(newseed);
-
- // Properties
- dataHandler()->save(stream);
-
- // Save all data that need to be saved *before* the players are saved
- emit signalSavePrePlayers(stream);
-
- if (saveplayers)
- {
- savePlayers(stream,playerList());
- }
- else
- {
- stream << (uint)0; // no players saved
- }
-
- stream << (TQ_INT16)KGAME_LOAD_COOKIE;
-
- emit signalSave(stream);
- return true;
-}
-
-void KGame::savePlayer(TQDataStream &stream,KPlayer* p)
-{
-// this could be in KGameMessage as well
- stream << (TQ_INT32)p->rtti();
- stream << (TQ_INT32)p->id();
- stream << (TQ_INT32)p->calcIOValue();
- p->save(stream);
-}
-
-void KGame::savePlayers(TQDataStream &stream, KGamePlayerList *list)
-{
- if (!list)
- {
- list=playerList();
- }
-
- TQ_INT32 cnt=list->count();
- kdDebug(11001) << "Saving KGame " << cnt << " KPlayer objects " << endl;
- stream << cnt;
- KPlayer *player;
- for ( player=list->first(); player != 0; player=list->next() )
- {
- savePlayer(stream,player);
- }
-}
-
-KPlayer *KGame::createPlayer(int /*rtti*/,int /*io*/,bool /*isvirtual*/)
-{
- kdWarning(11001) << " No user defined player created. Creating default KPlayer. This crashes if you have overwritten KPlayer!!!! " << endl;
- return new KPlayer;
-}
-KPlayer *KGame::loadPlayer(TQDataStream& stream,bool isvirtual)
-{
- TQ_INT32 rtti,id,iovalue;
- stream >> rtti >> id >> iovalue;
- KPlayer *newplayer=findPlayer(id);
- if (!newplayer)
- {
- kdDebug(11001) << k_funcinfo << "Player "<< id << " not found...asking user to create one " << endl;
- newplayer=createPlayer(rtti,iovalue,isvirtual);
- //emit signalCreatePlayer(newplayer,rtti,iovalue,isvirtual,this);
- }
- /*
- if (!newplayer)
- {
- kdWarning(11001) << " No user defined player created. Creating default KPlayer. This crashes if you have overwritten KPlayer!!!! " << endl;
- newplayer=new KPlayer;
- }
- else
- {
- kdDebug(11001) << " USER Player " << newplayer << " done player->rtti=" << newplayer->rtti() << " rtti=" << rtti << endl;
- }
- */
- newplayer->load(stream);
- if (isvirtual)
- {
- newplayer->setVirtual(true);
- }
- return newplayer;
-}
-
-// ----------------- Player handling -----------------------
-
-KPlayer * KGame::findPlayer(TQ_UINT32 id) const
-{
- for (TQPtrListIterator<KPlayer> it(d->mPlayerList); it.current(); ++it)
- {
- if (it.current()->id() == id)
- {
- return it.current();
- }
- }
- for (TQPtrListIterator<KPlayer> it(d->mInactivePlayerList); it.current(); ++it)
- {
- if (it.current()->id() == id)
- {
- return it.current();
- }
- }
- return 0;
-}
-
-// it is necessary that addPlayer and systemAddPlayer are called in the same
-// order. Ie if addPlayer(foo) followed by addPlayer(bar) is called, you must
-// not call systemAddPlayer(bar) followed by systemAddPlayer(foo), as the
-// mAddPlayerList would get confused. Should be no problem as long as comServer
-// and the clients are working correctly.
-// BUT: if addPlayer(foo) does not arrive by any reason while addPlayer(bar)
-// does, we would be in trouble...
-void KGame::addPlayer(KPlayer* newplayer)
-{
- kdDebug(11001) << k_funcinfo << ": " << "; maxPlayers=" << maxPlayers() << " playerCount=" << playerCount() << endl;
- if (!newplayer)
- {
- kdFatal(11001) << "trying to add NULL player in KGame::addPlayer()" << endl;
- return ;
- }
-
- if (maxPlayers() >= 0 && (int)playerCount() >= maxPlayers())
- {
- kdWarning(11001) << "cannot add more than " << maxPlayers() << " players - deleting..." << endl;
- delete newplayer;
- return;
- }
-
- if (newplayer->id() == 0)
- {
- d->mUniquePlayerNumber++;
- newplayer->setId(KGameMessage::createPlayerId(d->mUniquePlayerNumber, gameId()));
- kdDebug(11001) << k_funcinfo << "NEW!!! player " << newplayer << " now has id " << newplayer->id() << endl;
- }
- else
- {
- // this could happen in games which use their own ID management by certain
- // reasons. that is NOT recommended
- kdDebug(11001) << k_funcinfo << "player " << newplayer << " already has an id: " << newplayer->id() << endl;
- }
-
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- // We distinguis here what policy we have
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- systemAddPlayer(newplayer);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- savePlayer(stream,newplayer);
- // Store the player for delayed clean adding
- if (policy()==PolicyClean)
- {
- d->mAddPlayerList.enqueue(newplayer);
- }
- sendSystemMessage(stream,(int)KGameMessage::IdAddPlayer, 0);
- }
-}
-
-void KGame::systemAddPlayer(KPlayer* newplayer)
-{
- if (!newplayer)
- {
- kdFatal(11001) << "trying to add NULL player in KGame::systemAddPlayer()" << endl;
- return ;
- }
- if (newplayer->id() == 0)
- {
- kdWarning(11001) << k_funcinfo << "player " << newplayer << " has no ID" << endl;
- }
-
- if (findPlayer(newplayer->id()))
- {
- kdError(11001) << "ERROR: Double adding player !!!!! NOT GOOD !!!!!! " << newplayer->id() << "...I delete it again" << endl;
- delete newplayer;
- }
- else
- {
- kdDebug(11001) << "Trying to add player " << newplayer <<" maxPlayers="<<maxPlayers()<<" playerCount="<<playerCount() << endl;
- // Add the player to the game
- d->mPlayerList.append(newplayer);
- newplayer->setGame(this);
- kdDebug(11001) << "Player: isVirtual=" << newplayer->isVirtual() << endl;
- kdDebug(11001) << " id=" << newplayer->id() << " #Players="
- << d->mPlayerList.count() << " added " << newplayer
- << " (virtual=" << newplayer->isVirtual() << ")" << endl;
- emit signalPlayerJoinedGame(newplayer);
- }
-}
-
-// Called by the KPlayer destructor
-void KGame::playerDeleted(KPlayer *player)
-{
- kdDebug(11001) << k_funcinfo << ": id (" << player->id() << ") to be removed " << player << endl;
-
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- systemRemovePlayer(player,false);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- if (!player->isVirtual())
- {
- kdDebug(11001) << k_funcinfo << ": sending IdRemovePlayer "<<player->id() << endl;
- sendSystemMessage(player->id(), KGameMessage::IdRemovePlayer, 0);
- }
- }
-}
-
-bool KGame::removePlayer(KPlayer * player, TQ_UINT32 receiver)
-{//transmit to all clients, or to receiver only
- if (!player)
- {
- kdFatal(11001) << "trying to remove NULL player in KGame::removePlayer()" << endl;
- return false;
- }
- kdDebug(11001) << k_funcinfo << ": id (" << player->id() << ") to be removed " << player << endl;
-
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- systemRemovePlayer(player,true);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- kdDebug(11001) << k_funcinfo << ": sending IdRemovePlayer "<<player->id() << endl;
- sendSystemMessage(player->id(),KGameMessage::IdRemovePlayer, receiver);
- }
- return true;
- // we will receive the message in networkTransmission()
-}
-
-void KGame::systemRemovePlayer(KPlayer* player,bool deleteit)
-{
- kdDebug(11001) << k_funcinfo << endl;
- if (!player)
- {
- kdWarning(11001) << "cannot remove NULL player" << endl;
- return;
- }
- if (!systemRemove(player,deleteit))
- {
- kdWarning(11001) << "player " << player << "(" << player->id() << ") Could not be found!" << endl;
- }
-
- if (gametqStatus()==(int)Run && playerCount()<minPlayers())
- {
- kdWarning(11001) << k_funcinfo ": not enough players, PAUSING game\n" << endl;
- setGametqStatus(Pause);
- }
-}
-
-bool KGame::systemRemove(KPlayer* p,bool deleteit)
-{
- if (!p)
- {
- kdWarning(11001) << "cannot remove NULL player" << endl;
- return false;
- }
- bool result;
- kdDebug(11001) << k_funcinfo << ": Player (" << p->id() << ") to be removed " << p << endl;
-
- if (d->mPlayerList.count() == 0)
- {
- result = false;
- }
- else
- {
- result = d->mPlayerList.remove(p);
- }
-
- emit signalPlayerLeftGame(p);
-
- p->setGame(0);
- if (deleteit)
- {
- delete p;
- }
-
- return result;
-}
-
-bool KGame::inactivatePlayer(KPlayer* player)
-{
- if (!player)
- {
- return false;
- }
- kdDebug(11001) << "Inactivate player " << player->id() << endl;
-
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- systemInactivatePlayer(player);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- sendSystemMessage(player->id(), KGameMessage::IdInactivatePlayer);
- }
-
- return true;
-}
-
-bool KGame::systemInactivatePlayer(KPlayer* player)
-{
- if (!player || !player->isActive())
- {
- return false;
- }
- kdDebug(11001) << " Inactivate player " << player->id() << endl;
-
- int pid=player->id();
- // Virtual players cannot be deactivated. They will be removed
- if (player->isVirtual())
- {
- systemRemovePlayer(player,true);
- }
- else
- {
- d->mPlayerList.remove(player);
- d->mInactivePlayerList.prepend(player);
- player->setActive(false);
- }
- emit signalPlayerLeftGame(player);
- if (isAdmin())
- {
- d->mInactiveIdList.prepend(pid);
- }
- return true;
-}
-
-bool KGame::activatePlayer(KPlayer * player)
-{
- if (!player)
- {
- return false;
- }
- kdDebug(11001) << k_funcinfo << ": activate " << player->id() << endl;
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- systemActivatePlayer(player);
- }
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- sendSystemMessage(player->id(), KGameMessage::IdActivatePlayer);
- }
- return true;
-}
-
-bool KGame::systemActivatePlayer(KPlayer* player)
-{
- if (!player || player->isActive())
- {
- return false;
- }
- kdDebug(11001) << k_funcinfo << ": activate " << player->id() << endl;
-
- d->mInactivePlayerList.remove(player);
- player->setActive(true);
- addPlayer(player);
- if (isAdmin())
- {
- d->mInactiveIdList.remove(player->id());
- }
- return true;
-}
-
-// -------------------- Properties ---------------------------
-
-void KGame::setMaxPlayers(uint maxnumber)
-{ if (isAdmin()) { d->mMaxPlayer.changeValue(maxnumber); } }
-
-void KGame::setMinPlayers(uint minnumber)
-{ if (isAdmin()) { d->mMinPlayer.changeValue(minnumber); } }
-
-uint KGame::minPlayers() const
-{ return d->mMinPlayer.value(); }
-
-int KGame::maxPlayers() const
-{ return d->mMaxPlayer.value(); }
-
-uint KGame::playerCount() const
-{ return d->mPlayerList.count(); }
-
-int KGame::gametqStatus() const
-{ return d->mGametqStatus.value(); }
-
-bool KGame::isRunning() const
-{ return d->mGametqStatus.value() == Run; }
-
-KGamePropertyHandler* KGame::dataHandler() const
-{ return d->mProperties; }
-
-
-KGame::KGamePlayerList* KGame::inactivePlayerList()
-{ return &d->mInactivePlayerList; }
-
-const KGame::KGamePlayerList* KGame::inactivePlayerList() const
-{ return &d->mInactivePlayerList; }
-
-KGame::KGamePlayerList* KGame::playerList()
-{ return &d->mPlayerList; }
-
-const KGame::KGamePlayerList* KGame::playerList() const
-{ return &d->mPlayerList; }
-
-KRandomSequence* KGame::random() const
-{ return d->mRandom; }
-
-
-bool KGame::sendPlayerInput(TQDataStream &msg, KPlayer *player, TQ_UINT32 sender)
-{
- if (!player)
- {
- kdError(11001) << k_funcinfo << ": NULL player" << endl;
- return false;
- }
- if (!isRunning())
- {
- kdError(11001) << k_funcinfo << ": game not running" << endl;
- return false;
- }
-
- kdDebug(11001) << k_funcinfo << ": transmitting playerInput over network" << endl;
- sendSystemMessage(msg, (int)KGameMessage::IdPlayerInput, player->id(), sender);
- return true;
-}
-
-bool KGame::systemPlayerInput(TQDataStream &msg, KPlayer *player, TQ_UINT32 sender)
-{
- if (!player)
- {
- kdError(11001) << k_funcinfo << ": NULL player" << endl;
- return false;
- }
- if (!isRunning())
- {
- kdError(11001) << k_funcinfo << ": game not running" << endl;
- return false;
- }
- kdDebug(11001) << "KGame: Got playerInput from messageServer... sender: " << sender << endl;
- if (playerInput(msg,player))
- {
- playerInputFinished(player);
- }
- else
- {
- kdDebug(11001) << k_funcinfo<<": switching off player input"<<endl;
- // TODO: (MH 03-2003): We need an return option from playerInput so that
- // the player's is not automatically disabled here
- if (!player->asyncInput())
- {
- player->setTurn(false); // in turn based games we have to switch off input now
- }
- }
- return true;
-}
-
-
-KPlayer * KGame::playerInputFinished(KPlayer *player)
-{
- kdDebug(11001) << k_funcinfo<<"player input finished for "<<player->id()<<endl;
- // Check for game over and if not allow the next player to move
- int gameOver = 0;
- if (gameSequence())
- {
- gameSequence()->setCurrentPlayer(player);
- }
- // do not call gameSequence()->checkGameOver() to keep backward compatibility!
- gameOver = checkGameOver(player);
- if (gameOver!=0)
- {
- if (player)
- {
- player->setTurn(false);
- }
- setGametqStatus(End);
- emit signalGameOver(gameOver,player,this);
- }
- else if (!player->asyncInput())
- {
- player->setTurn(false); // in turn based games we have to switch off input now
- if (gameSequence())
- {
- TQTimer::singleShot(0,this,TQT_SLOT(prepareNext()));
- }
- }
- return player;
-}
-
-// Per default we do not do anything
-int KGame::checkGameOver(KPlayer *player)
-{
- if (gameSequence())
- {
- return gameSequence()->checkGameOver(player);
- }
- return 0;
-}
-
-void KGame::setGameSequence(KGameSequence* sequence)
-{
- delete d->mGameSequence;
- d->mGameSequence = sequence;
- if (d->mGameSequence)
- {
- d->mGameSequence->setGame(this);
- }
-}
-
-KGameSequence* KGame::gameSequence() const
-{
- return d->mGameSequence;
-}
-
-void KGame::prepareNext()
-{
- if (gameSequence())
- {
- // we don't call gameSequence->nextPlayer() to keep old code working
- nextPlayer(gameSequence()->currentPlayer());
- }
-}
-
-KPlayer *KGame::nextPlayer(KPlayer *last,bool exclusive)
-{
- if (gameSequence())
- {
- return gameSequence()->nextPlayer(last, exclusive);
- }
- return 0;
-}
-
-void KGame::setGametqStatus(int status)
-{
- kdDebug(11001) << k_funcinfo << ": GAMESTATUS CHANGED to" << status << endl;
- if (status==(int)Run && playerCount()<minPlayers())
- {
- kdDebug(11001) << k_funcinfo << ": not enough players, pausing game\n" << endl;
- status=Pause;
- }
- d->mGametqStatus = status;
-}
-
-void KGame::networkTransmission(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, TQ_UINT32 /*clientID*/)
-{//clientID is unused
- // message targets a playerobject. If we find it we forward the message to the
- // player. Otherwise we proceed here and hope the best that the user processes
- // the message
-
-// kdDebug(11001) << k_funcinfo << ": we="<<(int)gameId()<<" id="<<msgid<<" recv=" << receiver << " sender=" << sender << endl;
-
-
- // *first* notice the game that something has changed - so no return prevents
- // this
- emit signalMessageUpdate(msgid, receiver, sender);
- if (KGameMessage::isPlayer(receiver))
- {
- //kdDebug(11001) << "message id " << msgid << " seems to be for a player ("<<active=p->isActive()<<" recv="<< receiver << endl;
- KPlayer *p=findPlayer(receiver);
- if (p && p->isActive())
- {
- p->networkTransmission(stream,msgid,sender);
- return;
- }
- if (p)
- {
- kdDebug(11001) << "player is here but not active" << endl;
- }
- else
- {
- kdDebug(11001) << "no player found" << endl;
- }
- }
- // If it is not for a player it is meant for us!!!! Otherwise the
- // gamenetwork would not have passed the message to us!
-
- // GameProperties processed
- if (d->mProperties->processMessage(stream, msgid, sender == gameId()))
- {
-// kdDebug(11001 ) << "KGame: message taken by property - returning" << endl;
- return ;
- }
-
- switch(msgid)
- {
- case KGameMessage::IdSetupGame: // Client: First step in setup game
- {
- TQ_INT16 v;
- TQ_INT32 c;
- stream >> v >> c;
- kdDebug(11001) << " ===================> (Client) " << k_funcinfo << ": Got IdSetupGame ================== " << endl;
- kdDebug(11001) << "our game id is " << gameId() << " Lib version=" << v << " App Cookie=" << c << endl;
- // Verify identity of the network partners
- if (c!=cookie())
- {
- kdError(11001) << "IdGameSetup: Negotiate Game: cookie mismatch I'am="<<cookie()<<" master="<<c<<endl;
- sendError(KGameError::Cookie, KGameError::errCookie(cookie(), c));
- disconnect(); // disconnect from master
- }
- else if (v!=KGameMessage::version())
- {
- sendError(KGameError::Version, KGameError::errVersion(v));
- disconnect(); // disconnect from master
- }
- else
- {
- setupGame(sender);
- }
- kdDebug(11001) << "========== (Client) Setup game done\n";
- }
- break;
- case KGameMessage::IdSetupGameContinue: // Master: second step in game setup
- {
- kdDebug(11001) << "=====>(Master) " << k_funcinfo << " - IdSetupGameContinue" << endl;
- setupGameContinue(stream, sender);
- }
- break;
- case KGameMessage::IdActivatePlayer: // Activate Player
- {
- int id;
- stream >> id;
- kdDebug(11001) << "Got IdActivatePlayer id=" << id << endl;
- if (sender!=gameId() || policy()!=PolicyDirty)
- {
- systemActivatePlayer(findPlayer(id));
- }
- }
- break;
- case KGameMessage::IdInactivatePlayer: // Inactivate Player
- {
- int id;
- stream >> id;
- kdDebug(11001) << "Got IdInactivatePlayer id=" << id << endl;
- if (sender!=gameId() || policy()!=PolicyDirty)
- {
- systemInactivatePlayer(findPlayer(id));
- }
- }
- break;
- case KGameMessage::IdAddPlayer:
- {
- kdDebug(11001) << k_funcinfo << ": Got IdAddPlayer" << endl;
- if (sender!=gameId() || policy()!=PolicyDirty)
- {
- KPlayer *newplayer=0;
- // We sent the message so the player is already available
- if (sender==gameId())
- {
- kdDebug(11001) << "dequeue previously added player" << endl;
- newplayer = d->mAddPlayerList.dequeue();
- }
- else
- {
- newplayer=loadPlayer(stream,true);
- }
- systemAddPlayer(newplayer);// the final, local, adding
- //systemAddPlayer(stream);
- }
- }
- break;
- case KGameMessage::IdRemovePlayer: // Client should delete player id
- {
- int id;
- stream >> id;
- kdDebug(11001) << k_funcinfo << ": Got IdRemovePlayer " << id << endl;
- KPlayer *p=findPlayer(id);
- if (p)
- {
- // Otherwise the player is already removed
- if (sender!=gameId() || policy()!=PolicyDirty)
- {
- systemRemovePlayer(p,true);
- }
- }
- else
- {
- kdWarning(11001) << k_funcinfo << "Cannot find player " << id << endl;
- }
- }
- break;
- case KGameMessage::IdGameLoad:
- {
- kdDebug(11001) << "====> (Client) " << k_funcinfo << ": Got IdGameLoad" << endl;
- loadgame(stream,true,false);
- }
- break;
- case KGameMessage::IdGameSetupDone:
- {
- int cid;
- stream >> cid;
- kdDebug(11001) << "====> (CLIENT) " << k_funcinfo << ": Got IdGameSetupDone for client "
- << cid << " we are =" << gameId() << endl;
- sendSystemMessage(gameId(), KGameMessage::IdGameConnected, 0);
- }
- break;
- case KGameMessage::IdGameConnected:
- {
- int cid;
- stream >> cid;
- kdDebug(11001) << "====> (ALL) " << k_funcinfo << ": Got IdGameConnected for client "<< cid << " we are =" << gameId() << endl;
- emit signalClientJoinedGame(cid,this);
- }
- break;
-
- case KGameMessage::IdSyncRandom: // Master forces a new random seed on us
- {
- int newseed;
- stream >> newseed;
- kdDebug(11001) << "CLIENT: setting random seed to " << newseed << endl;
- d->mRandom->setSeed(newseed);
- }
- break;
- case KGameMessage::IdDisconnect:
- {
- // if we disconnect we *always* start a local game.
- // this could lead into problems if we just change the message server
- if (sender != gameId())
- {
- kdDebug(11001) << "client " << sender << " leaves game" << endl;
- return;
- }
- kdDebug(11001) << "leaving the game" << endl;
- // start a new local game
- // no other client is by default connected to this so this call should be
- // enough
- setMaster();
- }
- break;
- default:
- {
- if (msgid < KGameMessage::IdUser)
- {
- kdError(11001) << "incorrect message id " << msgid << " - emit anyway"
- << endl;
- }
- kdDebug(11001) << k_funcinfo << ": User data msgid " << msgid << endl;
- emit signalNetworkData(msgid - KGameMessage::IdUser,((TQBuffer*)stream.device())->readAll(),receiver,sender);
- }
- break;
- }
-
-}
-
-// called by the IdSetupGameContinue Message - MASTER SIDE
-// Here the master needs to decide which players can take part at the game
-// and which will be deactivated
-void KGame::setupGameContinue(TQDataStream& stream, TQ_UINT32 sender)
-{
- KPlayer *player;
- TQ_INT32 cnt;
- int i;
- stream >> cnt;
-
- TQValueList<int> inactivateIds;
-
- KGamePlayerList newPlayerList;
- newPlayerList.setAutoDelete(true);
- for (i=0;i<cnt;i++)
- {
- player=loadPlayer(stream,true);
- kdDebug(11001) << " Master got player " << player->id() <<" rawgame=" << KGameMessage::rawGameId(player->id()) << " from sender " << sender << endl;
- if (KGameMessage::rawGameId(player->id()) != sender)
- {
- kdError(11001) << "Client tries to add player with wrong game id - cheat possible" << endl;
- }
- else
- {
- newPlayerList.append(player);
- kdDebug(11001) << " newplayerlist appended " << player->id() << endl;
- }
- }
-
- newPlayersJoin(playerList(),&newPlayerList,inactivateIds);
-
-
- kdDebug(11001) << " Master calculates how many players to activate client has cnt=" << cnt << endl;
- kdDebug(11001) << " The game has " << playerCount() << " active players" << endl;
- kdDebug(11001) << " The user deactivated "<< inactivateIds.count() << " player already " << endl;
- kdDebug(11001) << " MaxPlayers for this game is " << maxPlayers() << endl;
-
- // Do we have too many players? (After the programmer disabled some?)
- // MH: We cannot use have player here as it CHANGES in the loop
- // int havePlayers = cnt+playerCount()-inactivateIds.count();
- kdDebug(11001) << " havePlayers " << cnt+playerCount()-inactivateIds.count() << endl;
- while (maxPlayers() > 0 && maxPlayers() < (int)(cnt+playerCount() - inactivateIds.count()))
- {
- kdDebug(11001) << " Still to deacticvate "
- << (int)(cnt+playerCount()-inactivateIds.count())-(int)maxPlayers()
- << endl;
- KPlayer *currentPlayer=0;
- int currentPriority=0x7fff; // MAX_UINT (16bit?) to get the maximum of the list
- // find lowest network priority which is not yet in the newPlayerList
- // do this for the new players
- for ( player=newPlayerList.first(); player != 0; player=newPlayerList.next() )
- {
- // Already in the list
- if (inactivateIds.find(player->id())!=inactivateIds.end())
- {
- continue;
- }
- if (player->networkPriority()<currentPriority)
- {
- currentPriority=player->networkPriority();
- currentPlayer=player;
- }
- }
-
- // find lowest network priority which is not yet in the newPlayerList
- // Do this for the network players
- for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
- {
- // Already in the list
- if (inactivateIds.find(player->id())!=inactivateIds.end())
- {
- continue;
- }
- if (player->networkPriority()<currentPriority)
- {
- currentPriority=player->networkPriority();
- currentPlayer=player;
- }
- }
-
- // add it to inactivateIds
- if (currentPlayer)
- {
- kdDebug(11001) << "Marking player " << currentPlayer->id() << " for inactivation" << endl;
- inactivateIds.append(currentPlayer->id());
- }
- else
- {
- kdError(11001) << "Couldn't find a player to dectivate..That is not so good..." << endl;
- break;
- }
- }
-
- kdDebug(11001) << "Alltogether deactivated " << inactivateIds.count() << " players" << endl;
-
- TQValueList<int>::Iterator it;
- for ( it = inactivateIds.begin(); it != inactivateIds.end(); ++it )
- {
- int pid=*it;
- kdDebug(11001) << " pid=" << pid << endl;
- }
-
- // Now deactivate the network players from the inactivateId list
- //TQValueList<int>::Iterator it;
- for ( it = inactivateIds.begin(); it != inactivateIds.end(); ++it )
- {
- int pid=*it;
- if (KGameMessage::rawGameId(pid) == sender)
- {
- continue; // client's player
- }
- kdDebug(11001) << " -> the network needs to deactivate " << pid <<endl;
- player=findPlayer(pid);
- if (player)
- {
- // We have to make REALLY sure that the player is gone. With any policy
- systemInactivatePlayer(player);
- if (policy()!=PolicyLocal)
- {
- sendSystemMessage(player->id(), KGameMessage::IdInactivatePlayer);
- }
- }
- else
- {
- kdError(11001) << " We should deactivate a player, but cannot find it...not good." << endl;
- }
- }
-
- // Now send out the player list which the client can activate
- for ( player=newPlayerList.first(); player != 0; player=newPlayerList.next() )
- {
- kdDebug(11001) << " newplayerlist contains " << player->id() << endl;
- // Only activate what is not in the list
- if (inactivateIds.find(player->id())!=inactivateIds.end())
- {
- continue;
- }
- kdDebug(11001) << " -> the client can ******** reactivate ******** " << player->id() << endl;
- sendSystemMessage(player->id(), KGameMessage::IdActivatePlayer, sender);
- }
-
- // Save the game over the network
- TQByteArray bufferS;
- TQDataStream streamS(bufferS,IO_WriteOnly);
- // Save game over netowrk and save players
- savegame(streamS,true,true);
- sendSystemMessage(streamS,KGameMessage::IdGameLoad,sender);
-
-
- // Only to the client first , as the client will add players
- sendSystemMessage(sender, KGameMessage::IdGameSetupDone, sender);
-}
-
-// called by the IdSetupGame Message - CLIENT SIDE
-// Client needs to prepare for network transfer
-void KGame::setupGame(TQ_UINT32 sender)
-{
- TQByteArray bufferS;
- TQDataStream streamS(bufferS,IO_WriteOnly);
-
- // Deactivate all players
- KGamePlayerList mTmpList(d->mPlayerList); // we need copy otherwise the removal crashes
- TQ_INT32 cnt=mTmpList.count();
- kdDebug(11001) << "Client: playerlistcount=" << d->mPlayerList.count() << " tmplistcout=" << cnt << endl;
-
- streamS << cnt;
-
- TQPtrListIterator<KPlayer> it(mTmpList);
- KPlayer *player;
- while (it.current())
- {
- player=it.current();
- systemInactivatePlayer(player);
- // Give the new game id to all players (which are inactivated now)
- player->setId(KGameMessage::createPlayerId(player->id(),gameId()));
-
- // Save it for the master to decide what to do
- savePlayer(streamS,player);
-
- ++it;
- --cnt;
- }
- if (d->mPlayerList.count() > 0 || cnt!=0)
- {
- kdFatal(11001) << "KGame::setupGame(): Player list is not empty! or cnt!=0=" <<cnt << endl;
- }
-
- sendSystemMessage(streamS,KGameMessage::IdSetupGameContinue,sender);
-}
-
-// unused by KGame
-void KGame::syncRandom()
-{
- int newseed=(int)d->mRandom->getLong(65535);
- sendSystemMessage(newseed,KGameMessage::IdSyncRandom); // Broadcast
- d->mRandom->setSeed(newseed);
-}
-
-void KGame::Debug()
-{
- KGameNetwork::Debug();
- kdDebug(11001) << "------------------- KGAME -------------------------" << endl;
- kdDebug(11001) << "this: " << this << endl;
- kdDebug(11001) << "uniquePlayer " << d->mUniquePlayerNumber << endl;
- kdDebug(11001) << "gameStatus " << gametqStatus() << endl;
- kdDebug(11001) << "MaxPlayers : " << maxPlayers() << endl;
- kdDebug(11001) << "NoOfPlayers : " << playerCount() << endl;
- kdDebug(11001) << "NoOfInactive: " << d->mInactivePlayerList.count() << endl;
- kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-void KGame::slotClientConnected(TQ_UINT32 clientID)
-{
- if (isAdmin())
- {
- negotiateNetworkGame(clientID);
- }
-}
-
-void KGame::slotServerDisconnected() // Client side
-{
- kdDebug(11001) << "======= SERVER DISCONNECT ======="<<endl;
- kdDebug(11001) << "+++ (CLIENT)++++++++" << k_funcinfo << ": our GameID="<<gameId() << endl;
-
- int oldgamestatus=gametqStatus();
-
- KPlayer *player;
- KGamePlayerList removeList;
- kdDebug(11001) << "Playerlist of client=" << d->mPlayerList.count() << " count" << endl;
- kdDebug(11001) << "Inactive Playerlist of client=" << d->mInactivePlayerList.count() << " count" << endl;
- for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
- {
- // TODO: CHECK: id=0, could not connect to server in the first place??
- if (KGameMessage::rawGameId(player->id()) != gameId() && gameId()!=0)
- {
- kdDebug(11001) << "Player " << player->id() << " belongs to a removed game" << endl;
- removeList.append(player);
- }
- }
-
- for ( player=removeList.first(); player != 0; player=removeList.next() )
- {
- bool remove = true;
- emit signalReplacePlayerIO(player, &remove);
- if (remove)
- {
- kdDebug(11001) << " ---> Removing player " << player->id() << endl;
- systemRemovePlayer(player,true); // no network necessary
- }
- }
-
- setMaster();
- kdDebug(11001) << " our game id is after setMaster " << gameId() << endl;
-
- KGamePlayerList mReList(d->mInactivePlayerList);
- for ( player=mReList.first(); player != 0; player=mReList.next() )
- {
- // TODO ?check for priority? Sequence should be ok
- if ((int)playerCount()<maxPlayers() || maxPlayers()<0)
- {
- systemActivatePlayer(player);
- }
- }
- kdDebug(11001) << " Players activated player-cnt=" << playerCount() << endl;
-
- for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
- {
- int oldid=player->id();
- d->mUniquePlayerNumber++;
- player->setId(KGameMessage::createPlayerId(d->mUniquePlayerNumber,gameId()));
- kdDebug(11001) << "Player id " << oldid <<" changed to " << player->id() << " as we are now local" << endl;
- }
- // TODO clear inactive lists ?
- Debug();
- for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
- {
- player->Debug();
- }
- kdDebug(11001) << "+++++++++++" << k_funcinfo << " DONE=" << endl;
- emit signalClientLeftGame(0,oldgamestatus,this);
-}
-
-void KGame::slotClientDisconnected(TQ_UINT32 clientID,bool /*broken*/) // server side
-{
- kdDebug(11001) << "++++(SERVER)+++++++" << k_funcinfo << " clientId=" << clientID << endl;
-
- int oldgamestatus=gametqStatus();
-
- KPlayer *player;
- KGamePlayerList removeList;
- kdDebug(11001) << "Playerlist of client=" << d->mPlayerList.count() << " count" << endl;
- for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
- {
- if (KGameMessage::rawGameId(player->id())==clientID)
- {
- kdDebug(11001) << "Player " << player->id() << " belongs to the removed game" << endl;
- removeList.append(player);
- }
- }
-
- for ( player=removeList.first(); player != 0; player=removeList.next() )
- {
- // try to replace the KGameIO first
- bool remove = true;
- emit signalReplacePlayerIO(player, &remove);
- if (remove) {
- // otherwise (no new KGameIO) remove the player
- kdDebug(11001) << " ---> Removing player " << player->id() << endl;
- removePlayer(player,0);
- }
- }
-
- // Now add inactive players - sequence should be ok
- // TODO remove players from removed game
- for (unsigned int idx=0;idx<d->mInactiveIdList.count();idx++)
- {
- TQValueList<int>::Iterator it1 = d->mInactiveIdList.at(idx);
- player = findPlayer(*it1);
- if (((int)playerCount() < maxPlayers() || maxPlayers() < 0) && player && KGameMessage::rawGameId(*it1) != clientID)
- {
- activatePlayer(player);
- }
- }
- emit signalClientLeftGame(clientID,oldgamestatus,this);
-}
-
-
-// -------------------- Synchronisation -----------------------
-
-// this initializes a newly connected client.
-// we send the number of players (including type) as well as game status and
-// properties to the client. After the initialization has been completed both
-// clients should have the same status (ie players, properties, etc)
-void KGame::negotiateNetworkGame(TQ_UINT32 clientID)
-{
- kdDebug(11001) << "===========================" << k_funcinfo << ": clientID=" << clientID << " =========================== "<< endl;
- if (!isAdmin())
- {
- kdError(11001) << k_funcinfo << ": Serious WARNING..only gameAdmin should call this" << endl;
- return ;
- }
-
- TQByteArray buffer;
- TQDataStream streamGS(buffer,IO_WriteOnly);
-
- // write Game setup specific data
- //streamGS << (TQ_INT32)maxPlayers();
- //streamGS << (TQ_INT32)minPlayers();
-
- // send to the newly connected client *only*
- TQ_INT16 v=KGameMessage::version();
- TQ_INT32 c=cookie();
- streamGS << v << c;
- sendSystemMessage(streamGS, KGameMessage::IdSetupGame, clientID);
-}
-
-bool KGame::sendGroupMessage(const TQByteArray &msg, int msgid, TQ_UINT32 sender, const TQString& group)
-{
-// AB: group must not be i18n'ed!! we should better use an id for group and use
-// a groupName() for the name // FIXME
- KPlayer *player;
- for ( player=d->mPlayerList.first(); player != 0; player=d->mPlayerList.next() )
- {
- if (player && player->group()==group)
- {
- sendMessage(msg,msgid,player->id(), sender);
- }
- }
- return true;
-}
-
-bool KGame::sendGroupMessage(const TQDataStream &msg, int msgid, TQ_UINT32 sender, const TQString& group)
-{ return sendGroupMessage(((TQBuffer*)msg.device())->buffer(), msgid, sender, group); }
-
-bool KGame::sendGroupMessage(const TQString& msg, int msgid, TQ_UINT32 sender, const TQString& group)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer, IO_WriteOnly);
- stream << msg;
- return sendGroupMessage(stream, msgid, sender, group);
-}
-
-bool KGame::addProperty(KGamePropertyBase* data)
-{ return dataHandler()->addProperty(data); }
-
-bool KGame::sendPlayerProperty(int msgid, TQDataStream& s, TQ_UINT32 playerId)
-{ return sendSystemMessage(s, msgid, playerId); }
-
-void KGame::sendProperty(int msgid, TQDataStream& stream, bool* sent)
-{
- bool s = sendSystemMessage(stream, msgid);
- if (s)
- {
- *sent = true;
- }
-}
-
-void KGame::emitSignal(KGamePropertyBase *me)
-{
- emit signalPropertyChanged(me,this);
-}
-
-KGamePropertyBase* KGame::findProperty(int id) const
-{ return d->mProperties->find(id); }
-
-KGame::GamePolicy KGame::policy() const
-{
- return d->mPolicy;
-}
-void KGame::setPolicy(GamePolicy p,bool recursive)
-{
- // Set KGame policy
- d->mPolicy=p;
- if (recursive)
- {
- // Set all KGame property policy
- dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
-
- // Set all KPLayer (active or inactive) property policy
- for (TQPtrListIterator<KPlayer> it(d->mPlayerList); it.current(); ++it)
- {
- it.current()->dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
- }
- for (TQPtrListIterator<KPlayer> it(d->mInactivePlayerList); it.current(); ++it)
- {
- it.current()->dataHandler()->setPolicy((KGamePropertyBase::PropertyPolicy)p,false);
- }
- }
-}
-
-/*
- * vim: et sw=2
- */
diff --git a/libkdegames/kgame/kgame.h b/libkdegames/kgame/kgame.h
deleted file mode 100644
index bf66dcb8..00000000
--- a/libkdegames/kgame/kgame.h
+++ /dev/null
@@ -1,933 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAME_H_
-#define __KGAME_H_
-
-#include <tqstring.h>
-#include <tqptrlist.h>
-#include <tqvaluelist.h>
-
-#include "kgamenetwork.h"
-#include <kdemacros.h>
-class KRandomSequence;
-
-class KPlayer;
-class KGamePropertyBase;
-class KGamePropertyHandler;
-class KGameSequence;
-
-class KGamePrivate;
-
-/**
- * @short The main KDE game object
- *
- * The KGame class is the central game object. A game basically
- * consists of following features:
- * - Player handling (add, remove,...)
- * - Game status (end,start,pause,...)
- * - load/save
- * - Move (and message) handling
- * - nextPlayer and gameOver()
- * - Network connection (for KGameNetwork)
- *
- * Example:
- * \code
- * KGame *game=new KGame;
- * \endcode
- *
- *
- * @author Martin Heni <martin@heni-online.de>
- *
- */
-class KDE_EXPORT KGame : public KGameNetwork
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- typedef TQPtrList<KPlayer> KGamePlayerList;
-
- /**
- * The policy of the property. This can be PolicyClean (setVale uses
- * send), PolicyDirty (setValue uses changeValue) or
- * PolicyLocal (setValue uses setLocal).
- *
- * A "clean" policy means that the property is always the same on every
- * client. This is achieved by calling send which actually changes
- * the value only when the message from the MessageServer is received.
- *
- * A "dirty" policy means that as soon as setValue is called the
- * property is changed immediately. And additionally sent over network.
- * This can sometimes lead to bugs as the other clients do not
- * immediately have the same value. For more information see
- * changeValue.
- *
- * PolicyLocal means that a KGameProperty behaves like ever
- * "normal" variable. Whenever setValue is called (e.g. using "=")
- * the value of the property is changes immediately without sending it
- * over network. You might want to use this if you are sure that all
- * clients set the property at the same time.
- **/
- enum GamePolicy
- {
- PolicyUndefined = 0,
- PolicyClean = 1,
- PolicyDirty = 2,
- PolicyLocal = 3
- };
-
- /**
- * Create a KGame object. The cookie is used to identify your
- * game in load/save and network operations. Change this between
- * games.
- */
- KGame(int cookie=42,TQObject* parent=0);
-
- /**
- * Destructs the game
- */
- virtual ~KGame();
-
- /**
- * Gives debug output of the game status
- */
- virtual void Debug();
-
- /**
- * Game status - Use this to Control the game flow.
- * The KGame e.g. sets the status to Pause when you have
- * less player than the minimum amount
- */
- enum GametqStatus
- {
- Init = 0,
- Run = 1,
- Pause = 2,
- End = 3,
- Abort = 4,
- SystemPause = 5,
- Intro = 6,
- UsertqStatus = 7
- };
-
- // Properties
- /**
- * Returns a list of all active players
- *
- * @return the list of players
- */
- KGamePlayerList *playerList();
-
- /**
- * The same as @ref playerList but returns a const pointer.
- **/
- const KGamePlayerList *playerList() const;
-
- /**
- * Returns a list of all inactive players
- * @return the list of players
- */
- KGamePlayerList *inactivePlayerList();
-
- /**
- * The same as @ref inactivePlayerList but returns a const pointer.
- **/
- const KGamePlayerList *inactivePlayerList() const;
-
- /**
- * Returns a pointer to the game's KRandomSequence. This sequence is
- * identical for all network players!
- * @return KRandomSequence pointer
- */
- KRandomSequence *random() const;
-
- /**
- * @return The KGameSequence object that is currently in use.
- * @see setGameSequence
- **/
- KGameSequence *gameSequence() const;
-
- /**
- * Is the game running
- * @return true/false
- */
- bool isRunning() const;
-
- // Player handling
- /**
- * Returns the player object for a given player id
- * @param id Player id
- * @return player object
- */
- KPlayer *findPlayer(TQ_UINT32 id) const;
-
- /**
- * Set a new @ref KGameSequence to control player management. By default
- * KGame uses a normal @ref KGameSequence object. You might want to subclass
- * that and provide your own object.
- *
- * The previous sequence will get deleted.
- * @param sequence The new game sequence object. KGame takes ownership and
- * will delete it on destruction!
- **/
- void setGameSequence(KGameSequence* sequence);
-
- /**
- * Note that KPlayer::save must be implemented properly, as well as
- * KPlayer::rtti
- * This will only send a message to all clients. The player is _not_ added
- * directly!
- * See also playerInput which will be called as soon as the
- * player really has been added.
- *
- * Note that an added player will first get into a "queue" and won't be in
- * the game. It will be added to the game as soon as systemAddPlayer is
- * called what will happen as soon as IdAddPlayer is received.
- *
- * Note: you probably want to connect to signalPlayerJoinedGame for
- * further initialization!
- * @param newplayer The player you want to add. KGame will send a message to
- * all clients and add the player using systemAddPlayer
- **/
- void addPlayer(KPlayer* newplayer);
-
- /**
- * Sends a message over the network, msgid=IdRemovePlayer.
- *
- * As soon as this message is received by networkTransmission
- * systemRemovePlayer is called and the player is removed.
- **/
- //AB: TODO: make sendMessage to return if the message will be able to be
- //sent, eg if a socket is connected, etc. If sendMessage returns false
- //remove the player directly using systemRemovePlayer
- bool removePlayer(KPlayer * player) { return removePlayer(player, 0); }
-
- /**
- * Called by the destructor of KPlayer to remove itself from the game
- *
- **/
- void playerDeleted(KPlayer * player);
-
- /**
- * sends activate player: internal use only?
- */
- bool activatePlayer(KPlayer *player);
-
- /**
- * sends inactivate player: internal use only?
- */
- bool inactivatePlayer(KPlayer *player);
-
- /**
- * Set the maximal number of players. After this is
- * reached no more players can be added. You must be ADMIN to call this (@see
- * isAdmin).
- * @param maxnumber maximal number of players
- */
- void setMaxPlayers(uint maxnumber);
-
- /**
- * What is the maximal number of players?
- * @return maximal number of players
- */
- int maxPlayers() const;
-
- /**
- * Set the minimal number of players. A game can not be started
- * with less player resp. is paused when already running. You must be ADMIN
- * to call this (see @ref isAdmin)!
- * @param minnumber minimal number of players
- */
- void setMinPlayers(uint minnumber);
-
- /**
- * What is the minimal number of players?
- * @return minimal number of players
- */
- uint minPlayers() const;
-
- /**
- * Returns how many players are plugged into the game
- * @return number of players
- */
- uint playerCount() const;
-
- /**
- * @deprecated
- * Use @ref KGameSequence::nextPlayer instead
- **/
- virtual KPlayer * nextPlayer(KPlayer *last,bool exclusive=true);
-
- // Input events
- /**
- * Called by KPlayer to send a player input to the
- * KMessageServer.
- **/
- virtual bool sendPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0);
-
- /**
- * Called when a player input arrives from KMessageServer.
- *
- * Calls prepareNext (using TQTimer::singleShot) if gameOver()
- * returns 0. This function should normally not be used outside KGame.
- * It could be made non-virtual,protected in a later version. At the
- * moment it is a virtual function to give you more control over KGame.
- *
- * For documentation see playerInput.
- **/
- virtual bool systemPlayerInput(TQDataStream &msg,KPlayer *player,TQ_UINT32 sender=0);
-
- /**
- * This virtual function is called if the KGame needs to create a new player.
- * This happens only over a network and with load/save. Doing nothing
- * will create a default KPlayer. If you want to have your own player
- * you have to create one with the given rtti here.
- * Note: If your game uses a player class derived from KPlayer you MUST
- * override this function and create your player here. Otherwise the
- * game will crash.
- * Example:
- * \code
- * KPlayer *MyGame::createPlayer(int rtti,int io,bool isvirtual)
- * {
- * KPlayer *player=new MyPlayer;
- * if (!isvirtual) // network player ?
- * {
- * // Define something like this to add the IO modules
- * createIO(player,(KGameIO::IOMode)io);
- * }
- * return player;
- * }
- * \endcode
- *
- * @param rtti is the type of the player (0 means default KPlayer)
- * @param io is the 'or'ed rtti of the KGameIO's
- * @param isvirtual true if player is virtual
- */
- virtual KPlayer *createPlayer(int rtti,int io,bool isvirtual);
-
- // load/save
- /**
- * Load a saved game, from file OR network. This function has
- * to be overwritten or you need to connect to the load signal
- * if you have game data other than KGameProperty.
- * For file load you should reset() the game before any load attempt
- * to make sure you load into an clear state.
- *
- * @param stream a data stream where you can stream the game from
- * @param reset - shall the game be reset before loading
- *
- * @return true?
- */
- virtual bool load(TQDataStream &stream,bool reset=true);
-
- /**
- * Same as above function but with different parameters
- *
- * @param filename - the filename of the file to be opened
- * @param reset - shall the game be reset before loading
- *
- * @return true?
- **/
- virtual bool load(TQString filename,bool reset=true);
-
- /**
- * Save a game to a file OR to network. Otherwise the same as
- * the load function
- *
- * @param stream a data stream to load the game from
- * @param saveplayers If true then all players wil be saved too
- *
- * @return true?
- */
- virtual bool save(TQDataStream &stream,bool saveplayers=true);
-
- /**
- * Same as above function but with different parameters
- *
- * @param filename the filename of the file to be saved
- * @param saveplayers If true then all players wil be saved too
- *
- * @return true?
- **/
- virtual bool save(TQString filename,bool saveplayers=true);
-
- /**
- * Resets the game, i.e. puts it into a state where everything
- * can be started from, e.g. a load game
- * Right now it does only need to delete all players
- *
- * @return true on success
- */
- virtual bool reset();
-
-
- // Game sequence
- /**
- * returns the game status, ie running,pause,ended,...
- *
- * @return game status
- */
- int gametqStatus() const;
-
- /**
- * sets the game status
- *
- * @param status the new status
- */
- void setGametqStatus(int status);
-
- /**
- * docu: see KPlayer
- **/
- bool addProperty(KGamePropertyBase* data);
-
- /**
- * This is called by KPlayer::sendProperty only! Internal function!
- **/
- bool sendPlayerProperty(int msgid, TQDataStream& s, TQ_UINT32 playerId);
-
- /**
- * This function allows to find the pointer to a player
- * property when you know it's id
- */
- KGamePropertyBase* findProperty(int id) const;
-
- /**
- * Changes the consistency policy of a property. The
- * GamePolicy is one of PolicyClean (default), PolicyDirty or PolicyLocal.
- *
- * It is up to you to decide how you want to work.
- **/
- void setPolicy(GamePolicy p,bool recursive=true);
-
- /**
- * @return The default policy of the property
- **/
- GamePolicy policy() const;
-
- /**
- * See KGameNetwork::sendMessage
- *
- * Send a network message msg with a given message ID msgid to all players of
- * a given group (see KPlayer::group)
- * @param msg the message which will be send. See messages.txt for contents
- * @param msgid an id for this message
- * @param sender the id of the sender
- * @param group the group of the tqreceivers
- * @return true if worked
- */
- bool sendGroupMessage(const TQByteArray& msg, int msgid, TQ_UINT32 sender, const TQString& group);
- bool sendGroupMessage(const TQDataStream &msg, int msgid, TQ_UINT32 sender, const TQString& group);
- bool sendGroupMessage(int msg, int msgid, TQ_UINT32 sender, const TQString& group);
- bool sendGroupMessage(const TQString& msg, int msgid, TQ_UINT32 sender, const TQString& group);
-
- /**
- * This will either forward an incoming message to a specified player
- * (see KPlayer::networkTransmission) or
- * handle the message directly (e.g. if msgif==IdRemovePlayer it will remove
- * the (in the stream) specified player). If both is not possible (i.e. the
- * message is user specified data) the signal signalNetworkData is
- * emitted.
- *
- * This emits signalMessageUpdate <em>before</em> doing anything with
- * the message. You can use this signal when you want to be notified about
- * an update/change.
- * @param msgid Specifies the kind of the message. See messages.txt for
- * further information
- * @param stream The message that is being sent
- * @param receiver The is of the player this message is for. 0 For broadcast.
- * @param sender
- * @param clientID the client from which we received the transmission - hardly used
- **/
- virtual void networkTransmission(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, TQ_UINT32 clientID);
-
- /**
- * Returns a pointer to the KGame property handler
- **/
- KGamePropertyHandler* dataHandler() const;
-
-protected slots:
- /**
- * Called by KGamePropertyHandler only! Internal function!
- **/
- void sendProperty(int msgid, TQDataStream& stream, bool* sent);
-
- /**
- * Called by KGamePropertyHandler only! Internal function!
- **/
- void emitSignal(KGamePropertyBase *me);
-
- /**
- * @deprecated
- * Use KGameSequence::prepareNext() instead
- **/
- virtual void prepareNext();
-
-
- /**
- * Calls negotiateNetworkGame()
- * See KGameNetwork::signalClientConnected
- **/
- void slotClientConnected(TQ_UINT32 clientId);
-
- /**
- * This slot is called whenever the connection to a client is lost (ie the
- * signal KGameNetwork::signalClientDisconnected is emitted) and will remove
- * the players from that client.
- * @param clientId The client the connection has been lost to
- * @param broken (ignore this - not used)
- **/
- void slotClientDisconnected(TQ_UINT32 clientId,bool broken);
-
- /**
- * This slot is called whenever the connection to the server is lost (ie the
- * signal KGameNetwork::signalConnectionBroken is emitted) and will
- * switch to local game mode
- **/
- void slotServerDisconnected();
-
-signals:
- /**
- * When a client disconnects from the game usually all players from that
- * client are removed. But if you use completely the KGame structure you
- * probably don't want this. You just want to replace the KGameIO of the
- * (human) player by a computer KGameIO. So this player continues game but
- * is from this point on controlled by the computer.
- *
- * You achieve this by connecting to this signal. It is emitted as soon as a
- * client disconnects on <em>all</em> other clients. Make sure to add a new
- * KGameIO only once! you might want to use @ref isAdmin for this. If you
- * added a new KGameIO set *remove=false otherwise the player is completely
- * removed.
- * @param player The player that is about to be removed. Add your new
- * KGameIO here - but only on <em>one</em> client!
- * @param remove Set this to FALSE if you don't want this player to be
- * removed completely.
- **/
- void signalReplacePlayerIO(KPlayer* player, bool* remove);
-
- /**
- * The game will be loaded from the given stream. Load from here
- * the data which is NOT a game or player property.
- * It is not necessary to use this signal for a full property game.
- *
- * This signal is emitted <em>before</em> the players are loaded by
- * KGame. See also signalLoad
- *
- * You must load <em>exactly</em> the same data from the stream that you have saved
- * in signalSavePrePlayers. Otherwise player loading will not work
- * anymore.
- *
- * @param stream the load stream
- */
- void signalLoadPrePlayers(TQDataStream &stream);
-
- /**
- * The game will be loaded from the given stream. Load from here
- * the data which is NOT a game or player property.
- * It is not necessary to use this signal for a full property game.
- *
- * @param stream the load stream
- */
- void signalLoad(TQDataStream &stream);
-
- /**
- * The game will be saved to the given stream. Fill this with data
- * which is NOT a game or player property.
- * It is not necessary to use this signal for a full property game.
- *
- * This signal is emitted <em>before</em> the players are saved by
- * KGame. See also signalSave
- *
- * If you can choose between signalSavePrePlayers and signalSave then
- * better use signalSave
- *
- * @param stream the save stream
- **/
- void signalSavePrePlayers(TQDataStream &stream);
-
- /**
- * The game will be saved to the given stream. Fill this with data
- * which is NOT a game or player property.
- * It is not necessary to use this signal for a full property game.
- *
- * @param stream the save stream
- */
- void signalSave(TQDataStream &stream);
-
- /**
- * Is emmited if a game with a different version cookie is loaded.
- * Normally this should result in an error. But maybe you do support
- * loading of older game versions. Here would be a good place to do a
- * conversion.
- *
- * @param stream - the load stream
- * @param network - true if this is a network connect. False for load game
- * @param cookie - the saved cookie. It differs from KGame::cookie()
- * @param result - set this to true if you managed to load the game
- */
- void signalLoadError(TQDataStream &stream,bool network,int cookie, bool &result);
-
- /**
- * We got an user defined update message. This is usually done
- * by a sendData in a inherited KGame Object which defines its
- * own methods and has to syncronise them over the network.
- * Reaction to this is usually a call to a KGame function.
- */
- void signalNetworkData(int msgid,const TQByteArray& buffer, TQ_UINT32 receiver, TQ_UINT32 sender);
-
- /**
- * We got an network message. this can be used to notify us that something
- * changed. What changed can be seen in the message id. Whether this is
- * the best possible method to do this is unclear...
- */
- void signalMessageUpdate(int msgid,TQ_UINT32 receiver,TQ_UINT32 sender);
-
- /**
- * a player left the game because of a broken connection or so!
- *
- * Note that when this signal is emitted the player is not part of @ref
- * playerList anymore but the pointer is still valid. You should do some
- * final cleanups here since the player is usually deleted after the signal
- * is emitted.
- *
- * @param player the player who left the game
- */
- void signalPlayerLeftGame(KPlayer *player);
-
- /**
- * a player joined the game
- *
- * @param player the player who joined the game
- */
- void signalPlayerJoinedGame(KPlayer *player);
-
-
- /**
- * This signal is emmited if a player property changes its value and
- * the property is set to notify this change
- */
- void signalPropertyChanged(KGamePropertyBase *property, KGame *me);
-
- /**
- * Is emitted after a call to gameOver() returns a non zero
- * return code. This code is forwarded to this signal as 'status'.
- *
- * @param status the return code of gameOver()
- * @param current the player who did the last move
- * @param me a pointer to the KGame object
- */
- void signalGameOver(int status, KPlayer *current, KGame *me);
-
- /**
- * Is emmited after a client is successfully connected to the game.
- * The client id is the id of the new game client. An easy way to
- * check whether that's us is
- * \code
- * if (clientid==gameid()) .. // we joined
- * else ... // someone joined the game
- * \endcode
- * @param clientid - The id of the new client
- * @param me - our game pointer
- */
- void signalClientJoinedGame(TQ_UINT32 clientid,KGame *me);
-
- /**
- * This signal is emitted after a network partner left the
- * game (either by a broken connection or voluntarily).
- * All changes to the network players have already be done.
- * If there are not enough players left, the game might have
- * been paused. To check this you get the old gamestatus
- * before the disconnection as argument here. The id of the
- * client who left the game allows to distinguish who left the
- * game. If it is 0, the server disconnected and you were a client
- * which has been switched back to local play.
- * You can use this signal to, e.g. set some menues back to local
- * player when they were network before.
- *
- * @param clientID - 0:server left, otherwise the client who left
- * @param oldgamestatus - the gamestatus before the loss
- * @param me - our game pointer
- **/
- void signalClientLeftGame(int clientID,int oldgamestatus,KGame *me);
-
-
-protected:
- /**
- * A player input occurred. This is the most important function
- * as the given message will contain the current move made by
- * the given player.
- * Note that you HAVE to overwrite this function. Otherwise your
- * game makes no sense at all.
- * Generally you have to return TRUE in this function. Only then
- * the game sequence is proceeded by calling @ref playerInputFinished
- * which in turn will check for game over or the next player
- * However, if you have a delayed move, because you e.g. move a
- * card or a piece you want to return FALSE to pause the game sequence
- * and then manually call @ref playerInputFinished to resume it.
- * Example:
- * \code
- * bool MyClass::playerInput(TQDataStream &msg,KPlayer *player)
- * {
- * TQ_INT32 move;
- * msg >> move;
- * kdDebug() << " Player " << player->id() << " moved to " << move <<
- * endl;
- * return true;
- * }
- * \endcode
- *
- * @param msg the move message
- * @param player the player who did the move
- * @return true - input ready, false: input manual
- */
- virtual bool playerInput(TQDataStream &msg,KPlayer *player)=0;
-
-
- /**
- * Called after the player input is processed by the game. Here the
- * checks for game over and nextPlayer (in the case of turn base games)
- * are processed.
- * Call this manually if you have a delayed move, i.e. your playerInput
- * function returns FALSE. If it returns true you need not do anything
- * here.
- *
- * @return the current player
- *
- **/
- KPlayer *playerInputFinished(KPlayer *player);
-
-
- /**
- * This virtual function can be overwritten for your own player management.
- * It is called when a new game connects to an existing network game or
- * to the network master. In case you do not want all players of both games
- * to be present in the new network game, you can deactivate players here.
- * This is of particular importance if you have a game with fixed number of
- * player like e.g. chess. A network connect needs to disable one player of
- * each game to make sense.
- *
- * Not overwriting this function will activate a default behaviour which
- * will deactivate players until the @ref maxPlayers() numebr is reached
- * according to the KPlayer::networkPriority() value. Players with a low
- * value will be kicked out first. With equal priority players of the new
- * client will leave first. This means, not setting this value and not
- * overwriting this function will never allow a chess game to add client
- * players!!!
- * On the other hand setting one player of each game to a networkPriorty of
- * say 10, already does most of the work for you.
- *
- * The parameters of this function are the playerlist of the network game,
- * which is @ref playerList(). The second argument is the player list of
- * the new client who wants to join and the third argument serves as return
- * parameter. All <em>player ID's</em> which are written into this list
- * will be <em>removed</em> from the created game. You do this by an
- * \code
- * inactivate.append(player->id());
- * \endcode
- *
- * @param oldplayer - the list of the network players
- * @param newplayer - the list of the client players
- * @param inactivate - the value list of ids to be deactivated
- *
- **/
- virtual void newPlayersJoin(KGamePlayerList *oldplayer,
- KGamePlayerList *newplayer,
- TQValueList<int> &inactivate) {
- Q_UNUSED( oldplayer );
- Q_UNUSED( newplayer );
- Q_UNUSED( inactivate );
- }
-
- /**
- * Save the player list to a stream. Used for network game and load/save.
- * Can be overwritten if you know what you are doing
- *
- * @param stream is the stream to save the player ot
- * @param list the optional list is the player list to be saved, default is playerList()
- *
- **/
- void savePlayers(TQDataStream &stream,KGamePlayerList *list=0);
-
- /**
- * Prepare a player for being added. Put all data about a player into the
- * stream so that it can be sent to the KGameCommunicationServer using
- * addPlayer (e.g.)
- *
- * This function ensures that the code for adding a player is the same in
- * addPlayer as well as in negotiateNetworkGame
- * @param stream is the stream to add the player
- * @param player The player to add
- **/
- void savePlayer(TQDataStream& stream,KPlayer* player);
-
- /**
- * Load the player list from a stream. Used for network game and load/save.
- * Can be overwritten if you know what you are doing
- *
- * @param stream is the stream to save the player to
- * @param isvirtual will set the virtual flag true/false
- *
- **/
- KPlayer *loadPlayer(TQDataStream& stream,bool isvirtual=false);
-
-
- /**
- * inactivates player. Use @ref inactivatePlayer instead!
- */
- bool systemInactivatePlayer(KPlayer *player);
-
- /**
- * activates player. Use @ref activatePlayer instead!
- */
- bool systemActivatePlayer(KPlayer *player);
-
- /**
- * Adds a player to the game
- *
- * Use @ref addPlayer to send @ref KGameMessage::IdAddPlayer. As soon as
- * this Id is received this function is called, where the player (see @ref
- * KPlayer::rtti) is added as well as its properties (see @ref KPlayer::save
- * and @ref KPlayer::load)
- *
- * This method calls the overloaded @ref systemAddPlayer with the created
- * player as argument. That method will really add the player.
- * If you need to do some changes to your newly added player just connect to
- * @ref signalPlayerJoinedGame
- */
-
- /**
- * Finally adds a player to the game and therefore to the list.
- **/
- void systemAddPlayer(KPlayer* newplayer);
-
- /**
- * Removes a player from the game
- *
- * Use removePlayer to send KGameMessage::IdRemovePlayer. As soon
- * as this Id is received systemRemovePlayer is called and the player is
- * removed directly.
- **/
- void systemRemovePlayer(KPlayer* player,bool deleteit);
-
- /**
- * This member function will transmit e.g. all players to that client, as well as
- * all properties of these players (at least if they have been added by
- * @ref KPlayer::addProperty) so that the client will finally have the same
- * status as the master. You want to overwrite this function if you expand
- * KGame by any properties which have to be known by all clients.
- *
- * Only the ADMIN is allowed to call this.
- * @param clientID The ID of the message client which has connected
- **/
- virtual void negotiateNetworkGame(TQ_UINT32 clientID);
-
- /**
- * syncronise the random numbers with all network clients
- * not used by KGame - if it should be kept then as public method
- */
- void syncRandom();
-
- void deletePlayers();
- void deleteInactivePlayers();
-
- /**
- * @deprecated
- * Use @ref KGameSequence instead.
- *
- * @param player the player who made the last move
- * @return anything else but 0 is considered as game over
- */
- virtual int checkGameOver(KPlayer *player);
-
- /**
- * Load a saved game, from file OR network. Internal.
- * Warning: loadgame must not rely that all players all already
- * activated. Actually the network will activate a player AFTER
- * the loadgame only. This is not true anymore. But be careful
- * anyway.
- *
- * @param stream a data stream where you can stream the game from
- * @param network is it a network call -> make players virtual
- * @param reset shall the game be reset before loading
- *
- * @return true?
- */
- virtual bool loadgame(TQDataStream &stream, bool network, bool reset);
-
- /**
- * Save a game, to file OR network. Internal.
- *
- * @param stream a data stream where you can stream the game from
- * @param network is it a call from the network or from a file (unused but informative)
- * @param saveplayers shall the players be saved too (should be TRUE)
- *
- * @return true?
- */
- virtual bool savegame(TQDataStream &stream, bool network,bool saveplayers);
-
-private:
- //AB: this is to hide the "receiver" parameter from the user. It shouldn't be
- //used if possible (except for init).
- /**
- * This is an overloaded function. Id differs from the public one only in
- * its parameters:
- *
- * @param receiver The Client that will receive the message. You will hardly
- * ever need this. It it internally used to initialize a newly connected
- * client.
- **/
- //void addPlayer(KPlayer* newplayer, TQ_UINT32 receiver);
-
- /**
- * Just the same as the public one except receiver:
- * @param receiver 0 for broadcast, otherwise the receiver. Should only be
- * used in special circumstances and not outside KGame.
- **/
- bool removePlayer(KPlayer * player, TQ_UINT32 receiver);
-
- /**
- * Helping function - game negotiation
- **/
- void setupGame(TQ_UINT32 sender);
-
- /**
- * Helping function - game negotiation
- **/
- void setupGameContinue(TQDataStream& msg, TQ_UINT32 sender);
-
- /**
- * Removes a player from all lists, removes the @ref KGame pointer from the
- * @ref KPlayer and deletes the player. Used by (e.g.) @ref
- * systemRemovePlayer
- * @return True if the player has been removed, false if the current is not
- * found
- **/
- bool systemRemove(KPlayer* player,bool deleteit);
-
-
-private:
- KGamePrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamechat.cpp b/libkdegames/kgame/kgamechat.cpp
deleted file mode 100644
index 11f47f7b..00000000
--- a/libkdegames/kgame/kgamechat.cpp
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2002 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kgamechat.h"
-#include "kgamechat.moc"
-
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgameproperty.h"
-#include "kgamemessage.h"
-
-#include <klocale.h>
-#include <kdebug.h>
-
-#include <tqmap.h>
-#include <tqintdict.h>
-
-//FIXME:
-#define FIRST_ID 2 // first id, that is free of use, aka not defined above
-
-class KGameChatPrivate
-{
-public:
- KGameChatPrivate()
- {
- mFromPlayer = 0;
- mGame = 0;
-
- mToMyGroup = -1;
- }
-
- KGame* mGame;
- KPlayer* mFromPlayer;
- int mMessageId;
-
-
- TQIntDict<KPlayer> mIndex2Player;
-
- TQMap<int, int> mSendId2PlayerId;
- int mToMyGroup; // just as the above - but for the group, not for players
-};
-
-KGameChat::KGameChat(KGame* g, int msgid, TQWidget* parent) : KChatBase(parent)
-{
- init(g, msgid);
-}
-
-KGameChat::KGameChat(KGame* g, int msgid, KPlayer* fromPlayer, TQWidget* parent) : KChatBase(parent)
-{
- init(g, msgid);
- setFromPlayer(fromPlayer);
-}
-
-KGameChat::KGameChat(TQWidget* parent) : KChatBase(parent)
-{
- init(0, -1);
-}
-
-KGameChat::~KGameChat()
-{
- kdDebug(11001) << k_funcinfo << endl;
- delete d;
-}
-
-void KGameChat::init(KGame* g, int msgId)
-{
- kdDebug(11001) << k_funcinfo << endl;
- d = new KGameChatPrivate;
- setMessageId(msgId);
-
- setKGame(g);
-}
-
-void KGameChat::addMessage(int fromId, const TQString& text)
-{
- if (!d->mGame) {
- kdWarning(11001) << "no KGame object has been set" << endl;
- addMessage(i18n("Player %1").tqarg(fromId), text);
- } else {
- KPlayer* p = d->mGame->findPlayer(fromId);
- if (p) {
- kdDebug(11001) << "adding message of player " << p->name() << "id=" << fromId << endl;
- addMessage(p->name(), text);
- } else {
- kdWarning(11001) << "Could not find player id " << fromId << endl;
- addMessage(i18n("Unknown"), text);
- }
- }
-}
-
-void KGameChat::returnPressed(const TQString& text)
-{
- if (!d->mFromPlayer) {
- kdWarning(11001) << k_funcinfo << ": You must set a player first!" << endl;
- return;
- }
- if (!d->mGame) {
- kdWarning(11001) << k_funcinfo << ": You must set a game first!" << endl;
- return;
- }
-
- kdDebug(11001) << "from: " << d->mFromPlayer->id() << "==" << d->mFromPlayer->name() << endl;
-
- int id = sendingEntry();
-
- if (isToGroupMessage(id)) {
- // note: there is currently no support for other groups than the players
- // group! It might be useful to send to other groups, too
- TQString group = d->mFromPlayer->group();
- kdDebug(11001) << "send to group " << group << endl;
- int sender = d->mFromPlayer->id();
- d->mGame->sendGroupMessage(text, messageId(), sender, group);
-
- //TODO
- //AB: this message is never received!! we need to connect to
- //KPlayer::networkData!!!
- //TODO
-
- } else {
- int toPlayer = 0;
- if (!isSendToAllMessage(id) && isToPlayerMessage(id)) {
- toPlayer = playerId(id);
- if (toPlayer == -1) {
- kdError(11001) << k_funcinfo << ": don't know that player "
- << "- internal ERROR" << endl;
- }
- }
- int receiver = toPlayer;
- int sender = d->mFromPlayer->id();
- d->mGame->sendMessage(text, messageId(), receiver, sender);
- }
-}
-
-void KGameChat::setMessageId(int msgid)
-{ d->mMessageId = msgid; }
-
-int KGameChat::messageId() const
-{ return d->mMessageId; }
-
-bool KGameChat::isSendToAllMessage(int id) const
-{ return (id == KChatBase::SendToAll); }
-
-bool KGameChat::isToGroupMessage(int id) const
-{ return (id == d->mToMyGroup); }
-
-bool KGameChat::isToPlayerMessage(int id) const
-{
-return d->mSendId2PlayerId.contains(id); }
-
-TQString KGameChat::sendToPlayerEntry(const TQString& name) const
-{ return i18n("Send to %1").tqarg(name); }
-
-int KGameChat::playerId(int id) const
-{
- if (!isToPlayerMessage(id)) {
- return -1;
- }
-
- return d->mSendId2PlayerId[id];
-}
-
-int KGameChat::sendingId(int playerId) const
-{
- TQMap<int, int>::Iterator it;
- for (it = d->mSendId2PlayerId.begin(); it != d->mSendId2PlayerId.end(); ++it) {
- if (it.data() == playerId) {
- return it.key();
- }
- }
- return -1;
-}
-
-const TQString& KGameChat::fromName() const
-{ return d->mFromPlayer ? d->mFromPlayer->name() : TQString(); }
-
-bool KGameChat::hasPlayer(int id) const
-{
- return (sendingId(id) != -1);
-}
-
-void KGameChat::setFromPlayer(KPlayer* p)
-{
- if (!p) {
- kdError(11001) << k_funcinfo << ": NULL player" << endl;
- removeSendingEntry(d->mToMyGroup);
- d->mFromPlayer = 0;
- return;
- }
- if (d->mFromPlayer) {
- changeSendingEntry(p->group(), d->mToMyGroup);
- } else {
- if (d->mToMyGroup != -1) {
- kdWarning(11001) << "send to my group exists already - removing" << endl;
- removeSendingEntry(d->mToMyGroup);
- }
- d->mToMyGroup = nextId();
- addSendingEntry(i18n("Send to My Group (\"%1\")").tqarg(p->group()), d->mToMyGroup);
- }
- d->mFromPlayer = p;
- kdDebug(11001) << k_funcinfo << " player=" << p << endl;
-}
-
-
-void KGameChat::setKGame(KGame* g)
-{
- if (d->mGame) {
- slotUnsetKGame();
- }
- kdDebug(11001) << k_funcinfo << " game=" << g << endl;
- d->mGame = g;
-
- if (d->mGame) {
- connect(d->mGame, TQT_SIGNAL(signalPlayerJoinedGame(KPlayer*)),
- this, TQT_SLOT(slotAddPlayer(KPlayer*)));
- connect(d->mGame, TQT_SIGNAL(signalPlayerLeftGame(KPlayer*)),
- this, TQT_SLOT(slotRemovePlayer(KPlayer*)));
- connect(d->mGame, TQT_SIGNAL(signalNetworkData(int, const TQByteArray&, TQ_UINT32, TQ_UINT32)),
- this, TQT_SLOT(slotReceiveMessage(int, const TQByteArray&, TQ_UINT32, TQ_UINT32)));
- connect(d->mGame, TQT_SIGNAL(destroyed()), this, TQT_SLOT(slotUnsetKGame()));
-
- TQPtrList<KPlayer> playerList = *d->mGame->playerList();
- for (int unsigned i = 0; i < playerList.count(); i++) {
- slotAddPlayer(playerList.at(i));
- }
- }
-}
-
-KGame* KGameChat::game() const
-{
- return d->mGame;
-}
-
-KPlayer* KGameChat::fromPlayer() const
-{
- return d->mFromPlayer;
-}
-
-void KGameChat::slotUnsetKGame()
-{
-//TODO: test this method!
-
- if (!d->mGame) {
- return;
- }
- disconnect(d->mGame, 0, this, 0);
- removeSendingEntry(d->mToMyGroup);
- TQMap<int, int>::Iterator it;
- for (it = d->mSendId2PlayerId.begin(); it != d->mSendId2PlayerId.end(); ++it) {
- removeSendingEntry(it.data());
- }
-}
-
-void KGameChat::slotAddPlayer(KPlayer* p)
-{
- if (!p) {
- kdError(11001) << k_funcinfo << ": cannot add NULL player" << endl;
- return;
- }
- if (hasPlayer(p->id())) {
- kdError(11001) << k_funcinfo << ": player was added before" << endl;
- return;
- }
-
- int sendingId = nextId();
- addSendingEntry(comboBoxItem(p->name()), sendingId);
- d->mSendId2PlayerId.insert(sendingId, p->id());
- connect(p, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase*, KPlayer*)),
- this, TQT_SLOT(slotPropertyChanged(KGamePropertyBase*, KPlayer*)));
- connect(p, TQT_SIGNAL(signalNetworkData(int, const TQByteArray&, TQ_UINT32, KPlayer*)),
- this, TQT_SLOT(slotReceivePrivateMessage(int, const TQByteArray&, TQ_UINT32, KPlayer*)));
-}
-
-void KGameChat::slotRemovePlayer(KPlayer* p)
-{
- if (!p) {
- kdError(11001) << k_funcinfo << ": NULL player" << endl;
- return;
- }
- if (!hasPlayer(p->id())) {
- kdError(11001) << k_funcinfo << ": cannot remove non-existent player" << endl;
- return;
- }
-
- int id = sendingId(p->id());
- removeSendingEntry(id);
- p->disconnect(this);
- d->mSendId2PlayerId.remove(id);
-}
-
-void KGameChat::slotPropertyChanged(KGamePropertyBase* prop, KPlayer* player)
-{
- if (prop->id() == KGamePropertyBase::IdName) {
-// kdDebug(11001) << "new Name" << endl;
- changeSendingEntry(player->name(), sendingId(player->id()));
-/*
- mCombo->changeItem(comboBoxItem(player->name()), index);
- */
- } else if (prop->id() == KGamePropertyBase::IdGroup) {
- //TODO
- }
-}
-
-void KGameChat::slotReceivePrivateMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer* me)
-{
- if (!me || me != fromPlayer()) {
- kdDebug() << k_funcinfo << "nope - not for us!" << endl;
- return;
- }
- slotReceiveMessage(msgid, buffer, me->id(), sender);
-}
-
-void KGameChat::slotReceiveMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 , TQ_UINT32 sender)
-{
- TQDataStream msg(buffer, IO_ReadOnly);
- if (msgid != messageId()) {
- return;
- }
-
- TQString text;
- msg >> text;
-
- addMessage(sender, text);
-}
-
diff --git a/libkdegames/kgame/kgamechat.h b/libkdegames/kgame/kgamechat.h
deleted file mode 100644
index 88139d33..00000000
--- a/libkdegames/kgame/kgamechat.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-2002 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMECHAT_H__
-#define __KGAMECHAT_H__
-
-#include <tqstring.h>
-
-#include "kchatbase.h"
-#include <kdemacros.h>
-class KPlayer;
-class KGame;
-class KGamePropertyBase;
-
-class KGameChatPrivate;
-
-/**
- * @short A Chat widget for KGame-based games
- *
- * Call @ref setFromPlayer() first - this will be used as the "from" part of
- * every message you will send. Otherwise it won't work! You can also use the
- * fromPlayer parameter in the constructor though...
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KGameChat : public KChatBase
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- /**
- * Construct a @ref KGame chat widget on @p game that used @p msgid for
- * the chat message. The @p fromPlayer is the local player (see @ref
- * setFromPlayer).
- **/
- KGameChat(KGame* game, int msgid, KPlayer* fromPlayer, TQWidget * parent);
-
- /**
- * @overload
- * To make use of this widget you need to call @ref setFromPlayer
- * manually.
- **/
- KGameChat(KGame* game, int msgId, TQWidget* parent);
-
- /**
- * @overload
- * This constructs a widget that is not usable. You must call at least
- * setGame, setFromPlayer and setMessageId manually.
- * @since 3.2
- **/
- KGameChat(TQWidget* parent);
-
- virtual ~KGameChat();
-
- enum SendingIds {
- SendToGroup = 1
- };
-
- /**
- * This sets the fromPlayer to @p player. The fromPlayer is the
- * player that will appear as "from" when you send messages through this
- * widget.
- * @param player The player of this widget
- **/
- void setFromPlayer(KPlayer* player);
-
- KPlayer* fromPlayer() const;
-
- /**
- * Set the @ref KGame object for this chat widget. All messages will be
- * sent through this object. You don't have to implement any send
- * functions, just call this function, call @ref setFromPlayer and be
- * done :-)
- * @param g The @ref KGame object the messages will be sent through
- **/
- void setKGame(KGame* g);
-
- KGame* game() const;
-
- /**
- * @return The id of the messages produced by KGameChat. The id will be
- * used in @ref KGame as parameter msgid in the method @ref KGame::sendMessage
- **/
- int messageId() const;
-
- /**
- * Change the message id of the chat widget. It is recommended that you
- * don't use this but prefer the constructor instead, but in certain
- * situations (such as using this widget in TQt designer) it may be
- * useful to change the message id.
- *
- * See also @ref messageId
- * @since 3.2
- **/
- void setMessageId(int msgid);
-
- /**
- * reimplemented from @ref KChatBase
- * @return @ref KPlayer::name() for the player set by @ref setFromPlayer
- **/
- virtual const TQString& fromName() const;
-
-
-public slots:
- virtual void addMessage(const TQString& fromName, const TQString& text) { KChatBase::addMessage(fromName, text);}
- virtual void addMessage(int fromId, const TQString& text);
-
- void slotReceiveMessage(int, const TQByteArray&, TQ_UINT32 receiver, TQ_UINT32 sender);
-
-protected:
- /**
- * @param id The ID of the sending entry, as returned by @ref
- * KChatBase::sendingEntry
- * @return True if the entry "send to all" was selected, otherwise false
- **/
- bool isSendToAllMessage(int id) const;
-
- /**
- * Used to indicate whether a message shall be sent to a group of
- * players. Note that this was not yet implemented when this doc was
- * written so this description might be wrong. (FIXME)
- * @param id The ID of the sending entry, as returned by @ref
- * KChatBase::sendingEntry
- * @return True if the message is meant to be sent to a group (see @ref
- * KPlayer::group), e.g. if "send to my group" was selected.
- **/
- bool isToGroupMessage(int id) const;
-
-
- /**
- * Used to indicate whether the message shall be sent to a single player
- * only. Note that you can also call @ref isSendToAllMessage and @ref
- * isToGroupMessage - if both return false it must be a player message.
- * This behaviour might be changed later - so don't depend on it.
- *
- * See also toPlayerId
- * @param id The ID of the sending entry, as returned by
- * KChatBase::sendingEntry
- * @return True if the message shall be sent to a special player,
- * otherwise false.
- **/
- bool isToPlayerMessage(int id) const;
-
- /**
- * @param id The ID of the sending entry, as returned by
- * KChatBase::sendingEntry
- * @return The ID of the player (see KPlayer::id) the sending entry
- * belongs to. Note that the parameter id is an id as returned by ref
- * KChatBase::sendingEntry and the id this method returns is a
- * KPlayer ID. If isToPlayerMessage returns false this method
- * returns -1
- **/
- int playerId(int id) const;
-
- /**
- * @param playerId The ID of the KPlayer object
- * @return The ID of the sending entry (see KChatBase) or -1 if
- * the player id was not found.
- **/
- int sendingId(int playerId) const;
-
- /**
- * @return True if the player with this ID was added before (see
- * slotAddPlayer)
- **/
- bool hasPlayer(int id) const;
-
- /**
- * @param name The name of the added player
- * @return A string that will be added as sending entry in @ref
- * KChatBase. By default this is "send to name" where name is the name
- * that you specify. See also KChatBase::addSendingEntry
- **/
- virtual TQString sendToPlayerEntry(const TQString& name) const;
-
-
-protected slots:
- /**
- * Unsets a KGame object that has been set using setKGame
- * before. You don't have to call this - this is usually done
- * automatically.
- **/
- void slotUnsetKGame();
-
-
- void slotPropertyChanged(KGamePropertyBase*, KPlayer*);
- void slotAddPlayer(KPlayer*);
- void slotRemovePlayer(KPlayer*);
-
- /**
- * Called when KPlayer::signalNetworkData is emitted. The message
- * gets forwarded to slotReceiveMessage if @p me equals
- * fromPlayer.
- **/
- void slotReceivePrivateMessage(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer* me);
-
-protected:
- virtual void returnPressed(const TQString& text);
-
-private:
- void init(KGame* g, int msgid);
-
-private:
- KGameChatPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kgameerror.cpp b/libkdegames/kgame/kgameerror.cpp
deleted file mode 100644
index ef6145fb..00000000
--- a/libkdegames/kgame/kgameerror.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgameerror.h"
-#include "kgamemessage.h"
-
-#include <klocale.h>
-
-TQByteArray KGameError::errVersion(int remoteVersion)
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- s << (TQ_INT32)KGameMessage::version();
- s << (TQ_INT32)remoteVersion;
- return b;
-}
-
-TQByteArray KGameError::errCookie(int localCookie, int remoteCookie)
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- s << (TQ_INT32)localCookie;
- s << (TQ_INT32)remoteCookie;
- return b;
-}
-
-TQString KGameError::errorText(int errorCode, const TQByteArray& message)
-{
- TQDataStream s(message, IO_ReadOnly);
- return errorText(errorCode, s);
-}
-
-TQString KGameError::errorText(int errorCode, TQDataStream& s)
-{
- TQString text;
- switch (errorCode) {
- case Cookie:
- {
- TQ_INT32 cookie1;
- TQ_INT32 cookie2;
- s >> cookie1;
- s >> cookie2;
- text = i18n("Cookie mismatch!\nExpected Cookie: %1\nReceived Cookie: %2").tqarg(cookie1).tqarg(cookie2);
- break;
- }
- case Version:
- {
- TQ_INT32 version1;
- TQ_INT32 version2;
- s >> version1;
- s >> version2;
- text = i18n("KGame Version mismatch!\nExpected Version: %1\nReceived Version: %2\n").tqarg(version1).tqarg(version2);
- break;
- }
- default:
- text = i18n("Unknown error code %1").tqarg(errorCode);
- }
- return text;
-}
-
diff --git a/libkdegames/kgame/kgameerror.h b/libkdegames/kgame/kgameerror.h
deleted file mode 100644
index 071737cc..00000000
--- a/libkdegames/kgame/kgameerror.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMEERROR_H_
-#define __KGAMEERROR_H_
-
-#include <tqstring.h>
-
-
-class KGameError
-{
-public:
- KGameError() { }
- ~KGameError() { }
-
- enum ErrorCodes {
- Cookie = 0, // Cookie mismatch
- Version = 1 // Version mismatch
- };
-
- /**
- * Generate an error message with Erorr Code = ErrCookie
- **/
- static TQByteArray errCookie(int localCookie, int remoteCookie);
- static TQByteArray errVersion(int remoteVersion);
-
- /**
- * Create an erorr text using a TQDataStream (TQByteArray) which was
- * created using @ref KGameError. This is the opposite function to all
- * the errXYZ() function (e.g. @ref errVersion).
- * You want to use this to generate the message that shall be
- * displayed to the user.
- * @return an error message
- **/
- static TQString errorText(int errorCode, TQDataStream& message);
- static TQString errorText(int errorCode, const TQByteArray& message);
-
-};
-
-#endif
diff --git a/libkdegames/kgame/kgameio.cpp b/libkdegames/kgame/kgameio.cpp
deleted file mode 100644
index 5b736ea0..00000000
--- a/libkdegames/kgame/kgameio.cpp
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgameio.h"
-#include "kgameio.moc"
-#include "kgame.h"
-#include "kplayer.h"
-#include "kgamemessage.h"
-#include "kmessageio.h"
-
-#include <kdebug.h>
-
-#include <tqwidget.h>
-#include <tqbuffer.h>
-#include <tqtimer.h>
-
-#include <stdlib.h>
-
-// ----------------------- Generic IO -------------------------
-KGameIO::KGameIO() : TQObject(0,0)
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)" << sizeof(KGameIO) << endl;
- mPlayer = 0;
-}
-
-KGameIO::KGameIO(KPlayer* player) : TQObject(0,0)
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)" << sizeof(KGameIO) << endl;
- mPlayer = 0;
- if (player)
- {
- player->addGameIO(this);
- }
-}
-
-KGameIO::~KGameIO()
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- // unregister ourselves
- if (player())
- {
- player()->removeGameIO(this, false);
- }
-}
-
-void KGameIO::initIO(KPlayer *p)
-{
- setPlayer(p);
-}
-
-void KGameIO::notifyTurn(bool b)
-{
- if (!player())
- {
- kdWarning(11001) << k_funcinfo << ": player() is NULL" << endl;
- return;
- }
- bool sendit=false;
- TQByteArray buffer;
- TQDataStream stream(buffer, IO_WriteOnly);
- emit signalPrepareTurn(stream, b, this, &sendit);
- if (sendit)
- {
- TQDataStream ostream(buffer,IO_ReadOnly);
- TQ_UINT32 sender = player()->id(); // force correct sender
- kdDebug(11001) << "Prepare turn sendInput" << endl;
- sendInput(ostream, true, sender);
- }
-}
-
-KGame* KGameIO::game() const
-{
- if (!player())
- {
- return 0;
- }
- return player()->game();
-}
-
-bool KGameIO::sendInput(TQDataStream& s, bool transmit, TQ_UINT32 sender)
-{
- if (!player())
- {
- return false;
- }
- return player()->forwardInput(s, transmit, sender);
-}
-
-void KGameIO::Debug()
-{
- kdDebug(11001) << "------------------- KGAMEINPUT --------------------" << endl;
- kdDebug(11001) << "this: " << this << endl;
- kdDebug(11001) << "rtti : " << rtti() << endl;
- kdDebug(11001) << "Player: " << player() << endl;
- kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-
-// ----------------------- Key IO ---------------------------
-KGameKeyIO::KGameKeyIO(TQWidget *parent)
- : KGameIO()
-{
- if (parent)
- {
- kdDebug(11001) << "Key Event filter installed" << endl;
- parent->installEventFilter(this);
- }
-}
-
-KGameKeyIO::~KGameKeyIO()
-{
- if (parent())
- {
- parent()->removeEventFilter(this);
- }
-}
-
-int KGameKeyIO::rtti() const { return KeyIO; }
-
-bool KGameKeyIO::eventFilter( TQObject *o, TQEvent *e )
-{
- if (!player())
- {
- return false;
- }
-
- // key press/release
- if ( e->type() == TQEvent::KeyPress ||
- e->type() == TQEvent::KeyRelease )
- {
- TQKeyEvent *k = (TQKeyEvent*)e;
- // kdDebug(11001) << "KGameKeyIO " << this << " key press/release " << k->key() << endl ;
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- bool eatevent=false;
- emit signalKeyEvent(this,stream,k,&eatevent);
- TQDataStream msg(buffer,IO_ReadOnly);
-
- if (eatevent && sendInput(msg))
- {
- return eatevent;
- }
- return false; // do not eat otherwise
- }
- return TQObject::eventFilter( o, e ); // standard event processing
-}
-
-
-// ----------------------- Mouse IO ---------------------------
-KGameMouseIO::KGameMouseIO(TQWidget *parent,bool trackmouse)
- : KGameIO()
-{
- if (parent)
- {
- kdDebug(11001) << "Mouse Event filter installed tracking=" << trackmouse << endl;
- parent->installEventFilter(this);
- parent->setMouseTracking(trackmouse);
- }
-}
-
-KGameMouseIO::~KGameMouseIO()
-{
- if (parent())
- {
- parent()->removeEventFilter(this);
- }
-}
-
-int KGameMouseIO::rtti() const
-{
- return MouseIO;
-}
-
-void KGameMouseIO::setMouseTracking(bool b)
-{
- if (parent())
- {
- ((TQWidget*)parent())->setMouseTracking(b);
- }
-}
-
-bool KGameMouseIO::eventFilter( TQObject *o, TQEvent *e )
-{
- if (!player())
- {
- return false;
- }
-// kdDebug(11001) << "KGameMouseIO " << this << endl ;
-
- // mouse action
- if ( e->type() == TQEvent::MouseButtonPress ||
- e->type() == TQEvent::MouseButtonRelease ||
- e->type() == TQEvent::MouseButtonDblClick ||
- e->type() == TQEvent::Wheel ||
- e->type() == TQEvent::MouseMove
- )
- {
- TQMouseEvent *k = (TQMouseEvent*)e;
- // kdDebug(11001) << "KGameMouseIO " << this << endl ;
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- bool eatevent=false;
- emit signalMouseEvent(this,stream,k,&eatevent);
-// kdDebug(11001) << "################# eatevent=" << eatevent << endl;
- TQDataStream msg(buffer,IO_ReadOnly);
- if (eatevent && sendInput(msg))
- {
- return eatevent;
- }
- return false; // do not eat otherwise
- }
- return TQObject::eventFilter( o, e ); // standard event processing
-}
-
-
-// ----------------------- KGameProcesPrivate ---------------------------
-class KGameProcessIO::KGameProcessIOPrivate
-{
-public:
- KGameProcessIOPrivate()
- {
- //mMessageServer = 0;
- //mMessageClient = 0;
- mProcessIO=0;
- }
- //KMessageServer *mMessageServer;
- //KMessageClient *mMessageClient;
- KMessageProcess *mProcessIO;
-};
-
-// ----------------------- Process IO ---------------------------
-KGameProcessIO::KGameProcessIO(const TQString& name)
- : KGameIO()
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)=" << sizeof(KGameProcessIO) << endl;
- d = new KGameProcessIOPrivate;
-
- //kdDebug(11001) << "================= KMEssageServer ==================== " << endl;
- //d->mMessageServer=new KMessageServer(0,this);
- //kdDebug(11001) << "================= KMEssageClient ==================== " << endl;
- //d->mMessageClient=new KMessageClient(this);
- kdDebug(11001) << "================= KMEssageProcessIO ==================== " << endl;
- d->mProcessIO=new KMessageProcess(this,name);
- kdDebug(11001) << "================= KMEssage Add client ==================== " << endl;
- //d->mMessageServer->addClient(d->mProcessIO);
- //kdDebug(11001) << "================= KMEssage SetSErver ==================== " << endl;
- //d->mMessageClient->setServer(d->mMessageServer);
- kdDebug(11001) << "================= KMEssage: Connect ==================== " << endl;
- //connect(d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
- // this, TQT_SLOT(clientMessage(const TQByteArray&, TQ_UINT32)));
- //connect(d->mMessageClient, TQT_SIGNAL(forwardReceived(const TQByteArray&, TQ_UINT32, const TQValueList <TQ_UINT32> &)),
- // this, TQT_SLOT(clientMessage(const TQByteArray&, TQ_UINT32, const TQValueList <TQ_UINT32> &)));
- connect(d->mProcessIO, TQT_SIGNAL(received(const TQByteArray&)),
- this, TQT_SLOT(receivedMessage(const TQByteArray&)));
- //kdDebug(11001) << "Our client is id="<<d->mMessageClient->id() << endl;
-}
-
-KGameProcessIO::~KGameProcessIO()
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- kdDebug(11001) << "player="<<player() << endl;
- if (player())
- {
- player()->removeGameIO(this,false);
- }
- if (d->mProcessIO)
- {
- delete d->mProcessIO;
- d->mProcessIO=0;
- }
- delete d;
-}
-
-int KGameProcessIO::rtti() const
-{
- return ProcessIO;
-}
-
-void KGameProcessIO::initIO(KPlayer *p)
-{
- KGameIO::initIO(p);
- // Send 'hello' to process
- TQByteArray buffer;
- TQDataStream stream(buffer, IO_WriteOnly);
- TQ_INT16 id = p->userId();
- stream << id;
-
- bool sendit=true;
- if (p)
- {
- emit signalIOAdded(this,stream,p,&sendit);
- if (sendit )
- {
- TQ_UINT32 sender = p->id();
- kdDebug(11001) << "Sending IOAdded to process player !!!!!!!!!!!!!! " << endl;
- sendSystemMessage(stream, KGameMessage::IdIOAdded, 0, sender);
- }
- }
-}
-
-void KGameProcessIO::notifyTurn(bool b)
-{
- if (!player())
- {
- kdWarning(11001) << k_funcinfo << ": player() is NULL" << endl;
- return;
- }
- bool sendit=true;
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << (TQ_INT8)b;
- emit signalPrepareTurn(stream,b,this,&sendit);
- if (sendit)
- {
- TQ_UINT32 sender=player()->id();
- kdDebug(11001) << "Sending Turn to process player !!!!!!!!!!!!!! " << endl;
- sendSystemMessage(stream, KGameMessage::IdTurn, 0, sender);
- }
-}
-
-void KGameProcessIO::sendSystemMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- sendAllMessages(stream, msgid, receiver, sender, false);
-}
-
-void KGameProcessIO::sendMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- sendAllMessages(stream, msgid, receiver, sender, true);
-}
-
-void KGameProcessIO::sendAllMessages(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, bool usermsg)
-{
- kdDebug(11001) << "==============> KGameProcessIO::sendMessage (usermsg="<<usermsg<<")" << endl;
- // if (!player()) return ;
- //if (!player()->isActive()) return ;
-
- if (usermsg)
- {
- msgid+=KGameMessage::IdUser;
- }
-
- kdDebug(11001) << "=============* ProcessIO (" << msgid << "," << receiver << "," << sender << ") ===========" << endl;
-
- TQByteArray buffer;
- TQDataStream ostream(buffer,IO_WriteOnly);
- TQBuffer *device=(TQBuffer *)stream.device();
- TQByteArray data=device->buffer();;
-
- KGameMessage::createHeader(ostream,sender,receiver,msgid);
- // ostream.writeRawBytes(data.data()+device->at(),data.size()-device->at());
- ostream.writeRawBytes(data.data(),data.size());
- kdDebug(11001) << " Adding user data from pos="<< device->at() <<" amount= " << data.size() << " byte " << endl;
- //if (d->mMessageClient) d->mMessageClient->sendBroadcast(buffer);
- if (d->mProcessIO)
- {
- d->mProcessIO->send(buffer);
- }
-}
-
-//void KGameProcessIO::clientMessage(const TQByteArray& receiveBuffer, TQ_UINT32 clientID, const TQValueList <TQ_UINT32> &recv)
-void KGameProcessIO::receivedMessage(const TQByteArray& receiveBuffer)
-{
- TQDataStream stream(receiveBuffer,IO_ReadOnly);
- int msgid;
- TQ_UINT32 sender;
- TQ_UINT32 receiver;
- KGameMessage::extractHeader(stream,sender,receiver,msgid);
-
- kdDebug(11001) << "************* Got process message sender =" << sender
- << " receiver=" << receiver << " msgid=" << msgid << endl;
-
-
- // Cut out the header part...to not confuse network code
- TQBuffer *buf=(TQBuffer *)stream.device();
- TQByteArray newbuffer;
- newbuffer.setRawData(buf->buffer().data()+buf->at(),buf->size()-buf->at());
- TQDataStream ostream(newbuffer,IO_ReadOnly);
- kdDebug(11001) << "Newbuffer size=" << newbuffer.size() << endl;
-
-
-
-// This is a dummy message which allows us the process to talk with its owner
- if (msgid==KGameMessage::IdProcessQuery)
- {
- emit signalProcessQuery(ostream,this);
- }
- else if (player())
- {
- sender = player()->id(); // force correct sender
- if (msgid==KGameMessage::IdPlayerInput)
- {
- sendInput(ostream,true,sender);
- }
- else
- {
- player()->forwardMessage(ostream,msgid,receiver,sender);
- }
- }
- else
- {
- kdDebug(11001) << k_funcinfo << ": Got message from process but no player defined!" << endl;
- }
- newbuffer.resetRawData(buf->buffer().data()+buf->at(),buf->size()-buf->at());
-}
-
-
-// ----------------------- Computer IO --------------------------
-class KGameComputerIO::KGameComputerIOPrivate
-{
-//TODO: maybe these should be KGameProperties!!
-public:
- KGameComputerIOPrivate()
- {
- mAdvanceCounter = 0;
- mReactionPeriod = 0;
-
- mPauseCounter = 0;
-
- mAdvanceTimer = 0;
- }
- int mAdvanceCounter;
- int mReactionPeriod;
-
- int mPauseCounter;
-
- TQTimer* mAdvanceTimer;
-};
-
-KGameComputerIO::KGameComputerIO() : KGameIO()
-{
- init();
-}
-
-KGameComputerIO::KGameComputerIO(KPlayer* p) : KGameIO(p)
-{
- init();
-}
-
-void KGameComputerIO::init()
-{
- d = new KGameComputerIOPrivate;
-}
-
-KGameComputerIO::~KGameComputerIO()
-{
- if (d->mAdvanceTimer)
- {
- delete d->mAdvanceTimer;
- }
- delete d;
-}
-
-int KGameComputerIO::rtti() const
-{
- return ComputerIO;
-}
-
-void KGameComputerIO::setReactionPeriod(int calls)
-{
- d->mReactionPeriod = calls;
-}
-
-int KGameComputerIO::reactionPeriod() const
-{
- return d->mReactionPeriod;
-}
-
-void KGameComputerIO::setAdvancePeriod(int ms)
-{
- stopAdvancePeriod();
- d->mAdvanceTimer = new TQTimer(this);
- connect(d->mAdvanceTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(advance()));
- d->mAdvanceTimer->start(ms);
-}
-
-void KGameComputerIO::stopAdvancePeriod()
-{
- if (d->mAdvanceTimer)
- {
- d->mAdvanceTimer->stop();
- delete d->mAdvanceTimer;
- }
-}
-
-void KGameComputerIO::pause(int calls)
-{
- d->mPauseCounter = calls;
-}
-
-void KGameComputerIO::unpause()
-{
- pause(0);
-}
-
-void KGameComputerIO::advance()
-{
- if (d->mPauseCounter > 0)
- {
- d->mPauseCounter--;
- return;
- }
- else if (d->mPauseCounter < 0)
- {
- return;
- }
- d->mAdvanceCounter++;
- if (d->mAdvanceCounter >= d->mReactionPeriod)
- {
- d->mAdvanceCounter = 0;
- reaction();
- }
-}
-
-void KGameComputerIO::reaction()
-{
- emit signalReaction();
-}
-
-
diff --git a/libkdegames/kgame/kgameio.h b/libkdegames/kgame/kgameio.h
deleted file mode 100644
index 510ab0b7..00000000
--- a/libkdegames/kgame/kgameio.h
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMEIO_H__
-#define __KGAMEIO_H__
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <kdemacros.h>
-class KPlayer;
-class KGame;
-class KProcess;
-
-/**
- * \short Base class for IO devices for games
- *
- * This is the master class for
- * creating IO game devices. You cannot use it directly.
- * Either take one of the classes derived from it or
- * you have to create your own IO class derived from it (more probably).
- *
- * The idea behind this class is to provide a common interface
- * for input devices into your game. By programming a KGameIO
- * device you need not distinguish the actual IO in the game
- * anymore. All work is done by the IO's. This allows very
- * easy reuse in other games as well.
- * A further advantage of using the IO's is that you can exchange
- * the control of a player at runtime. E.g. you switch a player
- * to be controlled by the computer or vice versa.
- *
- * To achieve this you have to make all of your player inputs through a
- * KGameIO. You will usually call KGameIO::sendInput to do so.
- *
- * @author Martin Heni <martin@heni-online.de>
- */
-class KDE_EXPORT KGameIO : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * Constructs a KGameIO object
- */
- KGameIO();
- KGameIO(KPlayer*);
- virtual ~KGameIO();
-
- /**
- * Gives debug output of the game status
- */
- void Debug();
-
- /**
- * Identifies the KGameIO via the rtti function
- */
- enum IOMode {GenericIO=1,KeyIO=2,MouseIO=4,ProcessIO=8,ComputerIO=16};
- /**
- * Run time idendification. Predefined values are from IOMode
- * You MUST overwrite this in derived classes!
- *
- * @return rtti value
- */
- virtual int rtti() const = 0; // Computer, network, local, ...
-
- /**
- * This function returns the player who owns this IO
- *
- * @return the player this IO device is plugged into
- */
- KPlayer *player() const {return mPlayer;}
-
- /**
- * Equivalent to player()->game()
- * @return the @ref KGame object of this player
- **/
- KGame* game() const;
-
- /**
- * Sets the player to which this IO belongs to. This
- * is done automatically when adding a device to a
- * player
- *
- * @param p the player
- */
- void setPlayer(KPlayer *p) {mPlayer=p;}
-
- /**
- * Init this device by setting the player and e.g. sending an
- * init message to the device. This initialisation message is
- * very useful for computer players as you can transmit the
- * game status to them and only update this status in the setTurn
- * commands.
- *
- * Called by @ref KPlayer::addGameIO only!
- */
- virtual void initIO(KPlayer *p);
-
- /**
- * Notifies the IO device that the player's setTurn had been called
- * Called by KPlayer
- *
- * This emits @ref signalPrepareTurn and sends the turn if the send
- * parameter is set to true.
- *
- * @param b turn is true/false
- */
- virtual void notifyTurn(bool b);
-
- /**
- * Send an input message using @ref KPlayer::forwardInput
- **/
- bool sendInput(TQDataStream& stream, bool transmit = true, TQ_UINT32 sender = 0);
-
-signals:
- /**
- * Signal generated when @ref KPlayer::myTurn changes. This can either be
- * when you get the turn status or when you lose it.
- *
- * The datastream has to be filled with a move. If you set (or leave) the
- * send parameter to FALSE then nothing happens: the datastream will be
- * ignored. If you set it to TRUE @ref sendInput is used to
- * send the move.
- *
- * Often you want to ignore this signal (leave send=FALSE) and send the
- * message later. This is usually the case for a human player as he probably
- * doesn't react immediately. But you can still use this e.g. to notify the
- * player about the turn change.
- *
- * Example:
- * \code
- * void GameWindow::slotPrepareTurn(TQDataStream &stream,bool b,KGameIO *input,bool * )
- * {
- * KPlayer *player=input->player();
- * if (!player->myTurn()) return ;
- * if (!b) return ; // only do something on setTurn(true)
- * stream << 1 << 2 << 3; // Some data for the process
- * }
- * \endcode
- *
- * @param io the KGameIO object itself
- * @param stream the stream into which the move will be written
- * @param turn the argument of setTurn
- * @param send set this to true to send the generated move using @ref
- * sendInput
- **/
- void signalPrepareTurn(TQDataStream & stream, bool turn, KGameIO *io, bool * send);
-
-
-private:
- KPlayer *mPlayer;
-};
-
-/**
- * The KGameKeyIO class. It is used to process keyboard input
- * from a widget and create moves for the player it belongs to.
- * @author Martin Heni <martin@heni-online.de>
- */
-class KDE_EXPORT KGameKeyIO : public KGameIO
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * Create a keyboard input devices. All keyboards
- * inputs of the given widgets are passed through a signal
- * handler signalKeyEvent and can be used to generate
- * a valid move for the player.
- * Note the widget you pass to the constructor must be
- * the main window of your application, e.g. view->parentWidget()
- * as QT does not forward your keyevents otherwise. This means
- * that this might be a different widget comapred to the one you
- * use for mouse inputs!
- * Example:
- * \code
- * KGameKeyIO *input;
- * input=new KGameKeyIO(myWidget);
- * connect(input,TQT_SIGNAL(signalKeyEvent(KGameIO *,TQDataStream &,TQKeyEvent *,bool *)),
- * this,TQT_SLOT(slotKeyInput(KGameIO *,TQDataStream &,TQKeyEvent *,bool *)));
- * \endcode
- *
- * @param parent The parents widget whose keyboard events * should be grabbed
- */
- KGameKeyIO(TQWidget *parent);
- virtual ~KGameKeyIO();
-
- /**
- * The idendification of the IO
- *
- * @return KeyIO
- */
- virtual int rtti() const;
-
-signals:
- /**
- * Signal handler for keyboard events. This function is called
- * on every keyboard event. If appropriate it can generate a
- * move for the player the device belongs to. If this is done
- * and the event is eaten eatevent needs to be set to true.
- * What move you generate (i.e. what you write to the stream)
- * is totally up to you as it will not be evaluated but forwared
- * to the player's/game's input move function
- * Example:
- * \code
- * KPlayer *player=input->player(); // Get the player
- * TQ_INT32 key=e->key();
- * stream << key;
- * eatevent=true;
- * \endcode
- *
- * @param io the IO device we belong to
- * @param stream the stream where we write our move into
- * @param m The TQKeyEvent we can evaluate
- * @param eatevent set this to true if we processed the event
- */
- void signalKeyEvent(KGameIO *io,TQDataStream &stream,TQKeyEvent *m,bool *eatevent);
-
-protected:
- /**
- * Internal method to process the events
- */
- bool eventFilter( TQObject *o, TQEvent *e );
-};
-
-/**
- * The KGameMouseIO class. It is used to process mouse input
- * from a widget and create moves for the player it belongs to.
- * @author Martin Heni <martin@heni-online.de>
- */
-class KDE_EXPORT KGameMouseIO : public KGameIO
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * Creates a mouse IO device. It captures all mouse
- * event of the given widget and forwards them to the
- * signal handler signalMouseEvent.
- * Example:
- * \code
- * KGameMouseIO *input;
- * input=new KGameMouseIO(mView);
- * connect(input,TQT_SIGNAL(signalMouseEvent(KGameIO *,TQDataStream &,TQMouseEvent *,bool *)),
- * this,TQT_SLOT(slotMouseInput(KGameIO *,TQDataStream &,TQMouseEvent *,bool *)));
- * \endcode
- *
- * @param parent The widget whose events should be captured
- * @param trackmouse enables mouse tracking (gives mouse move events)
- */
- KGameMouseIO(TQWidget *parent,bool trackmouse=false);
- virtual ~KGameMouseIO();
-
- /**
- * Manually activate or deactivate mouse tracking
- *
- * @param b true = tracking on
- */
- void setMouseTracking(bool b);
- /**
- * The idendification of the IO
- *
- * @return MouseIO
- */
- virtual int rtti() const;
-
-signals:
- /**
- * Signal handler for mouse events. This function is called
- * on every mouse event. If appropriate it can generate a
- * move for the player the device belongs to. If this is done
- * and the event is eaten eatevent needs to be set to true.
- * @see signalKeyEvent
- * Example:
- * \code
- * KPlayer *player=input->player(); // Get the player
- * TQ_INT32 button=e->button();
- * stream << button;
- * eatevent=true;
- * \endcode
- *
- * @param io the IO device we belong to
- * @param stream the stream where we write our move into
- * @param m The TQMouseEvent we can evaluate
- * @param eatevent set this to true if we processed the event
- */
- void signalMouseEvent(KGameIO *io,TQDataStream &stream,TQMouseEvent *m,bool *eatevent);
-
-protected:
- /**
- * Internal event filter
- */
- bool eventFilter( TQObject *o, TQEvent *e );
-
-};
-
-
-/**
- * The KGameProcessIO class. It is used to create a computer player
- * via a separate process and communicate transparetly with it.
- * Its counterpart is the @ref KGameProcess class which needs
- * to be used by the computer player. See its documentation
- * for the definition of the computer player.
- * @author Martin Heni <martin@heni-online.de>
- */
-class KDE_EXPORT KGameProcessIO : public KGameIO
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * Creates a computer player via a separate process. The process
- * name is given as fully qualified filename.
- * Example:
- * \code
- * KGameProcessIO *input;
- * input=new KGameProcessIO(executable_file);
- * connect(input,TQT_SIGNAL(signalPrepareTurn(TQDataStream &,bool,KGameIO *,bool *)),
- * this,TQT_SLOT(slotPrepareTurn(TQDataStream &,bool,KGameIO *,bool *)));
- * connect(input,TQT_SIGNAL(signalProcessQuery(TQDataStream &,KGameProcessIO *)),
- * this,TQT_SLOT(slotProcessQuery(TQDataStream &,KGameProcessIO *)));
- * \endcode
- *
- * @param name the filename of the process to start
- */
- KGameProcessIO(const TQString& name);
-
- /**
- * Deletes the process input devices
- */
- virtual ~KGameProcessIO();
-
- /**
- * The idendification of the IO
- *
- * @return ProcessIO
- */
- int rtti() const;
-
- /**
- * Send a message to the process. This is analogous to the sendMessage
- * commands of KGame. It will result in a signal of the computer player
- * on which you can react in the process player.
- *
- * @param stream - the actual data
- * @param msgid - the id of the message
- * @param receiver - not used
- * @param sender - who send the message
- */
- void sendMessage(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
-
- /**
- * Send a system message to the process. This is analogous to the sendMessage
- * commands of KGame. It will result in a signal of the computer player
- * on which you can react in the process player.
- *
- * @param stream - the actual data
- * @param msgid - the id of the message
- * @param receiver - not used
- * @param sender - who send the message
- */
- void sendSystemMessage(TQDataStream &stream, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender);
-
- /**
- * Init this device by setting the player and e.g. sending an
- * init message to the device. Calling this function will emit
- * the IOAdded signal on which you can react and initilise the
- * computer player.
- * This function is called automatically when adding the IO to
- * a player.
- */
- void initIO(KPlayer *p);
-
- /**
- * Notifies the IO device that the player's setTurn had been called
- * Called by KPlayer. You can react on the @ref signalPrepareTurn to
- * prepare a message for the process, i.e. either update it on
- * the changes made to the game since the last turn or the initIO
- * has been called or transmit your gamestatus now.
- *
- * @param turn is true/false
- */
- virtual void notifyTurn(bool turn);
-
- protected:
- /**
- * Internal ~ombined function for all message handling
- **/
- void sendAllMessages(TQDataStream &stream,int msgid, TQ_UINT32 receiver, TQ_UINT32 sender, bool usermsg);
-
- protected slots:
- /**
- * Internal message handler to receive data from the process
- */
- void receivedMessage(const TQByteArray& receiveBuffer);
-
-
-signals:
- /**
- * A computer query message is received. This is a 'dummy'
- * message sent by the process if it needs to communicate
- * with us. It is not forwarded over the network.
- * Reacting to this message allows you to 'answer' questions
- * of the process, e.g. sending addition data which the process
- * needs to calculate a move.
- *
- * Example:
- * \code
- * void GameWindow::slotProcessQuery(TQDataStream &stream,KGameProcessIO *reply)
- * {
- * int no;
- * stream >> no; // We assume the process sends us an integer question numner
- * if (no==1) // but YOU have to do this in the process player
- * {
- * TQByteArray buffer;
- * TQDataStream out(buffer,IO_WriteOnly);
- * reply->sendSystemMessage(out,4242,0,0); // lets reply something...
- * }
- * }
- * \endcode
- */
- void signalProcessQuery(TQDataStream &stream,KGameProcessIO *me);
-
- /**
- * Signal generated when the computer player is added.
- * You can use this to communicated with the process and
- * e.g. send initialisation information to the process.
- *
- * @param game the KGameIO object itself
- * @param stream the stream into which the move will be written
- * @param p the player itself
- * @param send set this to false if no move should be generated
- */
- void signalIOAdded(KGameIO *game,TQDataStream &stream,KPlayer *p,bool *send);
-
-
-protected:
-
-private:
- class KGameProcessIOPrivate;
- KGameProcessIOPrivate* d;
-};
-
-/**
- * \brief KGameIO variant for real-time games
- *
- * The KGameComputerIO class. It is used to create a LOCAL computer player
- * and communicate transparently with it.
- * Question: Is this needed or is it overwritten anyway for a real game?
- *
- * You most probably don't want to use this if you want to design a turn based
- * game/player. You'll rather use @ref KGameIO directly, i.e. subclass it
- * yourself. You just need to use @ref KGameIO::signalPrepareTurn and/or @ref
- * KGameIO::notifyTurn there.
- *
- * This is rather meant to be of use in real time games.
- *
- * @author <b_mann@gmx.de>
- */
-class KDE_EXPORT KGameComputerIO : public KGameIO
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * Creates a LOCAL computer player
- *
- */
- KGameComputerIO();
- KGameComputerIO(KPlayer* player);
- ~KGameComputerIO();
-
- int rtti() const;
-
- /**
- * The number of advance calls until the player (or rather: the IO)
- * does something (default: 1).
- **/
- void setReactionPeriod(int advanceCalls);
- int reactionPeriod() const;
-
- /**
- * Start a TQTimer which calls advance every @p ms milli seconds.
- **/
- void setAdvancePeriod(int ms);
-
- void stopAdvancePeriod();
-
- /**
- * Ignore calls number of advance calls. if calls is -1 then all
- * following advance calls are ignored until unpause is called.
- *
- * This simply prevents the internal advance counter to be increased.
- *
- * You may want to use this to emulate a "thinking" computer player. Note
- * that this means if you increase the advance period (see
- * setAdvancePeriod), i.e. if you change the speed of your game, your
- * computer player thinks "faster".
- * @param calls Number of advance calls to be ignored
- **/
- void pause(int calls = -1);
-
- /**
- * Equivalent to pause(0). Immediately continue to increase the internal
- * advance counter.
- **/
- void unpause();
-
-public slots:
- /**
- * Works kind of similar to TQCanvas::advance. Increase the internal
- * advance counter. If @p reactionPeriod is reached the counter is set back to
- * 0 and @ref signalReaction is emitted. This is when the player is meant
- * to do something (move its units or so).
- *
- * This is very useful if you use TQCanvas as you can use this in your
- * TQCanvas::advance call. The advantage is that if you change the speed
- * of the game (i.e. change TQCanvas::setAdvancePeriod) the computer
- * player gets slower as well.
- *
- * If you don't use TQCanvas you can use setAdvancePeriod to get
- * the same result. Alternatively you can just use a TQTimer.
- *
- **/
- virtual void advance();
-
-signals:
- /**
- * This signal is emitted when your computer player is meant to do
- * something, or better is meant to be allowed to do something.
- **/
- void signalReaction();
-
-protected:
- /**
- * Default implementation simply emits signalReaction
- **/
- virtual void reaction();
-
-private:
- void init();
-
-private:
- class KGameComputerIOPrivate;
- KGameComputerIOPrivate* d;
-};
-
-
-#endif
diff --git a/libkdegames/kgame/kgamemessage.cpp b/libkdegames/kgame/kgamemessage.cpp
deleted file mode 100644
index 9f5e4694..00000000
--- a/libkdegames/kgame/kgamemessage.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgamemessage.h"
-
-#include <klocale.h>
-
-#define MESSAGE_VERSION 2
-
-TQ_UINT32 KGameMessage::createPlayerId(int oldplayerid,TQ_UINT32 gameid)
-{
- int p;
- p = oldplayerid & 0x3ff; // remove game id
- p |= (gameid << 10);
- return p;
-}
-
-int KGameMessage::rawPlayerId(TQ_UINT32 playerid)
-{
- return playerid & 0x03ff;
-}
-
-TQ_UINT32 KGameMessage::rawGameId(TQ_UINT32 playerid)
-{
- return (playerid & 0xfc00) >> 10;
-}
-
-bool KGameMessage::isPlayer(TQ_UINT32 msgid)
-{
- if (msgid & 0xfc00) {
- return true;
- } else {
- return false;
- }
-}
-
-bool KGameMessage::isGame(TQ_UINT32 msgid)
-{
- return !isPlayer(msgid);
-}
-
-
-void KGameMessage::createHeader(TQDataStream &msg,TQ_UINT32 sender,TQ_UINT32 receiver,int msgid)
-{
- msg << (TQ_INT16)sender << (TQ_INT16)receiver << (TQ_INT16)msgid;
-}
-
-void KGameMessage::extractHeader(TQDataStream &msg,TQ_UINT32 &sender,TQ_UINT32 &receiver,int &msgid)
-{
- TQ_INT16 d3,d4,d5;
- msg >> d3 >> d4 >> d5;
- sender=d3;receiver=d4;msgid=d5;
-}
-
-void KGameMessage::createPropertyHeader(TQDataStream &msg,int id)
-{
- msg << (TQ_INT16)id;
-}
-
-void KGameMessage::extractPropertyHeader(TQDataStream &msg,int &id)
-{
- TQ_INT16 d1;
- msg >> d1;
- id=d1;
-}
-
-void KGameMessage::createPropertyCommand(TQDataStream &msg,int cmdid,int pid,int cmd)
-{
- createPropertyHeader(msg,cmdid);
- msg << (TQ_INT16)pid ;
- msg << (TQ_INT8)cmd ;
-}
-
-void KGameMessage::extractPropertyCommand(TQDataStream &msg,int &pid,int &cmd)
-{
- TQ_INT16 d1;
- TQ_INT8 d2;
- msg >> d1 >> d2;
- pid=d1;
- cmd=d2;
-}
-
-int KGameMessage::version()
-{
- return MESSAGE_VERSION;
-}
-
-TQString KGameMessage::messageId2Text(int msgid)
-{
-// this should contain all KGameMessage::GameMessageIds
-// feel free to add missing ones, to remove obsolete one and even feel free to
-// let it be ;-)
- switch (msgid) {
- case KGameMessage::IdSetupGame:
- return i18n("Setup Game");
- case KGameMessage::IdSetupGameContinue:
- return i18n("Setup Game Continue");
- case KGameMessage::IdGameLoad:
- return i18n("Load Game");
- case KGameMessage::IdGameConnected:
- return i18n("Client game connected");
- case KGameMessage::IdGameSetupDone:
- return i18n("Game setup done");
- case KGameMessage::IdSyncRandom:
- return i18n("Synchronize Random");
- case KGameMessage::IdDisconnect:
- return i18n("Disconnect");
- case KGameMessage::IdPlayerProperty:
- return i18n("Player Property");
- case KGameMessage::IdGameProperty:
- return i18n("Game Property");
- case KGameMessage::IdAddPlayer:
- return i18n("Add Player");
- case KGameMessage::IdRemovePlayer:
- return i18n("Remove Player");
- case KGameMessage::IdActivatePlayer:
- return i18n("Activate Player");
- case KGameMessage::IdInactivatePlayer:
- return i18n("Inactivate Player");
- case KGameMessage::IdTurn:
- return i18n("Id Turn");
- case KGameMessage::IdError:
- return i18n("Error Message");
- case KGameMessage::IdPlayerInput:
- return i18n("Player Input");
- case KGameMessage::IdIOAdded:
- return i18n("An IO was added");
- case KGameMessage::IdProcessQuery:
- return i18n("Process Query");
- case KGameMessage::IdPlayerId:
- return i18n("Player ID");
- case KGameMessage::IdUser: // IdUser must be unknown for use, too!
- default:
- return TQString();
- }
-}
diff --git a/libkdegames/kgame/kgamemessage.h b/libkdegames/kgame/kgamemessage.h
deleted file mode 100644
index f4029895..00000000
--- a/libkdegames/kgame/kgamemessage.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMEMSG_H_
-#define __KGAMEMSG_H_
-
-#include <tqdatastream.h>
-#include <kdemacros.h>
-
-class KDE_EXPORT KGameMessage
-{
- public:
- /**
- * Creates a fully qualified player ID which contains the original
- * player id in the lower bits and the game number in the higher bits.
- * Do not rely on the exact bit positions as they are internal.
- *
- * See also @ref rawPlayerId and @ref rawGameId which are the inverse
- * operations
- *
- * @param playerid the player id - can include a gameid (will get removed)
- * @param gameid The game id (<64). 0 For broadcast.
- * @return the new player id
- */
- static TQ_UINT32 createPlayerId(int player, TQ_UINT32 game);
-
- /**
- * Returns the raw playerid, that is, a id which does not
- * contain the game number encoded in it. See also @ref createPlayerId which
- * is the inverse operation.
- *
- * @param the player id
- * @return the raw player id
- **/
- static int rawPlayerId(TQ_UINT32 playerid);
-
- /**
- * Returns the raw game id, that is, the game id the player
- * belongs to. Se also @ref createPlayerId which is the inverse operation.
- *
- * @param the player id
- * @return the raw game id
- **/
- static TQ_UINT32 rawGameId(TQ_UINT32 playerid);
-
- /**
- * Checks whether a message receiver/sender is a player
- *
- * @param id The ID of the sender/receiver
- * @return true/false
- */
- static bool isPlayer(TQ_UINT32 id);
-
- /**
- * Checks whether the sender/receiver of a message is a game
- *
- * @param id The ID of the sender/receiver
- * @return true/false
- */
- static bool isGame(TQ_UINT32 id);
-
- /**
- * Creates a message header given cookie,sender,receiver,...
- *
- * Also puts "hidden" header into the stream which are used by KGameClient
- * (message length and magic cookie). If you don't need them remove them
- * with @ref dropExternalHeader
- */
- static void createHeader(TQDataStream &msg, TQ_UINT32 sender, TQ_UINT32 receiver, int msgid);
-
- /**
- * Retrieves the information like cookie,sender,receiver,... from a message header
- *
- * Note that it could be necessary to call @ref dropExternalHeader first
- */
- static void extractHeader(TQDataStream &msg,TQ_UINT32 &sender, TQ_UINT32 &receiver, int &msgid);
-
- /**
- * Creates a property header given the property id
- */
- static void createPropertyHeader(TQDataStream &msg, int id);
-
- /**
- * Retrieves the property id from a property message header
- */
- static void extractPropertyHeader(TQDataStream &msg, int &id);
-
- /**
- * Creates a property header given the property id
- */
- static void createPropertyCommand(TQDataStream &msg, int cmdid, int pid, int cmd);
-
- /**
- * Retrieves the property id from a property message header
- */
- static void extractPropertyCommand(TQDataStream &msg, int &pid, int &cmd);
-
- /**
- * @return Version of the network library
- */
- static int version();
-
- /**
- * This function takes a @ref GameMessageIds as argument and returns a
- * suitable string for it. This string can't be used to identify a message
- * (as it is i18n'ed) but it can make debugging more easy. See also @ref
- * KGameDebugDialog.
- * @return Either a i18n'ed string (the name of the id) or TQString() if
- * the msgid is unknown
- **/
- static TQString messageId2Text(int msgid);
-
-
- /**
- * Message Ids used inside @ref KGame.
- *
- * You can use your own custom message Id by adding @p IdUser to it.
- **/
-// please document every new id with a short comment
- enum GameMessageIds {
-// game init, game load, disconnect, ...
- IdSetupGame=1, // sent to a newly connected player
- IdSetupGameContinue=2, // continue the setup
- IdGameLoad=3, // load/save the game to the client
- IdGameConnected=4, // Client successfully connected to master
- IdSyncRandom=5, // new random seed set - sync games
- IdDisconnect=6, // KGame object disconnects from game
- IdGameSetupDone=7, // New game client is now operational
-
-// properties
- IdPlayerProperty=20, // a player property changed
- IdGameProperty=21, // a game property changed
-
-// player management
- IdAddPlayer=30, // add a player
- IdRemovePlayer=31, // the player will be removed
- IdActivatePlayer=32, // Activate a player
- IdInactivatePlayer=33, // Inactivate a player
- IdTurn=34, // Turn to be prepared
-
-// to-be-categorized
- IdError=100, // an error occurred
- IdPlayerInput=101, // a player input occurred
- IdIOAdded=102, // KGameIO got added to a player...init this IO
-
-// special ids for computer player
- IdProcessQuery=220, // Process queries data (process only)
- IdPlayerId=221, // PlayerId got changed (process only)
-
- IdUser=256 // a user specified message
- };
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamenetwork.cpp b/libkdegames/kgame/kgamenetwork.cpp
deleted file mode 100644
index a3548579..00000000
--- a/libkdegames/kgame/kgamenetwork.cpp
+++ /dev/null
@@ -1,516 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgamenetwork.h"
-#include "kgamenetwork.moc"
-#include "kgamemessage.h"
-#include "kgameerror.h"
-
-#include "kmessageserver.h"
-#include "kmessageclient.h"
-#include "kmessageio.h"
-#include <dnssd/publicservice.h>
-
-#include <kdebug.h>
-
-#include <tqbuffer.h>
-
-
-class KGameNetworkPrivate
-{
-public:
- KGameNetworkPrivate()
- {
- mMessageClient = 0;
- mMessageServer = 0;
- mDisconnectId = 0;
- mService = 0;
- }
-
-public:
- KMessageClient* mMessageClient;
- KMessageServer* mMessageServer;
- TQ_UINT32 mDisconnectId; // Stores gameId() over a disconnect process
- DNSSD::PublicService* mService;
- TQString mType;
- TQString mName;
-
- int mCookie;
-};
-
-// ------------------- NETWORK GAME ------------------------
-KGameNetwork::KGameNetwork(int c, TQObject* parent) : TQObject(parent, 0)
-{
- d = new KGameNetworkPrivate;
- d->mCookie = (TQ_INT16)c;
-
- // Init the game as a local game, i.e.
- // create your own KMessageServer and a KMessageClient connected to it.
- setMaster();
-
- kdDebug(11001) << k_funcinfo << "this=" << this <<", cookie=" << cookie() << " sizeof(this)="<<sizeof(KGameNetwork) << endl;
-}
-
-KGameNetwork::~KGameNetwork()
-{
- kdDebug(11001) << k_funcinfo << "this=" << this << endl;
-// Debug();
- delete d->mService;
- delete d;
-}
-
-// ----------------------------- status methods
-bool KGameNetwork::isNetwork() const
-{ return isOfferingConnections() || d->mMessageClient->isNetwork();}
-
-TQ_UINT32 KGameNetwork::gameId() const
-{
- //return d->mMessageClient->id() ;
- // Return stored id in the case of disconnect. In any other
- // case the disconnect id is 0
- if (d->mMessageClient->id()!=0 ) {
- return d->mMessageClient->id() ;
- } else {
- return d->mDisconnectId;
- }
-}
-
-int KGameNetwork::cookie() const
-{ return d->mCookie; }
-
-bool KGameNetwork::isMaster() const
-{ return (d->mMessageServer != 0); }
-
-bool KGameNetwork::isAdmin() const
-{ return (d->mMessageClient->isAdmin()); }
-
-KMessageClient* KGameNetwork::messageClient() const
-{ return d->mMessageClient; }
-
-KMessageServer* KGameNetwork::messageServer() const
-{ return d->mMessageServer; }
-
-// ----------------------- network init
-void KGameNetwork::setMaster()
-{
- if (!d->mMessageServer) {
- d->mMessageServer = new KMessageServer (cookie(), this);
- } else {
- kdWarning(11001) << k_funcinfo << "Server already running!!" << endl;
- }
- if (!d->mMessageClient) {
- d->mMessageClient = new KMessageClient (this);
- connect (d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
- this, TQT_SLOT(receiveNetworkTransmission(const TQByteArray&, TQ_UINT32)));
- connect (d->mMessageClient, TQT_SIGNAL(connectionBroken()),
- this, TQT_SIGNAL(signalConnectionBroken()));
- connect (d->mMessageClient, TQT_SIGNAL(aboutToDisconnect(TQ_UINT32)),
- this, TQT_SLOT(aboutToLoseConnection(TQ_UINT32)));
- connect (d->mMessageClient, TQT_SIGNAL(connectionBroken()),
- this, TQT_SLOT(slotResetConnection()));
-
- connect (d->mMessageClient, TQT_SIGNAL(adminStatusChanged(bool)),
- this, TQT_SLOT(slotAdminStatusChanged(bool)));
- connect (d->mMessageClient, TQT_SIGNAL(eventClientConnected(TQ_UINT32)),
- this, TQT_SIGNAL(signalClientConnected(TQ_UINT32)));
- connect (d->mMessageClient, TQT_SIGNAL(eventClientDisconnected(TQ_UINT32, bool)),
- this, TQT_SIGNAL(signalClientDisconnected(TQ_UINT32, bool)));
-
- // broacast and direct messages are treated equally on receive.
- connect (d->mMessageClient, TQT_SIGNAL(forwardReceived(const TQByteArray&, TQ_UINT32, const TQValueList<TQ_UINT32>&)),
- d->mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)));
-
- } else {
- // should be no problem but still has to be tested
- kdDebug(11001) << k_funcinfo << "Client already exists!" << endl;
- }
- d->mMessageClient->setServer(d->mMessageServer);
-}
-
-void KGameNetwork::setDiscoveryInfo(const TQString& type, const TQString& name)
-{
- kdDebug() << k_funcinfo << type << ":" << name << endl;
- d->mType = type;
- d->mName = name;
- tryPublish();
-}
-
-void KGameNetwork::tryPublish()
-{
- if (d->mType.isNull() || !isOfferingConnections()) return;
- if (!d->mService) d->mService = new DNSSD::PublicService(d->mName,d->mType,port());
- else {
- if (d->mType!=d->mService->type()) d->mService->setType(d->mType);
- if (d->mName!=d->mService->serviceName()) d->mService->setServiceName(d->mName);
- }
- if (!d->mService->isPublished()) d->mService->publishAsync();
-}
-
-void KGameNetwork::tryStopPublishing()
-{
- if (d->mService) d->mService->stop();
-}
-
-bool KGameNetwork::offerConnections(TQ_UINT16 port)
-{
- kdDebug (11001) << k_funcinfo << "on port " << port << endl;
- if (!isMaster()) {
- setMaster();
- }
-
- // Make sure this is 0
- d->mDisconnectId = 0;
-
- // FIXME: This debug message can be removed when the program is working correct.
- if (d->mMessageServer && d->mMessageServer->isOfferingConnections()) {
- kdDebug (11001) << k_funcinfo << "Already running as server! Changing the port now!" << endl;
- }
-
- tryStopPublishing();
- kdDebug (11001) << k_funcinfo << "before Server->initNetwork" << endl;
- if (!d->mMessageServer->initNetwork (port)) {
- kdError (11001) << k_funcinfo << "Unable to bind to port " << port << "!" << endl;
- // no need to delete - we just cannot listen to the port
-// delete d->mMessageServer;
-// d->mMessageServer = 0;
-// d->mMessageClient->setServer((KMessageServer*)0);
- return false;
- }
- kdDebug (11001) << k_funcinfo << "after Server->initNetwork" << endl;
- tryPublish();
- return true;
-}
-
-bool KGameNetwork::connectToServer (const TQString& host, TQ_UINT16 port)
-{
- if (host.isEmpty()) {
- kdError(11001) << k_funcinfo << "No hostname given" << endl;
- return false;
- }
-
- // Make sure this is 0
- d->mDisconnectId = 0;
-
-// if (!d->mMessageServer) {
-// // FIXME: What shall we do here? Probably must stop a running game.
-// kdWarning (11001) << k_funcinfo << "We are already connected to another server!" << endl;
-/// }
-
- if (d->mMessageServer) {
- // FIXME: What shall we do here? Probably must stop a running game.
- kdWarning(11001) << "we are server but we are trying to connect to another server! "
- << "make sure that all clients connect to that server! "
- << "quitting the local server now..." << endl;
- stopServerConnection();
- d->mMessageClient->setServer((KMessageIO*)0);
- delete d->mMessageServer;
- d->mMessageServer = 0;
- }
-
- kdDebug(11001) << " about to set server" << endl;
- d->mMessageClient->setServer(host, port);
- emit signalAdminStatusChanged(false); // as we delete the connection above isAdmin() is always false now!
-
- // OK: We say that we already have connected, but this isn't so yet!
- // If the connection cannot be established, it will look as being disconnected
- // again ("slotConnectionLost" is called).
- // Shall we differ between these?
- kdDebug(11001) << "connected to " << host << ":" << port << endl;
- return true;
-}
-
-TQ_UINT16 KGameNetwork::port() const
-{
- if (isNetwork()) {
- if (isOfferingConnections()) {
- return d->mMessageServer->serverPort();
- } else {
- return d->mMessageClient->peerPort();
- }
- }
- return 0;
-}
-
-TQString KGameNetwork::hostName() const
-{
- return d->mMessageClient->peerName();
-}
-
-bool KGameNetwork::stopServerConnection()
-{
- // We still are the Master, we just don't accept further connections!
- tryStopPublishing();
- if (d->mMessageServer) {
- d->mMessageServer->stopNetwork();
- return true;
- }
- return false;
-}
-
-bool KGameNetwork::isOfferingConnections() const
-{ return (d->mMessageServer && d->mMessageServer->isOfferingConnections()); }
-
-void KGameNetwork::disconnect()
-{
- // TODO MH
- kdDebug(11001) << k_funcinfo << endl;
- stopServerConnection();
- if (d->mMessageServer) {
- TQValueList <TQ_UINT32> list=d->mMessageServer->clientIDs();
- TQValueList<TQ_UINT32>::Iterator it;
- for( it = list.begin(); it != list.end(); ++it )
- {
- kdDebug(11001) << "Client id=" << (*it) << endl;
- KMessageIO *client=d->mMessageServer->findClient(*it);
- if (!client)
- {
- continue;
- }
- kdDebug(11001) << " rtti=" << client->rtti() << endl;
- if (client->rtti()==2)
- {
- kdDebug(11001) << "DIRECT IO " << endl;
- }
- else
- {
- d->mMessageServer->removeClient(client,false);
- }
- }
- }
- else
- {
- kdDebug(11001) << k_funcinfo << "before client->disconnect() id="<<gameId()<< endl;
- //d->mMessageClient->setServer((KMessageIO*)0);
- kdDebug(11001) << "+++++++++++++++++++++++++++++++++++++++++++++++++++++++"<<endl;
- d->mMessageClient->disconnect();
-
- kdDebug(11001) << "++++++--------------------------------------------+++++"<<endl;
- }
- //setMaster();
- /*
- if (d->mMessageServer) {
- //delete d->mMessageServer;
- //d->mMessageServer=0;
- server=true;
- kdDebug(11001) << " server true" << endl;
- d->mMessageServer->deleteClients();
- kdDebug(11001) << " server deleteClients" << endl;
- }
- */
- kdDebug(11001) << k_funcinfo << "DONE" << endl;
-}
-
-void KGameNetwork::aboutToLoseConnection(TQ_UINT32 clientID)
-{
- kdDebug(11001) << "Storing client id of connection "<<clientID<<endl;
- d->mDisconnectId = clientID;
-}
-
-void KGameNetwork::slotResetConnection()
-{
- kdDebug(11001) << "Resseting client disconnect id"<<endl;
- d->mDisconnectId = 0;
-}
-
-void KGameNetwork::electAdmin(TQ_UINT32 clientID)
-{
- if (!isAdmin()) {
- kdWarning(11001) << k_funcinfo << "only ADMIN is allowed to call this!" << endl;
- return;
- }
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_ADMIN_CHANGE );
- stream << clientID;
- d->mMessageClient->sendServerMessage(buffer);
-}
-
-void KGameNetwork::setMaxClients(int max)
-{
- if (!isAdmin()) {
- kdWarning(11001) << k_funcinfo << "only ADMIN is allowed to call this!" << endl;
- return;
- }
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_MAX_NUM_CLIENTS );
- stream << (TQ_INT32)max;
- d->mMessageClient->sendServerMessage(buffer);
-}
-
-void KGameNetwork::lock()
-{
- if (messageClient()) {
- messageClient()->lock();
- }
-}
-
-void KGameNetwork::unlock()
-{
- if (messageClient()) {
- messageClient()->unlock();
- }
-}
-
-// --------------------- send messages ---------------------------
-
-bool KGameNetwork::sendSystemMessage(int data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << data;
- return sendSystemMessage(buffer,msgid,receiver,sender);
-}
-
-bool KGameNetwork::sendSystemMessage(const TQString &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer, IO_WriteOnly);
- stream << msg;
- return sendSystemMessage(buffer, msgid, receiver, sender);
-}
-
-bool KGameNetwork::sendSystemMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(((TQBuffer*)msg.device())->buffer(), msgid, receiver, sender); }
-
-bool KGameNetwork::sendSystemMessage(const TQByteArray& data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- if (!sender) {
- sender = gameId();
- }
-
- TQ_UINT32 receiverClient = KGameMessage::rawGameId(receiver); // KGame::gameId()
- int receiverPlayer = KGameMessage::rawPlayerId(receiver); // KPlayer::id()
-
- KGameMessage::createHeader(stream, sender, receiver, msgid);
- stream.writeRawBytes(data.data(), data.size());
-
- /*
- kdDebug(11001) << "transmitGameClientMessage msgid=" << msgid << " recv="
- << receiver << " sender=" << sender << " Buffersize="
- << buffer.size() << endl;
- */
-
- if (!d->mMessageClient) {
- // No client created, this should never happen!
- // Having a local game means we have our own
- // KMessageServer and we are the only client.
- kdWarning (11001) << k_funcinfo << "We don't have a client! Should never happen!" << endl;
- return false;
- }
-
- if (receiverClient == 0 || receiverPlayer != 0)
- {
- // if receiverClient == 0 this is a broadcast message. if it is != 0 but
- // receiverPlayer is also != 0 we have to send broadcast anyway, because the
- // KPlayer object on all clients needs to receive the message.
- d->mMessageClient->sendBroadcast(buffer);
- }
- else
- {
- d->mMessageClient->sendForward(buffer, receiverClient);
- }
- return true;
-}
-
-bool KGameNetwork::sendMessage(int data, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(data,msgid+KGameMessage::IdUser,receiver,sender); }
-
-bool KGameNetwork::sendMessage(const TQString &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(msg,msgid+KGameMessage::IdUser,receiver,sender); }
-
-bool KGameNetwork::sendMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(msg, msgid+KGameMessage::IdUser, receiver, sender); }
-
-bool KGameNetwork::sendMessage(const TQByteArray &msg, int msgid, TQ_UINT32 receiver, TQ_UINT32 sender)
-{ return sendSystemMessage(msg, msgid+KGameMessage::IdUser, receiver, sender); }
-
-void KGameNetwork::sendError(int error,const TQByteArray& message, TQ_UINT32 receiver, TQ_UINT32 sender)
-{
- TQByteArray buffer;
- TQDataStream stream(buffer,IO_WriteOnly);
- stream << (TQ_INT32) error;
- stream.writeRawBytes(message.data(), message.size());
- sendSystemMessage(stream,KGameMessage::IdError,receiver,sender);
-}
-
-
-// ----------------- receive messages from the network
-void KGameNetwork::receiveNetworkTransmission(const TQByteArray& receiveBuffer, TQ_UINT32 clientID)
-{
- TQDataStream stream(receiveBuffer, IO_ReadOnly);
- int msgid;
- TQ_UINT32 sender; // the id of the KGame/KPlayer who sent the message
- TQ_UINT32 receiver; // the id of the KGame/KPlayer the message is for
- KGameMessage::extractHeader(stream, sender, receiver, msgid);
-// kdDebug(11001) << k_funcinfo << "id=" << msgid << " sender=" << sender << " recv=" << receiver << endl;
-
- // No broadcast : receiver==0
- // No player isPlayer(receiver)
- // Different game gameId()!=receiver
- if (receiver && receiver!=gameId() && !KGameMessage::isPlayer(receiver) )
- {
- // receiver=0 is broadcast or player message
- kdDebug(11001) << k_funcinfo << "Message not meant for us "
- << gameId() << "!=" << receiver << " rawid="
- << KGameMessage::rawGameId(receiver) << endl;
- return;
- }
- else if (msgid==KGameMessage::IdError)
- {
- TQString text;
- TQ_INT32 error;
- stream >> error;
- kdDebug(11001) << k_funcinfo << "Got IdError " << error << endl;
- text = KGameError::errorText(error, stream);
- kdDebug(11001) << "Error text: " << text.latin1() << endl;
- emit signalNetworkErrorMessage((int)error,text);
- }
- else
- {
- networkTransmission(stream, msgid, receiver, sender, clientID);
- }
-}
-
-// -------------- slots for the signals of the client
-void KGameNetwork::slotAdminStatusChanged(bool isAdmin)
-{
- emit signalAdminStatusChanged(isAdmin);
-
-// TODO: I'm pretty sure there are a lot of things that should be done here...
-}
-
-void KGameNetwork::Debug()
-{
- kdDebug(11001) << "------------------- KNETWORKGAME -------------------------" << endl;
- kdDebug(11001) << "gameId " << gameId() << endl;
- kdDebug(11001) << "gameMaster " << isMaster() << endl;
- kdDebug(11001) << "gameAdmin " << isAdmin() << endl;
- kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-/*
- * vim: et sw=2
- */
diff --git a/libkdegames/kgame/kgamenetwork.h b/libkdegames/kgame/kgamenetwork.h
deleted file mode 100644
index b5975ffc..00000000
--- a/libkdegames/kgame/kgamenetwork.h
+++ /dev/null
@@ -1,432 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMENETWORK_H_
-#define __KGAMENETWORK_H_
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <kdemacros.h>
-class KGameIO;
-class KMessageClient;
-class KMessageServer;
-
-class KGameNetworkPrivate;
-
-/**
- * The KGameNetwork class is the KGame class with network
- * support. All other features are the same but they are
- * now network transparent. It is not used directly but
- * only via a KGame object. So you do not really have
- * to bother with this object.
- *
- * @short The main KDE game object
- * @author Martin Heni <martin@heni-online.de>
- * @version $Id$
- */
-class KDE_EXPORT KGameNetwork : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * Create a KGameNetwork object
- */
- KGameNetwork(int cookie=42,TQObject* parent=0);
- virtual ~KGameNetwork();
-
- /**
- * Gives debug output of the game status
- **/
- virtual void Debug();
-
- /**
- * @return TRUE if this is a network game - i.e. you are either MASTER or
- * connected to a remote MASTER.
- **/
- bool isNetwork() const;
-
- /**
- * Is this the game MASTER (i.e. has started theKMessageServer). A
- * game has always exactly one MASTER. This is either a KGame object (i.e. a
- * Client) or an own MessageServer-process. A KGame object that has the
- * MASTER status is always admin.
- *
- * You probably don't want to use this. It is a mostly internal method which
- * will probably become protected. Better use isAdmin
- *
- * @see isAdmin
- * @return Whether this client has started the KMessageServer
- **/
- bool isMaster() const;
-
- /**
- * The admin of a game is the one who initializes newly connected clients
- * using negotiateNetworkGame and is allowed to configure the game.
- * E.g. only the admin is allowed to use KGame::setMaxPlayers.
- *
- * If one KGame object in the game is MASTER then this client is the admin
- * as well. isMaster and isAdmin differ only if the KMessageServer
- * is running in an own process.
- * @return Whether this client (KGame object) is the admin
- **/
- bool isAdmin() const;
-
- /**
- * The unique ID of this game
- *
- * @return int id
- **/
- TQ_UINT32 gameId() const;
-
- /**
- * Inits a network game as network MASTER. Note that if the
- * KMessageServer is not yet started it will be started here (see
- * setMaster). Any existing connection will be disconnected.
- *
- * If you already offer connections the port is changed.
- *
- * @param port The port on which the service is offered
- * @return true if it worked
- **/
- bool offerConnections (TQ_UINT16 port);
-
- /**
- * Announces game MASTER on network using DNS-SD. Clients then can discover it using
- * DNSSD::ServiceBrowser (or KGameConnectWidget) instead of manually entering
- * IP address.
- * @param type service type (something like _kwin4._tcp).
- * It should be unique for application.
- * @param name game name that will be displayed by clients. If not
- * set hostname will be used. In case of name conflict -2, -3 and so on will be added to name.
- * @since 3.4
- **/
- void setDiscoveryInfo(const TQString& type, const TQString& name=TQString());
-
- /**
- * Inits a network game as a network CLIENT
- *
- * @param host the host to which we want to connect
- * @param port the port we want to connect to
- *
- * @return true if connected
- **/
- bool connectToServer(const TQString& host, TQ_UINT16 port);
-
- /**
- * @since 3.2
- * @return The port we are listening to if offerConnections was called
- * or the port we are connected to if connectToServer was called.
- * Otherwise 0.
- **/
- TQ_UINT16 port() const;
-
- /**
- * @since 3.2
- * @return The name of the host that we are currently connected to is
- * isNetwork is TRUE and we are not the MASTER, i.e. if connectToServer
- * was called. Otherwise this will return "localhost".
- **/
- TQString hostName() const;
-
- /**
- * Stops offering server connections - only for game MASTER
- * @return true
- **/
- bool stopServerConnection();
-
- /**
- * Changes the maximal connection number of the KMessageServer to max.
- * -1 Means infinite connections are possible. Note that existing
- * connections are not affected, so even if you set this to 0 in a running
- * game no client is being disconnected. You can call this only if you are
- * the ADMIN!
- *
- * @see KMessageServer::setMaxClients
- * @param max The maximal number of connections possible.
- **/
- void setMaxClients(int max);
-
- //AB: is this now internal only? Can we make it protected (maybe with
- //friends)? sendSystemMessage AND sendMessage is very confusing to the
- //user.
- /**
- * Sends a network message msg with a given msg id msgid to all clients.
- * Use this to communicate with KGame (e.g. to add a player ot to configure
- * the game - usually not necessary).
- *
- * For your own messages use sendMessage instead! This is mostly
- * internal!
- *
- * @param buffer the message which will be send. See messages.txt for contents
- * @param msgid an id for this message. See
- * KGameMessage::GameMessageIds
- * @param receiver the KGame / KPlayer this message is for.
- * @param sender The KGame / KPlayer this message is from (i.e.
- * you). You
- * probably want to leave this 0, then KGameNetwork will create the correct
- * value for you. You might want to use this if you send a message from a
- * specific player.
- * @return true if worked
- */
- // AB: TODO: doc on how "receiver" and "sender" should be created!
- bool sendSystemMessage(const TQByteArray& buffer, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * @overload
- **/
- bool sendSystemMessage(int data, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * @overload
- **/
- bool sendSystemMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * @overload
- **/
- bool sendSystemMessage(const TQString& msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * Sends a network message
- * @param error The error code
- * @param message The error message - use KGameError
- * @param receiver the KGame / KPlayer this message is for. 0 For
- * all
- * @param sender The KGame / KPlayer this message is from (i.e.
- * you). You probably want to leave this 0, then KGameNetwork will create
- * the correct value for you. You might want to use this if you send a
- * message from a specific player.
- **/
- void sendError(int error, const TQByteArray& message, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * Are we still offer offering server connections - only for game MASTER
- * @return true/false
- **/
- bool isOfferingConnections() const;
-
- /**
- * Application cookie. this idendifies the game application. It
- * help to distinguish between e.g. KPoker and KWin4
- * @return the application cookie
- **/
- int cookie() const;
-
- /**
- * Send a network message msg with a given message ID msgid to all clients.
- * You want to use this to send a message to the clients.
- *
- * Note that a message is always sent to ALL clients! This is necessary so
- * that all clients always have the same data and can easily be changed from
- * network to non-network without restarting the game. If you want a
- * specific KGame / KPlayer to react to the message use the
- * receiver and sender parameters. See KGameMessage::calsMessageId
- *
- * SendMessage differs from sendSystemMessage only by the msgid parameter.
- * sendSystemMessage is thought as a KGame only mehtod while
- * sendMessage is for public use. The msgid parameter will be
- * +=KGameMessage::IdUser and in KGame::signalNetworkData msgid will
- * be -= KGameMessage::IdUser again, so that one can easily distinguish
- * between system and user messages.
- *
- * Use sendSystemMessage to comunicate with KGame (e.g. by adding a
- * player) and sendMessage for your own user message.
- *
- * Note: a player should send messages through a KGameIO!
- *
- * @param buffer the message which will be send. See messages.txt for contents
- * @param msgid an id for this message. See KGameMessage::GameMessageIds
- * @param receiver the KGame / KPlayer this message is for.
- * @param sender The KGame / KPlayer this message is from (i.e.
- * you). You
- * probably want to leave this 0, then KGameNetwork will create the correct
- * value for you. You might want to use this if you send a message from a
- * specific player.
- * @return true if worked
- **/
- // AB: TODO: doc on how "receiver" and "sender" should be created!
- bool sendMessage(const TQByteArray& buffer, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- **/
- bool sendMessage(const TQDataStream &msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- **/
- bool sendMessage(const TQString& msg, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- **/
- bool sendMessage(int data, int msgid, TQ_UINT32 receiver=0, TQ_UINT32 sender=0);
-
-
- /**
- * Called by ReceiveNetworkTransmission(). Will be overwritten by
- * KGame and handle the incoming message.
- **/
- virtual void networkTransmission(TQDataStream&, int, TQ_UINT32, TQ_UINT32, TQ_UINT32 clientID) = 0;
-
-
- /**
- * Disconnect the current connection and establish a new local one.
- **/
- void disconnect();
-
-
- /**
- * If you are the ADMIN of the game you can give the ADMIN status away to
- * another client. Use this e.g. if you want to quit the game or if you want
- * another client to administrate the game (note that disconnect calls
- * this automatically).
- * @param clientID the ID of the new ADMIN (note: this is the _client_ID
- * which has nothing to do with the player IDs. See KMessageServer)
- **/
- void electAdmin(TQ_UINT32 clientID);
-
- /**
- * Don't use this unless you really know what youre doing! You might
- * experience some strange behaviour if you send your messages directly
- * through the KMessageClient!
- *
- * @return a pointer to the KMessageClient used internally to send the
- * messages. You should rather use one of the send functions!
- **/
- KMessageClient* messageClient() const;
-
- /**
- * Don't use this unless you really know what you are doing! You might
- * experience some strange behaviour if you use the message server directly!
- *
- * @return a pointer to the message server if this is the MASTER KGame
- * object. Note that it might be possible that no KGame object contains
- * the KMessageServer at all! It might even run stand alone!
- **/
- KMessageServer* messageServer() const;
-
- /**
- * You should call this before doing thigs like, e.g. tqApp->processEvents().
- * Don't forget to call unlock once you are done!
- *
- * @see KMessageClient::lock
- **/
- virtual void lock();
-
- /**
- * @see KMessageClient::unlock
- **/
- virtual void unlock();
-
-signals:
- /**
- * A network error occurred
- * @param error the error code
- * @param text the error text
- */
- void signalNetworkErrorMessage(int error, TQString text);
-
- /**
- * Our connection to the KMessageServer has broken.
- * See KMessageClient::connectionBroken
- **/
- void signalConnectionBroken();
-
- /**
- * This signal is emitted whenever the KMessageServer sends us a message that a
- * new client connected. KGame uses this to call KGame::negotiateNetworkGame
- * for the newly connected client if we are admin (see isAdmin)
- *
- * @see KMessageClient::eventClientConnected
- *
- * @param clientID the ID of the newly connected client
- **/
- void signalClientConnected(TQ_UINT32 clientID);
-
- /**
- * This signal is emitted whenever the KMessageServer sends us a message
- * that a connection to a client was detached. The second parameter can be used
- * to distinguish between network errors or removing on purpose.
- *
- * @see KMessageClient::eventClientDisconnected
- *
- * @param clientID the client that has disconnected
- * @param broken true if the connection was lost because of a network error, false
- * if the connection was closed by the message server admin.
- */
- void signalClientDisconnected(TQ_UINT32 clientID, bool broken);
-
- /**
- * This client gets or loses the admin status.
- * @see KMessageClient::adminStatusChanged
- * @param isAdmin True if this client gets the ADMIN status otherwise FALSE
- **/
- void signalAdminStatusChanged(bool isAdmin);
-
-protected:
- /**
- * @internal
- * Start a KMessageServer object and use it as the MASTER of the game.
- * Note that you must not call this if there is already another master
- * running!
- **/
- void setMaster();
-
-protected slots:
- /**
- * Called by KMessageClient::broadcastReceived() and will check if the
- * message format is valid. If it is not, it will generate an error (see
- * signalNetworkVersionError and signalNetworkErorrMessage).
- * If it is valid, the pure virtual method networkTransmission() is called.
- * (This one is overwritten in KGame.)
- **/
- void receiveNetworkTransmission(const TQByteArray& a, TQ_UINT32 clientID);
-
- /**
- * This KGame object receives or loses the admin status.
- * @param isAdmin Whether we are admin or not
- **/
- void slotAdminStatusChanged(bool isAdmin);
-
- /**
- * Called when the network connection is about to terminate. Is used
- * to store the network parameter like the game id
- */
- void aboutToLoseConnection(TQ_UINT32 id);
-
- /**
- * Called when the network connection is terminated. Used to clean
- * up the disconnect parameter
- */
- void slotResetConnection();
-
-
-private:
- void tryPublish();
- void tryStopPublishing();
- KGameNetworkPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kgameprocess.cpp b/libkdegames/kgame/kgameprocess.cpp
deleted file mode 100644
index 9dcc66c0..00000000
--- a/libkdegames/kgame/kgameprocess.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgameprocess.h"
-#include "kplayer.h"
-#include "kgame.h"
-#include "kgamemessage.h"
-#include "kmessageio.h"
-
-#include <krandomsequence.h>
-
-#include <tqbuffer.h>
-#include <tqdatastream.h>
-#include <tqcstring.h>
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-
-#define READ_BUFFER_SIZE 1024
-
-// ----------------------- Process Child ---------------------------
-
-KGameProcess::KGameProcess() : TQObject(0,0)
-{
- mTerminate=false;
- // Check whether a player is set. If not create one!
- rFile.open(IO_ReadOnly|IO_Raw,stdin);
- wFile.open(IO_WriteOnly|IO_Raw,stdout);
- mMessageIO=new KMessageFilePipe(this,&rFile,&wFile);
-// mMessageClient=new KMessageClient(this);
-// mMessageClient->setServer(mMessageIO);
-// connect (mMessageClient, TQT_SIGNAL(broadcastReceived(const TQByteArray&, TQ_UINT32)),
-// this, TQT_SLOT(receivedMessage(const TQByteArray&, TQ_UINT32)));
- connect (mMessageIO, TQT_SIGNAL(received(const TQByteArray&)),
- this, TQT_SLOT(receivedMessage(const TQByteArray&)));
- fprintf(stderr,"KGameProcess::constructor %p %p\n",&rFile,&wFile);
-
- mRandom = new KRandomSequence;
- mRandom->setSeed(0);
-}
-KGameProcess::~KGameProcess()
-{
- delete mRandom;
- //delete mMessageClient;
- //delete mMessageServer;
- delete mMessageIO;
- rFile.close();
- wFile.close();
- fprintf(stderr,"KGameProcess::destructor\n");
-}
-
-
-bool KGameProcess::exec(int argc, char *argv[])
-{
- // Get id and cookie, ... from command line
- processArgs(argc,argv);
- do
- {
- mMessageIO->exec();
- } while(!mTerminate);
- return true;
-}
-
-// You have to do this to create a message
-// TQByteArray buffer;
-// TQDataStream wstream(buffer,IO_WriteOnly);
-// then stream data into the stream and call this function
-void KGameProcess::sendSystemMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver)
-{
- fprintf(stderr,"KGameProcess::sendMessage id=%d recv=%d",msgid,receiver);
- TQByteArray a;
- TQDataStream outstream(a,IO_WriteOnly);
-
- TQBuffer *device=(TQBuffer *)stream.device();
- TQByteArray data=device->buffer();;
-
- KGameMessage::createHeader(outstream,0,receiver,msgid);
- outstream.writeRawBytes(data.data(),data.size());
-
- //if (mMessageClient) mMessageClient->sendBroadcast(a);
- // TODO: The fixed received 2 will cause problems. But how to address the
- // proper one?
-// if (mMessageClient) mMessageClient->sendForward(a,2);
- if (mMessageIO) mMessageIO->send(a);
-}
-
-void KGameProcess::sendMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver)
-{
- sendSystemMessage(stream,msgid+KGameMessage::IdUser,receiver);
-}
-
-void KGameProcess::processArgs(int argc, char *argv[])
-{
- int v=0;
- if (argc>2)
- {
- v=atoi(argv[2]);
- //kdDebug(11001) << "cookie (unused) " << v << endl;
- }
- if (argc>1)
- {
- v=atoi(argv[1]);
- //kdDebug(11001) << "id (unused) " << v << endl;
- }
- fprintf(stderr,"processArgs \n");
- fflush(stderr);
-}
-
-void KGameProcess::receivedMessage(const TQByteArray& receiveBuffer)
-{
- TQDataStream stream(receiveBuffer, IO_ReadOnly);
- int msgid;
- TQ_UINT32 sender;
- TQ_UINT32 receiver;
- KGameMessage::extractHeader(stream, sender, receiver, msgid);
- fprintf(stderr,"------ receiveNetworkTransmission(): id=%d sender=%d,recv=%d\n",msgid,sender,receiver);
- switch(msgid)
- {
- case KGameMessage::IdTurn:
- TQ_INT8 b;
- stream >> b;
- emit signalTurn(stream,(bool)b);
- break;
- case KGameMessage::IdIOAdded:
- TQ_INT16 id;
- stream >> id;
- emit signalInit(stream,(int)id);
- break;
- default:
- emit signalCommand(stream,msgid-KGameMessage::IdUser,receiver,sender);
- break;
- }
-}
-
-#include "kgameprocess.moc"
diff --git a/libkdegames/kgame/kgameprocess.h b/libkdegames/kgame/kgameprocess.h
deleted file mode 100644
index b7e2d145..00000000
--- a/libkdegames/kgame/kgameprocess.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMEPROCESS_H_
-#define __KGAMEPROCESS_H_
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <tqfile.h>
-
-#include "kgameproperty.h"
-#include <krandomsequence.h>
-#include <kdemacros.h>
-class KPlayer;
-class KMessageFilePipe;
-
-/**
- * This is the process class used on the computer player
- * side to communicate with its counterpart KProcessIO class.
- * Using these two classes will give fully transparent communication
- * via TQDataStreams.
- */
-class KDE_EXPORT KGameProcess: public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
- public:
- /**
- * Creates a KGameProcess class. Done only in the computer
- * player. To activate the communication you have to call
- * the exec function of this class which will listen
- * to the communication and emit signals to notify you of
- * any incoming messages.
- * Note: This function will only return after you set
- * setTerminate(true) in one of the received signals.
- * So you can not do any computer calculation after the exec function.
- * Instead you react on the signals which are emitted after a
- * message is received and perform the calculations there!
- * Example:
- * \code
- * int main(int argc ,char * argv[])
- * {
- * KGameProcess proc;
- * connect(&proc,TQT_SIGNAL(signalCommand(TQDataStream &,int ,int ,int )),
- * this,TQT_SLOT(slotCommand(TQDataStream & ,int ,int ,int )));
- * connect(&proc,TQT_SIGNAL(signalInit(TQDataStream &,int)),
- * this,TQT_SLOT(slotInit(TQDataStream & ,int )));
- * connect(&proc,TQT_SIGNAL(signalTurn(TQDataStream &,bool )),
- * this,TQT_SLOT(slotTurn(TQDataStream & ,bool )));
- * return proc.exec(argc,argv);
- * }
- * \endcode
- */
- KGameProcess();
- /**
- * Destruct the process
- */
- ~KGameProcess();
-
- /**
- * Enters the event loop of the computer process. Does only
- * return on setTerminate(true)!
- */
- bool exec(int argc, char *argv[]);
-
- /**
- * Should the computer process leave its exec function?
- * Activated if you setTerminate(true);
- *
- * @return true/false
- */
- bool terminate() const {return mTerminate;}
-
- /**
- * Set this to true if the computer process should end, ie
- * leave its exec function.
- *
- * @param b true for exit the exec function
- */
- void setTerminate(bool b) {mTerminate=b;}
-
- /**
- * Sends a message to the corresponding KGameIO
- * device. Works like the sendSystemMessage but
- * for user id's
- *
- * @param stream the TQDataStream containing the message
- * @param msgid the message id for the message
- * @param receiver unused
- */
- void sendMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver=0);
-
- /**
- * Sends a system message to the corresonding KGameIO device.
- * This will normally be either a performed move or a query
- * (IdProcessQuery). The query option is a way to communicate
- * with the KGameIO at the other side and e.g. retrieve some
- * game relevant data from here.
- * Exmaple for a query:
- * \code
- * TQByteArray buffer;
- * TQDataStream out(buffer,IO_WriteOnly);
- * int msgid=KGameMessage::IdProcessQuery;
- * out << (int)1;
- * proc.sendSystemMessage(out,msgid,0);
- * \endcode
- *
- * @param stream the TQDataStream containing the message
- * @param msgid the message id for the message
- * @param receiver unused
- */
- void sendSystemMessage(TQDataStream &stream,int msgid,TQ_UINT32 receiver=0);
-
- /**
- * Returns a pointer to a KRandomSequence. You can generate
- * random numbers via e.g.
- * \code
- * random()->getLong(100);
- * \endcode
- *
- * @return KRandomSequence pointer
- */
- KRandomSequence *random() {return mRandom;}
-
- protected:
- /**
- * processes the command line argumens to set up the computer player
- * Pass the argumens exactely as given by main()
- */
- void processArgs(int argc, char *argv[]);
-
- protected slots:
- /**
- * A message is received via the interprocess connection. The
- * appropriate signals are called.
- */
- void receivedMessage(const TQByteArray& receiveBuffer);
-
- signals:
- /**
- * The generic communication signal. You have to connect to this
- * signal to generate a valid computer response onto arbitrary messages.
- * All signals but IdIOAdded and IdTurn end up here!
- * Example:
- * \code
- * void Computer::slotCommand(int &msgid,TQDataStream &in,TQDataStream &out)
- * {
- * TQ_INT32 data,move;
- * in >> data;
- * // compute move ...
- * move=data*2;
- * out << move;
- * }
- * \endcode
- *
- * @param inputStream the incoming data stream
- * @param msgid the message id of the message which got transmitted to the computer
- * @param receiver the id of the receiver
- * @param sender the id of the sender
- */
- void signalCommand(TQDataStream &inputStream,int msgid,int receiver,int sender);
-
- /**
- * This signal is emmited if the computer player should perform a turn.
- * Calculations can be made here and the move can then be send back with
- * sendSystemMessage with the message id KGameMessage::IdPlayerInput.
- * These must provide a move which complies to your other move syntax as
- * e.g. produces by keyboard or mouse input.
- * Additonal data which have been written into the stream from the
- * ProcessIO's signal signalPrepareTurn can be retrieved from the
- * stream here.
- * Example:
- * \code
- * void slotTurn(TQDataStream &in,bool turn)
- * {
- * int id;
- * int recv;
- * TQByteArray buffer;
- * TQDataStream out(buffer,IO_WriteOnly);
- * if (turn)
- * {
- * // Create a move - the format is yours to decide
- * // It arrives exactly as this in the kgame inputMove function!!
- * TQ_INT8 x1,y1,pl;
- * pl=-1;
- * x1=proc.random()->getLong(8);
- * y1=proc.random()->getLong(8);
- * // Stream it
- * out << pl << x1 << y1;
- * id=KGameMessage::IdPlayerInput;
- * proc.sendSystemMessage(out,id,0);
- * }
- * }
- * \endcode
- *
- * @param stream The datastream which contains user data
- * @param turn True or false whether the turn is activated or deactivated
- *
- */
- void signalTurn(TQDataStream &stream,bool turn);
-
- /**
- * This signal is emmited when the process is initialized, i.e. added
- * to a KPlayer. Initial initialisation can be performed here be reacting
- * to the KProcessIO signal signalIOAdded and retrieving the data here
- * from the stream.
- * It works just as the signalTurn() but is only send when the player is
- * added to the game, i.e. it needs some initialization data
- *
- * @param stream The datastream which contains user data
- * @param userid The userId of the player. (Careful to rely on it yet)
- */
- void signalInit(TQDataStream &stream,int userid);
-
- protected:
- bool mTerminate;
- KMessageFilePipe *mMessageIO;
- private:
- TQFile rFile;
- TQFile wFile;
- KRandomSequence* mRandom;
-};
-#endif
diff --git a/libkdegames/kgame/kgameproperty.cpp b/libkdegames/kgame/kgameproperty.cpp
deleted file mode 100644
index 49a8984f..00000000
--- a/libkdegames/kgame/kgameproperty.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgameproperty.h"
-#include "kgamepropertyhandler.h"
-#include "kgamemessage.h"
-#include "kplayer.h"
-#include "kgame.h"
-
-#define KPLAYERHANDLER_LOAD_COOKIE 6239
-
-KGamePropertyBase::KGamePropertyBase(int id, KGame* parent)
-{
- init();
- registerData(id, parent);
-}
-
-KGamePropertyBase::KGamePropertyBase(int id, KPlayer* parent)
-{
- init();
- registerData(id, parent);
-}
-
-KGamePropertyBase::KGamePropertyBase(int id, KGamePropertyHandler* owner)
-{
- init();
- registerData(id, owner);
-}
-
-KGamePropertyBase::KGamePropertyBase()
-{
- init();
-}
-
-KGamePropertyBase::~KGamePropertyBase()
-{
- unregisterData();
-}
-
-void KGamePropertyBase::init()
-{
- mOwner = 0;
- setDirty(false);
-
- // this is very useful and used by e.g. KGameDialog so
- // it is activated by default. Big games may profit by deactivating it to get
- // a better performance.
- setEmittingSignal(true);
-
- setOptimized(false);
-
- //setReadOnly(false);
- mFlags.bits.locked = false ; // setLocked(false); is NOT possible as it checks whether isLocked() allows to change the status
-
- // local is default
- setPolicy(PolicyLocal);
-}
-
-int KGamePropertyBase::registerData(int id, KGame* owner, TQString name)
-{ return registerData(id, owner->dataHandler(), name); }
-
-int KGamePropertyBase::registerData(int id, KPlayer* owner, TQString name)
-{ return registerData(id, owner->dataHandler(), name); }
-
-int KGamePropertyBase::registerData( KGamePropertyHandler* owner,PropertyPolicy p, TQString name)
-{ return registerData(-1, owner,p, name); }
-
-int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner, TQString name)
-{ return registerData(id, owner,PolicyUndefined, name); }
-
-int KGamePropertyBase::registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, TQString name)
-{
-// we don't support changing the id
- if (!owner) {
- kdWarning(11001) << k_funcinfo << "Resetting owner=0. Sure you want to do this?" << endl;
- mOwner=0;
- return -1;
- }
- if (!mOwner) {
- if (id==-1) {
- id=owner->uniquePropertyId();
- }
- mId = id;
- mOwner = owner;
- mOwner->addProperty(this, name);
- if (p!=PolicyUndefined) {
- setPolicy(p);
- } else {
- setPolicy(mOwner->policy());
- }
- }
- return mId;
-}
-
-void KGamePropertyBase::unregisterData()
-{
- if (!mOwner) {
- return;
- }
- mOwner->removeProperty(this);
- mOwner = 0;
-}
-
-bool KGamePropertyBase::sendProperty()
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyHeader(s, id());
- save(s);
- if (mOwner) {
- return mOwner->sendProperty(s);
- } else {
- kdError(11001) << k_funcinfo << "Cannot send because there is no receiver defined" << endl;
- return false;
- }
-}
-
-bool KGamePropertyBase::sendProperty(const TQByteArray& data)
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyHeader(s, id());
- s.writeRawBytes(data.data(), data.size());
- if (mOwner) {
- return mOwner->sendProperty(s);
- } else {
- kdError(11001) << k_funcinfo << ": Cannot send because there is no receiver defined" << endl;
- return false;
- }
-}
-
-bool KGamePropertyBase::lock()
-{
- if (isLocked()) {
- return false;
- }
- setLock(true);
- return true;
-}
-
-bool KGamePropertyBase::unlock(bool force)
-{
- if (isLocked() && !force) {
- return false;
- }
- setLock(false);
- return true;
-}
-
-void KGamePropertyBase::setLock(bool l)
-{
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s, IdCommand, id(), CmdLock);
-
- s << (TQ_INT8)l;
- if (mOwner) {
- mOwner->sendProperty(s);
- } else {
- kdError(11001) << k_funcinfo << ": Cannot send because there is no receiver defined" << endl;
- return ;
- }
-}
-
-void KGamePropertyBase::emitSignal()
-{
- //kdDebug(11001) << k_funcinfo << ": mOwnerP="<< mOwner << " id=" << id() << endl;
- if (mOwner ) {
- mOwner->emitSignal(this);
- } else {
- kdError(11001) << k_funcinfo << ":id="<<id()<<" Cannot emitSignal because there is no handler set" << endl;
- }
-}
-
-void KGamePropertyBase::command(TQDataStream& s, int cmd, bool isSender)
-{
- switch (cmd) {
- case CmdLock:
- {
- if (!isSender) {
- TQ_INT8 locked;
- s >> locked;
- mFlags.bits.locked = (bool)locked ;
- break;
- }
- }
- default: // probably in derived classes
- break;
- }
-}
-
diff --git a/libkdegames/kgame/kgameproperty.h b/libkdegames/kgame/kgameproperty.h
deleted file mode 100644
index f02c4db0..00000000
--- a/libkdegames/kgame/kgameproperty.h
+++ /dev/null
@@ -1,848 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEPROPERTY_H_
-#define __KGAMEPROPERTY_H_
-
-#include <tqdatastream.h>
-
-#include <kdebug.h>
-#include <typeinfo>
-#include <kdemacros.h>
-class KGame;
-class KPlayer;
-class KGamePropertyHandler;
-using namespace std;
-
-/**
- * @short Base class of KGameProperty
- *
- * The KGamePropertyBase class is the base class of KGameProperty. See
- * KGameProperty for further information.
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KDE_EXPORT KGamePropertyBase
-{
-public:
- enum PropertyDataIds { // these belong to KPlayer/KGame!
- //KPlayer
- IdGroup=1,
- IdUserId=2,
- IdAsyncInput=3,
- IdTurn=4,
- IdName=5,
-
- //KGame
- IdGametqStatus=6,
- IdMaxPlayer=7,
- IdMinPlayer=8,
-
- // Input Grabbing
- IdGrabInput=16,
- IdReleaseInput=17,
-
- IdCommand, // Reserved for internal use
- IdUser=256,
-
- IdAutomatic=0x7000 // Id's from here on are automatically given (16bit)
- };
-
- /**
- * Commands for advanced properties (TQ_INT8)
- **/
- enum PropertyCommandIds
- {
- // General
- CmdLock=1,
-
- // Array
- CmdAt=51,
- CmdResize=52,
- CmdFill=53,
- CmdSort=54,
- // List (could be the same id's actually)
- CmdInsert=61,
- CmdAppend=62,
- CmdRemove=63,
- CmdClear=64
- };
-
- /**
- * The policy of the property. This can be PolicyClean (setValue uses
- * send), PolicyDirty (setValue uses changeValue) or
- * PolicyLocal (setValue uses setLocal).
- *
- * A "clean" policy means that the property is always the same on every
- * client. This is achieved by calling send which actually changes
- * the value only when the message from the MessageServer is received.
- *
- * A "dirty" policy means that as soon as setValue is called the
- * property is changed immediately. And additionally sent over network.
- * This can sometimes lead to bugs as the other clients do not
- * immediately have the same value. For more information see
- * changeValue.
- *
- * PolicyLocal means that a KGameProperty behaves like ever
- * "normal" variable. Whenever setValue is called (e.g. using "=")
- * the value of the property is changes immediately without sending it
- * over network. You might want to use this if you are sure that all
- * clients set the property at the same time.
- **/
- enum PropertyPolicy
- {
- PolicyUndefined = 0,
- PolicyClean = 1,
- PolicyDirty = 2,
- PolicyLocal = 3
- };
-
-
- /**
- * Constructs a KGamePropertyBase object and calls registerData.
- * @param id The id of this property. MUST be UNITQUE! Used to send and
- * receive changes in the property of the playere automatically via
- * network.
- * @param owner The owner of the object. Must be a KGamePropertyHandler which manages
- * the changes made to this object, i.e. which will send the new data
- **/
- KGamePropertyBase(int id, KGamePropertyHandler* owner);
-
- KGamePropertyBase(int id, KGame* parent);
- KGamePropertyBase(int id, KPlayer* parent);
-
- /**
- * Creates a KGamePropertyBase object without an owner. Remember to call
- * registerData!
- **/
- KGamePropertyBase();
-
- virtual ~KGamePropertyBase();
-
- /**
- * Changes the consistency policy of a property. The
- * PropertyPolicy is one of PolicyClean (defaulz), PolicyDirty or PolicyLocal.
- *
- * It is up to you to decide how you want to work.
- **/
- void setPolicy(PropertyPolicy p) { mFlags.bits.policy = p; }
-
- /**
- * @return The default policy of the property
- **/
- PropertyPolicy policy() const { return (PropertyPolicy)mFlags.bits.policy; }
-
- /**
- * Sets this property to emit a signal on value changed.
- * As the proerties do not inehrit TQObject for optimisation
- * this signal is emited via the KPlayer or KGame object
- **/
- void setEmittingSignal(bool p) { mFlags.bits.emitsignal=p; }
-
- /**
- * See also setEmittingSignal
- * @return Whether this property emits a signal on value change
- **/
- bool isEmittingSignal() const { return mFlags.bits.emitsignal; }
-
- /**
- * Sets this property to try to optimize signal and network handling
- * by not sending it out when the property value is not changed.
- **/
- void setOptimized(bool p) { mFlags.bits.optimize = p ; }
-
- /**
- * See also setOptimize
- * @return Whether the property optimizes access (signals,network traffic)
- **/
- bool isOptimized() const { return mFlags.bits.optimize; }
-
- /**
- * @return Whether this property is "dirty". See also setDirty
- **/
- bool isDirty() const { return mFlags.bits.dirty; }
-
- /**
- * A locked property can only be changed by the player who has set the
- * lock. See also setLocked
- * @return Whether this property is currently locked.
- **/
- bool isLocked() const { return mFlags.bits.locked; }
-
- /**
- * A locked property can only be changed by the player who has set the
- * lock.
- *
- * You can only call this if isLocked is false. A message is sent
- * over network so that the property is locked for all players except
- * you.
- *
- * @return returns false if the property can not be locked, i.e. it is already locked
- *
- **/
- bool lock();
-
- /**
- * A locked property can only be changed by the player who has set the
- * lock.
- *
- * You can only call this if isLocked is false. A message is sent
- * over network so that the property is locked for all players except
- * you.
- *
- * @return returns false if the property can not be locked, i.e. it is already locked
- *
- **/
- bool unlock(bool force=false);
-
- /**
- * This will read the value of this property from the stream. You MUST
- * overwrite this method in order to use this class
- * @param s The stream to read from
- **/
- virtual void load(TQDataStream& s) = 0;
-
- /**
- * Write the value into a stream. MUST be overwritten
- **/
- virtual void save(TQDataStream& s) = 0;
-
- /**
- * send a command to advanced properties like arrays
- * @param stream The stream containing the data of the comand
- * @param msgid The ID of the command - see PropertyCommandIds
- * @param isSender whether this client is also the sender of the command
- **/
- virtual void command(TQDataStream &stream, int msgid, bool isSender=false);
-
- /**
- * @return The id of this property
- **/
- int id() const { return mId; }
-
- /**
- * @return a type_info of the data this property contains. This is used
- * e.g. by KGameDebugDialog
- **/
- virtual const type_info* typeinfo() { return &typeid(this); }
-
- /**
- * You have to register a KGamePropertyBase before you can use it.
- *
- * You MUST call this before you can use KGamePropertyBase!
- *
- * @param id the id of this KGamePropertyBase object. The id MUST be
- * unique, i.e. you cannot have two properties with the same id for one
- * player, although (currently) nothing prevents you from doing so. But
- * you will get strange results!
- *
- * @param owner The owner of this data. This will send the data
- * using KPropertyHandler::sendProperty whenever you call send
- *
- * @param p If not 0 you can set the policy of the property here
- *
- * @param name if not 0 you can assign a name to this property
- *
- **/
- int registerData(int id, KGamePropertyHandler* owner,PropertyPolicy p, TQString name=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- * It differs from the above function only in what argument(s) it accepts.
- **/
- int registerData(int id, KGamePropertyHandler* owner, TQString name=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- * It differs from the above function only in what argument(s) it accepts.
- **/
- int registerData(int id, KGame* owner, TQString name=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- * It differs from the above function only in what argument(s) it accepts.
- **/
- int registerData(int id, KPlayer* owner, TQString name=0);
-
- /**
- * This is an overloaded member function, provided for convenience.
- * It differs from the above function only in what argument(s) it accepts.
- * In particular you can use this function to create properties which
- * will have an automatic id assigned. The new id is returned.
- **/
- int registerData(KGamePropertyHandler* owner,PropertyPolicy p=PolicyUndefined, TQString name=0);
-
- void unregisterData();
-
-
-protected:
- /**
- * A locked property can only be changed by the player who has set the
- * lock.
- *
- * You can only call this if isLocked is false. A message is sent
- * over network so that the property is locked for all players except
- * you.
- * Usually you use lock and unlock to access this property
- *
- **/
- void setLock(bool l);
-
- /**
- * Sets the "dirty" flag of the property. If a property is "dirty" i.e.
- * KGameProperty::setLocal has been called there is no guarantee
- * that all clients share the same value. You have to ensure this
- * yourself e.g. by calling KGameProperty::setLocal on every
- * client. You can also ignore the dirty flag and continue working withe
- * the property depending on your situation.
- **/
- void setDirty(bool d) { mFlags.bits.dirty = d ; }
-
- /**
- * Forward the data to the owner of this property which then sends it
- * over network. save is used to store the data into a stream so
- * you have to make sure that function is working properly if you
- * implement your own property!
- *
- * Note: this sends the <em>current</em> property!
- *
- * Might be obsolete - KGamePropertyArray still uses it. Is this a bug
- * or correct?
- **/
- bool sendProperty();
-
- /**
- * Forward the data to the owner of this property which then sends it
- * over network. save is used to store the data into a stream so
- * you have to make sure that function is working properly if you
- * implement your own property!
- *
- * This function is used by send to send the data over network.
- * This does <em>not</em> send the current value but the explicitly
- * given value.
- *
- * @return TRUE if the message could be sent successfully, otherwise
- * FALSE
- **/
- bool sendProperty(const TQByteArray& b);
-
- /**
- * Causes the parent object to emit a signal on value change
- **/
- void emitSignal();
-
-protected:
- KGamePropertyHandler* mOwner;
-
- // Having this as a union of the bitfield and the char
- // allows us to stream this quantity easily (if we need to)
- // At the moment it is not yet transmitted
- union Flags {
- char flag;
- struct {
- // unsigned char dosave : 1; // do save this property
- // unsigned char delaytransmit : 1; // do not send immediately on
- // change but a KPlayer:TQTimer
- // sends it later on - fast
- // changing variables
- unsigned char emitsignal : 1; // KPlayer notifies on variable change (true)
- //unsigned char readonly : 1; // whether the property can be changed (false)
- unsigned char optimize : 1; // whether the property tries to optimize send/emit (false)
- unsigned char dirty: 1; // whether the property dirty (setLocal() was used)
- unsigned char policy : 2; // whether the property is always consistent (see PropertyPolicy)
- unsigned char locked: 1; // whether the property is locked (true)
- } bits;
- } mFlags;
-
-private:
- friend class KGamePropertyHandler;
- void init();
-
-private:
- int mId;
-
-};
-
-/**
- * @short A class for network transparent games
- *
- * Note: The entire API documentation is obsolete!
- *
- * The class KGameProperty can store any form of data and will transmit it via
- * network whenver you call send. This makes network transparent games
- * very easy. You first have to register the data to a KGamePropertyHandler
- * using KGamePropertyBase::registerData (which is called by the
- * constructor). For the KGamePropertyHandler you can use
- * KGame::dataHandler or KPlayer::dataHandler but you can also create your
- * own data handler.
- *
- * There are several concepts you can follow when writing network games. These
- * concepts differ completely from the way how data is transferred so you should
- * decide which one to use. You can also mix these concepts for a single
- * property but we do not recommend this. The concepts:
- * <ul>
- * <li> Always Consistent (clean)
- * <li> Not Always Consistent (dirty)
- * <li> A Mixture (very dirty)
- * </ul>
- * I repeat: we do <em>not</em> recommend the third option ("a mixture"). Unless
- * you have a good reason for this you will probably introduce some hard to find
- * (and to fix) bugs.
- *
- * @section Always consistent (clean):
- *
- * This "policy" is default. Whenever you create a KGameProperty it is always
- * consistent. This means that consistency is the most important thing for the
- * property. This is achieved by using send to change the value of the
- * property. send needs a running KMessageServer and therefore
- * <em>MUST</em> be plugged into a KGamePropertyHandler using either
- * registerData or the constructor. The parent of the dataHandler must be able
- * to send messages (see above: the message server must be running). If you use
- * send to change the value of a property you won't see the effect
- * immediately: The new value is first transferred to the message server which
- * queues the message. As soon as <em>all</em> messages in the message server
- * which are before the changed property have been transferred the message
- * server delivers the new value of the KGameProperty to all clients. A
- * TQTimer::singleShot is used to queue the messages inside the
- * KMessageServer.
- *
- * This means that if you do the following:
- * \code
- * KGamePropertyInt myProperty(id, dataHandler());
- * myProperty.initData(0);
- * myProperty = 10;
- * int value = myProperty.value();
- * \endcode
- * then "value" will be "0". initData is used to initialize the property
- * (e.g. when the KMessageServer is not yet running or can not yet be
- * reached). This is because "myProperty = 10" or "myProperty.send(10)" send a
- * message to the KMessageServer which uses TQTimer::singleShot to
- * queue the message. The game first has to go back into the event loop where
- * the message is received. The KGamePropertyHandler receives the new value
- * sets the property. So if you need the new value you need to store it in a
- * different variable (see setLocal which creates one for you until the
- * message is received). The KGamePropertyHandler emits a signal (unless
- * you called setEmitSignal with false) when the new value is received:
- * KGamePropertyHandler::signalPropertyChanged. You can use this to react
- * to a changed property.
- *
- * This may look quite confusing but it has a <em>big</em> advantage: all
- * KGameProperty objects are ensured to have the same value on all clients in
- * the game at every time. This way you will save you a lot of trouble as
- * debugging can be very difficult if the value of a property changes
- * immediately on client A but only after one or two additianal messages
- * (function calls, status changes, ...) on client B.
- *
- * The only disadvantage of this (clean) concept is that you cannot use a
- * changed variable immediately but have to wait for the KMessageServer to
- * change it. You probably want to use
- * KGamePropertyHandler::signalPropertyChanged for this.
- *
- * @section Not Always Consistent (dirty):
- *
- * There are a lot of people who don't want to use the (sometimes quite complex)
- * "clean" way. You can use setAlwaysConsistent to change the default
- * behaviour of the KGameProperty. If a property is not always consistent
- * it will use changeValue to send the property. changeValue also uses
- * send to send the new value over network but it also uses
- * setLocal to create a local copy of the property. This copy is created
- * dynamically and is deleted again as soon as the next message from the network
- * is received. To use the example above again:
- * \code
- * KGamePropertyInt myProperty(id, dataHandler());
- * myProperty.setAlwaysConsistent(false);
- * myProperty.initData(0);
- * myProperty = 10;
- * int value = myProperty.value();
- * \endcode
- * Now this example will "work" so value now is 10. Additionally the
- * KMessageServer receives a message from the local client (just as explained
- * above in "Always Consistent"). As soon as the message returns to the local
- * client again the local value is deleted, as the "network value" has the same
- * value as the local one. So you won't lose the ability to use the always
- * consistent "clean" value of the property if you use the "dirty" way. Just use
- * networkValue to access the value which is consistent among all clients.
- *
- * The advantage of this concept is clear: you can use a KGameProperty as
- * every other variable as the changes value takes immediate effect.
- * Additionally you can be sure that the value is transferred to all clients.
- * You will usually not experience serious bugs just because you use the "dirty"
- * way. Several events have to happen at once to get these "strange errors"
- * which result in inconsistent properties (like "game running" on client A but
- * "game ended/paused" on client B). But note that there is a very good reason
- * for the existence of these different concepts of KGameProperty. I have
- * myself experienced such a "strange error" and it took me several days to find
- * the reason until I could fix it. So I personally recommend the "clean" way.
- * On the other hand if you want to port a non-network game to a network game
- * you will probably start with "dirty" properties as it is you will not have to
- * change that much code...
- *
- * @section A Mixture (very dirty):
- *
- * You can also mix the concepts above. Note that we really don't recommend
- * this. With a mixture I mean something like this:
- * \code
- * KGamePropertyInt myProperty(id, dataHandler());
- * myProperty.setAlwaysConsistent(false);
- * myProperty.initData(0);
- * myProperty = 10;
- * myProperty.setAlwaysConsistent(true);
- * myProperty = 20;
- * \endcode
- * (totally senseless example, btw) I.e. I am speaking of mixing both concepts
- * for a single property. Things like
- * \code
- * KGamePropertyInt myProperty1(id1, dataHandler());
- * KGamePropertyInt myProperty2(id2, dataHandler());
- * myProperty1.initData(0);
- * myProperty2.initData(0);
- * myProperty1.setAlwaysConsistent(false);
- * myProperty2.setAlwaysConsistent(true);
- * myProperty1 = 10;
- * myProperty2 = 20;
- * \endcode
- * are ok. But mixing the concepts for a single property will make it nearly
- * impossible to you to debug your game.
- *
- * So the right thing to do(tm) is to decide in the constructor whether you want
- * a "clean" or "dirty" property.
- *
- * Even if you have decided for one of the concepts you still can manually
- * follow another concept than the "policy" of your property. So if you use an
- * always consistent KGameProperty you still can manually call
- * changeValue as if it was not always consistent. Note that although this is
- * also kind of a "mixture" as described above this is very useful sometimes. In
- * contrast to the "mixture" above you don't have the problem that you don't
- * exactly know which concept you are currently following because you used the
- * function of the other concept only once.
- *
- * @section Custom classes:
- *
- * If you want to use a custum class with KGameProperty you have to implement the
- * operators << and >> for TQDataStream:
- * \code
- * class Card
- * {
- * public:
- * int type;
- * int suite;
- * };
- * TQDataStream& operator<<(TQDataStream& stream, Card& card)
- * {
- * TQ_INT16 type = card.type;
- * TQ_INT16 suite = card.suite;
- * s << type;
- * s << suite;
- * return s;
- * }
- * TQDataStream& operator>>(TQDataStream& stream, Card& card)
- * {
- * TQ_INT16 type;
- * TQ_INT16 suite;
- * s >> type;
- * s >> suite;
- * card.type = (int)type;
- * card.suite = (int)suite;
- * return s;
- * }
- *
- * class Player : KPlayer
- * {
- * [...]
- * KGameProperty<Card> mCards;
- * };
- * \endcode
- *
- * Note: unlike most QT classes KGameProperty objects are *not* deleted
- * automatically! So if you create an object using e.g. KGameProperty<int>* data =
- * new KGameProperty(id, dataHandler()) you have to put a delete data into your
- * destructor!
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-template<class type>
-class KGameProperty : public KGamePropertyBase
-{
-public:
- /**
- * Constructs a KGameProperty object. A KGameProperty object will transmit
- * any changes to the KMessageServer and then to all clients in the
- * game (including the one that has sent the new value)
- * @param id The id of this property. <em>MUST be UNITQUE</em>! Used to send and
- * receive changes in the property of the playere automatically via
- * network.
- * @param owner The parent of the object. Must be a KGame which manages
- * the changes made to this object, i.e. which will send the new data.
- * Note that in contrast to most KDE/QT classes KGameProperty objects
- * are <em>not</em> deleted automatically!
- **/
-// TODO: ID: Very ugly - better use something like parent()->propertyId() or so which assigns a free id automatically.
- KGameProperty(int id, KGamePropertyHandler* owner) : KGamePropertyBase(id, owner) { init(); }
-
- /**
- * This constructor does nothing. You have to call
- * KGamePropertyBase::registerData
- * yourself before using the KGameProperty object.
- **/
- KGameProperty() : KGamePropertyBase() { init(); }
-
- virtual ~KGameProperty() {}
-
- /**
- * Set the value depending on the current policy (see
- * setConsistent). By default KGameProperty just uses send to set
- * the value of a property. This behaviour can be changed by using
- * setConsistent.
- * @param v The new value of the property
- **/
- void setValue(type v)
- {
- switch (policy()) {
- case PolicyClean:
- send(v);
- break;
- case PolicyDirty:
- changeValue(v);
- break;
- case PolicyLocal:
- setLocal(v);
- break;
- default: // NEVER!
- kdError(11001) << "Undefined Policy in property " << id() << endl;
- return;
- }
- }
-
-
- /**
- * This function sends a new value over network.
- *
- * Note that the value DOES NOT change when you call this function. This
- * function saves the value into a TQDataStream and calls
- * sendProperty where it gets forwarded to the owner and finally the
- * value is sent over network. The KMessageServer now sends the
- * value to ALL clients - even the one who called this function. As soon
- * as the value from the message server is received load is called
- * and _then_ the value of the KGameProperty has been set.
- *
- * This ensures that a KGameProperty has _always_ the same value on
- * _every_ client in the network. Note that this means you can NOT do
- * something like
- * \code
- * myProperty.send(1);
- * doSomething(myProperty);
- * \endcode
- * as myProperty has not yet been set when doSomething is being called.
- *
- * You are informed about a value change by a singal from the parent of
- * the property which can be deactivated by setEmittingSignal because of
- * performance (you probably don't have to deactivate it - except you
- * want to write a real-time game like Command&Conquer with a lot of
- * acitvity). See emitSignal
- *
- * Note that if there is no KMessageServer accessible - before
- * the property has been registered to the KGamePropertyHandler (as
- * it is the case e.g. before a KPlayer has been plugged into the
- * KGame object) the property is *not* sent but set *locally* (see
- * setLocal)!
- *
- * @param v The new value of the property
- * @return whether the property could be sent successfully
- * @see setValue setLocal changeValue value
- **/
- bool send(type v)
- {
- if (isOptimized() && mData == v) {
- return true;
- }
- if (isLocked()) {
- return false;
- }
- TQByteArray b;
- TQDataStream stream(b, IO_WriteOnly);
- stream << v;
- if (!sendProperty(b)) {
- setLocal(v);
- return false;
- }
- return true;
- }
-
- /**
- * This function sets the value of the property directly, i.e. it
- * doesn't send it to the network.
- *
- * Int contrast to @see you change _only_ the local value when using
- * this function. You do _not_ change the value of any other client. You
- * probably don't want to use this if you are using a dedicated server
- * (which is the only "client" which is allowed to change a value) but
- * rather want to use send().
- *
- * But if you use your clients as servers (i.e. all clients receive a
- * players turn and then calculate the reaction of the game theirselves)
- * then you probably want to use setLocal as you can do things like
- * \code
- * myProperty.setLocal(1);
- * doSomething(myProperty);
- * \endcode
- * on every client.
- *
- * If you want to set the value locally AND send it over network you
- * want to call changeValue!
- *
- * You can also use setPolicy to set the default policy to
- * PolicyLocal.
- *
- * @see setValue send changeValue value
- **/
- bool setLocal(type v)
- {
- if (isOptimized() && mData == v) {
- return false;
- }
- if (isLocked()) {
- return false;
- }
- mData = v;
- setDirty(true);
- if (isEmittingSignal()) {
- emitSignal();
- }
- return true;
- }
-
- /**
- * This function does both, change the local value and change the
- * network value. The value is sent over network first, then changed
- * locally.
- *
- * This function is a convenience function and just calls send
- * followed by setLocal
- *
- * Note that emitSignal is also called twice: once after
- * setLocal and once when the value from send is received
- *
- * @see send setLocal setValue value
- **/
- void changeValue(type v)
- {
- send(v);
- setLocal(v);
- }
-
- /**
- * Saves the object to a stream.
- * @param stream The stream to save to
- **/
- virtual void save(TQDataStream &stream)
- {
- stream << mData;
- }
-
- /**
- * @return The local value (see setLocal) if it is existing,
- * otherwise the network value which is always consistent on every
- * client.
- **/
- const type& value() const
- {
- return mData;
- }
-
- /**
- * Reads from a stream and assigns the read value to this object.
- *
- * This function is called automatically when a new value is received
- * over network (i.e. it has been sent using send on this or any
- * other client) or when a game is loaded (and maybe on some other
- * events).
- *
- * Also calls emitSignal if isEmittingSignal is TRUE.
- * @param s The stream to read from
- **/
- virtual void load(TQDataStream& s)
- {
- s >> mData;
- setDirty(false);
- if (isEmittingSignal()) {
- emitSignal();
- }
- }
-
- /**
- * This calls setValue to change the value of the property. Note
- * that depending on the policy (see setAlwaysConsistent) the
- * returned value might be different from the assigned value!!
- *
- * So if you use setPolicy(PolicyClean):
- * \code
- * int a, b = 10;
- * myProperty = b;
- * a = myProperty.value();
- * \endcode
- * Here a and b would differ!
- * The value is actually set as soon as it is received from the
- * KMessageServer which forwards it to ALL clients in the network.
- *
- * If you use a clean policy (see setPolicy) then
- * the returned value is the assigned value
- **/
- const type& operator=(const type& t)
- {
- setValue(t);
- return value();
- }
-
- /**
- * This copies the data of property to the KGameProperty object.
- *
- * Equivalent to setValue(property.value());
- **/
- const type& operator=(const KGameProperty& property)
- {
- setValue(property.value());
- return value();
- }
-
- /**
- * Yeah, you can do it!
- * \code
- * int a = myGamePropertyInt;
- * \endcode
- * If you don't see it: you don't have to use integerData.value()
- **/
- operator type() const { return value(); }
-
- virtual const type_info* typeinfo() { return &typeid(type); }
-
-private:
- void init() { }
-
-private:
- type mData;
-};
-
-
-typedef KGameProperty<int> KGamePropertyInt;
-typedef KGameProperty<unsigned int> KGamePropertyUInt;
-typedef KGameProperty<TQString> KGamePropertyTQString;
-typedef KGameProperty<TQ_INT8> KGamePropertyBool;
-
-#endif
diff --git a/libkdegames/kgame/kgamepropertyarray.h b/libkdegames/kgame/kgamepropertyarray.h
deleted file mode 100644
index 0bb1d1a1..00000000
--- a/libkdegames/kgame/kgamepropertyarray.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEPROPERTYARRAY_H_
-#define __KGAMEPROPERTYARRAY_H_
-
-#include <tqdatastream.h>
-#include <kdebug.h>
-
-#include "kgamemessage.h"
-#include "kgameproperty.h"
-#include "kgamepropertyhandler.h"
-
-
-template<class type>
-class KGamePropertyArray : public TQMemArray<type>, public KGamePropertyBase
-{
-public:
- KGamePropertyArray() :TQMemArray<type>(), KGamePropertyBase()
- {
- //kdDebug(11001) << "KGamePropertyArray init" << endl;
- }
-
- KGamePropertyArray( int size )
- {
- resize(size);
- }
-
- KGamePropertyArray( const KGamePropertyArray<type> &a ) : TQMemArray<type>(a)
- {
- }
-
- bool resize( uint size )
- {
- if (size!=TQMemArray<type>::size())
- {
- bool a=true;
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdResize);
- s << size ;
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- if (mOwner)
- {
- mOwner->sendProperty(s);
- }
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- extractProperty(b);
-// a=TQMemArray<type>::resize(size);// FIXME: return value!
- }
- return a;
- }
- else return true;
- }
-
- void setAt(uint i,type data)
- {
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdAt);
- s << i ;
- s << data;
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- if (mOwner)
- {
- mOwner->sendProperty(s);
- }
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- extractProperty(b);
- }
- //kdDebug(11001) << "KGamePropertyArray setAt send COMMAND for id="<<id() << " type=" << 1 << " at(" << i<<")="<<data << endl;
- }
-
- type at( uint i ) const
- {
- return TQMemArray<type>::at(i);
- }
-
- type operator[]( int i ) const
- {
- return TQMemArray<type>::at(i);
- }
-
- KGamePropertyArray<type> &operator=(const KGamePropertyArray<type> &a)
- {
- return assign(a);
- }
-
- bool truncate( uint pos )
- {
- return resize(pos);
- }
-
- bool fill( const type &data, int size = -1 )
- {
- bool r=true;
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdFill);
- s << data;
- s << size ;
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- if (mOwner)
- {
- mOwner->sendProperty(s);
- }
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- extractProperty(b);
-// r=TQMemArray<type>::fill(data,size);//FIXME: return value!
- }
- return r;
- }
-
- KGamePropertyArray<type>& assign( const KGamePropertyArray<type>& a )
- {
-// note: send() has been replaced by sendProperty so it might be broken now!
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- sendProperty();
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- TQMemArray<type>::assign(a);
- }
- return *this;
- }
- KGamePropertyArray<type>& assign( const type *a, uint n )
- {
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- sendProperty();
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- TQMemArray<type>::assign(a,n);
- }
- return *this;
- }
- KGamePropertyArray<type>& duplicate( const KGamePropertyArray<type>& a )
- {
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- sendProperty();
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- TQMemArray<type>::duplicate(a);
- }
- return *this;
- }
- KGamePropertyArray<type>& duplicate( const type *a, uint n )
- {
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- sendProperty();
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- TQMemArray<type>::duplicate(a,n);
- }
- return *this;
- }
- KGamePropertyArray<type>& setRawData( const type *a, uint n )
- {
- if (policy()==PolicyClean || policy()==PolicyDirty)
- {
- sendProperty();
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- TQMemArray<type>::setRawData(a,n);
- }
- return *this;
- }
- void sort()
- {
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdSort);
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- if (mOwner)
- {
- mOwner->sendProperty(s);
- }
- }
- if (policy()==PolicyLocal || policy()==PolicyDirty)
- {
- extractProperty(b);
- }
- }
-
- void load(TQDataStream& s)
- {
- //kdDebug(11001) << "KGamePropertyArray load " << id() << endl;
- type data;
- for (unsigned int i=0; i<TQMemArray<type>::size(); i++)
- {
- s >> data;
- TQMemArray<type>::at(i)=data;
- }
- if (isEmittingSignal())
- {
- emitSignal();
- }
- }
- void save(TQDataStream &s)
- {
- //kdDebug(11001) << "KGamePropertyArray save "<<id() << endl;
- for (unsigned int i=0; i<TQMemArray<type>::size(); i++)
- {
- s << at(i);
- }
- }
-
- void command(TQDataStream &s,int cmd,bool)
- {
- KGamePropertyBase::command(s, cmd);
- //kdDebug(11001) << "Array id="<<id()<<" got command ("<<cmd<<") !!!" <<endl;
- switch(cmd)
- {
- case CmdAt:
- {
- uint i;
- type data;
- s >> i >> data;
- TQMemArray<type>::at(i)=data;
- //kdDebug(11001) << "CmdAt:id="<<id()<<" i="<<i<<" data="<<data <<endl;
- if (isEmittingSignal())
- {
- emitSignal();
- }
- break;
- }
- case CmdResize:
- {
- uint size;
- s >> size;
- //kdDebug(11001) << "CmdResize:id="<<id()<<" oldsize="<<TQMemArray<type>::size()<<" newsize="<<size <<endl;
- if (TQMemArray<type>::size() != size)
- {
- TQMemArray<type>::resize(size);
- }
- break;
- }
- case CmdFill:
- {
- int size;
- type data;
- s >> data >> size;
- //kdDebug(11001) << "CmdFill:id="<<id()<<"size="<<size <<endl;
- TQMemArray<type>::fill(data,size);
- if (isEmittingSignal())
- {
- emitSignal();
- }
- break;
- }
- case CmdSort:
- {
- //kdDebug(11001) << "CmdSort:id="<<id()<<endl;
- TQMemArray<type>::sort();
- break;
- }
- default:
- kdError(11001) << "Error in KPropertyArray::command: Unknown command " << cmd << endl;
- break;
- }
- }
-protected:
- void extractProperty(const TQByteArray& b)
- {
- TQDataStream s(b, IO_ReadOnly);
- int cmd;
- int propId;
- KGameMessage::extractPropertyHeader(s, propId);
- KGameMessage::extractPropertyCommand(s, propId, cmd);
- command(s, cmd, true);
- }
-
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamepropertyhandler.cpp b/libkdegames/kgame/kgamepropertyhandler.cpp
deleted file mode 100644
index 405d433e..00000000
--- a/libkdegames/kgame/kgamepropertyhandler.cpp
+++ /dev/null
@@ -1,407 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgamepropertyhandler.h"
-#include "kgameproperty.h"
-#include "kgamemessage.h"
-
-#include <tqmap.h>
-#include <tqptrqueue.h>
-
-#include <klocale.h>
-#include <typeinfo>
-
-#define KPLAYERHANDLER_LOAD_COOKIE 6239
-
-//---------------------- KGamePropertyHandler -----------------------------------
-class KGamePropertyHandlerPrivate
-{
-public:
- KGamePropertyHandlerPrivate()
- {
- }
-
- TQMap<int, TQString> mNameMap;
- TQIntDict<KGamePropertyBase> mIdDict;
- int mUniqueId;
- int mId;
- KGamePropertyBase::PropertyPolicy mDefaultPolicy;
- bool mDefaultUserspace;
- int mIndirectEmit;
- TQPtrQueue<KGamePropertyBase> mSignalQueue;
-};
-
-KGamePropertyHandler::KGamePropertyHandler(int id, const TQObject* receiver, const char * sendf, const char *emitf, TQObject* parent) : TQObject(parent)
-{
- init();
- registerHandler(id,receiver,sendf,emitf);
-}
-
-KGamePropertyHandler::KGamePropertyHandler(TQObject* parent) : TQObject(parent)
-{
- init();
-}
-
-KGamePropertyHandler::~KGamePropertyHandler()
-{
- clear();
- delete d;
-}
-
-void KGamePropertyHandler::init()
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this << endl;
- d = new KGamePropertyHandlerPrivate; // for future use - is BC important to us?
- d->mId = 0;
- d->mUniqueId=KGamePropertyBase::IdAutomatic;
- d->mDefaultPolicy=KGamePropertyBase::PolicyLocal;
- d->mDefaultUserspace=true;
- d->mIndirectEmit=0;
-}
-
-
-int KGamePropertyHandler::id() const
-{
- return d->mId;
-}
-
-void KGamePropertyHandler::setId(int id)
-{
- d->mId = id;
-}
-
-void KGamePropertyHandler::registerHandler(int id,const TQObject * receiver, const char * sendf, const char *emitf)
-{
- setId(id);
- if (receiver && sendf) {
- kdDebug(11001) << "Connecting TQT_SLOT " << sendf << endl;
- connect(this, TQT_SIGNAL(signalSendMessage(int, TQDataStream &, bool*)), receiver, sendf);
- }
- if (receiver && emitf) {
- kdDebug(11001) << "Connecting TQT_SLOT " << emitf << endl;
- connect(this, TQT_SIGNAL(signalPropertyChanged(KGamePropertyBase *)), receiver, emitf);
- }
-}
-
-bool KGamePropertyHandler::processMessage(TQDataStream &stream, int id, bool isSender)
-{
-// kdDebug(11001) << k_funcinfo << ": id=" << id << " mId=" << d->mId << endl;
- if (id != d->mId) {
- return false; // Is the message meant for us?
- }
- KGamePropertyBase* p;
- int propertyId;
- KGameMessage::extractPropertyHeader(stream, propertyId);
-// kdDebug(11001) << k_funcinfo << ": Got property " << propertyId << endl;
- if (propertyId==KGamePropertyBase::IdCommand) {
- int cmd;
- KGameMessage::extractPropertyCommand(stream, propertyId, cmd);
-//kdDebug(11001) << k_funcinfo << ": Got COMMAND for id= "<<propertyId <<endl;
- p = d->mIdDict.find(propertyId);
- if (p) {
- if (!isSender || p->policy()==KGamePropertyBase::PolicyClean) {
- p->command(stream, cmd, isSender);
- }
- } else {
- kdError(11001) << k_funcinfo << ": (cmd): property " << propertyId << " not found" << endl;
- }
- return true;
- }
- p = d->mIdDict.find(propertyId);
- if (p) {
- //kdDebug(11001) << k_funcinfo << ": Loading " << propertyId << endl;
- if (!isSender || p->policy()==KGamePropertyBase::PolicyClean) {
- p->load(stream);
- }
- } else {
- kdError(11001) << k_funcinfo << ": property " << propertyId << " not found" << endl;
- }
- return true;
-}
-
-bool KGamePropertyHandler::removeProperty(KGamePropertyBase* data)
-{
- if (!data) {
- return false;
- }
- d->mNameMap.erase(data->id());
- return d->mIdDict.remove(data->id());
-}
-
-bool KGamePropertyHandler::addProperty(KGamePropertyBase* data, TQString name)
-{
- //kdDebug(11001) << k_funcinfo << ": " << data->id() << endl;
- if (d->mIdDict.find(data->id())) {
- // this id already exists
- kdError(11001) << " -> cannot add property " << data->id() << endl;
- return false;
- } else {
- d->mIdDict.insert(data->id(), data);
- // if here is a check for "is_debug" or so we can add the strings only in debug mode
- // and save memory!!
- if (!name.isNull()) {
- d->mNameMap[data->id()] = name;
- //kdDebug(11001) << k_funcinfo << ": nid="<< (data->id()) << " inserted in Map name=" << d->mNameMap[data->id()] <<endl;
- //kdDebug(11001) << "Typeid=" << typeid(data).name() << endl;
- //kdDebug(11001) << "Typeid call=" << data->typeinfo()->name() << endl;
- }
- }
- return true;
-}
-
-TQString KGamePropertyHandler::propertyName(int id) const
-{
- TQString s;
- if (d->mIdDict.find(id)) {
- if (d->mNameMap.contains(id)) {
- s = i18n("%1 (%2)").tqarg(d->mNameMap[id]).tqarg(id);
- } else {
- s = i18n("Unnamed - ID: %1").tqarg(id);
- }
- } else {
- // Should _never_ happen
- s = i18n("%1 unregistered").tqarg(id);
- }
- return s;
-}
-
-bool KGamePropertyHandler::load(TQDataStream &stream)
-{
- // Prevent direct emmiting until all is loaded
- lockDirectEmit();
- uint count,i;
- stream >> count;
- kdDebug(11001) << k_funcinfo << ": " << count << " KGameProperty objects " << endl;
- for (i = 0; i < count; i++) {
- processMessage(stream, id(),false);
- }
- TQ_INT16 cookie;
- stream >> cookie;
- if (cookie == KPLAYERHANDLER_LOAD_COOKIE) {
- kdDebug(11001) << " KGamePropertyHandler loaded propertly"<<endl;
- } else {
- kdError(11001) << "KGamePropertyHandler loading error. probably format error"<<endl;
- }
- // Allow direct emmiting (if no other lock still holds)
- unlockDirectEmit();
- return true;
-}
-
-bool KGamePropertyHandler::save(TQDataStream &stream)
-{
- kdDebug(11001) << k_funcinfo << ": " << d->mIdDict.count() << " KGameProperty objects " << endl;
- stream << (uint)d->mIdDict.count();
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
- KGamePropertyBase *base=it.current();
- if (base) {
- KGameMessage::createPropertyHeader(stream, base->id());
- base->save(stream);
- }
- ++it;
- }
- stream << (TQ_INT16)KPLAYERHANDLER_LOAD_COOKIE;
- return true;
-}
-
-KGamePropertyBase::PropertyPolicy KGamePropertyHandler::policy()
-{
-// kdDebug(11001) << k_funcinfo << ": " << d->mDefaultPolicy << endl;
- return d->mDefaultPolicy;
-}
-void KGamePropertyHandler::setPolicy(KGamePropertyBase::PropertyPolicy p,bool userspace)
-{
- // kdDebug(11001) << k_funcinfo << ": " << p << endl;
- d->mDefaultPolicy=p;
- d->mDefaultUserspace=userspace;
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
- if (!userspace || it.current()->id()>=KGamePropertyBase::IdUser) {
- it.current()->setPolicy((KGamePropertyBase::PropertyPolicy)p);
- }
- ++it;
- }
-}
-
-void KGamePropertyHandler::unlockProperties()
-{
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
- it.current()->unlock();
- ++it;
- }
-}
-
-void KGamePropertyHandler::lockProperties()
-{
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
- it.current()->lock();
- ++it;
- }
-}
-
-int KGamePropertyHandler::uniquePropertyId()
-{
- return d->mUniqueId++;
-}
-
-void KGamePropertyHandler::flush()
-{
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
- if (it.current()->isDirty()) {
- it.current()->sendProperty();
- }
- ++it;
- }
-}
-
-/* Fire all property signal changed which are collected in
- * the queque
- **/
-void KGamePropertyHandler::lockDirectEmit()
-{
- d->mIndirectEmit++;
-}
-
-void KGamePropertyHandler::unlockDirectEmit()
-{
- // If the flag is <=0 we emit the queued signals
- d->mIndirectEmit--;
- if (d->mIndirectEmit<=0)
- {
- KGamePropertyBase *prop;
- while((prop=d->mSignalQueue.dequeue()) != 0)
- {
- // kdDebug(11001) << "emmiting signal for " << prop->id() << endl;
- emit signalPropertyChanged(prop);
- }
- }
-}
-
-void KGamePropertyHandler::emitSignal(KGamePropertyBase *prop)
-{
- // If the indirect flag is set (load and network transmit)
- // we cannot emit the signals directly as it can happend that
- // a sigal causes an access to a property which is e.g. not
- // yet loaded or received
-
- if (d->mIndirectEmit>0)
- {
- // Queque the signal
- d->mSignalQueue.enqueue(prop);
- }
- else
- {
- // directly emit
- emit signalPropertyChanged(prop);
- }
-}
-
-bool KGamePropertyHandler::sendProperty(TQDataStream &s)
-{
- bool sent = false;
- emit signalSendMessage(id(), s, &sent);
- return sent;
-}
-
-KGamePropertyBase *KGamePropertyHandler::find(int id)
-{
- return d->mIdDict.find(id);
-}
-
-void KGamePropertyHandler::clear()
-{
- kdDebug(11001) << k_funcinfo << id() << endl;
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.toFirst()) {
- KGamePropertyBase* p = it.toFirst();
- p->unregisterData();
- if (d->mIdDict.find(p->id())) {
- // shouldn't happen - but if mOwner in KGamePropertyBase is NULL
- // this might be possible
- removeProperty(p);
- }
- }
-}
-
-TQIntDict<KGamePropertyBase>& KGamePropertyHandler::dict() const
-{
- return d->mIdDict;
-}
-
-TQString KGamePropertyHandler::propertyValue(KGamePropertyBase* prop)
-{
- if (!prop) {
- return i18n("NULL pointer");
- }
-
- int id = prop->id();
- TQString name = propertyName(id);
- TQString value;
-
- const type_info* t = prop->typeinfo();
- if (*t == typeid(int)) {
- value = TQString::number(((KGamePropertyInt*)prop)->value());
- } else if (*t == typeid(unsigned int)) {
- value = TQString::number(((KGamePropertyUInt *)prop)->value());
- } else if (*t == typeid(long int)) {
- value = TQString::number(((KGameProperty<long int> *)prop)->value());
- } else if (*t == typeid(unsigned long int)) {
- value = TQString::number(((KGameProperty<unsigned long int> *)prop)->value());
- } else if (*t == typeid(TQString)) {
- value = ((KGamePropertyTQString*)prop)->value();
- } else if (*t == typeid(TQ_INT8)) {
- value = ((KGamePropertyBool*)prop)->value() ? i18n("True") : i18n("False");
- } else {
- emit signalRequestValue(prop, value);
- }
-
- if (value.isNull()) {
- value = i18n("Unknown");
- }
- return value;
-}
-
-void KGamePropertyHandler::Debug()
-{
- kdDebug(11001) << "-----------------------------------------------------------" << endl;
- kdDebug(11001) << "KGamePropertyHandler:: Debug this=" << this << endl;
-
- kdDebug(11001) << " Registered properties: (Policy,Lock,Emit,Optimized, Dirty)" << endl;
- TQIntDictIterator<KGamePropertyBase> it(d->mIdDict);
- while (it.current()) {
- KGamePropertyBase *p=it.current();
- kdDebug(11001) << " "<< p->id() << ": p=" << p->policy()
- << " l="<<p->isLocked()
- << " e="<<p->isEmittingSignal()
- << " o=" << p->isOptimized()
- << " d="<<p->isDirty()
- << endl;
- ++it;
- }
- kdDebug(11001) << "-----------------------------------------------------------" << endl;
-}
-
-#include "kgamepropertyhandler.moc"
diff --git a/libkdegames/kgame/kgamepropertyhandler.h b/libkdegames/kgame/kgamepropertyhandler.h
deleted file mode 100644
index c2a3429f..00000000
--- a/libkdegames/kgame/kgamepropertyhandler.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEPROPERTYHANDLER_H_
-#define __KGAMEPROPERTYHANDLER_H_
-
-#include <tqobject.h>
-#include <tqintdict.h>
-
-#include "kgameproperty.h"
-#include <kdemacros.h>
-
-class TQDataStream;
-class KGame;
-class KPlayer;
-//class KGamePropertyBase;
-
-class KGamePropertyHandlerPrivate; // wow - what a name ;-)
-
-/**
- * @short A collection class for KGameProperty objects
- *
- * The KGamePropertyHandler class is some kind of a collection class for
- * KGameProperty. You usually don't have to create one yourself, as both
- * KPlayer and KGame provide a handler. In most cases you do not even have
- * to care about the KGamePropertHandler. KGame and KPlayer implement
- * all features of KGamePropertyHandler so you will rather use it there.
- *
- * You have to use the KGamePropertyHandler as parent for all KGameProperty
- * objects but you can also use KPlayer or KGame as parent - then
- * KPlayer::dataHandler or KGame::dataHandler will be used.
- *
- * Every KGamePropertyHandler must have - just like every KGameProperty -
- * a unique ID. This ID is provided either in the constructor or in
- * registerHandler. The ID is used to assign an incoming message (e.g. a changed
- * property) to the correct handler. Inside the handler the property ID is used
- * to change the correct property.
- *
- * The constructor or registerHandler takes 3 addittional arguments: a
- * receiver and two slots. The first slot is connected to
- * signalSendMessage, the second to signalPropertyChanged. You must provide
- * these in order to use the KGamePropertyHandler.
- *
- * The most important function of KGamePropertyHandler is processMessage
- * which assigns an incoming value to the correct property.
- *
- * A KGamePropertyHandler is also used - indirectly using emitSignal - to
- * emit a signal when the value of a property changes. This is done this way
- * because a KGameProperty does not inherit TQObject because of memory
- * advantages. Many games can have dozens or even hundreds of KGameProperty
- * objects so every additional variable in KGameProperty would be
- * multiplied.
- *
- **/
-class KDE_EXPORT KGamePropertyHandler : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * Construct an unregistered KGamePropertyHandler
- *
- * You have to call registerHandler before you can use this
- * handler!
- **/
- KGamePropertyHandler(TQObject* parent = 0);
-
- /**
- * Construct a registered handler.
- *
- * @see registerHandler
- **/
- KGamePropertyHandler(int id, const TQObject* receiver, const char* sendf, const char* emitf, TQObject* parent = 0);
- ~KGamePropertyHandler();
-
- /**
- * Register the handler with a parent. This is to use
- * if the constructor without arguments has been chosen.
- * Otherwise you need not call this.
- *
- * @param id The id of the message to listen for
- * @param receiver The object that will receive the signals of
- * KGamePropertyHandler
- * @param send A slot that is being connected to signalSendMessage
- * @param emit A slot that is being connected to signalPropertyChanged
- **/
- void registerHandler(int id, const TQObject *receiver, const char * send, const char *emit);
-
- /**
- * Main message process function. This has to be called by
- * the parent's message event handler. If the id of the message
- * agrees with the id of the handler, the message is extracted
- * and processed. Otherwise false is returned.
- * Example:
- * \code
- * if (mProperties.processMessage(stream,msgid,sender==gameId())) return ;
- * \endcode
- *
- * @param stream The data stream containing the message
- * @param id the message id of the message
- * @param isSender Whether the receiver is also the sender
- * @return true on message processed otherwise false
- **/
- bool processMessage(TQDataStream &stream, int id, bool isSender );
-
- /**
- * @return the id of the handler
- **/
- int id() const;
-
- /**
- * Adds a KGameProperty property to the handler
- * @param data the property
- * @param name A description of the property, which will be returned by
- * propertyName. This is used for debugging, e.g. in KGameDebugDialog
- * @return true on success
- **/
- bool addProperty(KGamePropertyBase *data, TQString name=0);
-
- /**
- * Removes a property from the handler
- * @param data the property
- * @return true on success
- **/
- bool removeProperty(KGamePropertyBase *data);
-
- /**
- * returns a unique property ID starting called usually with a base of
- * KGamePropertyBase::IdAutomatic. This is used internally by
- * the property base to assign automtic id's. Not much need to
- * call this yourself.
- **/
- int uniquePropertyId();
-
-
- /**
- * Loads properties from the datastream
- *
- * @param stream the datastream to load from
- * @return true on success otherwise false
- **/
- virtual bool load(TQDataStream &stream);
-
- /**
- * Saves properties into the datastream
- *
- * @param stream the datastream to save to
- * @return true on success otherwise false
- **/
- virtual bool save(TQDataStream &stream);
-
- /**
- * called by a property to send itself into the
- * datastream. This call is simply forwarded to
- * the parent object
- **/
- bool sendProperty(TQDataStream &s);
-
- void sendLocked(bool l);
-
- /**
- * called by a property to emit a signal
- * This call is simply forwarded to
- * the parent object
- **/
- void emitSignal(KGamePropertyBase *data);
-
- /**
- * @param id The ID of the property
- * @return A name of the property which can be used for debugging. Don't
- * depend on this function! It it possible not to provide a name or to
- * provide the same name for multiple properties!
- **/
- TQString propertyName(int id) const;
-
- /**
- * @param id The ID of the property. See KGamePropertyBase::id
- * @return The KGameProperty this ID is assigned to
- **/
- KGamePropertyBase *find(int id);
-
- /**
- * Clear the KGamePropertyHandler. Note that the properties are
- * <em>not</em> deleted so if you created your KGameProperty
- * objects dynamically like
- * \code
- * KGamePropertyInt* myProperty = new KGamePropertyInt(id, dataHandler());
- * \endcode
- * you also have to delete it:
- * \code
- * dataHandler()->clear();
- * delete myProperty;
- * \endcode
- **/
- void clear();
-
- /**
- * Use id as new ID for this KGamePropertyHandler. This is used
- * internally only.
- **/
- void setId(int id);//AB: TODO: make this protected in KGamePropertyHandler!!
-
- /**
- * Calls KGamePropertyBase::setReadOnly(false) for all properties of this
- * player. See also lockProperties
- **/
- void unlockProperties();
-
- /**
- * Set the policy for all kgame variables which are currently registerd in
- * the KGame proeprty handler. See KGamePropertyBase::setPolicy
- *
- * @param p is the new policy for all properties of this handler
- * @param userspace if userspace is true (default) only user properties are changed.
- * Otherwise the system properties are also changed.
- **/
- void setPolicy(KGamePropertyBase::PropertyPolicy p, bool userspace=true);
-
- /**
- * Called by the KGame or KPlayer object or the handler itself to delay
- * emmiting of signals. Lockign keeps a counter and unlock is only achieved
- * when every lock is canceld by an unlock.
- * While this is set signals are quequed and only emmited after this
- * is reset. Its deeper meaning is to prevent inconsistencies in a game
- * load or network transfer where a emit could access a property not
- * yet loaded or transmitted. Calling this by yourself you better know
- * what your are doing.
- **/
- void lockDirectEmit();
-
- /**
- * Removes the lock from the emitting of property signals. Corresponds to
- * the lockIndirectEmits
- **/
- void unlockDirectEmit();
-
- /**
- * Returns the default policy for this property handler. All properties
- * registered newly, will have this property.
- **/
- KGamePropertyBase::PropertyPolicy policy();
-
- /**
- * Calls KGamePropertyBase::setReadOnly(true) for all properties of this
- * handler
- *
- * Use with care! This will even lock the core properties, like name,
- * group and myTurn!!
- *
- * @see unlockProperties
- **/
- void lockProperties();
-
- /**
- * Sends all properties which are marked dirty over the network. This will
- * make a forced synchornisation of the properties and mark them all not dirty.
- **/
- void flush();
-
- /**
- * Reference to the internal dictionary
- **/
- TQIntDict<KGamePropertyBase> &dict() const;
-
- /**
- * In several situations you just want to have a TQString of a
- * KGameProperty object. This is the case in the
- * KGameDebugDialog where the value of all properties is displayed. This
- * function will provide you with such a TQString for all the types
- * used inside of all KGame classes. If you have a non-standard
- * property (probably a self defined class or something like this) you
- * also need to connect to signalRequestValue to make this function
- * useful.
- * @param property Return the value of this KGameProperty
- * @return The value of a KGameProperty
- **/
- TQString propertyValue(KGamePropertyBase* property);
-
-
- /**
- * Writes some debug output to the console.
- **/
- void Debug();
-
-
-signals:
- /**
- * This is emitted by a property. KGamePropertyBase::emitSignal
- * calls emitSignal which emits this signal.
- *
- * This signal is emitted whenever the property is changed. Note that
- * you can switch off this behaviour using
- * KGamePropertyBase::setEmittingSignal in favor of performance. Note
- * that you won't experience any performance loss using signals unless
- * you use dozens or hundreds of properties which change very often.
- **/
- void signalPropertyChanged(KGamePropertyBase *);
-
- /**
- * This signal is emitted when a property needs to be sent. Only the
- * parent has to react to this.
- * @param msgid The id of the handler
- * @param sent set this to true if the property was sent successfully -
- * otherwise don't touch
- **/
- void signalSendMessage(int msgid, TQDataStream &, bool* sent); // AB shall we change bool* into bool& again?
-
- /**
- * If you call propertyValue with a non-standard KGameProperty
- * it is possible that the value cannot automatically be converted into a
- * TQString. Then this signal is emitted and asks you to provide the
- * correct value. You probably want to use something like this to achieve
- * this:
- * \code
- * #include <typeinfo>
- * void slotRequestValue(KGamePropertyBase* p, TQString& value)
- * {
- * if (*(p->typeinfo()) == typeid(MyType) {
- * value = TQString(((KGameProperty<MyType>*)p)->value());
- * }
- * }
- * \endcode
- *
- * @param property The KGamePropertyBase the value is requested for
- * @param value The value of this property. You have to set this.
- **/
- void signalRequestValue(KGamePropertyBase* property, TQString& value);
-
-private:
- void init();
-
-private:
- KGamePropertyHandlerPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamepropertylist.h b/libkdegames/kgame/kgamepropertylist.h
deleted file mode 100644
index df8eb604..00000000
--- a/libkdegames/kgame/kgamepropertylist.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMEPROPERTYLIST_H_
-#define __KGAMEPROPERTYLIST_H_
-
-#include <tqvaluelist.h>
-
-#include <kdebug.h>
-
-#include "kgamemessage.h"
-#include "kgameproperty.h"
-#include "kgamepropertyhandler.h"
-
-// AB: also see README.LIB!
-
-template<class type>
-class KGamePropertyList : public TQValueList<type>, public KGamePropertyBase
-{
-public:
- /**
- * Typedefs
- */
- typedef TQValueListIterator<type> Iterator;
- typedef TQValueListConstIterator<type> ConstIterator;
-
- KGamePropertyList() :TQValueList<type>(), KGamePropertyBase()
- {
- }
-
- KGamePropertyList( const KGamePropertyList<type> &a ) : TQValueList<type>(a)
- {
- }
-
- uint findIterator(Iterator me)
- {
- Iterator it;
- uint cnt=0;
- for( it = this->begin(); it != this->end(); ++it )
- {
- if (me==it)
- {
- return cnt;
- }
- cnt++;
- }
- return this->count();
- }
-
- Iterator insert( Iterator it, const type& d )
- {
- it=TQValueList<type>::insert(it,d);
-
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdInsert);
- int i=findIterator(it);
- s << i;
- s << d;
- if (policy() == PolicyClean || policy() == PolicyDirty)
- {
- if (mOwner)
- {
- mOwner->sendProperty(s);
- }
- }
- if (policy() == PolicyDirty || policy() == PolicyLocal)
- {
- extractProperty(b);
- }
- return it;
- }
-
- void prepend( const type& d) { insert(this->begin(),d); }
-
- void append( const type& d )
- {
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdAppend);
- s << d;
- if (policy() == PolicyClean || policy() == PolicyDirty)
- {
- if (mOwner)
- {
- mOwner->sendProperty(s);
- }
- }
- if (policy() == PolicyDirty || policy() == PolicyLocal)
- {
- extractProperty(b);
- }
- }
-
- Iterator erase( Iterator it )
- {
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdRemove);
- int i=findIterator(it);
- s << i;
- if (policy() == PolicyClean || policy() == PolicyDirty)
- {
- if (mOwner)
- {
- mOwner->sendProperty(s);
- }
- }
- if (policy() == PolicyDirty || policy() == PolicyLocal)
- {
- extractProperty(b);
- }
- //TODO: return value - is it correct for PolicyLocal|PolicyDirty?
-// return TQValueList<type>::remove(it);
- return it;
- }
-
- Iterator remove( Iterator it )
- {
- return erase(it);
- }
-
- void remove( const type& d )
- {
- Iterator it=find(d);
- remove(it);
- }
-
- void clear()
- {
- TQByteArray b;
- TQDataStream s(b, IO_WriteOnly);
- KGameMessage::createPropertyCommand(s,KGamePropertyBase::IdCommand,id(),CmdClear);
- if (policy() == PolicyClean || policy() == PolicyDirty)
- {
- if (mOwner)
- {
- mOwner->sendProperty(s);
- }
- }
- if (policy() == PolicyDirty || policy() == PolicyLocal)
- {
- extractProperty(b);
- }
- }
-
- void load(TQDataStream& s)
- {
- kdDebug(11001) << "KGamePropertyList load " << id() << endl;
- TQValueList<type>::clear();
- uint size;
- type data;
- s >> size;
-
- for (unsigned int i=0;i<size;i++)
- {
- s >> data;
- TQValueList<type>::append(data);
- }
- if (isEmittingSignal()) emitSignal();
- }
-
- void save(TQDataStream &s)
- {
- kdDebug(11001) << "KGamePropertyList save "<<id() << endl;
- type data;
- uint size=this->count();
- s << size;
- Iterator it;
- for( it = this->begin(); it != this->end(); ++it )
- {
- data=*it;
- s << data;
- }
- }
-
- void command(TQDataStream &s,int cmd,bool)
- {
- KGamePropertyBase::command(s, cmd);
- kdDebug(11001) << "---> LIST id="<<id()<<" got command ("<<cmd<<") !!!" <<endl;
- Iterator it;
- switch(cmd)
- {
- case CmdInsert:
- {
- uint i;
- type data;
- s >> i >> data;
- it=this->at(i);
- TQValueList<type>::insert(it,data);
-// kdDebug(11001) << "CmdInsert:id="<<id()<<" i="<<i<<" data="<<data <<endl;
- if (isEmittingSignal()) emitSignal();
- break;
- }
- case CmdAppend:
- {
- type data;
- s >> data;
- TQValueList<type>::append(data);
-// kdDebug(11001) << "CmdAppend:id=" << id() << " data=" << data << endl;
- if (isEmittingSignal()) emitSignal();
- break;
- }
- case CmdRemove:
- {
- uint i;
- s >> i;
- it=this->at(i);
- TQValueList<type>::remove(it);
- kdDebug(11001) << "CmdRemove:id="<<id()<<" i="<<i <<endl;
- if (isEmittingSignal()) emitSignal();
- break;
- }
- case CmdClear:
- {
- TQValueList<type>::clear();
- kdDebug(11001) << "CmdClear:id="<<id()<<endl;
- if (isEmittingSignal()) emitSignal();
- break;
- }
- default:
- kdDebug(11001) << "Error in KPropertyList::command: Unknown command " << cmd << endl;
- }
- }
-
-protected:
- void extractProperty(const TQByteArray& b)
- // this is called for Policy[Dirty|Local] after putting the stuff into the
- // stream
- {
- TQDataStream s(b, IO_ReadOnly);
- int cmd;
- int propId;
- KGameMessage::extractPropertyHeader(s, propId);
- KGameMessage::extractPropertyCommand(s, propId, cmd);
- command(s, cmd, true);
- }
-
-};
-
-#endif
diff --git a/libkdegames/kgame/kgamesequence.cpp b/libkdegames/kgame/kgamesequence.cpp
deleted file mode 100644
index 9391ee04..00000000
--- a/libkdegames/kgame/kgamesequence.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2003 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include "kgamesequence.h"
-#include "kgamesequence.moc"
-
-#include "kplayer.h"
-#include "kgame.h"
-
-KGameSequence::KGameSequence() : TQObject()
-{
- mGame = 0;
- mCurrentPlayer = 0;
-}
-
-KGameSequence::~KGameSequence()
-{
-}
-
-void KGameSequence::setGame(KGame* game)
-{
- mGame = game;
-}
-
-void KGameSequence::setCurrentPlayer(KPlayer* player)
-{
- mCurrentPlayer = player;
-}
-
-KPlayer *KGameSequence::nextPlayer(KPlayer *last,bool exclusive)
-{
- kdDebug(11001) << "=================== NEXT PLAYER =========================="<<endl;
- if (!game())
- {
- kdError() << k_funcinfo << "NULL game object" << endl;
- return 0;
- }
- unsigned int minId,nextId,lastId;
- KPlayer *nextplayer, *minplayer;
- if (last)
- {
- lastId = last->id();
- }
- else
- {
- lastId = 0;
- }
-
- kdDebug(11001) << "nextPlayer: lastId="<<lastId<<endl;
-
- // remove when this has been checked
- minId = 0x7fff; // we just need a very large number...properly MAX_UINT or so would be ok...
- nextId = minId;
- nextplayer = 0;
- minplayer = 0;
-
- KPlayer *player;
- for (player = game()->playerList()->first(); player != 0; player=game()->playerList()->next() )
- {
- // Find the first player for a cycle
- if (player->id() < minId)
- {
- minId=player->id();
- minplayer=player;
- }
- if (player==last)
- {
- continue;
- }
- // Find the next player which is bigger than the current one
- if (player->id() > lastId && player->id() < nextId)
- {
- nextId=player->id();
- nextplayer=player;
- }
- }
-
- // Cycle to the beginning
- if (!nextplayer)
- {
- nextplayer=minplayer;
- }
-
- kdDebug(11001) << k_funcinfo << " ##### lastId=" << lastId << " exclusive="
- << exclusive << " minId=" << minId << " nextid=" << nextId
- << " count=" << game()->playerList()->count() << endl;
- if (nextplayer)
- {
- nextplayer->setTurn(true,exclusive);
- }
- else
- {
- return 0;
- }
- return nextplayer;
-}
-
-// Per default we do not do anything
-int KGameSequence::checkGameOver(KPlayer*)
-{
- return 0;
-}
-/*
- * vim: et sw=2
- */
diff --git a/libkdegames/kgame/kgamesequence.h b/libkdegames/kgame/kgamesequence.h
deleted file mode 100644
index 8047c642..00000000
--- a/libkdegames/kgame/kgamesequence.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2003 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMESEQUENCE_H_
-#define __KGAMESEQUENCE_H_
-
-#include <tqobject.h>
-
-class KPlayer;
-class KGame;
-
-/**
- * This class takes care of round or move management as well of the gameover
- * condition. It is especially used for round based games. For these games @ref
- * nextPlayer and @ref checkGameOver are the most important methods.
- *
- * You can subclass KGameSequence and use @ref KGame::setGameSequence to use
- * your own rules. Note that @ref KGame will take ownership and therefore will
- * delete the object on destruction.
- * @short Round/move management class
- * @author Andreas Beckermann <b_mann@gmx.de>
- **/
-class KGameSequence : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameSequence();
- virtual ~KGameSequence();
-
- /**
- * Select the next player in a turn based game. In an asynchronous game this
- * function has no meaning. Overwrite this function for your own game sequence.
- * Per default it selects the next player in the playerList
- */
- virtual KPlayer* nextPlayer(KPlayer *last, bool exclusive = true);
-
- virtual void setCurrentPlayer(KPlayer* p);
-
- /**
- * @return The @ref KGame object this sequence is for, or NULL if none.
- **/
- KGame* game() const { return mGame; }
-
- KPlayer* currentPlayer() const { return mCurrentPlayer; }
-
- /**
- * Set the @ref KGame object for this sequence. This is called
- * automatically by @ref KGame::setGameSequence and you should not call
- * it.
- **/
- void setGame(KGame* game);
-
- /**
- * Check whether the game is over. The default implementation always
- * returns 0.
- *
- * @param player the player who made the last move
- * @return anything else but 0 is considered as game over
- **/
- virtual int checkGameOver(KPlayer *player);
-
-private:
- KGame* mGame;
- KPlayer* mCurrentPlayer;
-};
-
-#endif
-
diff --git a/libkdegames/kgame/kgameversion.h b/libkdegames/kgame/kgameversion.h
deleted file mode 100644
index c3147525..00000000
--- a/libkdegames/kgame/kgameversion.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2003 Andreas Beckermann (b_mann@gmx.de)
- Copyright (C) 2003 Martin Heni (martin@heni-online.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMEVERSION_H__
-#define __KGAMEVERSION_H__
-
-/**
- * In this file you find a couple of defines that indicate whether a specific
- * feature or function is present in this version of the KGame library.
- *
- * You don't need this for KDE CVS, but for games that live outside of KDE CVS
- * it may be very helpful and a lot easier than writing configure scripts for
- * this task.
- *
- * All defines are prefixed with KGAME_ to avoid conflicts.
- **/
-
-// KGame::savegame() didn't exist in KDE 3.0
-#define KGAME_HAVE_KGAME_SAVEGAME 1
-
-// KGameNetwork::port(), KMessageIO::peerPort() and friends were added in KDE 3.2
-#define KGAME_HAVE_KGAME_PORT 1
-
-// KGameNetwork::hostName(), KMessageIO::peerName() and friends were added in KDE 3.2
-#define KGAME_HAVE_KGAME_HOSTNAME 1
-
-// KGameSequence class was added in KDE 3.2
-#define KGAME_HAVE_KGAMESEQUENCE 1
-
-// KGame::addPlayer() needs to assign an ID to new players, otherwise network is
-// broken. this is done in KDE 3.2.
-#define KGAME_HAVE_FIXED_ADDPLAYER_ID 1
-
-#endif
-
diff --git a/libkdegames/kgame/kmessageclient.cpp b/libkdegames/kgame/kmessageclient.cpp
deleted file mode 100644
index 0233884a..00000000
--- a/libkdegames/kgame/kmessageclient.cpp
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <kdebug.h>
-#include <stdio.h>
-
-#include <tqbuffer.h>
-#include <tqtimer.h>
-
-#include "kmessageio.h"
-#include "kmessageserver.h"
-
-#include "kmessageclient.h"
-
-class KMessageClientPrivate
-{
-public:
- KMessageClientPrivate ()
- : adminID (0), connection (0)
- {}
-
- ~KMessageClientPrivate ()
- {
- delete connection;
- }
-
- TQ_UINT32 adminID;
- TQValueList <TQ_UINT32> clientList;
- KMessageIO *connection;
-
- bool isLocked;
- TQValueList <TQByteArray> delayedMessages;
-};
-
-KMessageClient::KMessageClient (TQObject *parent, const char *name)
- : TQObject (parent, name)
-{
- d = new KMessageClientPrivate ();
- d->isLocked = false;
-}
-
-KMessageClient::~KMessageClient ()
-{
- d->delayedMessages.clear();
- delete d;
-}
-
-// -- setServer stuff
-
-void KMessageClient::setServer (const TQString &host, TQ_UINT16 port)
-{
- setServer (new KMessageSocket (host, port));
-}
-
-void KMessageClient::setServer (KMessageServer *server)
-{
- KMessageDirect *serverIO = new KMessageDirect ();
- setServer (new KMessageDirect (serverIO));
- server->addClient (serverIO);
-}
-
-void KMessageClient::setServer (KMessageIO *connection)
-{
- if (d->connection)
- {
- delete d->connection;
- kdDebug (11001) << k_funcinfo << ": We are changing the server!" << endl;
- }
-
- d->connection = connection;
- if (connection )
- {
- connect (connection, TQT_SIGNAL (received(const TQByteArray &)),
- this, TQT_SLOT (processIncomingMessage(const TQByteArray &)));
- connect (connection, TQT_SIGNAL (connectionBroken()),
- this, TQT_SLOT (removeBrokenConnection ()));
- }
-}
-
-// -- id stuff
-
-TQ_UINT32 KMessageClient::id () const
-{
- return (d->connection) ? d->connection->id () : 0;
-}
-
-bool KMessageClient::isAdmin () const
-{
- return id() != 0 && id() == adminId();
-}
-
-TQ_UINT32 KMessageClient::adminId () const
-{
- return d->adminID;
-}
-
-const TQValueList <TQ_UINT32> &KMessageClient::clientList() const
-{
- return d->clientList;
-}
-
-bool KMessageClient::isConnected () const
-{
- return d->connection && d->connection->isConnected();
-}
-
-bool KMessageClient::isNetwork () const
-{
- return isConnected() ? d->connection->isNetwork() : false;
-}
-
-TQ_UINT16 KMessageClient::peerPort () const
-{
- return d->connection ? d->connection->peerPort() : 0;
-}
-
-TQString KMessageClient::peerName () const
-{
- return d->connection ? d->connection->peerName() : TQString::tqfromLatin1("localhost");
-}
-
-// --------------------- Sending messages
-
-void KMessageClient::sendServerMessage (const TQByteArray &msg)
-{
- if (!d->connection)
- {
- kdWarning (11001) << k_funcinfo << ": We have no connection yet!" << endl;
- return;
- }
- d->connection->send (msg);
-}
-
-void KMessageClient::sendBroadcast (const TQByteArray &msg)
-{
- TQByteArray sendBuffer;
- TQBuffer buffer (sendBuffer);
- buffer.open (IO_WriteOnly);
- TQDataStream stream (&buffer);
-
- stream << static_cast<TQ_UINT32> ( KMessageServer::RETQ_BROADCAST );
- TQT_TQIODEVICE(&buffer)->writeBlock (msg);
- sendServerMessage (sendBuffer);
-}
-
-void KMessageClient::sendForward (const TQByteArray &msg, const TQValueList <TQ_UINT32> &clients)
-{
- TQByteArray sendBuffer;
- TQBuffer buffer (sendBuffer);
- buffer.open (IO_WriteOnly);
- TQDataStream stream (&buffer);
-
- stream << static_cast<TQ_UINT32>( KMessageServer::RETQ_FORWARD ) << clients;
- TQT_TQIODEVICE(&buffer)->writeBlock (msg);
- sendServerMessage (sendBuffer);
-}
-
-void KMessageClient::sendForward (const TQByteArray &msg, TQ_UINT32 client)
-{
- sendForward (msg, TQValueList <TQ_UINT32> () << client);
-}
-
-
-// --------------------- Receiving and processing messages
-
-void KMessageClient::processIncomingMessage (const TQByteArray &msg)
-{
- if (d->isLocked)
- {
- d->delayedMessages.append(msg);
- return;
- }
- if (d->delayedMessages.count() > 0)
- {
- d->delayedMessages.append (msg);
- TQByteArray first = d->delayedMessages.front();
- d->delayedMessages.pop_front();
- processMessage (first);
- }
- else
- {
- processMessage(msg);
- }
-}
-
-void KMessageClient::processMessage (const TQByteArray &msg)
-{
- if (d->isLocked)
- { // must NOT happen, since we check in processIncomingMessage as well as in processFirstMessage
- d->delayedMessages.append(msg);
- return;
- }
- TQBuffer in_buffer (msg);
- in_buffer.open (IO_ReadOnly);
- TQDataStream in_stream (&in_buffer);
-
-
- bool unknown = false;
-
- TQ_UINT32 messageID;
- in_stream >> messageID;
- switch (messageID)
- {
- case KMessageServer::MSG_BROADCAST:
- {
- TQ_UINT32 clientID;
- in_stream >> clientID;
- emit broadcastReceived (in_buffer.readAll(), clientID);
- }
- break;
-
- case KMessageServer::MSG_FORWARD:
- {
- TQ_UINT32 clientID;
- TQValueList <TQ_UINT32> tqreceivers;
- in_stream >> clientID >> tqreceivers;
- emit forwardReceived (in_buffer.readAll(), clientID, tqreceivers);
- }
- break;
-
- case KMessageServer::ANS_CLIENT_ID:
- {
- bool old_admin = isAdmin();
- TQ_UINT32 clientID;
- in_stream >> clientID;
- d->connection->setId (clientID);
- if (old_admin != isAdmin())
- emit adminStatusChanged (isAdmin());
- }
- break;
-
- case KMessageServer::ANS_ADMIN_ID:
- {
- bool old_admin = isAdmin();
- in_stream >> d->adminID;
- if (old_admin != isAdmin())
- emit adminStatusChanged (isAdmin());
- }
- break;
-
- case KMessageServer::ANS_CLIENT_LIST:
- {
- in_stream >> d->clientList;
- }
- break;
-
- case KMessageServer::EVNT_CLIENT_CONNECTED:
- {
- TQ_UINT32 id;
- in_stream >> id;
-
- if (d->clientList.contains (id))
- kdWarning (11001) << k_funcinfo << ": Adding a client that already existed!" << endl;
- else
- d->clientList.append (id);
-
- emit eventClientConnected (id);
- }
- break;
-
- case KMessageServer::EVNT_CLIENT_DISCONNECTED:
- {
- TQ_UINT32 id;
- TQ_INT8 broken;
- in_stream >> id >> broken;
-
- if (!d->clientList.contains (id))
- kdWarning (11001) << k_funcinfo << ": Removing a client that doesn't exist!" << endl;
- else
- d->clientList.remove (id);
-
- emit eventClientDisconnected (id, bool (broken));
- }
- break;
-
- default:
- unknown = true;
- }
-
- if (!unknown && !in_buffer.atEnd())
- kdWarning (11001) << k_funcinfo << ": Extra data received for message ID " << messageID << endl;
-
- emit serverMessageReceived (msg, unknown);
-
- if (unknown)
- kdWarning (11001) << k_funcinfo << ": received unknown message ID " << messageID << endl;
-}
-
-void KMessageClient::processFirstMessage()
-{
- if (d->isLocked)
- {
- return;
- }
- if (d->delayedMessages.count() == 0)
- {
- kdDebug(11001) << k_funcinfo << ": no messages delayed" << endl;
- return;
- }
- TQByteArray first = d->delayedMessages.front();
- d->delayedMessages.pop_front();
- processMessage (first);
-}
-
-void KMessageClient::removeBrokenConnection ()
-{
- kdDebug (11001) << k_funcinfo << ": timer single shot for removeBrokenConnection"<<this << endl;
- // MH We cannot directly delete the socket. otherwise TQSocket crashes
- TQTimer::singleShot( 0, this, TQT_SLOT(removeBrokenConnection2()) );
- return;
-}
-
-
-void KMessageClient::removeBrokenConnection2 ()
-{
- kdDebug (11001) << k_funcinfo << ": Broken:Deleting the connection object"<<this << endl;
-
- emit aboutToDisconnect(id());
- delete d->connection;
- d->connection = 0;
- d->adminID = 0;
- emit connectionBroken();
- kdDebug (11001) << k_funcinfo << ": Broken:Deleting the connection object DONE" << endl;
-}
-
-void KMessageClient::disconnect ()
-{
- kdDebug (11001) << k_funcinfo << ": Disconnect:Deleting the connection object" << endl;
-
- emit aboutToDisconnect(id());
- delete d->connection;
- d->connection = 0;
- d->adminID = 0;
- emit connectionBroken();
- kdDebug (11001) << k_funcinfo << ": Disconnect:Deleting the connection object DONE" << endl;
-}
-
-void KMessageClient::lock ()
-{
- d->isLocked = true;
-}
-
-void KMessageClient::unlock ()
-{
- d->isLocked = false;
- for (unsigned int i = 0; i < d->delayedMessages.count(); i++)
- {
- TQTimer::singleShot(0, this, TQT_SLOT(processFirstMessage()));
- }
-}
-
-unsigned int KMessageClient::delayedMessageCount() const
-{
- return d->delayedMessages.count();
-}
-
-#include "kmessageclient.moc"
diff --git a/libkdegames/kgame/kmessageclient.h b/libkdegames/kgame/kmessageclient.h
deleted file mode 100644
index 8a35234d..00000000
--- a/libkdegames/kgame/kmessageclient.h
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KMESSAGECLIENT_H__
-#define __KMESSAGECLIENT_H__
-
-#include <tqobject.h>
-#include <tqstring.h>
-#include <tqvaluelist.h>
-
-class KMessageIO;
-class KMessageServer;
-class KMessageClientPrivate;
-
-/**
- @short A client to connect to a KMessageServer
-
- This class implements a client that can connect to a KMessageServer object.
- It can be used to exchange messages between clients.
-
- Usually you will connect the signals broadcastReceived and forwardReceived to
- some specific slots. In these slot methods you can analyse the messages that are
- sent to you from other clients.
-
- To send messages to other clients, use the methods sendBroadcast() (to send to all
- clients) or sendForward() (to send to a list of selected clients).
-
- If you want to communicate with the KMessageServer object directly (on a more low
- level base), use the method sendServerMessage to send a command to the server and
- connect to the signal serverMessageReceived to see all the incoming messages.
- In that case the messages must be of the format specified in KMessageServer.
- @author Burkhard Lehner <Burkhard.Lehner@gmx.de>
-*/
-class KMessageClient : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
-
- /**
- Constructor.
- Creates an unconnected KMessageClient object. Use setServer() later to connect to a
- KMessageServer object.
- */
- KMessageClient (TQObject *parent = 0, const char *name = 0);
-
- /**
- Destructor.
- Disconnects from the server, if any connection was established.
- */
- ~KMessageClient ();
-
- /**
- @return The client ID of this client. Every client that is connected to a KMessageServer
- has a unique ID number.
-
- NOTE: As long as the object is not yet connected to the server, and as long as the server
- hasn't sent the client ID, this method returns 0.
- */
- TQ_UINT32 id () const;
-
- /**
- @return Whether or not this client is the server admin.
- One of the clients connected to the server is the admin and can administrate the server
- (set maximum number of clients, remove clients, ...).
-
- If you use admin commands without being the admin, these commands are simply ignored by
- the server.
-
- NOTE: As long as you are not connected to a server, this method returns false.
- */
- bool isAdmin () const;
-
- /**
- @return The ID of the admin client on the message server.
- */
- TQ_UINT32 adminId() const;
-
- /**
- @return The list of the IDs of all the message clients connected to the message server.
- */
- const TQValueList <TQ_UINT32> &clientList() const;
-
- /**
- Connects the client to (another) server.
-
- Tries to connect via a TCP/IP socket to a KMessageServer object
- on the given host, listening on the specified port.
-
- If we were already connected, the old connection is closed.
- @param host The name of the host to connect to. Must be either a hostname which can
- be resolved to an IP or just an IP
- @param port The port to connect to
- */
- void setServer (const TQString &host, TQ_UINT16 port);
-
- /**
- Connects the client to (another) server.
-
- Connects to the given server, using KMessageDirect.
- (The server object has to be in the same process.)
-
- If we were already connected, the old connection is closed.
- @param server The KMessageServer to connect to
- */
- void setServer (KMessageServer *server);
-
- /**
- * Corresponds to setServer(0); but also emits the connectionBroken signal
- **/
- void disconnect();
-
- /**
- Connects the client to (another) server.
-
- To use this method, you have to create a KMessageIO object with new (indeed you must
- create an instance of a subclass of KMessageIO, e.g. KMessageSocket or KMessageDirect).
- This object must already be connected to the new server.
-
- Calling this method disconnects any earlier connection, and uses the new KMessageIO
- object instead. This object gets owned by the KMessageClient object, so don't delete
- or manipulate it afterwards.
-
- With this method it is possible to change the server on the fly. But be careful that
- there are no important messages from the old server not yet delivered.
-
- NOTE: It is very likely that we will have another client ID on the new server. The
- value returned by clientID may be a little outdated until the new server tells us
- our new ID.
-
- NOTE: The two other setServer methods are for convenience. If you use them, you don't
- have to create a KMessageIO object yourself.
- */
- virtual void setServer (KMessageIO *connection);
-
- /**
- @return True, if a connection to a KMessageServer has been started, and if the
- connection is ready for transferring data. (It will return false e.g. as long as
- a socket connection hasn't been established, and it will also return false after
- a socket connection is broken.)
- */
- bool isConnected () const;
-
- /**
- @return TRUE if isConnected() is true AND this is not a local (like
- KMessageDirect) connection.
- */
- bool isNetwork () const;
-
- /**
- @return 0 if isConnected() is FALSE, otherwise the port number this client is
- connected to. See also KMessageIO::peerPort and TQSocket::peerPort.
- @since 3.2
- */
- TQ_UINT16 peerPort () const;
-
- /**
- @since 3.2
- @return "localhost" if isConnected() is FALSE, otherwise the hostname this client is
- connected to. See also KMessageIO::peerName() and TQSocket::peerName().
- */
- TQString peerName() const;
-
- /**
- Sends a message to the KMessageServer. If we are not yet connected to one, nothing
- happens.
-
- Use this method to send a low level command to the server. It has to be in the
- format specified in KMessageServer.
-
- If you want to send messages to other clients, you should use sendBroadcast()
- and sendForward().
- @param msg The message to be sent to the server. Must be in the format specified in KMessageServer.
- */
- void sendServerMessage (const TQByteArray &msg);
-
- /**
- Sends a message to all the clients connected to the server, including ourself.
- The message consists of an arbitrary block of data with arbitrary length.
-
- All the clients will receive an exact copy of this block of data, which will be
- processed in their processBroadcast() method.
- @param msg The message to be sent to the clients
- */
- //AB: processBroadcast doesn't exist!! is processIncomingMessage meant?
- void sendBroadcast (const TQByteArray &msg);
-
- /**
- Sends a message to all the clients in a list.
- The message consists of an arbitrary block of data with arbitrary length.
-
- All clients will receive an exact copy of this block of data, which will be
- processed in their processForward() method.
-
- If the list contains client IDs that are not defined, they are ignored. If
- it contains an ID several times, that client will receive the message several
- times.
-
- To send a message to the admin of the KMessageServer, you can use 0 as clientID,
- instead of using the real client ID.
- @param msg The message to be sent to the clients
- @param clients A list of clients the message should be sent to
- */
- //AB: processForward doesn't exist!! is processIncomingMessage meant?
- void sendForward (const TQByteArray &msg, const TQValueList <TQ_UINT32> &clients);
-
- /**
- Sends a message to a single client. This is a convenieance method. It calls
- sendForward (const TQByteArray &msg, const TQValueList &ltTQ_UINT32> &clients)
- with a list containing only one client ID.
-
- To send a message to the admin of the KMessageServer, you can use 0 as clientID,
- instead of using the real client ID.
- @param msg The message to be sent to the client
- @param client The id of the client the message shall be sent to
- */
- void sendForward (const TQByteArray &msg, TQ_UINT32 client);
-
- /**
- Once this function is called no message will be received anymore.
- processIncomingMessage() gets delayed until unlock() is called.
-
- Note that all messages are still received, but their delivery (like
- broadcastReceived()) get delayed only.
- */
- void lock();
-
- /**
- Deliver every message that was delayed by lock() and actually deliver
- all messages that get received from now on.
- */
- void unlock();
-
- /**
- @return The number of messages that got delayed since lock() was called
- */
- unsigned int delayedMessageCount() const;
-
-signals:
- /**
- This signal is emitted when the client receives a broadcast message from the
- KMessageServer, sent by another client. Connect to this signal to analyse the
- received message and do the right reaction.
-
- senderID contains the ID of the client that sent the broadcast message. You can
- use this e.g. to send a reply message to only that client. Or you can use it
- to ignore broadcast messages that were sent by yourself:
-
- \code
- void myObject::myBroadcastSlot (const TQByteArray &msg, TQ_UINT32 senderID)
- {
- if (senderID == ((KMessageClient *)sender())->id())
- return;
- ...
- }
- \endcode
- @param msg The message that has been sent to us
- @param senderID The ID of the client which sent the message
- */
- void broadcastReceived (const TQByteArray &msg, TQ_UINT32 senderID);
-
- /**
- This signal is emitted when the client receives a forward message from the
- KMessageServer, sent by another client. Connect to this signal to analyse the
- received message and do the right reaction.
-
- senderID contains the ID of the client that sent the broadcast message. You can
- use this e.g. to send a reply message to only that client.
-
- tqreceivers contains the list of the clients that got the message. (If this list
- only contains one number, this will be your client ID, and it was exclusivly
- sent to you.)
-
- If you don't want to distinguish between broadcast and forward messages and
- treat them the same, you can connect forwardReceived signal to the
- broadcastReceived signal. (Yes, that's possible! You can connect a TQt signal to
- a TQt signal, and the second one can have less parameters.)
-
- \code
- KMessageClient *client = new KMessageClient ();
- connect (client, TQT_SIGNAL (forwardReceived (const TQByteArray &, TQ_UINT32, const TQValueList <TQ_UINT32>&)),
- client, TQT_SIGNAL (broadcastReceived (const TQByteArray &, TQ_UINT32)));
- \endcode
-
- Then connect the broadcast signal to your slot that analyzes the message.
- @param msg The message that has been sent to us
- @param senderID The ID of the client which sent the message
- @param tqreceivers All clients which receive this message
- */
- void forwardReceived (const TQByteArray &msg, TQ_UINT32 senderID, const TQValueList <TQ_UINT32> &tqreceivers);
-
- /**
- This signal is emitted when the connection to the KMessageServer is broken.
- Reasons for this can be: a network error, a server breakdown, or you were just kicked
- from the server.
-
- When this signal is sent, the connection is already lost and the client is unconnected.
- You can connect to another server by calling setServer() afterwards. But keep in mind that
- some important messages might have vanished.
- */
- void connectionBroken ();
-
- /**
- This signal is emitted right before the client disconnects. It can be used
- to this store the id of the client which is about to be lost.
- */
- void aboutToDisconnect(TQ_UINT32 id);
-
- /**
- This signal is emitted when this client becomes the admin client or when it loses
- the admin client status. Connect to this signal if you have to do any initialization
- or cleanup.
- @param isAdmin Whether we are now admin or not
- */
- void adminStatusChanged (bool isAdmin);
-
- /**
- This signal is emitted when another client has connected
- to the server. Connect to this method if that clients needs initialization.
- This should usually only be done in one client, e.g. the admin client.
- @param clientID The ID of the client that has newly connectd.
- */
- void eventClientConnected (TQ_UINT32 clientID);
-
- /**
- This signal is emitted when the server has lost the
- connection to one of the clients (This could be because of a bad internet connection
- or because the client disconnected on purpose).
- @param clientID The ID of the client that has disconnected
- @param broken true if it was disconnected because of a network error
- */
- void eventClientDisconnected (TQ_UINT32 clientID, bool broken);
-
- /**
- This signal is emitted on every message that came from the server. You can connect to this
- signal to see the messages directly. They are in the format specified in KMessageServer.
-
- @param msg The message that has been sent to us
- @param unknown True when KMessageClient didn't recognize the message, i.e. it contained an unknown
- message ID. If you want to add additional message types to the client, connect to this signal,
- and if unknown is true, analyse the message by yourself. If you recognized the message,
- set unknown to false (Otherwise a debug message will be printed).
- */
- //AB: maybe add a setNoEmit() so that the other signals can be deactivated?
- //Could be a performance benefit (note: KMessageClient is a time critical
- //class!!!)
- void serverMessageReceived (const TQByteArray &msg, bool &unknown);
-
-protected:
- /**
- This slot is called from processIncomingMessage or
- processFirstMessage, depending on whether the client is locked or a delayed
- message is still here (see lock)
-
- It processes the message and analyses it. If it is a broadcast or a forward message from
- another client, it emits the signal processBroadcast or processForward accordingly.
-
- If you want to treat additional server messages, you can overwrite this method. Don't
- forget to call processIncomingMessage of your superclass!
-
- At the moment, the following server messages are interpreted:
-
- MSG_BROADCAST, MSG_FORWARD, ANS_CLIENT_ID, ANS_ADMIN_ID, ANS_CLIENT_LIST
- @param msg The incoming message
- */
-
- virtual void processMessage (const TQByteArray& msg);
-
-protected slots:
- /**
- This slot is called from the signal KMessageIO::received whenever a message from the
- KMessageServer arrives.
-
- It processes the message and analyses it. If it is a broadcast or a forward message from
- another client, it emits the signal processBroadcast or processForward accordingly.
-
- If you want to treat additional server messages, you can overwrite this method. Don't
- forget to call processIncomingMessage() of your superclass!
-
- At the moment, the following server messages are interpreted:
-
- MSG_BROADCAST, MSG_FORWARD, ANS_CLIENT_ID, ANS_ADMIN_ID, ANS_CLIENT_LIST
- @param msg The incoming message
- */
- virtual void processIncomingMessage (const TQByteArray &msg);
-
- /**
- Called from unlock() (using TQTimer::singleShot) until all delayed
- messages are delivered.
- */
- void processFirstMessage();
-
- /**
- This slot is called from the signal KMessageIO::connectionBroken.
-
- It deletes the internal KMessageIO object, and resets the client to default
- values. To connect again to another server, use setServer.
- */
- virtual void removeBrokenConnection ();
- void removeBrokenConnection2 ();
-
-private:
- KMessageClientPrivate *d;
-};
-
-#endif
diff --git a/libkdegames/kgame/kmessageio.cpp b/libkdegames/kgame/kmessageio.cpp
deleted file mode 100644
index b35382b0..00000000
--- a/libkdegames/kgame/kmessageio.cpp
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-/*
- KMessageIO class and subclasses KMessageSocket and KMessageDirect
-*/
-
-#include "kmessageio.h"
-#include <tqsocket.h>
-#include <kdebug.h>
-#include <kprocess.h>
-#include <tqfile.h>
-
-// ----------------------- KMessageIO -------------------------
-
-KMessageIO::KMessageIO (TQObject *parent, const char *name)
- : TQObject (parent, name), m_id (0)
-{}
-
-KMessageIO::~KMessageIO ()
-{}
-
-void KMessageIO::setId (TQ_UINT32 id)
-{
- m_id = id;
-}
-
-TQ_UINT32 KMessageIO::id ()
-{
- return m_id;
-}
-
-// ----------------------KMessageSocket -----------------------
-
-KMessageSocket::KMessageSocket (TQString host, TQ_UINT16 port, TQObject *parent,
-const char *name)
- : KMessageIO (parent, name)
-{
- mSocket = new TQSocket ();
- mSocket->connectToHost (host, port);
- initSocket ();
-}
-
-KMessageSocket::KMessageSocket (TQHostAddress host, TQ_UINT16 port, TQObject
-*parent, const char *name)
- : KMessageIO (parent, name)
-{
- mSocket = new TQSocket ();
- mSocket->connectToHost (host.toString(), port);
- initSocket ();
-}
-
-KMessageSocket::KMessageSocket (TQSocket *socket, TQObject *parent, const char
-*name)
- : KMessageIO (parent, name)
-{
- mSocket = socket;
- initSocket ();
-}
-
-KMessageSocket::KMessageSocket (int socketFD, TQObject *parent, const char
-*name)
- : KMessageIO (parent, name)
-{
- mSocket = new TQSocket ();
- mSocket->setSocket (socketFD);
- initSocket ();
-}
-
-KMessageSocket::~KMessageSocket ()
-{
- delete mSocket;
-}
-
-bool KMessageSocket::isConnected () const
-{
- return mSocket->state() == TQSocket::Connection;
-}
-
-void KMessageSocket::send (const TQByteArray &msg)
-{
- TQDataStream str (mSocket);
- str << TQ_UINT8 ('M'); // magic number for begin of message
- str.writeBytes (msg.data(), msg.size()); // writes the length (as TQ_UINT32) and the data
-}
-
-void KMessageSocket::processNewData ()
-{
- if (isRecursive)
- return;
- isRecursive = true;
-
- TQDataStream str (mSocket);
- while (mSocket->bytesAvailable() > 0)
- {
- if (mAwaitingHeader)
- {
- // Header = magic number + packet length = 5 bytes
- if (mSocket->bytesAvailable() < 5)
- {
- isRecursive = false;
- return;
- }
-
- // Read the magic number first. If something unexpected is found,
- // start over again, ignoring the data that was read up to then.
-
- TQ_UINT8 v;
- str >> v;
- if (v != 'M')
- {
- kdWarning(11001) << k_funcinfo << ": Received unexpected data, magic number wrong!" << endl;
- continue;
- }
-
- str >> mNextBlockLength;
- mAwaitingHeader = false;
- }
- else
- {
- // Data not completely read => wait for more
- if (mSocket->bytesAvailable() < (TQ_ULONG) mNextBlockLength)
- {
- isRecursive = false;
- return;
- }
-
- TQByteArray msg (mNextBlockLength);
- str.readRawBytes (msg.data(), mNextBlockLength);
-
- // send the received message
- emit received (msg);
-
- // Waiting for the header of the next message
- mAwaitingHeader = true;
- }
- }
-
- isRecursive = false;
-}
-
-void KMessageSocket::initSocket ()
-{
- connect (mSocket, TQT_SIGNAL (error(int)), TQT_SIGNAL (connectionBroken()));
- connect (mSocket, TQT_SIGNAL (connectionClosed()), TQT_SIGNAL (connectionBroken()));
- connect (mSocket, TQT_SIGNAL (readyRead()), TQT_SLOT (processNewData()));
- mAwaitingHeader = true;
- mNextBlockLength = 0;
- isRecursive = false;
-}
-
-TQ_UINT16 KMessageSocket::peerPort () const
-{
- return mSocket->peerPort();
-}
-
-TQString KMessageSocket::peerName () const
-{
- return mSocket->peerName();
-}
-
-// ----------------------KMessageDirect -----------------------
-
-KMessageDirect::KMessageDirect (KMessageDirect *partner, TQObject *parent,
-const char *name)
- : KMessageIO (parent, name), mPartner (0)
-{
- // 0 as first parameter leaves the object unconnected
- if (!partner)
- return;
-
- // Check if the other object is already connected
- if (partner && partner->mPartner)
- {
- kdWarning(11001) << k_funcinfo << ": Object is already connected!" << endl;
- return;
- }
-
- // Connect from us to that object
- mPartner = partner;
-
- // Connect the other object to us
- partner->mPartner = this;
-}
-
-KMessageDirect::~KMessageDirect ()
-{
- if (mPartner)
- {
- mPartner->mPartner = 0;
- emit mPartner->connectionBroken();
- }
-}
-
-bool KMessageDirect::isConnected () const
-{
- return mPartner != 0;
-}
-
-void KMessageDirect::send (const TQByteArray &msg)
-{
- if (mPartner)
- emit mPartner->received (msg);
- else
- kdError(11001) << k_funcinfo << ": Not yet connected!" << endl;
-}
-
-
-// ----------------------- KMessageProcess ---------------------------
-
-KMessageProcess::~KMessageProcess()
-{
- kdDebug(11001) << "@@@KMessageProcess::Delete process" << endl;
- if (mProcess)
- {
- mProcess->kill();
- delete mProcess;
- mProcess=0;
- // Remove not send buffers
- mQueue.setAutoDelete(true);
- mQueue.clear();
- // Maybe todo: delete mSendBuffer
- }
-}
-KMessageProcess::KMessageProcess(TQObject *parent, TQString file) : KMessageIO(parent,0)
-{
- // Start process
- kdDebug(11001) << "@@@KMessageProcess::Start process" << endl;
- mProcessName=file;
- mProcess=new KProcess;
- int id=0;
- *mProcess << mProcessName << TQString("%1").tqarg(id);
- kdDebug(11001) << "@@@KMessageProcess::Init:Id= " << id << endl;
- kdDebug(11001) << "@@@KMessgeProcess::Init:Processname: " << mProcessName << endl;
- connect(mProcess, TQT_SIGNAL(receivedStdout(KProcess *, char *, int )),
- this, TQT_SLOT(slotReceivedStdout(KProcess *, char * , int )));
- connect(mProcess, TQT_SIGNAL(receivedStderr(KProcess *, char *, int )),
- this, TQT_SLOT(slotReceivedStderr(KProcess *, char * , int )));
- connect(mProcess, TQT_SIGNAL(processExited(KProcess *)),
- this, TQT_SLOT(slotProcessExited(KProcess *)));
- connect(mProcess, TQT_SIGNAL(wroteStdin(KProcess *)),
- this, TQT_SLOT(slotWroteStdin(KProcess *)));
- mProcess->start(KProcess::NotifyOnExit,KProcess::All);
- mSendBuffer=0;
- mReceiveCount=0;
- mReceiveBuffer.resize(1024);
-}
-bool KMessageProcess::isConnected() const
-{
- kdDebug(11001) << "@@@KMessageProcess::Is conencted" << endl;
- if (!mProcess) return false;
- return mProcess->isRunning();
-}
-void KMessageProcess::send(const TQByteArray &msg)
-{
- kdDebug(11001) << "@@@KMessageProcess:: SEND("<<msg.size()<<") to process" << endl;
- unsigned int size=msg.size()+2*sizeof(long);
-
- char *tmpbuffer=new char[size];
- long *p1=(long *)tmpbuffer;
- long *p2=p1+1;
- kdDebug(11001) << "p1="<<p1 << "p2="<< p2 << endl;
- memcpy(tmpbuffer+2*sizeof(long),msg.data(),msg.size());
- *p1=0x4242aeae;
- *p2=size;
-
- TQByteArray *buffer=new TQByteArray();
- buffer->assign(tmpbuffer,size);
- // buffer->duplicate(msg);
- mQueue.enqueue(buffer);
- writeToProcess();
-}
-void KMessageProcess::writeToProcess()
-{
- // Previous send ok and item in queue
- if (mSendBuffer || mQueue.isEmpty()) return ;
- mSendBuffer=mQueue.dequeue();
- if (!mSendBuffer) return ;
-
- // write it out to the process
- // kdDebug(11001) << " @@@@@@ writeToProcess::SEND to process " << mSendBuffer->size() << " BYTE " << endl;
- // char *p=mSendBuffer->data();
- // for (int i=0;i<16;i++) printf("%02x ",(unsigned char)(*(p+i)));printf("\n");
- mProcess->writeStdin(mSendBuffer->data(),mSendBuffer->size());
-
-}
-void KMessageProcess::slotWroteStdin(KProcess * )
-{
- kdDebug(11001) << k_funcinfo << endl;
- if (mSendBuffer)
- {
- delete mSendBuffer;
- mSendBuffer=0;
- }
- writeToProcess();
-}
-
-void KMessageProcess::slotReceivedStderr(KProcess * proc, char *buffer, int buflen)
-{
- int pid=0;
- int len;
- char *p;
- char *pos;
-// kdDebug(11001)<<"############# Got stderr " << buflen << " bytes" << endl;
-
- if (!buffer || buflen==0) return ;
- if (proc) pid=proc->pid();
-
-
- pos=buffer;
- do
- {
- p=(char *)memchr(pos,'\n',buflen);
- if (!p) len=buflen;
- else len=p-pos;
-
- TQByteArray a;
- a.setRawData(pos,len);
- TQString s(a);
- kdDebug(11001) << "PID" <<pid<< ":" << s << endl;
- a.resetRawData(pos,len);
- if (p) pos=p+1;
- buflen-=len+1;
- }while(buflen>0);
-}
-
-
-void KMessageProcess::slotReceivedStdout(KProcess * , char *buffer, int buflen)
-{
- kdDebug(11001) << "$$$$$$ " << k_funcinfo << ": Received " << buflen << " bytes over inter process communication" << endl;
-
- // TODO Make a plausibility check on buflen to avoid memory overflow
- while (mReceiveCount+buflen>=mReceiveBuffer.size()) mReceiveBuffer.resize(mReceiveBuffer.size()+1024);
- memcpy(mReceiveBuffer.data()+mReceiveCount,buffer,buflen);
- mReceiveCount+=buflen;
-
- // Possbile message
- while (mReceiveCount>2*sizeof(long))
- {
- long *p1=(long *)mReceiveBuffer.data();
- long *p2=p1+1;
- unsigned int len;
- if (*p1!=0x4242aeae)
- {
- kdDebug(11001) << k_funcinfo << ": Cookie error...transmission failure...serious problem..." << endl;
-// for (int i=0;i<mReceiveCount;i++) fprintf(stderr,"%02x ",mReceiveBuffer[i]);fprintf(stderr,"\n");
- }
- len=(int)(*p2);
- if (len<2*sizeof(long))
- {
- kdDebug(11001) << k_funcinfo << ": Message size error" << endl;
- break;
- }
- if (len<=mReceiveCount)
- {
- kdDebug(11001) << k_funcinfo << ": Got message with len " << len << endl;
-
- TQByteArray msg;
- // msg.setRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
- msg.duplicate(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
- emit received(msg);
- // msg.resetRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
- // Shift buffer
- if (len<mReceiveCount)
- {
- memmove(mReceiveBuffer.data(),mReceiveBuffer.data()+len,mReceiveCount-len);
- }
- mReceiveCount-=len;
- }
- else break;
- }
-}
-
-void KMessageProcess::slotProcessExited(KProcess * /*p*/)
-{
- kdDebug(11001) << "Process exited (slot)" << endl;
- emit connectionBroken();
- delete mProcess;
- mProcess=0;
-}
-
-
-// ----------------------- KMessageFilePipe ---------------------------
-KMessageFilePipe::KMessageFilePipe(TQObject *parent,TQFile *readfile,TQFile *writefile) : KMessageIO(parent,0)
-{
- mReadFile=readfile;
- mWriteFile=writefile;
- mReceiveCount=0;
- mReceiveBuffer.resize(1024);
-}
-
-KMessageFilePipe::~KMessageFilePipe()
-{
-}
-
-bool KMessageFilePipe::isConnected () const
-{
- return (mReadFile!=0)&&(mWriteFile!=0);
-}
-
-void KMessageFilePipe::send(const TQByteArray &msg)
-{
- unsigned int size=msg.size()+2*sizeof(long);
-
- char *tmpbuffer=new char[size];
- long *p1=(long *)tmpbuffer;
- long *p2=p1+1;
- memcpy(tmpbuffer+2*sizeof(long),msg.data(),msg.size());
- *p1=0x4242aeae;
- *p2=size;
-
- TQByteArray buffer;
- buffer.assign(tmpbuffer,size);
- mWriteFile->writeBlock(buffer);
- mWriteFile->flush();
- /*
- fprintf(stderr,"+++ KMessageFilePipe:: SEND(%d to parent) realsize=%d\n",msg.size(),buffer.size());
- for (int i=0;i<buffer.size();i++) fprintf(stderr,"%02x ",buffer[i]);fprintf(stderr,"\n");
- fflush(stderr);
- */
-}
-
-void KMessageFilePipe::exec()
-{
-
- // According to BL: Blocking read is ok
- // while(mReadFile->atEnd()) { usleep(100); }
-
- int ch=mReadFile->getch();
-
- while (mReceiveCount>=mReceiveBuffer.size()) mReceiveBuffer.resize(mReceiveBuffer.size()+1024);
- mReceiveBuffer[mReceiveCount]=(char)ch;
- mReceiveCount++;
-
- // Change for message
- if (mReceiveCount>=2*sizeof(long))
- {
- long *p1=(long *)mReceiveBuffer.data();
- long *p2=p1+1;
- unsigned int len;
- if (*p1!=0x4242aeae)
- {
- fprintf(stderr,"KMessageFilePipe::exec:: Cookie error...transmission failure...serious problem...\n");
-// for (int i=0;i<16;i++) fprintf(stderr,"%02x ",mReceiveBuffer[i]);fprintf(stderr,"\n");
- }
- len=(int)(*p2);
- if (len==mReceiveCount)
- {
- //fprintf(stderr,"KMessageFilePipe::exec:: Got Message with len %d\n",len);
-
- TQByteArray msg;
- //msg.setRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
- msg.duplicate(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
- emit received(msg);
- //msg.resetRawData(mReceiveBuffer.data()+2*sizeof(long),len-2*sizeof(long));
- mReceiveCount=0;
- }
- }
-
-
- return ;
-
-
-}
-
-#include "kmessageio.moc"
diff --git a/libkdegames/kgame/kmessageio.h b/libkdegames/kgame/kmessageio.h
deleted file mode 100644
index 326476ff..00000000
--- a/libkdegames/kgame/kmessageio.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-/*
- KMessageIO class and subclasses KMessageSocket and KMessageDirect
-*/
-
-#ifndef _KMESSAGEIO_H_
-#define _KMESSAGEIO_H_
-
-#include <tqcstring.h>
-#include <tqhostaddress.h>
-#include <tqobject.h>
-#include <tqstring.h>
-#include <tqptrqueue.h>
-#include <tqfile.h>
-#include <kdebug.h>
-
-class TQSocket;
-class KProcess;
-//class TQFile;
-
-
-/**
- This abstract base class represents one end of a message connections
- between two clients. Each client has one object of a subclass of
- KMessageIO. Calling /e send() on one object will emit the signal
- /e received() on the other object, and vice versa.
-
- For each type of connection (TCP/IP socket, COM port, direct connection
- within the same class) a subclass of KMessageIO must be defined that
- implements the pure virtual methods /e send() and /e isConnected(),
- and sends the signals. (See /e KMessageSocket for an example implementation.)
-
- Two subclasses are already included: /e KMessageSocket (connection using
- TCP/IP sockets) and /e KMessageDirect (connection using method calls, both
- sides must be within the same process).
-*/
-
-class KMessageIO : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- * The usual TQObject constructor, does nothing else.
- **/
- KMessageIO (TQObject *parent = 0, const char *name = 0);
-
- /**
- * The usual destructor, does nothing special.
- **/
- ~KMessageIO ();
-
- /**
- * The runtime idendifcation
- */
- virtual int rtti() const {return 0;}
-
- /**
- * @return Whether this KMessageIO is a network IO or not.
- **/
- //virtual bool isNetwork () const = 0;
- virtual bool isNetwork () const
- {
- kdError(11001) << "Calling PURE virtual isNetwork...BAD" << endl;
- return false;
- }
-
- /**
- This method returns the status of the object, whether it is already
- (or still) connected to another KMessageIO object or not.
-
- This is a pure virtual method, so it has to be implemented in a subclass
- of KMessageIO.
- */
- //virtual bool isConnected () const = 0;
- virtual bool isConnected () const
- {
- kdError(11001) << "Calling PURE virtual isConencted...BAD" << endl;
- return false;
- }
-
- /**
- Sets the ID number of this object. This number can for example be used to
- distinguish several objects in a server.
-
- NOTE: Sometimes it is useful to let two connected KMessageIO objects
- have the same ID number. You have to do so yourself, KMessageIO doesn't
- change this value on its own!
- */
- void setId (TQ_UINT32 id);
-
- /**
- Queries the ID of this object.
- */
- TQ_UINT32 id ();
-
- /**
- @since 3.2
- @return 0 in the default implementation. Reimplemented in @ref KMessageSocket.
- */
- virtual TQ_UINT16 peerPort () const { return 0; }
-
- /**
- @since 3.2
- @return "localhost" in the default implementation. Reimplemented in @ref KMessageSocket
- */
- virtual TQString peerName () const { return TQString::tqfromLatin1("localhost"); }
-
-
-signals:
- /**
- This signal is emitted when /e send() on the connected KMessageIO
- object is called. The parameter contains the same data array in /e msg
- as was used in /e send().
- */
- void received (const TQByteArray &msg);
-
- /**
- This signal is emitted when the connection is closed. This can be caused
- by a hardware error (e.g. broken internet connection) or because the other
- object was killed.
-
- Note: Sometimes a broken connection can be undetected for a long time,
- or may never be detected at all. So don't rely on this signal!
- */
- void connectionBroken ();
-
-public slots:
-
- /**
- This slot sends the data block in /e msg to the connected object, that will
- emit /e received().
-
- For a concrete class, you have to subclass /e KMessageIO and overwrite this
- method. In the subclass, implement this method as an ordinary method, not
- as a slot! (Otherwise another slot would be defined. It would work, but uses
- more memory and time.) See /e KMessageSocket for an example implementation.
- */
- virtual void send (const TQByteArray &msg) = 0;
-
-protected:
- TQ_UINT32 m_id;
-};
-
-
-/**
- This class implements the message communication using a TCP/IP socket. The
- object can connect to a server socket, or can use an already connected socket.
-*/
-
-class KMessageSocket : public KMessageIO
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- Connects to a server socket on /e host with /e port. host can be an
- numerical (e.g. "192.168.0.212") or symbolic (e.g. "wave.peter.org")
- IP address. You can immediately use the /e sendSystem() and
- /e sendBroadcast() methods. The messages are stored and sent to the
- receiver after the connection is established.
-
- If the connection could not be established (e.g. unknown host or no server
- socket at this port), the signal /e connectionBroken is emitted.
- */
- KMessageSocket (TQString host, TQ_UINT16 port, TQObject *parent = 0,
- const char *name = 0);
-
- /**
- Connects to a server socket on /e host with /e port. You can immediately
- use the /e sendSystem() and /e sendBroadcast() methods. The messages are
- stored and sent to the receiver after the connection is established.
-
- If the connection could not be established (e.g. unknown host or no server
- socket at this port), the signal /e connectionBroken is emitted.
- */
- KMessageSocket (TQHostAddress host, TQ_UINT16 port, TQObject *parent = 0,
- const char *name = 0);
-
- /**
- Uses /e socket to do the communication.
-
- The socket should already be connected, or at least be in /e connecting
- state.
-
- Note: The /e socket object is then owned by the /e KMessageSocket object.
- So don't use it otherwise any more and don't delete it. It is deleted
- together with this KMessageSocket object. (Use 0 as parent for the TQSocket
- object t ensure it is not deleted.)
- */
- KMessageSocket (TQSocket *socket, TQObject *parent = 0, const char *name = 0);
-
- /**
- Uses the socket specified by the socket descriptor socketFD to do the
- communication. The socket must already be connected.
-
- This constructor can be used with a TQServerSocket within the (pure
- virtual) method /e newConnection.
-
- Note: The socket is then owned by the /e KMessageSocket object. So don't
- manipulate the socket afterwards, especially don't close it. The socket is
- automatically closed when KMessageSocket is deleted.
- */
- KMessageSocket (int socketFD, TQObject *parent = 0, const char *name = 0);
-
- /**
- Destructor, closes the socket.
- */
- ~KMessageSocket ();
-
- /**
- * The runtime idendifcation
- */
- virtual int rtti() const {return 1;}
-
- /**
- @since 3.2
- @return The port that this object is connected to. See TQSocket::peerPort
- */
- virtual TQ_UINT16 peerPort () const;
-
- /**
- @since 3.2
- @return The hostname this object is connected to. See TQSocket::peerName.
- */
- virtual TQString peerName () const;
-
- /**
- @return TRUE as this is a network IO.
- */
- bool isNetwork() const { return true; }
-
- /**
- Returns true if the socket is in state /e connected.
- */
- bool isConnected () const;
-
- /**
- Overwritten slot method from KMessageIO.
-
- Note: It is not declared as a slot method, since the slot is already
- defined in KMessageIO as a virtual method.
- */
- void send (const TQByteArray &msg);
-
-protected slots:
- virtual void processNewData ();
-
-protected:
- void initSocket ();
- TQSocket *mSocket;
- bool mAwaitingHeader;
- TQ_UINT32 mNextBlockLength;
-
- bool isRecursive; // workaround for "bug" in TQSocket, TQt 2.2.3 or older
-};
-
-
-/**
- This class implements the message communication using function calls
- directly. It can only be used when both sides of the message pipe are
- within the same process. The communication is very fast.
-
- To establish a communication, you have to create two instances of
- KMessageDirect, the first one with no parameters in the constructor,
- the second one with the first as parameter:
-
- /code
- KMessageDirect *peer1, *peer2;
- peer1 = new KMessageDirect (); // unconnected
- peer2 = new KMessageDirect (peer1); // connect with peer1
- /endcode
-
- The connection is only closed when one of the instances is deleted.
-*/
-
-class KMessageDirect : public KMessageIO
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- Creates an object and connects it to the object given in the first
- parameter. Use 0 as first parameter to create an unconnected object,
- that is later connected.
-
- If that object is already connected, the object remains unconnected.
- */
- KMessageDirect (KMessageDirect *partner = 0, TQObject *parent = 0, const char
-*name = 0);
-
- /**
- Destructor, closes the connection.
- */
- ~KMessageDirect ();
-
- /**
- * The runtime idendifcation
- */
- virtual int rtti() const {return 2;}
-
-
- /**
- @return FALSE as this is no network IO.
- */
- bool isNetwork() const { return false; }
-
- /**
- Returns true, if the object is connected to another instance.
-
- If you use the first constructor, the object is unconnected unless another
- object is created with this one as parameter.
-
- The connection can only be closed by deleting one of the objects.
- */
- bool isConnected () const;
-
- /**
- Overwritten slot method from KMessageIO.
-
- Note: It is not declared as a slot method, since the slot is already
- defined in KMessageIO as a virtual method.
- */
- void send (const TQByteArray &msg);
-
-protected:
- KMessageDirect *mPartner;
-};
-
-class KMessageProcess : public KMessageIO
-{
- Q_OBJECT
- TQ_OBJECT
-
- public:
- KMessageProcess(TQObject *parent, TQString file);
- ~KMessageProcess();
- bool isConnected() const;
- void send (const TQByteArray &msg);
- void writeToProcess();
-
- /**
- @return FALSE as this is no network IO.
- */
- bool isNetwork() const { return false; }
-
- /**
- * The runtime idendifcation
- */
- virtual int rtti() const {return 3;}
-
-
-
- public slots:
- void slotReceivedStdout(KProcess *proc, char *buffer, int buflen);
- void slotReceivedStderr(KProcess *proc, char *buffer, int buflen);
- void slotProcessExited(KProcess *p);
- void slotWroteStdin(KProcess *p);
-
- private:
- TQString mProcessName;
- KProcess *mProcess;
- TQPtrQueue <TQByteArray> mQueue;
- TQByteArray *mSendBuffer;
- TQByteArray mReceiveBuffer;
- unsigned int mReceiveCount;
-};
-
-class KMessageFilePipe : public KMessageIO
-{
- Q_OBJECT
- TQ_OBJECT
-
- public:
- KMessageFilePipe(TQObject *parent,TQFile *readFile,TQFile *writeFile);
- ~KMessageFilePipe();
- bool isConnected() const;
- void send (const TQByteArray &msg);
- void exec();
-
- /**
- @return FALSE as this is no network IO.
- */
- bool isNetwork() const { return false; }
-
- /**
- * The runtime idendifcation
- */
- virtual int rtti() const {return 4;}
-
-
-
- private:
- TQFile *mReadFile;
- TQFile *mWriteFile;
- TQByteArray mReceiveBuffer;
- unsigned int mReceiveCount;
-};
-
-#endif
diff --git a/libkdegames/kgame/kmessageserver.cpp b/libkdegames/kgame/kmessageserver.cpp
deleted file mode 100644
index 80df9207..00000000
--- a/libkdegames/kgame/kmessageserver.cpp
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include <tqiodevice.h>
-#include <tqbuffer.h>
-#include <tqptrlist.h>
-#include <tqptrqueue.h>
-#include <tqtimer.h>
-#include <tqvaluelist.h>
-
-#include <kdebug.h>
-
-#include "kmessageio.h"
-#include "kmessageserver.h"
-
-// --------------- internal class KMessageServerSocket
-
-KMessageServerSocket::KMessageServerSocket (TQ_UINT16 port, TQObject *parent)
- : TQServerSocket (port, 0, parent)
-{
-}
-
-KMessageServerSocket::~KMessageServerSocket ()
-{
-}
-
-void KMessageServerSocket::newConnection (int socket)
-{
- emit newClientConnected (new KMessageSocket (socket));
-}
-
-// ---------------- class for storing an incoming message
-
-class MessageBuffer
-{
- public:
- MessageBuffer (TQ_UINT32 clientID, const TQByteArray &messageData)
- : id (clientID), data (messageData) { }
- ~MessageBuffer () {}
- TQ_UINT32 id;
- TQByteArray data;
-};
-
-// ---------------- KMessageServer's private class
-
-class KMessageServerPrivate
-{
-public:
- KMessageServerPrivate()
- : mMaxClients (-1), mGameId (1), mUniqueClientNumber (1), mAdminID (0), mServerSocket (0)
- {
- mClientList.setAutoDelete (true);
- mMessageQueue.setAutoDelete (true);
- }
-
- int mMaxClients;
- int mGameId;
- TQ_UINT16 mCookie;
- TQ_UINT32 mUniqueClientNumber;
- TQ_UINT32 mAdminID;
-
- KMessageServerSocket* mServerSocket;
-
- TQPtrList <KMessageIO> mClientList;
- TQPtrQueue <MessageBuffer> mMessageQueue;
- TQTimer mTimer;
- bool mIsRecursive;
-};
-
-
-// ------------------ KMessageServer
-
-KMessageServer::KMessageServer (TQ_UINT16 cookie,TQObject* parent)
- : TQObject(parent, 0)
-{
- d = new KMessageServerPrivate;
- d->mIsRecursive=false;
- d->mCookie=cookie;
- connect (&(d->mTimer), TQT_SIGNAL (timeout()),
- this, TQT_SLOT (processOneMessage()));
- kdDebug(11001) << "CREATE(KMessageServer="
- << this
- << ") cookie="
- << d->mCookie
- << " sizeof(this)="
- << sizeof(KMessageServer)
- << endl;
-}
-
-KMessageServer::~KMessageServer()
-{
- kdDebug(11001) << k_funcinfo << "this=" << this << endl;
- Debug();
- stopNetwork();
- deleteClients();
- delete d;
- kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-//------------------------------------- TCP/IP server stuff
-
-bool KMessageServer::initNetwork (TQ_UINT16 port)
-{
- kdDebug(11001) << k_funcinfo << endl;
-
- if (d->mServerSocket)
- {
- kdDebug (11001) << k_funcinfo << ": We were already offering connections!" << endl;
- delete d->mServerSocket;
- }
-
- d->mServerSocket = new KMessageServerSocket (port);
- d->mIsRecursive = false;
-
- if (!d->mServerSocket || !d->mServerSocket->ok())
- {
- kdError(11001) << k_funcinfo << ": Serversocket::ok() == false" << endl;
- delete d->mServerSocket;
- d->mServerSocket=0;
- return false;
- }
-
- kdDebug (11001) << k_funcinfo << ": Now listening to port "
- << d->mServerSocket->port() << endl;
- connect (d->mServerSocket, TQT_SIGNAL (newClientConnected (KMessageIO*)),
- this, TQT_SLOT (addClient (KMessageIO*)));
- return true;
-}
-
-TQ_UINT16 KMessageServer::serverPort () const
-{
- if (d->mServerSocket)
- return d->mServerSocket->port();
- else
- return 0;
-}
-
-void KMessageServer::stopNetwork()
-{
- if (d->mServerSocket)
- {
- delete d->mServerSocket;
- d->mServerSocket = 0;
- }
-}
-
-bool KMessageServer::isOfferingConnections() const
-{
- return d->mServerSocket != 0;
-}
-
-//----------------------------------------------- adding / removing clients
-
-void KMessageServer::addClient (KMessageIO* client)
-{
- TQByteArray msg;
-
- // maximum number of clients reached?
- if (d->mMaxClients >= 0 && d->mMaxClients <= clientCount())
- {
- kdError (11001) << k_funcinfo << ": Maximum number of clients reached!" << endl;
- return;
- }
-
- // give it a unique ID
- client->setId (uniqueClientNumber());
- kdDebug (11001) << k_funcinfo << ": " << client->id() << endl;
-
- // connect its signals
- connect (client, TQT_SIGNAL (connectionBroken()),
- this, TQT_SLOT (removeBrokenClient()));
- connect (client, TQT_SIGNAL (received (const TQByteArray &)),
- this, TQT_SLOT (getReceivedMessage (const TQByteArray &)));
-
- // Tell everyone about the new guest
- // Note: The new client doesn't get this message!
- TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (EVNT_CLIENT_CONNECTED) << client->id();
- broadcastMessage (msg);
-
- // add to our list
- d->mClientList.append (client);
-
- // tell it its ID
- TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_CLIENT_ID) << client->id();
- client->send (msg);
-
- // Give it the complete list of client IDs
- TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_CLIENT_LIST) << clientIDs();
- client->send (msg);
-
-
- if (clientCount() == 1)
- {
- // if it is the first client, it becomes the admin
- setAdmin (client->id());
- }
- else
- {
- // otherwise tell it who is the admin
- TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_ADMIN_ID) << adminID();
- client->send (msg);
- }
-
- emit clientConnected (client);
-}
-
-void KMessageServer::removeClient (KMessageIO* client, bool broken)
-{
- TQ_UINT32 clientID = client->id();
- if (!d->mClientList.removeRef (client))
- {
- kdError(11001) << k_funcinfo << ": Deleting client that wasn't added before!" << endl;
- return;
- }
-
- // tell everyone about the removed client
- TQByteArray msg;
- TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (EVNT_CLIENT_DISCONNECTED) << client->id() << (TQ_INT8)broken;
- broadcastMessage (msg);
-
- // If it was the admin, select a new admin.
- if (clientID == adminID())
- {
- if (!d->mClientList.isEmpty())
- setAdmin (d->mClientList.first()->id());
- else
- setAdmin (0);
- }
-}
-
-void KMessageServer::deleteClients()
-{
- d->mClientList.clear();
- d->mAdminID = 0;
-}
-
-void KMessageServer::removeBrokenClient ()
-{
- if (!sender()->inherits ("KMessageIO"))
- {
- kdError (11001) << k_funcinfo << ": sender of the signal was not a KMessageIO object!" << endl;
- return;
- }
-
- KMessageIO *client = (KMessageIO *) sender();
-
- emit connectionLost (client);
- removeClient (client, true);
-}
-
-
-void KMessageServer::setMaxClients(int c)
-{
- d->mMaxClients = c;
-}
-
-int KMessageServer::maxClients() const
-{
- return d->mMaxClients;
-}
-
-int KMessageServer::clientCount() const
-{
- return d->mClientList.count();
-}
-
-TQValueList <TQ_UINT32> KMessageServer::clientIDs () const
-{
- TQValueList <TQ_UINT32> list;
- for (TQPtrListIterator <KMessageIO> iter (d->mClientList); *iter; ++iter)
- list.append ((*iter)->id());
- return list;
-}
-
-KMessageIO* KMessageServer::findClient (TQ_UINT32 no) const
-{
- if (no == 0)
- no = d->mAdminID;
-
- TQPtrListIterator <KMessageIO> iter (d->mClientList);
- while (*iter)
- {
- if ((*iter)->id() == no)
- return (*iter);
- ++iter;
- }
- return 0;
-}
-
-TQ_UINT32 KMessageServer::adminID () const
-{
- return d->mAdminID;
-}
-
-void KMessageServer::setAdmin (TQ_UINT32 adminID)
-{
- // Trying to set the the client that is already admin => nothing to do
- if (adminID == d->mAdminID)
- return;
-
- if (adminID > 0 && findClient (adminID) == 0)
- {
- kdWarning (11001) << "Trying to set a new admin that doesn't exist!" << endl;
- return;
- }
-
- d->mAdminID = adminID;
-
- TQByteArray msg;
- TQDataStream (msg, IO_WriteOnly) << TQ_UINT32 (ANS_ADMIN_ID) << adminID;
-
- // Tell everyone about the new master
- broadcastMessage (msg);
-}
-
-
-//------------------------------------------- ID stuff
-
-TQ_UINT32 KMessageServer::uniqueClientNumber() const
-{
- return d->mUniqueClientNumber++;
-}
-
-// --------------------- Messages ---------------------------
-
-void KMessageServer::broadcastMessage (const TQByteArray &msg)
-{
- for (TQPtrListIterator <KMessageIO> iter (d->mClientList); *iter; ++iter)
- (*iter)->send (msg);
-}
-
-void KMessageServer::sendMessage (TQ_UINT32 id, const TQByteArray &msg)
-{
- KMessageIO *client = findClient (id);
- if (client)
- client->send (msg);
-}
-
-void KMessageServer::sendMessage (const TQValueList <TQ_UINT32> &ids, const TQByteArray &msg)
-{
- for (TQValueListConstIterator <TQ_UINT32> iter = ids.begin(); iter != ids.end(); ++iter)
- sendMessage (*iter, msg);
-}
-
-void KMessageServer::getReceivedMessage (const TQByteArray &msg)
-{
- if (!sender() || !sender()->inherits("KMessageIO"))
- {
- kdError (11001) << k_funcinfo << ": slot was not called from KMessageIO!" << endl;
- return;
- }
- //kdDebug(11001) << k_funcinfo << ": size=" << msg.size() << endl;
- KMessageIO *client = (KMessageIO *) sender();
- TQ_UINT32 clientID = client->id();
-
- //TQByteArray *ta=new TQByteArray;
- //ta->duplicate(msg);
- //d->mMessageQueue.enqueue (new MessageBuffer (clientID, *ta));
-
-
- d->mMessageQueue.enqueue (new MessageBuffer (clientID, msg));
- if (!d->mTimer.isActive())
- d->mTimer.start(0); // AB: should be , TRUE i guess
-}
-
-void KMessageServer::processOneMessage ()
-{
- // This shouldn't happen, since the timer should be stopped before. But only to be sure!
- if (d->mMessageQueue.isEmpty())
- {
- d->mTimer.stop();
- return;
- }
- if (d->mIsRecursive)
- {
- return;
- }
- d->mIsRecursive = true;
-
- MessageBuffer *msg_buf = d->mMessageQueue.head();
-
- TQ_UINT32 clientID = msg_buf->id;
- TQBuffer in_buffer (msg_buf->data);
- in_buffer.open (IO_ReadOnly);
- TQDataStream in_stream (&in_buffer);
-
- TQByteArray out_msg;
- TQBuffer out_buffer (out_msg);
- out_buffer.open (IO_WriteOnly);
- TQDataStream out_stream (&out_buffer);
-
- bool unknown = false;
-
- TQByteArray ttt=in_buffer.buffer();
- TQ_UINT32 messageID;
- in_stream >> messageID;
- //kdDebug(11001) << k_funcinfo << ": got message with messageID=" << messageID << endl;
- switch (messageID)
- {
- case RETQ_BROADCAST:
- out_stream << TQ_UINT32 (MSG_BROADCAST) << clientID;
- // FIXME, compiler bug?
- // this should be okay, since TQBuffer is subclass of TQIODevice! :
- // out_buffer.writeBlock (in_buffer.readAll());
- TQT_TQIODEVICE(&out_buffer)->writeBlock (in_buffer.readAll());
- broadcastMessage (out_msg);
- break;
-
- case RETQ_FORWARD:
- {
- TQValueList <TQ_UINT32> clients;
- in_stream >> clients;
- out_stream << TQ_UINT32 (MSG_FORWARD) << clientID << clients;
- // see above!
- TQT_TQIODEVICE(&out_buffer)->writeBlock (in_buffer.readAll());
- sendMessage (clients, out_msg);
- }
- break;
-
- case RETQ_CLIENT_ID:
- out_stream << TQ_UINT32 (ANS_CLIENT_ID) << clientID;
- sendMessage (clientID, out_msg);
- break;
-
- case RETQ_ADMIN_ID:
- out_stream << TQ_UINT32 (ANS_ADMIN_ID) << d->mAdminID;
- sendMessage (clientID, out_msg);
- break;
-
- case RETQ_ADMIN_CHANGE:
- if (clientID == d->mAdminID)
- {
- TQ_UINT32 newAdmin;
- in_stream >> newAdmin;
- setAdmin (newAdmin);
- }
- break;
-
- case RETQ_REMOVE_CLIENT:
- if (clientID == d->mAdminID)
- {
- TQValueList <TQ_UINT32> client_list;
- in_stream >> client_list;
- for (TQValueListIterator <TQ_UINT32> iter = client_list.begin(); iter != client_list.end(); ++iter)
- {
- KMessageIO *client = findClient (*iter);
- if (client)
- removeClient (client, false);
- else
- kdWarning (11001) << k_funcinfo << ": removing non-existing clientID" << endl;
- }
- }
- break;
-
- case RETQ_MAX_NUM_CLIENTS:
- if (clientID == d->mAdminID)
- {
- TQ_INT32 maximum_clients;
- in_stream >> maximum_clients;
- setMaxClients (maximum_clients);
- }
- break;
-
- case RETQ_CLIENT_LIST:
- {
- out_stream << TQ_UINT32 (ANS_CLIENT_LIST) << clientIDs();
- sendMessage (clientID, out_msg);
- }
- break;
-
- default:
- unknown = true;
- }
-
- // check if all the data has been used
- if (!unknown && !in_buffer.atEnd())
- kdWarning (11001) << k_funcinfo << ": Extra data received for message ID " << messageID << endl;
-
- emit messageReceived (msg_buf->data, clientID, unknown);
-
- if (unknown)
- kdWarning (11001) << k_funcinfo << ": received unknown message ID " << messageID << endl;
-
- // remove the message, since we are ready with it
- d->mMessageQueue.remove();
- if (d->mMessageQueue.isEmpty())
- d->mTimer.stop();
- d->mIsRecursive = false;
-}
-
-void KMessageServer::Debug()
-{
- kdDebug(11001) << "------------------ KMESSAGESERVER -----------------------" << endl;
- kdDebug(11001) << "MaxClients : " << maxClients() << endl;
- kdDebug(11001) << "NoOfClients : " << clientCount() << endl;
- kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-#include "kmessageserver.moc"
diff --git a/libkdegames/kgame/kmessageserver.h b/libkdegames/kgame/kmessageserver.h
deleted file mode 100644
index 9042fca2..00000000
--- a/libkdegames/kgame/kmessageserver.h
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Burkhard Lehner (Burkhard.Lehner@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KMESSAGESERVER_H__
-#define __KMESSAGESERVER_H__
-
-#include <tqobject.h>
-#include <tqserversocket.h>
-#include <tqstring.h>
-#include <tqvaluelist.h>
-
-class KMessageIO;
-class KMessageServerPrivate;
-
-/**
- @short A server for message sending and broadcasting, using TCP/IP connections.
-
- An object of this class listens for incoming connections via TCP/IP sockets and
- creates KMessageSocket objects for every established connection. It receives
- messages from the "clients", analyses them and processes an appropriate
- reaction.
-
- You can also use other KMessageIO objects with KMessageServer, not only
- TCP/IP socket based ones. Use addClient to connect via an object of any
- KMessageIO subclass. (For clients within the same process, you can e.g. use
- KMessageDirect.) This object already has to be connected.
-
- The messages are always packages of an arbitrary length. The format of the messages
- is given below. All the data is stored and received with TQDataStream, to be
- platform independant.
-
- Setting up a KMessageServer can be done like this:
-
- \code
- KMessageServer *server = new KMessageServer ();
- server->initNetwork (TCP/IP-Portnumber);
- \endcode
-
- Usually that is everything you will do. There are a lot of public methods to
- administrate the object (maximum number of clients, finding clients, removing
- clients, setting the admin client, ...), but this functionality can also
- be done by messages from the clients. So you can administrate the object completely
- on remote.
-
- If you want to extend the Server for your own needs (e.g. additional message types),
- you can either create a subclass and overwrite the method processOneMessage.
- (But don't forget to call the method of the superclass!) Or you can connect to
- the signal messageReceived, and analyse the messages there.
-
- Every client has a unique ID, so that messages can be sent to another dedicated
- client or a list of clients.
-
- One of the clients (the admin) has a special administration right. Some of the
- administration messages can only be used with him. The admin can give the admin
- status to another client. You can send a message to the admin by using clientID 0.
- This is always interpreted as the admin client, independant of its real clientID.
-
- Here is a list of the messages the KMessageServer understands:
- &lt;&lt; means, the value is inserted into the TQByteArray using TQDataStream. The
- messageIDs (RETQ_BROADCAST, ...) are of type TQ_UINT32.
-
- - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_BROADCAST ) << raw_data
-
- When the server receives this message, it sends the following message to
- ALL connected clients (a broadcast), where the raw_data is left unchanged:
- TQByteArray << static_cast &lt;TQ_UINT32>( MSG_BROADCAST ) << clientID << raw_data
- TQ_UINT32 clientID; // the ID of the client that sent the broadcast request
-
- - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_FORWARD ) << client_list << raw_data
- TQValueList &lt;TQ_UINT32> client_list; // list of tqreceivers
-
- When the server receives this message, it sends the following message to
- the clients in client_list:
- TQByteArray << static_cast&lt;TQ_UINT32>( MSG_FORWARD ) << senderID << client_list << raw_data
- TQ_UINT32 senderID; // the sender of the forward request
- TQValueList &lt;TQ_UINT32> client_list; // a copy of the receiver list
-
- Note: Every client receives the message as many times as he is in the client_list.
- Note: Since the client_list is sent to all the clients, every client can see who else
- got the message. If you want to prevent this, send a single RETQ_FORWARD
- message for every receiver.
-
- - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_CLIENT_ID )
-
- When the server receives this message, it sends the following message to
- the asking client:
- TQByteArray << static_cast&lt;TQ_UINT32>( ANS_CLIENT_ID ) << clientID
- TQ_UINT32 clientID; // The ID of the client who asked for it
-
- Note: This answer is also automatically sent to a new connected client, so that he
- can store his ID. The ID of a client doesn't change during his lifetime, and is
- unique for this KMessageServer.
-
- - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_ADMIN_ID )
-
- When the server receives this message, it sends the following message to
- the asking client:
- TQByteArray << ANS_ADMIN_ID << adminID
- TQ_UINT32 adminID; // The ID of the admin
-
- Note: This answer is also automatically sent to a new connected client, so that he
- can see if he is the admin or not. It will also be sent to all connected clients
- when a new admin is set (see RETQ_ADMIN_CHANGE).
-
- - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_ADMIN_CHANGE ) << new_admin
- TQ_UINT32 new_admin; // the ID of the new admin, or 0 for no admin
-
- When the server receives this message, it sets the admin to the new ID. If no client
- with that ID exists, nothing happens. With new_admin == 0 no client is a admin.
- ONLY THE ADMIN ITSELF CAN USE THIS MESSAGE!
-
- Note: The server sends a ANS_ADMIN_ID message to every connected client.
-
- - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_REMOVE_CLIENT ) << client_list
- TQValueList &lt;TQ_UINT32> client_list; // The list of clients to be removed
-
- When the server receives this message, it removes the clients with the ids stored in
- client_list, disconnecting the connection to them.
- ONLY THE ADMIN CAN USE THIS MESSAGE!
-
- Note: If one of the clients is the admin himself, he will also be deleted.
- Another client (if any left) will become the new admin.
-
- - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_MAX_NUM_CLIENTS ) << maximum_clients
- TQ_INT32 maximum_clients; // The maximum of clients connected, or infinite if -1
-
- When the server receives this message, it limits the number of clients to the number given,
- or sets it unlimited for maximum_clients == -1.
- ONLY THE ADMIN CAN USE THIS MESSAGE!
-
- Note: If there are already more clients, they are not affected. It only prevents new Clients
- to be added. To assure this limit, remove clients afterwards (RETQ_REMOVE_CLIENT)
-
- - TQByteArray << static_cast&lt;TQ_UINT32>( RETQ_CLIENT_LIST )
-
- When the server receives this message, it answers by sending a list of IDs of all the clients
- that are connected at the moment. So it sends the following message to the asking client:
- TQByteArray << static_cast&lt;TQ_UINT32>( ANS_CLIENT_LIST ) << clientList
- TQValueList &lt;TQ_UINT32> clientList; // The IDs of the connected clients
-
- Note: This message is also sent to every new connected client, so that he knows the other
- clients.
-
- There are two more messages that are sent from the server to the every client automatically
- when a new client connects or a connection to a client is lost:
-
- TQByteArray << static_cast&lt;TQ_UINT32>( EVNT_CLIENT_CONNECTED ) << clientID;
- TQ_UINT32 clientID; // the ID of the new connected client
-
- TQByteArray << static_cast&lt;TQ_UINT32>( EVNT_CLIENT_DISCONNECTED ) << clientID;
- TQ_UINT32 clientID; // the ID of the client that lost the connection
- TQ_UINT8 broken; // 1 if the network connection was closed, 0 if it was disconnected
- // on purpose
-
-
- @author Andreas Beckermann <b_mann@gmx.de>, Burkhard Lehner <Burkhard.Lehner@gmx.de>
- @version $Id$
-*/
-class KMessageServer : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- /**
- MessageIDs for messages from a client to the message server.
- */
- enum {
- RETQ_BROADCAST = 1,
- RETQ_FORWARD,
- RETQ_CLIENT_ID,
- RETQ_ADMIN_ID,
- RETQ_ADMIN_CHANGE,
- RETQ_REMOVE_CLIENT,
- RETQ_MAX_NUM_CLIENTS,
- RETQ_CLIENT_LIST,
- RETQ_MAX_REQ = 0xffff };
-
- /**
- * MessageIDs for messages from the message server to a client.
- **/
- enum {
- MSG_BROADCAST = 101,
- MSG_FORWARD,
- ANS_CLIENT_ID,
- ANS_ADMIN_ID,
- ANS_CLIENT_LIST,
- EVNT_CLIENT_CONNECTED,
- EVNT_CLIENT_DISCONNECTED,
- EVNT_MAX_EVNT = 0xffff
- };
-
- /**
- * Create a KGameNetwork object
- **/
- KMessageServer(TQ_UINT16 cookie = 42, TQObject* parent = 0);
-
- ~KMessageServer();
-
- /**
- * Gives debug output of the game status
- **/
- virtual void Debug();
-
-//---------------------------------- TCP/IP server stuff
-
- /**
- * Starts the Communication server to listen for incoming TCP/IP connections.
- *
- * @param port The port on which the service is offered, or 0 to let the
- * system pick a free port
- * @return true if it worked
- */
- bool initNetwork (TQ_UINT16 port = 0);
-
- /**
- * Returns the TCP/IP port number we are listening to for incoming connections.
- * (This has to be known by other clients so that they can connect to us. It's
- * especially necessary if you used 0 as port number in initNetwork().
- * @return the port number
- **/
- TQ_UINT16 serverPort () const;
-
- /**
- * Stops listening for connections. The already running connections are
- * not affected.
- * To listen for connections again call initNetwork again.
- **/
- void stopNetwork();
-
- /**
- * Are we still offer offering server connections?
- * @return true, if we are still listening to connections requests
- **/
- bool isOfferingConnections() const;
-
-//---------------------------------- adding / removing clients
-
-public slots:
- /**
- * Adds a new @ref KMessageIO object to the communication server. This "client"
- * gets a unique ID.
- *
- * This slot method is automatically called for any incoming TCP/IP
- * connection. You can use it to add other types of connections, e.g.
- * local connections (KMessageDirect) to the server manually.
- *
- * NOTE: The @ref KMessageIO object gets owned by the KMessageServer,
- * so don't delete or manipulate it afterwards. It is automatically deleted
- * when the connection is broken or the communication server is deleted.
- * So, add a @ref KMessageIO object to just ONE KMessageServer.
- **/
- void addClient (KMessageIO *);
-
- /**
- * Removes the KMessageIO object from the client list and deletes it.
- * This destroys the connection, if it already was up.
- * Does NOT emit connectionLost.
- * Sends an info message to the other clients, that contains the ID of
- * the removed client and the value of the parameter broken.
- *
- * @param io the object to delete and to remove from the client list
- * @param broken true if the client has lost connection
- * Mostly used internally. You will probably not need this.
- **/
- void removeClient (KMessageIO *io, bool broken);
-
- /**
- Deletes all connections to the clients.
- */
- void deleteClients();
-
-private slots:
- /**
- * Removes the sender object of the signal that called this slot. It is
- * automatically connected to @ref KMessageIO::connectionBroken.
- * Emits @ref connectionLost (KMessageIO*), and deletes the @ref KMessageIO object.
- * Don't call it directly!
- **/
- void removeBrokenClient ();
-
-public:
- /**
- * sets the maximum number of clients which can connect.
- * If this number is reached, no more clients can be added.
- * Setting this number to -1 means unlimited number of clients.
- *
- * NOTE: Existing connections are not affected.
- * So, clientCount > maxClients is possible, if there were already
- * more clients than allowed before reducing this value.
- *
- * @param maxnumber the number of clients
- **/
- void setMaxClients(int maxnumber);
-
- /**
- * returns the maximum number of clients
- *
- * @return the number of clients
- **/
- int maxClients() const;
-
- /**
- * returns the current number of connected clients.
- *
- * @return the number of clients
- **/
- int clientCount() const;
-
- /**
- * returns a list of the unique IDs of all clients.
- **/
- TQValueList <TQ_UINT32> clientIDs() const;
-
- /**
- * Find the @ref KMessageIO object to the given client number.
- * @param no the client number to look for, or 0 to look for the admin
- * @return address of the client, or 0 if no client with that number exists
- **/
- KMessageIO *findClient (TQ_UINT32 no) const;
-
- /**
- * Returns the clientID of the admin, if there is a admin, 0 otherwise.
- *
- * NOTE: Most often you don't need to know that id, since you can
- * use clientID 0 to specify the admin.
- **/
- TQ_UINT32 adminID() const;
-
- /**
- * Sets the admin to a new client with the given ID.
- * The old admin (if existed) and the new admin will get the ANS_ADMIN message.
- * If you use 0 as new adminID, no client will be admin.
- **/
- void setAdmin (TQ_UINT32 adminID);
-
-
-//------------------------------ ID stuff
-
- /*
- * The unique ID of this game
- *
- * @return int id
- **/
-// int gameId() const;
-
- /*
- * Application cookie. this idendifies the game application. It
- * help to distinguish between e.g. KPoker and KWin4
- *
- * @return the application cookie
- **/
-// int cookie() const;
-
-//------------------------------ Message stuff
-
-public:
- /**
- * Sends a message to all connected clients.
- * The message is NOT translated in any way. This method calls
- * @ref KMessageIO::send for every client added.
- **/
- virtual void broadcastMessage (const TQByteArray &msg);
-
- /**
- * Sends a message to a single client with the given ID.
- * The message is NOT translated in any way.
- * If no client with the given id exists, nothing is done.
- * This is just a convenience method. You could also call
- * @ref findClient (id)->send(msg) manually, but this method checks for
- * errors.
- **/
- virtual void sendMessage (TQ_UINT32 id, const TQByteArray &msg);
-
- /**
- * Sends a message to a list of clients. Their ID is given in ids. If
- * a client id is given more than once in the list, the message is also
- * sent several times to that client.
- * This is just a convenience method. You could also iterate over the
- * list of IDs.
- **/
- virtual void sendMessage (const TQValueList <TQ_UINT32> &ids, const TQByteArray &msg);
-
-protected slots:
- /**
- * This slot receives all the messages from the @ref KMessageIO::received signals.
- * It stores the messages in a queue. The messages are later taken out of the queue
- * by @ref getReceivedMessage.
- *
- * NOTE: It is important that this slot may only be called from the signal
- * @ref KMessageIO::received, since the sender() object is used to find out
- * the client that sent the message!
- **/
- virtual void getReceivedMessage (const TQByteArray &msg);
-
- /**
- * This slot is called whenever there are elements in the message queue. This queue
- * is filled by @ref getReceivedMessage.
- * This slot takes one message out of the queue and analyses processes it,
- * if it recognizes it. (See message types in the description of the class.)
- * After that, the signal @ref messageReceived is emitted. Connect to that signal if
- * you want to process other types of messages.
- **/
- virtual void processOneMessage ();
-
-//---------------------------- Signals
-
-signals:
- /**
- * A new client connected to the game
- * @param client the client object that connected
- **/
- void clientConnected (KMessageIO *client);
-
- /**
- * A network connection got broken. Note that the client will automatically get deleted
- * after this signal is emitted. The signal is not emitted when the client was removed
- * regularly.
- *
- * @param client the client which left the game
- **/
- void connectionLost (KMessageIO *client);
-
- /**
- * This signal is always emitted when a message from a client is received.
- *
- * You can use this signal to extend the communication server without subclassing.
- * Just connect to this signal and analyse the message, if unknown is true.
- * If you recognize a message and process it, set unknown to false, otherwise
- * a warning message is printed.
- *
- * @param data the message data
- * @param clientID the ID of the KMessageIO object that received the message
- * @param unknown true, if the message type is not known by the KMessageServer
- **/
- void messageReceived (const TQByteArray &data, TQ_UINT32 clientID, bool &unknown);
-
-protected:
- /**
- * @return A unique number which can be used as the id of a @ref KMessageIO. It is
- * incremented after every call so if you need the id twice you have to save
- * it anywhere. It's currently used to initialize newly connected clints only.
- **/
- TQ_UINT32 uniqueClientNumber() const;
-
-private:
- KMessageServerPrivate* d;
-};
-
-
-/**
- Internal class of KMessageServer. Creates a server socket and waits for
- connections.
-
- NOTE: This has to be here in the header file, because it is a subclass from
- TQObject and has to go through the tqmoc.
-
- @short An internal class for KServerSocket
- @author Burkhard Lehner <Burkhard.Lehner@gmx.de>
-*/
-class KMessageServerSocket : public TQServerSocket
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- KMessageServerSocket (TQ_UINT16 port, TQObject *parent = 0);
- ~KMessageServerSocket ();
-
- void newConnection (int socket);
-
-signals:
- void newClientConnected (KMessageIO *client);
-};
-
-
-
-#endif
diff --git a/libkdegames/kgame/kmessageserver.png b/libkdegames/kgame/kmessageserver.png
deleted file mode 100644
index 07fba6c5..00000000
--- a/libkdegames/kgame/kmessageserver.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/kgame/kplayer.cpp b/libkdegames/kgame/kplayer.cpp
deleted file mode 100644
index 965f5e83..00000000
--- a/libkdegames/kgame/kplayer.cpp
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-
-#include "kgame.h"
-#include "kgameio.h"
-#include "kplayer.h"
-#include "kgamemessage.h"
-#include "kgamepropertyhandler.h"
-
-#include <kdebug.h>
-#include <klocale.h>
-
-#include <tqbuffer.h>
-
-#include <stdio.h>
-#include <assert.h>
-
-#define KPLAYER_LOAD_COOKIE 7285
-
-class KPlayerPrivate
-{
-public:
- KPlayerPrivate()
- {
- mNetworkPlayer = 0;
- }
-
- TQ_UINT32 mId;
- bool mVirtual; // virtual player
- int mPriority; // tag for replacement
-
- KPlayer* mNetworkPlayer; // replacement player
-
- KGamePropertyHandler mProperties;
-
-// Playerdata
- KGamePropertyTQString mName;
- KGamePropertyTQString mGroup;
-};
-
-KPlayer::KPlayer() : TQObject(0,0)
-{
- init();
-}
-
-KPlayer::KPlayer(KGame* game) : TQObject(0, 0)
-{
- init();
- game->addPlayer(this);
-}
-
-void KPlayer::init()
-{
-// note that NO KGame object exists here! so we cannot use KGameProperty::send!
- kdDebug(11001) << k_funcinfo << ": this=" << this << ", sizeof(this)="<<sizeof(KPlayer) << endl;
- kdDebug(11001) << "sizeof(m_Group)="<<sizeof(d->mGroup)<<endl;
- d = new KPlayerPrivate;
-
- d->mProperties.registerHandler(KGameMessage::IdPlayerProperty,
- this,TQT_SLOT(sendProperty(int, TQDataStream&, bool*)),
- TQT_SLOT(emitSignal(KGamePropertyBase *)));
- d->mVirtual=false;
- mActive=true;
- mGame=0;
- d->mId=0; // "0" is always an invalid ID!
- d->mPriority=0;
- // I guess we cannot translate the group otherwise no
- // international conenctions are possible
-
- mUserId.registerData(KGamePropertyBase::IdUserId, this, i18n("UserId"));
- mUserId.setLocal(0);
- d->mGroup.registerData(KGamePropertyBase::IdGroup, this, i18n("Group"));
- d->mGroup.setLocal(i18n("default"));
- d->mName.registerData(KGamePropertyBase::IdName, this, i18n("Name"));
- d->mName.setLocal(i18n("default"));
-
- mAsyncInput.registerData(KGamePropertyBase::IdAsyncInput, this, i18n("AsyncInput"));
- mAsyncInput.setLocal(false);
- mMyTurn.registerData(KGamePropertyBase::IdTurn, this, i18n("myTurn"));
- mMyTurn.setLocal(false);
- mMyTurn.setEmittingSignal(true);
- mMyTurn.setOptimized(false);
-}
-
-KPlayer::~KPlayer()
-{
- kdDebug(11001) << k_funcinfo << ": this=" << this <<", id=" << this->id() << endl;
-
- // Delete IODevices
- KGameIO *input;
- while((input=mInputList.first()))
- {
- delete input;
- }
- if (game())
- {
- game()->playerDeleted(this);
- }
-
-// note: mProperties does not use autoDelete or so - user must delete objects
-// himself
- d->mProperties.clear();
- delete d;
-// kdDebug(11001) << k_funcinfo << " done" << endl;
-}
-
-bool KPlayer::forwardMessage(TQDataStream &msg,int msgid,TQ_UINT32 receiver,TQ_UINT32 sender)
-{
- if (!isActive())
- {
- return false;
- }
- if (!game())
- {
- return false;
- }
- kdDebug(11001) << k_funcinfo << ": to game sender="<<sender<<"" << "recv="<<receiver <<"msgid="<<msgid << endl;
- return game()->sendSystemMessage(msg,msgid,receiver,sender);
-}
-
-bool KPlayer::forwardInput(TQDataStream &msg,bool transmit,TQ_UINT32 sender)
-{
- if (!isActive())
- {
- return false;
- }
- if (!game())
- {
- return false;
- }
-
- kdDebug(11001) << k_funcinfo << ": to game playerInput(sender="<<sender<<")" << endl;
- if (!asyncInput() && !myTurn())
- {
- kdDebug(11001) << k_funcinfo << ": rejected cause it is not our turn" << endl;
- return false;
- }
-
- // AB: I hope I remember the usage correctly:
- // this function is called twice (on sender side) - once with transmit = true
- // where it sends the input to the comserver and once with transmit = false
- // where it really looks at the input
- if (transmit)
- {
- kdDebug(11001) << "indirect playerInput" << endl;
- return game()->sendPlayerInput(msg,this,sender);
- }
- else
- {
- kdDebug(11001) << "direct playerInput" << endl;
- return game()->systemPlayerInput(msg,this,sender);
- }
-}
-
-void KPlayer::setId(TQ_UINT32 newid)
-{
- // Needs to be after the sendProcess
- d->mId=newid;
-}
-
-
-void KPlayer::setGroup(const TQString& group)
-{ d->mGroup = group; }
-
-const TQString& KPlayer::group() const
-{ return d->mGroup.value(); }
-
-void KPlayer::setName(const TQString& name)
-{ d->mName = name; }
-
-const TQString& KPlayer::name() const
-{ return d->mName.value(); }
-
-TQ_UINT32 KPlayer::id() const
-{ return d->mId; }
-
-KGamePropertyHandler * KPlayer::dataHandler()
-{ return &d->mProperties; }
-
-void KPlayer::setVirtual(bool v)
-{ d->mVirtual = v; }
-
-bool KPlayer::isVirtual() const
-{ return d->mVirtual;}
-
-void KPlayer::setNetworkPlayer(KPlayer* p)
-{ d->mNetworkPlayer = p; }
-
-KPlayer* KPlayer::networkPlayer() const
-{ return d->mNetworkPlayer; }
-
-int KPlayer::networkPriority() const
-{ return d->mPriority; }
-
-void KPlayer::setNetworkPriority(int p)
-{ d->mPriority = p; }
-
-bool KPlayer::addGameIO(KGameIO *input)
-{
- if (!input)
- {
- return false;
- }
- mInputList.append(input);
- input->initIO(this); // set player and init device
- return true;
-}
-
-// input=0, remove all
-bool KPlayer::removeGameIO(KGameIO *targetinput,bool deleteit)
-{
- kdDebug(11001) << k_funcinfo << ": " << targetinput << " delete=" << deleteit<< endl;
- bool result=true;
- if (!targetinput) // delete all
- {
- KGameIO *input;
- while((input=mInputList.first()))
- {
- if (input) removeGameIO(input,deleteit);
- }
- }
- else
- {
-// kdDebug(11001) << "remove IO " << targetinput << endl;
- if (deleteit)
- {
- delete targetinput;
- }
- else
- {
- targetinput->setPlayer(0);
- result=mInputList.remove(targetinput);
- }
- }
- return result;
-}
-
-KGameIO * KPlayer::findRttiIO(int rtti) const
-{
- TQPtrListIterator<KGameIO> it(mInputList);
- while (it.current())
- {
- if (it.current()->rtti() == rtti)
- {
- return it.current();
- }
- ++it;
- }
- return 0;
-}
-
-int KPlayer::calcIOValue()
-{
- int value=0;
- TQPtrListIterator<KGameIO> it(mInputList);
- while (it.current())
- {
- value|=it.current()->rtti();
- ++it;
- }
- return value;
-}
-
-bool KPlayer::setTurn(bool b, bool exclusive)
-{
- kdDebug(11001) << k_funcinfo << ": " << id() << " (" << this << ") to " << b << endl;
- if (!isActive())
- {
- return false;
- }
-
- // if we get to do an exclusive turn all other players are disallowed
- if (exclusive && b && game())
- {
- KPlayer *player;
- KGame::KGamePlayerList *list=game()->playerList();
- for ( player=list->first(); player != 0; player=list->next() )
- {
- if (player==this)
- {
- continue;
- }
- player->setTurn(false,false);
- }
- }
-
- // Return if nothing changed
- mMyTurn = b;
-
- return true;
-}
-
-bool KPlayer::load(TQDataStream &stream)
-{
- TQ_INT32 id,priority;
- stream >> id >> priority;
- setId(id);
- setNetworkPriority(priority);
-
- // Load Player Data
- //FIXME: maybe set all properties setEmitSignal(false) before?
- d->mProperties.load(stream);
-
- TQ_INT16 cookie;
- stream >> cookie;
- if (cookie==KPLAYER_LOAD_COOKIE)
- {
- kdDebug(11001) << " Player loaded propertly"<<endl;
- }
- else
- {
- kdError(11001) << " Player loading error. probably format error"<<endl;
- }
-
- // emit signalLoad(stream);
- return true;
-}
-
-bool KPlayer::save(TQDataStream &stream)
-{
- stream << (TQ_INT32)id() << (TQ_INT32)networkPriority();
-
- d->mProperties.save(stream);
-
- stream << (TQ_INT16)KPLAYER_LOAD_COOKIE;
-
- //emit signalSave(stream);
- return true;
-}
-
-
-void KPlayer::networkTransmission(TQDataStream &stream,int msgid,TQ_UINT32 sender)
-{
- //kdDebug(11001) << k_funcinfo ": msgid=" << msgid << " sender=" << sender << " we are=" << id() << endl;
- // PlayerProperties processed
- bool issender;
- if (game())
- {
- issender=sender==game()->gameId();
- }
- else
- {
- issender=true;
- }
- if (d->mProperties.processMessage(stream,msgid,issender))
- {
- return ;
- }
- switch(msgid)
- {
- case KGameMessage::IdPlayerInput:
- {
- kdDebug(11001) << k_funcinfo << ": Got player move "
- << "KPlayer (virtual) forwards it to the game object" << endl;
- forwardInput(stream,false);
- }
- break;
- default:
- emit signalNetworkData(msgid - KGameMessage::IdUser,
- ((TQBuffer*)stream.device())->readAll(),sender,this);
- kdDebug(11001) << k_funcinfo << ": "
- << "User data msgid " << msgid << endl;
- break;
- }
-
-}
-
-KGamePropertyBase* KPlayer::findProperty(int id) const
-{
- return d->mProperties.find(id);
-}
-
-bool KPlayer::addProperty(KGamePropertyBase* data)
-{
- return d->mProperties.addProperty(data);
-}
-
-void KPlayer::sendProperty(int msgid, TQDataStream& stream, bool* sent)
-{
- if (game())
- {
- bool s = game()->sendPlayerProperty(msgid, stream, id());
- if (s)
- {
- *sent = true;
- }
- }
-}
-
-void KPlayer::emitSignal(KGamePropertyBase *me)
-{
- // Notify KGameIO (Process) for a new turn
- if (me->id()==KGamePropertyBase::IdTurn)
- {
- //kdDebug(11001) << k_funcinfo << ": for KGamePropertyBase::IdTurn " << endl;
- TQPtrListIterator<KGameIO> it(mInputList);
- while (it.current())
- {
- it.current()->notifyTurn(mMyTurn.value());
- ++it;
- }
- }
- emit signalPropertyChanged(me,this);
-}
-
-// --------------------- DEBUG --------------------
-void KPlayer::Debug()
-{
- kdDebug(11001) << "------------------- KPLAYER -----------------------" << endl;
- kdDebug(11001) << "this: " << this << endl;
- kdDebug(11001) << "rtti: " << rtti() << endl;
- kdDebug(11001) << "id : " << id() << endl;
- kdDebug(11001) << "Name : " << name() << endl;
- kdDebug(11001) << "Group: " << group() << endl;
- kdDebug(11001) << "Async: " << asyncInput() << endl;
- kdDebug(11001) << "myTurn: " << myTurn() << endl;
- kdDebug(11001) << "Virtual: " << isVirtual() << endl;
- kdDebug(11001) << "Active: " << isActive() << endl;
- kdDebug(11001) << "Priority:" << networkPriority() << endl;
- kdDebug(11001) << "Game : " << game() << endl;
- kdDebug(11001) << "#IOs: " << mInputList.count() << endl;
- kdDebug(11001) << "---------------------------------------------------" << endl;
-}
-
-#include "kplayer.moc"
diff --git a/libkdegames/kgame/kplayer.h b/libkdegames/kgame/kplayer.h
deleted file mode 100644
index 910781f3..00000000
--- a/libkdegames/kgame/kplayer.h
+++ /dev/null
@@ -1,472 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Martin Heni (martin@heni-online.de)
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KPLAYER_H_
-#define __KPLAYER_H_
-
-#include <tqstring.h>
-#include <tqobject.h>
-#include <tqptrlist.h>
-
-#include "kgameproperty.h"
-#include <kdemacros.h>
-
-class KGame;
-class KGameIO;
-class KGamePropertyBase;
-class KGamePropertyHandler;
-
-class KPlayerPrivate;
-
-/**
- * @short Base class for a game player
- *
- * The KPlayer class is the central player object. It holds
- * information about the player and is responsible for any
- * input the player does. For this arbitrary many KGameIO
- * modules can be plugged into it. Main features are:
- * - Handling of IO devices
- * - load/save (mostly handled by KGamePropertyHandler)
- * - Turn handling (turn based, asynchronous)
- *
- * A KPlayer depends on a KGame object. Call KGame::addPlayer() to plug
- * a KPlayer into a KGame object. Note that you cannot do much with a
- * KPlayer object before it has been plugged into a KGame. This is because
- * most properties of KPlayer are KGameProperty which need to send messages
- * through a KGame object to be changed.
- *
- * A KGameIO represents the input methods of a player and you should make all
- * player inputs through it. So call something like playerInput->move(4);
- * instead which should call KGameIO::sendInput() to actually move. This way
- * you gain a *very* big advantage: you can exchange a KGameIO whenever you
- * want! You can e.g. remove the KGameIO of a local (human) player and just
- * replace it by a computerIO on the fly! So from that point on all playerInputs
- * are done by the computerIO instead of the human player. You also can replace
- * all network players by computer players when the network connection is broken
- * or a player wants to quit.
- * So remember: use KGameIO whenever possible! A KPlayer should just
- * contain all data of the player (KGameIO must not!) and several common
- * functions which are shared by all of your KGameIOs.
- *
- */
-class KDE_EXPORT KPlayer : public TQObject
-{
- Q_OBJECT
- TQ_OBJECT
-
-public:
- typedef TQPtrList<KGameIO> KGameIOList;
-
- // KPlayer(KGame *,KGameIO * input=0);
- /**
- * Create a new player object. It will be automatically
- * deleted if the game it belongs to is deleted.
- */
- KPlayer();
-
- /**
- * Create a new player object. It will be automatically
- * deleted if the game it belongs to is deleted. This constructor
- * automatically adds the player to the game using KGame::addPlayer()
- */
- KPlayer(KGame* game);
-
- virtual ~KPlayer();
-
- /**
- * The idendification of the player. Overwrite this in
- * classes inherting KPlayer to run time identify them.
- *
- * @return 0 for default KPlayer.
- */
- virtual int rtti() const {return 0;}
-
- /**
- * Gives debug output of the game status
- */
- void Debug();
-
- // properties
- /**
- * Returns a list of input devices
- *
- * @return list of devices
- */
- KGameIOList *ioList() {return &mInputList;}
-
- /**
- * sets the game the player belongs to. This
- * is usually automatically done when adding a
- * player
- *
- * @param game the game
- */
- void setGame(KGame *game) {mGame=game;}
-
- /**
- * Query to which game the player belongs to
- *
- * @return the game
- */
- KGame *game() const {return mGame;}
-
- /**
- * Set whether this player can make turns/input
- * all the time (true) or only when it is its
- * turn (false) as it is used in turn based games
- *
- * @param a async=true turn based=false
- */
- void setAsyncInput(bool a) {mAsyncInput = a;}
-
- /**
- * Query whether this player does asynchronous
- * input
- *
- * @return true/false
- */
- bool asyncInput() const {return mAsyncInput.value();}
-
- /**
- * Is this player a virtual player, ie is it
- * created by mirroring a real player from another
- * network game. This mirroring is done autmatically
- * as soon as a network connection is build and it affects
- * all players regardless what type
- *
- * @return true/false
- */
- bool isVirtual() const;
-
- /**
- * @internal
- * Sets whether this player is virtual. This is internally
- * called
- *
- * @param v virtual true/false
- */
- void setVirtual(bool v);
-
- /**
- * Is this player an active player. An player is usually
- * inactivated if it is replaced by a network connection.
- * But this could also be called manually
- *
- * @return true/false
- */
- bool isActive() const {return mActive;}
-
- /**
- * Set an player as active (true) or inactive (false)
- *
- * @param v true=active, false=inactive
- */
- void setActive(bool v) {mActive=v;}
-
- /**
- * Returns the id of the player
- *
- * @return the player id
- */
- TQ_UINT32 id() const;
-
- /* Set the players id. This is done automatically by
- * the game object when adding a new player!
- *
- * @param i the player id
- */
- void setId(TQ_UINT32 i);
-
- /**
- * Returns the user defined id of the player
- * This value can be used arbitrary by you to
- * have some user idendification for your player,
- * e.g. 0 for a white chess player, 1 for a black
- * one. This value is more reliable than the player
- * id whcih can even change when you make a network
- * connection.
- *
- * @return the user defined player id
- */
- int userId() const {return mUserId.value();}
-
- /* Set the user defined players id.
- *
- * @param i the user defined player id
- */
- void setUserId(int i) {mUserId = i;}
-
- /**
- * Returns whether this player can be replaced by a network
- * connection player. The name of this function can be
- * improved ;-) If you do not overwrite the function to
- * select what players shall play in a network the KGame
- * does an automatic selection based on the networkPriority
- * This is not a terrible important function at the moment.
- *
- * @return true/false
- */
- int networkPriority() const;
-
- /**
- * Set whether this player can be replaced by a network
- * player. There are to possible games. The first type
- * of game has arbitrary many players. As soon as a network
- * players connects the game runs with more players (not tagged
- * situation). The other type is e.g. games like chess which
- * require a constant player number. In a network game situation
- * you would tag one or both players of all participants. As
- * soon as the connect the tagged player will then be replaced
- * by the network partner and it is then controlled over the network.
- * On connection loss the old situation is automatically restored.
- *
- * The name of this function can be improved;-)
- *
- * @param b should this player be tagged
- */
- void setNetworkPriority(int b);
-
- /**
- * Returns the player which got inactivated to allow
- * this player to be set up via network. Mostly internal
- * function
- */
- KPlayer *networkPlayer() const;
-
- /**
- * Sets this network player replacement. Internal stuff
- */
- void setNetworkPlayer(KPlayer *p);
-
- // A name and group the player belongs to
- /**
- * A group the player belongs to. This
- * Can be set arbitrary by you.
- */
- void setGroup(const TQString& group);
-
- /**
- * Query the group the player belongs to.
- */
- virtual const TQString& group() const;
-
- /**
- * Sets the name of the player.
- * This can be chosen arbitrary.
- * @param name The player's name
- */
- void setName(const TQString& name);
-
- /**
- * @return The name of the player.
- */
- virtual const TQString& name() const;
-
-
- // set devices
- /**
- * Adds an IO device for the player. Possible KGameIO devices
- * can either be taken from the existing ones or be self written.
- * Existing are e.g. Keyboard, Mouse, Computerplayer
- *
- * @param input the inut device
- * @return true if ok
- */
- bool addGameIO(KGameIO *input);
-
- /**
- * remove (and delete) a game IO device
- *
- * The remove IO(s) is/are deleted by default. If
- * you do not want this set the parameter deleteit to false
- *
- * @param input the device to be removed or 0 for all devices
- * @param deleteit true (default) to delete the device otherwisse just remove it
- * @return true on ok
- */
- bool removeGameIO(KGameIO *input=0,bool deleteit=true);
-
- /**
- * Finds the KGameIO devies with the given rtti code.
- * E.g. find the mouse or network device
- *
- * @param rtti the rtti code to be searched for
- * @return the KGameIO device
- */
- KGameIO *findRttiIO(int rtti) const;
-
- /**
- * Checks whether this player has a IO device of the
- * given rtti type
- *
- * @param rtti the rtti typed to be checked for
- * @return true if it exists
- */
- bool hasRtti(int rtti) const {return findRttiIO(rtti)!=0;}
-
- // Message exchange
- /**
- * Forwards input to the game object..internal use only
- *
- * This method is used by KGameIO::sendInput(). Use that function
- * instead to send player inputs!
- *
- * This function forwards a player input (see KGameIO classes) to the
- * game object, see KGame, either to KGame::sendPlayerInput() (if
- * transmit=true, ie the message has just been created) or to
- * KGame::playerInput() (if player=false, ie the message *was* sent through
- * KGame::sendPlayerInput).
- */
- virtual bool forwardInput(TQDataStream &msg,bool transmit=true, TQ_UINT32 sender=0);
-
- /**
- * Forwards Message to the game object..internal use only
- */
- virtual bool forwardMessage(TQDataStream &msg,int msgid,TQ_UINT32 receiver=0,TQ_UINT32 sender=0);
-
- // Game logic
- /**
- * is it my turn to go
- *
- * @return true/false
- */
- bool myTurn() const {return mMyTurn.value();}
-
- /**
- * Sets whether this player is the next to turn.
- * If exclusive is given all other players are set
- * to setTurn(false) and only this player can move
- *
- * @param b true/false
- * @param exclusive true (default)/ false
- * @return should be void
- */
- bool setTurn(bool b,bool exclusive=true);
-
-
- // load/save
- /**
- * Load a saved player, from file OR network. By default all
- * KGameProperty objects in the dataHandler of this player are loaded
- * and saved when using load or save. If you need to save/load more
- * you have to replace this function (and save). You will probably
- * still want to call the default implementation additionally!
- *
- * @param stream a data stream where you can stream the player from
- *
- * @return true?
- */
- virtual bool load(TQDataStream &stream);
-
- /**
- * Save a player to a file OR to network. See also load
- *
- * @param stream a data stream to load the player from
- *
- * @return true?
- */
- virtual bool save(TQDataStream &stream);
-
- /**
- * Receives a message
- * @param msgid The kind of the message. See messages.txt for further
- * information
- * @param stream The message itself
- * @param sender
- **/
- void networkTransmission(TQDataStream &stream,int msgid,TQ_UINT32 sender);
-
- /**
- * Searches for a property of the player given its id.
- * @param id The id of the property
- * @return The property with the specified id
- **/
- KGamePropertyBase* findProperty(int id) const;
-
- /**
- * Adds a property to a player. You would add all
- * your player specific game data as KGameProperty and
- * they are automatically saved and exchanged over network.
- *
- * @param data The property to be added. Must have an unique id!
- * @return false if the given id is not valid (ie another property owns
- * the id) or true if the property could be added successfully
- **/
- bool addProperty(KGamePropertyBase* data);
-
- /**
- * Calculates a checksum over the IO devices. Can be used to
- * restore the IO handlers. The value returned is the 'or'ed
- * value of the KGameIO rtti's.
- * this is itnernally used for saving and restorign a player.
- */
- int calcIOValue();
-
- /**
- * @return the property handler
- */
- KGamePropertyHandler* dataHandler();
-
-signals:
- /**
- * The player object got a message which was targeted
- * at it but has no default method to process it. This
- * means probably a user message. Connecting to this signal
- * allowed to process it.
- */
- void signalNetworkData(int msgid, const TQByteArray& buffer, TQ_UINT32 sender, KPlayer *me);
-
- /**
- * This signal is emmited if a player property changes its value and
- * the property is set to notify this change. This is an
- * important signal as you should base the actions on a reaction
- * to this property changes.
- */
- void signalPropertyChanged(KGamePropertyBase *property,KPlayer *me);
-
-protected slots:
- /**
- * Called by KGameProperty only! Internal function!
- **/
- void sendProperty(int msgid, TQDataStream& stream, bool* sent);
- /**
- * Called by KGameProperty only! Internal function!
- **/
- void emitSignal(KGamePropertyBase *me);
-
-
-private:
- void init();
-
-private:
- KGame *mGame;
- bool mActive; // active player
- KGameIOList mInputList;
-
- // GameProperty // AB: I think we can't move them to KPlayerPrivate - inline
- // makes sense here
- KGamePropertyBool mAsyncInput; // async input allowed
- KGamePropertyBool mMyTurn; // Is it my turn to play (only useful if not async)?
- KGamePropertyInt mUserId; // a user defined id
-
- KPlayerPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgame/libkdegames.html b/libkdegames/kgame/libkdegames.html
deleted file mode 100644
index a715a239..00000000
--- a/libkdegames/kgame/libkdegames.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<html>
- <head>
- <title>Documentation for libtdegames</title>
- <meta content="">
- <style></style>
- </head>
- <body>
- <H1>Documentation for the classes in libtdegames</H1>
-<!-------------------------------------------------------------------------------->
- <H3>Design Principles</H3>
- The library <em>tdegames</em> contains a collection of classes that can be used
- to develop games using the KDE environment very easily. There are a few
- principles that were used when developing the library:<P>
-
- <UL>
- <LI><b>usable for a big variety of games</b><br>
- The class <em>KGame</em> provides many features that are needed in many games.
- It can be used for board games, card games, maze games, simulation games, strategy games and
- many more.<br>
- It does not (yet) include special features for realtime games, but can be used there, too.
- <LI><b>features one-player and multi-player games</b></br>
- A game developed with this library can easily support any number of simultaneous players.
- So use it for one-player games (like Tetris or KSame), for two-player games (like TicTacToe
- or chess) or for games with an arbitrary number of players.
- <LI><b>computer players can easily be developed</b><br>
- The class <em>KPlayer</em> represents an abstract player in a game. This can be a
- human player that gets the input from the mouse or the keyboard. Or it can be a computer
- player that makes moves by random or with artificial intelligence. All this can be achieved
- subclassing KPlayer.
- <LI><b>support for network games transparently</b><br>
- The class <em>KGame</em> contains lots of features for network game support. Developing
- a network game using a TCP/IP connection is very easy this way. But the default
- case is still the local game. So the user should not need to connect to the internet
- or to select a game server to play a game.
- <LI><b>support for turn based and for asynchronous games</b><br>
- You can use this library for turn based games, when only one player can make a move at a time
- (like most bord games or card games), but also for asynchronous games, when every player can
- make a move any time (like many action games).
- </UL>
-<!-------------------------------------------------------------------------------->
- <H3>The central game class: <em>KGame</em></H3>
-
- When you want to develop your own KDE game using the KDE games library, you most likely want
- to use the <em>KGame</em> class. There are two possible ways to extend it to your own needs:
- Create a subclass and overwrite the virtual methods, or simply create an instance of KGame
- and connect to the appropriate signals.<P>
-
- &lt;&lt;more code about KGame, an easy example&gt;&gt;
-
-<!-------------------------------------------------------------------------------->
- <H3>Network games and related classes</H3>
-
- One of the main principles in the design of <em>KGame</em> was to make network games possible
- with a minimum of effort for the game developer.<P>
-
- A network game is a game with usually several players, that are on different computers. These
- computers are usually connected to the internet, and all the moves a player does are exchanged
- over this network.<P>
-
- The exchange of moves and other information is done using the class <em>KMessageServer</em>.
- An object of this class is a server that waits for connections. Someone who wants to take part
- in the game has to connect to this server - usually using an internet socket connection. He does
- this by creating a <em>KMessageClient</em> object. This object connects to the message server.<P>
-
- The transfer of data is realised by subclasses of the abstract class <em>KMessageIO</em>. One object
- of this class is created on the client side, one on the server side. Different types of networks can
- be supported by creating new subclasses of KMessageIO. There are already two subclasses of KMessageIO:
- <em>KMessageSocket</em> uses a internet socket connection to transfer the data from the message client
- to the message server or vice versa. <em>KMessageDirect</em> can be used if both the message server and
- the message client are within the same process. The data blocks are copied directly to the other side,
- so the transfer is faster and needs no network bandwidth.<P>
-
- A typical network game situation could look like this:<P>
-
- <IMG SRC="kmessageserver.png"><P>
-
- Here, three KGame object (called message clients) are connected to the KMessageServer object. One
- is in the same process, so it uses KMessageDirect. The other two use KMessageSocket, so an internet
- socket connection is used. KGame doesn't talk directly to the message server, but uses a KMessageClient
- object instead. One of the KMessageClient objects is the admin of the message server. This client has some
- priviledges. It may e.g. kill the connection to other message clients, or limit the number of clients
- that may connect.<P>
-
- The KGame objects are by default all equal. So the usual approach will be that every KGame object will
- store the complete status of the game, and any change or move will be broadcasted to the other KGame
- objects, so that they all change the status in identical ways. Sometimes it may be necessary (or just
- easier to implement) that one KGame object is a <em>game server</em> (i.e. he is repsonsible for everything,
- he coordinates the complete game and stores the game status), whereas the other KGame objects are
- only dumb stubs that are used to contact the <em>game server</em>. You can implement both approaches
- using the message server structure. If you need to elect the KGame object that shall be
- the game server, you may e.g. use the one that has the KMessageClient that is the admin of the message
- server. (Of course this is only a suggestion, you can use other approaches.)<P>
-
- The main principle when developing the message server/client structure was, that the message server
- doesn't have <em>any</em> idea of the game and its rules that is played. The message server only forwards
- messages from one message client to the others without interpreting or manipulating the data. So always
- keep in mind that the message server is <em>not</em> a game server! It does not store any data about
- the game status. It is only a server for network connections and message broadcasting, <em>not</em>
- for game purposes. The reason for this principle is, that <em>any</em> game can be played using a
- KMessageServer on any computer. The computer being the message server doesn't need to know anything
- about the game that is played on it. So you don't have to install new versions of the game there. Only
- the clients need to be game specific.<P>
-
- Usually you don't need to create <em>KMessageServer</em> or <em>KMessageClient</em> objects in your game,
- since <em>KGame</em> does this for you. There are three different scenarios fo network games that are
- all supported in <em>KGame</em>:<P>
-
- <b>Scenario 1: local game</b><P>
-
- The local game should always be the default state a game should be in. To avoid having this scenario
- as a special case, <em>KGame</em> automatically creates a KMessageServer object and a KMessageClient
- object. So every change and every move is sent to the message server and is returned to the KGame
- object before it is processed. Since the connection between the message client and the message server
- uses KMessageDirect the data transfer is very fast and wont hurt in most cases.<P>
-
- <IMG SRC="scenario0.png"><P>
-
- This is the default situation right after creating the <em>KGame</em> object.<P>
-
- <b>Scenario 2: network game, started by one player</b><P>
-
- If one user is bored of playing alone, he can open his game for connections from the outside world.
- He listens to a TCP/IP socket port (i.e. a number between 0 and 65535). Other players can create
- KGame objects of their own and connect to this port. They need to know the IP address of that computer
- and the port number. This situation will have this structure:
-
- <IMG SRC="scenario1.png"><P>
-
- The first player has to do something like:<P>
-
- <PRE>
- KGame *myGame = new KGame ();
- // wait for connections on port 12345
- myGame->offerConnections (12345);
- </PRE>
-
- And the other players have to do something like:<P>
-
- <PRE>
- KGame *myGame = new KGame ();
- // connect to the message server
- myGame->connectToServer ("theServer.theDomain.com", 12345);
- </PRE>
-
- This automatically removes the message server in these KGame objects and connects to the given
- one instead.<P>
-
- <b>Scenario 3: network game, using a stand alone message server</b><P>
-
- Sometimes it is not possible to let the message server run on one of the players computer. If e.g. all
- the players have their computer in a local network that uses masquerading to contact the internet,
- other computers cannot connect to them since the computer doesn't have a IP address to the outside
- world. Then the only way to play a network game is to have a standalone KMessageServer object on
- another server computer (somthing like "games.kde.org" e.g.). Since the KMessageServer isn't game
- specific at all, every game can be played using it. There doesn't have to be any special software
- installed on that server computer, only the program creating a KMessageServer object.<P>
-
- This scenario has some more advantages: The message server can be a well known meeting point to
- start a game. This way one could play games against other players you never knew before. Furthermore
- the game is stopped brutally when the program that contains the message server in scenario 2 is
- quitted. (Migration of message servers is not yet implemented, but may be in the future.) Using a
- stand alone message server, the players may enter and leave the game as they want.
-
- <IMG SRC="scenario2.png"><P>
-
- To create this scenario, a special KMessageServer program has to be started on the computer
- that shall be the stand alone message server:<P>
-
- <PRE>
- % kmessageserver -port=12345
- </PRE>
-
- The other games that want to connect have to do this (supposed the stand alone message server
- has the IP address "games.kde.org"):<P>
-
- <PRE>
- KGame *myGame = new KGame ();
- // connect to the message server
- myGame->connectToServer ("games.kde.org", 12345);
- </PRE>
-
-
-
-
-<!-------------------------------------------------------------------------------->
- </body>
-</html> \ No newline at end of file
diff --git a/libkdegames/kgame/messages.txt b/libkdegames/kgame/messages.txt
deleted file mode 100644
index c42d2d91..00000000
--- a/libkdegames/kgame/messages.txt
+++ /dev/null
@@ -1,93 +0,0 @@
-Message formats of libtdegames:
--------------------------------
-
-There are two different communication layers, using their own protocols:
-
- - the message layer (KMessageIO, KMessageServer, KMessageClient)
-
- This is used to send messages from one client (i.e. KGame object)
- to an other one, to a group of other clients, or to all the clients
- connected to the KMessageServer. The messages are arbitrary blocks
- of data, of an arbitrary length.
- This layer is an underlying protocol that isn't game specific at all.
- You shouldn't need to know the message format of the packets. If you
- want to extend the protocol, have a look into KMessageServer API
- reference for a complete list of message types.
-
- - the game layer (KGame, KGameIO, KPlayer)
-
- This layer uses the message layer to send its specific message packets
- between the objects of the game.
- This layer contains the game specific messages (e.g. addPlayer, setupGame).
- The rest of this file describes this layer.
-
-
-Game Layer Messages:
---------------------
-
- Application Cookie 16 Bit
- Version 8 Bit
- MsgId 16 Bit
- SenderId 16 Bit
- ReceiverId 16 Bit
- Userdata
-
-The format of the messages is used internally and there is usually no reason why
-you have to know what it is used for. But as usually != always here are some
-comments on the format. Note that KGame is under development and the content of
-this file could be obsolete. Please result the sourcecode for up-to-date
-information.
-Application Cookie is used to identify the application. This prevents a
-chess game from talking to a poker game.
-Version is the version of KNetworkGame, sender and receiver must be of the same
-version.
- library note: this could be a limitation, as KGame should be backward
- compatible. Maybe change to version must be >= KNETWORKGAME or something less
- restrictive
-MsgId specifies the kind of the message data (see below).
-SenderId is the id of the KGame/KPlayer object which sent the message, it is
-coded like this: the lower 10 bits specify a player and the upper bit
-represent the game id shifted by 10 bits. So we get
-Id=playerId | (gameId<<10);
-ReceiverId is the id of the receiver of the message. It can be either
-a player, a game or a broadcast. For a broadcast the Id is set to 0
-in the other cases the coding is as with the senderId
-Userdata is the data of the user (wow ;-))
-
-
-MsgId UserData
----------------------------------------------------------
-IdMessage user defined
-
-IdSetupGame Q_INT32 isServer
- Q_INT32 maxPlayers
- Q_INT32 newid (id for the new game)
- Q_INT32 cntR (virtual player nunmber)
- Q_INT32 cntT (tagged player number)
- TODO: Changed
-
-IdContinueSetup: TODO
-
-IdSendPlayer Q_INT32 omit how many tagged players for replacement
- TODO: Changed
-
-IdGameSave Save(msg)->Load(msg)
-
-IdAddPlayer rtti
- gameid() of the owner
- player->Save(msg) -> player->Load(msg)
-
-IdRemovePlayer Q_INT16 playerid
-
-IdError Q_INT32 errorcode
- QString errortext
-
-IdGametqStatus Q_INT32 status
-
-IdPlayerProperty Q_INT16 propertyId
- user defined -> the property
-
-IdGameProperty Q_INT16 propertyId
- user defined -> the property
-
-IdPlayerInput user defined
diff --git a/libkdegames/kgame/scenario0.png b/libkdegames/kgame/scenario0.png
deleted file mode 100644
index 4de99b52..00000000
--- a/libkdegames/kgame/scenario0.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/kgame/scenario1.png b/libkdegames/kgame/scenario1.png
deleted file mode 100644
index 74af4f6f..00000000
--- a/libkdegames/kgame/scenario1.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/kgame/scenario2.png b/libkdegames/kgame/scenario2.png
deleted file mode 100644
index 14ea0a3c..00000000
--- a/libkdegames/kgame/scenario2.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/kgamelcd.cpp b/libkdegames/kgamelcd.cpp
deleted file mode 100644
index cf079a15..00000000
--- a/libkdegames/kgamelcd.cpp
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kgamelcd.h"
-#include "kgamelcd.moc"
-
-#include <tqlayout.h>
-#include <tqlabel.h>
-#include <tqtimer.h>
-
-#include <kglobal.h>
-
-
-//-----------------------------------------------------------------------------
-KGameLCD::KGameLCD(uint nbDigits, TQWidget *parent, const char *name)
- : TQLCDNumber(nbDigits, parent, name), _htime(800)
-{
- const TQPalette &p = palette();
- _fgColor = p.color(TQPalette::Active, TQColorGroup::Foreground);
- _hlColor = p.color(TQPalette::Active, TQColorGroup::HighlightedText);
-
- _timer = new TQTimer(this);
- connect(_timer, TQT_SIGNAL(timeout()), TQT_SLOT(timeout()));
-
- setFrameStyle(Panel | Plain);
- setSegmentStyle(Flat);
-
- displayInt(0);
-}
-
-KGameLCD::~KGameLCD()
-{}
-
-void KGameLCD::setDefaultBackgroundColor(const TQColor &color)
-{
- TQPalette p = palette();
- p.setColor(TQColorGroup::Background, color);
- setPalette(p);
-}
-
-void KGameLCD::setDefaultColor(const TQColor &color)
-{
- _fgColor = color;
- TQPalette p = palette();
- p.setColor(TQColorGroup::Foreground, color);
- setPalette(p);
-}
-
-void KGameLCD::setHighlightColor(const TQColor &color)
-{
- _hlColor = color;
-}
-
-void KGameLCD::setLeadingString(const TQString &s)
-{
- _lead = s;
- displayInt(0);
-}
-
-void KGameLCD::setHighlightTime(uint time)
-{
- _htime = time;
-}
-
-void KGameLCD::resetColor()
-{
- setColor(TQColor());
-}
-
-void KGameLCD::setColor(const TQColor &color)
-{
- const TQColor &c = (color.isValid() ? color : _fgColor);
- TQPalette p = palette();
- p.setColor(TQColorGroup::Foreground, c);
- setPalette(p);
-}
-
-void KGameLCD::displayInt(int v)
-{
- int n = numDigits() - _lead.length();
- display(_lead + TQString::number(v).rightJustify(n));
-}
-
-void KGameLCD::highlight()
-{
- highlight(true);
- _timer->start(_htime, true);
-}
-
-void KGameLCD::highlight(bool light)
-{
- if (light) setColor(_hlColor);
- else resetColor();
-}
-
-//-----------------------------------------------------------------------------
-KGameLCDClock::KGameLCDClock(TQWidget *parent, const char *name)
-: KGameLCD(5, parent, name)
-{
- _timerClock = new TQTimer(this);
- connect(_timerClock, TQT_SIGNAL(timeout()), TQT_SLOT(timeoutClock()));
-}
-
-KGameLCDClock::~KGameLCDClock()
-{}
-
-void KGameLCDClock::timeoutClock()
-{
- // waiting an hour does not restart timer
- if ( _min==59 && _sec==59 ) return;
- _sec++;
- if (_sec==60) {
- _min++;
- _sec = 0;
- }
- showTime();
-}
-
-TQString KGameLCDClock::pretty() const
-{
- TQString sec = TQString::number(_sec).rightJustify(2, '0', true);
- TQString min = TQString::number(_min).rightJustify(2, '0', true);
- return min + ':' + sec;
-}
-
-void KGameLCDClock::showTime()
-{
- display(pretty());
-}
-
-void KGameLCDClock::reset()
-{
- _timerClock->stop();
- _sec = 0;
- _min = 0;
- showTime();
-}
-
-void KGameLCDClock::start()
-{
- _timerClock->start(1000); // 1 second
-}
-
-void KGameLCDClock::stop()
-{
- _timerClock->stop();
-}
-
-uint KGameLCDClock::seconds() const
-{
- return _min*60 + _sec;
-}
-
-void KGameLCDClock::setTime(uint sec)
-{
- Q_ASSERT( sec<3600 );
- _sec = sec % 60;
- _min = sec / 60;
- showTime();
-}
-
-void KGameLCDClock::setTime(const TQString &s)
-{
- Q_ASSERT( s.length()==5 && s[2]==':' );
- uint min = kMin(s.section(':', 0, 0).toUInt(), uint(59));
- uint sec = kMin(s.section(':', 1, 1).toUInt(), uint(59));
- setTime(sec + min*60);
-}
-
-
-//-----------------------------------------------------------------------------
-class KGameLCDList::KGameLCDListPrivate
-{
-public:
- TQValueVector<TQLabel *> _leadings;
-};
-
-KGameLCDList::KGameLCDList(const TQString &title, TQWidget *parent,
- const char *name)
- : TQWidget(parent, name)
-{
- init(title);
-}
-
-KGameLCDList::KGameLCDList(TQWidget *parent, const char *name)
- : TQWidget(parent, name)
-{
- init(TQString());
-}
-
-KGameLCDList::~KGameLCDList()
-{
- delete d;
-}
-
-void KGameLCDList::init(const TQString &title)
-{
- d = new KGameLCDListPrivate;
-
- TQGridLayout *top = new TQGridLayout(this, 1, 2, 5);
- top->setColStretch(1, 1);
-
- _title = new TQLabel(title, this);
- _title->tqsetAlignment(AlignCenter);
- top->addMultiCellWidget(_title, 0, 0, 0, 1, AlignCenter);
-}
-
-void KGameLCDList::append(TQLCDNumber *lcd)
-{
- append(TQString(), lcd);
-}
-
-void KGameLCDList::append(const TQString &leading, TQLCDNumber *lcd)
-{
- uint i = size();
- TQLabel *label = 0;
- if ( !leading.isEmpty() ) {
- label = new TQLabel(leading, this);
- static_cast<TQGridLayout *>(tqlayout())->addWidget(label, i+1, 0);
- }
- d->_leadings.push_back(label);
- _lcds.push_back(lcd);
- static_cast<TQGridLayout *>(tqlayout())->addWidget(lcd, i+1, 1);
-}
-
-void KGameLCDList::clear()
-{
- for (uint i=0; i<_lcds.size(); i++) {
- delete d->_leadings[i];
- delete _lcds[i];
- }
- d->_leadings.clear();
- _lcds.clear();
-}
diff --git a/libkdegames/kgamelcd.h b/libkdegames/kgamelcd.h
deleted file mode 100644
index 6b84f012..00000000
--- a/libkdegames/kgamelcd.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001,2002,2003 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGAMELCD_H
-#define __KGAMELCD_H
-
-#include <tqlcdnumber.h>
-#include <tqvaluevector.h>
-#include <kdemacros.h>
-
-class TQLabel;
-class TQTimer;
-
-//-----------------------------------------------------------------------------
-/**
- * This class is a visually enhanced @ref TQLCDNumber:
- * <ul>
- * <li> It can show an additional string before the integer being
- * displayed.</li>
- * <li> Its foreground and background colors can easily be modified. </li>
- * <li> It can be highlighted for a short time. </li>
- * </ul>
- *
- * @since 3.2
- */
-class KDE_EXPORT KGameLCD : public TQLCDNumber
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameLCD(uint nbDigits, TQWidget *parent = 0, const char *name = 0);
-
- ~KGameLCD();
-
- /**
- * Set the default background color.
- */
- void setDefaultBackgroundColor(const TQColor &color);
-
- /**
- * Set the default foreground color.
- */
- void setDefaultColor(const TQColor &color);
-
- /**
- * Set highlight color.
- */
- void setHighlightColor(const TQColor &color);
-
- /**
- * Set the string that will be displayed before the integer number to be
- * displayed. By default this string is null.
- */
- void setLeadingString(const TQString &s);
-
- /**
- * Set the highlight duration in milliseconds. The default value is
- * 800 milliseconds.
- */
- void setHighlightTime(uint time);
-
- /**
- * Reset the foreground color to the default one.
- */
- void resetColor();
-
- /**
- * Set the foreground color.
- */
- void setColor(const TQColor &color);
-
-public slots:
- /**
- * Highlight the LCD with the TQColorGourp::HighlightedText color
- * for a small time (setHighlightTime).
- */
- void highlight();
-
- /**
- * Display the given integer with the (optionnal) leading string.
- *
- * Note: we cannot use display(int) since TQLCDNumber::display is
- * not virtual... And you cannot use TQLCDNumber::intValue() to retrieve
- * the given value.
- */
- void displayInt(int value);
-
-private slots:
- void timeout() { highlight(false); }
-
-private:
- TQColor _fgColor, _hlColor;
- TQString _lead;
- uint _htime;
- TQTimer *_timer;
-
- class KGameLCDPrivate;
- KGameLCDPrivate *d;
-
- void highlight(bool light);
-
-};
-
-//-----------------------------------------------------------------------------
-/**
- * This class is a digital clock widget. It has a maximum duration of
- * 3599 seconds (one hour) and it gets updated every second.
- *
- * @since 3.2
- */
-class KDE_EXPORT KGameLCDClock : public KGameLCD
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- KGameLCDClock(TQWidget *parent = 0, const char *name = 0);
-
- ~KGameLCDClock();
-
- /**
- * @return the total number of seconds elapsed.
- */
- uint seconds() const;
-
- /**
- * @return the time as a string to be displayed: "mm:ss".
- */
- TQString pretty() const;
-
- /**
- * Set the time.
- */
- void setTime(uint seconds);
-
- /**
- * Set the time (format should be "mm:ss").
- */
- void setTime(const TQString &s);
-
-public slots:
- /**
- * Stop the clock and reset it to zero.
- */
- virtual void reset();
-
- /**
- * Stop the clock but do not reset it to zero.
- */
- virtual void stop();
-
- /**
- * Start the clock from the current time.
- */
- virtual void start();
-
-protected slots:
- virtual void timeoutClock();
-
-private:
- TQTimer *_timerClock;
- uint _sec, _min;
-
- class KGameLCDClockPrivate;
- KGameLCDClockPrivate *d;
-
- void showTime();
-};
-
-//-----------------------------------------------------------------------------
-/**
- * This widget holds a list of @ref TQLCDNumber arranged in a vertical tqlayout.
- * It also shows a label at the top of the list.
- *
- * @since 3.2
- */
-class KDE_EXPORT KGameLCDList : public TQWidget
-{
- Q_OBJECT
- TQ_OBJECT
-public:
- /**
- * Constructor.
- *
- * @param title is the content of the top label.
- * @param parent passed to the TQWidget constructor
- * @param name passed to the TQWidget constructor
- */
- KGameLCDList(const TQString &title,
- TQWidget *parent = 0, const char *name = 0);
- KGameLCDList(TQWidget *parent = 0, const char *name = 0);
-
- ~KGameLCDList();
-
- /**
- * Append a TQLCDNumber at the bottom of the list.
- * The TQLCDNumber should have the KGameLCDList as parent.
- */
- void append(TQLCDNumber *lcd);
-
- /**
- * Append a TQLCDNumber at the bottom of the list.
- * The TQLCDNumber should have the KGameLCDList as parent.
- */
- void append(const TQString &leading, TQLCDNumber *lcd);
-
- /**
- * Delete all @ref TQLCDNumber and clear the list.
- */
- void clear();
-
- /**
- * @return the title label.
- */
- TQLabel *title() const { return _title; }
-
- /**
- * @return the TQLCDNumber at index @param i
- */
- TQLCDNumber *lcd(uint i) const { return _lcds[i]; }
-
- /**
- * @return the number of TQLCDNumber in the list.
- */
- uint size() const { return _lcds.size(); }
-
-private:
- TQLabel *_title;
- TQValueVector<TQLCDNumber *> _lcds;
-
- class KGameLCDListPrivate;
- KGameLCDListPrivate *d;
-
- void init(const TQString &title);
-};
-
-#endif
diff --git a/libkdegames/kgamemisc.cpp b/libkdegames/kgamemisc.cpp
deleted file mode 100644
index 1c318476..00000000
--- a/libkdegames/kgamemisc.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-
-#include <tqstringlist.h>
-
-#include <krandomsequence.h>
-#include <klocale.h>
-
-#include "kgamemisc.h"
-
-class KGameMiscPrivate
-{
-public:
- KGameMiscPrivate()
- {
- }
-
-};
-
-KGameMisc::KGameMisc()
-{
-// not yet used
-// d = new KGamePrivate;
-}
-
-KGameMisc::~KGameMisc()
-{
- // don't forget to delete it as soon as it is used!
-// delete d;
-}
-
-TQString KGameMisc::randomName()// do we need i18n? I think yes
-{
- TQStringList names = TQStringList::split( TQChar(' '),
- i18n( "A list of language typical names ( for games ), separated by spaces",
- "Adam Alex Andreas Andrew Bart Ben Bernd Bill "
- "Chris Chuck Daniel Don Duncan Ed Emily Eric "
- "Gary Greg Harry Ian Jean Jeff Jan Kai Keith Ken "
- "Kirk Marc Mike Neil Paul Rik Robert Sam Sean "
- "Thomas Tim Walter" ) );
- KRandomSequence random;
- return *names.at( random.getLong( names.count() ) );
-}
diff --git a/libkdegames/kgamemisc.h b/libkdegames/kgamemisc.h
deleted file mode 100644
index 694a6a00..00000000
--- a/libkdegames/kgamemisc.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*
- $Id$
-*/
-#ifndef __KGAMEMISC_H__
-#define __KGAMEMISC_H__
-
-#include <tqstring.h>
-#include <kdemacros.h>
-class KGameMiscPrivate;
-/**
- * This class contains several (usually static) functions I really did not know
- * a class for. If you know a class for any of these member s please drop one of
- * the above copyright holders a mail (or just kde-games-devel@kde.org)
- **/
-class KDE_EXPORT KGameMisc
-{
-public:
- KGameMisc();
- ~KGameMisc();
-
- static TQString randomName();
-
-private:
- KGameMiscPrivate* d;
-};
-
-#endif
diff --git a/libkdegames/kgameprogress.cpp b/libkdegames/kgameprogress.cpp
deleted file mode 100644
index 98876aa3..00000000
--- a/libkdegames/kgameprogress.cpp
+++ /dev/null
@@ -1,345 +0,0 @@
-/* This file is part of the KDE libraries
- Copyright (C) 1996 Martynas Kunigelis
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/**
- * KGameProgress -- a progress indicator widget for KDE.
- */
-
-#include <tqpainter.h>
-#include <tqpixmap.h>
-#include <tqstring.h>
-#include <tqregexp.h>
-#include <tqstyle.h>
-
-#include "kgameprogress.h"
-
-#include <kapplication.h>
-
-KGameProgress::KGameProgress(TQWidget *parent, const char *name)
- : TQFrame(parent, name),
- TQRangeControl(0, 100, 1, 10, 0),
- orient(Qt::Horizontal)
-{
- initialize();
-}
-
-KGameProgress::KGameProgress(Qt::Orientation orientation, TQWidget *parent, const char *name)
- : TQFrame(parent, name),
- TQRangeControl(0, 100, 1, 10, 0),
- orient(orientation)
-{
- initialize();
-}
-
-KGameProgress::KGameProgress(int minValue, int maxValue, int value,
- Qt::Orientation orientation, TQWidget *parent, const char *name)
- : TQFrame(parent, name),
- TQRangeControl(minValue, maxValue, 1, 10, value),
- orient(orientation)
-{
- initialize();
-}
-
-KGameProgress::~KGameProgress()
-{
- delete bar_pixmap;
-}
-
-void KGameProgress::advance(int offset)
-{
- setValue(value() + offset);
-}
-
-void KGameProgress::initialize()
-{
- format_ = "%p%";
- use_supplied_bar_color = false;
- bar_pixmap = 0;
- bar_style = Solid;
- text_enabled = TRUE;
- setBackgroundMode( PaletteBackground );
- connect(kapp, TQT_SIGNAL(appearanceChanged()), this, TQT_SLOT(paletteChange()));
- paletteChange();
-}
-
-void KGameProgress::paletteChange()
-{
- TQPalette p = kapp->palette();
- const TQColorGroup &tqcolorGroup = p.active();
- if (!use_supplied_bar_color)
- bar_color = tqcolorGroup.highlight();
- bar_text_color = tqcolorGroup.highlightedText();
- text_color = tqcolorGroup.text();
- setPalette(p);
-
- adjustStyle();
-}
-
-
-void KGameProgress::setBarPixmap(const TQPixmap &pixmap)
-{
- if (pixmap.isNull())
- return;
- if (bar_pixmap)
- delete bar_pixmap;
-
- bar_pixmap = new TQPixmap(pixmap);
-}
-
-void KGameProgress::setBarColor(const TQColor &color)
-{
- bar_color = color;
- use_supplied_bar_color = true;
- if (bar_pixmap) {
- delete bar_pixmap;
- bar_pixmap = 0;
- }
-}
-
-void KGameProgress::setBarStyle(BarStyle style)
-{
- if (bar_style != style) {
- bar_style = style;
- update();
- }
-}
-
-void KGameProgress::setOrientation(Qt::Orientation orientation)
-{
- if (orient != orientation) {
- orient = orientation;
- update();
- }
-}
-
-void KGameProgress::setValue(int value)
-{
- TQRangeControl::setValue(value);
-}
-
-void KGameProgress::setTextEnabled(bool enable)
-{
- text_enabled = enable;
-}
-
-const TQColor & KGameProgress::barColor() const
-{
- return bar_color;
-}
-
-const TQPixmap * KGameProgress::barPixmap() const
-{
- return bar_pixmap;
-}
-
-bool KGameProgress::textEnabled() const
-{
- return text_enabled;
-}
-
-TQSize KGameProgress::tqsizeHint() const
-{
- TQSize s( size() );
-
- if(orientation() == Qt::Vertical) {
- s.setWidth(24);
- } else {
- s.setHeight(24);
- }
-
- return s;
-}
-
-TQSize KGameProgress::tqminimumSizeHint() const
-{
- return tqsizeHint();
-}
-
-TQSizePolicy KGameProgress::sizePolicy() const
-{
- if ( orientation()==Qt::Vertical )
- return TQSizePolicy( TQSizePolicy::Fixed, TQSizePolicy::Expanding );
- else
- return TQSizePolicy( TQSizePolicy::Expanding, TQSizePolicy::Fixed );
-}
-
-KGameProgress::Orientation KGameProgress::orientation() const
-{
- return orient;
-}
-
-KGameProgress::BarStyle KGameProgress::barStyle() const
-{
- return bar_style;
-}
-
-int KGameProgress::recalcValue(int range)
-{
- int abs_value = value() - minValue();
- int abs_range = maxValue() - minValue();
- return abs_range ? range * abs_value / abs_range : 0;
-}
-
-void KGameProgress::valueChange()
-{
- tqrepaint(contentsRect(), FALSE);
- emit percentageChanged(recalcValue(100));
-}
-
-void KGameProgress::rangeChange()
-{
- tqrepaint(contentsRect(), FALSE);
- emit percentageChanged(recalcValue(100));
-}
-
-void KGameProgress::styleChange(TQStyle&)
-{
- adjustStyle();
-}
-
-void KGameProgress::adjustStyle()
-{
- switch (tqstyle().tqstyleHint(TQStyle::SH_GUIStyle)) {
- case WindowsStyle:
- setFrameStyle(TQFrame::WinPanel | TQFrame::Sunken);
- break;
- case MotifStyle:
- default:
- setFrameStyle(TQFrame::Panel | TQFrame::Sunken);
- setLineWidth( 2 );
- break;
- }
- update();
-}
-
-void KGameProgress::paletteChange( const TQPalette &p )
-{
- // This never gets called for global color changes
- // because we call setPalette() ourselves.
- TQFrame::paletteChange(p);
-}
-
-void KGameProgress::drawText(TQPainter *p)
-{
- TQRect r(contentsRect());
- //TQColor c(bar_color.rgb() ^ backgroundColor().rgb());
-
- // Rik: Replace the tags '%p', '%v' and '%m' with the current percentage,
- // the current value and the maximum value respectively.
- TQString s(format_);
-
- s.replace(TQRegExp(TQString::tqfromLatin1("%p")), TQString::number(recalcValue(100)));
- s.replace(TQRegExp(TQString::tqfromLatin1("%v")), TQString::number(value()));
- s.replace(TQRegExp(TQString::tqfromLatin1("%m")), TQString::number(maxValue()));
-
- p->setPen(text_color);
- TQFont font = p->font();
- font.setBold(true);
- p->setFont(font);
- //p->setRasterOp(XorROP);
- p->drawText(r, AlignCenter, s);
- p->setClipRegion( fr );
- p->setPen(bar_text_color);
- p->drawText(r, AlignCenter, s);
-}
-
-void KGameProgress::drawContents(TQPainter *p)
-{
- TQRect cr = contentsRect(), er = cr;
- fr = cr;
- TQBrush fb(bar_color), eb(backgroundColor());
-
- if (bar_pixmap)
- fb.setPixmap(*bar_pixmap);
-
- if (backgroundPixmap())
- eb.setPixmap(*backgroundPixmap());
-
- switch (bar_style) {
- case Solid:
- if (orient ==Qt::Horizontal) {
- fr.setWidth(recalcValue(cr.width()));
- er.setLeft(fr.right() + 1);
- } else {
- fr.setTop(cr.bottom() - recalcValue(cr.height()));
- er.setBottom(fr.top() - 1);
- }
-
- p->setBrushOrigin(cr.topLeft());
- p->fillRect(fr, fb);
-
- p->fillRect(er, eb);
-
- break;
-
- case Blocked:
- const int margin = 2;
- int max, num, dx, dy;
- if (orient ==Qt::Horizontal) {
- fr.setHeight(cr.height() - 2 * margin);
- fr.setWidth((int)(0.67 * fr.height()));
- fr.moveTopLeft(TQPoint(cr.left() + margin, cr.top() + margin));
- dx = fr.width() + margin;
- dy = 0;
- max = (cr.width() - margin) / (fr.width() + margin) + 1;
- num = recalcValue(max);
- } else {
- fr.setWidth(cr.width() - 2 * margin);
- fr.setHeight((int)(0.67 * fr.width()));
- fr.moveBottomLeft(TQPoint(cr.left() + margin, cr.bottom() - margin));
- dx = 0;
- dy = - (fr.height() + margin);
- max = (cr.height() - margin) / (fr.height() + margin) + 1;
- num = recalcValue(max);
- }
- p->setClipRect(cr.x() + margin, cr.y() + margin,
- cr.width() - margin, cr.height() - margin);
- for (int i = 0; i < num; i++) {
- p->setBrushOrigin(fr.topLeft());
- p->fillRect(fr, fb);
- fr.moveBy(dx, dy);
- }
-
- if (num != max) {
- if (orient ==Qt::Horizontal)
- er.setLeft(fr.right() + 1);
- else
- er.setBottom(fr.bottom() + 1);
- if (!er.isNull()) {
- p->setBrushOrigin(cr.topLeft());
- p->fillRect(er, eb);
- }
- }
-
- break;
- }
-
- if (text_enabled && bar_style != Blocked)
- drawText(p);
-}
-
-void KGameProgress::setFormat(const TQString & format)
-{
- format_ = format;
-}
-
-TQString KGameProgress::format() const
-{
- return format_;
-}
-
-#include "kgameprogress.moc"
diff --git a/libkdegames/kgameprogress.h b/libkdegames/kgameprogress.h
deleted file mode 100644
index 834b127c..00000000
--- a/libkdegames/kgameprogress.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/* This file is part of the KDE libraries
- Copyright (C) 1996 Martynas Kunigelis
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-/*****************************************************************************
-* *
-* KGameProgress -- progress indicator widget for KDE by Martynas Kunigelis *
-* *
-*****************************************************************************/
-
-#ifndef _KPROGRES_H
-#define _KPROGRES_H "$Id$"
-
-#include <tqframe.h>
-#include <tqrangecontrol.h>
-#include <kdemacros.h>
-/**
- * @short A progress indicator widget.
- *
- * KGameProgress is derived from TQFrame and TQRangeControl, so
- * you can use all the methods from those classes. The only difference
- * is that setValue() is now made a slot, so you can connect
- * stuff to it.
- *
- * None of the constructors take line step and page step as arguments,
- * so by default they're set to 1 and 10 respectively.
- *
- * The Blocked style ignores the textEnabled() setting and displays
- * no text, since it looks truly ugly (and for other reasons). Signal
- * percentageChanged() is emitted whenever the value changes so you
- * can set up a different widget to display the current percentage complete
- * and connect the signal to it.
- *
- * @author Martynas Kunigelis
- * @version $Id$
- */
-class KDE_EXPORT KGameProgress : public TQFrame, public TQRangeControl
-{
- Q_OBJECT
- TQ_OBJECT
- Q_ENUMS( BarStyle )
- TQ_PROPERTY( int value READ value WRITE setValue)
- TQ_PROPERTY( BarStyle barStyle READ barStyle WRITE setBarStyle )
- TQ_PROPERTY( TQColor barColor READ barColor WRITE setBarColor )
- TQ_PROPERTY( TQPixmap barPixmap READ barPixmap WRITE setBarPixmap )
- TQ_PROPERTY( Qt::Orientation orientation READ orientation WRITE setOrientation )
- TQ_PROPERTY( bool textEnabled READ textEnabled WRITE setTextEnabled )
-
-public:
- /**
- * Possible values for bar style.
- *
- * @p Solid means one continuous progress bar, @p Blocked means a
- * progress bar made up of several blocks.
- */
- enum BarStyle { Solid, Blocked };
-
- /**
- * Construct a horizontal progress bar.
- */
- KGameProgress(TQWidget *parent=0, const char *name=0);
-
- /**
- * Construct a progress bar with orientation @p orient.
- */
- KGameProgress(Qt::Orientation orient, TQWidget *parent=0, const char *name=0);
-
- /**
- * Construct a progress bar with minimum, maximum and initial values.
- */
- KGameProgress(int minValue, int maxValue, int value, Qt::Orientation,
- TQWidget *parent=0, const char *name=0);
-
- /**
- * Destruct the progress bar.
- */
- ~KGameProgress();
-
- /**
- * Set the progress bar style.
- *
- * Allowed values are @p Solid and @p Blocked.
- */
- void setBarStyle(BarStyle style);
-
- /**
- * Set the color of the progress bar.
- */
- void setBarColor(const TQColor &);
-
- /**
- * Set a pixmap to be shown in the progress bar.
- */
- void setBarPixmap(const TQPixmap &);
-
- /**
- * Set the orientation of the progress bar.
- *
- * Allowed values are @pQt::Horizontal and @pQt::Vertical.
- */
- void setOrientation(Qt::Orientation);
-
- /**
- * If this is set to @p true, the progress text will be displayed.
- *
- */
- void setTextEnabled(bool);
-
- /**
- * Retrieve the bar style.
- *
- * @see setBarStyle()
- */
- BarStyle barStyle() const;
-
- /**
- * Retrieve the bar color.
- * @see setBarColor()
- */
- const TQColor &barColor() const;
-
- /**
- * Retrieve the bar pixmap.
- *
- * @see setBarPixmap()
- */
- const TQPixmap *barPixmap() const;
-
- /**
- * Retrive the current status
- *
- * @see setValue()
- */
- int value() const { return TQRangeControl::value(); }
- /**
- * Retrive the orientation of the progress bar.
- *
- * @see setOrientation()
- */
- Qt::Orientation orientation() const;
-
- /**
- * Returns @p true if progress text will be displayed,
- * @p false otherwise.
- *
- * @see setFormat()
- */
- bool textEnabled() const;
-
- /**
- */
- virtual TQSize tqsizeHint() const;
-
- /**
- */
- virtual TQSize tqminimumSizeHint() const;
-
- /**
- */
- virtual TQSizePolicy sizePolicy() const;
-
- /**
- * Retrieve the current format for printing status text.
- * @see setFormat()
- */
- TQString format() const;
-
-public slots:
-
- /**
- * Set the format of the text to use to display status.
- *
- * The default format is "%p%" (which looks like "42%".)
- *
- * @param format %p is replaced by percentage done, %v is replaced by actual
- * value, %m is replaced by the maximum value.
- */
- void setFormat(const TQString & format);
-
- /**
- * Set the current value of the progress bar to @p value.
- *
- * This must be a number in the range 0..100.
- */
- void setValue(int value);
-
- /**
- * Advance the progress bar by @p prog.
- *
- * This method is
- * provided for convenience and is equivalent with
- * setValue(value()+prog).
- */
- void advance(int prog);
-
-signals:
- /**
- * Emitted when the state of the progress bar changes.
- */
- void percentageChanged(int);
-
-protected:
- /**
- */
- void valueChange();
- /**
- */
- void rangeChange();
- /**
- */
- void styleChange( TQStyle& );
- /**
- */
- void paletteChange( const TQPalette & );
- /**
- */
- void drawContents( TQPainter * );
-
-private slots:
- void paletteChange();
-
-private:
- TQPixmap *bar_pixmap;
- bool use_supplied_bar_color;
- TQColor bar_color;
- TQColor bar_text_color;
- TQColor text_color;
- TQRect fr;
- BarStyle bar_style;
- Qt::Orientation orient;
- bool text_enabled;
- TQString format_;
- void initialize();
- int recalcValue(int);
- void drawText(TQPainter *);
- void adjustStyle();
-
- class KGameProgressPrivate;
- KGameProgressPrivate *d;
-};
-
-
-#endif
diff --git a/libkdegames/kgrid2d.h b/libkdegames/kgrid2d.h
deleted file mode 100644
index 9443b0c7..00000000
--- a/libkdegames/kgrid2d.h
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001-02 Nicolas Hadacek (hadacek@kde.org)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#ifndef __KGRID2D_H_
-#define __KGRID2D_H_
-
-#include <math.h>
-
-#include <tqpair.h>
-#include <tqvaluelist.h>
-#include <tqvaluevector.h>
-
-#include <kglobal.h>
-
-
-//-----------------------------------------------------------------------------
-namespace KGrid2D
-{
- /**
- * This type represents coordinates on a bidimensionnal grid.
- * @since 3.2
- */
- typedef TQPair<int, int> Coord;
-
- /**
- * This type represents a list of @ref Coord.
- * @since 3.2
- */
- typedef TQValueList<Coord> CoordList;
-}
-
-inline KGrid2D::Coord
-operator +(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
- return KGrid2D::Coord(c1.first + c2.first, c1.second + c2.second);
-}
-
-inline KGrid2D::Coord
-operator -(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
- return KGrid2D::Coord(c1.first - c2.first, c1.second - c2.second);
-}
-
-/**
- * @return the maximum of both coordinates.
- * @since 3.2
- */
-inline KGrid2D::Coord
-maximum(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
- return KGrid2D::Coord(kMax(c1.first, c2.first), kMax(c1.second, c2.second));
-}
-/**
- * @return the minimum of both coordinates.
- * @since 3.2
- */
-inline KGrid2D::Coord
-minimum(const KGrid2D::Coord &c1, const KGrid2D::Coord &c2) {
- return KGrid2D::Coord(kMin(c1.first, c2.first), kMin(c1.second, c2.second));
-}
-
-inline TQTextStream &operator <<(TQTextStream &s, const KGrid2D::Coord &c) {
- return s << '(' << c.second << ", " << c.first << ')';
-}
-
-inline TQTextStream &operator <<(TQTextStream &s, const KGrid2D::CoordList &list)
-{
- for(KGrid2D::CoordList::const_iterator i=list.begin(); i!=list.end(); ++i)
- s << *i;
- return s;
-}
-
-//-----------------------------------------------------------------------------
-namespace KGrid2D
-{
-/**
- * This template class represents a generic bidimensionnal grid. Each node
- * contains an element of the template type.
- *
- * @since 3.2
- */
-template <class Type>
-class Generic
-{
- public:
- /**
- * Constructor.
- */
- Generic(uint width = 0, uint height = 0) {
- resize(width, height);
- }
-
- virtual ~Generic() {}
-
- /**
- * Resize the grid.
- */
- void resize(uint width, uint height) {
- _width = width;
- _height = height;
- _vector.resize(width*height);
- }
-
- /**
- * Fill the nodes with the given value.
- */
- void fill(const Type &value) {
- for (uint i=0; i<_vector.count(); i++) _vector[i] = value;
- }
-
- /**
- * @return the width.
- */
- uint width() const { return _width; }
- /**
- * @return the height.
- */
- uint height() const { return _height; }
- /**
- * @return the number of nodes (ie width*height).
- */
- uint size() const { return _width*_height; }
-
- /**
- * @return the linear index for the given coordinate.
- */
- uint index(const Coord &c) const {
- return c.first + c.second*_width;
- }
-
- /**
- * @return the coordinate corresponding to the linear index.
- */
- Coord coord(uint index) const {
- return Coord(index % _width, index / _width);
- }
-
- /**
- * @return the value at the given coordinate.
- */
- const Type &at(const Coord &c) const { return _vector[index(c)]; }
- /**
- * @return the value at the given coordinate.
- */
- Type &at(const Coord &c) { return _vector[index(c)]; }
- /**
- * @return the value at the given coordinate.
- */
- const Type &operator [](const Coord &c) const { return _vector[index(c)]; }
- /**
- * @return the value at the given coordinate.
- */
- Type &operator [](const Coord &c) { return _vector[index(c)]; }
-
- /**
- * @return the value at the given linear index.
- */
- const Type &at(uint index) const { return _vector[index]; }
- /**
- * @return the value at the given linear index.
- */
- Type &at(uint index) { return _vector[index]; }
- /**
- * @return the value at the given linear index.
- */
- const Type &operator [](uint index) const { return _vector[index]; }
- /**
- * @return the value at the given linear index.
- */
- Type &operator [](uint index) { return _vector[index]; }
-
- /**
- * @return if the given coordinate is inside the grid.
- */
- bool inside(const Coord &c) const {
- return ( c.first>=0 && c.first<(int)_width
- && c.second>=0 && c.second<(int)_height );
- }
-
- /**
- * Bound the given coordinate with the grid dimensions.
- */
- void bound(Coord &c) const {
- c.first = kMax(kMin(c.first, (int)_width-1), 0);
- c.second = kMax(kMin(c.second, (int)_height-1), 0);
- }
-
- protected:
- uint _width, _height;
- TQValueVector<Type> _vector;
-};
-}
-
-template <class Type>
-TQDataStream &operator <<(TQDataStream &s, const KGrid2D::Generic<Type> &m) {
- s << (TQ_UINT32)m.width() << (TQ_UINT32)m.height();
- for (uint i=0; i<m.size(); i++) s << m[i];
- return s;
-}
-
-template <class Type>
-TQDataStream &operator >>(TQDataStream &s, KGrid2D::Generic<Type> &m) {
- TQ_UINT32 w, h;
- s >> w >> h;
- m.resize(w, h);
- for (uint i=0; i<m.size(); i++) s >> m[i];
- return s;
-}
-
-
-namespace KGrid2D
-{
-
-//-----------------------------------------------------------------------------
-/**
- * This class contains static methods to manipulate coordinates for a
- * square bidimensionnal grid.
- *
- * @since 3.2
- */
-class SquareBase
-{
- public:
- /**
- * Identify the eight neighbours.
- */
- enum Neighbour { Left=0, Right, Up, Down, LeftUp, LeftDown,
- RightUp, RightDown, Nb_Neighbour };
-
- /**
- * @return the trigonometric angle in radians for the given neighbour.
- */
- static double angle(Neighbour n) {
- switch (n) {
- case Left: return M_PI;
- case Right: return 0;
- case Up: return M_PI_2;
- case Down: return -M_PI_2;
- case LeftUp: return 3.0*M_PI_4;
- case LeftDown: return -3.0*M_PI_4;
- case RightUp: return M_PI_4;
- case RightDown: return -M_PI_4;
- case Nb_Neighbour: Q_ASSERT(false);
- }
- return 0;
- }
-
- /**
- * @return the opposed neighbour.
- */
- static Neighbour opposed(Neighbour n) {
- switch (n) {
- case Left: return Right;
- case Right: return Left;
- case Up: return Down;
- case Down: return Up;
- case LeftUp: return RightDown;
- case LeftDown: return RightUp;
- case RightUp: return LeftDown;
- case RightDown: return LeftUp;
- case Nb_Neighbour: Q_ASSERT(false);
- }
- return Nb_Neighbour;
- }
-
- /**
- * @return true if the neighbour is a direct one (ie is one of the four
- * nearest).
- */
- static bool isDirect(Neighbour n) { return n<LeftUp; }
-
- /**
- * @return the neighbour for the given coordinate.
- */
- static Coord neighbour(const Coord &c, Neighbour n) {
- switch (n) {
- case Left: return c + Coord(-1, 0);
- case Right: return c + Coord( 1, 0);
- case Up: return c + Coord( 0, -1);
- case Down: return c + Coord( 0, 1);
- case LeftUp: return c + Coord(-1, -1);
- case LeftDown: return c + Coord(-1, 1);
- case RightUp: return c + Coord( 1, -1);
- case RightDown: return c + Coord( 1, 1);
- case Nb_Neighbour: Q_ASSERT(false);
- }
- return c;
- }
-};
-
-/**
- * This template is a @ref Generic implementation for a square bidimensionnal
- * grid (@ref SquareBase).
- *
- * @since 3.2
- */
-template <class T>
-class Square : public Generic<T>, public SquareBase
-{
- public:
- /**
- * Constructor.
- */
- Square(uint width = 0, uint height = 0)
- : Generic<T>(width, height) {}
-
- /**
- * @return the neighbours of coordinate @param c
- * to the given set of coordinates
- * @param c the coordinate to use as the reference point
- * @param insideOnly only add coordinates that are inside the grid.
- * @param directOnly only add the four nearest neighbours.
- */
- CoordList neighbours(const Coord &c, bool insideOnly = true,
- bool directOnly = false) const {
- CoordList neighbours;
- for (uint i=0; i<(directOnly ? LeftUp : Nb_Neighbour); i++) {
- Coord n = neighbour(c, (Neighbour)i);
- if ( insideOnly && !Generic<T>::inside(n) ) continue;
- neighbours.append(n);
- }
- return neighbours;
- }
-
- /**
- * @return the "projection" of the given coordinate on the grid edges.
- *
- * @param c the coordinate to use as the reference point
- * @param n the direction of projection.
- */
- Coord toEdge(const Coord &c, Neighbour n) const {
- switch (n) {
- case Left: return Coord(0, c.second);
- case Right: return Coord(Generic<T>::width()-1, c.second);
- case Up: return Coord(c.first, 0);
- case Down: return Coord(c.first, Generic<T>::height()-1);
- case LeftUp: return Coord(0, 0);
- case LeftDown: return Coord(0, Generic<T>::height()-1);
- case RightUp: return Coord(Generic<T>::width()-1, 0);
- case RightDown: return Coord(Generic<T>::width()-1, Generic<T>::height()-1);
- case Nb_Neighbour: Q_ASSERT(false);
- }
- return c;
- }
-};
-
-//-----------------------------------------------------------------------------
-/**
- * This class contains static methods to manipulate coordinates on an
- * hexagonal grid where hexagons form horizontal lines:
- * <pre>
- * (0,0) (0,1) (0,2)
- * (1,0) (1,1) (1,2)
- * (2,0) (2,1) (2,2)
- * </pre>
- *
- * @since 3.2
- */
-class HexagonalBase
-{
- public:
- /**
- * Identify the six neighbours.
- */
- enum Neighbour { Left = 0, Right, LeftUp, LeftDown,
- RightUp, RightDown, Nb_Neighbour };
-
- /**
- * @return the trigonometric angle in radians for the given neighbour.
- */
- static double angle(Neighbour n) {
- switch (n) {
- case Left: return M_PI;
- case Right: return 0;
- case LeftUp: return 2.0*M_PI/3;
- case LeftDown: return -2.0*M_PI/3;
- case RightUp: return M_PI/3;
- case RightDown: return -M_PI/3;
- case Nb_Neighbour: Q_ASSERT(false);
- }
- return 0;
- }
-
- /**
- * @return the opposed neighbour.
- */
- static Neighbour opposed(Neighbour n) {
- switch (n) {
- case Left: return Right;
- case Right: return Left;
- case LeftUp: return RightDown;
- case LeftDown: return RightUp;
- case RightUp: return LeftDown;
- case RightDown: return LeftUp;
- case Nb_Neighbour: Q_ASSERT(false);
- }
- return Nb_Neighbour;
- }
-
- /**
- * @return the neighbour of the given coordinate.
- */
- static Coord neighbour(const Coord &c, Neighbour n) {
- bool oddRow = c.second%2;
- switch (n) {
- case Left: return c + Coord(-1, 0);
- case Right: return c + Coord( 1, 0);
- case LeftUp: return c + (oddRow ? Coord( 0, -1) : Coord(-1, -1));
- case LeftDown: return c + (oddRow ? Coord( 0, 1) : Coord(-1, 1));
- case RightUp: return c + (oddRow ? Coord( 1, -1) : Coord( 0, -1));
- case RightDown: return c + (oddRow ? Coord( 1, 1) : Coord( 0, 1));
- case Nb_Neighbour: Q_ASSERT(false);
- }
- return c;
- }
-
- /**
- * @return the distance between the two coordinates in term of hexagons.
- */
- static uint distance(const Coord &c1, const Coord &c2) {
- return kAbs(c1.first - c2.first) + kAbs(c1.second - c2.second)
- + (c1.first==c2.first || c1.second==c2.second ? 0 : -1);
- }
-};
-
-/**
- * This template implements a hexagonal grid
- * where hexagons form horizontal lines:
- * <pre>
- * (0,0) (0,1) (0,2)
- * (1,0) (1,1) (1,2)
- * (2,0) (2,1) (2,2)
- * </pre>
- *
- * @ since 3.2
- */
-template <class Type>
-class Hexagonal : public Generic<Type>, public HexagonalBase
-{
- public:
- /**
- * Constructor.
- */
- Hexagonal(uint width = 0, uint height = 0)
- : Generic<Type>(width, height) {}
-
- /**
- * @return the neighbours of coordinate @param c
- * to the given set of coordinates
- * @param c the coordiante to use as the reference point
- * @param insideOnly only add coordinates that are inside the grid.
- */
- CoordList neighbours(const Coord &c, bool insideOnly = true) const {
- CoordList neighbours;
- for (uint i=0; i<Nb_Neighbour; i++) {
- Coord n = neighbour(c, (Neighbour)i);
- if ( insideOnly && !Generic<Type>::inside(n) ) continue;
- neighbours.append(n);
- }
- return neighbours;
- }
-
-
- /**
- * @return the neighbours at distance @param distance of coordinate
- * @param c the coordinate to use as the reference point
- * @param distance distance to the neighbour (1 means at contact).
- * @param insideOnly only add coordinates that are inside the grid.
- * @param all returns all neighbours at distance equal and less than
- * @param distance (the original coordinate is not included).
- */
- CoordList neighbours(const Coord &c, uint distance, bool all,
- bool insideOnly = true) const {
- // brute force algorithm -- you're welcome to make it more efficient :)
- CoordList ring;
- if ( distance==0 ) return ring;
- ring = neighbours(c, insideOnly);
- if ( distance==1 ) return ring;
- CoordList center;
- center.append(c);
- for (uint i=1; i<distance; i++) {
- CoordList newRing;
- CoordList::const_iterator it;
- for (it=ring.begin(); it!=ring.end(); ++it) {
- CoordList n = neighbours(*it, insideOnly);
- CoordList::const_iterator it2;
- for (it2=n.begin(); it2!=n.end(); ++it2)
- if ( center.find(*it2)==center.end()
- && ring.find(*it2)==ring.end()
- && newRing.find(*it2)==newRing.end() )
- newRing.append(*it2);
- center.append(*it);
- }
- ring = newRing;
- }
- if ( !all ) return ring;
- CoordList::const_iterator it;
- for (it=ring.begin(); it!=ring.end(); ++it)
- center.append(*it);
- center.remove(c);
- return center;
- }
-};
-
-} // namespace
-
-#endif
diff --git a/libkdegames/kstdgameaction.cpp b/libkdegames/kstdgameaction.cpp
deleted file mode 100644
index 2aeb412e..00000000
--- a/libkdegames/kstdgameaction.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-
-#include "kstdgameaction.h"
-
-#include <klocale.h>
-#include <kaction.h>
-#include <kstdaccel.h>
-#include <kconfig.h>
-#include <kdebug.h>
-
-
-KStdGameAction::KStdGameAction()
-{}
-
-KStdGameAction::~KStdGameAction()
-{}
-
-KAction *KStdGameAction::action(StdGameAction act_enum, const TQObject *recvr,
- const char *slot, KActionCollection *parent,
- const char *name)
-{
- return create( act_enum, name, recvr, slot, parent );
-}
-
-const char* KStdGameAction::stdName(StdGameAction act_enum)
-{
- return name(act_enum);
-}
-
-struct KStdGameActionInfo
-{
- KStdGameAction::StdGameAction id;
- KStdAccel::StdAccel globalAccel; // if we reuse a global accel
- int shortcut; // specific shortcut (NH: should be configurable)
- const char* psName;
- const char* psLabel;
- const char* psWhatsThis;
- const char* psIconName;
-};
-
-const KStdGameActionInfo g_rgActionInfo[] = {
-// "game" menu
- { KStdGameAction::New, KStdAccel::New, 0, "game_new", I18N_NOOP2("new game", "&New"), 0, "filenew" },
- { KStdGameAction::Load, KStdAccel::Open, 0, "game_load", I18N_NOOP("&Load..."), 0, "fileopen" },
- { KStdGameAction::LoadRecent, KStdAccel::AccelNone, 0, "game_load_recent", I18N_NOOP("Load &Recent"), 0, 0 },
- { KStdGameAction::Restart, KStdAccel::Reload, 0, "game_restart", I18N_NOOP("Restart &Game"), 0, "reload" },
- { KStdGameAction::Save, KStdAccel::Save, 0, "game_save", I18N_NOOP("&Save"), 0, "filesave" },
- { KStdGameAction::SaveAs, KStdAccel::AccelNone, 0, "game_save_as", I18N_NOOP("Save &As..."), 0, "filesaveas" },
- { KStdGameAction::End, KStdAccel::End, 0, "game_end", I18N_NOOP("&End Game"), 0, "fileclose" },
- { KStdGameAction::Pause, KStdAccel::AccelNone, TQt::Key_P, "game_pause", I18N_NOOP("Pa&use"), 0, "player_pause" },
- { KStdGameAction::Highscores, KStdAccel::AccelNone, TQt::CTRL+TQt::Key_H, "game_highscores", I18N_NOOP("Show &Highscores"), 0, "highscore" },
- { KStdGameAction::Print, KStdAccel::Print, 0, "game_print", I18N_NOOP("&Print..."), 0, "fileprint" },
- { KStdGameAction::Quit, KStdAccel::Quit, 0, "game_quit", I18N_NOOP("&Quit"), 0, "exit" },
-// "move" menu
- { KStdGameAction::Repeat, KStdAccel::AccelNone, 0, "move_repeat", I18N_NOOP("Repeat"), 0, 0 },
- { KStdGameAction::Undo, KStdAccel::Undo, 0, "move_undo", I18N_NOOP("Und&o"), 0, "undo" },
- { KStdGameAction::Redo, KStdAccel::Redo, 0, "move_redo", I18N_NOOP("Re&do"), 0, "redo" },
- { KStdGameAction::Roll, KStdAccel::AccelNone, TQt::CTRL+TQt::Key_R, "move_roll", I18N_NOOP("&Roll Dice"), 0, "roll" },
- { KStdGameAction::EndTurn, KStdAccel::AccelNone, 0, "move_end_turn", I18N_NOOP("End Turn"), 0, "endturn" },
- { KStdGameAction::Hint, KStdAccel::AccelNone, TQt::Key_H, "move_hint", I18N_NOOP("&Hint"), 0, "idea" },
- { KStdGameAction::Demo, KStdAccel::AccelNone, TQt::Key_D, "move_demo", I18N_NOOP("&Demo"), 0, "1rightarrow" },
- { KStdGameAction::Solve, KStdAccel::AccelNone, 0, "move_solve", I18N_NOOP("&Solve"), 0, "wizard" },
-// "settings" menu
- { KStdGameAction::ChooseGameType, KStdAccel::AccelNone, 0, "options_choose_game_type", I18N_NOOP("Choose Game &Type"), 0, 0 },
- { KStdGameAction::Carddecks, KStdAccel::AccelNone, 0, "options_configure_carddecks", I18N_NOOP("Configure &Carddecks..."), 0, 0 },
- { KStdGameAction::ConfigureHighscores, KStdAccel::AccelNone, 0, "options_configure_highscores", I18N_NOOP("Configure &Highscores..."), 0, 0 },
-
- { KStdGameAction::ActionNone, KStdAccel::AccelNone, 0, 0, 0, 0, 0 }
-};
-
-static const KStdGameActionInfo* infoPtr( KStdGameAction::StdGameAction id )
-{
- for (uint i = 0; g_rgActionInfo[i].id!=KStdGameAction::ActionNone; i++) {
- if( g_rgActionInfo[i].id == id )
- return &g_rgActionInfo[i];
- }
- return 0;
-}
-
-
-KAction* KStdGameAction::create(StdGameAction id, const char *name,
- const TQObject *recvr, const char *slot,
- KActionCollection* parent )
-{
- KAction* pAction = 0;
- const KStdGameActionInfo* pInfo = infoPtr( id );
- kdDebug(125) << "KStdGameAction::create( " << id << "=" << (pInfo ? pInfo->psName : (const char*)0) << ", " << parent << ", " << name << " )" << endl;
- if( pInfo ) {
- TQString sLabel = i18n(pInfo->psLabel);
- KShortcut cut = (pInfo->globalAccel==KStdAccel::AccelNone
- ? KShortcut(pInfo->shortcut)
- : KStdAccel::shortcut(pInfo->globalAccel));
- const char *n = name ? name : pInfo->psName;
- switch( id ) {
- case LoadRecent:
- pAction =
- new KRecentFilesAction(sLabel, cut, recvr, slot, parent, n);
- break;
- case Pause:
- case Demo:
- pAction = new KToggleAction( sLabel, pInfo->psIconName, cut,
- recvr, slot, parent, n);
- break;
- case ChooseGameType:
- pAction = new KSelectAction( sLabel, pInfo->psIconName, cut,
- recvr, slot, parent, n);
- break;
- default:
- pAction = new KAction( sLabel, pInfo->psIconName, cut,
- recvr, slot, parent, n);
- break;
- }
- }
- return pAction;
-}
-
-const char* KStdGameAction::name( StdGameAction id )
-{
- const KStdGameActionInfo* pInfo = infoPtr( id );
- return (pInfo) ? pInfo->psName : 0;
-}
-
-KAction *KStdGameAction::gameNew(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(New, name, recvr, slot, parent); }
-KAction *KStdGameAction::load(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Load, name, recvr, slot, parent); }
-KRecentFilesAction *KStdGameAction::loadRecent(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return static_cast<KRecentFilesAction *>(KStdGameAction::create(LoadRecent, name, recvr, slot, parent)); }
-KAction *KStdGameAction::save(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Save, name, recvr, slot, parent); }
-KAction *KStdGameAction::saveAs(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(SaveAs, name, recvr, slot, parent); }
-KAction *KStdGameAction::end(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(End, name, recvr, slot, parent); }
-KToggleAction *KStdGameAction::pause(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return static_cast<KToggleAction *>(KStdGameAction::create(Pause, name, recvr, slot, parent)); }
-KAction *KStdGameAction::highscores(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Highscores, name, recvr, slot, parent); }
-KAction *KStdGameAction::print(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Print, name, recvr, slot, parent); }
-KAction *KStdGameAction::quit(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Quit, name, recvr, slot, parent); }
-
-KAction *KStdGameAction::repeat(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Repeat, name, recvr, slot, parent); }
-KAction *KStdGameAction::undo(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Undo, name, recvr, slot, parent); }
-
-KAction *KStdGameAction::redo(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Redo, name, recvr, slot, parent); }
-
-KAction *KStdGameAction::roll(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Roll, name, recvr, slot, parent); }
-KAction *KStdGameAction::endTurn(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(EndTurn, name, recvr, slot, parent); }
-
-KAction *KStdGameAction::carddecks(const TQObject *recvr, const char *slot,
- KActionCollection *parent, const char *name )
-{ return KStdGameAction::create(Carddecks, name, recvr, slot, parent); }
-KAction *KStdGameAction::configureHighscores(const TQObject*recvr, const char *slot,
- KActionCollection *parent, const char *name)
-{ return KStdGameAction::create(ConfigureHighscores, name, recvr, slot, parent); }
-KAction *KStdGameAction::hint(const TQObject*recvr, const char *slot,
- KActionCollection *parent, const char *name)
-{ return KStdGameAction::create(Hint, name, recvr, slot, parent); }
-KToggleAction *KStdGameAction::demo(const TQObject*recvr, const char *slot,
- KActionCollection *parent, const char *name)
-{ return static_cast<KToggleAction *>(KStdGameAction::create(Demo, name, recvr, slot, parent)); }
-KAction *KStdGameAction::solve(const TQObject*recvr, const char *slot,
- KActionCollection *parent, const char *name)
-{ return KStdGameAction::create(Solve, name, recvr, slot, parent); }
-KSelectAction *KStdGameAction::chooseGameType(const TQObject*recvr, const char *slot,
- KActionCollection *parent, const char *name)
-{ return static_cast<KSelectAction *>(KStdGameAction::create(ChooseGameType, name, recvr, slot, parent)); }
-KAction *KStdGameAction::restart(const TQObject*recvr, const char *slot,
- KActionCollection *parent, const char *name)
-{ return KStdGameAction::create(Restart, name, recvr, slot, parent); }
diff --git a/libkdegames/kstdgameaction.h b/libkdegames/kstdgameaction.h
deleted file mode 100644
index 6d302050..00000000
--- a/libkdegames/kstdgameaction.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- This file is part of the KDE games library
- Copyright (C) 2001 Andreas Beckermann (b_mann@gmx.de)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public
- License version 2 as published by the Free Software Foundation.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public License
- along with this library; see the file COPYING.LIB. If not, write to
- the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- Boston, MA 02110-1301, USA.
-*/
-// this class was shamelessy stolen from kdelibs/tdeui/kstdction.[cpp|h] and
-// after that just edited for our needs
-#ifndef KSTDGAMEACTION_H
-#define KSTDGAMEACTION_H
-
-class KAction;
-class KToggleAction;
-class TQObject;
-class KActionCollection;
-class KRecentFilesAction;
-class KSelectAction;
-#include <kdemacros.h>
-
-//-----------------------------------------------------------------------------
-/**
- * Replacement for KStdAction for KDE Games
- *
- * This class is an extension to the usual KStdAction class which provides
- * easy access to often used KDE actions
- *
- * Games often use different menu entries than other programs, e.g. games use
- * the menu "game" instead of "file". This class provides the entries which
- * differ from the usual KStdAction entries.
- *
- * @see KStdAction
- *
- * @author Andreas Beckermann <b_mann@gmx.de>
- */
-// #### KDE4: transform in namespace
-class KDE_EXPORT KStdGameAction
-{
-public:
- /**
- * The standard menubar and toolbar actions.
- **/
- enum StdGameAction {
- // Game menu
- New=1, Load, LoadRecent, Save, SaveAs, End, Pause, Highscores,
- Print, Quit,
- // Move menu
- Repeat, Undo, Redo, Roll, EndTurn,
- // Settings menu
- Carddecks,
- ChooseGameType, // @since 3.2
- ConfigureHighscores, // @since 3.2
-
- Restart, // @since 3.2
- Hint, // @since 3.2
- Demo, // @since 3.2
- Solve, // @since 3.2
- ActionNone // @since 3.2
- };
-
- KStdGameAction();
- ~KStdGameAction();
-
- /**
- * Creates an action corresponding to the
- * KStdAction::StdAction enum.
- * @since 3.2
- */
- static KAction* create( StdGameAction id, const char *name,
- const TQObject *recvr, const char *slot,
- KActionCollection* parent );
-
- /**
- * @since 3.2
- */
- static KAction* create( StdGameAction id,
- const TQObject *recvr, const char *slot,
- KActionCollection* parent )
- { return create( id, 0, recvr, slot, parent ); }
-
-
- /**
- * Retrieve the action corresponding to the
- * KStdGameAction::StdGameAction enum.
- * @deprecated
- */
- static KAction *action(StdGameAction act_enum, const TQObject *recvr = 0,
- const char *slot = 0, KActionCollection *parent = 0,
- const char *name = 0L );
-
- /**
- * This will return the internal name of a given standard action.
- * @since 3.2
- */
- static const char* name( StdGameAction id );
-
- /**
- * This will return the internal name of a given standard action.
- * @deprecated
- */
- static const char* stdName(StdGameAction act_enum);
-
- /**
- * Start a new game
- **/
- static KAction *gameNew(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Load a previousely saved game
- */
- static KAction *load(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Load a recently loaded game.
- */
- static KRecentFilesAction *loadRecent(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Save the current game.
- */
- static KAction *save(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Save the current game under a different filename.
- */
- static KAction *saveAs(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Pause the game
- **/
- static KToggleAction *pause(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Show the highscores.
- */
- static KAction *highscores(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
-
- /**
- * End the current game, but do not quit the program. Think of a "close"
- * entry.
- */
- static KAction *end(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Print the current screen? Game? Whatever - hardly used in games but there
- * is at least one example (ktuberling)
- */
- static KAction *print(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Quit the game.
- */
- static KAction *quit(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
-
-
- /**
- * Repeat the last move.
- **/
- static KAction *repeat(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Undo the last move
- **/
- static KAction *undo(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Redo the last move (which has been undone)
- **/
- static KAction *redo(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Roll die or dice
- **/
- static KAction *roll(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * End the current turn (not the game). Usually to let the next player
- * start
- **/
- static KAction *endTurn(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
-
- /**
- * Display configure carddecks dialog.
- */
- static KAction *carddecks(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Display configure highscores dialog.
- * @since 3.2
- */
- static KAction *configureHighscores(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Give an advice/hint.
- * @since 3.2
- */
- static KAction *hint(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Show a demo.
- * @since 3.2
- */
- static KToggleAction *demo(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Solve the game.
- * @since 3.2
- */
- static KAction *solve(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Choose game type.
- * @since 3.2
- */
- static KSelectAction *chooseGameType(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
- /**
- * Restart game.
- * @since 3.2
- */
- static KAction *restart(const TQObject *recvr = 0, const char *slot = 0,
- KActionCollection *parent = 0, const char *name = 0L );
-
-};
-
-#endif
diff --git a/libkdegames/pics/Makefile.am b/libkdegames/pics/Makefile.am
deleted file mode 100644
index 20350377..00000000
--- a/libkdegames/pics/Makefile.am
+++ /dev/null
@@ -1,4 +0,0 @@
-picsdir = $(kde_datadir)/tdegames/pics
-pics_DATA = star.png
-
-KDE_ICON = action-roll action-highscore action-endturn
diff --git a/libkdegames/pics/cr16-action-endturn.png b/libkdegames/pics/cr16-action-endturn.png
deleted file mode 100644
index 00051f46..00000000
--- a/libkdegames/pics/cr16-action-endturn.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/pics/cr16-action-highscore.png b/libkdegames/pics/cr16-action-highscore.png
deleted file mode 100644
index 8eb54762..00000000
--- a/libkdegames/pics/cr16-action-highscore.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/pics/cr16-action-roll.png b/libkdegames/pics/cr16-action-roll.png
deleted file mode 100644
index e41d572a..00000000
--- a/libkdegames/pics/cr16-action-roll.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/pics/cr22-action-roll.png b/libkdegames/pics/cr22-action-roll.png
deleted file mode 100644
index bdf85a8b..00000000
--- a/libkdegames/pics/cr22-action-roll.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/pics/cr32-action-endturn.png b/libkdegames/pics/cr32-action-endturn.png
deleted file mode 100644
index fc6d82bc..00000000
--- a/libkdegames/pics/cr32-action-endturn.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/pics/cr32-action-highscore.png b/libkdegames/pics/cr32-action-highscore.png
deleted file mode 100644
index ad797080..00000000
--- a/libkdegames/pics/cr32-action-highscore.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/pics/cr32-action-roll.png b/libkdegames/pics/cr32-action-roll.png
deleted file mode 100644
index 8452f4a8..00000000
--- a/libkdegames/pics/cr32-action-roll.png
+++ /dev/null
Binary files differ
diff --git a/libkdegames/pics/star.png b/libkdegames/pics/star.png
deleted file mode 100644
index ea88d160..00000000
--- a/libkdegames/pics/star.png
+++ /dev/null
Binary files differ