Subversion Repositories Scribus

Rev

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

Rev Author Line No. Line
638 fschmid 1
/***************************************************************************
2
 *                                                                         *
3
 *   This program is free software; you can redistribute it and/or modify  *
4
 *   it under the terms of the GNU General Public License as published by  *
5
 *   the Free Software Foundation; either version 2 of the License, or     *
6
 *   (at your option) any later version.                                   *
7
 *                                                                         *
8
 ***************************************************************************/
3 paul 9
#include "pdfopts.h"
10
#include "pdfopts.moc"
838 cbradney 11
 
3 paul 12
#include "customfdialog.h"
2856 cbradney 13
#include "prefsmanager.h"
415 Franz 14
#include "prefsfile.h"
806 cbradney 15
#include "units.h"
1972 craig 16
#include "pdfoptions.h"
2533 craig 17
#include "util.h"
2952 cbradney 18
#include "commonstrings.h"
2688 craig 19
#include "scconfig.h"
128 Franz 20
 
3 paul 21
#ifdef HAVE_CMS
22
extern bool CMSuse;
23
#endif
24
extern bool CMSavail;
25
 
4259 craig 26
PDFExportDialog::PDFExportDialog( QWidget* parent,  QString docFileName, QMap<QString,int> DocFonts, ScribusView *currView, PDFOptions *pdfOptions, QValueList<PDFPresentationData> Eff, ProfilesL *PDFXProfiles, SCFonts &AllFonts, double unitRatio, ProfilesL *printerProfiles)
245 Franz 27
                : QDialog( parent, "pdf", true, 0 )
3 paul 28
{
1987 cbradney 29
        setCaption( tr( "Save as PDF" ) );
245 Franz 30
        setIcon(loadIcon("AppIcon.png"));
31
        EffVal = Eff;
2727 cbradney 32
        Opts = pdfOptions;
3059 cbradney 33
        docUnitRatio=unitRatio;
34
        cmsDescriptorName="";
35
        components=3;
36
        appPrinterProfiles=printerProfiles;
4259 craig 37
        PDFExportLayout = new QVBoxLayout( this );
38
        PDFExportLayout->setSpacing( 5 );
39
        PDFExportLayout->setMargin( 10 );
3082 fschmid 40
        Name = new QGroupBox( this, "GroupBox" );
41
        Name->setTitle( tr( "O&utput to File:" ) );
42
        Name->setColumnLayout(0, Qt::Vertical );
43
        Name->layout()->setSpacing( 5 );
44
        Name->layout()->setMargin( 10 );
45
        NameLayout = new QGridLayout( Name->layout() );
46
        NameLayout->setAlignment( Qt::AlignTop );
47
        fileNameLineEdit = new QLineEdit( Name, "fileNameLineEdit" );
2727 cbradney 48
        fileNameLineEdit->setMinimumSize( QSize( 268, 22 ) );
2877 cbradney 49
        if (!pdfOptions->Datei.isEmpty())
2727 cbradney 50
                fileNameLineEdit->setText(pdfOptions->Datei);
167 Franz 51
        else
52
        {
2856 cbradney 53
                PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
2727 cbradney 54
                QFileInfo fi = QFileInfo(docFileName);
415 Franz 55
                QString pdfdir = dirs->get("pdf", fi.dirPath());
56
                if (pdfdir.right(1) != "/")
57
                        pdfdir += "/";
2727 cbradney 58
                fileNameLineEdit->setText(pdfdir+fi.baseName()+".pdf");
167 Franz 59
        }
3082 fschmid 60
        NameLayout->addWidget( fileNameLineEdit, 0, 0 );
61
        FileC = new QToolButton( Name, "FileC" );
341 Franz 62
        FileC->setText( tr( "Cha&nge..." ) );
245 Franz 63
        FileC->setMinimumSize( QSize( 88, 24 ) );
3082 fschmid 64
        NameLayout->addWidget( FileC, 0, 1 );
3085 mrdocs 65
        multiFile = new QCheckBox( tr( "Output one file for eac&h page" ), Name, "multiFile" );
3082 fschmid 66
        multiFile->setChecked(pdfOptions->doMultiFile);
67
        NameLayout->addWidget( multiFile, 1, 0 );
4259 craig 68
        PDFExportLayout->addWidget( Name );
2727 cbradney 69
        Options = new TabPDFOptions( this, pdfOptions, AllFonts, PDFXProfiles, DocFonts,
2965 cbradney 70
                                                                Eff, currView->Doc->unitIndex(), currView->Doc->pageHeight,
2727 cbradney 71
                                                                currView->Doc->pageWidth, currView );
4259 craig 72
        PDFExportLayout->addWidget( Options );
245 Franz 73
        Layout7 = new QHBoxLayout;
74
        Layout7->setSpacing( 5 );
75
        Layout7->setMargin( 0 );
76
        QSpacerItem* spacer_2 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum );
