Subversion Repositories Scribus

Rev

Rev 331 | Rev 336 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 paul 1
/***************************************************************************
2
                          scribusview.cpp  -  description
3
                             -------------------
4
    begin                : Fre Apr  6 21:47:55 CEST 2001
5
    copyright            : (C) 2001 by Franz Schmid
6
    email                : Franz.Schmid@altmuehlnet.de
7
 ***************************************************************************/
8
 
9
/***************************************************************************
10
 *                                                                         *
11
 *   This program is free software; you can redistribute it and/or modify  *
12
 *   it under the terms of the GNU General Public License as published by  *
13
 *   the Free Software Foundation; either version 2 of the License, or     *
14
 *   (at your option) any later version.                                   *
15
 *                                                                         *
16
 ***************************************************************************/
17
 
18
#include "scribusview.h"
19
#include "scribusview.moc"
128 Franz 20
 
21
#if (_MSC_VER >= 1200)
22
 #include "win-config.h"
23
#else
24
 #include "config.h"
25
#endif
26
 
3 paul 27
#include "pageback.h"
28
#include <qcolor.h>
29
#include <qfont.h>
30
#include <qfontmetrics.h>
31
#include <qpixmap.h>
32
#include <qpointarray.h>
33
#include <qstringlist.h>
34
#include <qimage.h>
35
#include <qcstring.h>
173 Franz 36
#include <qfileinfo.h>
307 Franz 37
#include <cmath>
181 Franz 38
#include "scribus.h"
68 Franz 39
 
3 paul 40
extern void Level2Layer(ScribusDoc *doc, struct Layer *ll, int Level);
80 Franz 41
extern double Cwidth(ScribusDoc *doc, QString name, QString ch, int Siz, QString ch2 = " ");
181 Franz 42
extern ScribusApp* ScApp;
213 Franz 43
extern void ReOrderText(ScribusDoc *doc, ScribusView *view);
3 paul 44
 
45
ScribusView::ScribusView(QWidget *parent, ScribusDoc *doc, preV *prefs)
292 Franz 46
                : QScrollView(parent, "s", WRepaintNoErase | WNorthWestGravity)
3 paul 47
{
48
        Ready = false;
238 Franz 49
        doZooming = false;
3 paul 50
        Doc = doc;
51
        Doc->PageC = 0;
240 Franz 52
        Prefs = prefs;
3 paul 53
        setHScrollBarMode(QScrollView::AlwaysOn);
54
        setVScrollBarMode(QScrollView::AlwaysOn);
55
        setMargins(25, 25, 0, 0);
56
        setResizePolicy(Manual);
57
        enableClipper(true);
240 Franz 58
        viewport()->setBackgroundMode(PaletteBackground);
3 paul 59
        QFont fo = QFont(font());
60
        fo.setPointSize(10);
333 Franz 61
        LE = new MSpinBox( 10, 3200, this, 2 );
3 paul 62
        LE->setFont(fo);
240 Franz 63
        LE->setSuffix( tr( " %" ) );
146 Franz 64
        LE->setValue( 100 );
3 paul 65
        LE->setFocusPolicy(QWidget::ClickFocus);
66
        SB1 = new QPushButton(this);
67
        SB1->setPixmap(loadIcon("Klein.xpm"));
68
        SB1->setFocusPolicy(QWidget::NoFocus);
69
        SB2 = new QPushButton(this);
70
        SB2->setFocusPolicy(QWidget::NoFocus);
71
        SB2->setPixmap(loadIcon("Gross.xpm"));
199 Franz 72
        PGS = new PageSelector(this, 1);
160 Franz 73
        PGS->setFont(fo);
170 Franz 74
        PGS->setFocusPolicy(QWidget::ClickFocus);
3 paul 75
        LY = new QPushButton(this);
76
        LY->setFont(fo);
77
        Laymen = new QPopupMenu(this);
78
        Laymen->setFont(fo);
112 Franz 79
        LY->setText( tr("Layer")+" 0");
3 paul 80
        LY->setPopup(Laymen);
81
        LY->setFocusPolicy(QWidget::NoFocus);
82
        HR = new Hruler(this, Doc);
83
        VR = new Vruler(this, Doc);
84
        UN = new QToolButton(this);
85
        Unitmen = new QPopupMenu(this);
274 Franz 86
        Unitmen->insertItem(tr("pt"));
87
        Unitmen->insertItem(tr("mm"));
88
        Unitmen->insertItem(tr("in"));
89
        Unitmen->insertItem(tr("p"));
3 paul 90
        UN->setPopup(Unitmen);
91
        UN->setFocusPolicy(QWidget::NoFocus);
92
        UN->setPopupDelay(10);
93
        switch (doc->Einheit)
292 Franz 94
        {
95
        case 0:
96
                UN->setText( tr("pt"));
97
                break;
98
        case 1:
99
                UN->setText( tr("mm"));
100
                break;
101
        case 2:
102
                UN->setText( tr("in"));
103
                break;
104
        case 3:
105
                UN->setText( tr("p"));
106
                break;
107
        }
3 paul 108
        Pages.clear();
109
        MasterPages.clear();
110
        DocPages.clear();
111
        Ready = true;
238 Franz 112
        // jjsa 27-03-2004 added 5 variables for zoom
113
        oldX = -1,
292 Franz 114
               oldY = -1;
238 Franz 115
        oldScale=1;
116
        oldSby=0;
117
        oldSbx=0;
118
 
3 paul 119
        connect(SB1, SIGNAL(clicked()), this, SLOT(slotZoomOut()));
120
        connect(SB2, SIGNAL(clicked()), this, SLOT(slotZoomIn()));
68 Franz 121
        connect(LE, SIGNAL(valueChanged(int)), this, SLOT(Zval()));
199 Franz 122
        connect(PGS, SIGNAL(GotoPage(int)), this, SLOT(GotoPa(int)));
3 paul 123
        connect(Laymen, SIGNAL(activated(int)), this, SLOT(GotoLa(int)));
124
        connect(Unitmen, SIGNAL(activated(int)), this, SLOT(ChgUnit(int)));
125
        connect(this, SIGNAL(contentsMoving(int, int)), this, SLOT(setRulerPos(int, int)));
126
}
127
 
128
/** Waagrechter Scrollbalken */
129
void ScribusView::setHBarGeometry(QScrollBar &bar, int x, int y, int w, int h)
130
{
131
        bar.setGeometry(x+270, y, w-270, h);
132
        if (Ready)
292 Franz 133
        {
77 Franz 134
                QFontMetrics fom(LE->font());
3 paul 135
                LE->setGeometry(x, y, 60, h);
77 Franz 136
                if (fom.height() > LE->ed->height())
292 Franz 137
                {
78 Franz 138
                        QFont ff = LE->font();
77 Franz 139
                        do
292 Franz 140
                        {
77 Franz 141
                                int si = LE->font().pointSize();
142
                                ff.setPointSize(si-1);
143
                                LE->setFont(ff);
144
                                fom = QFontMetrics(LE->font());
292 Franz 145
                        }
77 Franz 146
                        while (fom.height() > LE->ed->height());
160 Franz 147
                        PGS->setFont(ff);
78 Franz 148
                        LY->setFont(ff);
83 Franz 149
                        HR->setFont(ff);
150
                        VR->setFont(ff);
292 Franz 151
                }
77 Franz 152
                QRect forec = fom.boundingRect("3200.00 %");
153
                int sadj = forec.width() - LE->ed->width();
154
                LE->setGeometry(x, y, 60+sadj, h);
155
                SB1->setGeometry(x+60+sadj, y, 15, h);
156
                SB2->setGeometry(x+75+sadj, y, 15, h);
199 Franz 157
                PGS->setGeometry(x+90+sadj, y, 215, h);
158
                LY->setGeometry(x+305+sadj, y, 110, h);
3 paul 159
                HR->setGeometry(25, 1, w-24, 25);
200 Franz 160
                bar.setGeometry(x+415+sadj, y, w-(415+sadj), h);
292 Franz 161
        }
3 paul 162
}
238 Franz 163
// jjsa 27-03-2004 add for better settinf while zooming
164
void ScribusView::rememberPreviousSettings(int mx, int my)
165
{
166
        // remember scale
167
        oldScale = Doc->Scale;
3 paul 168
 
238 Franz 169
        oldX = childX(Doc->ActPage->parentWidget()) + mx;
170
        oldY = childY(Doc->ActPage->parentWidget()) + my;
171
 
172
        // scrollbar position
173
        oldSbx = horizontalScrollBar()->value();
174
        oldSby = verticalScrollBar()->value();
175
 
176
        oldX = childX(Doc->ActPage->parentWidget()) + mx + oldSbx;
177
        oldY = childY(Doc->ActPage->parentWidget()) + my + oldSby;
178
}
179
 
3 paul 180
/** Senkrechter Scrollbalken */
181
void ScribusView::setVBarGeometry(QScrollBar &bar, int x, int y, int w, int h)
182
{
183
        bar.setGeometry(x, y, w, h);
184
        if (Ready)
292 Franz 185
        {
3 paul 186
                VR->setGeometry(1, 25, 25, h-24);
187
                UN->setGeometry(1, 1, 25, 25);
292 Franz 188
        }
3 paul 189
}
190
 
191
void ScribusView::setRulerPos(int x, int y)
192
{
181 Franz 193
        if (ScApp->ScriptRunning)
194
                return;
3 paul 195
        HR->offs = x-static_cast<int>(10*Doc->Scale)-2;
196
        HR->repX = false;
197
        HR->repaint();
198
        VR->offs = y-static_cast<int>(10*Doc->Scale)-2;
199
        VR->repaint();
200
}
201
 
202
void ScribusView::Zval()
203
{
238 Franz 204
        rememberPreviousSettings();
146 Franz 205
        Doc->Scale = LE->value() / 100.0 * Prefs->DisScale;
68 Franz 206
        slotDoZoom();
250 Franz 207
        ScApp->setFocus();
3 paul 208
}
209
 
