Subversion Repositories Scribus

Rev

Rev 24729 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
16736 jghali 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
7
/***************************************************************************
8
 *   Riku Leino, tsoots@gmail.com                                          *
9
 ***************************************************************************/
10
 
24734 craig 11
#include <QStringRef>
24729 craig 12
 
16736 jghali 13
#include "nftrcreader.h"
14
 
15
using namespace std;
16
 
22635 craig 17
nftrcreader::nftrcreader(std::vector<nfttemplate*> *tmplts, const QString& sourceDir)
16736 jghali 18
{
19
        templates = tmplts;
20
        currentDir = sourceDir;
21
        setupCategories();
22
}
23
 
22635 craig 24
bool nftrcreader::parse(const QString& filePath)
16736 jghali 25
{
18655 jghali 26
        bool firstElement = true;
16736 jghali 27
 
18655 jghali 28
        QFile file(filePath);
29
        if (!file.open(QFile::ReadOnly))
30
                return false;
16736 jghali 31
 
18655 jghali 32
        QXmlStreamReader reader(&file);
33
        while (!reader.atEnd() && !reader.hasError())
34
        {
35
                QXmlStreamReader::TokenType tType = reader.readNext();
36
                if (tType != QXmlStreamReader::StartElement)
37
                        continue;
16736 jghali 38
 
24734 craig 39
                QStringRef tagName = reader.name();
18655 jghali 40
                if (firstElement)
16736 jghali 41
                {
24734 craig 42
                        if (tagName != "templates")
18655 jghali 43
                                return false;
44
                        firstElement = false;
45
                        continue;
16736 jghali 46
                }
18655 jghali 47
 
24734 craig 48
                if (tagName == "template")
18655 jghali 49
                {
50
                        QXmlStreamAttributes attrs = reader.attributes();
51
                        QString attrCat  = attrs.value("category").toString();
52
                        QString category = getCategory(attrCat);
53
 
54
                        nfttemplate* tmpTemplate = new nfttemplate(currentFile, category);
55
                        tmpTemplate->enCategory = attrCat;
56
                        if (parseTemplate(reader, tmpTemplate))
57
                                templates->push_back(tmpTemplate);
58
                        else
59
                                delete tmpTemplate;
60
                }
61
                else
62
                {
63
                        reader.skipCurrentElement();
64
                }
16736 jghali 65
        }
66
 
18655 jghali 67
        return (!reader.hasError());
16736 jghali 68
}
69
 
18655 jghali 70
bool nftrcreader::parseTemplate(QXmlStreamReader& reader, nfttemplate* nftTemplate)
16736 jghali 71
{
18655 jghali 72
        if (!reader.isStartElement())
73
                return false;
74
 
24734 craig 75
        QStringRef elemName = reader.name();
76
        if (elemName != "template")
18655 jghali 77
                return false;
78
 
79
        while (!reader.atEnd() && !reader.hasError())
16736 jghali 80
        {
18655 jghali 81
                QXmlStreamReader::TokenType tType = reader.readNext();
82
                if (reader.hasError())
83
                        return false;
16736 jghali 84
 
18655 jghali 85
                if (tType == QXmlStreamReader::EndElement)
86
                        break;
87
                if (tType != QXmlStreamReader::StartElement)
88
                        continue;
16736 jghali 89
 
24734 craig 90
                QStringRef tagName = reader.name();
91
                if (tagName == "name")
18655 jghali 92
                        nftTemplate->name = reader.readElementText();
24734 craig 93
                else if (tagName == "file")
18649 jghali 94
                {
18655 jghali 95
                        QString tmp = reader.readElementText();
96
                        if (tmp.left(1) == "/")
97
                                nftTemplate->file = tmp;
98
                        else
99
                                nftTemplate->file = currentDir + "/" + tmp;
18649 jghali 100
                }
24734 craig 101
                else if (tagName == "tnail")
18655 jghali 102
                {
103
                        QString tmp = reader.readElementText();
104
                        if (tmp.left(1) == "/")
105
                                nftTemplate->tnail = tmp;
106
                        else
107
                                nftTemplate->tnail = currentDir + "/" + tmp;
108
                }
24734 craig 109
                else if (tagName == "img")
18655 jghali 110
                {
111
                        QString tmp = reader.readElementText();
112
                        if (tmp.left(1) == "/")
113
                                nftTemplate->img = tmp;
114
                        else
115
                                nftTemplate->img = currentDir + "/" + tmp;
116
                }
24734 craig 117
                else if (tagName == "psize")
18655 jghali 118
                        nftTemplate->psize = reader.readElementText();
24734 craig 119
                else if (tagName == "color")
18655 jghali 120
                        nftTemplate->color = reader.readElementText();
24734 craig 121
                else if (tagName == "descr")
18655 jghali 122
                        nftTemplate->descr = reader.readElementText();
24734 craig 123
                else if (tagName == "usage")
18655 jghali 124
                        nftTemplate->usage = reader.readElementText();
24734 craig 125
                else if (tagName == "scribus_version")
18655 jghali 126
                        nftTemplate->scribusVersion = reader.readElementText();
24734 craig 127
                else if (tagName == "date")
18655 jghali 128
                        nftTemplate->date = reader.readElementText();
24734 craig 129
                else if (tagName == "author")
18655 jghali 130
                        nftTemplate->author = reader.readElementText();
24734 craig 131
                else if (tagName == "email")
18655 jghali 132
                        nftTemplate->email = reader.readElementText();
133
                else
134
                {
135
                        reader.skipCurrentElement();
136
                }
16736 jghali 137
        }
138
 
18655 jghali 139
        return (nftTemplate->isValid());
16736 jghali 140
}
141
 