77
        Layout7->addItem( spacer_2 );
341 Franz 78
        OK = new QPushButton( tr( "&Save" ), this, "OK" );
245 Franz 79
        OK->setAutoDefault( true );
80
        OK->setDefault( true );
81
        Layout7->addWidget( OK );
2952 cbradney 82
        Cancel = new QPushButton( CommonStrings::tr_Cancel, this, "Cancel" );
245 Franz 83
        Layout7->addWidget( Cancel );
4259 craig 84
        PDFExportLayout->addLayout( Layout7 );
3388 fschmid 85
        if ((pdfOptions->Version == PDFOptions::PDFVersion_X3) && (Options->InfoString->text().isEmpty()))
86
                OK->setEnabled(false);
338 Franz 87
        resize(sizeHint());
88
//      setMaximumSize( sizeHint() );
3085 mrdocs 89
//tooltips
3090 mrdocs 90
        QToolTip::add( multiFile, "<qt>" + tr( "This enables exporting one individually named PDF file for each page in the document. Page numbers are added automatically. This is most useful for imposing PDF for commerical printing.") + "</qt>" );
245 Franz 91
        // signals and slots connections
92
        connect( FileC, SIGNAL( clicked() ), this, SLOT( ChangeFile() ) );
248 Franz 93
        connect( OK, SIGNAL( clicked() ), this, SLOT( DoExport() ) );
245 Franz 94
        connect( Cancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
2727 cbradney 95
        connect( fileNameLineEdit, SIGNAL( lostFocus() ), this, SLOT( fileNameChanged() ) );
96
        connect( fileNameLineEdit, SIGNAL( returnPressed() ), this, SLOT( fileNameChanged() ) );
3388 fschmid 97
        connect( Options, SIGNAL(noInfo()), this, SLOT(disableSave()));
98
        connect( Options, SIGNAL(hasInfo()), this, SLOT(enableSave()));
3 paul 99
}
100
 
4259 craig 101
void PDFExportDialog::enableSave()
3388 fschmid 102
{
103
        OK->setEnabled(true);
104
}
105
 
4259 craig 106
void PDFExportDialog::disableSave()
3388 fschmid 107
{
108
        OK->setEnabled(false);
109
}
110
 
4259 craig 111
void PDFExportDialog::DoExport()
248 Franz 112
{
2727 cbradney 113
        QString fn = fileNameLineEdit->text();
248 Franz 114
        if (overwrite(this, fn))
337 Franz 115
        {
1307 fschmid 116
                EffVal = Options->EffVal;
117
                EffVal[Options->PgSel].pageViewDuration = Options->PageTime->value();
118
                EffVal[Options->PgSel].pageEffectDuration = Options->EffectTime->value();
119
                EffVal[Options->PgSel].effectType = Options->EffectType->currentItem();
120
                EffVal[Options->PgSel].Dm = Options->EDirection->currentItem();
121
                EffVal[Options->PgSel].M = Options->EDirection_2->currentItem();
122
                EffVal[Options->PgSel].Di = Options->EDirection_2_2->currentItem();
123
                Opts->LPISettings[Options->SelLPIcolor].Frequency = Options->LPIfreq->value();
124
                Opts->LPISettings[Options->SelLPIcolor].Angle = Options->LPIangle->value();
125
                Opts->LPISettings[Options->SelLPIcolor].SpotFunc = Options->LPIfunc->currentItem();
248 Franz 126
                accept();
337 Franz 127
        }
248 Franz 128
        else
129
                return;
130
}
131
 
