Subversion Repositories Scribus

Rev

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