]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetInclude.cpp
This should be the last of the commits refactoring the InsetLayout code.
[lyx.git] / src / insets / InsetInclude.cpp
index c917a3d7d19dbf01e8285d9ed495582e67969c48..89f304db7ea84cb79243da885e46448ecbaee30c 100644 (file)
 #include "BufferParams.h"
 #include "BufferView.h"
 #include "Cursor.h"
-#include "support/debug.h"
 #include "DispatchResult.h"
 #include "Exporter.h"
 #include "FuncRequest.h"
 #include "FuncStatus.h"
-#include "support/gettext.h"
 #include "LaTeXFeatures.h"
 #include "LyX.h"
 #include "LyXRC.h"
 #include "Lexer.h"
 #include "MetricsInfo.h"
 #include "OutputParams.h"
-#include "TocBackend.h"
 #include "TextClass.h"
+#include "TocBackend.h"
 
 #include "frontends/alert.h"
 #include "frontends/Painter.h"
 #include "insets/RenderPreview.h"
 #include "insets/InsetListingsParams.h"
 
+#include "support/debug.h"
 #include "support/docstream.h"
 #include "support/ExceptionMessage.h"
 #include "support/FileNameList.h"
 #include "support/filetools.h"
+#include "support/gettext.h"
 #include "support/lstrings.h" // contains
 #include "support/lyxalgo.h"
 #include "support/convert.h"
@@ -140,8 +140,8 @@ EmbeddedFile const includedFilename(Buffer const & buffer,
        // each time, but there seems to be no easy way around.
        EmbeddedFile file(to_utf8(params["filename"]),
               onlyPath(parentFilename(buffer)));
-       file.setEmbed(params["embed"] == _("true") ? true : false);
-       file.enable(buffer.embeddedFiles().enabled(), &buffer);
+       file.setEmbed(!params["embed"].empty());
+       file.enable(buffer.embedded(), &buffer);
        return file;
 }
 
@@ -202,6 +202,13 @@ void InsetInclude::doDispatch(Cursor & cur, FuncRequest & cmd)
                                                REF_CODE);
                        }
                        try {
+                               // the embed parameter passed back from the dialog
+                               // is "true" or "false", we need to change it.
+                               if (p["embed"] == _("false"))
+                                       p["embed"].clear();
+                               else
+                                       p["embed"] = from_utf8(EmbeddedFile(to_utf8(p["filename"]),
+                                               onlyPath(parentFilename(cur.buffer()))).inzipName());
                                // test parameter
                                includedFilename(cur.buffer(), p);
                        } catch (ExceptionMessage const & message) {
@@ -274,7 +281,7 @@ docstring const InsetInclude::getScreenLabel(Buffer const & buf) const
        else
                temp += from_utf8(onlyFilename(to_utf8(params()["filename"])));
 
-       if (params()["embed"] == _("true"))
+       if (!params()["embed"].empty())
                temp += _(" (embedded)");
        return temp;
 }
@@ -713,17 +720,17 @@ void InsetInclude::updateBibfilesCache(Buffer const & buffer)
 }
 
 
-FileNameList const &
+EmbeddedFileList const &
 InsetInclude::getBibfilesCache(Buffer const & buffer) const
 {
        Buffer * const tmp = getChildBuffer(buffer, params());
        if (tmp) {
                tmp->setParent(0);
-               FileNameList const & cache = tmp->getBibfilesCache();
+               EmbeddedFileList const & cache = tmp->getBibfilesCache();
                tmp->setParent(&buffer);
                return cache;
        }
-       static FileNameList const empty;
+       static EmbeddedFileList const empty;
        return empty;
 }
 
