Subversion Repositories Scribus

Rev

Rev 5691 | Rev 5721 | 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);
5698 avox 55
        tmpStyle.setRightMargin(0);
5184 avox 56
        tmpStyle.setGapBefore(0);
57
        tmpStyle.setGapAfter(0);
5691 avox 58
        tmpStyle.charStyle().setFont(PrefsManager::instance()->appPrefs.AvailFonts[doc->toolSettings.defFont]);
59
        tmpStyle.charStyle().setFontSize(doc->toolSettings.defSize);
5184 avox 60
        tmpStyle.tabValues().clear();
61
        tmpStyle.setHasDropCap(false);
62
        tmpStyle.setDropCapLines(0);//2;
63
        tmpStyle.setDropCapOffset(0);
5691 avox 64
        tmpStyle.charStyle().setEffects(ScStyle_Default);
65
        tmpStyle.charStyle().setFillColor("__blackforpreview__");
66
        tmpStyle.charStyle().setFillShade(100); //doc->toolSettings.dShade;
67
        tmpStyle.charStyle().setStrokeColor("__whiteforpreview__");
68
        tmpStyle.charStyle().setStrokeShade(100); //doc->toolSettings.dShade2;
5184 avox 69
        tmpStyle.setUseBaselineGrid(false);
5691 avox 70
        tmpStyle.charStyle().setShadowXOffset(50);
71
        tmpStyle.charStyle().setShadowYOffset(-50);
72
        tmpStyle.charStyle().setOutlineWidth(10);
73
        tmpStyle.charStyle().setUnderlineOffset(0); //doc->typographicSettings.valueUnderlinePos;
74
        tmpStyle.charStyle().setUnderlineWidth(0); //doc->typographicSettings.valueUnderlineWidth;
75
        tmpStyle.charStyle().setStrikethruOffset(0); //doc->typographicSettings.valueStrikeThruPos;
76
        tmpStyle.charStyle().setStrikethruWidth(0); //doc->typographicSettings.valueStrikeThruPos;
77
        tmpStyle.charStyle().setScaleH(1000);
78
        tmpStyle.charStyle().setScaleV(1000);
79
        tmpStyle.charStyle().setBaselineOffset(0);
80
        tmpStyle.charStyle().setTracking(0);
4070 subik 81
}
82
 
83
SampleItem::~SampleItem()
84
{
4467 subik 85
        cleanupTemporary();
86
        // clean tmp document
4077 subik 87
        if (used == false)
88
        {
89
                doc->setModified(false);
4150 subik 90
                ScMW->slotFileClose();
4077 subik 91
        }
4070 subik 92
}
93
 
94
void SampleItem::setText(QString aText)
95
{
96
        text = aText;
97
}
98
 
99
void SampleItem::setLoremIpsum(int para)
100
{
101
        LoremParser *m = new LoremParser("loremipsum.xml");
102
        text = m->createLorem(para);
103
        text = QString::fromUtf8(text);
104
        delete m;
105
}
106
 
5698 avox 107
void SampleItem::setStyle(const ParagraphStyle& aStyle)
4070 subik 108
{
109
        tmpStyle = aStyle;
110
}
111
 
112
void SampleItem::setBgColor(QColor c)
113
{
4614 fschmid 114
        ScMW->doc->PageColors["__whiteforpreviewbg__"].fromQColor(c);
4070 subik 115
}
116
 
4614 fschmid 117
void SampleItem::setBgShade(int c)
118
{
119
        bgShade = c;
120
}
121
 
122
void SampleItem::setTxColor(QColor c)
123
{
124
        ScMW->doc->PageColors["__blackforpreview__"].fromQColor(c);
125
}
126
 
127
void SampleItem::setTxShade(int c)
128
{
5691 avox 129
        tmpStyle.charStyle().setFillShade(c);
4614 fschmid 130
}
131
 
4070 subik 132
void SampleItem::setLineSpaMode(int lineSpaMode)
133
{
5184 avox 134
        tmpStyle.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(lineSpaMode));
4070 subik 135
}
136
 
137
void SampleItem::setLineSpa(double lineSpa)
138
{
5184 avox 139
        tmpStyle.setLineSpacing(lineSpa);
4070 subik 140
}
141
 
142
void SampleItem::setTextAlignment(int textAlignment)
143
{
5184 avox 144
        tmpStyle.setAlignment(textAlignment);
4070 subik 145
}
146
 
147
void SampleItem::setIndent(double indent)
148
{
5184 avox 149
        tmpStyle.setLeftMargin(indent);
4070 subik 150
}
151
 
