Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
4430 cbradney 1
/*
2
For general Scribus (>=1.3.2) copyright and licensing information please refer
3
to the COPYING file provided with the program. Following this notice may exist
4
a copyright and/or license notice that predates the release of Scribus 1.3.2
5
for which a new license (GPL+exception) is in place.
6
*/
10192 cbradney 7
 
10223 cbradney 8
 
12358 cbradney 9
#include <QApplication>
10223 cbradney 10
#include <QBitmap>
10192 cbradney 11
#include <QCursor>
12358 cbradney 12
#include <QDrag>
10859 cbradney 13
#include <QEvent>
12358 cbradney 14
#include <QHeaderView>
15
#include <QLabel>
9803 fschmid 16
#include <QList>
10012 cbradney 17
#include <QMenu>
10616 fschmid 18
#include <QMimeData>
12764 fschmid 19
#include <QMessageBox>
10192 cbradney 20
 
12358 cbradney 21
 
6715 cbradney 22
#include "commonstrings.h"
3670 cbradney 23
#include "page.h"
3560 fschmid 24
#include "pagelayout.h"
12358 cbradney 25
#include "pagepalette.h"
3560 fschmid 26
#include "sccombobox.h"
10223 cbradney 27
#include "scribus.h"
28
#include "scribusview.h"
10200 cbradney 29
#include "util_icon.h"
10192 cbradney 30
 
12358 cbradney 31
 
3 paul 32
/* IconItems Code */
11378 fschmid 33
SeItem::SeItem(QString text, uint nr, const QPixmap& Pix) : QTableWidgetItem(QIcon(Pix), "", 1002)
3 paul 34
{
7541 fschmid 35
        pageNumber = nr;
3429 fschmid 36
        pageName = text;
10616 fschmid 37
        setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
3 paul 38
}
39
 
3623 cbradney 40
const QString& SeItem::getPageName()
41
{
42
        return pageName;
43
}
44
 
3 paul 45
/* ListBox Subclass */
10616 fschmid 46
SeList::SeList(QWidget* parent) : QListWidget(parent)
3 paul 47
{
48
        Mpressed = false;
49
        setAcceptDrops(true);
50
}
51
 
52
void SeList::mouseReleaseEvent(QMouseEvent *m)
53
{
54
        Mpressed = false;
8580 jghali 55
        if (m->button() == Qt::RightButton)
167 Franz 56
        {
10012 cbradney 57
                QMenu *pmen = new QMenu();
9380 fschmid 58
                qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
11063 subik 59
        QAction *px = pmen->addAction( tr("Show Page Previews"), this, SLOT(toggleThumbnail()));
10616 fschmid 60
                px->setCheckable(true);
3 paul 61
                if (Thumb)
10585 fschmid 62
                        px->setChecked(true);
3 paul 63
                pmen->exec(QCursor::pos());
64
                delete pmen;
167 Franz 65
        }
10616 fschmid 66
        QListWidget::mouseReleaseEvent(m);
3 paul 67
}
68
 
11063 subik 69
void SeList::toggleThumbnail()
3 paul 70
{
71
        Thumb = !Thumb;
11063 subik 72
        emit thumbnailChanged();
3 paul 73
}
74
 
75
void SeList::mousePressEvent(QMouseEvent* e)
76
{
77
        e->accept();
78
        CurItem = 0;
10616 fschmid 79
        QListWidgetItem *i = itemAt(e->pos());
3 paul 80
        if (i)
167 Franz 81
        {
3 paul 82
                CurItem = i;
83
                Mpos = e->pos();
248 Franz 84
                Mpressed = true;
167 Franz 85
        }
10616 fschmid 86
        QListWidget::mousePressEvent(e);
3 paul 87
}
88
 
89
void SeList::mouseMoveEvent(QMouseEvent* e)
90
{
91
        if ((Mpressed) && ((Mpos - e->pos()).manhattanLength() > 4))
167 Franz 92
        {
3 paul 93
                Mpressed = false;
10616 fschmid 94
                QListWidgetItem *i = itemAt(Mpos);
3 paul 95
                if (i)
167 Franz 96
                {
10616 fschmid 97
                        QMimeData *mimeData = new QMimeData;
98
                        mimeData->setData("page/magic", "1"+i->text().toLocal8Bit());
99
                        mimeData->setText("1"+i->text());
100
                        QDrag *dr = new QDrag(this);
101
                        dr->setMimeData(mimeData);
12876 fschmid 102
                        const QPixmap& pm = loadIcon("doc.png");
103
                        dr->setDragCursor(pm, Qt::CopyAction);
104
                        dr->setDragCursor(pm, Qt::MoveAction);
10643 fschmid 105
                        dr->exec(Qt::CopyAction | Qt::MoveAction);
11378 fschmid 106
                        QApplication::setOverrideCursor(Qt::ArrowCursor);
3 paul 107
                }
167 Franz 108
        }
3 paul 109
}
110
 
12358 cbradney 111
void SeList::keyPressEvent(QKeyEvent * e)
112
{
14227 jghali 113
        bool accepted = false;
12358 cbradney 114
        int k = e->key();
115
        if (k == Qt::Key_Delete)
116
        {
117
                if (currentItem())
118
                {
119
                        e->accept();
120
                        if (!QMessageBox::question(this, tr("Delete Master Page?"),
121
                                "<qt>" + tr("Are you sure you want to delete this master page?") + "</qt>",
122
                                CommonStrings::trYesKey, CommonStrings::trNoKey, QString::null, 0, 1 ))
123
                        {
124
                                emit DelMaster(currentItem()->text());
125
                        }
14227 jghali 126
                        accepted = true;
12358 cbradney 127
                }
128
        }
14227 jghali 129
        if (!accepted)
130
                QListWidget::keyPressEvent(e);
12358 cbradney 131
}
132
 
133
 
