Subversion Repositories Scribus

Rev

Rev 3745 | Rev 4201 | 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
 
3544 avox 26
PDF_Opts::PDF_Opts( 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;
245 Franz 37
        PDFOptsLayout = new QVBoxLayout( this );
38
        PDFOptsLayout->setSpacing( 5 );
3082 fschmid 39
        PDFOptsLayout->setMargin( 10 );
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 );
68
        PDFOptsLayout->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 );
245 Franz 72
        PDFOptsLayout->addWidget( Options );
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 );
84
        PDFOptsLayout->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
 
3388 fschmid 101
void PDF_Opts::enableSave()
102
{
103
        OK->setEnabled(true);
104
}
105
 
106
void PDF_Opts::disableSave()
107
{
108
        OK->setEnabled(false);
109
}
110
 
248 Franz 111
void PDF_Opts::DoExport()
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
 
3 paul 132
void PDF_Opts::ChangeFile()
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
 
2727 cbradney 150
void PDF_Opts::fileNameChanged()
2725 cbradney 151
{
2834 cbradney 152
        fileNameLineEdit->setText(checkFileExtension(fileNameLineEdit->text(),"pdf"));
2725 cbradney 153
}
3059 cbradney 154
 
155
void PDF_Opts::updateDocOptions()
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();
184
        int pgl = PDFOptions::SinglePage;
185
        if (Options->singlePage->isChecked())
186
                pgl = PDFOptions::SinglePage;
187
        else if (Options->continuousPages->isChecked())
188
                pgl = PDFOptions::OneColumn;
189
        else if (Options->doublePageLeft->isChecked())
190
                pgl = PDFOptions::TwoColumnLeft;
191
        else if (Options->doublePageRight->isChecked())
192
                pgl = PDFOptions::TwoColumnRight;
193
        Opts->PageLayout = pgl;
194
        if (Options->actionCombo->currentItem() != 0)
195
                Opts->openAction = Options->actionCombo->currentText();
196
        else
197
                Opts->openAction = "";
3059 cbradney 198
        if (Options->Encry->isChecked())
199
        {
200
                int Perm = -64;
201
                if (Options->PDFVersionCombo->currentItem() == 1)
202
                        Perm &= ~0x00240000;
203
                if (Options->PrintSec->isChecked())
204
                        Perm += 4;
205
                if (Options->ModifySec->isChecked())
206
                        Perm += 8;
207
                if (Options->CopySec->isChecked())
208
                        Perm += 16;
209
                if (Options->AddSec->isChecked())
210
                        Perm += 32;
211
                Opts->Permissions = Perm;
212
                Opts->PassOwner = Options->PassOwner->text();
213
                Opts->PassUser = Options->PassUser->text();
214
        }
215
        if (Options->PDFVersionCombo->currentItem() == 0)
216
                Opts->Version = PDFOptions::PDFVersion_13;
217
        if (Options->PDFVersionCombo->currentItem() == 1)
218
                Opts->Version = PDFOptions::PDFVersion_14;
219
        if (Options->PDFVersionCombo->currentItem() == 2)
220
                Opts->Version = PDFOptions::PDFVersion_15;
221
        if (Options->PDFVersionCombo->currentItem() == 3)
222
                Opts->Version = PDFOptions::PDFVersion_X3;
223
        if (Options->OutCombo->currentItem() == 0)
224
        {
225
                Opts->UseRGB = true;
226
                Opts->isGrayscale = false;
227
                Opts->UseProfiles = false;
228
                Opts->UseProfiles2 = false;
229
        }
230
        else
231
        {
232
                if (Options->OutCombo->currentItem() == 2)
233
                {
234
                        Opts->isGrayscale = true;
235
                        Opts->UseRGB = false;
236
                        Opts->UseProfiles = false;
237
                        Opts->UseProfiles2 = false;
238
                }
239
                else
240
                {
241
                        Opts->isGrayscale = false;
242
                        Opts->UseRGB = false;
243
#ifdef HAVE_CMS
244
                        if (CMSuse)
245
                        {
246
                                Opts->UseProfiles = Options->EmbedProfs->isChecked();
247
                                Opts->UseProfiles2 = Options->EmbedProfs2->isChecked();
248
                                Opts->Intent = Options->IntendS->currentItem();
249
                                Opts->Intent2 = Options->IntendI->currentItem();
250
                                Opts->EmbeddedI = Options->NoEmbedded->isChecked();
251
                                Opts->SolidProf = Options->SolidPr->currentText();
252
                                Opts->ImageProf = Options->ImageP->currentText();
253
                                Opts->PrintProf = Options->PrintProfC->currentText();
254
                                if (Opts->Version == PDFOptions::PDFVersion_X3)
255
                                {
256
                                        cmsHPROFILE hIn;
3745 craig 257
                                        QCString profilePath( (*appPrinterProfiles)[Opts->PrintProf].local8Bit() );
258
                                        hIn = cmsOpenProfileFromFile(profilePath.data(), "r");
3059 cbradney 259
                                        const char *Descriptor = cmsTakeProductDesc(hIn);
260
                                        cmsDescriptorName = QString(Descriptor);
261
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigRgbData)
262
                                                components = 3;
263
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigCmykData)
264
                                                components = 4;
265
                                        if (static_cast<int>(cmsGetColorSpace(hIn)) == icSigCmyData)
266
                                                components = 3;
267
                                        cmsCloseProfile(hIn);
268
                                        Opts->Info = Options->InfoString->text();
269
                                        Opts->BleedTop = Options->BleedTop->value()/docUnitRatio;
270
                                        Opts->BleedLeft = Options->BleedLeft->value()/docUnitRatio;
271
                                        Opts->BleedRight = Options->BleedRight->value()/docUnitRatio;
272
                                        Opts->BleedBottom = Options->BleedBottom->value()/docUnitRatio;
273
                                        Opts->Encrypt = false;
274
                                        Opts->MirrorH = false;
275
                                        Opts->MirrorV = false;
276
                                        Opts->RotateDeg = 0;
277
                                        Opts->PresentMode = false;
278
                                        Opts->Encrypt = false;
279
                                }
280
                        }
281
                        else
282
                        {
283
                                Opts->UseProfiles = false;
284
                                Opts->UseProfiles2 = false;
285
                        }
286
#else
287
                        Opts->UseProfiles = false;
288
                        Opts->UseProfiles2 = false;
289
#endif
290
                }
291
        }
292
}
293
 
294
const QString PDF_Opts::cmsDescriptor()
295
{
296
        return cmsDescriptorName;
297
}
298
 
299
const int PDF_Opts::colorSpaceComponents()
300
{
301
        return components;
302
}
3062 cbradney 303
 
304
const QString PDF_Opts::getPagesString()
305
{
306
        if (Options->AllPages->isChecked())
307
                return "*";
308
        return Options->PageNr->text();
309
}