22635 craig 142
void nftrcreader::setSourceDir(const QString& source)
16736 jghali 143
{
144
        currentDir = source;
145
}
146
 
22635 craig 147
void nftrcreader::setSourceFile(const QString& sourceFile)
16736 jghali 148
{
149
        currentFile = sourceFile;
150
}
151
 
22635 craig 152
QString nftrcreader::getCategory(const QString& cat)
16736 jghali 153
{
154
        QMap<QString, QString>::iterator it = cats.find(cat);
155
        if (it==cats.end())
156
                cats.insert(cat, cat);
157
        if (it != cats.end())
158
                return it.value();
159
        return cat;
160
}
161
 
162
void nftrcreader::setupCategories()
163
{
164
        // en will be used in template.xml and it will be then replaced with the lang when used for users
165
        // to get the categories in their language.
16710 jghali 166
        cats.insert(QString("Advertisements"), QObject::tr("Advertisements"));
167
        cats.insert(QString("Announcements") , QObject::tr("Announcements"));
168
        cats.insert(QString("Brochures")  , QObject::tr("Brochures"));
169
        cats.insert(QString("Business Cards"), QObject::tr("Business Cards"));
170
        cats.insert(QString("Calendars")  , QObject::tr("Calendars"));
171
        cats.insert(QString("Cards")      , QObject::tr("Cards"));
172
        cats.insert(QString("Catalogs")   , QObject::tr("Catalogs"));
173
        cats.insert(QString("Envelopes")  , QObject::tr("Envelopes"));
174
        cats.insert(QString("Flyers")     , QObject::tr("Flyers"));
175
        cats.insert(QString("Folds")      , QObject::tr("Folds"));
176
        cats.insert(QString("Grids")      , QObject::tr("Grids"));
177
        cats.insert(QString("Labels")     , QObject::tr("Labels"));
178
        cats.insert(QString("Letterheads"), QObject::tr("Letterheads"));
179
        cats.insert(QString("Magazines")  , QObject::tr("Magazines"));
180
        cats.insert(QString("Media Cases")  , QObject::tr("Media Cases"));
181
        cats.insert(QString("Menus")      , QObject::tr("Menus"));
182
        cats.insert(QString("Newsletters"), QObject::tr("Newsletters"));
183
        cats.insert(QString("Own Templates"), QObject::tr("Own Templates"));
184
        cats.insert(QString("PDF Forms")  , QObject::tr("PDF Forms"));
185
        cats.insert(QString("PDF Presentations") , QObject::tr("PDF Presentations"));
186
        cats.insert(QString("Posters")    , QObject::tr("Posters"));
187
        cats.insert(QString("Programs")   , QObject::tr("Programs"));
188
        cats.insert(QString("Signs")      , QObject::tr("Signs"));
16736 jghali 189
        cats.insert(QString("Text Documents"), QObject::tr("Text Documents"));
190
}