3 paul 134
/* QTable Subclass */
10616 fschmid 135
SeView::SeView(QWidget* parent) : QTableWidget(parent)
3 paul 136
{
137
        setDragEnabled(true);
138
        setAcceptDrops(true);
10643 fschmid 139
    setDropIndicatorShown(true);
140
//      viewport()->setAcceptDrops(true);
3 paul 141
        setShowGrid(false);
10616 fschmid 142
        setWordWrap(true);
3 paul 143
        Mpressed = false;
144
        Namen = true;
12358 cbradney 145
//      setFocusPolicy(Qt::NoFocus);
3 paul 146
}
147
 
10616 fschmid 148
void SeView::mousePressEvent(QMouseEvent* e)
3 paul 149
{
150
        e->accept();
151
        Mpos = e->pos();
152
        Mpressed = true;
10643 fschmid 153
        QTableWidget::mousePressEvent(e);
3 paul 154
}
155
 
10616 fschmid 156
void SeView::mouseReleaseEvent(QMouseEvent* e)
3 paul 157
{
158
        e->accept();
159
        Mpressed = false;
3429 fschmid 160
/*      if (e->button() == RightButton)
167 Franz 161
        {
3 paul 162
                QPopupMenu *pmen = new QPopupMenu();
8528 cbradney 163
                qApp->setOverrideCursor(QCursor(Qt::ArrowCursor), true);
2093 cbradney 164
                int px = pmen->insertItem( tr("Show Master Page Names"), this, SLOT(ToggleNam()));
3 paul 165
                if (Namen)
166
                        pmen->setItemChecked(px, true);
167
                pmen->exec(QCursor::pos());
168
                delete pmen;
3429 fschmid 169
        } */
3 paul 170
        emit Click(rowAt(e->pos().y()), columnAt(e->pos().x()), e->button());
10643 fschmid 171
        QTableWidget::mouseReleaseEvent(e);
3 paul 172
}
173
 
174
void SeView::ToggleNam()
175
{
3429 fschmid 176
/*      Namen = !Namen;
80 Franz 177
        int val = 35;
3 paul 178
        if (Namen)
80 Franz 179
                val = 100;
180
        setColumnWidth(1, val);
181
        setColumnWidth(3, val);
3 paul 182
        hide();
3429 fschmid 183
        show(); */
3 paul 184
}
185
 
10616 fschmid 186
void SeView::mouseMoveEvent(QMouseEvent* e)
3 paul 187
{
188
        if ((Mpressed) && ((Mpos - e->pos()).manhattanLength() > 4))
167 Franz 189
        {
3 paul 190
                Mpressed = false;
3759 cbradney 191
                int a = rowAt(e->pos().y());
192
                int b = columnAt(e->pos().x());
3 paul 193
                if ((a != -1) && (b != -1))
167 Franz 194
                {
10616 fschmid 195
                        QTableWidgetItem* ite = item(a, b);
11378 fschmid 196
                        if (ite != 0)
197
                        {
198
                                if (ite->type() == 1002)
199
                                {
200
                                        SeItem* it = (SeItem*)ite;
201
                                        QString str(it->pageName);
202
                                        bool dummy;
203
                                        int p = GetPage(a, b, &dummy);
204
                                        QString tmp;
205
                                        QMimeData *mimeData = new QMimeData;
206
                                        mimeData->setData("page/magic", "2 "+tmp.setNum(p).toLocal8Bit()+" "+str.toLocal8Bit());
207
                                        mimeData->setText("2 "+tmp.setNum(p)+" "+str);
208
                                        QDrag *dr = new QDrag(this);
209
                                        dr->setMimeData(mimeData);
12876 fschmid 210
                                        const QPixmap& pm = loadIcon("doc.png");
211
                                        dr->setDragCursor(pm, Qt::CopyAction);
212
                                        dr->setDragCursor(pm, Qt::MoveAction);
11378 fschmid 213
                                        dr->exec(Qt::CopyAction | Qt::MoveAction);
214
                                        QApplication::setOverrideCursor(Qt::ArrowCursor);
215
                                }
216
                        }
3 paul 217
                }
167 Franz 218
        }
10616 fschmid 219
        QTableWidget::mouseMoveEvent(e);
3 paul 220
}
221
 
