X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetExternal.cpp;h=f604a1fb9d2e0028005a57524e643037b60e35c9;hb=9176e60b7bcab3e355521a86ddb4c2778cd9b29e;hp=a88769b8ee3c4a587ae259b59251acc23b2c9087;hpb=3f34ebbaf932ea645e584a17d643c9b7f19b2a86;p=lyx.git diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index a88769b8ee..f604a1fb9d 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -18,6 +18,7 @@ #include "Buffer.h" #include "BufferView.h" +#include "Converter.h" #include "Cursor.h" #include "DispatchResult.h" #include "Exporter.h" @@ -39,7 +40,6 @@ #include "graphics/PreviewLoader.h" -#include "support/bind.h" #include "support/convert.h" #include "support/debug.h" #include "support/ExceptionMessage.h" @@ -62,7 +62,7 @@ unsigned int const defaultLyxScale = 100; string defaultTemplateName; -} // namespace anon +} // namespace namespace lyx { @@ -103,7 +103,7 @@ TempName & TempName::operator=(TempName const & other) tempname_.removeFile(); support::TempFile f("lyxextXXXXXX.tmp"); f.setAutoRemove(false); - tempname_ = f.name(); + tempname_ = f.name(); } return *this; } @@ -149,7 +149,7 @@ void clearIfNotFound(T & data, external::TransformID value, data = T(); } -} // namespace anon +} // namespace void InsetExternalParams::settemplate(string const & name) @@ -171,7 +171,7 @@ void InsetExternalParams::settemplate(string const & name) clearIfNotFound(resizedata, external::Resize, ids); clearIfNotFound(rotationdata, external::Rotate, ids); - // + // preview_mode = et->preview_mode; } @@ -415,8 +415,7 @@ docstring screenLabel(InsetExternalParams const & params, return gui; } -} // namespace anon - +} // namespace InsetExternal::InsetExternal(Buffer * buf) @@ -428,7 +427,6 @@ InsetExternal::InsetExternal(Buffer * buf) // Mouse hover is not copied and remains empty InsetExternal::InsetExternal(InsetExternal const & other) : Inset(other), - boost::signals2::trackable(), params_(other.params_), renderer_(other.renderer_->clone(this)) {} @@ -453,12 +451,6 @@ bool InsetExternal::setMouseHover(BufferView const * bv, bool mouse_hover) const } -void InsetExternal::statusChanged() const -{ - updateFrontend(); -} - - void InsetExternal::doDispatch(Cursor & cur, FuncRequest & cmd) { switch (cmd.action()) { @@ -527,12 +519,18 @@ bool InsetExternal::showInsetDialog(BufferView * bv) const void InsetExternal::metrics(MetricsInfo & mi, Dimension & dim) const { + if (!isRendererValid()) + updatePreview(); + renderer_->metrics(mi, dim); } void InsetExternal::draw(PainterInfo & pi, int x, int y) const { + if (!isRendererValid()) + updatePreview(); + if (renderer_->asButton()) renderer_->setRenderState(mouse_hover_[pi.base.bv]); renderer_->draw(pi, x, y); @@ -555,7 +553,7 @@ graphics::Params get_grfx_params(InsetExternalParams const & eparams) return gparams; } -} // namespace anon +} // namespace static bool isPreviewWanted(InsetExternalParams const & params) @@ -598,9 +596,22 @@ InsetExternalParams const & InsetExternal::params() const } -void InsetExternal::updatePreview() +bool InsetExternal::isPreviewed() const { - setParams(params_); + return (external::getTemplatePtr(params_) && !params_.filename.empty() + && params_.display + && lyxrc.display_graphics + && params_.preview_mode != PREVIEW_OFF + && (params_.preview_mode != PREVIEW_INSTANT + || RenderPreview::previewText())); +} + + +bool InsetExternal::isRendererValid() const +{ + if (!renderer_->asButton()) + return isPreviewed(); + return !isPreviewed(); } @@ -612,18 +623,19 @@ void InsetExternal::setParams(InsetExternalParams const & p) // will use this. defaultTemplateName = params_.templatename(); - if (!external::getTemplatePtr(params_) || params_.filename.empty() - || !params_.display - || !lyxrc.display_graphics - || params_.preview_mode == PREVIEW_OFF - || (params_.preview_mode == PREVIEW_INSTANT - && !RenderPreview::previewText())) { + updatePreview(); +} + + +void InsetExternal::updatePreview() const +{ + if (!isPreviewed()) { RenderButton * button_ptr = renderer_->asButton(); if (!button_ptr) { renderer_.reset(new RenderButton); button_ptr = renderer_->asButton(); } - button_ptr->update(screenLabel(params_, buffer()), true); + button_ptr->update(screenLabel(params_, buffer()), true, false); return; } @@ -635,6 +647,7 @@ void InsetExternal::setParams(InsetExternalParams const & p) case PREVIEW_INSTANT: { renderer_ = make_unique(this); RenderMonitoredPreview * preview_ptr = renderer_->asMonitoredPreview(); + // This connection is closed at the same time as this is destroyed. preview_ptr->connect([=]() { fileChanged(); }); add_preview_and_start_loading(*preview_ptr, *this, buffer()); break; @@ -710,19 +723,26 @@ void InsetExternal::latex(otexstream & os, OutputParams const & runparams) const et.formats.find("PDFLaTeX"); if (cit != et.formats.end()) { - external::writeExternal(params_, "PDFLaTeX", - buffer(), os, - *(runparams.exportdata), - external_in_tmpdir, - dryrun); + external::RetVal retval = + external::writeExternal(params_, "PDFLaTeX", buffer(), os, + *(runparams.exportdata), external_in_tmpdir, dryrun); + if (retval == external::KILLED) { + LYXERR0("External template preparation killed."); + if (buffer().isClone() && buffer().isExporting()) + throw ConversionException(); + } return; } } - external::writeExternal(params_, "LaTeX", buffer(), os, - *(runparams.exportdata), - external_in_tmpdir, - dryrun); + external::RetVal retval = + external::writeExternal(params_, "LaTeX", buffer(), os, + *(runparams.exportdata), external_in_tmpdir, dryrun); + if (retval == external::KILLED) { + LYXERR0("External template preparation killed."); + if (buffer().isClone() && buffer().isExporting()) + throw ConversionException(); + } } @@ -737,8 +757,14 @@ int InsetExternal::plaintext(odocstringstream & os, bool const dryrun = runparams.dryrun || runparams.inComment; otexstream ots(os); ots << '\n'; // output external material on a new line - external::writeExternal(params_, "Ascii", buffer(), ots, - *(runparams.exportdata), external_in_tmpdir, dryrun); + external::RetVal retval = + external::writeExternal(params_, "Ascii", buffer(), ots, + *(runparams.exportdata), external_in_tmpdir, dryrun); + if (retval == external::KILLED) { + LYXERR0("External template preparation killed."); + if (buffer().isClone() && buffer().isExporting()) + throw ConversionException(); + } return PLAINTEXT_NEWLINE; } @@ -750,8 +776,14 @@ int InsetExternal::docbook(odocstream & os, bool const dryrun = runparams.dryrun || runparams.inComment; odocstringstream ods; otexstream ots(ods); - external::writeExternal(params_, "DocBook", buffer(), ots, - *(runparams.exportdata), external_in_tmpdir, dryrun); + external::RetVal retval = + external::writeExternal(params_, "DocBook", buffer(), ots, + *(runparams.exportdata), external_in_tmpdir, dryrun); + if (retval == external::KILLED) { + LYXERR0("External template preparation killed."); + if (buffer().isClone() && buffer().isExporting()) + throw ConversionException(); + } os << ods.str(); return int(count(ods.str().begin(), ods.str().end(), '\n')); } @@ -764,8 +796,14 @@ docstring InsetExternal::xhtml(XHTMLStream & xs, bool const dryrun = runparams.dryrun || runparams.inComment; odocstringstream ods; otexstream ots(ods); - external::writeExternal(params_, "XHTML", buffer(), ots, - *(runparams.exportdata), external_in_tmpdir, dryrun); + external::RetVal retval = + external::writeExternal(params_, "XHTML", buffer(), ots, + *(runparams.exportdata), external_in_tmpdir, dryrun); + if (retval == external::KILLED) { + LYXERR0("External template preparation killed."); + if (buffer().isClone() && buffer().isExporting()) + throw ConversionException(); + } xs << XHTMLStream::ESCAPE_NONE << ods.str(); return docstring(); }