Subversion Repositories Scribus

Rev

Rev 10223 | Rev 10601 | 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"
10223 cbradney 15
#include <QColor>
16
#include <QString>
17
#include <QCursor>
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);
9607 avox 73
        tmpStyle.charStyle().setFeatures(QStringList(CharStyle::INHERIT));
5691 avox 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);
10554 fschmid 118
// really needed ??
119
//      text = QString::fromUtf8(text);
4070 subik 120
        delete m;
121
}
122
 
5698 avox 123
void SampleItem::setStyle(const ParagraphStyle& aStyle)
4070 subik 124
{
125
        tmpStyle = aStyle;
126
}
127
 
128
void SampleItem::setBgColor(QColor c)
129
{
5781 cbradney 130
        m_Doc->PageColors["__whiteforpreviewbg__"].fromQColor(c);
4070 subik 131
}
132
 
4614 fschmid 133
void SampleItem::setBgShade(int c)
134
{
135
        bgShade = c;
136
}
137
 
7054 jghali 138
void SampleItem::setBgColorMngt(bool enable)
139
{
140
        m_Doc->PageColors["__whiteforpreviewbg__"].setSpotColor(!enable);
141
}
142
 
4614 fschmid 143
void SampleItem::setTxColor(QColor c)
144
{
5781 cbradney 145
        m_Doc->PageColors["__blackforpreview__"].fromQColor(c);
4614 fschmid 146
}
147
 
148
void SampleItem::setTxShade(int c)
149
{
5691 avox 150
        tmpStyle.charStyle().setFillShade(c);
4614 fschmid 151
}
152
 
4070 subik 153
void SampleItem::setLineSpaMode(int lineSpaMode)
154
{
5184 avox 155
        tmpStyle.setLineSpacingMode(static_cast<ParagraphStyle::LineSpacingMode>(lineSpaMode));
4070 subik 156
}
157
 
158
void SampleItem::setLineSpa(double lineSpa)
159
{
5184 avox 160
        tmpStyle.setLineSpacing(lineSpa);
4070 subik 161
}
162
 
163
void SampleItem::setTextAlignment(int textAlignment)
164
{
6733 avox 165
        tmpStyle.setAlignment(static_cast<ParagraphStyle::AlignmentType>(textAlignment));
4070 subik 166
}
167
 
168
void SampleItem::setIndent(double indent)
169
{
5184 avox 170
        tmpStyle.setLeftMargin(indent);
4070 subik 171
}
172
 
173
void SampleItem::setFirst(double first)
174
{
5184 avox 175
        tmpStyle.setFirstIndent(first);
4070 subik 176
}
177
 
178
void SampleItem::setGapBefore(double gapBefore)
179
{
5184 avox 180
        tmpStyle.setGapBefore(gapBefore);
4070 subik 181
}
182
 
183
void SampleItem::setGapAfter(double gapAfter)
184
{
5184 avox 185
        tmpStyle.setGapAfter(gapAfter);
4070 subik 186
}
187
 
188
void SampleItem::setFont(QString font)
189
{
5691 avox 190
        tmpStyle.charStyle().setFont(PrefsManager::instance()->appPrefs.AvailFonts[font]);
4070 subik 191
}
192
 
4077 subik 193
void SampleItem::setFontSize(int fontSize, bool autoLineSpa)
4070 subik 194
{
5691 avox 195
        tmpStyle.charStyle().setFontSize(fontSize);
4077 subik 196
        if (autoLineSpa)
5781 cbradney 197
                tmpStyle.setLineSpacing(((fontSize / 10)  * (m_Doc->typographicSettings.autoLineSpacing / 100) + (fontSize / 10)));
4070 subik 198
}
199
 
200
/*void SampleItem::setTabValues(QValueList<PageItem::TabRecord> tabValues)
201
{
202
        tmpStyle.TabValues = tabValues;
203
}*/
204
 
205
void SampleItem::setDrop(bool drop)
206
{
5184 avox 207
        tmpStyle.setHasDropCap(drop);
4070 subik 208
}
209
 
