Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
4070 subik 7
#include "scribus.h"
8
#include "sampleitem.h"
5077 cbradney 9
#include "sampleitem.moc"
4070 subik 10
#include "loremipsum.h"
4077 subik 11
#include "scribusdoc.h"
4150 subik 12
#include "undomanager.h"
4546 subik 13
#include "commonstrings.h"
5184 avox 14
#include "prefsmanager.h"
4070 subik 15
#include <qcolor.h>
16
#include <qstring.h>
5184 avox 17
#include "text/nlsconfig.h"
4070 subik 18
 
19
extern ScribusMainWindow* ScMW;
20
 
21
 
4077 subik 22
SampleItem::SampleItem() : QObject()
4070 subik 23
{
4077 subik 24
        used = true;
25
        if (ScMW->doc == NULL)
26
        {
4150 subik 27
                ScMW->doFileNew(//pageWidth, pageHeight,
4077 subik 28
                                                                        0,0,
29
                                                                        //topMargin, leftMargin, rightMargin, bottomMargin,
30
                                                                        1, 1, 1, 1,
31
                                                                        // autoframes. It's disabled in python
32
                                                                        // columnDistance, numberCols, autoframes,
33
                                                                        0, 1, false,
34
                                                                        //pagesType, unit, firstPageOrder,
35
                                                                        1, 1, 1,
36
                                                                        //orientation, firstPageNr, "Custom");
4793 cbradney 37
                                                                        1, 1, "custom", 1, true);
4077 subik 38
                ScMW->doc->pageSets[1/*pagesType*/].FirstPage = 1;//firstPageOrder;
39
                used = false;
40
        }
41
        doc = ScMW->doc;
4467 subik 42
        // tmp colors. to be removed in descrictor
43
        ScMW->doc->PageColors.insert("__blackforpreview__", ScColor(0, 0, 0, 255));
44
        ScMW->doc->PageColors.insert("__whiteforpreview__", ScColor(0, 0, 0, 0));
4614 fschmid 45
        ScMW->doc->PageColors.insert("__whiteforpreviewbg__", ScColor(0, 0, 0, 0));
46
        bgShade = 100;
5184 avox 47
        tmpStyle.setName("(preview temporary)");
48
        tmpStyle.setLineSpacingMode(ParagraphStyle::FixedLineSpacing);
5470 subik 49
        tmpStyle.setLineSpacing((doc->toolSettings.defSize / 10.0)
5184 avox 50
                * static_cast<double>(doc->typographicSettings.autoLineSpacing) / 100
51
                + (doc->toolSettings.defSize / 10.0));
52
        tmpStyle.setAlignment(0);
53
        tmpStyle.setLeftMargin(0);
54
        tmpStyle.setFirstIndent(0);
55
        tmpStyle.setGapBefore(0);
56
        tmpStyle.setGapAfter(0);
57
        tmpStyle.charStyle().cfont = PrefsManager::instance()->appPrefs.AvailFonts[doc->toolSettings.defFont];
58
        tmpStyle.charStyle().csize = doc->toolSettings.defSize;
59
        tmpStyle.tabValues().clear();
60
        tmpStyle.setHasDropCap(false);
61
        tmpStyle.setDropCapLines(0);//2;
62
        tmpStyle.setDropCapOffset(0);
63
        tmpStyle.charStyle().cstyle = ScStyle_Default;
64
        tmpStyle.charStyle().ccolor = "__blackforpreview__";
65
        tmpStyle.charStyle().cshade = 100; //doc->toolSettings.dShade;
66
        tmpStyle.charStyle().cstroke = "__whiteforpreview__";
67
        tmpStyle.charStyle().cshade2 = 100; //doc->toolSettings.dShade2;
68
        tmpStyle.setUseBaselineGrid(false);
69
        tmpStyle.charStyle().cshadowx = 50;
70
        tmpStyle.charStyle().cshadowy = -50;
71
        tmpStyle.charStyle().coutline = 10;
72
        tmpStyle.charStyle().cunderpos = 0; //doc->typographicSettings.valueUnderlinePos;
73
        tmpStyle.charStyle().cunderwidth = 0; //doc->typographicSettings.valueUnderlineWidth;
74
        tmpStyle.charStyle().cstrikepos = 0; //doc->typographicSettings.valueStrikeThruPos;
75
        tmpStyle.charStyle().cstrikewidth = 0; //doc->typographicSettings.valueStrikeThruPos;
76
        tmpStyle.charStyle().cscale = 1000;
77
        tmpStyle.charStyle().cscalev = 1000;
78
        tmpStyle.charStyle().cbase = 0;
79
        tmpStyle.charStyle().cextra = 0;
4070 subik 80
}
81
 
