Subversion Repositories Scribus

Rev

Rev 4619 | Rev 4683 | 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
*/
3 paul 7
#include "muster.h"
8
#include "muster.moc"
9
#include "newtemp.h"
118 Franz 10
#include "mergedoc.h"
923 cbradney 11
#include <qlayout.h>
12
#include <qlistbox.h>
13
#include <qpushbutton.h>
118 Franz 14
#include <qcursor.h>
923 cbradney 15
#include <qstring.h>
1414 fschmid 16
#include <qtooltip.h>
3670 cbradney 17
#include "page.h"
4122 cbradney 18
#include "pagestructs.h"
923 cbradney 19
#include "scribusdoc.h"
20
#include "scribusview.h"
2533 craig 21
#include "util.h"
3510 cbradney 22
#include "commonstrings.h"
4069 craig 23
#include "scribus.h"
3 paul 24
 
3953 cbradney 25
#include "scmessagebox.h"
26
 
2093 cbradney 27
MasterPagesPalette::MasterPagesPalette( QWidget* parent, ScribusDoc *pCurrentDoc, ScribusView *pCurrentView, QString masterPageName)
225 Franz 28
                : QDialog( parent, "Muster", false, WDestructiveClose)
3 paul 29
{
2093 cbradney 30
        setCaption( tr( "Edit Master Pages" ) );
225 Franz 31
        setIcon(loadIcon("AppIcon.png"));
923 cbradney 32
        currentDoc = pCurrentDoc;
33
        currentView = pCurrentView;
2093 cbradney 34
        masterPagesLayout = new QVBoxLayout( this, 5, 5 );
1414 fschmid 35
        buttonLayout = new QHBoxLayout;
36
        buttonLayout->setSpacing( 5 );
923 cbradney 37
        buttonLayout->setMargin( 0 );
2439 cbradney 38
        importButton = new QToolButton(this, "importButton" );
2093 cbradney 39
        importButton->setPixmap(loadIcon("fileopen.png"));
2439 cbradney 40
        newButton = new QToolButton(this, "newButton" );
1414 fschmid 41
        newButton->setPixmap(loadIcon("filenew.png"));
2439 cbradney 42
        duplicateButton = new QToolButton(this, "DublicateB" );
1414 fschmid 43
        duplicateButton->setPixmap(loadIcon("editcopy22.png"));
2439 cbradney 44
        deleteButton = new QToolButton(this, "deleteButton" );
1414 fschmid 45
        deleteButton->setPixmap(loadIcon("edittrash.png"));
923 cbradney 46
        buttonLayout->addWidget( newButton );
47
        buttonLayout->addWidget( duplicateButton );
2093 cbradney 48
        buttonLayout->addWidget( importButton );
923 cbradney 49
        buttonLayout->addWidget( deleteButton );
2093 cbradney 50
        masterPagesLayout->addLayout( buttonLayout );
51
        masterPageData = new QListBox( this, "masterPageData" );
52
        masterPageData->setMinimumSize( QSize( 100, 240 ) );
53
        masterPagesLayout->addWidget( masterPageData );
3 paul 54
 
1414 fschmid 55
 
2877 cbradney 56
        if (masterPageName.isEmpty())
161 Franz 57
        {
225 Franz 58
                sMuster = "Normal";
2093 cbradney 59
                updateMasterPageList(sMuster);
60
                currentView->showMasterPage(0);
161 Franz 61
        }
62
        else
63
        {
2093 cbradney 64
                sMuster = masterPageName;
65
                updateMasterPageList(sMuster);
66
                currentView->showMasterPage(currentDoc->MasterNames[sMuster]);
161 Franz 67
        }
923 cbradney 68
 
225 Franz 69
        setMaximumSize(sizeHint());
3 paul 70
 
3725 cbradney 71
        QToolTip::add( duplicateButton, tr( "Duplicate the selected master page" ) );
72
        QToolTip::add( deleteButton, tr( "Delete the selected master page" ) );
73
        QToolTip::add( newButton, tr( "Add a new master page" ) );
74
        QToolTip::add( importButton, tr( "Import master pages from another document" ) );
225 Franz 75
        // signals and slots connections
2093 cbradney 76
        connect(duplicateButton, SIGNAL(clicked()), this, SLOT(duplicateMasterPage()));
77
        connect(deleteButton, SIGNAL(clicked()), this, SLOT(deleteMasterPage()));
78
        connect(newButton, SIGNAL(clicked()), this, SLOT(newMasterPage()));
79
        connect(importButton, SIGNAL(clicked()), this, SLOT(appendPage()));
80
        connect(masterPageData, SIGNAL(highlighted(QListBoxItem*)), this, SLOT(selectMasterPage(QListBoxItem*)));
3 paul 81
}
82
 