4259 craig 132
void PDFExportDialog::ChangeFile()
3 paul 133
{
134
        QString fn;
2856 cbradney 135
        PrefsContext* dirs = PrefsManager::instance()->prefsFile->getContext("dirs");
415 Franz 136
        QString wdir = dirs->get("pdf", ".");
137
        CustomFDialog dia(this, wdir, tr("Save as"), tr("PDF Files (*.pdf);;All Files (*)"), false, false);
2877 cbradney 138
        if (!fileNameLineEdit->text().isEmpty())
2727 cbradney 139
                dia.setSelection(fileNameLineEdit->text());
3 paul 140
        if (dia.exec() == QDialog::Accepted)
415 Franz 141
        {
3 paul 142
                fn = dia.selectedFile();
415 Franz 143
                dirs->set("pdf", fn.left(fn.findRev("/")));
144
        }
3 paul 145
        else
146
                return;
2727 cbradney 147
        fileNameLineEdit->setText(fn);
3 paul 148
}
2725 cbradney 149
 
4259 craig 150
void PDFExportDialog::fileNameChanged()
2725 cbradney 151
{
2834 cbradney 152
        fileNameLineEdit->setText(checkFileExtension(fileNameLineEdit->text(),"pdf"));
2725 cbradney 153
}
3059 cbradney 154
 
