Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
364 Franz 1
/***************************************************************************
2
 *   Copyright (C) 2004 by Riku Leino                                      *
3
 *   tsoots@welho.com                                                      *
4
 *                                                                         *
5
 *   This program is free software; you can redistribute it and/or modify  *
6
 *   it under the terms of the GNU General Public License as published by  *
7
 *   the Free Software Foundation; either version 2 of the License, or     *
8
 *   (at your option) any later version.                                   *
9
 *                                                                         *
10
 *   This program is distributed in the hope that it will be useful,       *
11
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
12
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
13
 *   GNU General Public License for more details.                          *
14
 *                                                                         *
15
 *   You should have received a copy of the GNU General Public License     *
16
 *   along with this program; if not, write to the                         *
17
 *   Free Software Foundation, Inc.,                                       *
18
 *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19
 ***************************************************************************/
20
 
21
#include "gtaction.h"
22
 
23
extern ScribusApp* ScApp;
24
 
25
gtAction::gtAction(bool append)
26
{
27
        textFrame = ScApp->doc->ActPage->SelItem.at(0);
28
        it = textFrame;
29
        lastParagraphStyle = -1;
30
        lastCharWasLineChange = false;
375 Franz 31
        currentFrameStyle = "";
32
        if (!append)
364 Franz 33
        {
375 Franz 34
                if (it->NextBox != 0)
364 Franz 35
                {
375 Franz 36
                        PageItem *nb = it->NextBox;
37
                        while (nb != 0)
38
                        {
39
                                nb->Ptext.clear();
40
                                nb->CPos = 0;
41
                                nb->Dirty = true;
42
                                nb = nb->NextBox;
43
                        }
364 Franz 44
                }
375 Franz 45
                it->Ptext.clear();
46
                it->CPos = 0;
364 Franz 47
        }
48
}
49
 
50
void gtAction::setProgressInfo()
51
{
52
        ScApp->FMess->setText(QObject::tr("Importing text"));
53
        ScApp->FProg->reset();
54
        ScApp->FProg->setTotalSteps(0);
55
}
56
 
57
void gtAction::setProgressInfoDone()
58
{
59
        ScApp->FMess->setText("");
60
        ScApp->FProg->reset();
61
}
62
 
63
void gtAction::setInfo(QString infoText)
64
{
65
        ScApp->FMess->setText(infoText);
66
}
67
 
68
void gtAction::clearFrame()
69
{
70
        textFrame->Ptext.clear();
71
        textFrame->CPos = 0;
72
        textFrame->Dirty = true;
73
}
74
 
75
void gtAction::write(QString text, gtStyle *style)
76
{
77
        int paragraphStyle = 0;
78
        if (style->target() == "paragraph")
79
        {
80
                gtParagraphStyle* pstyle = dynamic_cast<gtParagraphStyle*>(style);
81
                paragraphStyle = applyParagraphStyle(pstyle);
82
        }
83
        else if (style->target() == "frame")
84
        {
85
                gtFrameStyle* fstyle = dynamic_cast<gtFrameStyle*>(style);
86
                applyFrameStyle(fstyle);
87
        }
88
        gtFont* font = style->getFont();
375 Franz 89
        QString fontName = validateFont(font);
364 Franz 90
        for (uint a = 0; a < text.length(); ++a)
91
        {
92
                if ((text.at(a) == QChar(0)) || (text.at(a) == QChar(13)))
93
                        continue;
94
                struct Pti *hg = new Pti;
95
                hg->ch = text.at(a);
96
                if ((hg->ch == QChar(10)) || (hg->ch == QChar(5)))
97
                        hg->ch = QChar(13);
375 Franz 98
                hg->cfont = fontName;
364 Franz 99
                hg->csize = font->getSize();
100
                hg->ccolor = font->getColor();
101
                hg->cshade = font->getShade();
102
                hg->cstroke = font->getStrokeColor();
103
                hg->cshade2 = font->getStrokeShade();
104
                hg->cscale = font->getHscale();
105
                hg->cextra = font->getKerning();
106
                hg->cselect = false;
107
                hg->cstyle = font->getEffectsValue();
108
                if ((paragraphStyle == -1) || ((a == 0) && (text.at(0) == '\n')))
109
                {
110
                        if (lastParagraphStyle == -1)
111
                                hg->cab = ScApp->doc->CurrentABStil;
112
                        else
113
                                hg->cab = lastParagraphStyle;
114
                }
115
                else
116
                        hg->cab = paragraphStyle;
117
                hg->xp = 0;
118
                hg->yp = 0;
119
                hg->PtransX = 0;
120
                hg->PtransY = 0;
121
                it->Ptext.append(hg);
122
                lastParagraphStyle = hg->cab;
123
        }
124
}
125
 
