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
*);
12 // FIXME: a KDE plugin willing to reuse a builtin one crashes
15 * Hardcoded definition of builtin variants.
17 static const struct builtin
{
19 Repository
* (*init_func
)(IVariantLoader
*);
20 const char* theme_proxy
;
22 { "Chess", taguachess_initrepo
, "Chess" },
23 { "Chess 5x5", taguachess5x5_initrepo
, "Chess" },
24 { "Crazyhouse", taguacrazyhouse_initrepo
, "Chess" },
25 { "Shogi", taguashogi_initrepo
, "Shogi" },
26 { "MiniShogi", taguaminishogi_initrepo
, "Shogi" },
29 static const struct builtin
* const get_builtin(QString name
) {
30 for (unsigned i
=0; i
< sizeof(builtins
)/sizeof(builtins
[0]); i
++)
31 if (name
.compare(builtins
[i
].name
, Qt::CaseInsensitive
) == 0)
36 BuiltinVariants::BuiltinVariants() {
37 for (unsigned i
=0; i
< sizeof(builtins
)/sizeof(builtins
[0]); i
++)
38 m_allvariants
<< builtins
[i
].name
;
41 BuiltinVariants
& BuiltinVariants::self() {
42 static BuiltinVariants inst
;
46 Variant
* BuiltinVariants::create(const QString
& name
) {
47 Repository
* repo
= getRepository(name
);
49 const struct builtin
* const builtin
= get_builtin(name
);
51 kFatal() << "builtin not properly registered" << name
;
52 return new Variant(name
, repo
, builtin
->theme_proxy
);
57 QStringList
BuiltinVariants::all() const {
61 Repository
* BuiltinVariants::getRepository(const QString
& variant
) {
62 if (m_variants
.contains(variant
))
63 return m_variants
[variant
];
65 Repository
* repo
= NULL
;
66 const struct builtin
* const builtin
= get_builtin(variant
);
68 repo
= builtin
->init_func(this);
70 m_variants
[builtin
->name
] = repo
;
72 kError() << "could not load builtin variant" << variant
;