00001
00002
00003
00004
00005
00006
00007 #include "reformdoc.h"
00008
00009 #include <QColorDialog>
00010 #include <QCursor>
00011 #include <QSpinBox>
00012 #include <QToolTip>
00013 #include <QPixmap>
00014 #include <QStackedWidget>
00015
00016 #include "arrowchooser.h"
00017 #include "cmsprefs.h"
00018 #include "colorcombo.h"
00019 #include "commonstrings.h"
00020 #include "docinfo.h"
00021 #include "docitemattrprefs.h"
00022 #include "docsections.h"
00023 #include "fontcombo.h"
00024 #include "fontprefs.h"
00025 #include "hyphenator.h"
00026 #include "hysettings.h"
00027 #include "linecombo.h"
00028 #include "marginwidget.h"
00029 #include "page.h"
00030 #include "pagelayout.h"
00031 #include "pagesize.h"
00032 #include "polygonwidget.h"
00033 #include "prefsmanager.h"
00034 #include "propertiespalette.h"
00035 #include "sccombobox.h"
00036 #include "scribus.h"
00037 #include "scribuscore.h"
00038 #include "scrspinbox.h"
00039 #include "tabcheckdoc.h"
00040 #include "tabdisplay.h"
00041 #include "tabdocument.h"
00042 #include "tabguides.h"
00043 #include "tabpdfoptions.h"
00044 #include "tabtools.h"
00045 #include "tabtypography.h"
00046 #include "tocindexprefs.h"
00047 #include "units.h"
00048 #include "units.h"
00049 #include "util_icon.h"
00050
00051
00052
00053 ReformDoc::ReformDoc( QWidget* parent, ScribusDoc* doc ) : PrefsDialogBase( parent )
00054 {
00055 saveButton->hide();
00056 docUnitIndex = doc->unitIndex();
00057 currDoc = doc;
00058 ScMW = (ScribusMainWindow*)parent;
00059 unitRatio = doc->unitRatio();
00060 QString ein = unitGetSuffixFromIndex(docUnitIndex);
00061 decimals = unitGetDecimalsFromIndex(docUnitIndex);
00062
00063 setWindowTitle( tr( "Document Setup" ) );
00064 tabPage = new TabDocument( prefsWidgets, "tab", true );
00065 tabPage->hideReform();
00066 addItem( tr("Document"), loadIcon("scribusdoc.png"), tabPage);
00067
00068 docInfos = new DocInfos(prefsWidgets, doc->documentInfo);
00069 addItem( tr("Document Information"), loadIcon("documentinfo32.png"), docInfos);
00070
00071 tabGuides = new TabGuides(prefsWidgets, &doc->guidesSettings, &doc->typographicSettings, docUnitIndex);
00072 addItem( tr("Guides"), loadIcon("guides.png"), tabGuides);
00073
00074 tabView = new TabDisplay( prefsWidgets, "tabView" );
00075 tabView->setDocSetupMode();
00076 addItem( tr("Display"), loadIcon("screen.png"), tabView);
00077
00078 tabTypo = new TabTypograpy( prefsWidgets, &doc->typographicSettings);
00079 addItem( tr("Typography"), loadIcon("typography.png"), tabTypo);
00080
00081 tabTools = new TabTools( prefsWidgets, &doc->toolSettings, docUnitIndex, doc);
00082 addItem( tr("Tools"), loadIcon("tools.png"), tabTools);
00083
00084 tabHyphenator = new HySettings(prefsWidgets, &ScMW->LangTransl);
00085 addItem( tr("Hyphenator"), loadIcon("hyphenate.png"), tabHyphenator);
00086
00087 tabFonts = new FontPrefs(prefsWidgets, true, PrefsManager::instance()->preferencesLocation(), doc);
00088 addItem( tr("Fonts"), loadIcon("font.png"), tabFonts);
00089
00090 tabDocChecker = new TabCheckDoc(prefsWidgets, doc->checkerProfiles, doc->curCheckProfile);
00091 addItem( tr("Preflight Verifier"), loadIcon("checkdoc.png"), tabDocChecker);
00092
00093 tabPDF = new TabPDFOptions( prefsWidgets, doc->PDF_Options, PrefsManager::instance()->appPrefs.AvailFonts,
00094 ScCore->PDFXProfiles, doc->UsedFonts, doc->PDF_Options.PresentVals,
00095 docUnitIndex, doc->pageHeight, doc->pageWidth, doc );
00096 addItem( tr("PDF Export"), loadIcon("acroread32.png"), tabPDF);
00097
00098 tabDocItemAttributes = new DocumentItemAttributes(prefsWidgets);
00099 docAttributesList=tabDocItemAttributes->getDocAttributesNames();
00100 tabDocItemAttributes->setup(&doc->docItemAttributes);
00101 addItem( tr("Document Item Attributes"), loadIcon("docattributes.png"), tabDocItemAttributes);
00102
00103 tabTOCIndexPrefs = new TOCIndexPrefs( prefsWidgets );
00104 tabTOCIndexPrefs->setupItemAttrs( docAttributesList );
00105 tabTOCIndexPrefs->setup(&(currDoc->docToCSetups), currDoc);
00106 addItem( tr("Table of Contents and Indexes"), loadIcon("tabtocindex.png"), tabTOCIndexPrefs);
00107
00108 tabDocSections = new DocSections(prefsWidgets);
00109 tabDocSections->setup(currDoc->sections, currDoc->DocPages.count()-1);
00110 addItem( tr("Sections"), loadIcon("tabtocindex.png"), tabDocSections);
00111
00112 int cmsTab = 0;
00113 if (ScCore->haveCMS())
00114 {
00115 tabColorManagement = new CMSPrefs(prefsWidgets, &doc->CMSSettings, &ScCore->InputProfiles, &ScCore->InputProfilesCMYK, &ScCore->PrinterProfiles, &ScCore->MonitorProfiles);
00116 cmsTab = addItem( tr("Color Management"), loadIcon("blend.png"), tabColorManagement);
00117 }
00118
00119 setDS(doc->currentPageLayout);
00120
00121
00122 connect(tabPage->docLayout, SIGNAL( selectedLayout(int) ), this, SLOT( setDS(int) ) );
00123 connect(tabPage->unitCombo, SIGNAL(activated(int)), this, SLOT(unitChange()));
00124 connect(backToDefaults, SIGNAL(clicked()), this, SLOT(restoreDefaults()));
00125 connect(applyChangesButton, SIGNAL(clicked()), this, SLOT(applyChangesButton_clicked()));
00126 connect(this, SIGNAL(aboutToShow(QWidget *)), this, SLOT(showWidgetInStack(QWidget *)));
00127
00128 if (ScCore->haveCMS())
00129 {
00130 prefsWidgets->setCurrentIndex(cmsTab);
00131 connect(tabColorManagement, SIGNAL(cmsOn(bool )), this, SLOT(switchCMS(bool )));
00132 }
00133 resize( minimumSizeHint() );
00134 prefsSelection->arrangeIcons();
00135 prefsSelection->item(0)->setSelected(true);
00136 itemSelected(prefsSelection->item(0));
00137 restoreDefaults();
00138 }
00139
00140 void ReformDoc::restoreDefaults()
00141 {
00142 ApplicationPrefs* prefsData=&(PrefsManager::instance()->appPrefs);
00143 tabPage->restoreDefaults(currDoc);
00144 tabView->restoreDefaults(prefsData, currDoc->guidesSettings, currDoc->pageSets, currDoc->currentPageLayout, currDoc->scratch);
00145 tabView->gapHorizontal->setValue(currDoc->GapHorizontal);
00146 tabView->gapVertical->setValue(currDoc->GapVertical);
00147 tabView->setPaperColor(currDoc->papColor);
00148 tabHyphenator->restoreDefaults(currDoc);
00149 tabGuides->restoreDefaults(&currDoc->guidesSettings, &currDoc->typographicSettings, docUnitIndex);
00150 tabTypo->restoreDefaults(&currDoc->typographicSettings);
00151 tabTools->restoreDefaults(&currDoc->toolSettings, docUnitIndex);
00152 tabFonts->restoreDefaults();
00153 tabDocChecker->restoreDefaults(&currDoc->checkerProfiles, currDoc->curCheckProfile);
00154 tabPDF->restoreDefaults(currDoc->PDF_Options, PrefsManager::instance()->appPrefs.AvailFonts,
00155 ScCore->PDFXProfiles, currDoc->UsedFonts, currDoc->PDF_Options.PresentVals,
00156 docUnitIndex, currDoc->pageHeight, currDoc->pageWidth, currDoc, false);
00157 if (ScCore->haveCMS())
00158 tabColorManagement->restoreDefaults(&currDoc->CMSSettings, &ScCore->InputProfiles,
00159 &ScCore->InputProfilesCMYK,
00160 &ScCore->PrinterProfiles, &ScCore->MonitorProfiles);
00161 docInfos->restoreDefaults();
00162
00163 unitChange();
00164 }
00165
00166 void ReformDoc::unitChange()
00167 {
00168 double oldUnitRatio = unitRatio;
00169 docUnitIndex = tabPage->unitCombo->currentIndex();
00170 unitRatio = unitGetRatioFromIndex(docUnitIndex);
00171 QString suffix = unitGetSuffixFromIndex(docUnitIndex);
00172 double invUnitConversion = 1.0 / oldUnitRatio * unitRatio;
00173 tabPage->unitChange();
00174 tabGuides->unitChange(suffix, docUnitIndex, invUnitConversion);
00175 tabView->unitChange(docUnitIndex);
00176 tabTools->unitChange(docUnitIndex);
00177 tabPDF->unitChange(suffix, docUnitIndex, invUnitConversion);
00178 }
00179
00180 void ReformDoc::setDS(int layout)
00181 {
00182 tabPage->marginGroup->setFacingPages(!(layout == singlePage));
00183 tabPage->choosenLayout = layout;
00184 tabPage->docLayout->firstPage->setCurrentIndex(currDoc->pageSets[tabPage->choosenLayout].FirstPage);
00185
00186
00187
00188
00189 }
00190
00191 void ReformDoc::switchCMS(bool enable)
00192 {
00193 tabPDF->enableCMS(enable);
00194 }
00195
00196 void ReformDoc::showWidgetInStack(QWidget *widgetToShow)
00197 {
00198
00199 if (widgetToShow==tabTOCIndexPrefs)
00200 tabTOCIndexPrefs->setupItemAttrs( tabDocItemAttributes->getDocAttributesNames() );
00201 if (widgetToShow == tabTools)
00202 tabTools->enableFontPreview(true);
00203 }
00204
00205 const int ReformDoc::getSelectedUnit()
00206 {
00207 return tabPage->unitCombo->currentIndex();
00208 }
00209
00210 const bool ReformDoc::colorManagementSettingsChanged()
00211 {
00212 return ScCore->haveCMS() && tabColorManagement->changed;
00213 }
00214
00215 const bool ReformDoc::imageResolutionChanged()
00216 {
00217 return viewToRecalcPictureRes;
00218 }
00219
00220 void ReformDoc::updateDocumentSettings()
00221 {
00222 double tpr2, lr2, rr2, br2;
00223 tpr2 = tabPage->marginGroup->top();
00224 br2 = tabPage->marginGroup->bottom();
00225 lr2 = tabPage->marginGroup->left();
00226 rr2 = tabPage->marginGroup->right();
00227 int fp = tabPage->choosenLayout;
00228 currDoc->pageSets[fp].FirstPage = tabPage->docLayout->firstPage->currentIndex();
00229
00230 currDoc->GapVertical = tabView->gapVertical->value() / currDoc->unitRatio();
00231 currDoc->GapHorizontal = tabView->gapHorizontal->value() / currDoc->unitRatio();
00232
00233
00234 currDoc->resetPage(tpr2, lr2, rr2, br2, fp);
00235 currDoc->PageOri = tabPage->pageOrientationComboBox->currentIndex();
00236 currDoc->m_pageSize = tabPage->prefsPageSizeName;
00237 currDoc->pageWidth = tabPage->pageW;
00238 currDoc->pageHeight = tabPage->pageH;
00239 double TopD = tabView->topScratch->value() / currDoc->unitRatio() - currDoc->scratch.Top;
00240 double LeftD = tabView->leftScratch->value() / currDoc->unitRatio() - currDoc->scratch.Left;
00241 currDoc->scratch.Bottom = tabView->bottomScratch->value() / currDoc->unitRatio();
00242 currDoc->scratch.Left = tabView->leftScratch->value() / currDoc->unitRatio();
00243 currDoc->scratch.Right = tabView->rightScratch->value() / currDoc->unitRatio();
00244 currDoc->scratch.Top = tabView->topScratch->value() / currDoc->unitRatio();
00245 currDoc->bleeds.Bottom = tabPage->marginGroup->bottomBleed();
00246 currDoc->bleeds.Top = tabPage->marginGroup->topBleed();
00247 currDoc->bleeds.Left = tabPage->marginGroup->leftBleed();
00248 currDoc->bleeds.Right = tabPage->marginGroup->rightBleed();
00249 for (int p = 0; p < currDoc->Pages->count(); ++p)
00250 {
00251 Page *pp = currDoc->Pages->at(p);
00252 if (tabPage->sizeAllPages->isChecked())
00253 {
00254 pp->setInitialWidth(currDoc->pageWidth);
00255 pp->setInitialHeight(currDoc->pageHeight);
00256 pp->setHeight(currDoc->pageHeight);
00257 pp->setWidth(currDoc->pageWidth);
00258 pp->m_pageSize = currDoc->m_pageSize;
00259 pp->PageOri = currDoc->PageOri;
00260 }
00261 if (tabPage->marginGroup->getMarginsForAllPages())
00262 {
00263 pp->initialMargins.Left = lr2;
00264 pp->initialMargins.Right = rr2;
00265 pp->initialMargins.Top = tpr2;
00266 pp->initialMargins.Bottom = br2;
00267 }
00268 }
00269 for (int p = 0; p < currDoc->MasterPages.count(); ++p)
00270 {
00271 Page *pp = currDoc->MasterPages.at(p);
00272 if (tabPage->sizeAllMasterPages->isChecked())
00273 {
00274 pp->setInitialWidth(currDoc->pageWidth);
00275 pp->setInitialHeight(currDoc->pageHeight);
00276 pp->setHeight(currDoc->pageHeight);
00277 pp->setWidth(currDoc->pageWidth);
00278 pp->m_pageSize = currDoc->m_pageSize;
00279 pp->PageOri = currDoc->PageOri;
00280 }
00281 if (tabPage->marginGroup->getMarginsForAllMasterPages())
00282 {
00283 pp->initialMargins.Left = lr2;
00284 pp->initialMargins.Right = rr2;
00285 pp->initialMargins.Top = tpr2;
00286 pp->initialMargins.Bottom = br2;
00287 }
00288 pp->setXOffset(currDoc->scratch.Left);
00289 pp->setYOffset(currDoc->scratch.Top);
00290 }
00291 uint docItemsCount = currDoc->MasterItems.count();
00292 for (uint ite = 0; ite < docItemsCount; ++ite)
00293 {
00294 PageItem *item = currDoc->MasterItems.at(ite);
00295 item->moveBy(LeftD, TopD);
00296 item->setRedrawBounding();
00297 }
00298 currDoc->guidesSettings.before = tabGuides->inBackground->isChecked();
00299 currDoc->marginColored = tabView->checkUnprintable->isChecked();
00300 currDoc->papColor = tabView->colorPaper;
00301 currDoc->guidesSettings.marginsShown = tabGuides->marginBox->isChecked();
00302 currDoc->guidesSettings.showBleed = tabView->checkBleed->isChecked();
00303 currDoc->guidesSettings.framesShown = tabView->checkFrame->isChecked();
00304 currDoc->guidesSettings.layerMarkersShown = tabView->checkLayerM->isChecked();
00305 currDoc->guidesSettings.gridShown = tabGuides->checkGrid->isChecked();
00306 currDoc->guidesSettings.guidesShown = tabGuides->guideBox->isChecked();
00307 currDoc->guidesSettings.baseShown = tabGuides->baselineBox->isChecked();
00308 currDoc->guidesSettings.showPic = tabView->checkPictures->isChecked();
00309 currDoc->guidesSettings.linkShown = tabView->checkLink->isChecked();
00310 currDoc->guidesSettings.showControls = tabView->checkControl->isChecked();
00311 currDoc->guidesSettings.rulerMode = tabView->checkRuler->isChecked();
00312 currDoc->guidesSettings.grabRad = tabGuides->grabDistance->value();
00313 currDoc->guidesSettings.guideRad = tabGuides->snapDistance->value();
00314 currDoc->guidesSettings.minorGrid = tabGuides->minorSpace->value() / currDoc->unitRatio();
00315 currDoc->guidesSettings.majorGrid = tabGuides->majorSpace->value() / currDoc->unitRatio();
00316 currDoc->guidesSettings.minorColor = tabGuides->colorMinorGrid;
00317 currDoc->guidesSettings.majorColor = tabGuides->colorMajorGrid;
00318 currDoc->guidesSettings.margColor = tabGuides->colorMargin;
00319 currDoc->guidesSettings.guideColor = tabGuides->colorGuides;
00320 currDoc->guidesSettings.baseColor = tabGuides->colorBaselineGrid;
00321 currDoc->checkerProfiles = tabDocChecker->checkerProfile;
00322 currDoc->curCheckProfile = tabDocChecker->curCheckProfile->currentText();
00323 currDoc->typographicSettings.valueSuperScript = tabTypo->superDisplacement->value();
00324 currDoc->typographicSettings.scalingSuperScript = tabTypo->superScaling->value();
00325 currDoc->typographicSettings.valueSubScript = tabTypo->subDisplacement->value();
00326 currDoc->typographicSettings.scalingSubScript = tabTypo->subScaling->value();
00327 currDoc->typographicSettings.valueSmallCaps = tabTypo->capsScaling->value();
00328 currDoc->typographicSettings.autoLineSpacing = tabTypo->autoLine->value();
00329 currDoc->typographicSettings.valueBaseGrid = tabGuides->baseGrid->value();
00330 currDoc->typographicSettings.offsetBaseGrid = tabGuides->baseOffset->value();
00331 currDoc->typographicSettings.valueUnderlinePos = qRound(tabTypo->underlinePos->value() * 10);
00332 currDoc->typographicSettings.valueUnderlineWidth = qRound(tabTypo->underlineWidth->value() * 10);
00333 currDoc->typographicSettings.valueStrikeThruPos = qRound(tabTypo->strikethruPos->value() * 10);
00334 currDoc->typographicSettings.valueStrikeThruWidth = qRound(tabTypo->strikethruWidth->value() * 10);
00335 currDoc->toolSettings.defFont = tabTools->fontComboText->currentText();
00336 currDoc->toolSettings.defSize = tabTools->sizeComboText->currentText().left(2).toInt() * 10;
00337 currDoc->toolSettings.dStrokeText = tabTools->colorComboStrokeText->currentText();
00338 switch (tabTools->tabFillCombo->currentIndex())
00339 {
00340 case 0:
00341 currDoc->toolSettings.tabFillChar = "";
00342 break;
00343 case 1:
00344 currDoc->toolSettings.tabFillChar = ".";
00345 break;
00346 case 2:
00347 currDoc->toolSettings.tabFillChar = "-";
00348 break;
00349 case 3:
00350 currDoc->toolSettings.tabFillChar = "_";
00351 break;
00352 case 4:
00353 currDoc->toolSettings.tabFillChar = tabTools->tabFillCombo->currentText().right(1);
00354 break;
00355 }
00356 if (currDoc->toolSettings.dStrokeText == CommonStrings::tr_NoneColor)
00357 currDoc->toolSettings.dStrokeText = CommonStrings::None;
00358 currDoc->toolSettings.dPenText = tabTools->colorComboText->currentText();
00359 if (currDoc->toolSettings.dPenText == CommonStrings::tr_NoneColor)
00360 currDoc->toolSettings.dPenText = CommonStrings::None;
00361 currDoc->toolSettings.dTextBackGround = tabTools->colorComboTextBackground->currentText();
00362 if (currDoc->toolSettings.dTextBackGround == CommonStrings::tr_NoneColor)
00363 currDoc->toolSettings.dTextBackGround = CommonStrings::None;
00364 currDoc->toolSettings.dTextLineColor = tabTools->colorComboTextLine->currentText();
00365 if (currDoc->toolSettings.dTextLineColor == CommonStrings::tr_NoneColor)
00366 currDoc->toolSettings.dTextLineColor = CommonStrings::None;
00367 currDoc->toolSettings.dTextBackGroundShade = tabTools->shadingTextBack->value();
00368 currDoc->toolSettings.dTextLineShade = tabTools->shadingTextLine->value();
00369 currDoc->toolSettings.dTextPenShade = tabTools->shadingText->value();
00370 currDoc->toolSettings.dTextStrokeShade = tabTools->shadingTextStroke->value();
00371 currDoc->toolSettings.dCols = tabTools->columnsText->value();
00372 currDoc->toolSettings.dGap = tabTools->gapText->value() / currDoc->unitRatio();
00373 currDoc->toolSettings.dTabWidth = tabTools->gapTab->value() / currDoc->unitRatio();
00374 currDoc->toolSettings.dPen = tabTools->colorComboLineShape->currentText();
00375 if (currDoc->toolSettings.dPen == CommonStrings::tr_NoneColor)
00376 currDoc->toolSettings.dPen = CommonStrings::None;
00377 currDoc->toolSettings.dBrush = tabTools->comboFillShape->currentText();
00378 if (currDoc->toolSettings.dBrush == CommonStrings::tr_NoneColor)
00379 currDoc->toolSettings.dBrush = CommonStrings::None;
00380 currDoc->toolSettings.dShade = tabTools->shadingFillShape->value();
00381 currDoc->toolSettings.dShade2 = tabTools->shadingLineShape->value();
00382 currDoc->toolSettings.dLineArt = static_cast<Qt::PenStyle>(tabTools->comboStyleShape->currentIndex()) + 1;
00383 currDoc->toolSettings.dWidth = tabTools->lineWidthShape->value();
00384 currDoc->toolSettings.dStartArrow = tabTools->startArrow->currentIndex();
00385 currDoc->toolSettings.dEndArrow = tabTools->endArrow->currentIndex();
00386 currDoc->toolSettings.magMin = tabTools->minimumZoom->value();
00387 currDoc->toolSettings.magMax = tabTools->maximumZoom->value();
00388 currDoc->toolSettings.magStep = tabTools->zoomStep->value();
00389 currDoc->toolSettings.dPenLine = tabTools->colorComboLine->currentText();
00390 if (currDoc->toolSettings.dPenLine == CommonStrings::tr_NoneColor)
00391 currDoc->toolSettings.dPenLine = CommonStrings::None;
00392 currDoc->toolSettings.dShadeLine = tabTools->shadingLine->value();
00393 currDoc->toolSettings.dLstyleLine = static_cast<Qt::PenStyle>(tabTools->comboStyleLine->currentIndex()) + 1;
00394 currDoc->toolSettings.dWidthLine = tabTools->lineWidthLine->value();
00395 currDoc->toolSettings.dBrushPict = tabTools->comboFillImage->currentText();
00396 if (currDoc->toolSettings.dBrushPict == CommonStrings::tr_NoneColor)
00397 currDoc->toolSettings.dBrushPict = CommonStrings::None;
00398 currDoc->toolSettings.shadePict = tabTools->shadingFillImage->value();
00399 currDoc->toolSettings.scaleX = static_cast<double>(tabTools->scalingHorizontal->value()) / 100.0;
00400 currDoc->toolSettings.scaleY = static_cast<double>(tabTools->scalingVertical->value()) / 100.0;
00401 currDoc->toolSettings.scaleType = tabTools->buttonGroup3->isChecked();
00402 currDoc->toolSettings.aspectRatio = tabTools->checkRatioImage->isChecked();
00403 currDoc->toolSettings.useEmbeddedPath = tabTools->embeddedPath->isChecked();
00404 int haRes = 0;
00405 if (tabTools->checkFullRes->isChecked())
00406 haRes = 0;
00407 if (tabTools->checkNormalRes->isChecked())
00408 haRes = 1;
00409 if (tabTools->checkHalfRes->isChecked())
00410 haRes = 2;
00411 if (currDoc->toolSettings.lowResType != haRes)
00412 {
00413 currDoc->toolSettings.lowResType = haRes;
00414 viewToRecalcPictureRes=true;
00415 }
00416 else
00417 viewToRecalcPictureRes=false;
00418 currDoc->toolSettings.dispX = tabTools->genDispX->value();
00419 currDoc->toolSettings.dispY = tabTools->genDispY->value();
00420 currDoc->toolSettings.constrain = tabTools->genRot->value();
00421 tabTools->polyWidget->getValues(&currDoc->toolSettings.polyC, &