Subversion Repositories Scribus

Rev

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