Subversion Repositories Scribus

Rev

Rev 375 | Rev 387 | 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 = nb->NextBox;
42
                        }
364 Franz 43
                }
375 Franz 44
                it->Ptext.clear();
45
                it->CPos = 0;
364 Franz 46
        }
47
}
48
 
49
void gtAction::setProgressInfo()
50
{
51
        ScApp->FMess->setText(QObject::tr("Importing text"));
52
        ScApp->FProg->reset();
53
        ScApp->FProg->setTotalSteps(0);
54
}
55
 
56
void gtAction::setProgressInfoDone()
57
{
58
        ScApp->FMess->setText("");
59
        ScApp->FProg->reset();
60
}
61
 
62
void gtAction::setInfo(QString infoText)
63
{
64
        ScApp->FMess->setText(infoText);
65
}
66
 
67
void gtAction::clearFrame()
68
{
69
        textFrame->Ptext.clear();
70
        textFrame->CPos = 0;
71
}
72
 
73
void gtAction::write(QString text, gtStyle *style)
74
{
75
        int paragraphStyle = 0;
76
        if (style->target() == "paragraph")
77
        {
78
                gtParagraphStyle* pstyle = dynamic_cast<gtParagraphStyle*>(style);
79
                paragraphStyle = applyParagraphStyle(pstyle);
80
        }
81
        else if (style->target() == "frame")
82
        {
83
                gtFrameStyle* fstyle = dynamic_cast<gtFrameStyle*>(style);
84
                applyFrameStyle(fstyle);
85
        }
86
        gtFont* font = style->getFont();
375 Franz 87
        QString fontName = validateFont(font);
364 Franz 88
        for (uint a = 0; a < text.length(); ++a)
89
        {
90
                if ((text.at(a) == QChar(0)) || (text.at(a) == QChar(13)))
91
                        continue;
92
                struct Pti *hg = new Pti;
93
                hg->ch = text.at(a);
94
                if ((hg->ch == QChar(10)) || (hg->ch == QChar(5)))
95
                        hg->ch = QChar(13);
375 Franz 96
                hg->cfont = fontName;
364 Franz 97
                hg->csize = font->getSize();
98
                hg->ccolor = font->getColor();
99
                hg->cshade = font->getShade();
100
                hg->cstroke = font->getStrokeColor();
101
                hg->cshade2 = font->getStrokeShade();
102
                hg->cscale = font->getHscale();
103
                hg->cextra = font->getKerning();
104
                hg->cselect = false;
105
                hg->cstyle = font->getEffectsValue();
106
                if ((paragraphStyle == -1) || ((a == 0) && (text.at(0) == '\n')))
107
                {
108
                        if (lastParagraphStyle == -1)
109
                                hg->cab = ScApp->doc->CurrentABStil;
110
                        else
111
                                hg->cab = lastParagraphStyle;
112
                }
113
                else
114
                        hg->cab = paragraphStyle;
115
                hg->xp = 0;
116
                hg->yp = 0;
117
                hg->PtransX = 0;
118
                hg->PtransY = 0;
119
                it->Ptext.append(hg);
120
                lastParagraphStyle = hg->cab;
121
        }
122
}
123
 
124
int gtAction::findParagraphStyle(gtParagraphStyle* pstyle)
125
{
126
        int pstyleIndex = -1;
127
        for (uint i = 0; i < ScApp->doc->Vorlagen.size(); ++i)
128
        {
129
                if (ScApp->doc->Vorlagen[i].Vname == pstyle->getName())
130
                {      
131
                        pstyleIndex = i;
132
                        break;
133
                }
134
        }
135
        return pstyleIndex;
136
}
137
 
138
int gtAction::applyParagraphStyle(gtParagraphStyle* pstyle)
139
{
140
        int pstyleIndex = findParagraphStyle(pstyle);
141
        if (pstyleIndex == -1)
142
        {
143
                createParagraphStyle(pstyle);
144
                pstyleIndex = ScApp->doc->Vorlagen.size() - 1;
145
        }
146
 
147
        return pstyleIndex;
148
}
149
 
150
void gtAction::applyFrameStyle(gtFrameStyle* fstyle)
151
{
375 Franz 152
        textFrame->Cols = fstyle->getColumns();
153
        textFrame->ColGap = fstyle->getColumnsGap();
154
        textFrame->Pcolor = fstyle->getBgColor();
155
        textFrame->Shade = fstyle->getBgShade();
156
 
157
        gtParagraphStyle* pstyle = new gtParagraphStyle(*fstyle);
158
        int pstyleIndex = findParagraphStyle(pstyle);
159
        if (pstyleIndex == -1)
160
                pstyleIndex = 0;
161
        textFrame->Doc->CurrentABStil = pstyleIndex;
162
 
163
        gtFont* font = fstyle->getFont();
164
        QString fontName = validateFont(font);
165
        textFrame->IFont = fontName;
166
        textFrame->ISize = font->getSize();
167
        textFrame->TxtFill = font->getColor();
168
        textFrame->ShTxtFill = font->getShade();
169
        textFrame->TxtStroke = font->getStrokeColor();
170
        textFrame->ShTxtStroke = font->getStrokeShade();
171
        textFrame->TxtScale = font->getHscale();
364 Franz 172
}
173
 