82
SampleItem::~SampleItem()
83
{
4467 subik 84
        cleanupTemporary();
85
        // clean tmp document
4077 subik 86
        if (used == false)
87
        {
88
                doc->setModified(false);
4150 subik 89
                ScMW->slotFileClose();
4077 subik 90
        }
4070 subik 91
}
92
 
93
void SampleItem::setText(QString aText)
94
{
95
        text = aText;
96
}
97
 
98
void SampleItem::setLoremIpsum(int para)
99
{
100
        LoremParser *m = new LoremParser("loremipsum.xml");
101
        text = m->createLorem(para);
102
        text = QString::fromUtf8(text);
103
        delete m;
104
}
105
 
106
void SampleItem::setStyle(ParagraphStyle aStyle)
107
{
108
        tmpStyle = aStyle;
109
}
110
 
111
void SampleItem::setBgColor(QColor c)
112
{
4614 fschmid 113
        ScMW->doc->PageColors["__whiteforpreviewbg__"].fromQColor(c);
4070 subik 114
}
115
 
4614 fschmid 116
void SampleItem::setBgShade(int c)
117
{
118
        bgShade = c;
119
}
120
 
121
void SampleItem::setTxColor(QColor c)
122
{
123
        ScMW->doc->PageColors["__blackforpreview__"].fromQColor(c);
124
}
125
 
126
void SampleItem::setTxShade(int c)
127
{
5184 avox 128
        tmpStyle.charStyle().cshade = c;
4614 fschmid 129
}
130
 
4070 subik 131
void SampleItem::setLineSpaMode(int lineSpaMode)
132
{
5184 avox 133
        tmpStyle.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(lineSpaMode));
4070 subik 134
}
135
 
136
void SampleItem::setLineSpa(double lineSpa)
137
{
5184 avox 138
        tmpStyle.setLineSpacing(lineSpa);
4070 subik 139
}
140
 
141
void SampleItem::setTextAlignment(int textAlignment)
142
{
5184 avox 143
        tmpStyle.setAlignment(textAlignment);
4070 subik 144
}
145
 
146
void SampleItem::setIndent(double indent)
147
{
5184 avox 148
        tmpStyle.setLeftMargin(indent);
4070 subik 149
}
150
 
151
void SampleItem::setFirst(double first)
152
{
5184 avox 153
        tmpStyle.setFirstIndent(first);
4070 subik 154
}
155
 
156
void SampleItem::setGapBefore(double gapBefore)
157
{
5184 avox 158
        tmpStyle.setGapBefore(gapBefore);
4070 subik 159
}
160
 
161
void SampleItem::setGapAfter(double gapAfter)
162
{
5184 avox 163
        tmpStyle.setGapAfter(gapAfter);
4070 subik 164
}
165
 
166
void SampleItem::setFont(QString font)
167
{
5184 avox 168
        tmpStyle.charStyle().cfont = PrefsManager::instance()->appPrefs.AvailFonts[font];
4070 subik 169
}
170
 
4077 subik 171
void SampleItem::setFontSize(int fontSize, bool autoLineSpa)
4070 subik 172
{
5184 avox 173
        tmpStyle.charStyle().csize = fontSize;
4077 subik 174
        if (autoLineSpa)
5184 avox 175
                tmpStyle.setLineSpacing(((fontSize / 10)  * (doc->typographicSettings.autoLineSpacing / 100) + (fontSize / 10)));
4070 subik 176
}
177
 
