fix small bug(wildcard), and change some comments
[mdictionary] / src / plugins / xdxf / xdxfplugin.h
1 /*******************************************************************************
2
3     This file is part of mDictionary.
4
5     mDictionary is free software: you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation, either version 3 of the License, or
8     (at your option) any later version.
9
10     mDictionary is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with mDictionary.  If not, see <http://www.gnu.org/licenses/>.
17
18     Copyright 2010 Comarch S.A.
19
20 *******************************************************************************/
21 /*!
22     \file xdxfplugin.h
23     \author Jakub Jaszczynski <j.j.jaszczynski@gmail.com>
24 */
25
26 #ifndef XDXFPLUGIN_H
27 #define XDXFPLUGIN_H
28
29 #include <QObject>
30 #include <QDialog>
31 #include <QRegExp>
32 #include <QTime>
33 #include <QSqlQuery>
34 #include <QSqlDatabase>
35 #include <QSqlError>
36 #include <QFile>
37 #include <QXmlStreamReader>
38 #include <QtPlugin>
39 #include <QHash>
40
41 #include "../../include/CommonDictInterface.h"
42 #include "../../include/settings.h"
43 #include "XdxfDictDialog.h"
44 #include "XdxfCachingDialog.h"
45 #include "TranslationXdxf.h"
46 #include "XdxfDictDownloader.h"
47
48 class TranslationXdxf;
49
50 class XdxfPlugin : public CommonDictInterface
51 {
52     Q_OBJECT
53     Q_INTERFACES(CommonDictInterface)
54 public:
55     XdxfPlugin(QObject *parent=0);
56     ~XdxfPlugin();
57
58     //! \returns source language code iso 639-2
59     QString langFrom() const;
60
61     //! \returns destination language code iso 639-2
62     QString langTo() const;
63
64     //! \returns dictionary name (like "old English" or so)
65     QString name() const;
66
67     //! \returns dictionary type (xdxf, google translate, etc)
68     QString type() const;
69
70     //! \returns information about dictionary in xml (name, authors, etc)
71     QString infoNote() const;
72
73     /*!
74         \returns DictDialog object that creates dialogs
75         for adding a new dictionary and changing plugin settings
76     */
77     DictDialog* dictDialog();
78
79     //! \returns new, clean copy of plugin with settings set as in Settings*
80     CommonDictInterface* getNew(const Settings*) const;
81
82     //! \returns whether plugin can start searching
83     bool isAvailable() const;
84
85     //! \returns a description of a word given by a QString
86     QString search(QString key);
87
88     //! \returns current plugin settings
89     Settings* settings();
90
91     //! \returns words count in a dictionary
92     long wordsCount();
93
94     //! Sets new settings
95     bool setSettings(const Settings*);
96
97     //! \returns plugin icon
98     QIcon* icon();
99
100     /*!
101         plugin should delete any files (eg. cache) that have been created and are ready
102         to be deleted
103     */
104     void clean();
105
106     static XdxfDictDownloader dictDownloader;
107
108 public Q_SLOTS:
109     /*!
110         performs search in a dictionary
111         \param  word word to search for in a dictionary
112         \param limit limit on number of results
113
114         After finishing search it has to emit
115         \see CommonDictInterface:finalTranslation  finalTranslation
116     */
117     QList<Translation*> searchWordList(QString word, int limit=0);
118
119     //! stops current operation
120     void stop();
121
122     //! loads translations for each plugin only once
123     void retranslate();
124
125 Q_SIGNALS:
126     //! emitted with percent count of caching progress, and time elapsed from
127     //! last signal emit
128     void updateCachingProgress(int, int);
129
130 private:
131     /*!
132         \returns true or false depending on whether the dictionary is cached
133         or not
134     */
135     bool isCached();
136     /*!
137         searches for a list of words similar to a word in a database file
138         \param word key compared with keys in a database
139         \param limit limits the number of translations in returned list,
140         0 means unlimited
141         \returns list of translations
142     */
143     QList<Translation*> searchWordListCache(QString word, int limit=0);
144
145     /*!
146         searches for a list of words similar to a word in a xdxf file
147         \param word key compared with keys in a xdxf file
148         \param limit limits the number of translations in returned list,
149         0 means unlimited
150         \returns list of translations
151     */
152     QList<Translation*> searchWordListFile(QString word, int limit=0);
153
154     /*!
155         searches for a translation of a word which is exactly like a key
156         in a xdxf file
157     */
158     QString searchFile(QString key);
159
160     /*!
161         searches for a translation of a word which is exactly like a key
162         in a database file
163     */
164     QString searchCache(QString key);
165
166     //! scans dictionary file to get information about it
167     bool getDictionaryInfo();
168
169     //! counts the keys in a xdxf file
170     int countWords();
171
172     /*!
173         transforms xdxf files to database files (caching operation)
174         \returns true on success, false on failure
175     */
176     bool makeCache(QString dir);
177
178     static bool dictDownloaderInitialized;
179
180     QString _langFrom;
181     QString _langTo;
182     QString _name;
183     QString _infoNote;
184     QString _dictionaryInfo;
185     QIcon _icon;
186     QSqlDatabase db;
187     QString db_name;
188     long _wordsCount;
189     volatile bool stopped;
190     Settings *_settings;
191     XdxfDictDialog* _dictDialog;
192     XdxfCachingDialog* cachingDialog;
193 };
194
195 #endif // XDXFPLUGIN_H
196
197