10616 fschmid 222
void SeView::dropEvent(QDropEvent * e)
3 paul 223
{
224
        QString str, tmp;
3429 fschmid 225
        bool lastPage = false;
10616 fschmid 226
        if (e->mimeData()->hasFormat("page/magic"))
167 Franz 227
        {
10643 fschmid 228
        e->setDropAction(Qt::MoveAction);
10616 fschmid 229
                e->accept();
10901 fschmid 230
                // HACK to prevent strange Qt4 cursor behaviour after dropping. It's examined by Trolltech now - PV.
231
                // It's the one and only reason why to include QApplication here.
11378 fschmid 232
                // But sadly this destroys our normal Cursors
12658 fschmid 233
                // Fixed at least in Qt-4.4.2
234
//              QApplication::restoreOverrideCursor();
10616 fschmid 235
                str = e->mimeData()->text();
3429 fschmid 236
                ClearPix();
167 Franz 237
                if (str.startsWith("1"))
3 paul 238
                {
239
                        int a = rowAt(e->pos().y());
240
                        int b = columnAt(e->pos().x());
241
                        int p;
242
                        tmp = str.remove(0,1);
243
                        if ((a == -1) || (b == -1))
244
                                return;
10616 fschmid 245
                        if (a == rowCount()-1)
167 Franz 246
                        {
3429 fschmid 247
                                emit NewPage(MaxC+1, tmp);
248
                                return;
167 Franz 249
                        }
3429 fschmid 250
                        p = GetPage(a, b, &lastPage);
10616 fschmid 251
                        if (columnCount() == 1)
3429 fschmid 252
                        {
253
                                if ((a % 2) == 0)
254
                                        emit NewPage(p, tmp);
255
                                else
7161 fschmid 256
                                {
3429 fschmid 257
                                        emit UseTemp(tmp, p);
10616 fschmid 258
                                        QTableWidgetItem* ite = item(a, b);
7161 fschmid 259
                                        if (ite == 0)
260
                                                return;
11378 fschmid 261
                                        if (ite->type() == 1002)
262
                                        {
263
                                                SeItem* it = (SeItem*)ite;
264
                                                it->pageName = tmp;
265
                                        }
7161 fschmid 266
                                }
3429 fschmid 267
                                return;
268
                        }
3 paul 269
                        else
167 Franz 270
                        {
3429 fschmid 271
                                if ((b % 2) == 0)
3 paul 272
                                {
3429 fschmid 273
                                        if (lastPage)
274
                                                emit NewPage(p+1, tmp);
3 paul 275
                                        else
3429 fschmid 276
                                                emit NewPage(p, tmp);
167 Franz 277
                                }
3 paul 278
                                else
7161 fschmid 279
                                {
3429 fschmid 280
                                        emit UseTemp(tmp, p);
10616 fschmid 281
                                        QTableWidgetItem* ite = item(a, b);
7161 fschmid 282
                                        if (ite == 0)
283
                                                return;
11378 fschmid 284
                                        if (ite->type() == 1002)
285
                                        {
286
                                                SeItem* it = (SeItem*)ite;
287
                                                it->pageName = tmp;
288
                                        }
7161 fschmid 289
                                }
3429 fschmid 290
                                return;
167 Franz 291
                        }
292
                }
3 paul 293
                if (str.startsWith("2"))
167 Franz 294
                {
10517 cbradney 295
                        int st = str.indexOf(" ");
296
                        int en = str.indexOf(" ", st+1);
3 paul 297
                        tmp = str.mid(en+1);
298
                        int dr = str.mid(st, en-st).toInt();
299
                        int a = rowAt(e->pos().y());
300
                        int b = columnAt(e->pos().x());
3436 fschmid 301
                        int p;
3 paul 302
                        if ((a == -1) || (b == -1))
303
                                return;
10616 fschmid 304
                        QTableWidgetItem* ite = item(a, b);
3429 fschmid 305
                        p = GetPage(a, b, &lastPage);
10616 fschmid 306
                        if (a == rowCount()-1)
3436 fschmid 307
                        {
11063 subik 308
                                emit movePage(dr, p+1);
3436 fschmid 309
                                return;
310
                        }
10616 fschmid 311
                        if (columnCount() == 1)
167 Franz 312
                        {
3436 fschmid 313
                                if ((a % 2) == 0)
11063 subik 314
                                        emit movePage(dr, p);
3436 fschmid 315
                                else
3429 fschmid 316
                                {
317
                                        emit UseTemp(tmp, p);
3436 fschmid 318
                                        if (ite == 0)
319
                                                return;
3429 fschmid 320
                                        SeItem* it = (SeItem*)ite;
321
                                        it->pageName = tmp;
322
                                }
323
                                return;
324
                        }
325
                        else
326
                        {
3436 fschmid 327
                                if ((b % 2) == 0)
11063 subik 328
                                        emit movePage(dr, lastPage ? p+1 : p);
3436 fschmid 329
                                else
330
                                {
3429 fschmid 331
                                        emit UseTemp(tmp, p);
3436 fschmid 332
                                        if (ite == 0)
333
                                                return;
11378 fschmid 334
                                        if (ite->type() == 1002)
335
                                        {
336
                                                SeItem* it = (SeItem*)ite;
337
                                                it->pageName = tmp;
338
                                        }
3429 fschmid 339
                                }
340
                                return;
341
                        }
342
                }
167 Franz 343
        }
3 paul 344
}
345
 
10616 fschmid 346
void SeView::dragEnterEvent(QDragEnterEvent *e)
3 paul 347
{
10616 fschmid 348
        if (e->mimeData()->hasFormat("page/magic"))
10643 fschmid 349
                e->acceptProposedAction();
3 paul 350
}
351
 
10616 fschmid 352
void SeView::dragLeaveEvent(QDragLeaveEvent *)
3 paul 353
{
354
        ClearPix();
355
}
356
 
10616 fschmid 357
void SeView::dragMoveEvent(QDragMoveEvent *e)
3 paul 358
{
359
        QString str, tmp;
10616 fschmid 360
        if (e->mimeData()->hasFormat("page/magic"))
167 Franz 361
        {
10643 fschmid 362
                e->acceptProposedAction();
10616 fschmid 363
                str = e->mimeData()->text();
3 paul 364
                int a = rowAt(e->pos().y());
365
                int b = columnAt(e->pos().x());
3429 fschmid 366
                ClearPix();
3 paul 367
                if ((a == -1) || (b == -1))
368
                        return;
10616 fschmid 369
                if (columnCount() == 1)
167 Franz 370
                {
3429 fschmid 371
                        if ((a % 2) == 0)
3 paul 372
                        {
10616 fschmid 373
                                item(a, 0)->setBackground(Qt::darkBlue);
167 Franz 374
                        }
375
                }
3 paul 376
                else
167 Franz 377
                {
10616 fschmid 378
                        if (((b % 2) == 0) || (a == rowCount()-1))
3 paul 379
                        {
10616 fschmid 380
                                item(a, b)->setBackground(Qt::darkBlue);
167 Franz 381
                        }
3 paul 382
                }
167 Franz 383
        }
3 paul 384
}
385
 
