Subversion Repositories Scribus

Rev

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