@@ -838,27 +845,27 @@ void add_preview(RenderMonitoredPreview & renderer, InsetInclude const & inset,
 void InsetInclude::addPreview(graphics::PreviewLoader & ploader) const
 {
        Buffer const & buffer = ploader.buffer();
-       if (preview_wanted(params(), buffer)) {
-               preview_->setAbsFile(includedFilename(buffer, params()));
-               docstring const snippet = latex_string(*this, buffer);
-               preview_->addPreview(snippet, ploader);
-       }
+       if (!preview_wanted(params(), buffer))
+               return;
+       preview_->setAbsFile(includedFilename(buffer, params()));
+       docstring const snippet = latex_string(*this, buffer);
+       preview_->addPreview(snippet, ploader);
 }
 
 
-void InsetInclude::addToToc(TocList & toclist, Buffer const & buffer,
-       ParConstIterator const & pit) const
+void InsetInclude::addToToc(Buffer const & buffer,
+       ParConstIterator const & cpit) const
 {
        if (isListings(params())) {
                InsetListingsParams p(to_utf8(params()["lstparams"]));
                string caption = p.getParamValue("caption");
                if (caption.empty())
                        return;
-               Toc & toc = toclist["listing"];
+               Toc & toc = buffer.tocBackend().toc("listing");
                docstring const str = convert<docstring>(toc.size() + 1)
                        + ". " +  from_utf8(caption);
-               // This inset does not have a valid ParConstIterator
-               // so it has to use the iterator of its parent paragraph
+               ParConstIterator pit = cpit;
+               pit.push_back(*this);
                toc.push_back(TocItem(pit, 0, str));
                return;
        }
@@ -866,6 +873,7 @@ void InsetInclude::addToToc(TocList & toclist, Buffer const & buffer,
        if (!childbuffer)
                return;
 
+       TocList & toclist = buffer.tocBackend().tocs();
        TocList const & childtoclist = childbuffer->tocBackend().tocs();
        TocList::const_iterator it = childtoclist.begin();
        TocList::const_iterator const end = childtoclist.end();
@@ -878,30 +886,32 @@ void InsetInclude::addToToc(TocList & toclist, Buffer const & buffer,
 void InsetInclude::updateLabels(Buffer const & buffer, ParIterator const &)
 {
        Buffer const * const childbuffer = getChildBuffer(buffer, params());
-       if (childbuffer)
+       if (childbuffer) {
                lyx::updateLabels(*childbuffer, true);
-       else if (isListings(params())) {
-               InsetListingsParams const par(to_utf8(params()["lstparams"]));
-               if (par.getParamValue("caption").empty())
-                       listings_label_.clear();
-               else {
-                       Counters & counters = buffer.params().getTextClass().counters();
-                       docstring const cnt = from_ascii("listing");
-                       if (counters.hasCounter(cnt)) {
-                               counters.step(cnt);
-                               listings_label_ = buffer.B_("Program Listing ")
-                                       + convert<docstring>(counters.value(cnt));
-                       } else
-                               listings_label_ = buffer.B_("Program Listing");
-               }
+               return;
+       }
+       if (!isListings(params()))
+               return;
+
+       InsetListingsParams const par(to_utf8(params()["lstparams"]));
+       if (par.getParamValue("caption").empty()) {
+               listings_label_.clear();
+               return;
+       }
+       Counters & counters = buffer.params().getTextClass().counters();
+       docstring const cnt = from_ascii("listing");
+       listings_label_ = buffer.B_("Program Listing");
+       if (counters.hasCounter(cnt)) {
+               counters.step(cnt);
+               listings_label_ += " " + convert<docstring>(counters.value(cnt));
        }
 }
 
 
 void InsetInclude::registerEmbeddedFiles(Buffer const & buffer,
-       EmbeddedFiles & files) const
+       EmbeddedFileList & files) const
 {
-       files.registerFile(includedFilename(buffer, params()), this);
+       files.registerFile(includedFilename(buffer, params()), this, buffer);
 }
 
 
@@ -910,7 +920,7 @@ void InsetInclude::updateEmbeddedFile(Buffer const & buf,
 {
        InsetCommandParams p = params();
        p["filename"] = from_utf8(file.outputFilename());
-       p["embedded"] = file.embedded() ? _("true") : _("false");
+       p["embed"] = file.embedded() ? from_utf8(file.inzipName()) : docstring();
        set(p, buf);
 }