2 #include <core/repository.h>
4 #include "builtinvariants.h"
6 extern "C" Repository
* taguachess_initrepo(IVariantLoader
*);
7 extern "C" Repository
* taguachess5x5_initrepo(IVariantLoader
*);
8 extern "C" Repository
* taguacrazyhouse_initrepo(IVariantLoader
*);
9 extern "C" Repository
* taguashogi_initrepo(IVariantLoader
*);
10 extern "C" Repository
* taguaminishogi_initrepo(IVariantLoader
*);
11 extern "C" Repository
* taguarandomlessentropy_initrepo(IVariantLoader
*);
13 // FIXME: a KDE plugin willing to reuse a builtin one crashes
16 * Hardcoded definition of builtin variants.
18 static const struct builtin
{
20 Repository
* (*init_func
)(IVariantLoader
*);
21 const char* theme_proxy
;
23 { "Chess", taguachess_initrepo
, "Chess" },
24 { "Chess 5x5", taguachess5x5_initrepo
, "Chess" },
25 { "Crazyhouse", taguacrazyhouse_initrepo
, "Chess" },
26 { "Shogi", taguashogi_initrepo
, "Shogi" },
27 { "MiniShogi", taguaminishogi_initrepo
, "Shogi" },
28 { "Randomless Entropy", taguarandomlessentropy_initrepo
, "Entropy" },
31 static const struct builtin
* const get_builtin(QString name
) {
32 for (unsigned i
=0; i
< sizeof(builtins
)/sizeof(builtins
[0]); i
++)
33 if (name
.compare(builtins
[i
].name
, Qt::CaseInsensitive
) == 0)
38 BuiltinVariants::BuiltinVariants() {
39 for (unsigned i
=0; i
< sizeof(builtins
)/sizeof(builtins
[0]); i
++)
40 m_allvariants
<< builtins
[i
].name
;
43 BuiltinVariants
& BuiltinVariants::self() {
44 static BuiltinVariants inst
;
48 Variant
* BuiltinVariants::create(const QString
& name
) {
49 Repository
* repo
= getRepository(name
);
51 const struct builtin
* const builtin
= get_builtin(name
);
53 kFatal() << "builtin not properly registered" << name
;
54 return new Variant(name
, repo
, builtin
->theme_proxy
);
59 QStringList
BuiltinVariants::all() const {
63 Repository
* BuiltinVariants::getRepository(const QString
& variant
) {
64 if (m_variants
.contains(variant
))
65 return m_variants
[variant
];
67 Repository
* repo
= NULL
;
68 const struct builtin
* const builtin
= get_builtin(variant
);
70 repo
= builtin
->init_func(this);
72 m_variants
[builtin
->name
] = repo
;
74 kError() << "could not load builtin variant" << variant
;