From d7bccc5f88fb0756fa817b6251da0d89d79574f3 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Mon, 10 Apr 2006 16:27:59 +0000 Subject: [PATCH] Update on view-source feature (r13610), from Bo Peng (ben.bob@gmail.com) * src/text3.C, src/lyxfunc.C: no special treatment of view-source dialog now. * src/frontends/controllers/ControlViewSource.h, .C: handle everything (get source type, code) in the controller. * src/insets/insetbibtex.C, insetexternal.C insetinclude.C: add dryrun mode to file copying etc. * src/frontends/qt2/QViewSource.C: small changes when calling the controller. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13627 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/buffer.C | 12 +--- src/frontends/controllers/ControlViewSource.C | 67 +++++++++++++------ src/frontends/controllers/ControlViewSource.h | 17 +---- src/frontends/qt2/QViewSource.C | 6 +- src/insets/insetbibtex.C | 4 +- src/insets/insetexternal.C | 2 +- src/insets/insetinclude.C | 2 +- src/lyxfunc.C | 29 +------- src/text3.C | 15 ----- 9 files changed, 60 insertions(+), 94 deletions(-) diff --git a/src/buffer.C b/src/buffer.C index 2375a9b11d..c006521c36 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -1576,7 +1576,7 @@ void Buffer::changeRefsIfUnique(string const & from, string const & to) } -void Buffer::getSourceCode(ostream& os, lyx::pit_type par_begin, lyx::pit_type par_end) +void Buffer::getSourceCode(ostream & os, lyx::pit_type par_begin, lyx::pit_type par_end) { OutputParams runparams; runparams.nice = true; @@ -1587,16 +1587,6 @@ void Buffer::getSourceCode(ostream& os, lyx::pit_type par_begin, lyx::pit_type p // No side effect of file copying and image conversion runparams.dryrun = true; - // set source type for the view-source dialog - if (isLatex()) - os << "%LaTeX\n"; - else if (isLinuxDoc()) - os << "%LinuxDoc\n"; - else if (isDocBook()) - os << "%DocBook\n"; - else - BOOST_ASSERT(false); - // start text if (par_begin + 1 == par_end) os << "% Preview source code for paragraph " << par_begin << "\n\n"; else diff --git a/src/frontends/controllers/ControlViewSource.C b/src/frontends/controllers/ControlViewSource.C index 17ac479607..7b50b844cb 100644 --- a/src/frontends/controllers/ControlViewSource.C +++ b/src/frontends/controllers/ControlViewSource.C @@ -14,8 +14,14 @@ #include "ControlViewSource.h" #include "gettext.h" +#include "support/types.h" +#include "BufferView.h" +#include "buffer.h" +#include "cursor.h" +#include using std::string; +using std::ostringstream; namespace lyx { namespace frontend { @@ -27,39 +33,58 @@ ControlViewSource::ControlViewSource(Dialog & parent) bool ControlViewSource::initialiseParams(string const & source) { - string sourcetype = source.substr(1, 5); - if (sourcetype == "LaTeX") { - type_ = LatexSource; - source_ = source.substr(7); - } else if (sourcetype == "Linux") { - type_ = LinuxDocSource; - source_ = source.substr(10); - } else if (sourcetype == "DocBo") { - type_ = DocBookSource; - source_ = source.substr(9); - } else - return false; - return true; } +string const ControlViewSource::updateContent() +{ + // get the *top* level paragraphs that contain the cursor, + // or the selected text + lyx::pit_type par_begin; + lyx::pit_type par_end; + + BufferView * view = kernel().bufferview(); + if (!view->cursor().selection()) { + par_begin = view->cursor().bottom().pit(); + par_end = par_begin; + } else { + par_begin = view->cursor().selectionBegin().bottom().pit(); + par_end = view->cursor().selectionEnd().bottom().pit(); + } + if (par_begin > par_end) + std::swap(par_begin, par_end); + ostringstream ostr; + view->buffer()->getSourceCode(ostr, par_begin, par_end + 1); + return ostr.str(); +} + void ControlViewSource::clearParams() { - source_.erase(); } string const ControlViewSource::title() const { - switch (type_) { - case LatexSource: - return _("LaTeX Source"); - case LinuxDocSource: - return _("LinuxDoc Source"); - case DocBookSource: - return _("DocBook Source"); + string source_type; + + Kernel::DocType doctype = kernel().docType(); + switch (doctype) { + case Kernel::LATEX: + source_type = "LaTeX"; + break; + case Kernel::LINUXDOC: + source_type = "LinuxDoc"; + break; + case Kernel::DOCBOOK: + source_type = "DocBook"; + break; + case Kernel::LITERATE: + source_type = "Literate"; + default: + BOOST_ASSERT(false); } + return _(source_type + " Source"); } } // namespace frontend diff --git a/src/frontends/controllers/ControlViewSource.h b/src/frontends/controllers/ControlViewSource.h index 3e9d2f52fe..52002b3825 100644 --- a/src/frontends/controllers/ControlViewSource.h +++ b/src/frontends/controllers/ControlViewSource.h @@ -36,22 +36,11 @@ public: /// virtual bool isBufferDependent() const { return true; } - /// The title displayed by the dialog reflects the \c VIEWSOURCETYPE + /// The title displayed by the dialog reflects source type. std::string const title() const; - /// get the source code - std::string const str() const { return source_; } - -private: - /// Recognized source code type - enum SOURCETYPE { - LatexSource, - LinuxDocSource, - DocBookSource - }; - - SOURCETYPE type_; - std::string source_; + /// get the source code of selected paragraphs + std::string const updateContent(); }; } // namespace frontend diff --git a/src/frontends/qt2/QViewSource.C b/src/frontends/qt2/QViewSource.C index 1f4f46ccec..d0494c48e8 100644 --- a/src/frontends/qt2/QViewSource.C +++ b/src/frontends/qt2/QViewSource.C @@ -14,6 +14,7 @@ #include "QViewSource.h" #include "QViewSourceDialog.h" #include "qt_helpers.h" +#include "lyx_gui.h" #include "controllers/ControlViewSource.h" @@ -38,7 +39,7 @@ void QViewSource::build_dialog() dialog_->viewSourceTV->setReadOnly(true); dialog_->viewSourceTV->setTextFormat(Qt::PlainText); // this is personal. I think source code should be in fixed-size font - QFont font("Courier New"); + QFont font(toqstr(lyx_gui::typewriter_font_name())); font.setFixedPitch(true); font.setStyleHint(QFont::TypeWriter); dialog_->viewSourceTV->setFont(font); @@ -50,8 +51,7 @@ void QViewSource::build_dialog() void QViewSource::update_contents() { setTitle(controller().title()); - - dialog_->viewSourceTV->setText(toqstr(controller().str())); + dialog_->viewSourceTV->setText(toqstr(controller().updateContent())); } } // namespace frontend diff --git a/src/insets/insetbibtex.C b/src/insets/insetbibtex.C index 7222ce061d..6251a9bc54 100644 --- a/src/insets/insetbibtex.C +++ b/src/insets/insetbibtex.C @@ -161,7 +161,7 @@ int InsetBibtex::latex(Buffer const & buffer, ostream & os, normalize_name(buffer, runparams, input, ".bib"); string const in_file = database + ".bib"; - if (!runparams.inComment && !runparams.nice && + if (!runparams.inComment && !runparams.dryrun && !runparams.nice && isFileReadable(in_file)) { // mangledFilename() needs the extension @@ -216,7 +216,7 @@ int InsetBibtex::latex(Buffer const & buffer, ostream & os, // exporting to .tex copy it to the tmp directory. // This prevents problems with spaces and 8bit charcaters // in the file name. - if (!runparams.inComment && !runparams.nice && + if (!runparams.inComment && !runparams.dryrun && !runparams.nice && isFileReadable(in_file)) { // use new style name base = removeExtension( diff --git a/src/insets/insetexternal.C b/src/insets/insetexternal.C index 5124aaf242..c8faf6f0d0 100644 --- a/src/insets/insetexternal.C +++ b/src/insets/insetexternal.C @@ -688,7 +688,7 @@ int InsetExternal::latex(Buffer const & buf, ostream & os, // run through the LaTeX compiler. // If we're running through the LaTeX compiler, we should write the // generated files in the bufer's temporary directory. - bool const external_in_tmpdir = !runparams.nice; + bool const external_in_tmpdir = !runparams.nice && !runparams.dryrun; // If the template has specified a PDFLaTeX output, then we try and // use that. diff --git a/src/insets/insetinclude.C b/src/insets/insetinclude.C index 0bbcedbdcc..3e3b4c7852 100644 --- a/src/insets/insetinclude.C +++ b/src/insets/insetinclude.C @@ -359,7 +359,7 @@ int InsetInclude::latex(Buffer const & buffer, ostream & os, lyxerr[Debug::LATEX] << "exportfile:" << exportfile << endl; lyxerr[Debug::LATEX] << "writefile:" << writefile << endl; - if (runparams.inComment) + if (runparams.inComment || runparams.dryrun) // Don't try to load or copy the file ; else if (loadIfNeeded(buffer, params_)) { diff --git a/src/lyxfunc.C b/src/lyxfunc.C index 0379b6b6f6..2b80a2535a 100644 --- a/src/lyxfunc.C +++ b/src/lyxfunc.C @@ -1165,9 +1165,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd) data = freefont2string(); if (!data.empty()) owner->getDialogs().show("character", data); - } - - else if (name == "latexlog") { + } else if (name == "latexlog") { pair const logfile = owner->buffer()->getLogName(); switch (logfile.first) { @@ -1180,32 +1178,11 @@ void LyXFunc::dispatch(FuncRequest const & cmd) } data += logfile.second; owner->getDialogs().show("log", data); - } - else if (name == "vclog") { + } else if (name == "vclog") { string const data = "vc " + owner->buffer()->lyxvc().getLogFile(); owner->getDialogs().show("log", data); - } - else if (name == "view-source") { - // get the *top* level paragraphs that contain the cursor, - // or the selected text - lyx::pit_type par_begin; - lyx::pit_type par_end; - if (!view()->cursor().selection()) { - par_begin = view()->cursor().bottom().pit(); - par_end = par_begin; - } else { - par_begin = view()->cursor().selectionBegin().bottom().pit(); - par_end = view()->cursor().selectionEnd().bottom().pit(); - } - if (par_begin > par_end) - std::swap(par_begin, par_end); - ostringstream ostr; - view()->buffer()->getSourceCode(ostr, par_begin, par_end + 1); - // display the dialog and show source code - owner->getDialogs().show("view-source", ostr.str()); - } - else + } else owner->getDialogs().show(name, data); break; } diff --git a/src/text3.C b/src/text3.C index fadfb888f5..a4aeb20770 100644 --- a/src/text3.C +++ b/src/text3.C @@ -1108,21 +1108,6 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd) bv->switchKeyMap(); bv->owner()->updateMenubar(); bv->owner()->updateToolbars(); - - // if view-source dialog is visible, send source code of selected - // text to the dialog - if (cmd.button() == mouse_button::button1 && cur.selection() - && bv->owner()->getDialogs().visible("view-source")) { - // get *top* level paragraphs that contain the selection - lyx::pit_type par_begin = bv->cursor().selectionBegin().bottom().pit(); - lyx::pit_type par_end = bv->cursor().selectionEnd().bottom().pit(); - if (par_begin > par_end) - std::swap(par_begin, par_end); - ostringstream ostr; - bv->buffer()->getSourceCode(ostr, par_begin, par_end + 1); - // display the dialog and show source code - bv->owner()->getDialogs().update("view-source", ostr.str()); - } break; } -- 2.39.2