Subversion Repositories Scribus

Rev

Rev 6955 | Rev 10309 | 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
 
4907 cbradney 69
        setMinimumSize(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*)));
6955 cbradney 81
        connect(masterPageData, SIGNAL(doubleClicked(QListBoxItem*)), this, SLOT(renameMasterPage( QListBoxItem*)));
3 paul 82
}
83
 
2093 cbradney 84
void MasterPagesPalette::reject()
1830 fschmid 85
{
86
        emit finished();
87
        QDialog::reject();
88
}
89
 
2093 cbradney 90
void MasterPagesPalette::closeEvent(QCloseEvent *closeEvent)
3 paul 91
{
923 cbradney 92
        emit finished();
93
        closeEvent->accept();
3 paul 94
}
95
 
2093 cbradney 96
void MasterPagesPalette::deleteMasterPage()
3 paul 97
{
98
        if (sMuster == "Normal")
99
                return;
3953 cbradney 100
        int exit=ScMessageBox::warning(this,
3510 cbradney 101
                                      CommonStrings::trWarning,
2093 cbradney 102
                                      tr("Do you really want to delete this master page?"),
3953 cbradney 103
                                      tr("&Yes"),
348 Franz 104
                                      tr("&No"),
225 Franz 105
                                      0, QMessageBox::No, QMessageBox::Yes);
3953 cbradney 106
        if (exit == 0)
225 Franz 107
        {
4069 craig 108
                ScMW->DeletePage2(currentDoc->MasterNames[sMuster]);
4615 cbradney 109
                //<<CB TODO Move back into ScribusDoc::deleteMasterPage();
110
                //This must happen after the pages have been reformed (view/doc)
10158 jghali 111
                currentDoc->rebuildMasterNames();
4615 cbradney 112
                // and fix up any pages that refer to the deleted master page
10158 jghali 113
                currentDoc->replaceMasterPage(sMuster);
4615 cbradney 114
                //>>
115
 
3 paul 116
                sMuster = "Normal";
2093 cbradney 117
                updateMasterPageList(sMuster);
3724 cbradney 118
                //currentDoc->MasterPages = currentDoc->Pages;
3691 cbradney 119
                emit docAltered();
161 Franz 120
        }
3 paul 121
}
122
 
