/* This is part of TeXworks, an environment for working with TeX documents Copyright (C) 2007-08 Jonathan Kew This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . For links to further information, or to contact the author, see . */ #include "PrefsDialog.h" #include "TWApp.h" #include "PDFDocument.h" #include "TeXHighlighter.h" #include "CompletingEdit.h" #include #include #include #include #include #include #include //#include #include PrefsDialog::PrefsDialog(QWidget *parent) : QDialog(parent) { init(); } void PrefsDialog::init() { setupUi(this); connect(buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(buttonClicked(QAbstractButton*))); connect(binPathList, SIGNAL(itemSelectionChanged()), this, SLOT(updatePathButtons())); connect(pathUp, SIGNAL(clicked()), this, SLOT(movePathUp())); connect(pathDown, SIGNAL(clicked()), this, SLOT(movePathDown())); connect(pathAdd, SIGNAL(clicked()), this, SLOT(addPath())); connect(pathRemove, SIGNAL(clicked()), this, SLOT(removePath())); connect(toolList, SIGNAL(itemSelectionChanged()), this, SLOT(updateToolButtons())); connect(toolList, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(editTool(QListWidgetItem*))); connect(toolUp, SIGNAL(clicked()), this, SLOT(moveToolUp())); connect(toolDown, SIGNAL(clicked()), this, SLOT(moveToolDown())); connect(toolAdd, SIGNAL(clicked()), this, SLOT(addTool())); connect(toolRemove, SIGNAL(clicked()), this, SLOT(removeTool())); connect(toolEdit, SIGNAL(clicked()), this, SLOT(editTool())); connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(changedTabPanel(int))); pathsChanged = toolsChanged = false; } void PrefsDialog::changedTabPanel(int index) { // this all feels a bit hacky, but seems to keep things tidy on Mac OS X at least QWidget *page = tabWidget->widget(index); page->clearFocus(); switch (index) { case 0: // General if (page->focusWidget() != NULL) page->focusWidget()->clearFocus(); break; case 1: // Editor editorFont->setFocus(); editorFont->lineEdit()->selectAll(); break; case 2: // Preview scale->setFocus(); scale->selectAll(); break; case 3: // Typesetting binPathList->setFocus(); break; case 4: // Script if (page->focusWidget() != NULL) page->focusWidget()->clearFocus(); break; } } void PrefsDialog::updatePathButtons() { int selRow = -1; if (binPathList->selectedItems().count() > 0) selRow = binPathList->currentRow(); pathRemove->setEnabled(selRow != -1); pathUp->setEnabled(selRow > 0); pathDown->setEnabled(selRow != -1 && selRow < binPathList->count() - 1); } void PrefsDialog::movePathUp() { int selRow = -1; if (binPathList->selectedItems().count() > 0) selRow = binPathList->currentRow(); if (selRow > 0) { QListWidgetItem *item = binPathList->takeItem(selRow); binPathList->insertItem(selRow - 1, item); binPathList->setCurrentItem(binPathList->item(selRow - 1)); pathsChanged = true; } } void PrefsDialog::movePathDown() { int selRow = -1; if (binPathList->selectedItems().count() > 0) selRow = binPathList->currentRow(); if (selRow != -1 && selRow < binPathList->count() - 1) { QListWidgetItem *item = binPathList->takeItem(selRow); binPathList->insertItem(selRow + 1, item); binPathList->setCurrentItem(binPathList->item(selRow + 1)); pathsChanged = true; } } void PrefsDialog::addPath() { QString dir = QFileDialog::getExistingDirectory(this, tr("Choose Directory"), "/usr", 0 /*QFileDialog::DontUseNativeDialog*/ /*QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks*/); dir = QDir::fromNativeSeparators(dir); #ifdef Q_WS_WIN if (dir.length() > 2) #else if (dir.length() > 1) #endif if (dir.at(dir.length() - 1) == '/') dir.chop(1); if (dir != "") { binPathList->addItem(dir); binPathList->setCurrentItem(binPathList->item(binPathList->count() - 1)); pathsChanged = true; } } void PrefsDialog::removePath() { if (binPathList->currentRow() > -1) if (binPathList->currentItem()->isSelected()) { binPathList->takeItem(binPathList->currentRow()); pathsChanged = true; } } void PrefsDialog::updateToolButtons() { int selRow = -1; if (toolList->selectedItems().count() > 0) selRow = toolList->currentRow(); toolEdit->setEnabled(selRow != -1); toolRemove->setEnabled(selRow != -1); toolUp->setEnabled(selRow > 0); toolDown->setEnabled(selRow != -1 && selRow < toolList->count() - 1); } void PrefsDialog::moveToolUp() { int selRow = -1; if (toolList->selectedItems().count() > 0) selRow = toolList->currentRow(); if (selRow > 0) { QListWidgetItem *item = toolList->takeItem(selRow); toolList->insertItem(selRow - 1, item); toolList->setCurrentItem(toolList->item(selRow - 1)); Engine e = engineList.takeAt(selRow); engineList.insert(selRow - 1, e); refreshDefaultTool(); toolsChanged = true; } } void PrefsDialog::moveToolDown() { int selRow = -1; if (toolList->selectedItems().count() > 0) selRow = toolList->currentRow(); if (selRow != -1 && selRow < toolList->count() - 1) { QListWidgetItem *item = toolList->takeItem(selRow); toolList->insertItem(selRow + 1, item); toolList->setCurrentItem(toolList->item(selRow + 1)); Engine e = engineList.takeAt(selRow); engineList.insert(selRow + 1, e); refreshDefaultTool(); toolsChanged = true; } } void PrefsDialog::addTool() { Engine e; e.setName(tr("New Tool")); e.setShowPdf(true); if (ToolConfig::doToolConfig(this, e) == QDialog::Accepted) { engineList.append(e); toolList->addItem(e.name()); refreshDefaultTool(); toolsChanged = true; } } void PrefsDialog::removeTool() { if (toolList->currentRow() > -1) if (toolList->currentItem()->isSelected()) { engineList.removeAt(toolList->currentRow()); toolList->takeItem(toolList->currentRow()); refreshDefaultTool(); toolsChanged = true; } } void PrefsDialog::editTool(QListWidgetItem* item) { int row = -1; if (item) row = toolList->row(item); else if (toolList->currentRow() > -1 && toolList->currentItem()->isSelected()) row = toolList->currentRow(); if (row > -1) { Engine e = engineList[toolList->currentRow()]; if (ToolConfig::doToolConfig(this, e) == QDialog::Accepted) { engineList[toolList->currentRow()] = e; toolList->currentItem()->setText(e.name()); toolsChanged = true; } } } void PrefsDialog::refreshDefaultTool() { QString val; if (defaultTool->count() > 0) val = defaultTool->currentText(); defaultTool->clear(); foreach (Engine e, engineList) { defaultTool->addItem(e.name()); if (e.name() == val) defaultTool->setCurrentIndex(defaultTool->count() - 1); } } void PrefsDialog::buttonClicked(QAbstractButton *whichButton) { if (buttonBox->buttonRole(whichButton) == QDialogButtonBox::ResetRole) restoreDefaults(); } const int kDefault_LaunchOption = 1; const int kDefault_ToolBarIcons = 2; const bool kDefault_ToolBarText = false; const int kDefault_SyntaxColoring = 0; const int kDefault_IndentMode = -1; const int kDefault_QuotesMode = -1; const bool kDefault_LineNumbers = false; const bool kDefault_WrapLines = true; const int kDefault_TabWidth = 32; const bool kDefault_HideConsole = true; const bool kDefault_HighlightCurrentLine = true; void PrefsDialog::restoreDefaults() { switch (tabWidget->currentIndex()) { case 0: // General switch (kDefault_ToolBarIcons) { case 1: smallIcons->setChecked(true); break; case 2: mediumIcons->setChecked(true); break; case 3: largeIcons->setChecked(true); break; } showText->setChecked(kDefault_ToolBarText); switch (kDefault_LaunchOption) { case 1: blankDocument->setChecked(true); break; case 2: templateDialog->setChecked(true); break; case 3: openDialog->setChecked(true); break; } blankDocument->setChecked(true); localePopup->setCurrentIndex(0); break; case 1: // Editor { QFont font; editorFont->setEditText(font.family()); fontSize->setValue(font.pointSize()); } tabWidth->setValue(kDefault_TabWidth); wrapLines->setChecked(kDefault_WrapLines); syntaxColoring->setCurrentIndex(kDefault_SyntaxColoring); autoIndent->setCurrentIndex(kDefault_IndentMode); smartQuotes->setCurrentIndex(kDefault_QuotesMode); encoding->setCurrentIndex(encoding->findText("UTF-8")); highlightCurrentLine->setChecked(kDefault_HighlightCurrentLine); break; case 2: // Preview switch (kDefault_PreviewScaleOption) { default: actualSize->setChecked(true); break; case 2: fitWidth->setChecked(true); break; case 3: fitWindow->setChecked(true); break; case 4: fixedScale->setChecked(true); break; } scale->setValue(kDefault_PreviewScale); resolution->setValue(QApplication::desktop()->logicalDpiX()); switch (kDefault_MagnifierSize) { case 1: smallMag->setChecked(true); break; default: mediumMag->setChecked(true); break; case 3: largeMag->setChecked(true); break; } circularMag->setChecked(kDefault_CircularMagnifier); break; case 3: // Typesetting TWApp::instance()->setDefaultEngineList(); TWApp::instance()->setDefaultPaths(); initPathAndToolLists(); autoHideOutput->setChecked(kDefault_HideConsole); pathsChanged = true; toolsChanged = true; break; case 4: // Scripts allowSystemCommands->setChecked(false); scriptDebugger->setChecked(false); break; } } void PrefsDialog::initPathAndToolLists() { binPathList->clear(); toolList->clear(); binPathList->addItems(TWApp::instance()->getBinaryPaths()); engineList = TWApp::instance()->getEngineList(); foreach (Engine e, engineList) { toolList->addItem(e.name()); defaultTool->addItem(e.name()); if (e.name() == TWApp::instance()->getDefaultEngine().name()) defaultTool->setCurrentIndex(defaultTool->count() - 1); } if (binPathList->count() > 0) binPathList->setCurrentItem(binPathList->item(0)); if (toolList->count() > 0) toolList->setCurrentItem(toolList->item(0)); updatePathButtons(); updateToolButtons(); } const int kSystemLocaleIndex = 0; const int kEnglishLocaleIndex = 1; const int kFirstTranslationIndex = 2; QDialog::DialogCode PrefsDialog::doPrefsDialog(QWidget *parent) { PrefsDialog dlg(NULL); QStringList nameList; foreach (QTextCodec *codec, *TWUtils::findCodecs()) nameList.append(codec->name()); dlg.encoding->addItems(nameList); QStringList syntaxOptions = TeXHighlighter::syntaxOptions(); dlg.syntaxColoring->addItems(syntaxOptions); QStringList indentModes = CompletingEdit::autoIndentModes(); dlg.autoIndent->addItems(indentModes); QStringList quotesModes = CompletingEdit::smartQuotesModes(); dlg.smartQuotes->addItems(quotesModes); dlg.language->addItems(*TWUtils::getDictionaryList()); QSETTINGS_OBJECT(settings); // initialize controls based on the current settings // General int oldIconSize = settings.value("toolBarIconSize", kDefault_ToolBarIcons).toInt(); switch (oldIconSize) { case 1: dlg.smallIcons->setChecked(true); break; case 3: dlg.largeIcons->setChecked(true); break; default: dlg.mediumIcons->setChecked(true); break; } bool oldShowText = settings.value("toolBarShowText", kDefault_ToolBarText).toBool(); dlg.showText->setChecked(oldShowText); switch (settings.value("launchOption", kDefault_LaunchOption).toInt()) { default: dlg.blankDocument->setChecked(true); break; case 2: dlg.templateDialog->setChecked(true); break; case 3: dlg.openDialog->setChecked(true); break; } QString oldLocale = settings.value("locale").toString(); // System and English are predefined at index 0 and 1 (see constants above) dlg.localePopup->addItem(tr("System default [%1]").arg(QLocale::languageToString(QLocale(QLocale::system().name()).language()))); dlg.localePopup->addItem("English"); // we don't localize locale names for now int oldLocaleIndex = oldLocale.isEmpty() ? kSystemLocaleIndex : kEnglishLocaleIndex; QStringList *trList = TWUtils::getTranslationList(); QStringList::ConstIterator iter; for (iter = trList->constBegin(); iter != trList->constEnd(); ++iter) { QLocale loc(*iter); QLocale::Language language = loc.language(); QString locName; if (language == QLocale::C) locName = *iter; else { locName = QLocale::languageToString(language); if (iter->contains('_')) { QLocale::Country country = loc.country(); if (country != QLocale::AnyCountry) locName += " (" + QLocale::countryToString(country) + ")"; } } dlg.localePopup->addItem(locName); if (*iter == oldLocale) oldLocaleIndex = dlg.localePopup->count() - 1; } dlg.localePopup->setCurrentIndex(oldLocaleIndex); // Editor dlg.syntaxColoring->setCurrentIndex(settings.contains("syntaxColoring") ? 1 + syntaxOptions.indexOf(settings.value("syntaxColoring").toString()) : 1 + kDefault_SyntaxColoring); dlg.autoIndent->setCurrentIndex(settings.contains("autoIndent") ? 1 + indentModes.indexOf(settings.value("autoIndent").toString()) : 1 + kDefault_IndentMode); dlg.smartQuotes->setCurrentIndex(settings.contains("smartQuotes") ? 1 + quotesModes.indexOf(settings.value("smartQuotes").toString()) : 1 + kDefault_QuotesMode); dlg.lineNumbers->setChecked(settings.value("lineNumbers", kDefault_LineNumbers).toBool()); dlg.wrapLines->setChecked(settings.value("wrapLines", kDefault_WrapLines).toBool()); dlg.tabWidth->setValue(settings.value("tabWidth", kDefault_TabWidth).toInt()); QFontDatabase fdb; dlg.editorFont->addItems(fdb.families()); QString fontString = settings.value("font").toString(); QFont font; if (fontString != "") font.fromString(fontString); dlg.editorFont->setCurrentIndex(fdb.families().indexOf(font.family())); dlg.fontSize->setValue(font.pointSize()); dlg.encoding->setCurrentIndex(nameList.indexOf(TWApp::instance()->getDefaultCodec()->name())); dlg.highlightCurrentLine->setChecked(settings.value("highlightCurrentLine", kDefault_HighlightCurrentLine).toBool()); QString defLang = settings.value("language", tr("None")).toString(); int i = dlg.language->findText(settings.value("language", tr("None")).toString()); if (i >= 0) dlg.language->setCurrentIndex(i); // Preview switch (settings.value("scaleOption", kDefault_PreviewScaleOption).toInt()) { default: dlg.actualSize->setChecked(true); break; case 2: dlg.fitWidth->setChecked(true); break; case 3: dlg.fitWindow->setChecked(true); break; case 4: dlg.fixedScale->setChecked(true); break; } dlg.scale->setValue(settings.value("previewScale", kDefault_PreviewScale).toInt()); int oldResolution = settings.value("previewResolution", QApplication::desktop()->logicalDpiX()).toInt(); dlg.resolution->setValue(oldResolution); int oldMagSize = settings.value("magnifierSize", kDefault_MagnifierSize).toInt(); switch (oldMagSize) { case 1: dlg.smallMag->setChecked(true); break; default: dlg.mediumMag->setChecked(true); break; case 3: dlg.largeMag->setChecked(true); break; } bool oldCircular = settings.value("circularMagnifier", kDefault_CircularMagnifier).toBool(); dlg.circularMag->setChecked(oldCircular); // Typesetting dlg.initPathAndToolLists(); dlg.autoHideOutput->setChecked(settings.value("autoHideConsole", kDefault_HideConsole).toBool()); // Scripts dlg.allowSystemCommands->setChecked(settings.value("allowSystemCommands", false).toBool()); dlg.scriptDebugger->setChecked(settings.value("scriptDebugger", false).toBool()); #if QT_VERSION < 0x040500 dlg.scriptDebugger->setEnabled(false); #endif // Decide which tab to select initially if (sCurrentTab == -1) { if (parent && parent->inherits("TeXDocument")) sCurrentTab = 1; else if (parent && parent->inherits("PDFDocument")) sCurrentTab = 2; else sCurrentTab = 0; } if (sCurrentTab != dlg.tabWidget->currentIndex()) dlg.tabWidget->setCurrentIndex(sCurrentTab); dlg.show(); DialogCode result = (DialogCode)dlg.exec(); if (result == Accepted) { sCurrentTab = dlg.tabWidget->currentIndex(); // General int iconSize = 2; if (dlg.smallIcons->isChecked()) iconSize = 1; else if (dlg.largeIcons->isChecked()) iconSize = 3; bool showText = dlg.showText->isChecked(); if (iconSize != oldIconSize || showText != oldShowText) { settings.setValue("toolBarIconSize", iconSize); settings.setValue("toolBarShowText", showText); foreach (QWidget *widget, qApp->topLevelWidgets()) { QMainWindow *theWindow = qobject_cast(widget); if (theWindow != NULL) TWUtils::applyToolbarOptions(theWindow, iconSize, showText); } } int launchOption = 1; if (dlg.templateDialog->isChecked()) launchOption = 2; else if (dlg.openDialog->isChecked()) launchOption = 3; settings.setValue("launchOption", launchOption); if (dlg.localePopup->currentIndex() != oldLocaleIndex) { switch (dlg.localePopup->currentIndex()) { case kSystemLocaleIndex: // system locale { QString locale = QLocale::system().name(); TWApp::instance()->applyTranslation(locale); settings.remove("locale"); } break; case kEnglishLocaleIndex: // built-in English TWApp::instance()->applyTranslation(QString()); settings.setValue("locale", "en"); break; default: { QString locale = trList->at(dlg.localePopup->currentIndex() - kFirstTranslationIndex); TWApp::instance()->applyTranslation(locale); settings.setValue("locale", locale); } break; } } // Editor settings.setValue("syntaxColoring", dlg.syntaxColoring->currentText()); settings.setValue("autoIndent", dlg.autoIndent->currentText()); settings.setValue("smartQuotes", dlg.smartQuotes->currentText()); settings.setValue("lineNumbers", dlg.lineNumbers->isChecked()); settings.setValue("wrapLines", dlg.wrapLines->isChecked()); settings.setValue("tabWidth", dlg.tabWidth->value()); font = QFont(dlg.editorFont->currentText()); font.setPointSize(dlg.fontSize->value()); settings.setValue("font", font.toString()); TWApp::instance()->setDefaultCodec(QTextCodec::codecForName(dlg.encoding->currentText().toAscii())); settings.setValue("language", dlg.language->currentText()); bool highlightLine = dlg.highlightCurrentLine->isChecked(); settings.setValue("highlightCurrentLine", highlightLine); CompletingEdit::setHighlightCurrentLine(highlightLine); // Preview int scaleOption = 1; if (dlg.fitWidth->isChecked()) scaleOption = 2; else if (dlg.fitWindow->isChecked()) scaleOption = 3; else if (dlg.fixedScale->isChecked()) scaleOption = 4; int scale = dlg.scale->value(); settings.setValue("scaleOption", scaleOption); settings.setValue("previewScale", scale); int resolution = dlg.resolution->value(); if (resolution != oldResolution) { settings.setValue("previewResolution", resolution); foreach (QWidget *widget, qApp->topLevelWidgets()) { PDFDocument *thePdfDoc = qobject_cast(widget); if (thePdfDoc != NULL) thePdfDoc->setResolution(resolution); } } int magSize = 2; if (dlg.smallMag->isChecked()) magSize = 1; else if (dlg.largeMag->isChecked()) magSize = 3; settings.setValue("magnifierSize", magSize); bool circular = dlg.circularMag->isChecked(); settings.setValue("circularMagnifier", circular); if (oldMagSize != magSize || oldCircular != circular) { foreach (QWidget *widget, qApp->topLevelWidgets()) { PDFDocument *thePdfDoc = qobject_cast(widget); if (thePdfDoc != NULL) thePdfDoc->resetMagnifier(); } } // Typesetting if (dlg.pathsChanged) { QStringList paths; for (int i = 0; i < dlg.binPathList->count(); ++i) paths << dlg.binPathList->item(i)->text(); TWApp::instance()->setBinaryPaths(paths); } if (dlg.toolsChanged) TWApp::instance()->setEngineList(dlg.engineList); TWApp::instance()->setDefaultEngine(dlg.defaultTool->currentText()); settings.setValue("autoHideConsole", dlg.autoHideOutput->isChecked()); // Scripts settings.setValue("allowSystemCommands", dlg.allowSystemCommands->isChecked()); settings.setValue("scriptDebugger", dlg.scriptDebugger->isChecked()); } return result; } int PrefsDialog::sCurrentTab = -1; ToolConfig::ToolConfig(QWidget *parent) : QDialog(parent) { init(); } void ToolConfig::init() { setupUi(this); connect(arguments, SIGNAL(itemSelectionChanged()), this, SLOT(updateArgButtons())); connect(argUp, SIGNAL(clicked()), this, SLOT(moveArgUp())); connect(argDown, SIGNAL(clicked()), this, SLOT(moveArgDown())); connect(argAdd, SIGNAL(clicked()), this, SLOT(addArg())); connect(argRemove, SIGNAL(clicked()), this, SLOT(removeArg())); connect(btnBrowseForProgram, SIGNAL(clicked()), this, SLOT(browseForProgram())); } void ToolConfig::browseForProgram() { QFileInfo info(program->text()); QString str = QFileDialog::getOpenFileName(this, tr("Select program file"), info.exists() ? info.canonicalFilePath() : QString()); if (!str.isNull()) { info.setFile(str); if (!info.isExecutable()) { QMessageBox::warning(this, tr("Invalid program"), tr("The file '%1' is not executable!").arg(info.fileName())); return; } program->setText(info.canonicalFilePath()); } } void ToolConfig::updateArgButtons() { int selRow = -1; if (arguments->selectedItems().count() > 0) selRow = arguments->currentRow(); argRemove->setEnabled(selRow != -1); argUp->setEnabled(selRow > 0); argDown->setEnabled(selRow != -1 && selRow < arguments->count() - 1); } void ToolConfig::moveArgUp() { int selRow = -1; if (arguments->selectedItems().count() > 0) selRow = arguments->currentRow(); if (selRow > 0) { QListWidgetItem *item = arguments->takeItem(selRow); arguments->insertItem(selRow - 1, item); arguments->setCurrentItem(arguments->item(selRow - 1)); } } void ToolConfig::moveArgDown() { int selRow = -1; if (arguments->selectedItems().count() > 0) selRow = arguments->currentRow(); if (selRow != -1 && selRow < arguments->count() - 1) { QListWidgetItem *item = arguments->takeItem(selRow); arguments->insertItem(selRow + 1, item); arguments->setCurrentItem(arguments->item(selRow + 1)); } } void ToolConfig::addArg() { arguments->addItem(tr("NewArgument")); QListWidgetItem* item = arguments->item(arguments->count() - 1); item->setFlags(item->flags() | Qt::ItemIsEditable); arguments->setCurrentItem(item); arguments->editItem(item); } void ToolConfig::removeArg() { if (arguments->currentRow() > -1) if (arguments->currentItem()->isSelected()) arguments->takeItem(arguments->currentRow()); } QDialog::DialogCode ToolConfig::doToolConfig(QWidget *parent, Engine &engine) { ToolConfig dlg(parent); dlg.toolName->setText(engine.name()); dlg.program->setText(engine.program()); dlg.arguments->addItems(engine.arguments()); for (int i = 0; i < dlg.arguments->count(); ++i) { QListWidgetItem *item = dlg.arguments->item(i); item->setFlags(item->flags() | Qt::ItemIsEditable); } dlg.viewPdf->setChecked(engine.showPdf()); dlg.show(); DialogCode result = (DialogCode)dlg.exec(); if (result == Accepted) { dlg.arguments->setCurrentItem(NULL); // ensure editing is terminated engine.setName(dlg.toolName->text()); engine.setProgram(dlg.program->text()); QStringList args; for (int i = 0; i < dlg.arguments->count(); ++i) args << dlg.arguments->item(i)->text(); engine.setArguments(args); engine.setShowPdf(dlg.viewPdf->isChecked()); } return result; }