Subversion Repositories Scribus

Rev

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