199 Franz 210
/** Fgt eine Seite hinzu */
3 paul 211
Page* ScribusView::addPage(int nr)
212
{
213
        int z;
80 Franz 214
        double s = Doc->Scale;
3 paul 215
        QWidget* feh = new PageBack(viewport());
216
        feh->resize(static_cast<int>((Doc->PageB+5)*s), static_cast<int>((Doc->PageH+5)*s));
217
        Page* fe = new Page(feh, 0, 0, static_cast<int>(Doc->PageB*s), static_cast<int>(Doc->PageH*s), Doc, this);
218
        Doc->ActPage = fe;
219
        fe->Margins.Top = Doc->PageM.Top;
220
        fe->Margins.Bottom = Doc->PageM.Bottom;
221
        addChild(feh, static_cast<int>(10*s), static_cast<int>(Doc->PageC*((Doc->PageH+30)*s)+10*s));
222
        feh->show();
223
        Doc->PageC++;
224
        Pages.insert(nr, fe);
225
        reformPages();
226
        if ((Doc->PageAT) && (!Doc->loading))
219 Franz 227
        {
135 Franz 228
                z = fe->PaintText(fe->Margins.Left,
292 Franz 229
                                  fe->Margins.Top,
230
                                  Doc->PageB-fe->Margins.Right-fe->Margins.Left,
231
                                  Doc->PageH-fe->Margins.Bottom-fe->Margins.Top,
232
                                  1, Doc->Dpen);
135 Franz 233
                fe->Items.at(z)->isAutoText = true;
234
                fe->Items.at(z)->BackBox = Doc->LastAuto;
137 Franz 235
                fe->Items.at(z)->Cols = qRound(Doc->PageSp);
135 Franz 236
                fe->Items.at(z)->ColGap = Doc->PageSpa;
237
                if (Doc->LastAuto != 0)
238
                        Doc->LastAuto->NextBox = fe->Items.at(z);
239
                else
240
                        Doc->FirstAuto = fe->Items.at(z);
241
                Doc->LastAuto = fe->Items.at(z);
242
                fe->SetRectFrame(fe->Items.at(z));
3 paul 243
                Doc->FirstAuto->Dirty = true;
219 Franz 244
                if (nr > 0)
245
                {
246
                        bool savre = Doc->RePos;
247
                        Doc->RePos = true;
248
                        QPixmap pgPix(1, 1);
249
                        ScPainter *painter = new ScPainter(&pgPix, 1, 1);
250
                        painter->translate(0.5, 0.5);
251
                        fe->Items.at(z)->BackBox->DrawObj(painter, QRect(0, 0, 1, 1));
252
                        painter->end();
253
                        delete painter;
254
                        Doc->RePos = savre;
3 paul 255
                }
219 Franz 256
        }
160 Franz 257
        PGS->setMaxValue(Doc->PageC);
211 Franz 258
        if ((!ScApp->ScriptRunning) && (!Doc->loading) && (!Doc->MasterP))
199 Franz 259
                PGS->GotoPg(nr);
3 paul 260
        fe->setMouseTracking(true);
261
        connect(fe, SIGNAL(Hrule(int)), HR, SLOT(Draw(int)));
262
        connect(fe, SIGNAL(Vrule(int)), VR, SLOT(Draw(int)));
263
        connect(fe, SIGNAL(PgCh(int)), this, SLOT(setMenTxt(int)));
238 Franz 264
        connect(fe, SIGNAL(ZoomIn(int, int)), this, SLOT(slotZoomIn2(int, int)));
265
        connect(fe, SIGNAL(ZoomOut(int, int)), this, SLOT(slotZoomOut2(int, int)));
3 paul 266
        connect(fe, SIGNAL(ZoomAbs()), this, SLOT(slotDoZoom()));
267
        connect(fe, SIGNAL(AbsPosi(int, int)), this, SLOT(SetCPo(int, int)));
268
        connect(fe, SIGNAL(AbsPosi2(int, int)), this, SLOT(SetCCPo(int, int)));
80 Franz 269
        return fe;
3 paul 270
}
271
 
199 Franz 272
/** Lscht eine Seite */
3 paul 273
void ScribusView::delPage(int Nr)
274
{
275
        if (Doc->PageC == 1)
199 Franz 276
                return;
3 paul 277
        if (Doc->PageC < Nr-1)
199 Franz 278
                return;
3 paul 279
        removeChild(Pages.at(Nr)->parentWidget());
280
        delete Pages.at(Nr)->parentWidget();
281
        Pages.remove(Nr);
108 Franz 282
        Doc->UnDoValid = false;
3 paul 283
        Doc->PageC -= 1;
284
        Doc->ActPage = Pages.at(0);
284 Franz 285
        if (Doc->TemplateMode)
286
                MasterPages = Pages;
287
        else
288
                DocPages = Pages;
160 Franz 289
        PGS->setMaxValue(Doc->PageC);
199 Franz 290
        PGS->GotoPg(0);
3 paul 291
}
292
 
293
void ScribusView::movePage(int from, int to, int ziel, int art)
294
{
295
        QPtrList<Page> Buf;
296
        int a;
297
        uint b;
298
        int zz = ziel;
299
        Buf.clear();
300
        for (a = from; a < to; a++)
292 Franz 301
        {
3 paul 302
                Buf.append(Pages.at(from));
303
                Pages.remove(from);
304
                if (a <= zz)
80 Franz 305
                        zz--;
292 Franz 306
        }
3 paul 307
        switch (art)
292 Franz 308
        {
309
        case 0:
310
                for (b = 0; b < Buf.count(); b++)
3 paul 311
                {
292 Franz 312
                        Pages.insert(zz, Buf.at(b));
313
                        zz++;
3 paul 314
                }
292 Franz 315
                break;
316
        case 1:
317
                for (b = 0; b < Buf.count(); b++)
318
                {
319
                        zz++;
320
                        Pages.insert(zz, Buf.at(b));
321
                }
322
                break;
323
        case 2:
324
                for (b = 0; b < Buf.count(); b++)
325
                {
326
                        Pages.append(Buf.at(b));
327
                }
328
                break;
329
        }
284 Franz 330
        if (Doc->TemplateMode)
331
                MasterPages = Pages;
332
        else
333
                DocPages = Pages;
3 paul 334
        reformPages();
335
}
336
 