4259 craig 155
void PDFExportDialog::updateDocOptions()
3059 cbradney 156
{
157
        Opts->Datei = fileNameLineEdit->text();
3082 fschmid 158
        Opts->doMultiFile = multiFile->isChecked();
3059 cbradney 159
        Opts->Thumbnails = Options->CheckBox1->isChecked();
160
        Opts->Compress = Options->Compression->isChecked();
161
        Opts->CompressMethod = Options->CMethod->currentItem();
162
        Opts->Quality = Options->CQuality->currentItem();
163
        Opts->Resolution = Options->Resolution->value();
164
        Opts->EmbedList = Options->FontsToEmbed;
165
        Opts->SubsetList = Options->FontsToSubset;
166
        Opts->RecalcPic = Options->DSColor->isChecked();
167
        Opts->PicRes = Options->ValC->value();
168
        Opts->Bookmarks = Options->CheckBM->isChecked();
169
        Opts->Binding = Options->ComboBind->currentItem();
170
        Opts->MirrorH = Options->MirrorH->isOn();
171
        Opts->MirrorV = Options->MirrorV->isOn();
172
        Opts->RotateDeg = Options->RotateDeg->currentItem() * 90;
173
        Opts->PresentMode = Options->CheckBox10->isChecked();
174
        Opts->PresentVals = EffVal;
175
        Opts->Articles = Options->Article->isChecked();
176
        Opts->Encrypt = Options->Encry->isChecked();
177
        Opts->UseLPI = Options->UseLPI->isChecked();
178
        Opts->useLayers = Options->useLayers->isChecked();
3079 fschmid 179
        Opts->UseSpotColors = !Options->useSpot->isChecked();
4197 fschmid 180
        Opts->displayBookmarks = Options->useBookmarks->isChecked();
181
        Opts->displayFullscreen = Options->useFullScreen->isChecked();
182
        Opts->displayLayers = Options->useLayers2->isChecked();
183
        Opts->displayThumbs = Options->useThumbnails->isChecked();
4201 fschmid 184
        Opts->hideMenuBar = Options->hideMenuBar->isChecked();
185
        Opts->hideToolBar = Options->hideToolBar->isChecked();
186
        Opts->fitWindow = Options->fitWindow->isChecked();
4197 fschmid 187
        int pgl = PDFOptions::SinglePage;
188
        if (Options->singlePage->isChecked())
189
                pgl = PDFOptions::SinglePage;
190
        else if (Options->continuousPages->isChecked())
191
                pgl = PDFOptions::OneColumn;
192
        else if (Options->doublePageLeft->isChecked())
193
                pgl = PDFOptions::TwoColumnLeft;
194
        else if (Options->doublePageRight->isChecked())
195
                pgl = PDFOptions::TwoColumnRight;
196
        Opts->PageLayout = pgl;
197
        if (Options->actionCombo->currentItem() != 0)
198
                Opts->openAction = Options->actionCombo->currentText();
199
        else
200
                Opts->openAction = "";
3059 cbradney 201
        if (Options->Encry->isChecked())
202
        {
203
                int Perm = -64;
204
                if (Options->PDFVersionCombo->currentItem() == 1)
205
                        Perm &= ~0x00240000;
206
                if (Options->PrintSec->isChecked())
207
                        Perm += 4;
208
                if (Options->ModifySec->isChecked())
209
                        Perm += 8;
210
                if (Options->CopySec->isChecked())
211
                        Perm += 16;
212
                if (Options->AddSec->isChecked())
213
                        Perm += 32;
214
                Opts->Permissions = Perm;
215
                Opts->PassOwner = Options->PassOwner->text();
216
                Opts->PassUser = Options->PassUser->text();
217
        }
218
        if (Options->PDFVersionCombo->currentItem() == 0)
219
                Opts->Version = PDFOptions::PDFVersion_13;
220
        if (Options->PDFVersionCombo->currentItem() == 1)
221
                Opts->Version = PDFOptions::PDFVersion_14;
222
        if (Options->PDFVersionCombo->currentItem() == 2)
223
                Opts->Version = PDFOptions::PDFVersion_15;
224
        if (Options->PDFVersionCombo->currentItem() == 3)
225
                Opts->Version = PDFOptions::PDFVersion_X3;
226
        if (Options->OutCombo->currentItem() == 0)
227
        {
228
                Opts->UseRGB = true;
229
                Opts->isGrayscale = false;
230
                Opts->UseProfiles = false;
231
                Opts->UseProfiles2 = false;
232
        }
233
        else
234
        {
235
                if (Options->OutCombo->currentItem() == 2)
236
                {
237
                        Opts->isGrayscale = true;
238
                        Opts->UseRGB = false;
239
                        Opts->UseProfiles = false;
240
                        Opts->UseProfiles2 = false;
241
                }
242
                else
243
                {
244
                        Opts->isGrayscale = false;
245
                        Opts->UseRGB = false;
246
#ifdef HAVE_CMS
247
                        if (CMSuse)
248
                        {
249
                                Opts->UseProfiles = Options->EmbedProfs->isChecked();
250
                                Opts->UseProfiles2 = Options->EmbedProfs2->isChecked();
251
                                Opts->Intent = Options->IntendS->currentItem();
252
                                Opts->Intent2 = Options->IntendI->currentItem();
253
                                Opts->EmbeddedI = Options->NoEmbedded->isChecked();
254
                                Opts->SolidProf = Options->SolidPr->currentText();
255
                                Opts->ImageProf = Options->ImageP->currentText();
256
                                Opts->PrintProf = Options->PrintProfC->currentText();
257
                                if (Opts->Version == PDFOptions::PDFVersion_X3)
258
                                {
259
                                        cmsHPROFILE hIn;
3745 craig 260
                                        QCString profilePath( (*appPrinterProfiles)[Opts->PrintProf].local8Bit() );
261
                                        hIn = cmsOpenProfileFromFile(profilePath.data(), "r");
3059 cbradney 262
                                        const char *Descriptor = cmsTakeProductDesc(hIn);
263
                                        cmsDescriptorName = QString(Descriptor);
264
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigRgbData)
265
                                                components = 3;
266
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigCmykData)
267
                                                components = 4;
268
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigCmyData)
269
                                                components = 3;
270
                                        cmsCloseProfile(hIn);
271
                                        Opts->Info = Options->InfoString->text();
272
                                        Opts->BleedTop = Options->BleedTop->value()/docUnitRatio;
273
                                        Opts->BleedLeft = Options->BleedLeft->value()/docUnitRatio;
274
                                        Opts->BleedRight = Options->BleedRight->value()/docUnitRatio;
275
                                        Opts->BleedBottom = Options->BleedBottom->value()/docUnitRatio;
276
                                        Opts->Encrypt = false;
277
                                        Opts->MirrorH = false;
278
                                        Opts->MirrorV = false;
279
                                        Opts->RotateDeg = 0;
280
                                        Opts->PresentMode = false;
281
                                        Opts->Encrypt = false;
282
                                }
283
                        }
284
                        else
285
                        {
286
                                Opts->UseProfiles = false;
287
                                Opts->UseProfiles2 = false;
288
                        }
289
#else
290
                        Opts->UseProfiles = false;
291
                        Opts->UseProfiles2 = false;
292
#endif
293
                }
294
        }
295
}
296
 
4259 craig 297
const QString PDFExportDialog::cmsDescriptor()
3059 cbradney 298
{
299
        return cmsDescriptorName;
300
}
301
 
4259 craig 302
const int PDFExportDialog::colorSpaceComponents()
3059 cbradney 303
{
304
        return components;
305
}
3062 cbradney 306
 
4259 craig 307
const QString PDFExportDialog::getPagesString()
3062 cbradney 308
{
309
        if (Options->AllPages->isChecked())
310
                return "*";
311
        return Options->PageNr->text();
312
}