174
void gtAction::getFrameFont(gtFont *font)
175
{
176
        font->setName(textFrame->IFont);
177
        font->setSize(textFrame->ISize);
178
        font->setColor(textFrame->TxtFill);
179
        font->setShade(textFrame->ShTxtFill);
180
        font->setStrokeColor(textFrame->TxtStroke);
181
        font->setStrokeShade(textFrame->ShTxtStroke);
182
        font->setHscale(textFrame->TxtScale);
183
        font->setKerning(0);
184
}
185
 
186
void gtAction::getFrameStyle(gtFrameStyle *fstyle)
187
{
188
        fstyle->setColumns(textFrame->Cols);
189
        fstyle->setColumnsGap(textFrame->ColGap);
190
        fstyle->setBgColor(textFrame->Pcolor);
191
        fstyle->setBgShade(textFrame->Shade);
192
 
193
        struct StVorL vg = textFrame->Doc->Vorlagen[textFrame->Doc->CurrentABStil];
194
        fstyle->setName(vg.Vname);
195
        fstyle->setLineSpacing(vg.LineSpa);
196
        fstyle->setAlignment(vg.Ausri);
197
        fstyle->setIndent(vg.Indent);
198
        fstyle->setFirstLineIndent(vg.First);
199
        fstyle->setSpaceAbove(vg.Avor);
200
        fstyle->setSpaceBelow(vg.Anach);
201
        fstyle->setDropCap(vg.Drop);
202
        fstyle->setDropCapHeight(vg.DropLin);
203
        fstyle->setAdjToBaseline(vg.BaseAdj);
204
 
205
        gtFont font;
206
        getFrameFont(&font);
207
        fstyle->setFont(font);
208
}
209
 
210
void gtAction::createParagraphStyle(gtParagraphStyle* pstyle)
211
{
212
        if (textFrame->Doc->Vorlagen.size() > 5)
213
        {
214
                for (uint i = 5; i < textFrame->Doc->Vorlagen.size(); ++i)
215
                {
216
                        if (textFrame->Doc->Vorlagen[i].Vname == pstyle->getName())
217
                                return;
218
                }
219
        }
220
        gtFont* font = pstyle->getFont();
221
        struct StVorL vg;
222
        vg.Vname = pstyle->getName();
223
        vg.LineSpa = pstyle->getLineSpacing();
224
        vg.Ausri = pstyle->getAlignment();
225
        vg.Indent = pstyle->getIndent();
226
        vg.First = pstyle->getFirstLineIndent();
227
        vg.Avor = pstyle->getSpaceAbove();
228
        vg.Anach = pstyle->getSpaceBelow();
229
        vg.Font = font->getName();
230
        vg.FontSize = font->getSize();
231
        vg.TabValues.clear();
375 Franz 232
        QValueList<double> *tabs = pstyle->getTabValues();
233
        for (uint i = 0; i < tabs->size(); ++i)
234
        {
235
                double tmp = (*tabs)[i];
236
                vg.TabValues.append(tmp);
237
        }
364 Franz 238
        vg.Drop = pstyle->hasDropCap();
239
        vg.DropLin = pstyle->getDropCapHeight();
240
        vg.FontEffect = font->getEffectsValue();
241
        vg.FColor = font->getColor();
242
        vg.FShade = font->getShade();
243
        vg.SColor = font->getStrokeColor();
244
        vg.SShade = font->getStrokeShade();
245
        vg.BaseAdj = pstyle->isAdjToBaseline();
246
        textFrame->Doc->Vorlagen.append(vg);
247
        ScApp->Mpal->Spal->updateFList();
248
}
249
 
375 Franz 250
QString gtAction::validateFont(gtFont* font)
364 Franz 251
{
375 Franz 252
        QString useFont = font->getName();
253
        if ((useFont == NULL) || (useFont == ""))
254
                useFont = textFrame->IFont;
255
        else if (ScApp->Prefs.AvailFonts[font->getName()] == 0)
364 Franz 256
        {
375 Franz 257
                if (!ScApp->Prefs.GFontSub.contains(font->getName()))
258
                {
259
                        DmF *dia = new DmF(0, useFont, &ScApp->Prefs);
260
                        dia->exec();
261
                        useFont = dia->Ersatz;
262
                        delete dia;
263
                        ScApp->Prefs.GFontSub[font->getName()] = useFont;
264
                }
265
                else
266
                        useFont = ScApp->Prefs.GFontSub[font->getName()];
364 Franz 267
        }
375 Franz 268
        if(!ScApp->doc->UsedFonts.contains(useFont))
269
                ScApp->doc->AddFont(useFont, ScApp->Prefs.AvailFonts[useFont]->Font);
270
 
271
        return useFont;
364 Franz 272
}
273
 
375 Franz 274
double gtAction::getFrameWidth()
275
{
276
        return textFrame->Width;
277
}
278
 
279
QString gtAction::getFrameName()
280
{
281
        return QString(textFrame->AnName);
282
}
283
 
364 Franz 284
void gtAction::finalize()
285
{
286
        if (ScApp->doc->Trenner->AutoCheck)
287
                ScApp->doc->Trenner->slotHyphenate(textFrame);
288
        ScApp->doc->ActPage->update();
289
        ScApp->slotDocCh();
290
}
291
 
292
gtAction::~gtAction()
293
{
294
        finalize();
295
}