178
/*void SampleItem::setTabValues(QValueList<PageItem::TabRecord> tabValues)
179
{
180
        tmpStyle.TabValues = tabValues;
181
}*/
182
 
183
void SampleItem::setDrop(bool drop)
184
{
5184 avox 185
        tmpStyle.setHasDropCap(drop);
4070 subik 186
}
187
 
188
void SampleItem::setDropLin(int dropLin)
189
{
5184 avox 190
        tmpStyle.setDropCapLines(dropLin);
4070 subik 191
}
192
 
193
void SampleItem::setDropDist(double dropDist)
194
{
5184 avox 195
        tmpStyle.setDropCapOffset(dropDist);
4070 subik 196
}
197
 
198
void SampleItem::setFontEffect(int fontEffect)
199
{
5184 avox 200
        tmpStyle.charStyle().cstyle = static_cast<StyleFlag>(fontEffect);
4070 subik 201
}
202
 
203
void SampleItem::setFColor(QString fColor)
204
{
5184 avox 205
        tmpStyle.charStyle().ccolor = fColor;
4070 subik 206
}
207
 
208
void SampleItem::setFShade(int fShade)
209
{
5184 avox 210
        tmpStyle.charStyle().cshade = fShade;
4070 subik 211
}
212
 
213
void SampleItem::setSColor(QString sColor)
214
{
5184 avox 215
        tmpStyle.charStyle().ccolor = sColor;
4070 subik 216
}
217
 
218
void SampleItem::setSShade(int sShade)
219
{
5184 avox 220
        tmpStyle.charStyle().cstroke = sShade;
4070 subik 221
}
222
 
223
void SampleItem::setBaseAdj(bool baseAdj)
224
{
5184 avox 225
        tmpStyle.setUseBaselineGrid(baseAdj);
4070 subik 226
}
227
 
228
void SampleItem::setTxtShadowX(int txtShadowX)
229
{
5184 avox 230
        tmpStyle.charStyle().cshadowx = txtShadowX;
4070 subik 231
}
232
 
233
void SampleItem::setTxtShadowY(int txtShadowY)
234
{
5184 avox 235
        tmpStyle.charStyle().cshadowy = txtShadowY;
4070 subik 236
}
237
 
238
void SampleItem::setTxtOutline(int txtOutline)
239
{
5184 avox 240
        tmpStyle.charStyle().coutline = txtOutline;
4070 subik 241
}
242
 
243
void SampleItem::setTxtUnderPos(int txtUnderPos)
244
{
5184 avox 245
        tmpStyle.charStyle().cunderpos = txtUnderPos;
4070 subik 246
}
247
 
248
void SampleItem::setTxtUnderWidth(int txtUnderWidth)
249
{
5184 avox 250
        tmpStyle.charStyle().cunderwidth = txtUnderWidth;
4070 subik 251
}
252
 
253
void SampleItem::setTxtStrikePos(int txtStrikePos)
254
{
5184 avox 255
        tmpStyle.charStyle().cstrikepos = txtStrikePos;
4070 subik 256
}
257
 
258
void SampleItem::setTxtStrikeWidth(int txtStrikeWidth)
259
{
5184 avox 260
        tmpStyle.charStyle().cstrikewidth = txtStrikeWidth;
4070 subik 261
}
262
 
263
void SampleItem::setScaleH(int scaleH)
264
{
5184 avox 265
        tmpStyle.charStyle().cscale = scaleH;
4070 subik 266
}
267
 
268
void SampleItem::setScaleV(int scaleV)
269
{
5184 avox 270
        tmpStyle.charStyle().cscalev = scaleV;
4070 subik 271
}
272
 
273
void SampleItem::setBaseOff(int baseOff)
274
{
5184 avox 275
        tmpStyle.charStyle().cbase = baseOff;
4070 subik 276
}
277
 