152
void SampleItem::setFirst(double first)
153
{
5184 avox 154
        tmpStyle.setFirstIndent(first);
4070 subik 155
}
156
 
157
void SampleItem::setGapBefore(double gapBefore)
158
{
5184 avox 159
        tmpStyle.setGapBefore(gapBefore);
4070 subik 160
}
161
 
162
void SampleItem::setGapAfter(double gapAfter)
163
{
5184 avox 164
        tmpStyle.setGapAfter(gapAfter);
4070 subik 165
}
166
 
167
void SampleItem::setFont(QString font)
168
{
5691 avox 169
        tmpStyle.charStyle().setFont(PrefsManager::instance()->appPrefs.AvailFonts[font]);
4070 subik 170
}
171
 
4077 subik 172
void SampleItem::setFontSize(int fontSize, bool autoLineSpa)
4070 subik 173
{
5691 avox 174
        tmpStyle.charStyle().setFontSize(fontSize);
4077 subik 175
        if (autoLineSpa)
5184 avox 176
                tmpStyle.setLineSpacing(((fontSize / 10)  * (doc->typographicSettings.autoLineSpacing / 100) + (fontSize / 10)));
4070 subik 177
}
178
 
179
/*void SampleItem::setTabValues(QValueList<PageItem::TabRecord> tabValues)
180
{
181
        tmpStyle.TabValues = tabValues;
182
}*/
183
 
184
void SampleItem::setDrop(bool drop)
185
{
5184 avox 186
        tmpStyle.setHasDropCap(drop);
4070 subik 187
}
188
 
189
void SampleItem::setDropLin(int dropLin)
190
{
5184 avox 191
        tmpStyle.setDropCapLines(dropLin);
4070 subik 192
}
193
 
194
void SampleItem::setDropDist(double dropDist)
195
{
5184 avox 196
        tmpStyle.setDropCapOffset(dropDist);
4070 subik 197
}
198
 
199
void SampleItem::setFontEffect(int fontEffect)
200
{
5691 avox 201
        tmpStyle.charStyle().setEffects(static_cast<StyleFlag>(fontEffect));
4070 subik 202
}
203
 
204
void SampleItem::setFColor(QString fColor)
205
{
5691 avox 206
        tmpStyle.charStyle().setFillColor(fColor);
4070 subik 207
}
208
 
209
void SampleItem::setFShade(int fShade)
210
{
5691 avox 211
        tmpStyle.charStyle().setFillShade(fShade);
4070 subik 212
}
213
 
214
void SampleItem::setSColor(QString sColor)
215
{
5691 avox 216
        tmpStyle.charStyle().setStrokeColor(sColor);
4070 subik 217
}
218
 
219
void SampleItem::setSShade(int sShade)
220
{
5691 avox 221
        tmpStyle.charStyle().setStrokeShade(sShade);
4070 subik 222
}
223
 
224
void SampleItem::setBaseAdj(bool baseAdj)
225
{
5184 avox 226
        tmpStyle.setUseBaselineGrid(baseAdj);
4070 subik 227
}
228
 
229
void SampleItem::setTxtShadowX(int txtShadowX)
230
{
5691 avox 231
        tmpStyle.charStyle().setShadowXOffset(txtShadowX);
4070 subik 232
}
233
 
234
void SampleItem::setTxtShadowY(int txtShadowY)
235
{
5691 avox 236
        tmpStyle.charStyle().setShadowYOffset(txtShadowY);
4070 subik 237
}
238
 
239
void SampleItem::setTxtOutline(int txtOutline)
240
{
5691 avox 241
        tmpStyle.charStyle().setOutlineWidth(txtOutline);
4070 subik 242
}
243
 
244
void SampleItem::setTxtUnderPos(int txtUnderPos)
245
{
5691 avox 246
        tmpStyle.charStyle().setUnderlineOffset(txtUnderPos);
4070 subik 247
}
248
 
249
void SampleItem::setTxtUnderWidth(int txtUnderWidth)
250
{
5691 avox 251
        tmpStyle.charStyle().setUnderlineWidth(txtUnderWidth);
4070 subik 252
}
253
 
254
void SampleItem::setTxtStrikePos(int txtStrikePos)
255
{
5691 avox 256
        tmpStyle.charStyle().setStrikethruOffset(txtStrikePos);
4070 subik 257
}
258
 
259
void SampleItem::setTxtStrikeWidth(int txtStrikeWidth)
260
{
5691 avox 261
        tmpStyle.charStyle().setStrikethruWidth(txtStrikeWidth);
4070 subik 262
}
263
 
