Subversion Repositories Scribus

Rev

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