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
*);
10 // FIXME: a KDE plugin willing to reuse a builtin one crashes
13 * Hardcoded definition of builtin variants.
15 static const struct builtin
{
17 Repository
* (*init_func
)(IVariantLoader
*);
18 const char* theme_proxy
;
20 { "Chess", taguachess_initrepo
, "Chess" },
21 { "Chess 5x5", taguachess5x5_initrepo
, "Chess" },
22 { "Crazyhouse", taguacrazyhouse_initrepo
, "Chess" },
25 static const struct builtin
* const get_builtin(QString name
) {
26 for (unsigned i
=0; i
< sizeof(builtins
)/sizeof(builtins
[0]); i
++)
27 if (name
.compare(builtins
[i
].name
, Qt::CaseInsensitive
) == 0)
32 BuiltinVariants::BuiltinVariants() {
33 for (unsigned i
=0; i
< sizeof(builtins
)/sizeof(builtins
[0]); i
++)
34 m_allvariants
<< builtins
[i
].name
;
37 BuiltinVariants
& BuiltinVariants::self() {
38 static BuiltinVariants inst
;
42 Variant
* BuiltinVariants::create(const QString
& name
) {
43 Repository
* repo
= getRepository(name
);
45 const struct builtin
* const builtin
= get_builtin(name
);
47 kFatal() << "builtin not properly registered" << name
;
48 return new Variant(name
, repo
, builtin
->theme_proxy
);
53 QStringList
BuiltinVariants::all() const {
57 Repository
* BuiltinVariants::getRepository(const QString
& variant
) {
58 if (m_variants
.contains(variant
))
59 return m_variants
[variant
];
61 Repository
* repo
= NULL
;
62 const struct builtin
* const builtin
= get_builtin(variant
);
64 repo
= builtin
->init_func(this);
66 m_variants
[builtin
->name
] = repo
;
68 kError() << "could not load builtin variant" << variant
;