210
void SampleItem::setDropLin(int dropLin)
211
{
5184 avox 212
        tmpStyle.setDropCapLines(dropLin);
4070 subik 213
}
214
 
215
void SampleItem::setDropDist(double dropDist)
216
{
5184 avox 217
        tmpStyle.setDropCapOffset(dropDist);
4070 subik 218
}
219
 
220
void SampleItem::setFontEffect(int fontEffect)
221
{
9607 avox 222
        tmpStyle.charStyle().setFeatures(static_cast<StyleFlag>(fontEffect).featureList());
4070 subik 223
}
224
 
225
void SampleItem::setFColor(QString fColor)
226
{
5691 avox 227
        tmpStyle.charStyle().setFillColor(fColor);
4070 subik 228
}
229
 
230
void SampleItem::setFShade(int fShade)
231
{
5691 avox 232
        tmpStyle.charStyle().setFillShade(fShade);
4070 subik 233
}
234
 
235
void SampleItem::setSColor(QString sColor)
236
{
5691 avox 237
        tmpStyle.charStyle().setStrokeColor(sColor);
4070 subik 238
}
239
 
240
void SampleItem::setSShade(int sShade)
241
{
5691 avox 242
        tmpStyle.charStyle().setStrokeShade(sShade);
4070 subik 243
}
244
 
245
void SampleItem::setBaseAdj(bool baseAdj)
246
{
8871 cbradney 247
        tmpStyle.setLineSpacingMode(baseAdj ? ParagraphStyle::BaselineGridLineSpacing : ParagraphStyle::FixedLineSpacing);
4070 subik 248
}
249
 
250
void SampleItem::setTxtShadowX(int txtShadowX)
251
{
5691 avox 252
        tmpStyle.charStyle().setShadowXOffset(txtShadowX);
4070 subik 253
}
254
 
255
void SampleItem::setTxtShadowY(int txtShadowY)
256
{
5691 avox 257
        tmpStyle.charStyle().setShadowYOffset(txtShadowY);
4070 subik 258
}
259
 
260
void SampleItem::setTxtOutline(int txtOutline)
261
{
5691 avox 262
        tmpStyle.charStyle().setOutlineWidth(txtOutline);
4070 subik 263
}
264
 
265
void SampleItem::setTxtUnderPos(int txtUnderPos)
266
{
5691 avox 267
        tmpStyle.charStyle().setUnderlineOffset(txtUnderPos);
4070 subik 268
}
269
 
270
void SampleItem::setTxtUnderWidth(int txtUnderWidth)
271
{
5691 avox 272
        tmpStyle.charStyle().setUnderlineWidth(txtUnderWidth);
4070 subik 273
}
274
 
275
void SampleItem::setTxtStrikePos(int txtStrikePos)
276
{
5691 avox 277
        tmpStyle.charStyle().setStrikethruOffset(txtStrikePos);
4070 subik 278
}
279
 
280
void SampleItem::setTxtStrikeWidth(int txtStrikeWidth)
281
{
5691 avox 282
        tmpStyle.charStyle().setStrikethruWidth(txtStrikeWidth);
4070 subik 283
}
284
 
285
void SampleItem::setScaleH(int scaleH)
286
{
5691 avox 287
        tmpStyle.charStyle().setScaleH(scaleH);
4070 subik 288
}
289
 
290
void SampleItem::setScaleV(int scaleV)
291
{
5691 avox 292
        tmpStyle.charStyle().setScaleV(scaleV);
4070 subik 293
}
294
 
295
void SampleItem::setBaseOff(int baseOff)
296
{
5691 avox 297
        tmpStyle.charStyle().setBaselineOffset(baseOff);
4070 subik 298
}
299
 
300
void SampleItem::setKernVal(int kernVal)
301
{
5691 avox 302
        tmpStyle.charStyle().setTracking(kernVal);
4070 subik 303
}
304
 