264
void SampleItem::setScaleH(int scaleH)
265
{
5691 avox 266
        tmpStyle.charStyle().setScaleH(scaleH);
4070 subik 267
}
268
 
269
void SampleItem::setScaleV(int scaleV)
270
{
5691 avox 271
        tmpStyle.charStyle().setScaleV(scaleV);
4070 subik 272
}
273
 
274
void SampleItem::setBaseOff(int baseOff)
275
{
5691 avox 276
        tmpStyle.charStyle().setBaselineOffset(baseOff);
4070 subik 277
}
278
 
279
void SampleItem::setKernVal(int kernVal)
280
{
5691 avox 281
        tmpStyle.charStyle().setTracking(kernVal);
4070 subik 282
}
283
 
284
QPixmap SampleItem::getSample(int width, int height)
285
{
5470 subik 286
        // if it's false => the used font will be removed from used fonts
287
        // after sample creating
288
        bool previouslyUsedFont = false;
289
 
5559 avox 290
        if (tmpStyle.charStyle().font() == &Foi::NONE)
5315 avox 291
                return QPixmap();
5470 subik 292
 
4150 subik 293
        UndoManager::instance()->setUndoEnabled(false); // disable undo
294
 
4614 fschmid 295
        PageItem_TextFrame *previewItem = new PageItem_TextFrame(doc, 0, 0, width, height, 0, "__whiteforpreviewbg__", "__whiteforpreview__");
4070 subik 296
        QPixmap pm(width, height);
297
        ScPainter *painter = new ScPainter(&pm, width, height, 0, 0);
4374 subik 298
        double sca = 1.0; // original scale to set back at the end...
4459 subik 299
        int userAppMode = ScMW->doc->appMode; // We need to be in normal when creating/repainting items
300
        ScMW->doc->appMode = modeNormal;
4070 subik 301
 
4077 subik 302
        if (ScMW->view != NULL)
4374 subik 303
        {
4593 cbradney 304
                sca = ScMW->view->scale();
4374 subik 305
                ScMW->view->setScale(1.0);
306
        }
4077 subik 307
 
5559 avox 308
        if (doc->UsedFonts.contains(tmpStyle.charStyle().font()->scName()))
5470 subik 309
                previouslyUsedFont = true;
310
 
5559 avox 311
        doc->AddFont(tmpStyle.charStyle().font()->scName(), qRound(doc->toolSettings.defSize / 10.0));
4077 subik 312
        doc->docParagraphStyles.append(tmpStyle);
313
        int tmpIndex = doc->docParagraphStyles.count() - 1;
4070 subik 314
 
315
        previewItem->FrameType = PageItem::TextFrame;
316
        previewItem->itemText.clear();
5559 avox 317
//      previewItem->setFont(tmpStyle.charStyle().font()->scName());
4070 subik 318
        previewItem->Cols = 1;
5315 avox 319
        text.replace(QChar(10),QChar(13)).replace(QChar(5),QChar(13));
320
        previewItem->itemText.insertChars(0, text);
4584 cbradney 321
        doc->chAbStyle(previewItem, tmpIndex);
5315 avox 322
        previewItem->itemText.applyStyle(0, text.length(), tmpStyle.charStyle());
4614 fschmid 323
        previewItem->setFillColor("__whiteforpreviewbg__");
324
        previewItem->setFillShade(bgShade);
325
        previewItem->SetRectFrame();
4603 fschmid 326
        previewItem->Frame = false;
4070 subik 327
        previewItem->DrawObj(painter, QRect(0, 0, width, height));
328
        painter->end();
329
        delete(painter);
4374 subik 330
        delete previewItem;
331
 
5470 subik 332
        // cleanups and resets
333
        if (!previouslyUsedFont)
5691 avox 334
                doc->UsedFonts.remove(tmpStyle.charStyle().font()->scName());
4077 subik 335
        if (ScMW->view != NULL)
336
                ScMW->view->setScale(sca);
4584 cbradney 337
        doc->appMode = userAppMode;
4077 subik 338
        doc->docParagraphStyles.remove(doc->docParagraphStyles.fromLast());
4150 subik 339
        UndoManager::instance()->setUndoEnabled(true);
4070 subik 340
        return pm;
341
}
4467 subik 342
 
343
void SampleItem::cleanupTemporary()
344
{
345
        // clear tmp colors
346
        ScMW->doc->PageColors.remove("__blackforpreview__");
347
        ScMW->doc->PageColors.remove("__whiteforpreview__");
4614 fschmid 348
        ScMW->doc->PageColors.remove("__whiteforpreviewbg__");
4467 subik 349
}