126
int gtAction::findParagraphStyle(gtParagraphStyle* pstyle)
127
{
128
        int pstyleIndex = -1;
129
        for (uint i = 0; i < ScApp->doc->Vorlagen.size(); ++i)
130
        {
131
                if (ScApp->doc->Vorlagen[i].Vname == pstyle->getName())
132
                {      
133
                        pstyleIndex = i;
134
                        break;
135
                }
136
        }
137
        return pstyleIndex;
138
}
139
 
140
int gtAction::applyParagraphStyle(gtParagraphStyle* pstyle)
141
{
142
        int pstyleIndex = findParagraphStyle(pstyle);
143
        if (pstyleIndex == -1)
144
        {
145
                createParagraphStyle(pstyle);
146
                pstyleIndex = ScApp->doc->Vorlagen.size() - 1;
147
        }
148
 
149
        return pstyleIndex;
150
}
151
 
152
void gtAction::applyFrameStyle(gtFrameStyle* fstyle)
153
{
375 Franz 154
        textFrame->Cols = fstyle->getColumns();
155
        textFrame->ColGap = fstyle->getColumnsGap();
156
        textFrame->Pcolor = fstyle->getBgColor();
157
        textFrame->Shade = fstyle->getBgShade();
158
 
159
        gtParagraphStyle* pstyle = new gtParagraphStyle(*fstyle);
160
        int pstyleIndex = findParagraphStyle(pstyle);
161
        if (pstyleIndex == -1)
162
                pstyleIndex = 0;
163
        textFrame->Doc->CurrentABStil = pstyleIndex;
164
 
165
        gtFont* font = fstyle->getFont();
166
        QString fontName = validateFont(font);
167
        textFrame->IFont = fontName;
168
        textFrame->ISize = font->getSize();
169
        textFrame->TxtFill = font->getColor();
170
        textFrame->ShTxtFill = font->getShade();
171
        textFrame->TxtStroke = font->getStrokeColor();
172
        textFrame->ShTxtStroke = font->getStrokeShade();
173
        textFrame->TxtScale = font->getHscale();
364 Franz 174
}
175
 
176
void gtAction::getFrameFont(gtFont *font)
177
{
178
        font->setName(textFrame->IFont);
179
        font->setSize(textFrame->ISize);
180
        font->setColor(textFrame->TxtFill);
181
        font->setShade(textFrame->ShTxtFill);
182
        font->setStrokeColor(textFrame->TxtStroke);
183
        font->setStrokeShade(textFrame->ShTxtStroke);
184
        font->setHscale(textFrame->TxtScale);
185
        font->setKerning(0);
186
}
187
 
188
void gtAction::getFrameStyle(gtFrameStyle *fstyle)
189
{
190
        fstyle->setColumns(textFrame->Cols);
191
        fstyle->setColumnsGap(textFrame->ColGap);
192
        fstyle->setBgColor(textFrame->Pcolor);
193
        fstyle->setBgShade(textFrame->Shade);
194
 
195
        struct StVorL vg = textFrame->Doc->Vorlagen[textFrame->Doc->CurrentABStil];
196
        fstyle->setName(vg.Vname);
197
        fstyle->setLineSpacing(vg.LineSpa);
198
        fstyle->setAlignment(vg.Ausri);
199
        fstyle->setIndent(vg.Indent);
200
        fstyle->setFirstLineIndent(vg.First);
201
        fstyle->setSpaceAbove(vg.Avor);
202
        fstyle->setSpaceBelow(vg.Anach);
203
        fstyle->setDropCap(vg.Drop);
204
        fstyle->setDropCapHeight(vg.DropLin);
205
        fstyle->setAdjToBaseline(vg.BaseAdj);
206
 
207
        gtFont font;
208
        getFrameFont(&font);
209
        fstyle->setFont(font);
210
}
211
 
