summaryrefslogtreecommitdiffstats
path: root/kspell2/broker.h
blob: 186c03aefec0ec1383b69d386eb9f8788dcdebc5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// -*- Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*-
/**
 * broker.h
 *
 * Copyright (C)  2003  Zack Rusin <zack@kde.org>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301  USA
 */
#ifndef KSPELL_BROKER_H
#define KSPELL_BROKER_H

#include <ksharedptr.h>

#include <qobject.h>
#include <qstringlist.h>
#include <qstring.h>

class KSharedConfig;
template <typename T>
class QPtrDict;

namespace KSpell2
{
    class Settings;
    class Dictionary;
    class DefaultDictionary;

    /**
     * @short Class used to deal with dictionaries
     *
     * This class manages all dictionaries. It's the top level
     * KSpell2 class, you can think of it as the kernel or manager
     * of the KSpell2 architecture.
     */
    class KDE_EXPORT Broker : public QObject,
                   public KShared
    {
        Q_OBJECT
    public:
        typedef KSharedPtr<Broker> Ptr;
        /**
         * Constructs the broker.
         *
         * It's very important that you assign it to Broker::Ptr
         * as soon as possible. Broker is reference counted so
         * if you don't want to have it deleted under you simply
         * have to hold it in a Broker::Ptr for as long as you're
         * using it.
         *
         * @param config is the name of config file which
         *        broker should use to read default language
         *        and default client values. If no value will
         *        be passed Broker will use global kspellrc file.
         */
        static Broker *openBroker( KSharedConfig *config = 0 );

    public:
        ~Broker();

        /**
         * Function returns the so-called DefaultDictionary. It's a
         * special form a dictionary which automatically mutates
         * according to changes tot the KSpell2::Settings object.
         * You also can't delete it like other dictionaries since
         * it's owned by the Broker and it will take care of it.
         */
        DefaultDictionary *defaultDictionary() const;

        /**
         * Returns dictionary for the given language and preferred client.
         *
         * @param language specifies the language of the dictionary. If an
         *        empty string will be passed the default language will
         *        be used. Has to be one of the values returned by
         *        \ref languages()
         * @param client specifies the preferred client. If no client is
         *               specified a client which supports the given
         *               language is picked. If a few clients supports
         *               the same language the one with the biggest
         *               reliability value is returned.
         *
         */
        Dictionary *dictionary(
            const QString& language = QString::null,
            const QString& client = QString::null ) const;

        /**
         * Returns names of all supported clients (e.g. ISpell, ASpell)
         */
        QStringList clients() const;

        /**
         * Returns a list of supported languages.
         */
        QStringList languages() const;

        /**
         * Returns the Settings object used by the broker.
         */
        Settings *settings() const;
    signals:
        /**
         * Signal is emitted whenever the Settings object
         * associated with this Broker changes.
         */
        void configurationChanged();

    protected:
        friend class Settings;
        void changed();
    private:
        Broker( KSharedConfig *config );
        void loadPlugins();
        void loadPlugin( const QString& );
    private:
        class Private;
        Private *d;
    private:
        static QPtrDict<Broker> *s_brokers;
    };
}

#endif