Subversion Repositories Scribus

Rev

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