2093 cbradney 83
void MasterPagesPalette::reject()
1830 fschmid 84
{
85
        emit finished();
86
        QDialog::reject();
87
}
88
 
2093 cbradney 89
void MasterPagesPalette::closeEvent(QCloseEvent *closeEvent)
3 paul 90
{
923 cbradney 91
        emit finished();
92
        closeEvent->accept();
3 paul 93
}
94
 
2093 cbradney 95
void MasterPagesPalette::deleteMasterPage()
3 paul 96
{
97
        if (sMuster == "Normal")
98
                return;
3953 cbradney 99
        int exit=ScMessageBox::warning(this,
3510 cbradney 100
                                      CommonStrings::trWarning,
2093 cbradney 101
                                      tr("Do you really want to delete this master page?"),
3953 cbradney 102
                                      tr("&Yes"),
348 Franz 103
                                      tr("&No"),
225 Franz 104
                                      0, QMessageBox::No, QMessageBox::Yes);
3953 cbradney 105
        if (exit == 0)
225 Franz 106
        {
4069 craig 107
                ScMW->DeletePage2(currentDoc->MasterNames[sMuster]);
4615 cbradney 108
                //<<CB TODO Move back into ScribusDoc::deleteMasterPage();
109
                //This must happen after the pages have been reformed (view/doc)
110
                currentDoc->MasterNames.clear();
111
                for (uint a = 0; a < currentDoc->Pages->count(); ++a)
112
                        currentDoc->MasterNames[currentDoc->Pages->at(a)->PageNam] = currentDoc->Pages->at(a)->pageNr();
113
                // and fix up any pages that refer to the deleted master page
114
                for (Page* docPage = currentDoc->DocPages.first(); docPage; docPage = currentDoc->DocPages.next() )
115
                {
116
                        if (docPage->MPageNam == sMuster)
117
                                docPage->MPageNam = "Normal";
118
                }
119
                //>>
120
 
3 paul 121
                sMuster = "Normal";
2093 cbradney 122
                updateMasterPageList(sMuster);
3724 cbradney 123
                //currentDoc->MasterPages = currentDoc->Pages;
3691 cbradney 124
                emit docAltered();
161 Franz 125
        }
3 paul 126
}
127
 