12358 cbradney 386
void SeView::keyPressEvent(QKeyEvent * e)
387
{
14227 jghali 388
        bool accepted = false;
12358 cbradney 389
        int k = e->key();
390
        if (k == Qt::Key_Delete)
391
        {
392
                e->accept();
393
                if (!QMessageBox::question(this, tr("Delete Page?"),
394
                         "<qt>" + tr("Are you sure you want to delete this page?") + "</qt>",
395
                                                 CommonStrings::trYesKey, CommonStrings::trNoKey, QString::null, 0, 1 ))
396
                {
397
                        bool dummy;
398
                        int pageToDelete=GetPage(currentRow(), currentColumn(), &dummy);
399
                        emit DelPage(pageToDelete);
400
                }
14227 jghali 401
                accepted = true;
12358 cbradney 402
        }
14227 jghali 403
        if (!accepted)
404
                QTableWidget::keyPressEvent(e);
12358 cbradney 405
}
406
 
3 paul 407
void SeView::ClearPix()
408
{
3429 fschmid 409
        int counter = 0;
410
        int rowcounter = 0;
10616 fschmid 411
        for (int a = 0; a < rowCount(); ++a)
167 Franz 412
        {
3429 fschmid 413
                counter = 0;
10616 fschmid 414
                if (columnCount() == 1)
3 paul 415
                {
3429 fschmid 416
                        if ((a % 2) == 0)
3 paul 417
                        {
10616 fschmid 418
                                item(rowcounter, 0)->setBackground(Qt::white);
3429 fschmid 419
                                rowcounter += 2;
3 paul 420
                        }
167 Franz 421
                }
3 paul 422
                else
167 Franz 423
                {
10616 fschmid 424
                        for (int b = 0; b < columnCount(); ++b)
3429 fschmid 425
                        {
426
                                if ((b % 2) == 0)
427
                                {
10616 fschmid 428
                                        item(rowcounter, counter)->setBackground(Qt::white);
3429 fschmid 429
                                        counter += 2;
430
                                }
431
                        }
432
                        rowcounter++;
3 paul 433
                }
167 Franz 434
        }
10616 fschmid 435
        for (int c = 0; c < columnCount(); ++c)
3429 fschmid 436
        {
10616 fschmid 437
                item(rowCount()-1, c)->setBackground(Qt::white);
3429 fschmid 438
        }
3 paul 439
}
440
 
3429 fschmid 441
int SeView::GetPage(int r, int c, bool *last)
3 paul 442
{
3429 fschmid 443
        int counter = firstP;
444
        int rowcounter = 0;
445
        int ret = MaxC;
446
        *last = false;
10616 fschmid 447
        if (r == rowCount()-1)
167 Franz 448
        {
3429 fschmid 449
                *last = true;
450
                return ret;
451
        }
452
        if ((r == 0) && (c < firstP*colmult+coladd))
453
                return 0;
454
        for (int a = 0; a < MaxC+1; ++a)
455
        {
456
                if ((rowcounter*rowmult+rowadd == r) && (counter*colmult+coladd == c))
3 paul 457
                {
3429 fschmid 458
                        ret = a;
3441 fschmid 459
                        return ret;
167 Franz 460
                }
3 paul 461
                else
167 Franz 462
                {
10616 fschmid 463
                        if (columnCount() == 1)
3429 fschmid 464
                        {
8243 fschmid 465
                                if ((rowcounter*rowmult) == r)
3429 fschmid 466
                                {
467
                                        ret = a;
3441 fschmid 468
                                        return ret;
3429 fschmid 469
                                }
470
                        }
471
                        else
472
                        {
473
                                if ((counter*colmult == c) && (rowcounter*rowmult+rowadd == r))
474
                                {
475
                                        ret = a;
3441 fschmid 476
                                        return ret;
3429 fschmid 477
                                }
478
                        }
167 Franz 479
                }
3429 fschmid 480
                counter++;
481
                if (counter > cols-1)
482
                {
483
                        counter = 0;
484
                        rowcounter++;
485
                }
167 Franz 486
        }
3429 fschmid 487
        *last = true;
488
        return ret;
3 paul 489
}
490
 
491
/* Der Muelleimer */
10581 cbradney 492
TrashBin::TrashBin(QWidget * parent) : QLabel(parent)
3 paul 493
{
494
        Normal = loadIcon("trashcan.png");
495
        Offen = loadIcon("trashcan2.png");
496
        setPixmap(Normal);
497
        setScaledContents(false);
498
        setAcceptDrops(true);
499
}
500
 
501
void TrashBin::dragEnterEvent(QDragEnterEvent *e)
502
{
10616 fschmid 503
        if (e->mimeData()->hasFormat("page/magic"))
167 Franz 504
        {
3 paul 505
                e->accept();
506
                setPixmap(Offen);
167 Franz 507
        }
3 paul 508
}
509
 
510
void TrashBin::dragLeaveEvent(QDragLeaveEvent *)
511
{
512
        setPixmap(Normal);
513
}
514
 
515
void TrashBin::dropEvent(QDropEvent * e)
516
{
517
        setPixmap(Normal);
518
        QString str, tmp;
10616 fschmid 519
        if (e->mimeData()->hasFormat("page/magic"))
167 Franz 520
        {
10616 fschmid 521
                e->accept();
522
                str = e->mimeData()->text();
167 Franz 523
                if (str.startsWith("2"))
3 paul 524
                {
10517 cbradney 525
                        int st = str.indexOf(" ");
526
                        int en = str.indexOf(" ", st+1);
3 paul 527
                        emit DelPage(str.mid(st, en-st).toInt());
167 Franz 528
                }
3 paul 529
                if (str.startsWith("1"))
167 Franz 530
                {
3 paul 531
                        tmp = str.remove(0,1);
532
                        emit DelMaster(tmp);
533
                }
167 Franz 534
        }
3 paul 535
}
536
 
537
 