212
void gtAction::createParagraphStyle(gtParagraphStyle* pstyle)
213
{
214
        if (textFrame->Doc->Vorlagen.size() > 5)
215
        {
216
                for (uint i = 5; i < textFrame->Doc->Vorlagen.size(); ++i)
217
                {
218
                        if (textFrame->Doc->Vorlagen[i].Vname == pstyle->getName())
219
                                return;
220
                }
221
        }
222
        gtFont* font = pstyle->getFont();
223
        struct StVorL vg;
224
        vg.Vname = pstyle->getName();
225
        vg.LineSpa = pstyle->getLineSpacing();
226
        vg.Ausri = pstyle->getAlignment();
227
        vg.Indent = pstyle->getIndent();
228
        vg.First = pstyle->getFirstLineIndent();
229
        vg.Avor = pstyle->getSpaceAbove();
230
        vg.Anach = pstyle->getSpaceBelow();
231
        vg.Font = font->getName();
232
        vg.FontSize = font->getSize();
233
        vg.TabValues.clear();
375 Franz 234
        QValueList<double> *tabs = pstyle->getTabValues();
235
        for (uint i = 0; i < tabs->size(); ++i)
236
        {
237
                double tmp = (*tabs)[i];
238
                vg.TabValues.append(tmp);
239
        }
364 Franz 240
        vg.Drop = pstyle->hasDropCap();
241
        vg.DropLin = pstyle->getDropCapHeight();
242
        vg.FontEffect = font->getEffectsValue();
243
        vg.FColor = font->getColor();
244
        vg.FShade = font->getShade();
245
        vg.SColor = font->getStrokeColor();
246
        vg.SShade = font->getStrokeShade();
247
        vg.BaseAdj = pstyle->isAdjToBaseline();
248
        textFrame->Doc->Vorlagen.append(vg);
249
        ScApp->Mpal->Spal->updateFList();
250
}
251
 
375 Franz 252
QString gtAction::validateFont(gtFont* font)
364 Franz 253
{
375 Franz 254
        QString useFont = font->getName();
255
        if ((useFont == NULL) || (useFont == ""))
256
                useFont = textFrame->IFont;
257
        else if (ScApp->Prefs.AvailFonts[font->getName()] == 0)
364 Franz 258
        {
375 Franz 259
                if (!ScApp->Prefs.GFontSub.contains(font->getName()))
260
                {
261
                        DmF *dia = new DmF(0, useFont, &ScApp->Prefs);
262
                        dia->exec();
263
                        useFont = dia->Ersatz;
264
                        delete dia;
265
                        ScApp->Prefs.GFontSub[font->getName()] = useFont;
266
                }
267
                else
268
                        useFont = ScApp->Prefs.GFontSub[font->getName()];
364 Franz 269
        }
375 Franz 270
        if(!ScApp->doc->UsedFonts.contains(useFont))
271
                ScApp->doc->AddFont(useFont, ScApp->Prefs.AvailFonts[useFont]->Font);
272
 
273
        return useFont;
364 Franz 274
}
275
 
375 Franz 276
double gtAction::getFrameWidth()
277
{
278
        return textFrame->Width;
279
}
280
 
281
QString gtAction::getFrameName()
282
{
283
        return QString(textFrame->AnName);
284
}
285
 
364 Franz 286
void gtAction::finalize()
287
{
288
        if (ScApp->doc->Trenner->AutoCheck)
289
                ScApp->doc->Trenner->slotHyphenate(textFrame);
290
        ScApp->doc->ActPage->update();
291
        ScApp->slotDocCh();
292
}
293
 
294
gtAction::~gtAction()
295
{
296
        finalize();
297
}