2093 cbradney 128
void MasterPagesPalette::duplicateMasterPage()
3 paul 129
{
2093 cbradney 130
        QString MasterPageName;
225 Franz 131
        int nr;
3885 cbradney 132
        //bool atf;
1065 cbradney 133
        struct CopyPasteBuffer Buffer;
4577 cbradney 134
        NewTm *dia = new NewTm(this, tr("&Name:"), tr("New Master Page"), currentDoc, tr("Copy of %1").arg(sMuster));
225 Franz 135
        if (dia->exec())
136
        {
2093 cbradney 137
                MasterPageName = dia->Answer->text();
138
                while (currentDoc->MasterNames.contains(MasterPageName) || (MasterPageName == "Normal"))
225 Franz 139
                {
140
                        if (!dia->exec())
141
                        {
142
                                delete dia;
143
                                return;
144
                        }
2093 cbradney 145
                        MasterPageName = dia->Answer->text();
225 Franz 146
                }
3724 cbradney 147
                nr = currentDoc->Pages->count();
3885 cbradney 148
                //currentDoc->MasterNames.insert(MasterPageName, nr);
149
                //currentDoc->pageCount = 0;
150
                //atf = currentDoc->usesAutomaticTextFrames();
151
                //currentDoc->setUsesAutomaticTextFrames(false);
152
                //emit createNew(nr);
3906 cbradney 153
                currentDoc->currentPage=currentDoc->addMasterPage(nr, MasterPageName);
2891 cbradney 154
                currentDoc->setLoading(true);
3035 fschmid 155
                if (currentDoc->currentPageLayout != singlePage)
156
                {
157
                        int lp = dia->Links->currentItem();
158
                        if (lp == 0)
159
                                lp = 1;
160
                        else if (lp == static_cast<int>(dia->Links->count()-1))
161
                                lp = 0;
162
                        else
163
                                lp++;
3724 cbradney 164
                        currentDoc->Pages->at(nr)->LeftPg = lp;
3035 fschmid 165
                }
923 cbradney 166
                int inde = currentDoc->MasterNames[sMuster];
457 fschmid 167
                QMap<int,int> TableID;
234 Franz 168
                QPtrList<PageItem> TableItems;
169
                TableID.clear();
170
                TableItems.clear();
3724 cbradney 171
                if (currentDoc->Pages->at(inde)->YGuides.count() != 0)
449 fschmid 172
                {
1065 cbradney 173
                        currentDoc->currentPage->YGuides.clear();
3724 cbradney 174
                        for (uint y = 0; y < currentDoc->Pages->at(inde)->YGuides.count(); ++y)
449 fschmid 175
                        {
3724 cbradney 176
                                currentDoc->currentPage->YGuides.append(currentDoc->Pages->at(inde)->YGuides[y]);
449 fschmid 177
                        }
1065 cbradney 178
                        qHeapSort(currentDoc->currentPage->YGuides);
449 fschmid 179
                }
3724 cbradney 180
                if (currentDoc->Pages->at(inde)->XGuides.count() != 0)
449 fschmid 181
                {
3187 fschmid 182
                        currentDoc->currentPage->XGuides.clear();
3724 cbradney 183
                        for (uint x = 0; x < currentDoc->Pages->at(inde)->XGuides.count(); ++x)
449 fschmid 184
                        {
3724 cbradney 185
                                currentDoc->currentPage->XGuides.append(currentDoc->Pages->at(inde)->XGuides[x]);
449 fschmid 186
                        }
1065 cbradney 187
                        qHeapSort(currentDoc->currentPage->XGuides);
449 fschmid 188
                }
3727 cbradney 189
                uint end = currentDoc->Items->count();
3318 fschmid 190
                int GrMax = currentDoc->GroupCounter;
457 fschmid 191
                for (uint a = 0; a < end; ++a)
161 Franz 192
                {
3727 cbradney 193
                        PageItem *itemToCopy = currentDoc->Items->at(a);
194
                        if (currentDoc->Items->at(a)->OwnPage == inde)
234 Franz 195
                        {
3318 fschmid 196
                                itemToCopy->copyToCopyPasteBuffer(&Buffer);
197
                                if (itemToCopy->Groups.count() != 0)
198
                                {
199
                                        Buffer.Groups.clear();
200
                                        QValueStack<int>::Iterator nx;
201
                                        QValueStack<int> tmpGroup;
202
                                        for (nx = itemToCopy->Groups.begin(); nx != itemToCopy->Groups.end(); ++nx)
203
                                        {
204
                                                tmpGroup.push((*nx)+currentDoc->GroupCounter);
205
                                                GrMax = QMAX(GrMax, (*nx)+currentDoc->GroupCounter);
206
                                        }
207
                                        for (nx = tmpGroup.begin(); nx != tmpGroup.end(); ++nx)
208
                                        {
209
                                                Buffer.Groups.push((*nx));
210
                                        }
211
                                }
923 cbradney 212
                                currentView->PasteItem(&Buffer, true, true);
3727 cbradney 213
                                PageItem* Neu = currentDoc->Items->at(currentDoc->Items->count()-1);
3318 fschmid 214
                                Neu->OnMasterPage = MasterPageName;
457 fschmid 215
                                if (Neu->isTableItem)
216
                                {
217
                                        TableItems.append(Neu);
218
                                        TableID.insert(a, Neu->ItemNr);
219
                                }
234 Franz 220
                        }
161 Franz 221
                }
234 Franz 222
                if (TableItems.count() != 0)
223
                {
224
                        for (uint ttc = 0; ttc < TableItems.count(); ++ttc)
225
                        {
226
                                PageItem* ta = TableItems.at(ttc);
227
                                if (ta->TopLinkID != -1)
3727 cbradney 228
                                        ta->TopLink = currentDoc->Items->at(TableID[ta->TopLinkID]);
234 Franz 229
                                else
230
                                        ta->TopLink = 0;
231
                                if (ta->LeftLinkID != -1)
3727 cbradney 232
                                        ta->LeftLink = currentDoc->Items->at(TableID[ta->LeftLinkID]);
234 Franz 233
                                else
234
                                        ta->LeftLink = 0;
235
                                if (ta->RightLinkID != -1)
3727 cbradney 236
                                        ta->RightLink = currentDoc->Items->at(TableID[ta->RightLinkID]);
234 Franz 237
                                else
238
                                        ta->RightLink = 0;
239
                                if (ta->BottomLinkID != -1)
3727 cbradney 240
                                        ta->BottomLink = currentDoc->Items->at(TableID[ta->BottomLinkID]);
234 Franz 241
                                else
242
                                        ta->BottomLink = 0;
243
                        }
244
                }
923 cbradney 245
                currentView->Deselect(true);
246
                currentView->DrawNew();
3885 cbradney 247
                //currentDoc->Pages->at(nr)->setPageName(MasterPageName);
248
                //currentDoc->Pages->at(nr)->MPageNam = "";
2093 cbradney 249
                updateMasterPageList(MasterPageName);
3885 cbradney 250
                //currentDoc->setUsesAutomaticTextFrames(atf);
3724 cbradney 251
                //currentDoc->MasterPages = currentDoc->Pages;
2891 cbradney 252
                currentDoc->setLoading(false);
1756 fschmid 253
                currentView->DrawNew();
3318 fschmid 254
                currentDoc->GroupCounter = GrMax + 1;
3691 cbradney 255
                emit docAltered();
225 Franz 256
        }
257
        delete dia;
3 paul 258
}
259
 