337
void ScribusView::reformPages()
80 Franz 338
{
3 paul 339
        uint a;
340
        Page* Seite;
341
        QWidget* PSeite = Doc->ActPage->parentWidget();
292 Franz 342
        for (a=0; a < Pages.count(); a++)
343
        {
344
                Seite = Pages.at(a);
3 paul 345
                Seite->PageNr = a;
346
                PSeite = Seite->parentWidget();
347
                if (Doc->PageFP)
292 Franz 348
                {
349
                        if (Doc->MasterP)
3 paul 350
                        {
292 Franz 351
                                if (Seite->LeftPg)
3 paul 352
                                {
292 Franz 353
                                        Seite->Margins.Left = Doc->PageM.Right;
354
                                        Seite->Margins.Right = Doc->PageM.Left;
3 paul 355
                                }
292 Franz 356
                                else
357
                                {
358
                                        Seite->Margins.Right = Doc->PageM.Right;
359
                                        Seite->Margins.Left = Doc->PageM.Left;
360
                                }
361
                        }
3 paul 362
                        else
292 Franz 363
                        {
364
                                if (a % 2 == 0)
80 Franz 365
                                {
292 Franz 366
                                        if (Doc->FirstPageLeft)
367
                                        {
368
                                                Seite->Margins.Left = Doc->PageM.Right;
369
                                                Seite->Margins.Right = Doc->PageM.Left;
370
                                        }
371
                                        else
372
                                        {
373
                                                Seite->Margins.Right = Doc->PageM.Right;
374
                                                Seite->Margins.Left = Doc->PageM.Left;
375
                                        }
376
                                }
377
                                else
378
                                {
379
                                        if (Doc->FirstPageLeft)
380
                                        {
381
                                                Seite->Margins.Right = Doc->PageM.Right;
382
                                                Seite->Margins.Left = Doc->PageM.Left;
383
                                        }
384
                                        else
385
                                        {
386
                                                Seite->Margins.Left = Doc->PageM.Right;
387
                                                Seite->Margins.Right = Doc->PageM.Left;
388
                                        }
389
                                }
390
                        }
391
                }
3 paul 392
                else
292 Franz 393
                {
3 paul 394
                        Seite->Margins.Right = Doc->PageM.Right;
395
                        Seite->Margins.Left = Doc->PageM.Left;
292 Franz 396
                }
3 paul 397
                Seite->Margins.Top = Doc->PageM.Top;
398
                Seite->Margins.Bottom = Doc->PageM.Bottom;
399
                if (Doc->MasterP)
400
                        addChild(PSeite, static_cast<int>(10*Doc->Scale), static_cast<int>((Doc->PageC-1)*(PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
401
                else
292 Franz 402
                {
403
                        if ((Doc->PageFP) && (Doc->PagesSbS))
3 paul 404
                        {
292 Franz 405
                                if (a % 2 == 0)
3 paul 406
                                {
292 Franz 407
                                        if (Doc->FirstPageLeft)
3 paul 408
                                                addChild(PSeite, static_cast<int>(10*Doc->Scale),
292 Franz 409
                                                         static_cast<int>(a/2 * (PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
410
                                        else
3 paul 411
                                                addChild(PSeite, static_cast<int>(PSeite->width()+35*Doc->Scale),
292 Franz 412
                                                         static_cast<int>((a+1)/2 * (PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
413
                                }
414
                                else
415
                                {
416
                                        if (Doc->FirstPageLeft)
3 paul 417
                                                addChild(PSeite, static_cast<int>(PSeite->width()+35*Doc->Scale),
292 Franz 418
                                                         static_cast<int>(a/2 * (PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
419
                                        else
3 paul 420
                                                addChild(PSeite, static_cast<int>(10*Doc->Scale),
292 Franz 421
                                                         static_cast<int>((a+1)/2 * (PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
3 paul 422
                                }
292 Franz 423
                        }
3 paul 424
                        else
425
                                addChild(PSeite, static_cast<int>(10*Doc->Scale), static_cast<int>(a*(PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
426
                }
292 Franz 427
        }
3 paul 428
        PSeite = Doc->ActPage->parentWidget();
45 Franz 429
        if ((Doc->PageFP) && (Doc->PagesSbS))
292 Franz 430
        {
3 paul 431
                if (Doc->FirstPageLeft)
432
                        resizeContents(static_cast<int>(PSeite->width()*2+60*Doc->Scale),
292 Franz 433
                                       static_cast<int>(((Doc->PageC-1)/2 + 1) * (PSeite->height()+25*Doc->Scale)+30));
3 paul 434
                else
435
                        resizeContents(static_cast<int>(PSeite->width()*2+60*Doc->Scale),
292 Franz 436
                                       static_cast<int>((Doc->PageC/2 + 1) * (PSeite->height()+25*Doc->Scale)+30));
181 Franz 437
                if (!ScApp->ScriptRunning)
438
                        setContentsPos(childX(Doc->ActPage->parentWidget())-static_cast<int>(10*Doc->Scale),
292 Franz 439
                                       childY(Doc->ActPage->parentWidget())-static_cast<int>(10*Doc->Scale));
440
        }
3 paul 441
        else
292 Franz 442
        {
3 paul 443
                resizeContents(static_cast<int>(PSeite->width()+30*Doc->Scale), static_cast<int>(Doc->PageC * (PSeite->height()+25*Doc->Scale)+30));
181 Franz 444
                if (!ScApp->ScriptRunning)
445
                        setContentsPos(0, childY(Doc->ActPage->parentWidget())-static_cast<int>(10*Doc->Scale));
292 Franz 446
        }
3 paul 447
        setRulerPos(contentsX(), contentsY());
448
        setMenTxt(Doc->ActPage->PageNr);
80 Franz 449
}
3 paul 450
 
451
void ScribusView::setMenTxt(int Seite)
452
{
181 Franz 453
        if (ScApp->ScriptRunning)
454
                return;
199 Franz 455
        disconnect(PGS, SIGNAL(GotoPage(int)), this, SLOT(GotoPa(int)));
160 Franz 456
        PGS->setMaxValue(Doc->PageC);
211 Franz 457
        if ((!Doc->loading) && (!Doc->MasterP))
199 Franz 458
                PGS->GotoPg(Seite);
459
        connect(PGS, SIGNAL(GotoPage(int)), this, SLOT(GotoPa(int)));
3 paul 460
}
461
 
462
void ScribusView::setLayMenTxt(int l)
463
{
153 Franz 464
        QValueList<Layer>::iterator it;
465
        for (it = Doc->Layers.begin(); it != Doc->Layers.end(); ++it)
292 Franz 466
        {
153 Franz 467
                if ((*it).LNr == l)
468
                        break;
292 Franz 469
        }
470
        LY->setText((*it).Name);
3 paul 471
}
472
 
11 Franz 473
/** Fuehrt die Vergroesserung/Verkleinerung aus */
3 paul 474
void ScribusView::slotDoZoom()
80 Franz 475
{
3 paul 476
        uint a;
477
        Page* Seite;
478
        QWidget* PSeite = Doc->ActPage->parentWidget();
479
        if (Doc->Scale > 32)
480
                Doc->Scale = 32;
481
        if (Pages.count() != 0)
292 Franz 482
        {
483
                for (a=0; a < Pages.count(); a++)
3 paul 484
                {
485
                        Seite = Pages.at(a);
486
                        PSeite = Seite->parentWidget();
487
                        Seite->resize(static_cast<int>(Doc->PageB*Doc->Scale), static_cast<int>(Doc->PageH*Doc->Scale));
488
                        PSeite->resize(static_cast<int>((Doc->PageB+5)*Doc->Scale), static_cast<int>((Doc->PageH+5)*Doc->Scale));
489
                        if (Doc->MasterP)
490
                                addChild(PSeite, static_cast<int>(10*Doc->Scale), static_cast<int>((Doc->PageC-1)*(PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
491
                        else
292 Franz 492
                        {
493
                                if ((Doc->PageFP) && (Doc->PagesSbS))
3 paul 494
                                {
292 Franz 495
                                        if (a % 2 == 0)
3 paul 496
                                        {
292 Franz 497
                                                if (Doc->FirstPageLeft)
3 paul 498
                                                        addChild(PSeite, static_cast<int>(10*Doc->Scale),
292 Franz 499
                                                                 static_cast<int>(a/2 * (PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
500
                                                else
3 paul 501
                                                        addChild(PSeite, static_cast<int>(PSeite->width()+35*Doc->Scale),
292 Franz 502
                                                                 static_cast<int>((a+1)/2 * (PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
503
                                        }
504
                                        else
505
                                        {
506
                                                if (Doc->FirstPageLeft)
3 paul 507
                                                        addChild(PSeite, static_cast<int>(PSeite->width()+35*Doc->Scale),
292 Franz 508
                                                                 static_cast<int>(a/2 * (PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
509
                                                else
3 paul 510
                                                        addChild(PSeite, static_cast<int>(10*Doc->Scale),
292 Franz 511
                                                                 static_cast<int>((a+1)/2 * (PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
3 paul 512
                                        }
292 Franz 513
                                }
3 paul 514
                                else
515
                                        addChild(PSeite, static_cast<int>(10*Doc->Scale), static_cast<int>(a*(PSeite->height()+25*Doc->Scale)+10*Doc->Scale));
516
                        }
292 Franz 517
                }
45 Franz 518
                if ((Doc->PageFP) && (Doc->PagesSbS))
292 Franz 519
                {
3 paul 520
                        if (Doc->FirstPageLeft)
292 Franz 521
                                resizeContents(static_cast<int>(PSeite->width()*2+60*Doc->Scale),
522
                                               static_cast<int>(((Doc->PageC-1)/2 + 1) * (PSeite->height()+25*Doc->Scale)+30));
3 paul 523
                        else
524
                                resizeContents(static_cast<int>(PSeite->width()*2+60*Doc->Scale),
292 Franz 525
                                               static_cast<int>((Doc->PageC/2 + 1) * (PSeite->height()+25*Doc->Scale)+30));
526
                        updateScrollBars();
527
                        int newAbsX = (int)(((double)(oldX) * Doc->Scale / oldScale)+.5);
528
                        int newAbsY = (int)(((double)(oldY) * Doc->Scale / oldScale)+.5);
238 Franz 529
 
292 Franz 530
                        oldSbx += newAbsX - oldX;
531
                        oldSbx += newAbsY - oldY;
238 Franz 532
 
292 Franz 533
                        int maxx = horizontalScrollBar()->maxValue();
534
                        if ( oldSbx < 0 )
535
                                oldSbx = 0;
536
                        else if ( oldSbx > maxx )
537
                                oldSbx = maxx;
538
                        horizontalScrollBar()->setValue(oldSbx);
238 Franz 539
 
292 Franz 540
                        int maxy = verticalScrollBar()->maxValue();
541
                        if ( oldSby < 0 )
542
                                oldSby = 0;
543
                        else if ( oldSby > maxy )
544
                                oldSby = maxy;
545
                        verticalScrollBar()->setValue(oldSby);
546
                }
3 paul 547
                else
292 Franz 548
                {
3 paul 549
                        resizeContents(static_cast<int>(PSeite->width()+30*Doc->Scale), static_cast<int>(Doc->PageC * (PSeite->height()+25*Doc->Scale)+30));
238 Franz 550
                        updateScrollBars();
551
                        int newAbsX = (int)(((double)(oldX) * Doc->Scale / oldScale)+.5);
552
                        int newAbsY = (int)(((double)(oldY) * Doc->Scale / oldScale)+.5);
553
 
554
                        oldSbx += newAbsX - oldX;
555
                        oldSby += newAbsY - oldY;
556
 
557
                        int maxx = horizontalScrollBar()->maxValue();
558
                        if ( oldSbx < 0 )
559
                                oldSbx = 0;
560
                        else if ( oldSbx > maxx )
561
                                oldSbx = maxx;
562
                        horizontalScrollBar()->setValue(oldSbx);
563
 
564
                        int maxy = verticalScrollBar()->maxValue();
565
                        if ( oldSby < 0 )
566
                                oldSby = 0;
567
                        else if ( oldSby > maxy )
568
                                oldSby = maxy;
569
                        verticalScrollBar()->setValue(oldSby);
292 Franz 570
                }
68 Franz 571
                disconnect(LE, SIGNAL(valueChanged(int)), this, SLOT(Zval()));
146 Franz 572
                LE->setValue(Doc->Scale/Prefs->DisScale*100);
68 Franz 573
                connect(LE, SIGNAL(valueChanged(int)), this, SLOT(Zval()));
3 paul 574
                setRulerPos(contentsX(), contentsY());
575
                if (Doc->ActPage->SelItem.count() != 0)
292 Franz 576
                {
3 paul 577
                        PageItem *b = Doc->ActPage->SelItem.at(0);
578
                        SetCCPo(static_cast<int>(b->Xpos + b->Width/2), static_cast<int>(b->Ypos + b->Height/2));
579
                }
292 Franz 580
                //              else
581
                //                      SetCPo(0, 0);
582
        }
3 paul 583
}
584
 
585
void ScribusView::SetCCPo(int x, int y)
586
{
181 Franz 587
        if (ScApp->ScriptRunning)
588
                return;
3 paul 589
        center(static_cast<int>(childX(Doc->ActPage->parentWidget())+x*Doc->Scale), static_cast<int>(childY(Doc->ActPage->parentWidget())+y*Doc->Scale));
80 Franz 590
        setRulerPos(contentsX(), contentsY());
3 paul 591
}
592
 
593
void ScribusView::SetCPo(int x, int y)
594
{
181 Franz 595
        if (ScApp->ScriptRunning)
596
                return;
3 paul 597
        setContentsPos(static_cast<int>(childX(Doc->ActPage->parentWidget())+x*Doc->Scale), static_cast<int>(childY(Doc->ActPage->parentWidget())+y*Doc->Scale));
80 Franz 598
        setRulerPos(contentsX(), contentsY());
3 paul 599
}
600
 
601
void ScribusView::LaMenu()
602
{
603
        uint a;
604
        Laymen->clear();
605
        if (Doc->Layers.count() != 0)
292 Franz 606
        {
607
                for (a=0; a < Doc->Layers.count(); a++)
3 paul 608
                {
609
                        Laymen->insertItem(Doc->Layers[a].Name);
610
                }
292 Franz 611
        }
3 paul 612
}
613
 
614
void ScribusView::GotoLa(int l)
615
{
616
        int d = Laymen->indexOf(l);
617
        Doc->ActiveLayer = d;
618
        LY->setText(Doc->Layers[d].Name);
619
        emit changeLA(d);
620
}
621
 
622
void ScribusView::GotoPa(int Seite)
623
{
240 Franz 624
        GotoPage(Seite-1);
250 Franz 625
        ScApp->setFocus();
3 paul 626
}
627
 
628
void ScribusView::ChgUnit(int art)
629
{
630
        int d = Unitmen->indexOf(art);
631
        emit changeUN(d);
632
}
633
 
634
void ScribusView::GotoPage(int Seite)
635
{
636
        Doc->ActPage = Pages.at(Seite);
181 Franz 637
        if (ScApp->ScriptRunning)
638
                return;
3 paul 639
        setContentsPos(static_cast<int>(childX(Doc->ActPage->parentWidget())-10*Doc->Scale), static_cast<int>(childY(Doc->ActPage->parentWidget())-10*Doc->Scale));
160 Franz 640
        PGS->setMaxValue(Doc->PageC);
211 Franz 641
        if ((!Doc->loading) && (!Doc->MasterP))
199 Franz 642
                PGS->GotoPg(Seite);
3 paul 643
}
644
 
238 Franz 645
void ScribusView::slotZoomIn(int mx,int my)
3 paul 646
{
292 Franz 647
        rememberPreviousSettings(mx,my);
648
        Doc->Scale *= 2;
649
        if (Doc->Scale > 32)
650
                Doc->Scale = 32*Prefs->DisScale;
651
        slotDoZoom();
3 paul 652
}
653
 
654
/** Verkleinert die Ansicht */
238 Franz 655
void ScribusView::slotZoomOut(int mx,int my)
3 paul 656
{
292 Franz 657
        rememberPreviousSettings(mx,my);
658
        Doc->Scale /= 2;
659
        slotDoZoom();
660
}
3 paul 661
 
292 Franz 662
/** Vergr
663
rt die Ansicht */
238 Franz 664
void ScribusView::slotZoomIn2(int mx,int my)
3 paul 665
{
238 Franz 666
        if (doZooming)
667
                return;
668
        doZooming = true;
669
        rememberPreviousSettings(mx,my);
670
        Doc->Scale += static_cast<double>(Doc->MagStep*Prefs->DisScale)/100.0;
671
        if (Doc->Scale > static_cast<double>(Doc->MagMax*Prefs->DisScale)/100.0)
672
                Doc->Scale = static_cast<double>(Doc->MagMax*Prefs->DisScale)/100.0;
3 paul 673
        slotDoZoom();
238 Franz 674
        doZooming = false;
3 paul 675
}
676
 
677
/** Verkleinert die Ansicht */
238 Franz 678
void ScribusView::slotZoomOut2(int mx,int my)
3 paul 679
{
238 Franz 680
        rememberPreviousSettings(mx,my);
681
        Doc->Scale -= static_cast<double>(Doc->MagStep*Prefs->DisScale)/100.0;
682
        if (Doc->Scale < static_cast<double>(Doc->MagMin*Prefs->DisScale)/100.0)
683
                Doc->Scale = static_cast<double>(Doc->MagMin*Prefs->DisScale)/100.0;
3 paul 684
        slotDoZoom();
685
}
686
 
687
void ScribusView::DrawNew()
80 Franz 688
{
181 Franz 689
        if (ScApp->ScriptRunning)
690
                return;
3 paul 691
        uint a;
692
        Page *b = Doc->ActPage;
693
        if (Pages.count() != 0)
292 Franz 694
        {
695
                for (a=0; a < Pages.count(); a++)
3 paul 696
                {
697
                        Doc->ActPage = Pages.at(a);
698
                        Pages.at(a)->setEraseColor(Doc->papColor);
699
                        Pages.at(a)->update();
700
                }
292 Franz 701
        }
3 paul 702
        HR->repX = false;
703
        HR->repaint();
704
        VR->repaint();
705
        Doc->ActPage = b;
181 Franz 706
        setMenTxt(Doc->ActPage->PageNr);
68 Franz 707
        disconnect(LE, SIGNAL(valueChanged(int)), this, SLOT(Zval()));
146 Franz 708
        LE->setValue(Doc->Scale/Prefs->DisScale*100);
68 Franz 709
        connect(LE, SIGNAL(valueChanged(int)), this, SLOT(Zval()));
3 paul 710
}
711
 
712
int ScribusView::CountElements()
713
{
714
        int cc = 0;
715
        for (uint a=0; a < Pages.count(); a++)
716
                cc += Pages.at(a)->Items.count();
717
        return cc;
718
}
719
 
720
void ScribusView::RecalcPictures(ProfilesL *Pr, QProgressBar *dia)
80 Franz 721
{
3 paul 722
        uint a, i;
723
        Page *b = Doc->ActPage;
724
        PageItem* it;
725
        int counter;
726
        if (dia != NULL)
727
                counter = dia->progress();
728
        else
729
                counter = 0;
730
        if (Pages.count() != 0)
292 Franz 731
        {
732
                for (a=0; a < Pages.count(); a++)
3 paul 733
                {
734
                        Doc->ActPage = Pages.at(a);
735
                        for (i=0; i < Pages.at(a)->Items.count(); i++)
292 Franz 736
                        {
3 paul 737
                                it = Pages.at(a)->Items.at(i);
738
                                if ((it->PType == 2) && (it->PicAvail))
292 Franz 739
                                {
3 paul 740
                                        if (Pr->contains(it->IProfile))
741
                                                Pages.at(a)->LoadPict(it->Pfile, i);
742
                                        else
292 Franz 743
                                        {
3 paul 744
                                                it->IProfile = Doc->CMSSettings.DefaultInputProfile;
745
                                                Pages.at(a)->LoadPict(it->Pfile, i);
292 Franz 746
                                        }
3 paul 747
                                        it->Sizing = true;
748
                                        Pages.at(a)->AdjustPreview(it);
749
                                        it->Sizing = false;
292 Franz 750
                                }
3 paul 751
                                counter++;
752
                                if (dia != NULL)
753
                                        dia->setProgress(counter);
754
                        }
755
                }
292 Franz 756
        }
3 paul 757
        Doc->ActPage = b;
758
}
759
 
760
void ScribusView::ShowTemplate(int nr)
761
{
238 Franz 762
        // jjsa 27-03-2004
763
        rememberPreviousSettings();
3 paul 764
        for (uint a=0; a<Pages.count(); a++)
292 Franz 765
        {
3 paul 766
                Pages.at(a)->parentWidget()->hide();
292 Franz 767
        }
3 paul 768
        if (!Doc->MasterP)
292 Franz 769
        {
3 paul 770
                DocPages = Pages;
771
                Pages = MasterPages;
292 Franz 772
        }
3 paul 773
        Doc->PageC = 1;
774
        Doc->MasterP = true;
775
        Doc->ActPage = Pages.at(nr);
776
        Pages.at(nr)->parentWidget()->show();
160 Franz 777
        PGS->setEnabled(false);
3 paul 778
        reformPages();
779
        slotDoZoom();
780
}
781
 
782
void ScribusView::HideTemplate()
783
{
238 Franz 784
        // jjsa 27-03-2004
785
        rememberPreviousSettings();
3 paul 786
        for (uint a=0; a<Pages.count(); a++)
292 Franz 787
        {
3 paul 788
                Pages.at(a)->Deselect(true);
789
                Pages.at(a)->parentWidget()->hide();
292 Franz 790
        }
3 paul 791
        MasterPages = Pages;
792
        Doc->PageC = DocPages.count();
793
        Pages = DocPages;
794
        Doc->MasterP = false;
795
        Doc->ActPage = Pages.at(0);
796
        for (uint a=0; a<Pages.count(); a++)
292 Franz 797
        {
3 paul 798
                Pages.at(a)->parentWidget()->show();
292 Franz 799
        }
160 Franz 800
        PGS->setEnabled(true);
3 paul 801
        reformPages();
802
        GotoPage(0);
803
        slotDoZoom();
804
}
805
 
806
QPixmap ScribusView::MPageToPixmap(QString name, int maxGr)
807
{
808
        QPixmap pm = QPixmap(static_cast<int>(Doc->PageB), static_cast<int>(Doc->PageH));
68 Franz 809
        ScPainter *painter = new ScPainter(&pm, pm.width(), pm.height());
80 Franz 810
        double sca = Doc->Scale;
243 Franz 811
        bool frs = Prefs->FramesShown;
3 paul 812
        int Lnr;
813
        struct Layer ll;
814
        ll.Drucken = false;
815
        ll.LNr = 0;
243 Franz 816
        Prefs->FramesShown = false;
3 paul 817
        Doc->Scale = 1;
818
        PageItem *b;
819
        Lnr = 0;
820
        Page* Mp = MasterPages.at(MasterNames[name]);
821
        QWidget* Opa;
822
        Page* Opa2;
823
        if (Mp->Items.count() != 0)
292 Franz 824
        {
3 paul 825
                Lnr = 0;
826
                for (uint la = 0; la < Doc->Layers.count(); la++)
292 Franz 827
                {
3 paul 828
                        Level2Layer(Doc, &ll, Lnr);
829
                        if (ll.Drucken)
292 Franz 830
                        {
831
                                for (uint a = 0; a < Mp->Items.count(); a++)
3 paul 832
                                {
833
                                        b = Mp->Items.at(a);
834
                                        if (b->LayerNr != ll.LNr)
835
                                                continue;
836
                                        Opa = b->Parent;
837
                                        Opa2 = b->OwnPage;
838
                                        b->Parent = Mp;
839
                                        b->OwnPage = Mp;
68 Franz 840
                                        b->DrawObj(painter, QRect(0, 0, static_cast<int>(Doc->PageB), static_cast<int>(Doc->PageH)));
3 paul 841
                                        b->Parent = Opa;
842
                                        b->OwnPage = Opa2;
843
                                }
292 Franz 844
                        }
3 paul 845
                        Lnr++;
846
                }
292 Franz 847
        }
68 Franz 848
        painter->end();
243 Franz 849
        Prefs->FramesShown = frs;
3 paul 850
        Doc->Scale = sca;
851
        QImage im2;
852
        QImage im = pm.convertToImage();
80 Franz 853
        double sx = im.width() / static_cast<double>(maxGr);
854
        double sy = im.height() / static_cast<double>(maxGr);
3 paul 855
        if (sy < sx)
856
                im2 = im.smoothScale(static_cast<int>(im.width() / sx), static_cast<int>(im.height() / sx));
857
        else
858
                im2 = im.smoothScale(static_cast<int>(im.width() / sy), static_cast<int>(im.height() / sy));
859
        pm.convertFromImage(im2);
860
        QPainter p;
861
        p.begin(&pm);
862
        p.setBrush(NoBrush);
863
        p.setPen(black);
864
        p.drawRect(0, 0, pm.width(), pm.height());
865
        p.end();
866
        im2.detach();
68 Franz 867
        delete painter;
3 paul 868
        return pm;
869
}
870
 
871
QPixmap ScribusView::PageToPixmap(int Nr, int maxGr)
872
{
873
        QPixmap pm = QPixmap(static_cast<int>(Doc->PageB), static_cast<int>(Doc->PageH));
68 Franz 874
        ScPainter *painter = new ScPainter(&pm, pm.width(), pm.height());
80 Franz 875
        double sca = Doc->Scale;
243 Franz 876
        bool frs = Prefs->FramesShown;
3 paul 877
        int Lnr;
878
        struct Layer ll;
879
        ll.Drucken = false;
880
        ll.LNr = 0;
243 Franz 881
        Prefs->FramesShown = false;
3 paul 882
        Doc->Scale = 1;
883
        PageItem *b;
884
        Lnr = 0;
885
        if (Pages.at(Nr)->MPageNam != "")
292 Franz 886
        {
3 paul 887
                Page* Mp = MasterPages.at(MasterNames[Pages.at(Nr)->MPageNam]);
888
                QWidget* Opa;
889
                Page* Opa2;
890
                if (Mp->Items.count() != 0)
292 Franz 891
                {
3 paul 892
                        Lnr = 0;
893
                        for (uint la = 0; la < Doc->Layers.count(); la++)
292 Franz 894
                        {
3 paul 895
                                Level2Layer(Doc, &ll, Lnr);
896
                                if (ll.Drucken)
292 Franz 897
                                {
898
                                        for (uint a = 0; a < Mp->Items.count(); a++)
3 paul 899
                                        {
900
                                                b = Mp->Items.at(a);
901
                                                if (b->LayerNr != ll.LNr)
902
                                                        continue;
903
                                                Opa = b->Parent;
904
                                                Opa2 = b->OwnPage;
905
                                                b->Parent = Pages.at(Nr);
906
                                                b->OwnPage = Pages.at(Nr);
68 Franz 907
                                                b->DrawObj(painter, QRect(0, 0, static_cast<int>(Doc->PageB), static_cast<int>(Doc->PageH)));
3 paul 908
                                                b->Parent = Opa;
909
                                                b->OwnPage = Opa2;
910
                                        }
292 Franz 911
                                }
3 paul 912
                                Lnr++;
913
                        }
914
                }
292 Franz 915
        }
3 paul 916
        Lnr = 0;
917
        ll.Drucken = false;
918
        ll.LNr = 0;
919
        for (uint la2 = 0; la2 < Doc->Layers.count(); la2++)
292 Franz 920
        {
3 paul 921
                Level2Layer(Doc, &ll, Lnr);
922
                if (ll.Drucken)
292 Franz 923
                {
924
                        for (uint a = 0; a < Pages.at(Nr)->Items.count(); a++)
3 paul 925
                        {
926
                                b = Pages.at(Nr)->Items.at(a);
927
                                if (b->LayerNr != ll.LNr)
928
                                        continue;
929
                                if (b->isPrintable)
292 Franz 930
                                {
3 paul 931
                                        if ((b->isAnnotation) && (b->AnType != 11))
932
                                                continue;
68 Franz 933
                                        b->DrawObj(painter, QRect(0, 0, static_cast<int>(Doc->PageB), static_cast<int>(Doc->PageH)));
3 paul 934
                                }
935
                        }
292 Franz 936
                }
3 paul 937
                Lnr++;
292 Franz 938
        }
68 Franz 939
        painter->end();
243 Franz 940
        Prefs->FramesShown = frs;
3 paul 941
        Doc->Scale = sca;
942
        QImage im2;
943
        QImage im = pm.convertToImage();
80 Franz 944
        double sx = im.width() / static_cast<double>(maxGr);
945
        double sy = im.height() / static_cast<double>(maxGr);
3 paul 946
        if (sy < sx)
947
                im2 = im.smoothScale(static_cast<int>(im.width() / sx), static_cast<int>(im.height() / sx));
948
        else
949
                im2 = im.smoothScale(static_cast<int>(im.width() / sy), static_cast<int>(im.height() / sy));
950
        pm.convertFromImage(im2);
951
        QPainter p;
952
        p.begin(&pm);
953
        p.setBrush(NoBrush);
954
        p.setPen(black);
955
        p.drawRect(0, 0, pm.width(), pm.height());
956
        p.end();
957
        im2.detach();
68 Franz 958
        delete painter;
3 paul 959
        return pm;
960
}
961
 
328 Franz 962
void ScribusView::CreatePS(PSLib *p, std::vector<int> &pageNs, bool sep, QString SepNam, bool farb, bool Hm, bool Vm, bool Ic)
3 paul 963
{
964
        uint a;
965
        int sepac;
80 Franz 966
        double wideR;
292 Franz 967
        QValueList<double> dum;
331 Franz 968
        double gx, gy, gw, gh;
292 Franz 969
        dum.clear();
213 Franz 970
        ReOrderText(Doc, this);
3 paul 971
        p->PS_set_Info("Author", Doc->DocAutor);
972
        p->PS_set_Info("Title", Doc->DocTitel);
973
        if (!farb)
974
                p->PS_setGray();
331 Franz 975
        if ((!p->Art) && (Doc->ActPage->SelItem.count() != 0))
976
        {
977
                Doc->ActPage->setGroupRect();
978
                Doc->ActPage->getGroupRect(&gx, &gy, &gw, &gh);
979
                p->PS_begin_doc(Doc->PageOri, gx, Doc->PageH - (gy+gh), gx + gw, Doc->PageH - gy, pageNs.size());
980
        }
981
        else
982
                p->PS_begin_doc(Doc->PageOri, 0.0, 0.0, Doc->PageB, Doc->PageH, pageNs.size());
3 paul 983
        for (uint ap = 0; ap < MasterPages.count(); ++ap)
292 Franz 984
        {
985
                if (MasterPages.at(ap)->Items.count() != 0)
3 paul 986
                {
292 Franz 987
                        if ((!sep) && (farb))
3 paul 988
                        {
292 Franz 989
                                for (uint api = 0; api < MasterPages.at(ap)->Items.count(); ++api)
3 paul 990
                                {
991
                                        PageItem *it = MasterPages.at(ap)->Items.at(api);
992
                                        if ((it->PType == 2) && (it->PicAvail) && (it->Pfile != "") && (it->isPrintable))
20 Franz 993
                                                p->PS_ImageData(it->InvPict, it->Pfile, it->AnName, it->IProfile, it->UseEmbedded, Ic);
80 Franz 994
                                }
292 Franz 995
                        }
3 paul 996
                        p->PS_TemplateStart(MasterPages.at(ap)->PageNam, Doc->PageB, Doc->PageH);
997
                        ProcessPage(p, MasterPages.at(ap), ap+1, sep, farb, Ic);
998
                        p->PS_TemplateEnd();
999
                }
292 Franz 1000
        }
328 Franz 1001
        sepac = 0;
1002
        uint aa = 0;
1003
        while (aa < pageNs.size())
292 Franz 1004
        {
328 Franz 1005
                a = pageNs[aa]-1;
331 Franz 1006
                if ((!p->Art) && (Doc->ActPage->SelItem.count() != 0))
1007
                {
1008
                        struct Margs Ma;
1009
                        Ma.Left = gx;
1010
                        Ma.Top = gy;
1011
                        Ma.Bottom = Doc->PageH - (gy + gh);
1012
                        Ma.Right = Doc->PageB - (gx + gw);
1013
                        p->PS_begin_page(Doc->PageB, Doc->PageH, &Ma, true);
1014
                }
1015
                else
1016
                        p->PS_begin_page(Doc->PageB, Doc->PageH, &Pages.at(a)->Margins, Prefs->ClipMargin);
3 paul 1017
                if (Hm)
292 Franz 1018
                {
3 paul 1019
                        p->PS_translate(Doc->PageB, 0);
1020
                        p->PS_scale(-1, 1);
292 Franz 1021
                }
3 paul 1022
                if (Vm)
292 Franz 1023
                {
3 paul 1024
                        p->PS_translate(0, Doc->PageH);
1025
                        p->PS_scale(1, -1);
292 Franz 1026
                }
3 paul 1027
                if (sep)
292 Franz 1028
                {
3 paul 1029
                        if (SepNam == "Black")
1030
                                p->PS_plate(0);
1031
                        if (SepNam == "Cyan")
1032
                                p->PS_plate(1);
1033
                        if (SepNam == "Magenta")
1034
                                p->PS_plate(2);
1035
                        if (SepNam == "Yellow")
1036
                                p->PS_plate(3);
1037
                        if (SepNam == tr("All"))
1038
                                p->PS_plate(sepac);
292 Franz 1039
                }
3 paul 1040
                if (Pages.at(a)->MPageNam != "")
292 Franz 1041
                {
3 paul 1042
                        int h, s, v, k, tsz;
1043
                        QCString chxc;
1044
                        QString chx;
1045
                        struct Pti *hl;
1046
                        int Lnr = 0;
1047
                        struct Layer ll;
1048
                        ll.Drucken = false;
1049
                        ll.LNr = 0;
1050
                        Page* mPage = MasterPages.at(MasterNames[Pages.at(a)->MPageNam]);
1051
                        if (mPage->Items.count() != 0)
292 Franz 1052
                        {
3 paul 1053
                                p->PS_UseTemplate(Pages.at(a)->MPageNam);
1054
                                for (uint lam = 0; lam < Doc->Layers.count(); ++lam)
292 Franz 1055
                                {
3 paul 1056
                                        Level2Layer(Doc, &ll, Lnr);
1057
                                        if (ll.Drucken)
292 Franz 1058
                                        {
1059
                                                for (uint am = 0; am < mPage->Items.count(); ++am)
3 paul 1060
                                                {
1061
                                                        PageItem *ite = mPage->Items.at(am);
1062
                                                        if ((ite->LayerNr != ll.LNr) || (!ite->isPrintable))
1063
                                                                continue;
1064
                                                        if ((ite->PType == 2) && ((sep) || (!farb)))
292 Franz 1065
                                                        {
3 paul 1066
                                                                p->PS_save();
1067
                                                                p->PS_translate(ite->Xpos, Doc->PageH - ite->Ypos);
1068
                                                                if (ite->Rot != 0)
1069
                                                                        p->PS_rotate(-ite->Rot);
1070
                                                                if (ite->Pcolor != "None")
292 Franz 1071
                                                                {
3 paul 1072
                                                                        SetFarbe(ite->Pcolor, ite->Shade, &h, &s, &v, &k);
1073
                                                                        p->PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
68 Franz 1074
                                                                        SetClipPath(p, &ite->PoLine);
3 paul 1075
                                                                        p->PS_closepath();
271 Franz 1076
                                                                        p->PS_fill();
292 Franz 1077
                                                                }
3 paul 1078
                                                                else
1079
                                                                        p->PS_setcmykcolor_dummy();
68 Franz 1080
                                                                SetClipPath(p, &ite->PoLine);
3 paul 1081
                                                                p->PS_closepath();
271 Franz 1082
                                                                p->PS_clip(false);
9 Franz 1083
                                                                p->PS_save();
3 paul 1084
                                                                if ((ite->flippedH % 2) != 0)
292 Franz 1085
                                                                {
3 paul 1086
                                                                        p->PS_translate(ite->Width, 0);
1087
                                                                        p->PS_scale(-1, 1);
292 Franz 1088
                                                                }
3 paul 1089
                                                                if ((ite->flippedV % 2) != 0)
292 Franz 1090
                                                                {
3 paul 1091
                                                                        p->PS_translate(0, -ite->Height);
1092
                                                                        p->PS_scale(1, -1);
292 Franz 1093
                                                                }
3 paul 1094
                                                                if ((ite->PicAvail) && (ite->Pfile != ""))
292 Franz 1095
                                                                {
3 paul 1096
                                                                        p->PS_translate(0, -ite->BBoxH*ite->LocalScY);
234 Franz 1097
                                                                        p->PS_image(ite->InvPict, -ite->BBoxX+ite->LocalX, -ite->LocalY, ite->Pfile, ite->LocalScX, ite->LocalScY, ite->IProfile, ite->UseEmbedded, Ic, ite->AnName);
292 Franz 1098
                                                                }
3 paul 1099
                                                                p->PS_restore();
234 Franz 1100
                                                                if (((ite->Pcolor2 != "None") || (ite->NamedLStyle != "")) && (!ite->isTableItem))
292 Franz 1101
                                                                {
1102
                                                                        if ((ite->NamedLStyle == "") && (ite->Pwidth != 0.0))
9 Franz 1103
                                                                        {
292 Franz 1104
                                                                                SetFarbe(ite->Pcolor2, ite->Shade2, &h, &s, &v, &k);
1105
                                                                                p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1106
                                                                                p->PS_setlinewidth(ite->Pwidth);
1107
                                                                                p->PS_setcapjoin(ite->PLineEnd, ite->PLineJoin);
1108
                                                                                p->PS_setdash(ite->PLineArt, ite->DashOffset, ite->DashValues);
68 Franz 1109
                                                                                SetClipPath(p, &ite->PoLine);
27 Franz 1110
                                                                                p->PS_closepath();
1111
                                                                                p->PS_stroke();
292 Franz 1112
                                                                        }
27 Franz 1113
                                                                        else
292 Franz 1114
                                                                        {
27 Franz 1115
                                                                                multiLine ml = Doc->MLineStyles[ite->NamedLStyle];
34 Franz 1116
                                                                                for (int it = ml.size()-1; it > -1; it--)
292 Franz 1117
                                                                                {
27 Franz 1118
                                                                                        SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k);
1119
                                                                                        p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1120
                                                                                        p->PS_setlinewidth(ml[it].Width);
292 Franz 1121
                                                                                        p->PS_setcapjoin(static_cast<PenCapStyle>(ml[it].LineEnd), static_cast<PenJoinStyle>(ml[it].LineJoin));
1122
                                                                                        p->PS_setdash(static_cast<PenStyle>(ml[it].Dash), 0, dum);
68 Franz 1123
                                                                                        SetClipPath(p, &ite->PoLine);
27 Franz 1124
                                                                                        p->PS_closepath();
1125
                                                                                        p->PS_stroke();
1126
                                                                                }
9 Franz 1127
                                                                        }
292 Franz 1128
                                                                }
9 Franz 1129
                                                                p->PS_restore();
292 Franz 1130
                                                        }
3 paul 1131
                                                        if (ite->PType == 4)
292 Franz 1132
                                                        {
313 Franz 1133
                                                                QWidget* Opa;
1134
                                                                Page* Opa2;
1135
                                                                Opa = ite->Parent;
1136
                                                                Opa2 = ite->OwnPage;
1137
                                                                ite->Parent = Pages.at(a);
1138
                                                                ite->OwnPage = Pages.at(a);
1139
                                                                double savScale = Doc->Scale;
1140
                                                                Doc->Scale = 1.0;
1141
                                                                Doc->RePos = true;
1142
                                                                QPixmap pgPix(10, 10);
1143
                                                                QRect rd = QRect(0,0,9,9);
1144
                                                                ScPainter *painter = new ScPainter(&pgPix, pgPix.width(), pgPix.height());
1145
                                                                ite->DrawObj(painter, rd);
1146
                                                                Doc->RePos = false;
1147
                                                                Doc->Scale = savScale;
1148
                                                                delete painter;
1149
                                                                ite->Parent = Opa;
1150
                                                                ite->OwnPage = Opa2;
3 paul 1151
                                                                p->PS_save();
1152
                                                                if (ite->Pcolor != "None")
292 Franz 1153
                                                                {
3 paul 1154
                                                                        SetFarbe(ite->Pcolor, ite->Shade, &h, &s, &v, &k);
1155
                                                                        p->PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
292 Franz 1156
                                                                }
3 paul 1157
                                                                p->PS_translate(ite->Xpos, Doc->PageH - ite->Ypos);
80 Franz 1158
                                                                if (ite->Rot != 0)
3 paul 1159
                                                                        p->PS_rotate(-ite->Rot);
1160
                                                                if ((ite->Pcolor != "None") || (ite->GrType != 0))
292 Franz 1161
                                                                {
68 Franz 1162
                                                                        SetClipPath(p, &ite->PoLine);
3 paul 1163
                                                                        p->PS_closepath();
271 Franz 1164
                                                                        p->PS_fill();
292 Franz 1165
                                                                }
3 paul 1166
                                                                if ((ite->flippedH % 2) != 0)
292 Franz 1167
                                                                {
3 paul 1168
                                                                        p->PS_translate(ite->Width, 0);
1169
                                                                        p->PS_scale(-1, 1);
292 Franz 1170
                                                                }
3 paul 1171
                                                                if ((ite->flippedV % 2) != 0)
292 Franz 1172
                                                                {
3 paul 1173
                                                                        p->PS_translate(0, -ite->Height);
1174
                                                                        p->PS_scale(1, -1);
292 Franz 1175
                                                                }
3 paul 1176
                                                                for (uint d = 0; d < ite->MaxChars; ++d)
292 Franz 1177
                                                                {
3 paul 1178
                                                                        hl = ite->Ptext.at(d);
249 Franz 1179
                                                                        if ((hl->ch == QChar(13)) || (hl->ch == QChar(10)) || (hl->ch == QChar(9)) || (hl->ch == QChar(28)))
3 paul 1180
                                                                                continue;
316 Franz 1181
                                                                        if (hl->cstyle & 256)
1182
                                                                                continue;
3 paul 1183
                                                                        if (hl->yp == 0)
316 Franz 1184
                                                                                continue;
3 paul 1185
                                                                        tsz = hl->csize;
1186
                                                                        chx = hl->ch;
55 Franz 1187
                                                                        if (hl->ch == QChar(29))
1188
                                                                                chx = " ";
3 paul 1189
                                                                        if (hl->ch == QChar(30))
292 Franz 1190
                                                                        {
3 paul 1191
                                                                                if (Doc->MasterP)
1192
                                                                                        chx = "#";
1193
                                                                                else
292 Franz 1194
                                                                                {
3 paul 1195
                                                                                        uint zae = 0;
1196
                                                                                        while (ite->Ptext.at(d+zae)->ch == QChar(30))
292 Franz 1197
                                                                                        {
3 paul 1198
                                                                                                zae++;
1199
                                                                                                if (d+zae == ite->MaxChars)
1200
                                                                                                        break;
292 Franz 1201
                                                                                        }
3 paul 1202
                                                                                        QString out="%1";
1203
                                                                                        chx = out.arg(a+Doc->FirstPnum, zae).right(zae).left(1);
1204
                                                                                }
292 Franz 1205
                                                                        }
3 paul 1206
                                                                        if (hl->cstyle & 64)
292 Franz 1207
                                                                        {
1208
                                                                                if (chx.upper() != chx)
3 paul 1209
                                                                                {
1210
                                                                                        tsz = hl->csize * Doc->VKapit / 100;
1211
                                                                                        chx = chx.upper();
1212
                                                                                }
292 Franz 1213
                                                                        }
3 paul 1214
                                                                        if (hl->cstyle & 1)
1215
                                                                                tsz = hl->csize * Doc->VHochSc / 100;
1216
                                                                        if (hl->cstyle & 2)
1217
                                                                                tsz = hl->csize * Doc->VHochSc / 100;
292 Franz 1218
                                                                        /* Subset all TTF Fonts until the bug in the TTF-Embedding Code is fixed */
173 Franz 1219
                                                                        QFileInfo fd = QFileInfo((*Doc->AllFonts)[hl->cfont]->Datei);
1220
                                                                        QString fext = fd.extension(false).lower();
1221
                                                                        if ((fext == "ttf") || ((*Doc->AllFonts)[hl->cfont]->isOTF) || ((*Doc->AllFonts)[hl->cfont]->Subset))
292 Franz 1222
                                                                        {
68 Franz 1223
                                                                                uint chr = chx[0].unicode();
1224
                                                                                if (((*Doc->AllFonts)[hl->cfont]->CharWidth.contains(chr)) && (chr != 32))
292 Franz 1225
                                                                                {
68 Franz 1226
                                                                                        p->PS_save();
1227
                                                                                        if (ite->Reverse)
292 Franz 1228
                                                                                        {
111 Franz 1229
                                                                                                p->PS_translate(hl->xp, (hl->yp - (tsz / 10.0)) * -1);
68 Franz 1230
                                                                                                p->PS_scale(-1, 1);
1231
                                                                                                if (d < ite->MaxChars-1)
292 Franz 1232
                                                                                                {
68 Franz 1233
                                                                                                        QString ctx = ite->Ptext.at(d+1)->ch;
1234
                                                                                                        if (ctx == QChar(29))
1235
                                                                                                                ctx = " ";
1236
                                                                                                        wideR = -Cwidth(Doc, hl->cfont, chx, tsz, ctx) * (hl->cscale / 100.0);
292 Franz 1237
                                                                                                }
68 Franz 1238
                                                                                                else
1239
                                                                                                        wideR = -Cwidth(Doc, hl->cfont, chx, tsz) * (hl->cscale / 100.0);
1240
                                                                                                p->PS_translate(wideR, 0);
292 Franz 1241
                                                                                        }
68 Franz 1242
                                                                                        else
111 Franz 1243
                                                                                                p->PS_translate(hl->xp, (hl->yp - (tsz / 10.0)) * -1);
68 Franz 1244
                                                                                        if (hl->cscale != 100)
1245
                                                                                                p->PS_scale(hl->cscale / 100.0, 1);
1246
                                                                                        if (hl->ccolor != "None")
292 Franz 1247
                                                                                        {
68 Franz 1248
                                                                                                SetFarbe(hl->ccolor, hl->cshade, &h, &s, &v, &k);
1249
                                                                                                p->PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
111 Franz 1250
                                                                                                p->PS_showSub(chr, (*Doc->AllFonts)[hl->cfont]->RealName(), tsz / 10.0, false);
292 Franz 1251
                                                                                        }
68 Franz 1252
                                                                                        p->PS_restore();
3 paul 1253
                                                                                }
292 Franz 1254
                                                                        }
68 Franz 1255
                                                                        else
292 Franz 1256
                                                                        {
111 Franz 1257
                                                                                p->PS_selectfont(hl->cfont, tsz / 10.0);
68 Franz 1258
                                                                                if (hl->ccolor != "None")
292 Franz 1259
                                                                                {
68 Franz 1260
                                                                                        SetFarbe(hl->ccolor, hl->cshade, &h, &s, &v, &k);
1261
                                                                                        p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
292 Franz 1262
                                                                                }
68 Franz 1263
                                                                                p->PS_save();
3 paul 1264
                                                                                if (ite->Reverse)
292 Franz 1265
                                                                                {
3 paul 1266
                                                                                        int chs = hl->csize;
68 Franz 1267
                                                                                        ite->SetZeichAttr(hl, &chs, &chx);
3 paul 1268
                                                                                        p->PS_translate(hl->xp, -hl->yp);
1269
                                                                                        p->PS_scale(-1, 1);
1270
                                                                                        if (d < ite->MaxChars-1)
292 Franz 1271
                                                                                        {
55 Franz 1272
                                                                                                QString ctx = ite->Ptext.at(d+1)->ch;
1273
                                                                                                if (ctx == QChar(29))
1274
                                                                                                        ctx = " ";
68 Franz 1275
                                                                                                wideR = -Cwidth(Doc, hl->cfont, chx, chs, ctx) * (hl->cscale / 100.0);
1276
                                                                                                p->PS_translate(wideR, 0);
292 Franz 1277
                                                                                        }
3 paul 1278
                                                                                        else
292 Franz 1279
                                                                                        {
68 Franz 1280
                                                                                                wideR = -Cwidth(Doc, hl->cfont, chx, chs) * (hl->cscale / 100.0);
1281
                                                                                                p->PS_translate(wideR, 0);
292 Franz 1282
                                                                                        }
68 Franz 1283
                                                                                        if (hl->cscale != 100)
1284
                                                                                                p->PS_scale(hl->cscale / 100.0, 1);
3 paul 1285
                                                                                        p->PS_show_xyG(hl->cfont, chx, 0, 0);
292 Franz 1286
                                                                                }
3 paul 1287
                                                                                else
292 Franz 1288
                                                                                {
68 Franz 1289
                                                                                        p->PS_translate(hl->xp, -hl->yp);
1290
                                                                                        if (hl->cscale != 100)
1291
                                                                                                p->PS_scale(hl->cscale / 100.0, 1);
1292
                                                                                        p->PS_show_xyG(hl->cfont, chx, 0, 0);
292 Franz 1293
                                                                                }
68 Franz 1294
                                                                                p->PS_restore();
292 Franz 1295
                                                                        }
68 Franz 1296
                                                                        if ((hl->cstyle & 4) && (chx != QChar(13)))
292 Franz 1297
                                                                        {
68 Franz 1298
                                                                                uint chr = chx[0].unicode();
1299
                                                                                if ((*Doc->AllFonts)[hl->cfont]->CharWidth.contains(chr))
292 Franz 1300
                                                                                {
68 Franz 1301
                                                                                        FPointArray gly = (*Doc->AllFonts)[hl->cfont]->GlyphArray[chr].Outlines.copy();
1302
                                                                                        QWMatrix chma;
111 Franz 1303
                                                                                        chma.scale(tsz / 100.0, tsz / 100.0);
68 Franz 1304
                                                                                        gly.map(chma);
1305
                                                                                        chma = QWMatrix();
1306
                                                                                        chma.scale(hl->cscale / 100.0, 1);
1307
                                                                                        gly.map(chma);
3 paul 1308
                                                                                        if (ite->Reverse)
292 Franz 1309
                                                                                        {
68 Franz 1310
                                                                                                chma = QWMatrix();
1311
                                                                                                chma.scale(-1, 1);
1312
                                                                                                chma.translate(wideR, 0);
1313
                                                                                                gly.map(chma);
292 Franz 1314
                                                                                        }
68 Franz 1315
                                                                                        if (hl->cstroke != "None")
292 Franz 1316
                                                                                        {
3 paul 1317
                                                                                                p->PS_save();
111 Franz 1318
                                                                                                p->PS_setlinewidth(QMAX((*Doc->AllFonts)[hl->cfont]->strokeWidth / 2 * (tsz / 10.0), 1));
292 Franz 1319
                                                                                                p->PS_setcapjoin(FlatCap, MiterJoin);
1320
                                                                                                p->PS_setdash(SolidLine, 0, dum);
68 Franz 1321
                                                                                                p->PS_translate(hl->xp, (hl->yp - tsz) * -1);
1322
                                                                                                SetFarbe(hl->cstroke, hl->cshade2, &h, &s, &v, &k);
1323
                                                                                                p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1324
                                                                                                SetClipPath(p, &gly);
1325
                                                                                                p->PS_closepath();
1326
                                                                                                p->PS_stroke();
3 paul 1327
                                                                                                p->PS_restore();
1328
                                                                                        }
68 Franz 1329
                                                                                }
292 Franz 1330
                                                                        }
265 Franz 1331
                                                                        if ((hl->cstyle & 16) && (chx != QChar(13)))
292 Franz 1332
                                                                        {
80 Franz 1333
                                                                                double Ulen = Cwidth(Doc, hl->cfont, chx, hl->csize) * (hl->cscale / 100.0);
111 Franz 1334
                                                                                double Upos = (*Doc->AllFonts)[hl->cfont]->strikeout_pos * (tsz / 10.0);
68 Franz 1335
                                                                                if (hl->ccolor != "None")
292 Franz 1336
                                                                                {
1337
                                                                                        p->PS_setcapjoin(FlatCap, MiterJoin);
1338
                                                                                        p->PS_setdash(SolidLine, 0, dum);
68 Franz 1339
                                                                                        SetFarbe(hl->ccolor, hl->cshade, &h, &s, &v, &k);
1340
                                                                                        p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
292 Franz 1341
                                                                                }
111 Franz 1342
                                                                                p->PS_setlinewidth((*Doc->AllFonts)[hl->cfont]->strokeWidth * (tsz / 10.0));
68 Franz 1343
                                                                                p->PS_moveto(hl->xp, -hl->yp+Upos);
1344
                                                                                p->PS_lineto(hl->xp+Ulen, -hl->yp+Upos);
1345
                                                                                p->PS_stroke();
292 Franz 1346
                                                                        }
265 Franz 1347
                                                                        if ((hl->cstyle & 8) && (chx != QChar(13)))
292 Franz 1348
                                                                        {
265 Franz 1349
                                                                                double Ulen = Cwidth(Doc, hl->cfont, chx, hl->csize) * (hl->cscale / 100.0);
1350
                                                                                double Upos = (*Doc->AllFonts)[hl->cfont]->underline_pos * (tsz / 10.0);
1351
                                                                                if (hl->ccolor != "None")
292 Franz 1352
                                                                                {
1353
                                                                                        p->PS_setcapjoin(FlatCap, MiterJoin);
1354
                                                                                        p->PS_setdash(SolidLine, 0, dum);
265 Franz 1355
                                                                                        SetFarbe(hl->ccolor, hl->cshade, &h, &s, &v, &k);
1356
                                                                                        p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
292 Franz 1357
                                                                                }
265 Franz 1358
                                                                                p->PS_setlinewidth((*Doc->AllFonts)[hl->cfont]->strokeWidth * (tsz / 10.0));
1359
                                                                                p->PS_moveto(hl->xp, -hl->yp+Upos);
1360
                                                                                p->PS_lineto(hl->xp+Ulen, -hl->yp+Upos);
1361
                                                                                p->PS_stroke();
292 Franz 1362
                                                                        }
251 Franz 1363
                                                                        if (hl->cstyle & 512)
292 Franz 1364
                                                                        {
68 Franz 1365
                                                                                int chs = hl->csize;
1366
                                                                                ite->SetZeichAttr(hl, &chs, &chx);
80 Franz 1367
                                                                                double wide = Cwidth(Doc, hl->cfont, chx, chs);
75 Franz 1368
                                                                                chx = "-";
1369
                                                                                uint chr = chx[0].unicode();
1370
                                                                                if ((*Doc->AllFonts)[hl->cfont]->CharWidth.contains(chr))
292 Franz 1371
                                                                                {
75 Franz 1372
                                                                                        FPointArray gly = (*Doc->AllFonts)[hl->cfont]->GlyphArray[chr].Outlines.copy();
1373
                                                                                        QWMatrix chma;
111 Franz 1374
                                                                                        chma.scale(tsz / 100.0, tsz / 100.0);
75 Franz 1375
                                                                                        gly.map(chma);
1376
                                                                                        chma = QWMatrix();
1377
                                                                                        chma.scale(hl->cscale / 100.0, 1);
1378
                                                                                        gly.map(chma);
1379
                                                                                        if (hl->ccolor != "None")
292 Franz 1380
                                                                                        {
75 Franz 1381
                                                                                                p->PS_save();
265 Franz 1382
                                                                                                p->PS_newpath();
111 Franz 1383
                                                                                                p->PS_translate(hl->xp+wide, (hl->yp - (tsz / 10.0)) * -1);
75 Franz 1384
                                                                                                SetFarbe(hl->ccolor, hl->cshade, &h, &s, &v, &k);
1385
                                                                                                p->PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1386
                                                                                                SetClipPath(p, &gly);
1387
                                                                                                p->PS_closepath();
271 Franz 1388
                                                                                                p->PS_fill();
75 Franz 1389
                                                                                                p->PS_restore();
1390
                                                                                        }
68 Franz 1391
                                                                                }
1392
                                                                        }
292 Franz 1393
                                                                }
234 Franz 1394
                                                                if (((ite->Pcolor2 != "None") || (ite->NamedLStyle != "")) && (!ite->isTableItem))
292 Franz 1395
                                                                {
1396
                                                                        if ((ite->NamedLStyle == "") && (ite->Pwidth != 0.0))
68 Franz 1397
                                                                        {
292 Franz 1398
                                                                                SetFarbe(ite->Pcolor2, ite->Shade2, &h, &s, &v, &k);
1399
                                                                                p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1400
                                                                                p->PS_setlinewidth(ite->Pwidth);
1401
                                                                                p->PS_setcapjoin(ite->PLineEnd, ite->PLineJoin);
1402
                                                                                p->PS_setdash(ite->PLineArt, ite->DashOffset, ite->DashValues);
68 Franz 1403
                                                                                SetClipPath(p, &ite->PoLine);
1404
                                                                                p->PS_closepath();
1405
                                                                                p->PS_stroke();
292 Franz 1406
                                                                        }
68 Franz 1407
                                                                        else
292 Franz 1408
                                                                        {
68 Franz 1409
                                                                                multiLine ml = Doc->MLineStyles[ite->NamedLStyle];
1410
                                                                                for (int it = ml.size()-1; it > -1; it--)
292 Franz 1411
                                                                                {
68 Franz 1412
                                                                                        SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k);
1413
                                                                                        p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1414
                                                                                        p->PS_setlinewidth(ml[it].Width);
292 Franz 1415
                                                                                        p->PS_setcapjoin(static_cast<PenCapStyle>(ml[it].LineEnd), static_cast<PenJoinStyle>(ml[it].LineJoin));
1416
                                                                                        p->PS_setdash(static_cast<PenStyle>(ml[it].Dash), 0, dum);
68 Franz 1417
                                                                                        SetClipPath(p, &ite->PoLine);
1418
                                                                                        p->PS_closepath();
1419
                                                                                        p->PS_stroke();
1420
                                                                                }
3 paul 1421
                                                                        }
292 Franz 1422
                                                                }
3 paul 1423
                                                                p->PS_restore();
1424
                                                        }
1425
                                                }
292 Franz 1426
                                        }
1427
                                        for (uint am = 0; am < mPage->Items.count(); ++am)
1428
                                        {
1429
                                                PageItem *ite = mPage->Items.at(am);
1430
                                                if ((ite->PType == 2) && ((sep) || (!farb)))
1431
                                                        continue;
1432
                                                if (ite->isPrintable)
1433
                                                {
1434
                                                        p->PS_save();
1435
                                                        if (ite->Pcolor2 != "None")
234 Franz 1436
                                                        {
292 Franz 1437
                                                                SetFarbe(ite->Pcolor2, ite->Shade2, &h, &s, &v, &k);
1438
                                                                p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1439
                                                        }
1440
                                                        p->PS_setlinewidth(ite->Pwidth);
1441
                                                        p->PS_setcapjoin(ite->PLineEnd, ite->PLineJoin);
1442
                                                        p->PS_setdash(ite->PLineArt, ite->DashOffset, ite->DashValues);
1443
                                                        p->PS_translate(ite->Xpos, Doc->PageH - ite->Ypos);
1444
                                                        if (ite->Rot != 0)
1445
                                                                p->PS_rotate(-ite->Rot);
1446
                                                        if (ite->isTableItem)
1447
                                                        {
1448
                                                                if ((ite->TopLine) || (ite->RightLine) || (ite->BottomLine) || (ite->LeftLine))
234 Franz 1449
                                                                {
292 Franz 1450
                                                                        if (ite->TopLine)
234 Franz 1451
                                                                        {
292 Franz 1452
                                                                                p->PS_moveto(0, 0);
1453
                                                                                p->PS_lineto(ite->Width, 0);
234 Franz 1454
                                                                        }
292 Franz 1455
                                                                        if (ite->RightLine)
234 Franz 1456
                                                                        {
292 Franz 1457
                                                                                p->PS_moveto(ite->Width, 0);
1458
                                                                                p->PS_lineto(ite->Width, -ite->Height);
234 Franz 1459
                                                                        }
292 Franz 1460
                                                                        if (ite->BottomLine)
1461
                                                                        {
1462
                                                                                p->PS_moveto(0, -ite->Height);
1463
                                                                                p->PS_lineto(ite->Width, -ite->Height);
1464
                                                                        }
1465
                                                                        if (ite->LeftLine)
1466
                                                                        {
1467
                                                                                p->PS_moveto(0, 0);
1468
                                                                                p->PS_lineto(0, -ite->Height);
1469
                                                                        }
1470
                                                                        p->PS_stroke();
234 Franz 1471
                                                                }
1472
                                                        }
292 Franz 1473
                                                        p->PS_restore();
234 Franz 1474
                                                }
292 Franz 1475
                                        }
3 paul 1476
                                        Lnr++;
1477
                                }
1478
                        }
292 Franz 1479
                }
3 paul 1480
                ProcessPage(p, Pages.at(a), a+1, sep, farb, Ic);
1481
                p->PS_end_page();
1482
                if (sep)
292 Franz 1483
                {
3 paul 1484
                        if (SepNam != tr("All"))
328 Franz 1485
                                aa++;
3 paul 1486
                        else
292 Franz 1487
                        {
1488
                                if (sepac == 3)
3 paul 1489
                                {
328 Franz 1490
                                        aa++;
3 paul 1491
                                        sepac = 0;
292 Franz 1492
                                }
3 paul 1493
                                else
1494
                                        sepac++;
1495
                        }
292 Franz 1496
                }
3 paul 1497
                else
328 Franz 1498
                        aa++;
292 Franz 1499
        }
3 paul 1500
        p->PS_close();
1501
}
1502
 
1503
void ScribusView::ProcessPage(PSLib *p, Page* a, uint PNr, bool sep, bool farb, bool ic)
1504
{
1505
        uint b, d;
1506
        int h, s, v, k, tsz;
80 Franz 1507
        double wideR;
292 Franz 1508
        QValueList<double> dum;
1509
        dum.clear();
3 paul 1510
        QCString chxc;
68 Franz 1511
        QString chx, chglyph, tmp;
3 paul 1512
        PageItem *c;
1513
        struct Pti *hl;
1514
        int Lnr = 0;
1515
        struct Layer ll;
1516
        ll.Drucken = false;
1517
        ll.LNr = 0;
1518
        for (uint la = 0; la < Doc->Layers.count(); ++la)
292 Franz 1519
        {
3 paul 1520
                Level2Layer(Doc, &ll, Lnr);
1521
                if (ll.Drucken)
292 Franz 1522
                {
1523
                        for (b = 0; b < a->Items.count(); ++b)
3 paul 1524
                        {
1525
                                c = a->Items.at(b);
1526
                                if (c->LayerNr != ll.LNr)
1527
                                        continue;
1528
                                if ((a->PageNam != "") && (c->PType == 4))
1529
                                        continue;
1530
                                if ((a->PageNam != "") && (c->PType == 2) && ((sep) || (!farb)))
1531
                                        continue;
331 Franz 1532
                                if ((!p->Art) && (Doc->ActPage->SelItem.count() != 0) && (!c->Select))
1533
                                        continue;
3 paul 1534
                                if (c->isPrintable)
292 Franz 1535
                                {
3 paul 1536
                                        p->PS_save();
1537
                                        if (c->Pcolor != "None")
292 Franz 1538
                                        {
3 paul 1539
                                                SetFarbe(c->Pcolor, c->Shade, &h, &s, &v, &k);
1540
                                                p->PS_setcmykcolor_fill(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
292 Franz 1541
                                        }
3 paul 1542
                                        if (c->Pcolor2 != "None")
292 Franz 1543
                                        {
3 paul 1544
                                                SetFarbe(c->Pcolor2, c->Shade2, &h, &s, &v, &k);
1545
                                                p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
292 Franz 1546
                                        }
3 paul 1547
                                        p->PS_setlinewidth(c->Pwidth);
292 Franz 1548
                                        p->PS_setcapjoin(c->PLineEnd, c->PLineJoin);
1549
                                        p->PS_setdash(c->PLineArt, c->DashOffset, c->DashValues);
3 paul 1550
                                        p->PS_translate(c->Xpos, Doc->PageH - c->Ypos);
1551
                                        if (c->Rot != 0)
1552
                                                p->PS_rotate(-c->Rot);
1553
                                        switch (c->PType)
292 Franz 1554
                                        {
1555
                                        case 2:
1556
                                                if ((c->Pcolor != "None") || (c->GrType != 0))
3 paul 1557
                                                {
68 Franz 1558
                                                        SetClipPath(p, &c->PoLine);
3 paul 1559
                                                        p->PS_closepath();
292 Franz 1560
                                                        if ((c->GrType != 0) && (a->PageNam == ""))
295 Franz 1561
                                                                HandleGradient(p, c, c->Width, c->Height);
292 Franz 1562
                                                        else
1563
                                                                p->PS_fill();
1564
                                                }
1565
                                                p->PS_save();
1566
                                                SetClipPath(p, &c->PoLine);
1567
                                                p->PS_closepath();
1568
                                                p->PS_clip(true);
1569
                                                if ((c->flippedH % 2) != 0)
1570
                                                {
1571
                                                        p->PS_translate(c->Width, 0);
1572
                                                        p->PS_scale(-1, 1);
1573
                                                }
1574
                                                if ((c->flippedV % 2) != 0)
1575
                                                {
1576
                                                        p->PS_translate(0, -c->Height);
1577
                                                        p->PS_scale(1, -1);
1578
                                                }
1579
                                                if ((c->PicAvail) && (c->Pfile != ""))
1580
                                                {
1581
                                                        p->PS_translate(0, -c->BBoxH*c->LocalScY);
1582
                                                        if (a->PageNam != "")
1583
                                                                p->PS_image(c->InvPict, -c->BBoxX+c->LocalX, -c->LocalY, c->Pfile, c->LocalScX, c->LocalScY, c->IProfile, c->UseEmbedded, ic, c->AnName);
1584
                                                        else
1585
                                                                p->PS_image(c->InvPict, -c->BBoxX+c->LocalX, -c->LocalY, c->Pfile, c->LocalScX, c->LocalScY, c->IProfile, c->UseEmbedded, ic);
1586
                                                }
1587
                                                p->PS_restore();
1588
                                                if (((c->Pcolor2 != "None") || (c->NamedLStyle != "")) && (!c->isTableItem))
1589
                                                {
1590
                                                        if ((c->NamedLStyle == "") && (c->Pwidth != 0.0))
1591
                                                        {
1592
                                                                SetFarbe(c->Pcolor2, c->Shade2, &h, &s, &v, &k);
1593
                                                                p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1594
                                                                p->PS_setlinewidth(c->Pwidth);
1595
                                                                p->PS_setcapjoin(c->PLineEnd, c->PLineJoin);
1596
                                                                p->PS_setdash(c->PLineArt, c->DashOffset, c->DashValues);
1597
                                                                SetClipPath(p, &c->PoLine);
1598
                                                                p->PS_closepath();
1599
                                                                p->PS_stroke();
1600
                                                        }
1601
                                                        else
1602
                                                        {
1603
                                                                multiLine ml = Doc->MLineStyles[c->NamedLStyle];
1604
                                                                for (int it = ml.size()-1; it > -1; it--)
3 paul 1605
                                                                {
292 Franz 1606
                                                                        SetFarbe(ml[it].Color, ml[it].Shade, &h, &s, &v, &k);
1607
                                                                        p->PS_setcmykcolor_stroke(h / 255.0, s / 255.0, v / 255.0, k / 255.0);
1608
                                                                        p->PS_setlinewidth(ml[it].Width);
1609
                                                                        p->PS_setcapjoin(static_cast<PenCapStyle>(ml[it].LineEnd), static_cast<PenJoinStyle>(ml[it].LineJoin));
1610
                                                                        p->PS_setdash(static_cast<PenStyle>(ml[it].Dash), 0, dum);
68 Franz 1611
                                                                        SetClipPath(p, &c->PoLine);
27 Franz 1612
                                                                        p->PS_closepath();
1613
                                                                        p->PS_stroke();
80 Franz 1614
                                                                }
292 Franz 1615
                                                        }
1616
                                                }
1617
                                                break;
1618
                                        case 4:
1619
                                                if (c->isBookmark)
1620
                                                {
1621
                                                        QString bm = "";
1622
                                                        QString cc;
1623
                                                        for (d = 0; d < c->Ptext.count(); ++d)
1624
                                                        {
1625
                                                                if ((c->Ptext.at(d)->ch == QChar(13)) || (c->Ptext.at(d)->ch == QChar(10)) || (c->Ptext.at(d)->ch == QChar(28)))
1626
                                                                        break;
1627
                                                                bm += "\\"+cc.setNum(QMAX(c->Ptext.at(d)->ch.at(0).unicode(), 32), 8);
1628
                                                        }
1629
                                                        p->PDF_Bookmark(bm, a->PageNr+1);
1630
                                                }
1631
                                                if (c->isAnnotation)
1632
                                                {
1633
                                                        QString bm = "";
1634
                                                        QString cc;
1635
                                                        for (d = 0; d < c->Ptext.count(); ++d)
1636
                                                        {
1637
                                                                bm += "\\"+cc.setNum(QMAX(c->Ptext.at(d)->ch.at(0).unicode(), 32), 8);
1638
                                                        }
1639
                                                        p->PDF_Annotation(bm, 0, 0, c->Width, -c->Height);
3 paul 1640
                                                        break;
292 Franz 1641
                                                }
1642
                                                if ((c->Pcolor != "None") || (c->GrType != 0))
1643
                                                {
1644
                                                        SetClipPath(p, &c->PoLine);
1645
                                                        p->PS_closepath();
1646
                                                        if ((c->GrType != 0