X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetInclude.cpp;h=870310ef2ddaa9c03f3186ee18d4fc39f29f3939;hb=eb294eadb5e7f22880da399ae082f74567bbfc4e;hp=45c5a236d1c2aa8fb6e61db05340a56fccc0958c;hpb=c0a59871813d853ba455ec8d39be61db4f4b2848;p=lyx.git diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp index 45c5a236d1..870310ef2d 100644 --- a/src/insets/InsetInclude.cpp +++ b/src/insets/InsetInclude.cpp @@ -4,7 +4,7 @@ * Licence details can be found in the file COPYING. * * \author Lars Gullik Bjønnes - * \author Richard Heck (conversion to InsetCommand) + * \author Richard Kimberly Heck (conversion to InsetCommand) * * Full author contact details are available in file CREDITS. */ @@ -182,10 +182,10 @@ char_type replaceCommaInBraces(docstring & params) InsetInclude::InsetInclude(Buffer * buf, InsetCommandParams const & p) : InsetCommand(buf, p), include_label(uniqueID()), preview_(make_unique(this)), failedtoload_(false), - set_label_(false), label_(nullptr), child_buffer_(nullptr), file_exist_(false), + label_(nullptr), child_buffer_(nullptr), file_exist_(false), recursion_error_(false) { - preview_->connect([=](){ fileChanged(); }); + preview_->connect([this](){ fileChanged(); }); if (isListings(params())) { InsetListingsParams listing_params(to_utf8(p["lstparams"])); @@ -198,10 +198,10 @@ InsetInclude::InsetInclude(Buffer * buf, InsetCommandParams const & p) InsetInclude::InsetInclude(InsetInclude const & other) : InsetCommand(other), include_label(other.include_label), preview_(make_unique(this)), failedtoload_(false), - set_label_(false), label_(nullptr), child_buffer_(nullptr), + label_(nullptr), child_buffer_(nullptr), file_exist_(other.file_exist_),recursion_error_(other.recursion_error_) { - preview_->connect([=](){ fileChanged(); }); + preview_->connect([this](){ fileChanged(); }); if (other.label_) label_ = new InsetLabel(*other.label_); @@ -376,7 +376,6 @@ void InsetInclude::setParams(InsetCommandParams const & p) recursion_error_ = false; InsetCommand::setParams(p); - set_label_ = false; if (preview_->monitoring()) preview_->stopMonitoring(); @@ -400,7 +399,7 @@ bool InsetInclude::isChildIncluded() const docstring InsetInclude::screenLabel() const { - docstring pre = file_exist_ ? docstring() : _("FILE MISSING:"); + docstring pre = file_exist_ ? docstring() : _("MISSING:"); docstring temp; @@ -563,6 +562,16 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const FileName const included_file = includedFileName(buffer(), params()); Buffer const * const masterBuffer = buffer().masterBuffer(); + if (runparams.inDeletedInset) { + // We cannot strike-out whole children, + // so we just output a note. + os << "\\textbf{" + << bformat(buffer().B_("[INCLUDED FILE %1$s DELETED!]"), + from_utf8(included_file.onlyFileName())) + << "}"; + return; + } + // if incfile is relative, make it relative to the master // buffer directory. if (!FileName::isAbsolute(incfile)) { @@ -609,9 +618,9 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const FileName const writefile(makeAbsPath(mangled, runparams.for_preview ? buffer().temppath() : masterBuffer->temppath())); - LYXERR(Debug::LATEX, "incfile:" << incfile); - LYXERR(Debug::LATEX, "exportfile:" << exportfile); - LYXERR(Debug::LATEX, "writefile:" << writefile); + LYXERR(Debug::OUTFILE, "incfile:" << incfile); + LYXERR(Debug::OUTFILE, "exportfile:" << exportfile); + LYXERR(Debug::OUTFILE, "writefile:" << writefile); string const tex_format = flavor2format(runparams.flavor); @@ -774,7 +783,7 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const if (checksum_in != checksum_out) { if (!included_file.copyTo(writefile)) { // FIXME UNICODE - LYXERR(Debug::LATEX, + LYXERR(Debug::OUTFILE, to_utf8(bformat(_("Could not copy the file\n%1$s\n" "into the temporary directory."), from_utf8(included_file.absFileName())))); @@ -997,14 +1006,14 @@ int InsetInclude::plaintext(odocstringstream & os, { // just write the filename if we're making a tooltip or toc entry, // or are generating this for advanced search - if (op.for_tooltip || op.for_toc || op.for_search) { + if (op.for_tooltip || op.for_toc || op.find_effective()) { os << '[' << screenLabel() << '\n' << ltrim(getParam("filename")) << "\n]"; return PLAINTEXT_NEWLINE + 1; // one char on a separate line } if (isVerbatim(params()) || isListings(params())) { - if (op.for_search) { + if (op.find_effective()) { os << '[' << screenLabel() << ']'; } else { @@ -1186,6 +1195,12 @@ void InsetInclude::collectBibKeys(InsetIterator const & /*di*/, FileNameList & c } +bool InsetInclude::inheritFont() const +{ + return !isVerbatim(params()); +} + + void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const { LBUFERR(mi.base.bv); @@ -1200,15 +1215,9 @@ void InsetInclude::metrics(MetricsInfo & mi, Dimension & dim) const if (use_preview) { preview_->metrics(mi, dim); } else { - if (!set_label_) { - set_label_ = true; - button_.update(screenLabel(), true, false, !file_exist_ || recursion_error_); - } - button_.metrics(mi, dim); + setBroken(!file_exist_ || recursion_error_); + InsetCommand::metrics(mi, dim); } - - Box b(0, dim.wid, -dim.asc, dim.des); - button_.setBox(b); } @@ -1226,7 +1235,7 @@ void InsetInclude::draw(PainterInfo & pi, int x, int y) const if (use_preview) preview_->draw(pi, x, y); else - button_.draw(pi, x, y); + InsetCommand::draw(pi, x, y); } @@ -1242,7 +1251,7 @@ string InsetInclude::contextMenuName() const } -Inset::RowFlags InsetInclude::rowFlags() const +int InsetInclude::rowFlags() const { return type(params()) == INPUT ? Inline : Display; } @@ -1347,41 +1356,44 @@ void InsetInclude::addToToc(DocIterator const & cpit, bool output_active, InsetListingsParams p(to_utf8(params()["lstparams"])); b.argumentItem(from_utf8(p.getParamValue("caption"))); b.pop(); - } else if (isVerbatim(params())) { + return; + } + if (isVerbatim(params())) { TocBuilder & b = backend.builder("child"); b.pushItem(cpit, screenLabel(), output_active); b.pop(); - } else { - Buffer const * const childbuffer = loadIfNeeded(); + return; + } + // the common case + Buffer const * const childbuffer = loadIfNeeded(); - TocBuilder & b = backend.builder("child"); - string const fname = ltrim(to_utf8(params()["filename"])); - // mark non-existent childbuffer with FILE MISSING - docstring const str = (childbuffer ? from_ascii("") : _("FILE MISSING: ")) - + from_utf8(onlyFileName(fname)) + " (" + from_utf8(fname) + ")"; - b.pushItem(cpit, str, output_active); - b.pop(); + TocBuilder & b = backend.builder("child"); + string const fname = ltrim(to_utf8(params()["filename"])); + // mark non-existent file with MISSING + docstring const str = (file_exist_ ? from_ascii("") : _("MISSING: ")) + + from_utf8(onlyFileName(fname)) + " (" + from_utf8(fname) + ")"; + b.pushItem(cpit, str, output_active); + b.pop(); - if (!childbuffer) - return; + if (!childbuffer) + return; - if (checkForRecursiveInclude(childbuffer)) - return; - buffer().pushIncludedBuffer(childbuffer); - // Update the child's tocBackend. The outliner uses the master's, but - // the navigation menu uses the child's. - childbuffer->tocBackend().update(output_active, utype); - // Include Tocs from children - childbuffer->inset().addToToc(DocIterator(), output_active, utype, - backend); - buffer().popIncludedBuffer(); - // Copy missing outliner names (though the user has been warned against - // having different document class and module selection between master - // and child). - for (auto const & name - : childbuffer->params().documentClass().outlinerNames()) - backend.addName(name.first, translateIfPossible(name.second)); - } + if (checkForRecursiveInclude(childbuffer)) + return; + buffer().pushIncludedBuffer(childbuffer); + // Update the child's tocBackend. The outliner uses the master's, but + // the navigation menu uses the child's. + childbuffer->tocBackend().update(output_active, utype); + // Include Tocs from children + childbuffer->inset().addToToc(DocIterator(), output_active, utype, + backend); + buffer().popIncludedBuffer(); + // Copy missing outliner names (though the user has been warned against + // having different document class and module selection between master + // and child). + for (auto const & name + : childbuffer->params().documentClass().outlinerNames()) + backend.addName(name.first, translateIfPossible(name.second)); } @@ -1414,12 +1426,9 @@ void InsetInclude::updateBuffer(ParIterator const & it, UpdateType utype, bool c if (childbuffer) { if (!checkForRecursiveInclude(childbuffer)) childbuffer->updateBuffer(Buffer::UpdateChildOnly, utype); - button_.update(screenLabel(), true, false, recursion_error_); return; } - button_.update(screenLabel(), true, false, !file_exist_); - if (!isListings(params())) return;