2093 cbradney 260
void MasterPagesPalette::newMasterPage()
3 paul 261
{
2093 cbradney 262
        QString MasterPageName;
4287 cbradney 263
        int nr = currentDoc->Pages->count();
4577 cbradney 264
        NewTm *dia = new NewTm(this, tr("Name:"), tr("New MasterPage"), currentDoc, tr("New Master Page %1").arg(nr));
225 Franz 265
        if (dia->exec())
266
        {
2093 cbradney 267
                MasterPageName = dia->Answer->text();
268
                while (currentDoc->MasterNames.contains(MasterPageName) || (MasterPageName == "Normal"))
225 Franz 269
                {
270
                        if (!dia->exec())
271
                        {
272
                                delete dia;
273
                                return;
274
                        }
2093 cbradney 275
                        MasterPageName = dia->Answer->text();
225 Franz 276
                }
3906 cbradney 277
                currentDoc->currentPage=currentDoc->addMasterPage(nr, MasterPageName);
3787 cbradney 278
 
279
                //currentDoc->MasterNames.insert(MasterPageName, nr);
280
                //currentDoc->pageCount = 0;
281
                //atf = currentDoc->usesAutomaticTextFrames();
282
                //currentDoc->setUsesAutomaticTextFrames(false);
283
                //emit createNew(nr);
3035 fschmid 284
                if (currentDoc->currentPageLayout != singlePage)
285
                {
286
                        int lp = dia->Links->currentItem();
287
                        if (lp == 0)
288
                                lp = 1;
289
                        else if (lp == static_cast<int>(dia->Links->count()-1))
290
                                lp = 0;
291
                        else
292
                                lp++;
3724 cbradney 293
                        currentDoc->Pages->at(nr)->LeftPg = lp;
3035 fschmid 294
                }
3787 cbradney 295
                //currentDoc->Pages->at(nr)->setPageName(MasterPageName);
296
                //currentDoc->Pages->at(nr)->MPageNam = "";
2093 cbradney 297
                updateMasterPageList(MasterPageName);
3787 cbradney 298
                //currentDoc->setUsesAutomaticTextFrames(atf);
2093 cbradney 299
                currentView->showMasterPage(currentDoc->MasterNames[MasterPageName]);
3035 fschmid 300
                currentView->reformPages();
3724 cbradney 301
                //currentDoc->MasterPages = currentDoc->Pages;
3691 cbradney 302
                emit docAltered();
225 Franz 303
        }
304
        delete dia;
3 paul 305
}
306
 
