X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetExternal.cpp;h=1fafc96a6e26500e353513de873a7ebf9f63969b;hb=d6f1915684328c6e3fe61c6eef8846b5cabec334;hp=1d525157462db6a39c9520b244aab640493fb926;hpb=7677e9487c1669735a2aa9b2356199c2f608fe15;p=lyx.git diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index 1d52515746..1fafc96a6e 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -12,7 +12,6 @@ #include "InsetExternal.h" #include "insets/ExternalSupport.h" -#include "insets/ExternalTemplate.h" #include "insets/RenderButton.h" #include "insets/RenderGraphic.h" #include "insets/RenderPreview.h" @@ -36,13 +35,13 @@ #include "graphics/PreviewLoader.h" +#include "support/convert.h" #include "support/debug.h" #include "support/ExceptionMessage.h" #include "support/filetools.h" #include "support/gettext.h" #include "support/lstrings.h" #include "support/lyxlib.h" -#include "support/convert.h" #include "support/Translator.h" #include @@ -54,8 +53,6 @@ using namespace lyx::support; namespace { -lyx::external::DisplayType const defaultDisplayType = lyx::external::NoDisplay; - unsigned int const defaultLyxScale = 100; string defaultTemplateName; @@ -72,8 +69,6 @@ namespace external { TempName::TempName() { FileName const tempname = FileName::tempName("lyxext"); - // FIXME: This is unsafe - tempname.removeFile(); // must have an extension for the converter code to work correctly. tempname_ = FileName(tempname.absFilename() + ".tmp"); } @@ -98,39 +93,11 @@ TempName & TempName::operator=(TempName const & other) return *this; } - -namespace { - -/// The translator between the Display enum and corresponding lyx string. -Translator const initTranslator() -{ - Translator translator(DefaultDisplay, "default"); - - // Fill the display translator - translator.addPair(MonochromeDisplay, "monochrome"); - translator.addPair(GrayscaleDisplay, "grayscale"); - translator.addPair(ColorDisplay, "color"); - translator.addPair(PreviewDisplay, "preview"); - translator.addPair(NoDisplay, "none"); - - return translator; -} - -} // namespace anon - - -Translator const & displayTranslator() -{ - static Translator const translator = - initTranslator(); - return translator; -} - } // namespace external InsetExternalParams::InsetExternalParams() - : display(defaultDisplayType), + : display(true), lyxscale(defaultLyxScale), draft(false) { @@ -180,6 +147,9 @@ void InsetExternalParams::settemplate(string const & name) clearIfNotFound(extradata, external::Extra, ids); clearIfNotFound(resizedata, external::Resize, ids); clearIfNotFound(rotationdata, external::Rotate, ids); + + // + preview_mode = et->preview_mode; } @@ -188,14 +158,11 @@ void InsetExternalParams::write(Buffer const & buf, ostream & os) const os << "External\n" << "\ttemplate " << templatename() << '\n'; - if (!filename.empty()) { + if (!filename.empty()) os << "\tfilename " << filename.outputFilename(buf.filePath()) << '\n'; - os << "\tembed " << (filename.embedded() ? filename.inzipName() : "\"\"") << '\n'; - } - if (display != defaultDisplayType) - os << "\tdisplay " - << external::displayTranslator().find(display) - << '\n'; + + if (!display) + os << "\tdisplay false\n"; if (lyxscale != defaultLyxScale) os << "\tlyxscale " << convert(lyxscale) << '\n'; @@ -245,10 +212,9 @@ void InsetExternalParams::write(Buffer const & buf, ostream & os) const bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) { - enum ExternalTags { + enum { EX_TEMPLATE = 1, EX_FILENAME, - EX_EMBED, EX_DISPLAY, EX_LYXSCALE, EX_DRAFT, @@ -270,7 +236,6 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) { "clip", EX_CLIP }, { "display", EX_DISPLAY}, { "draft", EX_DRAFT}, - { "embed", EX_EMBED}, { "extra", EX_EXTRA }, { "filename", EX_FILENAME}, { "height", EX_HEIGHT }, @@ -283,7 +248,7 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) { "width", EX_WIDTH } }; - PushPopHelper pph(lex, external_tags, EX_END); + PushPopHelper pph(lex, external_tags); bool found_end = false; bool read_error = false; @@ -302,18 +267,9 @@ bool InsetExternalParams::read(Buffer const & buffer, Lexer & lex) break; } - case EX_EMBED: { - lex.next(); - string const name = lex.getString(); - filename.setInzipName(name); - filename.setEmbed(!name.empty()); - break; - } - case EX_DISPLAY: { lex.next(); - string const name = lex.getString(); - display = external::displayTranslator().find(name); + display = lex.getString() != "false"; break; } @@ -428,23 +384,6 @@ InsetExternal::~InsetExternal() } -void InsetExternal::setBuffer(Buffer & buffer) -{ - if (buffer_) { - try { - // a file may not be copied successfully when, e.g. buffer_ - // has already been closed. - params_.filename = params_.filename.copyTo(buffer); - } catch (ExceptionMessage const & message) { - Alert::error(message.title_, message.details_); - // failed to embed - params_.filename.setEmbed(false); - } - } - Inset::setBuffer(buffer); -} - - void InsetExternal::statusChanged() const { updateFrontend(); @@ -455,7 +394,7 @@ void InsetExternal::doDispatch(Cursor & cur, FuncRequest & cmd) { switch (cmd.action) { - case LFUN_EXTERNAL_EDIT: { + case LFUN_INSET_EDIT: { InsetExternalParams p = params(); if (!cmd.argument().empty()) string2params(to_utf8(cmd.argument()), buffer(), p); @@ -493,10 +432,10 @@ bool InsetExternal::getStatus(Cursor & cur, FuncRequest const & cmd, { switch (cmd.action) { - case LFUN_EXTERNAL_EDIT: + case LFUN_INSET_EDIT: case LFUN_INSET_MODIFY: case LFUN_INSET_DIALOG_UPDATE: - flag.enabled(true); + flag.setEnabled(true); return true; default: @@ -505,18 +444,6 @@ bool InsetExternal::getStatus(Cursor & cur, FuncRequest const & cmd, } -void InsetExternal::registerEmbeddedFiles(EmbeddedFileList & files) const -{ - files.registerFile(params_.filename, this, buffer()); -} - - -void InsetExternal::updateEmbeddedFile(EmbeddedFile const & file) -{ - params_.filename = file; -} - - void InsetExternal::edit(Cursor & cur, bool, EntryDirection) { cur.bv().showDialog("external", @@ -539,68 +466,16 @@ void InsetExternal::draw(PainterInfo & pi, int x, int y) const namespace { -enum RenderType { - RENDERBUTTON, - RENDERGRAPHIC, - RENDERPREVIEW -}; - - -RenderType getRenderType(InsetExternalParams const & p) -{ - if (!external::getTemplatePtr(p) || - p.filename.empty() || - p.display == external::NoDisplay) - return RENDERBUTTON; - - if (p.display == external::PreviewDisplay) { - if (RenderPreview::status() != LyXRC::PREVIEW_OFF) - return RENDERPREVIEW; - return RENDERBUTTON; - } - - if (p.display == external::DefaultDisplay && - lyxrc.display_graphics == graphics::NoDisplay) - return RENDERBUTTON; - return RENDERGRAPHIC; -} - - graphics::Params get_grfx_params(InsetExternalParams const & eparams) { graphics::Params gparams; - gparams.filename = eparams.filename.availableFile(); - gparams.icon = eparams.filename.embedded() ? "pin.png" : ""; + gparams.filename = eparams.filename; gparams.scale = eparams.lyxscale; if (eparams.clipdata.clip) gparams.bb = eparams.clipdata.bbox; gparams.angle = convert(eparams.rotationdata.adjAngle()); - - switch (eparams.display) { - case external::DefaultDisplay: - gparams.display = graphics::DefaultDisplay; - break; - case external::MonochromeDisplay: - gparams.display = graphics::MonochromeDisplay; - break; - case external::GrayscaleDisplay: - gparams.display = graphics::GrayscaleDisplay; - break; - case external::ColorDisplay: - gparams.display = graphics::ColorDisplay; - break; - case external::NoDisplay: - gparams.display = graphics::NoDisplay; - break; - default: - BOOST_ASSERT(false); - } - if (gparams.display == graphics::DefaultDisplay) - gparams.display = graphics::DisplayType(lyxrc.display_graphics); - // Override the above if we're not using a gui - if (!use_gui) - gparams.display = graphics::NoDisplay; + gparams.display = eparams.display; return gparams; } @@ -626,8 +501,7 @@ docstring screenLabel(InsetExternalParams const & params, static bool isPreviewWanted(InsetExternalParams const & params) { - return params.display == external::PreviewDisplay && - params.filename.isReadableFile(); + return params.display && params.filename.isReadableFile(); } @@ -673,44 +547,43 @@ void InsetExternal::setParams(InsetExternalParams const & p) // will use this. defaultTemplateName = params_.templatename(); - switch (getRenderType(params_)) { - case RENDERBUTTON: { + if (!external::getTemplatePtr(params_) || params_.filename.empty() + || !params_.display + || !lyxrc.display_graphics + || params_.preview_mode == PREVIEW_OFF + || (params_.preview_mode == PREVIEW_INSTANT + && RenderPreview::status() == LyXRC::PREVIEW_OFF)) { RenderButton * button_ptr = renderer_->asButton(); if (!button_ptr) { renderer_.reset(new RenderButton); button_ptr = renderer_->asButton(); } - button_ptr->update(screenLabel(params_, buffer()), true); - break; + return; } - case RENDERGRAPHIC: { + switch (params_.preview_mode) { + case PREVIEW_OFF: + // Already taken care of above. + LASSERT(false, return); + break; + case PREVIEW_INSTANT: { + RenderMonitoredPreview * preview_ptr = renderer_->asMonitoredPreview(); + renderer_.reset(new RenderMonitoredPreview(this)); + preview_ptr = renderer_->asMonitoredPreview(); + preview_ptr->fileChanged(boost::bind(&InsetExternal::fileChanged, this)); + if (preview_ptr->monitoring()) + preview_ptr->stopMonitoring(); + add_preview_and_start_loading(*preview_ptr, *this, buffer()); + break; + } + case PREVIEW_GRAPHICS: { RenderGraphic * graphic_ptr = renderer_->asGraphic(); if (!graphic_ptr) { renderer_.reset(new RenderGraphic(this)); graphic_ptr = renderer_->asGraphic(); } - graphic_ptr->update(get_grfx_params(params_)); - - break; - } - - case RENDERPREVIEW: { - RenderMonitoredPreview * preview_ptr = - renderer_->asMonitoredPreview(); - if (!preview_ptr) { - renderer_.reset(new RenderMonitoredPreview(this)); - preview_ptr = renderer_->asMonitoredPreview(); - preview_ptr->fileChanged( - boost::bind(&InsetExternal::fileChanged, this)); - } - - if (preview_ptr->monitoring()) - preview_ptr->stopMonitoring(); - add_preview_and_start_loading(*preview_ptr, *this, buffer()); - break; } } @@ -724,7 +597,7 @@ void InsetExternal::fileChanged() const return; RenderMonitoredPreview * const ptr = renderer_->asMonitoredPreview(); - BOOST_ASSERT(ptr); + LASSERT(ptr, /**/); ptr->removePreview(*buffer); add_preview_and_start_loading(*ptr, *this, *buffer); @@ -740,11 +613,8 @@ void InsetExternal::write(ostream & os) const void InsetExternal::read(Lexer & lex) { InsetExternalParams params; - if (params.read(buffer(), lex)) { - // exception handling is not needed as long as embedded files are in place. - params.filename.enable(buffer().embedded(), buffer(), false); + if (params.read(buffer(), lex)) setParams(params); - } } @@ -838,8 +708,17 @@ void InsetExternal::validate(LaTeXFeatures & features) const } external::Template::Formats::const_iterator cit = et.formats.find(format); - if (cit == et.formats.end()) - return; + + if (cit == et.formats.end()) { + // If the template has not specified a PDFLaTeX output, + // we try the LaTeX format. + if (format == "PDFLaTeX") { + cit = et.formats.find("LaTeX"); + if (cit == et.formats.end()) + return; + } else + return; + } // FIXME: We don't need that always features.require("lyxdot"); @@ -875,6 +754,12 @@ void InsetExternal::addPreview(graphics::PreviewLoader & ploader) const } +docstring InsetExternal::contextMenu(BufferView const &, int, int) const +{ + return from_ascii("context-external"); +} + + void InsetExternal::string2params(string const & in, Buffer const & buffer, InsetExternalParams & params) {