3623 cbradney 538
PagePalette::PagePalette(QWidget* parent) : ScrPaletteBase( parent, "SP", false, 0)
248 Franz 539
{
5781 cbradney 540
        m_scMW=(ScribusMainWindow*)parent;
10192 cbradney 541
        PagePaletteLayout = new QVBoxLayout( this );
3623 cbradney 542
        PagePaletteLayout->setSpacing( 5 );
543
        PagePaletteLayout->setMargin( 5 );
10581 cbradney 544
        Splitter1 = new QSplitter( this );
8580 jghali 545
        Splitter1->setOrientation( Qt::Vertical );
10581 cbradney 546
        QWidget* privateLayoutWidget = new QWidget( Splitter1 );
10585 fschmid 547
        Layout2 = new QVBoxLayout( privateLayoutWidget );
548
        Layout2->setMargin(0);
549
        Layout2->setSpacing(5);
10581 cbradney 550
        TextLabel1 = new QLabel( privateLayoutWidget );
248 Franz 551
        Layout2->addWidget( TextLabel1 );
2093 cbradney 552
        masterPageList = new SeList(privateLayoutWidget);
553
        masterPageList->setMinimumSize(QSize(130,70));
554
        masterPageList->Thumb = false;
10616 fschmid 555
        masterPageList->setIconSize(QSize(60, 60));
2093 cbradney 556
        Layout2->addWidget( masterPageList );
10581 cbradney 557
        QWidget* privateLayoutWidget_2 = new QWidget( Splitter1 );
10585 fschmid 558
        Layout3 = new QVBoxLayout( privateLayoutWidget_2);
559
        Layout3->setMargin(0);
560
        Layout3->setSpacing(5);
10581 cbradney 561
        TextLabel2 = new QLabel( privateLayoutWidget_2 );
248 Franz 562
        Layout3->addWidget( TextLabel2 );
3623 cbradney 563
        pageView = new SeView(privateLayoutWidget_2);
10616 fschmid 564
        QHeaderView *Header = pageView->verticalHeader();
565
        Header->setMovable(false);
566
        Header->setResizeMode(QHeaderView::Fixed);
567
        Header->hide();
568
        Header = pageView->horizontalHeader();
569
        Header->setMovable(false);
570
        Header->setResizeMode(QHeaderView::Fixed);
571
        Header->hide();
572
        pageView->setSortingEnabled(false);
573
        pageView->setSelectionMode( QAbstractItemView::NoSelection );
574
        pageView->setRowCount(1);
575
        pageView->setColumnCount(1);
576
        pageView->setIconSize(QSize(60, 60));
3623 cbradney 577
        pageView->setMinimumSize(QSize(130,120));
578
        Layout3->addWidget( pageView );
579
        PagePaletteLayout->addWidget( Splitter1 );
3 paul 580
 
10192 cbradney 581
        Layout1 = new QHBoxLayout;
3560 fschmid 582
        Layout1->setSpacing( 5 );
248 Franz 583
        Layout1->setMargin( 0 );
9803 fschmid 584
        QList<PageSet> dummy;
3560 fschmid 585
        dummy.clear();
3567 fschmid 586
        struct PageSet pageS;
10194 cbradney 587
        pageS.Name = CommonStrings::trPageSet2;
3567 fschmid 588
        pageS.FirstPage = 0;
589
        pageS.Rows = 1;
590
        pageS.Columns = 1;
11349 fschmid 591
//      pageS.GapHorizontal = 0.0;
592
//      pageS.GapVertical = 0.0;
593
//      pageS.GapBelow = 40.0;
3567 fschmid 594
        pageS.pageNames.clear();
10194 cbradney 595
        pageS.pageNames.append(CommonStrings::trPageLocMiddleRight);
3567 fschmid 596
        dummy.append(pageS);
3560 fschmid 597
        pageLayout = new PageLayouts(this, dummy, false);
598
        Layout1->addWidget( pageLayout );
3 paul 599
 
11748 subik 600
//      QSpacerItem* spacer = new QSpacerItem( 15, 15, QSizePolicy::Expanding, QSizePolicy::Minimum );
601
//      Layout1->addItem( spacer );
248 Franz 602
 
603
        Trash = new TrashBin( this );
11748 subik 604
        Trash->setMinimumSize(QSize(32,32));
605
        Trash->setMaximumSize(QSize(32,32));
248 Franz 606
        Layout1->addWidget( Trash );
3623 cbradney 607
        PagePaletteLayout->addLayout( Layout1 );
6947 cbradney 608
        pix = loadIcon("32/page-simple.png");
3623 cbradney 609
        currView = 0;
167 Franz 610
        Rebuild();
2195 cbradney 611
        languageChange();
10619 cbradney 612
        connect(masterPageList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(selMasterPage()));
11063 subik 613
        connect(masterPageList, SIGNAL(thumbnailChanged()), this, SLOT(rebuildMasters()));
12358 cbradney 614
        connect(masterPageList, SIGNAL(DelMaster(QString)), this, SLOT(deleteMasterPage(QString)));
11063 subik 615
        connect(pageView, SIGNAL(Click(int, int, int)), this, SLOT(pageView_gotoPage(int, int, int)));
616
        connect(pageView, SIGNAL(movePage(int, int)), this, SLOT(pageView_movePage(int, int)));
617
        connect(Trash, SIGNAL(DelMaster(QString)), this, SLOT(deleteMasterPage(QString)));
3560 fschmid 618
        connect(pageLayout, SIGNAL(selectedLayout(int )), this, SLOT(handlePageLayout(int )));
619
        connect(pageLayout, SIGNAL(selectedFirstPage(int )), this, SLOT(handleFirstPage(int )));
5781 cbradney 620
        connect(this, SIGNAL(EditTemp(QString)), m_scMW, SLOT(manageMasterPages(QString)));
621
        connect(pageView, SIGNAL(UseTemp(QString, int)), m_scMW, SLOT(Apply_MasterPage(QString, int)));
622
        connect(pageView, SIGNAL(NewPage(int, QString)), m_scMW, SLOT(slotNewPageP(int, QString)));
623
        connect(Trash, SIGNAL(DelPage(int)), m_scMW, SLOT(DeletePage2(int)));
12358 cbradney 624
        connect(pageView, SIGNAL(DelPage(int)), m_scMW, SLOT(DeletePage2(int)));
11063 subik 625
        connect(this, SIGNAL(gotoPage(int)), m_scMW, SLOT(selectPagesFromOutlines(int)));
3 paul 626
}
627
 
