--- /dev/null
+ #include "xdxfplugin.h"
+ #include <QDebug>
+ #include <QFile>
+ #include <QXmlStreamReader>
+ #include <QtPlugin>
+ #include "TranslationXdxf.h"
++#include "../../../../includes/settings.h"
+
+ XdxfPlugin::XdxfPlugin(QObject *parent) : CommonDictInterface(parent),
+ _langFrom(tr("")), _langTo(tr("")),_name(tr("")),
+ _type(tr("xdxf")), _infoNote(tr("")) {
+ path="dict.xdxf";
+ stopped = false;
++ _settings = new Settings();
++ _dictDialog = new XdxfDictDialog(this);
+ }
+
+ QString XdxfPlugin::langFrom() const {
+ return _langFrom;
+ }
+
+ QString XdxfPlugin::langTo() const {
+ return _langTo;
+ }
+
+ QString XdxfPlugin::name() const {
+ return _name;
+ }
+
+ QString XdxfPlugin::type() const {
+ return _type;
+ }
+
+ QString XdxfPlugin::infoNote() const {
+ return _infoNote;
+ }
+
+ QList<Translation*> XdxfPlugin::searchWordList(QString word, int limit) {
+ stopped = false;
+ QRegExp regWord(word);
+ regWord.setCaseSensitivity(Qt::CaseInsensitive);
+ regWord.setPatternSyntax(QRegExp::Wildcard);
+
+ QList<Translation*> translations;
+ QFile dictionaryFile(path);
+ if(!dictionaryFile.open(QFile::ReadOnly | QFile::Text)) {
+ qDebug()<<"Error: could not open file";
+ return translations;
+ }
+ QXmlStreamReader dictionaryReader(&dictionaryFile);
+ dictionaryReader.readNextStartElement();
+ if(dictionaryReader.name()=="xdxf") {
+ if(dictionaryReader.attributes().hasAttribute("lang_from"))
+ _langFrom = dictionaryReader.attributes().value("lang_from").toString();
+ if(dictionaryReader.attributes().hasAttribute("lang_to"))
+ _langTo = dictionaryReader.attributes().value("lang_to").toString();
+ }
+ dictionaryReader.readNextStartElement();
+ if(dictionaryReader.name()=="full_name")
+ _name=dictionaryReader.readElementText();
+ dictionaryReader.readNextStartElement();
+ if(dictionaryReader.name()=="description")
+ _infoNote=dictionaryReader.readElementText();
+ QString a;
+ int i=0;
+ while(!dictionaryReader.atEnd() && !stopped){
+ dictionaryReader.readNextStartElement();
+ if(dictionaryReader.name()=="ar"){
+ while(dictionaryReader.name()!="k" && !dictionaryReader.atEnd())
+ dictionaryReader.readNextStartElement();
+ a = dictionaryReader.readElementText();
+ if(regWord.exactMatch(a) && i<limit) {
+ translations.append(new TranslationXdxf(a,_infoNote,this));
+ i++;
+ if(i>=limit)
+ break;
+ }
+ }
+ }
+ stopped=false;
+ dictionaryFile.close();
+ return translations;
+ }
+
+ QString XdxfPlugin::search(QString key) {
+ QFile dictionaryFile(path);
+ if(!dictionaryFile.open(QFile::ReadOnly | QFile::Text)) {
+ qDebug()<<"Error: could not open file";
+ return "";
+ }
+ QXmlStreamReader dictionaryReader(&dictionaryFile);
+
+ QString a;
+ bool match =false;
+ while (!dictionaryReader.atEnd()) {
+ dictionaryReader.readNext();
+ if(dictionaryReader.tokenType() == QXmlStreamReader::StartElement) {
+ if(dictionaryReader.name()=="k") {
+ a = dictionaryReader.readElementText();
+ if(a==key)
+ match = true;
+ }
+ }
+ else if(dictionaryReader.tokenType() == QXmlStreamReader::Characters) {
+ if(match) {
+ QString temp(dictionaryReader.text().toString().replace("\n",""));
+ dictionaryFile.close();
+ return temp;
+ }
+ }
+ }
+ return "";
+ }
+
+ void XdxfPlugin::stop() {
+ stopped=true;
+ }
+
-QDialog* XdxfPlugin::loadDialog() {
- path="dict.xdxf";
++DictDialog* XdxfPlugin::dictDialog() {
++ return _dictDialog;
+ }
+
-QDialog* XdxfPlugin::settingsDialog() {
- path="dict.xdxf";
-}
+
+ CommonDictInterface* XdxfPlugin::getNew(const Settings*) const {
+ return new XdxfPlugin();
+ }
+
+ bool XdxfPlugin::isAvailable() const {
+ return true;
+ }
+
+ void XdxfPlugin::setHash(uint _hash)
+ {
+ this->_hash=_hash;
+ }
+
+ uint XdxfPlugin::hash() const
+ {
+ return _hash;
+ }
+
++Settings* XdxfPlugin::settings() {
++ return _settings;
++}
++
+ Q_EXPORT_PLUGIN2(xdxf, XdxfPlugin)
--- /dev/null
+ #ifndef XDXFPLUGIN_H
+ #define XDXFPLUGIN_H
+
+ #include "../../../includes/CommonDictInterface.h"
+ #include <QObject>
+ #include <QDialog>
+ #include <QRegExp>
+ #include <QTime>
++#include "XdxfDictDialog.h"
+
+ class TranslationXdxf;
+
+ class XdxfPlugin : public CommonDictInterface
+ {
+ Q_OBJECT
+ Q_INTERFACES(CommonDictInterface)
+ public:
+ XdxfPlugin(QObject *parent=0);
+
+ //! returns source language code iso 639-2
+ QString langFrom() const;
+
+ //! returns destination language code iso 639-2
+ QString langTo() const;
+
+ //! returns dictionary name (like "old english" or so)
+ QString name() const;
+
+ //! returns dictionary type (xdxf, google translate, etc)
+ QString type() const;
+
+ //! returns information about dictionary in html (name, authors, etc)
+ QString infoNote() const;
+
- //! returns dialog that creates new dictionary and fills necessary options
- //! QDialog should return Setting* object after being shown
- QDialog* loadDialog();
++ /*! returns DictDialog object that creates dialogs
++ for adding new dictionary and change plugin settings
++ */
++ DictDialog* dictDialog();
+
- //! returns dialog with dictionary settings
- QDialog* settingsDialog();
+
+ //! returns new, clean copy of plugin with setting set as in Settings*
+ CommonDictInterface* getNew(const Settings*) const;
+
+ //! returns whether plugin can start searching
+ bool isAvailable() const;
+
+ //! returns a description of a word given by a QString
+ QString search(QString key);
+
+ //! returns a unique hash for a dictionary
+ uint hash() const;
+
+ //! set unique value (unique for every dictionary not plugin)
+ void setHash(uint);
+
++ //! returns current plugin settings
++ Settings* settings();
++
+ public Q_SLOTS:
+ /*! performs search in dictionary
+ \param word word to search in dictionary
+ \param limit limit on number of results
+
+ After finishing search it has to emit
+ \see CommonDictInterface:finalTranslation finalTranslation
+ */
+ QList<Translation*> searchWordList(QString word, int limit);
+
+ //! stop current operation
+ void stop();
+
+ private:
+ bool isCached();
+ QString _langFrom;
+ QString _langTo;
+ QString _name;
+ QString _type;
+ QString _infoNote;
+ QDialog *_loadDialog;
+ QDialog *_settingsDialog;
+ QString path;
+ uint _hash;
+ bool stopped; /*volatile*/
++ Settings *_settings;
++ XdxfDictDialog* _dictDialog;
+ };
+
+ #endif // XDXFPLUGIN_H
+
+