]> git.lyx.org Git - features.git/blobdiff - src/insets/InsetGraphics.cpp
Completion: handle undo in insets' insertCompletion methods
[features.git] / src / insets / InsetGraphics.cpp
index 433c6cca52da719d457aa6e319afe53093960672..2d93f157fbb975d9a5d1aaa16f44b63c4a930a6c 100644 (file)
@@ -61,6 +61,7 @@ TODO
 #include "FuncRequest.h"
 #include "FuncStatus.h"
 #include "InsetIterator.h"
+#include "LaTeX.h"
 #include "LaTeXFeatures.h"
 #include "Lexer.h"
 #include "MetricsInfo.h"
@@ -111,9 +112,9 @@ namespace {
 string findTargetFormat(string const & format, OutputParams const & runparams)
 {
        // Are we latexing to DVI or PDF?
-       if (runparams.flavor == FLAVOR::PDFLATEX
-           || runparams.flavor == FLAVOR::XETEX
-           || runparams.flavor == FLAVOR::LUATEX) {
+       if (runparams.flavor == Flavor::PdfLaTeX
+           || runparams.flavor == Flavor::XeTeX
+           || runparams.flavor == Flavor::LuaTeX) {
                LYXERR(Debug::GRAPHICS, "findTargetFormat: PDF mode");
                Format const * const f = theFormats().getFormat(format);
                // Convert vector graphics to pdf
@@ -126,8 +127,8 @@ string findTargetFormat(string const & format, OutputParams const & runparams)
                return "png";
        }
 
-    // for HTML and DocBook, we leave the known formats and otherwise convert to png
-    if (runparams.flavor == FLAVOR::HTML || runparams.flavor == FLAVOR::DOCBOOK5) {
+       // for HTML and DocBook, we leave the known formats and otherwise convert to png
+       if (runparams.flavor == Flavor::Html || runparams.flavor == Flavor::DocBook5) {
                Format const * const f = theFormats().getFormat(format);
                // Convert vector graphics to svg
                if (f && f->vectorFormat() && theConverters().isReachable(format, "svg"))
@@ -293,7 +294,7 @@ void InsetGraphics::metrics(MetricsInfo & mi, Dimension & dim) const
 
 void InsetGraphics::draw(PainterInfo & pi, int x, int y) const
 {
-       graphic_->draw(pi, x, y);
+       graphic_->draw(pi, x, y, params_.darkModeSensitive);
 }
 
 
@@ -696,7 +697,7 @@ string InsetGraphics::prepareFile(OutputParams const & runparams) const
                }
                // only show DVI-specific warning when export format is plain latex
                if (!isValidDVIFileName(output_file)
-                       && runparams.flavor == FLAVOR::LATEX) {
+                       && runparams.flavor == Flavor::LaTeX) {
                                frontend::Alert::warning(_("Problematic filename for DVI"),
                                         _("The following filename can cause troubles "
                                               "when running the exported file through LaTeX "
@@ -742,7 +743,7 @@ string InsetGraphics::prepareFile(OutputParams const & runparams) const
 
        if (from == to) {
                // source and destination formats are the same
-               if (!runparams.nice && !FileName(temp_file).hasExtension(ext)) {
+               if (!runparams.nice && !temp_file.hasExtension(ext)) {
                        // The LaTeX compiler will not be able to determine
                        // the file format from the extension, so we must
                        // change it.
@@ -821,7 +822,20 @@ void InsetGraphics::latex(otexstream & os,
        bool const file_exists = !params().filename.empty()
                        && params().filename.isReadableFile();
        string message;
-       if (!file_exists) {
+       // PDFLaTeX and Xe/LuaTeX fall back to draft themselves
+       // and error about it. For DVI/PS, we do something similar here.
+       // We also don't do such tricks when simply exporting a LaTeX file.
+       if (!file_exists && !runparams.nice && runparams.flavor == Flavor::LaTeX) {
+               TeXErrors terr;
+               ErrorList & errorList = buffer().errorList("Export");
+               docstring const s = params().filename.empty() ?
+                                       _("Graphic not specified. Falling back to `draft' mode.")
+                                     : bformat(_("Graphic `%1$s' was not found. Falling back to `draft' mode."),
+                                               params().filename.absoluteFilePath());
+               Paragraph const & par = buffer().paragraphs().front();
+               errorList.push_back(ErrorItem(_("Graphic not found!"), s,
+                                             {par.id(), 0}, {par.id(), -1}));
+               buffer().bufferErrors(terr, errorList);
                if (params().bbox.empty())
                    message = "bb = 0 0 200 100";
                if (!params().draft) {
@@ -832,11 +846,11 @@ void InsetGraphics::latex(otexstream & os,
                if (!message.empty())
                        message += ", ";
                message += "type=eps";
+               // If no existing file "filename" was found LaTeX
+               // draws only a rectangle with the above bb and the
+               // not found filename in it.
+               LYXERR(Debug::GRAPHICS, "\tMessage = \"" << message << '\"');
        }
-       // If no existing file "filename" was found LaTeX
-       // draws only a rectangle with the above bb and the
-       // not found filename in it.
-       LYXERR(Debug::GRAPHICS, "\tMessage = \"" << message << '\"');
 
        // These variables collect all the latex code that should be before and
        // after the actual includegraphics command.
@@ -844,8 +858,8 @@ void InsetGraphics::latex(otexstream & os,
        string after;
 
        // Write the options if there are any.
-       bool const ps = runparams.flavor == FLAVOR::LATEX
-               || runparams.flavor == FLAVOR::DVILUATEX;
+       bool const ps = runparams.flavor == Flavor::LaTeX
+               || runparams.flavor == Flavor::DviLuaTeX;
        string const opts = createLatexOptions(ps);
        LYXERR(Debug::GRAPHICS, "\tOpts = " << opts);