2093 cbradney 307
void MasterPagesPalette::appendPage()
118 Franz 308
{
3885 cbradney 309
        //bool atf;
118 Franz 310
        MergeDoc *dia = new MergeDoc(this, true);
311
        if (dia->exec())
161 Franz 312
        {
118 Franz 313
                qApp->setOverrideCursor(QCursor(waitCursor), true);
3885 cbradney 314
                int nr = currentDoc->Pages->count();
315
                //currentDoc->pageCount = 0;
316
                //atf = currentDoc->usesAutomaticTextFrames();
317
                //currentDoc->setUsesAutomaticTextFrames(false);
318
                //emit createNew(nr);
319
                QString MasterPageName(dia->getMasterPageNameText());
320
                QString MasterPageName2(MasterPageName);
321
                int copyC = 1;
322
                while (currentDoc->MasterNames.contains(MasterPageName2))
323
                {
324
                        MasterPageName2 = tr("Copy #%1 of ").arg(copyC)+MasterPageName;
325
                        copyC++;
326
                }
4286 cbradney 327
                currentDoc->currentPage=currentDoc->addMasterPage(nr, MasterPageName2);
118 Franz 328
                qApp->processEvents();
4619 cbradney 329
                //CB TODO: If we are loading to a new name, we rely on doc->onpage in 
330
                //FileLoader::PasteItem as this call doesnt pass in the new destination page
4678 cbradney 331
                ScMW->loadPage(dia->getFromDoc(), dia->getMasterPageNameItem(), true, MasterPageName2);
118 Franz 332
                qApp->processEvents();
3885 cbradney 333
                /*
3724 cbradney 334
                MasterPageName = currentDoc->Pages->at(nr)->PageNam;
2093 cbradney 335
                MasterPageName2 = MasterPageName;
118 Franz 336
                int copyC = 1;
2093 cbradney 337
                while (currentDoc->MasterNames.contains(MasterPageName2))
161 Franz 338
                {
2093 cbradney 339
                        MasterPageName2 = tr("Copy #%1 of ").arg(copyC)+MasterPageName;
118 Franz 340
                        copyC++;
161 Franz 341
                }
2093 cbradney 342
                currentDoc->MasterNames.insert(MasterPageName2, nr);
3724 cbradney 343
                currentDoc->Pages->at(nr)->setPageName(MasterPageName2);
344
                currentDoc->Pages->at(nr)->MPageNam = "";
3885 cbradney 345
                */
2093 cbradney 346
                updateMasterPageList(MasterPageName2);
3885 cbradney 347
                //currentDoc->setUsesAutomaticTextFrames(atf);
2093 cbradney 348
                currentView->showMasterPage(currentDoc->MasterNames[MasterPageName2]);
118 Franz 349
                qApp->setOverrideCursor(QCursor(arrowCursor), true);
3724 cbradney 350
                //currentDoc->MasterPages = currentDoc->Pages;
3691 cbradney 351
                emit docAltered();
161 Franz 352
        }
118 Franz 353
        delete dia;
354
}
355
 
2093 cbradney 356
void MasterPagesPalette::selectMasterPage(QListBoxItem *item)
3 paul 357
{
923 cbradney 358
        sMuster = item->text();
359
        deleteButton->setEnabled(currentDoc->MasterNames.count() == 1 ? false : true);
225 Franz 360
        if (sMuster == tr("Normal"))
361
        {
362
                sMuster = "Normal";
923 cbradney 363
                deleteButton->setEnabled(false);
225 Franz 364
        }
161 Franz 365
        else
923 cbradney 366
                deleteButton->setEnabled(true);
2093 cbradney 367
        currentView->showMasterPage(currentDoc->MasterNames[sMuster]);
3 paul 368
}
369
 
2093 cbradney 370
void MasterPagesPalette::selectMasterPage(QString name)
1268 fschmid 371
{
372
        sMuster = name;
373
        deleteButton->setEnabled(currentDoc->MasterNames.count() == 1 ? false : true);
374
        if (sMuster == tr("Normal"))
375
        {
376
                sMuster = "Normal";
377
                deleteButton->setEnabled(false);
378
        }
379
        else
380
                deleteButton->setEnabled(true);
2093 cbradney 381
        currentView->showMasterPage(currentDoc->MasterNames[sMuster]);
1268 fschmid 382
}
383
 
2093 cbradney 384
void MasterPagesPalette::updateMasterPageList(QString MasterPageName)
3 paul 385
{
2093 cbradney 386
        masterPageData->clear();
923 cbradney 387
        for (QMap<QString,int>::Iterator it = currentDoc->MasterNames.begin(); it != currentDoc->MasterNames.end(); ++it)
2093 cbradney 388
                masterPageData->insertItem(it.key() == "Normal" ? tr("Normal") : it.key());
923 cbradney 389
        deleteButton->setEnabled(currentDoc->MasterNames.count() == 1 ? false : true);
2093 cbradney 390
        if (MasterPageName == "Normal")
225 Franz 391
        {
2093 cbradney 392
                MasterPageName = tr("Normal");
923 cbradney 393
                deleteButton->setEnabled(false);
225 Franz 394
        }
2093 cbradney 395
        masterPageData->setSelected(masterPageData->index(masterPageData->findItem(MasterPageName)), true);
3 paul 396
}
397