305
QPixmap SampleItem::getSample(int width, int height)
306
{
5470 subik 307
        // if it's false => the used font will be removed from used fonts
308
        // after sample creating
309
        bool previouslyUsedFont = false;
310
 
5980 avox 311
        if (tmpStyle.charStyle().font().isNone())
5315 avox 312
                return QPixmap();
5470 subik 313
 
4150 subik 314
        UndoManager::instance()->setUndoEnabled(false); // disable undo
315
 
5781 cbradney 316
        PageItem_TextFrame *previewItem = new PageItem_TextFrame(m_Doc, 0, 0, width, height, 0, "__whiteforpreviewbg__", "__whiteforpreview__");
9319 fschmid 317
        QImage pm(width, height, QImage::Format_ARGB32);
9372 fschmid 318
        ScPainter *painter = new ScPainter(&pm, width, height, 1.0, 0);
4374 subik 319
        double sca = 1.0; // original scale to set back at the end...
5781 cbradney 320
        int userAppMode = m_Doc->appMode; // We need to be in normal when creating/repainting items
321
        m_Doc->appMode = modeNormal;
4070 subik 322
 
5781 cbradney 323
        if (m_Doc->view() != NULL)
4374 subik 324
        {
5781 cbradney 325
                sca = m_Doc->view()->scale();
8877 cbradney 326
                m_Doc->view()->setScale(1.0 * PrefsManager::instance()->appPrefs.DisScale);
4374 subik 327
        }
8877 cbradney 328
        painter->setZoomFactor(m_Doc->view()->scale());
4077 subik 329
 
5980 avox 330
        if (m_Doc->UsedFonts.contains(tmpStyle.charStyle().font().scName()))
5470 subik 331
                previouslyUsedFont = true;
332
 
5980 avox 333
        m_Doc->AddFont(tmpStyle.charStyle().font().scName(), qRound(m_Doc->toolSettings.defSize / 10.0));
6733 avox 334
//      m_Doc->docParagraphStyles.create(tmpStyle);
335
//      int tmpIndex = m_Doc->docParagraphStyles.count() - 1;
4070 subik 336
 
337
        previewItem->FrameType = PageItem::TextFrame;
338
        previewItem->itemText.clear();
5559 avox 339
//      previewItem->setFont(tmpStyle.charStyle().font()->scName());
4070 subik 340
        previewItem->Cols = 1;
5315 avox 341
        text.replace(QChar(10),QChar(13)).replace(QChar(5),QChar(13));
342
        previewItem->itemText.insertChars(0, text);
7349 avox 343
        previewItem->itemText.setDefaultStyle(tmpStyle);
4614 fschmid 344
        previewItem->setFillColor("__whiteforpreviewbg__");
345
        previewItem->setFillShade(bgShade);
346
        previewItem->SetRectFrame();
4603 fschmid 347
        previewItem->Frame = false;
4070 subik 348
        previewItem->DrawObj(painter, QRect(0, 0, width, height));
349
        painter->end();
350
        delete(painter);
4374 subik 351
        delete previewItem;
352
 
5470 subik 353
        // cleanups and resets
354
        if (!previouslyUsedFont)
5980 avox 355
                m_Doc->UsedFonts.remove(tmpStyle.charStyle().font().scName());
5781 cbradney 356
        if (m_Doc->view() != NULL)
357
                m_Doc->view()->setScale(sca);
358
        m_Doc->appMode = userAppMode;
6733 avox 359
//      m_Doc->docParagraphStyles.remove(tmpIndex);
4150 subik 360
        UndoManager::instance()->setUndoEnabled(true);
9319 fschmid 361
        return QPixmap::fromImage(pm);
4070 subik 362
}
4467 subik 363
 
364
void SampleItem::cleanupTemporary()
365
{
366
        // clear tmp colors
5781 cbradney 367
        m_Doc->PageColors.remove("__blackforpreview__");
368
        m_Doc->PageColors.remove("__whiteforpreview__");
369
        m_Doc->PageColors.remove("__whiteforpreviewbg__");
4467 subik 370
}