Subversion Repositories Scribus

Rev

Rev 1693 | Rev 4430 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
304 Franz 1
/***************************************************************************
1184 tsoots 2
 *   Riku Leino, tsoots@gmail.com                                          *
304 Franz 3
 ***************************************************************************/
4
#include "nftsettings.h"
1693 craig 5
#include "scpaths.h"
304 Franz 6
 
409 Franz 7
nftsettings::nftsettings(QString guilang, QString templateDir)
304 Franz 8
{
320 Franz 9
        lang = guilang;
1693 craig 10
        scribusShare = ScPaths::instance().templateDir();
304 Franz 11
        scribusUserHome = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus");
409 Franz 12
        userTemplateDir = templateDir;
13
        if (userTemplateDir.right(1) == "/")
14
                userTemplateDir = userTemplateDir.left(userTemplateDir.length() - 1);
304 Franz 15
        read();
16
}
17
 
18
void nftsettings::read()
19
{
20
        handler = new nftrcreader(&templates,scribusUserHome);
21
        reader = new QXmlSimpleReader();
22
        reader->setContentHandler(handler);
409 Franz 23
 
872 cbradney 24
        addTemplates(scribusShare);
409 Franz 25
        addTemplates(scribusUserHome+"/templates");
2877 cbradney 26
        if ((!userTemplateDir.isNull()) && (!userTemplateDir.isEmpty()))
409 Franz 27
                addTemplates(userTemplateDir);
304 Franz 28
}
29
 
30
void nftsettings::addTemplates(QString dir) // dir will be searched for a sub folder called templates
31
{
308 Franz 32
        // Add templates from the dir itself
409 Franz 33
        QString tmplFile = findTemplateXml(dir);
320 Franz 34
        QFile* tmplxml = new QFile(QDir::convertSeparators(tmplFile));
409 Franz 35
        handler->setSourceDir(dir);
320 Franz 36
        handler->setSourceFile(tmplFile);
309 Franz 37
        if (tmplxml->exists())
38
        {
308 Franz 39
                QXmlInputSource* source = new QXmlInputSource(tmplxml);
40
                reader->parse(source);
41
                delete source;
42
        }
43
        delete tmplxml;
44
 
45
 
309 Franz 46
        // And from all the subdirectories. template.xml file is only searched one dir level deeper than the dir
409 Franz 47
        QDir tmpldir(dir);
309 Franz 48
        if (tmpldir.exists())
49
        {
304 Franz 50
                tmpldir.setFilter(QDir::Dirs);
51
                QStringList dirs = tmpldir.entryList();
309 Franz 52
                for (uint i = 0; i < dirs.size(); ++i)
53
                {
308 Franz 54
                        if ((dirs[i] != ".") && (dirs[i] != "..")) {
409 Franz 55
                                tmplFile = findTemplateXml(dir + "/" + dirs[i]);
320 Franz 56
                                QFile* tmplxml = new QFile(QDir::convertSeparators(tmplFile));
409 Franz 57
                                handler->setSourceDir(dir+"/"+dirs[i]);
320 Franz 58
                                handler->setSourceFile(tmplFile);
309 Franz 59
                                if (tmplxml->exists())
60
                                {
308 Franz 61
                                        QXmlInputSource* source = new QXmlInputSource(tmplxml);
62
                                        reader->parse(source);
63
                                        delete source;
64
                                }
65
                                delete tmplxml;
304 Franz 66
                        }
67
                }
68
        }
69
}
70
 
320 Franz 71
QString nftsettings::findTemplateXml(QString dir)
72
{
73
        QString tmp = dir + "/template." + lang + ".xml";
74
        if (QFile(tmp).exists())
75
                return tmp;
76
 
77
        if (lang.length() > 2)
78
        {
79
                tmp = dir + "/template." + lang.left(2) + ".xml";
80
                if (QFile(tmp).exists())
81
                        return tmp;
82
        }
83
        return dir + "/template.xml";  
84
}
85
 
304 Franz 86
nftsettings::~ nftsettings()
87
{
88
        delete reader;
89
        delete handler;
309 Franz 90
        for (uint i = 0; i < templates.size(); ++i)
320 Franz 91
        {
92
                if (templates[i] != NULL)
93
                        delete templates[i];
94
        }
304 Franz 95
}