11063 subik 628
void PagePalette::deleteMasterPage(QString tmp)
3 paul 629
{
6715 cbradney 630
        if (tmp == CommonStrings::trMasterPageNormal)
248 Franz 631
                return;
12764 fschmid 632
        QString extraWarn = "";
633
        for (int i=0; i < currView->Doc->DocPages.count(); ++i )
248 Franz 634
        {
12764 fschmid 635
                if (currView->Doc->DocPages[i]->MPageNam == tmp)
636
                        extraWarn = tr("This master page is used at least once in the document.");
637
        }
638
        int exit = QMessageBox::warning(this,
639
                                      CommonStrings::trWarning,
640
                                      tr("Do you really want to delete this master page?")+"\n"+extraWarn,
641
                                      QMessageBox::Yes | QMessageBox::No);
642
        if (exit == QMessageBox::Yes)
643
        {
14161 jghali 644
                bool oldMPMode = currView->Doc->masterPageMode();
645
                currView->Doc->setMasterPageMode(true);
646
                currView->Doc->scMW()->DeletePage2(currView->Doc->MasterNames[tmp]);
647
                //<<CB TODO Move back into ScribusDoc::deleteMasterPage();
648
                //This must happen after the pages have been reformed (view/doc)
649
                currView->Doc->rebuildMasterNames();
650
                // Fix up any pages that refer to the deleted master page
651
                currView->Doc->replaceMasterPage(tmp);
652
                currView->Doc->setMasterPageMode(oldMPMode);
12764 fschmid 653
                currView->Doc->setModified(true);
248 Franz 654
        }
3 paul 655
}
656
 
11063 subik 657
void PagePalette::pageView_movePage(int r, int c)
3 paul 658
{
3436 fschmid 659
        if (r == c)
660
                return;
3623 cbradney 661
        if (c > pageView->MaxC)
662
                currView->Doc->movePage(r, r + 1, c, 2);
3436 fschmid 663
        else
3623 cbradney 664
                currView->Doc->movePage(r, r + 1, c, 0);
665
        currView->reformPages();
11063 subik 666
        rebuildPages();
3623 cbradney 667
        currView->DrawNew();
6837 cbradney 668
//CB done by doc::reformpages
669
//      currView->Doc->setModified(true);
3 paul 670
}
671
 
11063 subik 672
void PagePalette::pageView_gotoPage(int r, int c, int b)
3 paul 673
{
674
        int p;
3429 fschmid 675
        bool dummy;
8580 jghali 676
        if ((b == Qt::LeftButton) && (r != -1) && (c != -1))
167 Franz 677
        {
3623 cbradney 678
                p = pageView->GetPage(r, c, &dummy);
11063 subik 679
                emit gotoPage(p);
167 Franz 680
        }
3 paul 681
}
682
 
3623 cbradney 683
void PagePalette::enablePalette(const bool enabled)
3 paul 684
{
3623 cbradney 685
        pageView->setEnabled(enabled);
686
        masterPageList->setEnabled(enabled);
687
        pageLayout->setEnabled(enabled);
3 paul 688
}
689
 
3623 cbradney 690
void PagePalette::handlePageLayout(int layout)
3 paul 691
{
3623 cbradney 692
        pageLayout->selectFirstP(currView->Doc->pageSets[layout].FirstPage);
12326 cbradney 693
        currView->Doc->resetPage(currView->Doc->pageMargins, layout);
3623 cbradney 694
        currView->reformPages();
695
        currView->DrawNew();
3670 cbradney 696
        currView->GotoPage(currView->Doc->currentPageNumber());
11063 subik 697
        rebuildPages();
6837 cbradney 698
//CB done by doc::reformpages
699
//      currView->Doc->setModified(true);
3 paul 700
}
701
 
3623 cbradney 702
void PagePalette::handleFirstPage(int fp)
3 paul 703
{
3623 cbradney 704
        currView->Doc->pageSets[currView->Doc->currentPageLayout].FirstPage = fp;
705
        currView->reformPages();
706
        currView->DrawNew();
3670 cbradney 707
        currView->GotoPage(currView->Doc->currentPageNumber());
11063 subik 708
        rebuildPages();
6837 cbradney 709
//CB done by doc::reformpages
710
//      currView->Doc->setModified(true);
3 paul 711
}
712
 
11063 subik 713
void PagePalette::rebuildMasters()
3 paul 714
{
5781 cbradney 715
        if (m_scMW->ScriptRunning)
173 Franz 716
                return;
2093 cbradney 717
        masterPageList->clear();
3623 cbradney 718
        if (currView == 0)
3 paul 719
                return;
1815 fschmid 720
        QPixmap pm;
3 paul 721
        QMap<QString,int>::Iterator it;
3623 cbradney 722
        for (it = currView->Doc->MasterNames.begin(); it != currView->Doc->MasterNames.end(); ++it)
167 Franz 723
        {
2093 cbradney 724
                if (masterPageList->Thumb)
1815 fschmid 725
                {
10616 fschmid 726
                        pm = QPixmap::fromImage(currView->MPageToPixmap(it.key(),60));
727
                        new QListWidgetItem(QIcon(pm), it.key() == CommonStrings::masterPageNormal ? CommonStrings::trMasterPageNormal : it.key(), masterPageList);
1815 fschmid 728
                }
3 paul 729
                else
10616 fschmid 730
                        masterPageList->addItem(it.key() == CommonStrings::masterPageNormal ? CommonStrings::trMasterPageNormal : it.key());
167 Franz 731
        }
3 paul 732
}
733
 