2093 cbradney 123
void MasterPagesPalette::duplicateMasterPage()
3 paul 124
{
2093 cbradney 125
        QString MasterPageName;
225 Franz 126
        int nr;
3885 cbradney 127
        //bool atf;
1065 cbradney 128
        struct CopyPasteBuffer Buffer;
4577 cbradney 129
        NewTm *dia = new NewTm(this, tr("&Name:"), tr("New Master Page"), currentDoc, tr("Copy of %1").arg(sMuster));
225 Franz 130
        if (dia->exec())
131
        {
2093 cbradney 132
                MasterPageName = dia->Answer->text();
133
                while (currentDoc->MasterNames.contains(MasterPageName) || (MasterPageName == "Normal"))
225 Franz 134
                {
135
                        if (!dia->exec())
136
                        {
137
                                delete dia;
138
                                return;
139
                        }
2093 cbradney 140
                        MasterPageName = dia->Answer->text();
225 Franz 141
                }
3724 cbradney 142
                nr = currentDoc->Pages->count();
3885 cbradney 143
                //currentDoc->MasterNames.insert(MasterPageName, nr);
144
                //currentDoc->pageCount = 0;
145
                //atf = currentDoc->usesAutomaticTextFrames();
146
                //currentDoc->setUsesAutomaticTextFrames(false);
147
                //emit createNew(nr);
3906 cbradney 148
                currentDoc->currentPage=currentDoc->addMasterPage(nr, MasterPageName);
2891 cbradney 149
                currentDoc->setLoading(true);
3035 fschmid 150
                if (currentDoc->currentPageLayout != singlePage)
151
                {
152
                        int lp = dia->Links->currentItem();
153
                        if (lp == 0)
154
                                lp = 1;
155
                        else if (lp == static_cast<int>(dia->Links->count()-1))
156
                                lp = 0;
157
                        else
158
                                lp++;
3724 cbradney 159
                        currentDoc->Pages->at(nr)->LeftPg = lp;
3035 fschmid 160
                }
923 cbradney 161
                int inde = currentDoc->MasterNames[sMuster];
457 fschmid 162
                QMap<int,int> TableID;
234 Franz 163
                QPtrList<PageItem> TableItems;
164
                TableID.clear();
165
                TableItems.clear();
3724 cbradney 166
                if (currentDoc->Pages->at(inde)->YGuides.count() != 0)
449 fschmid 167
                {
1065 cbradney 168
                        currentDoc->currentPage->YGuides.clear();
3724 cbradney 169
                        for (uint y = 0; y < currentDoc->Pages->at(inde)->YGuides.count(); ++y)
449 fschmid 170
                        {
3724 cbradney 171
                                currentDoc->currentPage->YGuides.append(currentDoc->Pages->at(inde)->YGuides[y]);
449 fschmid 172
                        }
1065 cbradney 173
                        qHeapSort(currentDoc->currentPage->YGuides);
449 fschmid 174
                }
3724 cbradney 175
                if (currentDoc->Pages->at(inde)->XGuides.count() != 0)
449 fschmid 176
                {
3187 fschmid 177
                        currentDoc->currentPage->XGuides.clear();
3724 cbradney 178
                        for (uint x = 0; x < currentDoc->Pages->at(inde)->XGuides.count(); ++x)
449 fschmid 179
                        {
3724 cbradney 180
                                currentDoc->currentPage->XGuides.append(currentDoc->Pages->at(inde)->XGuides[x]);
449 fschmid 181
                        }
1065 cbradney 182
                        qHeapSort(currentDoc->currentPage->XGuides);
449 fschmid 183
                }
3727 cbradney 184
                uint end = currentDoc->Items->count();
3318 fschmid 185
                int GrMax = currentDoc->GroupCounter;
457 fschmid 186
                for (uint a = 0; a < end; ++a)
161 Franz 187
                {
3727 cbradney 188
                        PageItem *itemToCopy = currentDoc->Items->at(a);
189
                        if (currentDoc->Items->at(a)->OwnPage == inde)
234 Franz 190
                        {
3318 fschmid 191
                                itemToCopy->copyToCopyPasteBuffer(&Buffer);
192
                                if (itemToCopy->Groups.count() != 0)
193
                                {
194
                                        Buffer.Groups.clear();
195
                                        QValueStack<int>::Iterator nx;
196
                                        QValueStack<int> tmpGroup;
197
                                        for (nx = itemToCopy->Groups.begin(); nx != itemToCopy->Groups.end(); ++nx)
198
                                        {
199
                                                tmpGroup.push((*nx)+currentDoc->GroupCounter);
200
                                                GrMax = QMAX(GrMax, (*nx)+currentDoc->GroupCounter);
201
                                        }
202
                                        for (nx = tmpGroup.begin(); nx != tmpGroup.end(); ++nx)
203
                                        {
204
                                                Buffer.Groups.push((*nx));
205
                                        }
206
                                }
923 cbradney 207
                                currentView->PasteItem(&Buffer, true, true);
3727 cbradney 208
                                PageItem* Neu = currentDoc->Items->at(currentDoc->Items->count()-1);
3318 fschmid 209
                                Neu->OnMasterPage = MasterPageName;
457 fschmid 210
                                if (Neu->isTableItem)
211
                                {
212
                                        TableItems.append(Neu);
213
                                        TableID.insert(a, Neu->ItemNr);
214
                                }
234 Franz 215
                        }
161 Franz 216
                }
234 Franz 217
                if (TableItems.count() != 0)
218
                {
219
                        for (uint ttc = 0; ttc < TableItems.count(); ++ttc)
220
                        {
221
                                PageItem* ta = TableItems.at(ttc);
222
                                if (ta->TopLinkID != -1)
3727 cbradney 223
                                        ta->TopLink = currentDoc->Items->at(TableID[ta->TopLinkID]);
234 Franz 224
                                else
225
                                        ta->TopLink = 0;
226
                                if (ta->LeftLinkID != -1)
3727 cbradney 227
                                        ta->LeftLink = currentDoc->Items->at(TableID[ta->LeftLinkID]);
234 Franz 228
                                else
229
                                        ta->LeftLink = 0;
230
                                if (ta->RightLinkID != -1)
3727 cbradney 231
                                        ta->RightLink = currentDoc->Items->at(TableID[ta->RightLinkID]);
234 Franz 232
                                else
233
                                        ta->RightLink = 0;
234
                                if (ta->BottomLinkID != -1)
3727 cbradney 235
                                        ta->BottomLink = currentDoc->Items->at(TableID[ta->BottomLinkID]);
234 Franz 236
                                else
237
                                        ta->BottomLink = 0;
238
                        }
239
                }
923 cbradney 240
                currentView->Deselect(true);
241
                currentView->DrawNew();
3885 cbradney 242
                //currentDoc->Pages->at(nr)->setPageName(MasterPageName);
243
                //currentDoc->Pages->at(nr)->MPageNam = "";
2093 cbradney 244
                updateMasterPageList(MasterPageName);
3885 cbradney 245
                //currentDoc->setUsesAutomaticTextFrames(atf);
3724 cbradney 246
                //currentDoc->MasterPages = currentDoc->Pages;
2891 cbradney 247
                currentDoc->setLoading(false);
1756 fschmid 248
                currentView->DrawNew();
3318 fschmid 249
                currentDoc->GroupCounter = GrMax + 1;
3691 cbradney 250
                emit docAltered();
225 Franz 251
        }
252
        delete dia;
3 paul 253
}
254
 
