Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
3 paul 1
/***************************************************************************
2
                          serializer.cpp  -  description
3
                             -------------------
4
    begin                : Sat May 5 2001
5
    copyright            : (C) 2001 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
17
 
18
#include "serializer.h"
217 Franz 19
#include "scribusdoc.h"
456 fschmid 20
#include "pageitem.h"
3 paul 21
#include <qfile.h>
22
#include <qtextstream.h>
23
#include <qtextcodec.h>
24
extern bool loadText(QString nam, QString *Buffer);
25
Serializer::Serializer(QString name)
26
{
27
        Filename = name;
28
        Objekt = "";
29
}
30
 
31
QString Serializer::GetObjekt()
32
{
33
        return Objekt;
34
}
35
 
36
void Serializer::PutText(PageItem *Item)
37
{
167 Franz 38
        uint a;
39
        QString Dat = "";
1065 cbradney 40
        QPtrList<ScText> y = Item->itemText;
167 Franz 41
        for (a=0; a<y.count(); ++a)
217 Franz 42
        {
3 paul 43
                QString b = y.at(a)->ch;
44
                if (b == QChar(13))
45
                        b = "\n";
217 Franz 46
                Dat += b;
47
        }
19 Franz 48
        Objekt = Dat;
3 paul 49
}
50
 
24 Franz 51
void Serializer::GetText(PageItem *Item, int Absatz, QString font, int size, bool Append)
3 paul 52
{
1065 cbradney 53
        struct ScText *hg;
1957 cbradney 54
        PageItem *nextItem;
105 Franz 55
        PageItem *it = Item;
456 fschmid 56
        ScribusDoc* doku = it->Doc;
3 paul 57
        uint a;
58
        if (!Append)
167 Franz 59
        {
1957 cbradney 60
                nextItem = Item;
61
                while (nextItem != 0)
167 Franz 62
                {
1957 cbradney 63
                        if (nextItem->BackBox != 0)
64
                                nextItem = nextItem->BackBox;
105 Franz 65
                        else
66
                                break;
167 Franz 67
                }
1957 cbradney 68
                it = nextItem;
69
                while (nextItem != 0)
167 Franz 70
                {
2443 fschmid 71
                        for (ScText *it = nextItem->itemText.first(); it != 0; it = nextItem->itemText.next())
72
                        {
73
                                if ((it->ch == QChar(25)) && (it->cembedded != 0))
2447 fschmid 74
                                        doku->FrameItems.remove(it->cembedded);
2443 fschmid 75
                        }
1957 cbradney 76
                        nextItem->itemText.clear();
77
                        nextItem->CPos = 0;
78
                        nextItem = nextItem->NextBox;
3 paul 79
                }
2447 fschmid 80
                for (uint a = 0; a < doku->FrameItems.count(); ++a)
81
                {
82
                        doku->FrameItems.at(a)->ItemNr = a;
83
                }
167 Franz 84
        }
3 paul 85
        for (a=0; a<Objekt.length(); ++a)
167 Franz 86
        {
105 Franz 87
                if ((Objekt.at(a) == QChar(0)) || (Objekt.at(a) == QChar(13)))
88
                        continue;
1065 cbradney 89
                hg = new ScText;
105 Franz 90
                hg->ch = Objekt.at(a);
91
                if ((hg->ch == QChar(10)) || (hg->ch == QChar(5)))
92
                        hg->ch = QChar(13);
1065 cbradney 93
                if (doku->docParagraphStyles[Absatz].Font != "")
217 Franz 94
                {
1789 fschmid 95
                        hg->cfont = (*doku->AllFonts)[doku->docParagraphStyles[Absatz].Font];
1065 cbradney 96
                        hg->csize = doku->docParagraphStyles[Absatz].FontSize;
97
                        hg->cstyle = doku->docParagraphStyles[Absatz].FontEffect;
98
                        hg->ccolor = doku->docParagraphStyles[Absatz].FColor;
99
                        hg->cshade = doku->docParagraphStyles[Absatz].FShade;
100
                        hg->cstroke = doku->docParagraphStyles[Absatz].SColor;
101
                        hg->cshade2 = doku->docParagraphStyles[Absatz].SShade;
2273 fschmid 102
                        hg->cshadowx = doku->docParagraphStyles[Absatz].txtShadowX;
103
                        hg->cshadowy = doku->docParagraphStyles[Absatz].txtShadowY;
104
                        hg->coutline = doku->docParagraphStyles[Absatz].txtOutline;
105
                        hg->cunderpos = doku->docParagraphStyles[Absatz].txtUnderPos;
106
                        hg->cunderwidth = doku->docParagraphStyles[Absatz].txtUnderWidth;
107
                        hg->cstrikepos = doku->docParagraphStyles[Absatz].txtStrikePos;
108
                        hg->cstrikewidth = doku->docParagraphStyles[Absatz].txtStrikeWidth;
2379 fschmid 109
                        hg->cscale = doku->docParagraphStyles[Absatz].scaleH;
110
                        hg->cscalev = doku->docParagraphStyles[Absatz].scaleV;
111
                        hg->cbase = doku->docParagraphStyles[Absatz].baseOff;
2382 fschmid 112
                        hg->cextra = doku->docParagraphStyles[Absatz].kernVal;
217 Franz 113
                }
114
                else
115
                {
1789 fschmid 116
                        hg->cfont = (*doku->AllFonts)[font];
217 Franz 117
                        hg->ccolor = it->TxtFill;
118
                        hg->cshade = it->ShTxtFill;
119
                        hg->cstroke = it->TxtStroke;
120
                        hg->cshade2 = it->ShTxtStroke;
633 fschmid 121
                        hg->csize = size;
217 Franz 122
                        hg->cstyle = it->TxTStyle;
2273 fschmid 123
                        hg->cshadowx = it->TxtShadowX;
124
                        hg->cshadowy = it->TxtShadowY;
125
                        hg->coutline = it->TxtOutline;
126
                        hg->cunderpos = it->TxtUnderPos;
127
                        hg->cunderwidth = it->TxtUnderWidth;
128
                        hg->cstrikepos = it->TxtStrikePos;
129
                        hg->cstrikewidth = it->TxtStrikeWidth;
2379 fschmid 130
                        hg->cscale = it->TxtScale;
131
                        hg->cscalev = it->TxtScaleV;
132
                        hg->cbase = it->TxtBase;
2382 fschmid 133
                        hg->cextra = 0;
217 Franz 134
                }
3 paul 135
                hg->cselect = false;
217 Franz 136
                hg->cab = Absatz;
3 paul 137
                hg->xp = 0;
138
                hg->yp = 0;
139
                hg->PRot = 0;
140
                hg->PtransX = 0;
141
                hg->PtransY = 0;
2434 fschmid 142
                hg->cembedded = 0;
3 paul 143
                if (Append)
1065 cbradney 144
                        it->itemText.insert(it->CPos, hg);
3 paul 145
                else
1065 cbradney 146
                        it->itemText.append(hg);
217 Franz 147
                it->CPos += 1;
148
        }
3 paul 149
}
150
 
19 Franz 151
bool Serializer::Write(QString Cod)
3 paul 152
{
19 Franz 153
        QTextCodec *codec;
154
        if (Cod == "")
155
                codec = QTextCodec::codecForLocale();
156
        else
157
                codec = QTextCodec::codecForName(Cod);
167 Franz 158
        QCString dec = codec->fromUnicode( Objekt );
3 paul 159
        QFile f(Filename);
160
        bool ret = false;
161
        if (f.open(IO_WriteOnly))
167 Franz 162
        {
19 Franz 163
                f.writeBlock(dec, dec.length());
3 paul 164
                f.close();
165
                ret = true;
167 Franz 166
        }
3 paul 167
        return ret;
168
}
169
 
15 Franz 170
bool Serializer::Read(QString Cod)
3 paul 171
{
15 Franz 172
        QTextCodec *codec;
3 paul 173
        bool tmp = loadText(Filename, &Objekt);
15 Franz 174
        if (Cod == "")
175
                codec = QTextCodec::codecForLocale();
176
        else
177
                codec = QTextCodec::codecForName(Cod);
167 Franz 178
        QString dec = codec->toUnicode( Objekt );
15 Franz 179
        Objekt = dec;
3 paul 180
        return tmp;
181
}