11063 subik 734
void PagePalette::rebuildPages()
3 paul 735
{
5781 cbradney 736
        if (m_scMW->ScriptRunning)
173 Franz 737
                return;
3 paul 738
        QString str;
3560 fschmid 739
        disconnect(pageLayout, SIGNAL(selectedLayout(int )), this, SLOT(handlePageLayout(int )));
740
        disconnect(pageLayout, SIGNAL(selectedFirstPage(int )), this, SLOT(handleFirstPage(int )));
10616 fschmid 741
        pageView->clearContents();
742
        pageView->setRowCount(1);
743
        pageView->setColumnCount(1);
3623 cbradney 744
        if (currView == 0)
167 Franz 745
        {
3560 fschmid 746
                connect(pageLayout, SIGNAL(selectedLayout(int )), this, SLOT(handlePageLayout(int )));
747
                connect(pageLayout, SIGNAL(selectedFirstPage(int )), this, SLOT(handleFirstPage(int )));
3 paul 748
                return;
167 Franz 749
        }
3623 cbradney 750
        pageLayout->updateLayoutSelector(currView->Doc->pageSets);
751
        pageLayout->selectItem(currView->Doc->currentPageLayout);
10585 fschmid 752
        pageLayout->firstPage->setCurrentIndex(currView->Doc->pageSets[currView->Doc->currentPageLayout].FirstPage);
3724 cbradney 753
        pageView->MaxC = currView->Doc->Pages->count()-1;
3436 fschmid 754
        int counter, rowcounter, colmult, rowmult, coladd,rowadd;
3623 cbradney 755
        counter = currView->Doc->pageSets[currView->Doc->currentPageLayout].FirstPage;
756
        int cols = currView->Doc->pageSets[currView->Doc->currentPageLayout].Columns;
4069 craig 757
        int rows = (currView->Doc->Pages->count()+counter) / currView->Doc->pageSets[currView->Doc->currentPageLayout].Columns;
758
        if (((currView->Doc->Pages->count()+counter) % currView->Doc->pageSets[currView->Doc->currentPageLayout].Columns) != 0)
3429 fschmid 759
                rows++;
760
        rowcounter = 0;
761
        if (cols == 1)
167 Franz 762
        {
10616 fschmid 763
                pageView->setColumnCount(cols);
764
                pageView->setRowCount(rows*2+1);
3429 fschmid 765
                colmult = 1;
766
                coladd = 0;
767
                rowmult = 2;
768
                rowadd = 1;
167 Franz 769
        }
3 paul 770
        else
167 Franz 771
        {
10616 fschmid 772
                pageView->setColumnCount(cols*2);
773
                pageView->setRowCount(rows+1);
3429 fschmid 774
                colmult = 2;
775
                coladd = 1;
776
                rowmult = 1;
777
                rowadd = 0;
778
        }
10616 fschmid 779
        for (int rr = 0; rr < pageView->rowCount(); rr++)
780
        {
781
                for (int cc = 0; cc < pageView->columnCount(); cc++)
782
                {
11378 fschmid 783
                        QTableWidgetItem *tW = new QTableWidgetItem(1001);
10616 fschmid 784
                        tW->setFlags(Qt::ItemIsEnabled);
785
                        pageView->setItem(rr, cc, tW);
786
                }
787
        }
3623 cbradney 788
        pageView->coladd = coladd;
789
        pageView->colmult = colmult;
790
        pageView->rowadd = rowadd;
791
        pageView->rowmult = rowmult;
792
        pageView->firstP = counter;
793
        pageView->cols = currView->Doc->pageSets[currView->Doc->currentPageLayout].Columns;
7541 fschmid 794
        pageList.clear();
10013 cbradney 795
        for (int a = 0; a < currView->Doc->Pages->count(); ++a)
3429 fschmid 796
        {
3724 cbradney 797
                str = currView->Doc->Pages->at(a)->MPageNam;
10616 fschmid 798
                SeItem *it = new SeItem(str, a, CreateIcon(a, pix));
7541 fschmid 799
                pageList.append(it);
10616 fschmid 800
                pageView->setItem(rowcounter*rowmult+rowadd, counter*colmult+coladd, (QTableWidgetItem *)it);
3623 cbradney 801
                pageView->setColumnWidth(counter*colmult+coladd, pix.width());
3429 fschmid 802
                if (cols == 1)
3436 fschmid 803
                {
3623 cbradney 804
                        pageView->setRowHeight(rowcounter*rowmult, 10);
805
                        pageView->setRowHeight(rowcounter*rowmult+rowadd, pix.height());
3436 fschmid 806
                }
3429 fschmid 807
                else
3623 cbradney 808
                        pageView->setRowHeight(rowcounter*rowmult+rowadd, pix.height()+5);
3429 fschmid 809
                counter++;
3623 cbradney 810
                if (counter > currView->Doc->pageSets[currView->Doc->currentPageLayout].Columns-1)
167 Franz 811
                {
3429 fschmid 812
                        counter = 0;
813
                        rowcounter++;
167 Franz 814
                }
815
        }
10616 fschmid 816
        pageView->setRowHeight(pageView->rowCount()-1, 10);
3436 fschmid 817
        counter = 0;
818
        if (cols != 1)
819
        {
10616 fschmid 820
                for (int c = 0; c < pageView->columnCount(); ++c)
3436 fschmid 821
                {
822
                        if ((counter % 2) == 0)
3623 cbradney 823
                                pageView->setColumnWidth(counter, 10);
3436 fschmid 824
                        else
3623 cbradney 825
                                pageView->setColumnWidth(counter, pix.width());
3436 fschmid 826
                        counter++;
827
                }
828
        }
3623 cbradney 829
        pageView->repaint();
7541 fschmid 830
        if (currView != 0)
831
                markPage(currView->Doc->currentPageNumber());
3560 fschmid 832
        connect(pageLayout, SIGNAL(selectedLayout(int )), this, SLOT(handlePageLayout(int )));
833
        connect(pageLayout, SIGNAL(selectedFirstPage(int )), this, SLOT(handleFirstPage(int )));
3 paul 834
}
835
 