2093 cbradney 255
void MasterPagesPalette::newMasterPage()
3 paul 256
{
2093 cbradney 257
        QString MasterPageName;
4287 cbradney 258
        int nr = currentDoc->Pages->count();
4577 cbradney 259
        NewTm *dia = new NewTm(this, tr("Name:"), tr("New MasterPage"), currentDoc, tr("New Master Page %1").arg(nr));
225 Franz 260
        if (dia->exec())
261
        {
2093 cbradney 262
                MasterPageName = dia->Answer->text();
263
                while (currentDoc->MasterNames.contains(MasterPageName) || (MasterPageName == "Normal"))
225 Franz 264
                {
265
                        if (!dia->exec())
266
                        {
267
                                delete dia;
268
                                return;
269
                        }
2093 cbradney 270
                        MasterPageName = dia->Answer->text();
225 Franz 271
                }
3906 cbradney 272
                currentDoc->currentPage=currentDoc->addMasterPage(nr, MasterPageName);
3787 cbradney 273
 
274
                //currentDoc->MasterNames.insert(MasterPageName, nr);
275
                //currentDoc->pageCount = 0;
276
                //atf = currentDoc->usesAutomaticTextFrames();
277
                //currentDoc->setUsesAutomaticTextFrames(false);
278
                //emit createNew(nr);
3035 fschmid 279
                if (currentDoc->currentPageLayout != singlePage)
280
                {
281
                        int lp = dia->Links->currentItem();
282
                        if (lp == 0)
283
                                lp = 1;
284
                        else if (lp == static_cast<int>(dia->Links->count()-1))
285
                                lp = 0;
286
                        else
287
                                lp++;
3724 cbradney 288
                        currentDoc->Pages->at(nr)->LeftPg = lp;
3035 fschmid 289
                }
3787 cbradney 290
                //currentDoc->Pages->at(nr)->setPageName(MasterPageName);
291
                //currentDoc->Pages->at(nr)->MPageNam = "";
2093 cbradney 292
                updateMasterPageList(MasterPageName);
3787 cbradney 293
                //currentDoc->setUsesAutomaticTextFrames(atf);
2093 cbradney 294
                currentView->showMasterPage(currentDoc->MasterNames[MasterPageName]);
3035 fschmid 295
                currentView->reformPages();
3724 cbradney 296
                //currentDoc->MasterPages = currentDoc->Pages;
3691 cbradney 297
                emit docAltered();
225 Franz 298
        }
299
        delete dia;
3 paul 300
}
301
 
2093 cbradney 302
void MasterPagesPalette::appendPage()
118 Franz 303
{
3885 cbradney 304
        //bool atf;
118 Franz 305
        MergeDoc *dia = new MergeDoc(this, true);
306
        if (dia->exec())
161 Franz 307
        {
118 Franz 308
                qApp->setOverrideCursor(QCursor(waitCursor), true);
3885 cbradney 309
                int nr = currentDoc->Pages->count();
310
                //currentDoc->pageCount = 0;
311
                //atf = currentDoc->usesAutomaticTextFrames();
312
                //currentDoc->setUsesAutomaticTextFrames(false);
313
                //emit createNew(nr);
314
                QString MasterPageName(dia->getMasterPageNameText());
315
                QString MasterPageName2(MasterPageName);
316
                int copyC = 1;
317
                while (currentDoc->MasterNames.contains(MasterPageName2))
318
                {
319
                        MasterPageName2 = tr("Copy #%1 of ").arg(copyC)+MasterPageName;
320
                        copyC++;
321
                }
4286 cbradney 322
                currentDoc->currentPage=currentDoc->addMasterPage(nr, MasterPageName2);
118 Franz 323
                qApp->processEvents();
4619 cbradney 324
                //CB TODO: If we are loading to a new name, we rely on doc->onpage in 
325
                //FileLoader::PasteItem as this call doesnt pass in the new destination page
4684 cbradney 326
                ScMW->loadPage(dia->getFromDoc(), dia->getMasterPageNameItem(), true, MasterPageName2);
118 Franz 327
                qApp->processEvents();
3885 cbradney 328
                /*
3724 cbradney 329
                MasterPageName = currentDoc->Pages->at(nr)->PageNam;
2093 cbradney 330
                MasterPageName2 = MasterPageName;
118 Franz 331
                int copyC = 1;
2093 cbradney 332
                while (currentDoc->MasterNames.contains(MasterPageName2))
161 Franz 333
                {
2093 cbradney 334
                        MasterPageName2 = tr("Copy #%1 of ").arg(copyC)+MasterPageName;
118 Franz 335
                        copyC++;
161 Franz 336
                }
2093 cbradney 337
                currentDoc->MasterNames.insert(MasterPageName2, nr);
3724 cbradney 338
                currentDoc->Pages->at(nr)->setPageName(MasterPageName2);
339
                currentDoc->Pages->at(nr)->MPageNam = "";
3885 cbradney 340
                */
2093 cbradney 341
                updateMasterPageList(MasterPageName2);
3885 cbradney 342
                //currentDoc->setUsesAutomaticTextFrames(atf);
2093 cbradney 343
                currentView->showMasterPage(currentDoc->MasterNames[MasterPageName2]);
118 Franz 344
                qApp->setOverrideCursor(QCursor(arrowCursor), true);
3724 cbradney 345
                //currentDoc->MasterPages = currentDoc->Pages;
3691 cbradney 346
                emit docAltered();
161 Franz 347
        }
118 Franz 348
        delete dia;
349
}
350
 