278
void SampleItem::setKernVal(int kernVal)
279
{
5184 avox 280
        tmpStyle.charStyle().cextra = kernVal;
4070 subik 281
}
282
 
283
QPixmap SampleItem::getSample(int width, int height)
284
{
5470 subik 285
        // if it's false => the used font will be removed from used fonts
286
        // after sample creating
287
        bool previouslyUsedFont = false;
288
 
5315 avox 289
        if (tmpStyle.charStyle().font() == NULL)
290
                return QPixmap();
5470 subik 291
 
4150 subik 292
        UndoManager::instance()->setUndoEnabled(false); // disable undo
293
 
4614 fschmid 294
        PageItem_TextFrame *previewItem = new PageItem_TextFrame(doc, 0, 0, width, height, 0, "__whiteforpreviewbg__", "__whiteforpreview__");
4070 subik 295
        QPixmap pm(width, height);
296
        ScPainter *painter = new ScPainter(&pm, width, height, 0, 0);
4374 subik 297
        double sca = 1.0; // original scale to set back at the end...
4459 subik 298
        int userAppMode = ScMW->doc->appMode; // We need to be in normal when creating/repainting items
299
        ScMW->doc->appMode = modeNormal;
4070 subik 300
 
4077 subik 301
        if (ScMW->view != NULL)
4374 subik 302
        {
4593 cbradney 303
                sca = ScMW->view->scale();
4374 subik 304
                ScMW->view->setScale(1.0);
305
        }
4077 subik 306
 
5470 subik 307
        if (doc->UsedFonts.contains(tmpStyle.charStyle().cfont->scName()))
308
                previouslyUsedFont = true;
309
 
5184 avox 310
        doc->AddFont(tmpStyle.charStyle().cfont->scName(), qRound(doc->toolSettings.defSize / 10.0));
4077 subik 311
        doc->docParagraphStyles.append(tmpStyle);
312
        int tmpIndex = doc->docParagraphStyles.count() - 1;
4070 subik 313
 
314
        previewItem->FrameType = PageItem::TextFrame;
315
        previewItem->itemText.clear();
5184 avox 316
        previewItem->setFont(tmpStyle.charStyle().cfont->scName());
4070 subik 317
        previewItem->Cols = 1;
5315 avox 318
        text.replace(QChar(10),QChar(13)).replace(QChar(5),QChar(13));
319
        previewItem->itemText.insertChars(0, text);
4584 cbradney 320
        doc->chAbStyle(previewItem, tmpIndex);
5315 avox 321
        previewItem->itemText.applyStyle(0, text.length(), tmpStyle.charStyle());
4614 fschmid 322
        previewItem->setFillColor("__whiteforpreviewbg__");
323
        previewItem->setFillShade(bgShade);
324
        previewItem->SetRectFrame();
4603 fschmid 325
        previewItem->Frame = false;
4070 subik 326
        previewItem->DrawObj(painter, QRect(0, 0, width, height));
327
        painter->end();
328
        delete(painter);
4374 subik 329
        delete previewItem;
330
 
5470 subik 331
        // cleanups and resets
332
        if (!previouslyUsedFont)
333
                doc->UsedFonts.remove(tmpStyle.charStyle().cfont->scName());
4077 subik 334
        if (ScMW->view != NULL)
335
                ScMW->view->setScale(sca);
4584 cbradney 336
        doc->appMode = userAppMode;
4077 subik 337
        doc->docParagraphStyles.remove(doc->docParagraphStyles.fromLast());
4150 subik 338
        UndoManager::instance()->setUndoEnabled(true);
4070 subik 339
        return pm;
340
}
4467 subik 341
 
342
void SampleItem::cleanupTemporary()
343
{
344
        // clear tmp colors
345
        ScMW->doc->PageColors.remove("__blackforpreview__");
346
        ScMW->doc->PageColors.remove("__whiteforpreview__");
4614 fschmid 347
        ScMW->doc->PageColors.remove("__whiteforpreviewbg__");
4467 subik 348
}