3623 cbradney 836
void PagePalette::Rebuild()
3 paul 837
{
11063 subik 838
        rebuildMasters();
839
        rebuildPages();
3623 cbradney 840
        enablePalette(currView != 0);
3 paul 841
}
842
 
7541 fschmid 843
void PagePalette::markPage(uint nr)
844
{
845
        if (currView != 0)
846
        {
847
                SeItem *it;
10029 cbradney 848
                for (int a = 0; a < pageList.count(); a++)
7541 fschmid 849
                {
850
                        it = pageList.at(a);
851
                        if (it->pageNumber == nr)
852
                        {
853
                                pageView->clearSelection();
10616 fschmid 854
                                pageView->item(it->row(), it->column())->setSelected(true);
11874 fschmid 855
                                pageView->scrollToItem(pageView->item(it->row(), it->column()), QAbstractItemView::EnsureVisible);
7541 fschmid 856
                                break;
857
                        }
858
                }
859
        }
860
}
861
 
3623 cbradney 862
void PagePalette::setView(ScribusView *view)
3 paul 863
{
11633 jghali 864
        if (m_scMW->ScriptRunning)
865
                return;
3623 cbradney 866
        currView = view;
3 paul 867
}
868
 
3623 cbradney 869
void PagePalette::selMasterPage()
3 paul 870
{
2093 cbradney 871
        if (masterPageList->CurItem != 0)
872
                emit EditTemp(masterPageList->CurItem->text());
3 paul 873
}
874
 
4417 cbradney 875
QPixmap PagePalette::CreateIcon(int nr, QPixmap pixin)
3 paul 876
{
877
        QPainter p;
4417 cbradney 878
        // Necessary on windows to ensure the pixmap is drawable
8659 subik 879
        QPixmap ret(pixin.width(), pixin.height()); // Qt4, pixin.depth());
399 Franz 880
        if (p.begin(&ret))
881
        {
9460 jghali 882
                p.drawPixmap( 0, 0, pixin );
9100 fschmid 883
//              if( !pixin.mask().isNull() )
884
//                      ret.setMask( pixin.mask() );
8580 jghali 885
                p.setBrush(Qt::white);
10585 fschmid 886
                p.setBackground(Qt::white);
8580 jghali 887
                p.setBackgroundMode(Qt::OpaqueMode);
8522 cbradney 888
                p.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin));
399 Franz 889
                p.setFont(QFont("Helvetica", 12, QFont::Bold));
4075 cbradney 890
                //QString tmp = tmp.setNum(nr+1);
891
                QString tmp(currView->Doc->getSectionPageNumberForPageIndex(nr));
4484 fschmid 892
                if (tmp.isEmpty())
893
                        tmp = tmp.setNum(nr+1);
3436 fschmid 894
                QRect b = p.fontMetrics().boundingRect(tmp);
895
                QRect c = QRect((ret.width() / 2 - b.width() / 2)-2, (ret.height() / 2 - b.height() / 2)-2, b.width()+4, b.height()+4);
896
                p.drawRect(c);
897
                QRect d = QRect((ret.width() / 2 - b.width() / 2), (ret.height() / 2 - b.height() / 2), b.width(), b.height());
4084 cbradney 898
                p.setFont(QFont("Helvetica", 10, QFont::Normal));
3436 fschmid 899
                p.drawText(d, Qt::AlignCenter, tmp);
399 Franz 900
                p.end();
9100 fschmid 901
                if( !pixin.mask().isNull() )
902
                        ret.setMask( pixin.mask() );
399 Franz 903
        }
3 paul 904
        return ret;
905
}
2195 cbradney 906
 
10859 cbradney 907
void PagePalette::changeEvent(QEvent *e)
908
{
909
        if (e->type() == QEvent::LanguageChange)
910
        {
911
                languageChange();
912
        }
10903 cbradney 913
        else
914
                QWidget::changeEvent(e);
10859 cbradney 915
}
916
 
3623 cbradney 917
void PagePalette::languageChange()
2195 cbradney 918
{
10495 cbradney 919
        setWindowTitle( tr( "Arrange Pages" ) );
2195 cbradney 920
        TextLabel1->setText( tr( "Available Master Pages:" ) );
921
        TextLabel2->setText( tr( "Document Pages:" ) );
12208 cbradney 922
 
12359 cbradney 923
        masterPageList->setToolTip( "<qt>" + tr( "List of master pages in the document. Master page names may be dragged onto the page view below to apply master pages, or onto the empty space between pages to create new pages." ) + "</qt>");
12208 cbradney 924
        pageView->setToolTip( "<qt>" + tr( "List of normal pages in the document, shown with the document layout. Pages may be dragged to rearrange or delete them.")  + "</qt>");
925
        Trash->setToolTip( "<qt>" + tr("Drag pages or master pages onto the trash to delete them") + "</qt>");
2219 fschmid 926
}
3623 cbradney 927
 
11748 subik 928
//CB Whats this variable returned for.. its always true... ?
3623 cbradney 929
//CB Clean up the interface and stick it behind this member for now
930
const bool PagePalette::getNamen()
931
{
932
        return pageView->Namen;
933
}
934
 
11748 subik 935
//CB Whats this variable returned for.. its always true... ?
3623 cbradney 936
//CB Clean up the interface and stick it behind this member for now
937
const bool PagePalette::getThumb()
938
{
939
        return masterPageList->Thumb;
940
}
12358 cbradney 941