enchantclient.cpp00001
00021 #include "enchantclient.h"
00022 #include "enchantdict.h"
00023
00024 #include <kgenericfactory.h>
00025 #include <kdebug.h>
00026
00027 typedef KGenericFactory<QSpellEnchantClient> EnchantClientFactory;
00028 K_EXPORT_COMPONENT_FACTORY(kspell_enchant, EnchantClientFactory("kspell_enchant"))
00029
00030 using namespace KSpell2;
00031
00032 static void enchantDictDescribeFn(const char * const lang_tag,
00033 const char * const provider_name,
00034 const char * const provider_desc,
00035 const char * const provider_file,
00036 void * user_data)
00037 {
00038 QSpellEnchantClient *client =
00039 reinterpret_cast<QSpellEnchantClient*>(user_data);
00040
00041 Q_UNUSED(provider_name);
00042 Q_UNUSED(provider_desc);
00043 Q_UNUSED(provider_file);
00044 client->addLanguage(QString::fromLatin1(lang_tag));
00045
00046 }
00047
00048 QSpellEnchantClient::QSpellEnchantClient(QObject *parent, const char *name, const QStringList& )
00049 : Client(parent, name)
00050 {
00051 m_broker = enchant_broker_init();
00052 enchant_broker_list_dicts(m_broker,
00053 enchantDictDescribeFn,
00054 this);
00055 }
00056
00057 QSpellEnchantClient::~QSpellEnchantClient()
00058 {
00059 enchant_broker_free(m_broker);
00060 }
00061
00062 Dictionary *QSpellEnchantClient::dictionary(
00063 const QString &language)
00064 {
00065 EnchantDict *dict = enchant_broker_request_dict(m_broker,
00066 language.utf8());
00067
00068 if (!dict) {
00069 const char *err = enchant_broker_get_error(m_broker);
00070 kdDebug()<<"Couldn't create speller for"<<language<<": "<<err<<endl;
00071 return 0;
00072 } else {
00073
00074 int refs = m_dictRefs[dict];
00075 ++refs;
00076 m_dictRefs[dict] = refs;
00077 return new QSpellEnchantDict(this, m_broker, dict, language);
00078 }
00079 }
00080
00081 QStringList QSpellEnchantClient::languages() const
00082 {
00083 return m_languages;
00084 }
00085
00086 void QSpellEnchantClient::addLanguage(const QString &lang)
00087 {
00088 if (m_languages.find(lang) == m_languages.end())
00089 m_languages.append(lang);
00090 }
00091
00092 void QSpellEnchantClient::removeDictRef(EnchantDict *dict)
00093 {
00094 int refs = m_dictRefs[dict];
00095 --refs;
00096 m_dictRefs[dict] = refs;
00097 if (refs <= 0) {
00098 m_dictRefs.remove(dict);
00099 enchant_broker_free_dict(m_broker, dict);
00100 }
00101 }
00102
00103 #include "enchantclient.moc"
|