X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetExternal.cpp;h=ea51664978c33fca4dee8ea53e9d1791182b3240;hb=dbb1ac30e9a87007af7c53f0f93ec9e21826f90b;hp=389056155189076640fc87a0ecef5cd242e23c8e;hpb=4c7a5d00245799695ea81aa0192151eed8f9c5fb;p=lyx.git diff --git a/src/insets/InsetExternal.cpp b/src/insets/InsetExternal.cpp index 3890561551..ea51664978 100644 --- a/src/insets/InsetExternal.cpp +++ b/src/insets/InsetExternal.cpp @@ -36,18 +36,18 @@ #include "graphics/PreviewLoader.h" +#include "support/bind.h" #include "support/convert.h" #include "support/debug.h" #include "support/ExceptionMessage.h" #include "support/filetools.h" #include "support/gettext.h" +#include "support/lassert.h" #include "support/lstrings.h" #include "support/lyxlib.h" -#include "support/Translator.h" - -#include #include +#include using namespace std; using namespace lyx::support; @@ -71,7 +71,7 @@ TempName::TempName() { FileName const tempname = FileName::tempName("lyxext"); // must have an extension for the converter code to work correctly. - tempname_ = FileName(tempname.absFilename() + ".tmp"); + tempname_ = FileName(tempname.absFileName() + ".tmp"); } @@ -161,7 +161,7 @@ void InsetExternalParams::write(Buffer const & buf, ostream & os) const << "\ttemplate " << templatename() << '\n'; if (!filename.empty()) - os << "\tfilename " << filename.outputFilename(buf.filePath()) << '\n'; + os << "\tfilename " << filename.outputFileName(buf.filePath()) << '\n'; if (!display) os << "\tdisplay false\n"; @@ -371,6 +371,7 @@ InsetExternal::InsetExternal(Buffer * buf) } +// Mouse hover is not copied and remains empty InsetExternal::InsetExternal(InsetExternal const & other) : Inset(other), boost::signals::trackable(), @@ -382,6 +383,19 @@ InsetExternal::InsetExternal(InsetExternal const & other) InsetExternal::~InsetExternal() { hideDialogs("external", this); + + map::iterator it = mouse_hover_.begin(); + map::iterator end = mouse_hover_.end(); + for (; it != end; ++it) + if (it->second) + it->first->clearLastInset(this); +} + + +bool InsetExternal::setMouseHover(BufferView const * bv, bool mouse_hover) +{ + mouse_hover_[bv] = mouse_hover; + return true; } @@ -393,7 +407,7 @@ void InsetExternal::statusChanged() const void InsetExternal::doDispatch(Cursor & cur, FuncRequest & cmd) { - switch (cmd.action_) { + switch (cmd.action()) { case LFUN_INSET_EDIT: { InsetExternalParams p = params(); @@ -406,6 +420,7 @@ void InsetExternal::doDispatch(Cursor & cur, FuncRequest & cmd) case LFUN_INSET_MODIFY: { InsetExternalParams p; string2params(to_utf8(cmd.argument()), buffer(), p); + cur.recordUndo(); setParams(p); break; } @@ -424,7 +439,7 @@ void InsetExternal::doDispatch(Cursor & cur, FuncRequest & cmd) bool InsetExternal::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { - switch (cmd.action_) { + switch (cmd.action()) { case LFUN_INSET_EDIT: case LFUN_INSET_MODIFY: @@ -454,6 +469,8 @@ void InsetExternal::metrics(MetricsInfo & mi, Dimension & dim) const void InsetExternal::draw(PainterInfo & pi, int x, int y) const { + if (renderer_->asButton()) + renderer_->setRenderState(mouse_hover_[pi.base.bv]); renderer_->draw(pi, x, y); } @@ -486,8 +503,14 @@ docstring screenLabel(InsetExternalParams const & params, from_utf8(params.templatename())); // FIXME UNICODE docstring gui = _(ptr->guiName); - return from_utf8(external::doSubstitution(params, buffer, - to_utf8(gui), false)); + gui += ": "; + + if (params.filename.empty()) + gui += "???"; + else + gui += from_utf8(params.filename.relFileName(buffer.filePath())); + + return gui; } } // namespace anon @@ -501,13 +524,15 @@ static bool isPreviewWanted(InsetExternalParams const & params) static docstring latexString(InsetExternal const & inset) { - odocstringstream os; + TexRow texrow; + odocstringstream ods; + otexstream os(ods, texrow); // We don't need to set runparams.encoding since it is not used by // latex(). OutputParams runparams(0); runparams.flavor = OutputParams::LATEX; inset.latex(os, runparams); - return os.str(); + return ods.str(); } @@ -571,7 +596,7 @@ void InsetExternal::setParams(InsetExternalParams const & p) RenderMonitoredPreview * preview_ptr = renderer_->asMonitoredPreview(); renderer_.reset(new RenderMonitoredPreview(this)); preview_ptr = renderer_->asMonitoredPreview(); - preview_ptr->fileChanged(boost::bind(&InsetExternal::fileChanged, this)); + preview_ptr->fileChanged(bind(&InsetExternal::fileChanged, this)); if (preview_ptr->monitoring()) preview_ptr->stopMonitoring(); add_preview_and_start_loading(*preview_ptr, *this, buffer()); @@ -618,14 +643,14 @@ void InsetExternal::read(Lexer & lex) } -int InsetExternal::latex(odocstream & os, OutputParams const & runparams) const +void InsetExternal::latex(otexstream & os, OutputParams const & runparams) const { if (params_.draft) { // FIXME UNICODE os << "\\fbox{\\ttfamily{}" - << from_utf8(params_.filename.outputFilename(buffer().filePath())) + << from_utf8(params_.filename.outputFileName(buffer().filePath())) << "}\n"; - return 1; + return; } // "nice" means that the buffer is exported to LaTeX format but not @@ -641,25 +666,28 @@ int InsetExternal::latex(odocstream & os, OutputParams const & runparams) const external::Template const * const et_ptr = external::getTemplatePtr(params_); if (!et_ptr) - return 0; + return; external::Template const & et = *et_ptr; external::Template::Formats::const_iterator cit = et.formats.find("PDFLaTeX"); if (cit != et.formats.end()) { - return external::writeExternal(params_, "PDFLaTeX", - buffer(), os, - *(runparams.exportdata), - external_in_tmpdir, - dryrun); + int l = external::writeExternal(params_, "PDFLaTeX", + buffer(), os.os(), + *(runparams.exportdata), + external_in_tmpdir, + dryrun); + os.texrow().newlines(l); + return; } } - return external::writeExternal(params_, "LaTeX", buffer(), os, - *(runparams.exportdata), - external_in_tmpdir, - dryrun); + int l = external::writeExternal(params_, "LaTeX", buffer(), os.os(), + *(runparams.exportdata), + external_in_tmpdir, + dryrun); + os.texrow().newlines(l); } @@ -707,8 +735,10 @@ void InsetExternal::validate(LaTeXFeatures & features) const string format; switch (features.runparams().flavor) { case OutputParams::LATEX: + case OutputParams::DVILUATEX: format = "LaTeX"; break; + case OutputParams::LUATEX: case OutputParams::PDFLATEX: case OutputParams::XETEX: format = "PDFLaTeX"; @@ -722,6 +752,9 @@ void InsetExternal::validate(LaTeXFeatures & features) const case OutputParams::TEXT: format = "text"; break; + case OutputParams::LYX: + format = "lyx"; + break; } external::Template::Formats::const_iterator cit = et.formats.find(format); @@ -737,7 +770,7 @@ void InsetExternal::validate(LaTeXFeatures & features) const return; } - // FIXME: We don't need that always + // FIXME: We don't need that always, see InsetGraphics features.require("lyxdot"); vector::const_iterator it = cit->second.requirements.begin(); @@ -772,9 +805,9 @@ void InsetExternal::addPreview(DocIterator const & /*inset_pos*/, } -docstring InsetExternal::contextMenu(BufferView const &, int, int) const +string InsetExternal::contextMenuName() const { - return from_ascii("context-external"); + return "context-external"; }