Subversion Repositories Scribus

Rev

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