From 3ff14b8300376c531b7f94d4fd1f0730bea9a05e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Andr=C3=A9=20P=C3=B6nitz?= Date: Thu, 20 Sep 2007 22:31:18 +0000 Subject: [PATCH] Pavel Sanda's "PDFOptions" patch git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20389 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/Buffer.cpp | 2 + src/BufferParams.cpp | 33 ++++++++++ src/BufferParams.h | 5 ++ src/Makefile.am | 2 + src/frontends/qt4/GuiDocument.cpp | 95 +++++++++++++++++++++++++++-- src/frontends/qt4/GuiDocument.h | 2 + src/frontends/qt4/Makefile.am | 1 + src/frontends/qt4/ui/compile_uic.sh | 5 +- src/insets/Inset.cpp | 1 - 9 files changed, 137 insertions(+), 9 deletions(-) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 19d479cc9b..75799f7649 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -55,6 +55,7 @@ #include "Undo.h" #include "version.h" #include "EmbeddedFiles.h" +#include "PDFOptions.h" #include "insets/InsetBibitem.h" #include "insets/InsetBibtex.h" @@ -459,6 +460,7 @@ int Buffer::readHeader(Lexer & lex) params().footskip.erase(); params().listings_params.clear(); params().clearLayoutModules(); + params().pdfoptions().clear(); for (int i = 0; i < 4; ++i) { params().user_defined_bullet(i) = ITEMIZE_DEFAULTS[i]; diff --git a/src/BufferParams.cpp b/src/BufferParams.cpp index 2577abd1f8..785e54d2d5 100644 --- a/src/BufferParams.cpp +++ b/src/BufferParams.cpp @@ -37,6 +37,7 @@ #include "Spacing.h" #include "TexRow.h" #include "VSpace.h" +#include "PDFOptions.h" #include "frontends/alert.h" #include "insets/InsetListingsParams.h" @@ -44,6 +45,7 @@ #include "support/convert.h" #include "support/filetools.h" #include "support/Translator.h" +#include "support/lstrings.h" #include @@ -63,6 +65,7 @@ using lyx::support::libFileSearch; using lyx::support::bformat; using lyx::support::rtrim; using lyx::support::tokenPos; +using lyx::support::prefixIs; static char const * const string_paragraph_separation[] = { @@ -290,6 +293,7 @@ public: * and for detached paragraphs in "indented" documents. */ VSpace defskip; + PDFOptions pdfoptions; }; @@ -435,6 +439,16 @@ Spacing const & BufferParams::spacing() const return pimpl_->spacing; } +PDFOptions & BufferParams::pdfoptions() +{ + return pimpl_->pdfoptions; +} + + +PDFOptions const & BufferParams::pdfoptions() const +{ + return pimpl_->pdfoptions; +} VSpace const & BufferParams::getDefSkip() const { @@ -633,6 +647,15 @@ string const BufferParams::readToken(Lexer & lex, string const & token) spacing().set(spacetranslator().find(nspacing), tmp_val); } else if (token == "\\float_placement") { lex >> float_placement; + + } else if (prefixIs(token, "\\pdf_") || token == "\\use_hyperref") { + string toktmp; + toktmp = pdfoptions().readToken(lex, token); + if (!toktmp.empty()) { + lyxerr << "PDFOptions::readToken(): Unknown token: " << + toktmp << endl; + return toktmp; + } } else { lyxerr << "BufferParams::readToken(): Unknown token: " << token << endl; @@ -694,6 +717,7 @@ void BufferParams::writeFile(ostream & os) const os << "\\paperfontsize " << fontsize << '\n'; spacing().writeFile(os); + pdfoptions().writeFile(os); os << "\\papersize " << string_papersize[papersize] << "\n\\use_geometry " << convert(use_geometry) @@ -1167,6 +1191,15 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features, lyxpreamble += from_utf8(features.getBabelOptions()); } + // PDF support. Hypreref manual: "Make sure it comes last of your loaded + // packages, to give it a fighting chance of not being over-written, + // since its job is to redefine many LATEX commands." + // Has to be put into lyxpreamble (preserving line-counting for error + // parsing). + odocstringstream oss; + pdfoptions().writeLaTeX(oss); + lyxpreamble += oss.str(); + lyxpreamble += "\\makeatother\n\n"; int const nlines = diff --git a/src/BufferParams.h b/src/BufferParams.h index 62a481961d..bf3968ecb0 100644 --- a/src/BufferParams.h +++ b/src/BufferParams.h @@ -39,6 +39,7 @@ class Spacing; class TexRow; class VSpace; class Language; +class PDFOptions; /** Buffer parameters. * This class contains all the parameters for this buffer's use. Some @@ -289,6 +290,10 @@ public: /// void setCiteEngine(biblio::CiteEngine const); + /// options for pdf output + PDFOptions & pdfoptions(); + PDFOptions const & pdfoptions() const; + private: /// void readPreamble(Lexer &); diff --git a/src/Makefile.am b/src/Makefile.am index df2a355c13..7c90cf2cee 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -233,6 +233,8 @@ liblyxcore_la_SOURCES = \ ParagraphParameters.h \ ParIterator.cpp \ ParIterator.h \ + PDFOptions.cpp \ + PDFOptions.h \ Row.cpp \ Row.h \ rowpainter.cpp \ diff --git a/src/frontends/qt4/GuiDocument.cpp b/src/frontends/qt4/GuiDocument.cpp index f835ed91e4..0511db0c8a 100644 --- a/src/frontends/qt4/GuiDocument.cpp +++ b/src/frontends/qt4/GuiDocument.cpp @@ -32,6 +32,7 @@ #include "LyXRC.h" // defaultUnit #include "TextClassList.h" #include "Spacing.h" +#include "PDFOptions.h" #include "insets/InsetListingsParams.h" @@ -610,6 +611,41 @@ GuiDocumentDialog::GuiDocumentDialog(LyXView & lv) connect(bulletsModule, SIGNAL(changed()), this, SLOT(change_adaptor())); + // PDF support + pdfSupportModule = new UiWidget; + + connect(pdfSupportModule->use_hyperrefCB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->titleLE, SIGNAL(textChanged(const QString &)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->authorLE, SIGNAL(textChanged(const QString &)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->subjectLE, SIGNAL(textChanged(const QString &)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->keywordsLE, SIGNAL(textChanged(const QString &)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->bookmarksGB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->bookmarksnumberedCB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->bookmarksopenGB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->bookmarksopenlevelLE, SIGNAL(textChanged(const QString &)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->breaklinksCB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->pdfborderCB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->colorlinksCB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->backrefCB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->pagebackrefCB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->fullscreenCB, SIGNAL(toggled(bool)), + this, SLOT(change_adaptor())); + connect(pdfSupportModule->optionsLE, SIGNAL(textChanged(const QString &)), + this, SLOT(change_adaptor())); // float floatModule = new FloatPlacement; @@ -624,6 +660,7 @@ GuiDocumentDialog::GuiDocumentDialog(LyXView & lv) docPS->addPanel(langModule, _("Language")); docPS->addPanel(numberingModule, _("Numbering & TOC")); docPS->addPanel(biblioModule, _("Bibliography")); + docPS->addPanel(pdfSupportModule, _("PDF Properties")); docPS->addPanel(mathsModule, _("Math Options")); docPS->addPanel(floatModule, _("Float Placement")); docPS->addPanel(bulletsModule, _("Bullets")); @@ -946,6 +983,7 @@ void GuiDocumentDialog::updateNumbering() numberingModule->tocTW->update(); } + void GuiDocumentDialog::apply(BufferParams & params) { // preamble @@ -1180,20 +1218,39 @@ void GuiDocumentDialog::apply(BufferParams & params) Ui::MarginsUi const * m(marginsModule); params.leftmargin = widgetsToLength(m->innerLE, m->innerUnit); - params.topmargin = widgetsToLength(m->topLE, m->topUnit); - params.rightmargin = widgetsToLength(m->outerLE, m->outerUnit); - params.bottommargin = widgetsToLength(m->bottomLE, m->bottomUnit); - params.headheight = widgetsToLength(m->headheightLE, m->headheightUnit); - params.headsep = widgetsToLength(m->headsepLE, m->headsepUnit); - params.footskip = widgetsToLength(m->footskipLE, m->footskipUnit); branchesModule->apply(params); + + // PDF support + PDFOptions & pdf = params.pdfoptions(); + pdf.use_hyperref_ = pdfSupportModule->use_hyperrefCB->isChecked(); + pdf.title_ = fromqstr(pdfSupportModule->titleLE->text()); + pdf.author_ = fromqstr(pdfSupportModule->authorLE->text()); + pdf.subject_ = fromqstr(pdfSupportModule->subjectLE->text()); + pdf.keywords_ = fromqstr(pdfSupportModule->keywordsLE->text()); + + pdf.bookmarks_ = pdfSupportModule->bookmarksGB->isChecked(); + pdf.bookmarksnumbered_ = pdfSupportModule->bookmarksnumberedCB->isChecked(); + pdf.bookmarksopen_ = pdfSupportModule->bookmarksopenGB->isChecked(); + pdf.bookmarksopenlevel_ = + fromqstr(pdfSupportModule->bookmarksopenlevelLE->text()); + + pdf.breaklinks_ = pdfSupportModule->breaklinksCB->isChecked(); + pdf.pdfborder_ = pdfSupportModule->pdfborderCB->isChecked(); + pdf.colorlinks_ = pdfSupportModule->colorlinksCB->isChecked(); + pdf.backref_ = pdfSupportModule->backrefCB->isChecked(); + pdf.pagebackref_ = pdfSupportModule->pagebackrefCB->isChecked(); + if (pdfSupportModule->fullscreenCB->isChecked()) + pdf.pagemode_ = pdf.pagemode_fullscreen_; + pdf.quoted_options_ = fromqstr(pdfSupportModule->optionsLE->text()); + if (pdf.use_hyperref_ || !pdf.empty()) + pdf.store_options_ = true; } @@ -1476,6 +1533,32 @@ void GuiDocumentDialog::updateParams(BufferParams const & params) params.footskip, defaultUnit); branchesModule->update(params); + + // PDF support + PDFOptions const & pdf = params.pdfoptions(); + pdfSupportModule->use_hyperrefCB->setChecked(pdf.use_hyperref_); + pdfSupportModule->titleLE->setText(toqstr(pdf.title_)); + pdfSupportModule->authorLE->setText(toqstr(pdf.author_)); + pdfSupportModule->subjectLE->setText(toqstr(pdf.subject_)); + pdfSupportModule->keywordsLE->setText(toqstr(pdf.keywords_)); + + pdfSupportModule->bookmarksGB->setChecked(pdf.bookmarks_); + pdfSupportModule->bookmarksnumberedCB->setChecked(pdf.bookmarksnumbered_); + pdfSupportModule->bookmarksopenGB->setChecked(pdf.bookmarksopen_); + + pdfSupportModule->bookmarksopenlevelLE->setText( + toqstr(pdf.bookmarksopenlevel_)); + + pdfSupportModule->breaklinksCB->setChecked(pdf.breaklinks_); + pdfSupportModule->pdfborderCB->setChecked(pdf.pdfborder_); + pdfSupportModule->colorlinksCB->setChecked(pdf.colorlinks_); + pdfSupportModule->backrefCB->setChecked(pdf.backref_); + pdfSupportModule->pagebackrefCB->setChecked(pdf.pagebackref_); + pdfSupportModule->fullscreenCB->setChecked + (pdf.pagemode_ == pdf.pagemode_fullscreen_); + + pdfSupportModule->optionsLE->setText( + toqstr(pdf.quoted_options_)); } diff --git a/src/frontends/qt4/GuiDocument.h b/src/frontends/qt4/GuiDocument.h index bd70aad9db..65877152c3 100644 --- a/src/frontends/qt4/GuiDocument.h +++ b/src/frontends/qt4/GuiDocument.h @@ -29,6 +29,7 @@ #include "ui_NumberingUi.h" #include "ui_MarginsUi.h" #include "ui_PreambleUi.h" +#include "ui_PDFSupportUi.h" #include #include @@ -106,6 +107,7 @@ private: UiWidget *biblioModule; UiWidget *mathsModule; UiWidget *latexModule; + UiWidget *pdfSupportModule; PreambleModule *preambleModule; GuiBranches *branchesModule; diff --git a/src/frontends/qt4/Makefile.am b/src/frontends/qt4/Makefile.am index 6b3d7bc1db..e073f62467 100644 --- a/src/frontends/qt4/Makefile.am +++ b/src/frontends/qt4/Makefile.am @@ -235,6 +235,7 @@ UIFILES = \ NumberingUi.ui \ PageLayoutUi.ui \ ParagraphUi.ui \ + PDFSupportUi.ui \ PreambleUi.ui \ PrefColorsUi.ui \ PrefConvertersUi.ui \ diff --git a/src/frontends/qt4/ui/compile_uic.sh b/src/frontends/qt4/ui/compile_uic.sh index 30e3ba6a23..09657743d0 100644 --- a/src/frontends/qt4/ui/compile_uic.sh +++ b/src/frontends/qt4/ui/compile_uic.sh @@ -6,6 +6,7 @@ uic BibtexAddUi.ui -o BibtexAddUi.h uic BibtexUi.ui -o BibtexUi.h uic BoxUi.ui -o BoxUi.h uic BranchesUi.ui -o BranchesUi.h +uic PDFSupportUi.ui -o PDFSupportUi.h uic BranchUi.ui -o BranchUi.h uic ChangesUi.ui -o ChangesUi.h uic CharacterUi.ui -o CharacterUi.h @@ -48,7 +49,7 @@ uic PrefSpellcheckerUi.ui -o PrefSpellcheckerUi.h uic PrefsUi.ui -o PrefsUi.h uic PrefUi.ui -o PrefUi.h uic PrintUi.ui -o PrintUi.h -uic reambleUi.ui -o PreambleUi.h +uic PreambleUi.ui -o PreambleUi.h uic RefUi.ui -o RefUi.h uic SearchUi.ui -o SearchUi.h uic SendtoUi.ui -o SendtoUi.h @@ -60,7 +61,7 @@ uic TexinfoUi.ui -o TexinfoUi.h uic TextLayoutUi.ui -o TextLayoutUi.h uic ThesaurusUi.ui -o ThesaurusUi.h uic TocUi.ui -o TocUi.h -uic ulletsUi.ui -o BulletsUi.h +uic BulletsUi.ui -o BulletsUi.h uic URLUi.ui -o URLUi.h uic VSpaceUi.ui -o VSpaceUi.h uic WrapUi.ui -o WrapUi.h diff --git a/src/insets/Inset.cpp b/src/insets/Inset.cpp index 0995a7a0f8..e505e4a508 100644 --- a/src/insets/Inset.cpp +++ b/src/insets/Inset.cpp @@ -23,7 +23,6 @@ #include "CoordCache.h" #include "Cursor.h" #include "debug.h" -#include "debug.h" #include "Dimension.h" #include "DispatchResult.h" #include "FuncRequest.h" -- 2.39.2