Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
304 Franz 1
/***************************************************************************
2
 *   Riku Leino, tsoots@welho.com                                          *
3
 ***************************************************************************/
4
#include "nftsettings.h"
5
 
320 Franz 6
nftsettings::nftsettings(QString guilang)
304 Franz 7
{
320 Franz 8
        lang = guilang;
304 Franz 9
        scribusShare = PREL;
10
        scribusShare += "/share/scribus";
11
        scribusUserHome = QDir::convertSeparators(QDir::homeDirPath()+"/.scribus");
12
        nftRCFile = QDir::convertSeparators(scribusUserHome+"/nftrc.xml");
13
        read();
14
}
15
 
16
void nftsettings::read()
17
{
18
        QDir scribus(scribusUserHome);
19
        if (!scribus.exists("nftrc.xml")) {
20
                getDefaults();
21
        }
22
 
23
        handler = new nftrcreader(&templates,scribusUserHome);
24
 
25
        QFile* rc = new QFile(nftRCFile);
26
        QXmlInputSource* source = new QXmlInputSource(rc);
27
 
28
        reader = new QXmlSimpleReader();
29
        reader->setContentHandler(handler);
30
        reader->parse(source);
31
        delete source;
32
        delete rc;
33
 
34
        addTemplates(scribusShare);
35
        addTemplates(scribusUserHome);
36
}
37
 
38
void nftsettings::addTemplates(QString dir) // dir will be searched for a sub folder called templates
39
{
308 Franz 40
        // Add templates from the dir itself
320 Franz 41
        QString tmplFile = findTemplateXml(dir + "/templates");
42
        QFile* tmplxml = new QFile(QDir::convertSeparators(tmplFile));
308 Franz 43
        handler->setSourceDir(dir + "/templates");
320 Franz 44
        handler->setSourceFile(tmplFile);
309 Franz 45
        if (tmplxml->exists())
46
        {
308 Franz 47
                QXmlInputSource* source = new QXmlInputSource(tmplxml);
48
                reader->parse(source);
49
                delete source;
50
        }
51
        delete tmplxml;
52
 
53
 
309 Franz 54
        // And from all the subdirectories. template.xml file is only searched one dir level deeper than the dir
304 Franz 55
        QDir tmpldir(dir + "/templates");
309 Franz 56
        if (tmpldir.exists())
57
        {
304 Franz 58
                tmpldir.setFilter(QDir::Dirs);
59
                QStringList dirs = tmpldir.entryList();
309 Franz 60
                for (uint i = 0; i < dirs.size(); ++i)
61
                {
308 Franz 62
                        if ((dirs[i] != ".") && (dirs[i] != "..")) {
320 Franz 63
                                tmplFile = findTemplateXml(dir + "/templates/" + dirs[i]);
64
                                QFile* tmplxml = new QFile(QDir::convertSeparators(tmplFile));
308 Franz 65
                                handler->setSourceDir(dir+"/templates/"+dirs[i]);
320 Franz 66
                                handler->setSourceFile(tmplFile);
309 Franz 67
                                if (tmplxml->exists())
68
                                {
308 Franz 69
                                        QXmlInputSource* source = new QXmlInputSource(tmplxml);
70
                                        reader->parse(source);
71
                                        delete source;
72
                                }
73
                                delete tmplxml;
304 Franz 74
                        }
75
                }
76
        }
77
}
78
 
79
void nftsettings::write()
80
{
81
//      QFile rc(nftRCFile);
82
}
83
 
84
void nftsettings::getDefaults()
85
{
86
        QString tPrel = PREL;
87
        QString tmplDir = tPrel + "/share/scribus/templates";
88
        // Create the defaults ~/.scribus/nft/nftrc.xml file
89
        QString text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
90
        text += "<nft>\n";
91
        text += "\t<settings>\n";
92
        text += "\t</settings>\n";
93
        text += "</nft>\n";
94
 
95
        QFile rc(nftRCFile);
309 Franz 96
        if ( rc.open( IO_WriteOnly ) )
97
        {
304 Franz 98
                QTextStream stream(&rc);
99
                stream.setEncoding(QTextStream::UnicodeUTF8);
100
                stream << text;
101
                rc.close();
102
        }
103
}
104
 
320 Franz 105
QString nftsettings::findTemplateXml(QString dir)
106
{
107
        QString tmp = dir + "/template." + lang + ".xml";
108
        if (QFile(tmp).exists())
109
                return tmp;
110
 
111
        if (lang.length() > 2)
112
        {
113
                tmp = dir + "/template." + lang.left(2) + ".xml";
114
                if (QFile(tmp).exists())
115
                        return tmp;
116
        }
117
        return dir + "/template.xml";  
118
}
119
 
304 Franz 120
nftsettings::~ nftsettings()
121
{
122
        delete reader;
123
        delete handler;
309 Franz 124
        for (uint i = 0; i < templates.size(); ++i)
320 Franz 125
        {
126
                if (templates[i] != NULL)
127
                        delete templates[i];
128
        }
304 Franz 129
}