2093 cbradney 351
void MasterPagesPalette::selectMasterPage(QListBoxItem *item)
3 paul 352
{
923 cbradney 353
        sMuster = item->text();
354
        deleteButton->setEnabled(currentDoc->MasterNames.count() == 1 ? false : true);
225 Franz 355
        if (sMuster == tr("Normal"))
356
        {
357
                sMuster = "Normal";
923 cbradney 358
                deleteButton->setEnabled(false);
225 Franz 359
        }
161 Franz 360
        else
923 cbradney 361
                deleteButton->setEnabled(true);
2093 cbradney 362
        currentView->showMasterPage(currentDoc->MasterNames[sMuster]);
3 paul 363
}
364
 
2093 cbradney 365
void MasterPagesPalette::selectMasterPage(QString name)
1268 fschmid 366
{
367
        sMuster = name;
368
        deleteButton->setEnabled(currentDoc->MasterNames.count() == 1 ? false : true);
369
        if (sMuster == tr("Normal"))
370
        {
371
                sMuster = "Normal";
372
                deleteButton->setEnabled(false);
373
        }
374
        else
375
                deleteButton->setEnabled(true);
2093 cbradney 376
        currentView->showMasterPage(currentDoc->MasterNames[sMuster]);
1268 fschmid 377
}
378
 
2093 cbradney 379
void MasterPagesPalette::updateMasterPageList(QString MasterPageName)
3 paul 380
{
2093 cbradney 381
        masterPageData->clear();
923 cbradney 382
        for (QMap<QString,int>::Iterator it = currentDoc->MasterNames.begin(); it != currentDoc->MasterNames.end(); ++it)
2093 cbradney 383
                masterPageData->insertItem(it.key() == "Normal" ? tr("Normal") : it.key());
923 cbradney 384
        deleteButton->setEnabled(currentDoc->MasterNames.count() == 1 ? false : true);
2093 cbradney 385
        if (MasterPageName == "Normal")
225 Franz 386
        {
2093 cbradney 387
                MasterPageName = tr("Normal");
923 cbradney 388
                deleteButton->setEnabled(false);
225 Franz 389
        }
2093 cbradney 390
        masterPageData->setSelected(masterPageData->index(masterPageData->findItem(MasterPageName)), true);
3 paul 391
}
392
 
6955 cbradney 393
void MasterPagesPalette::renameMasterPage(QListBoxItem * item)
394
{
395
        QString oldName(item->text());
396
        if ((oldName == CommonStrings::masterPageNormal) || (oldName == CommonStrings::trMasterPageNormal) || (oldName == CommonStrings::trMasterPageNormalLeft) || (oldName == CommonStrings::trMasterPageNormalMiddle) || (oldName == CommonStrings::trMasterPageNormalRight))
397
        {
398
                QMessageBox::information( this, tr("Unable to Rename Master Page"), tr("The Normal page is not allowed to be renamed."), QMessageBox::Ok );
399
                return;
400
        }
401
        bool ok;
402
        QString newName = QInputDialog::getText(
403
                        tr("Rename Master Page"), tr("New Name:"), QLineEdit::Normal,
404
                        oldName, &ok, this );
405
        if (ok && !newName.isEmpty())
406
                if (currentDoc->renameMasterPage( oldName, newName))
407
                        updateMasterPageList(newName);
408
}