X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetBranch.cpp;h=ad7cbc5cdc21fb6f83efc517a2be06a1842790b8;hb=c0adb03a7ae15cf6409ee3cb64f4cc91c24c052e;hp=a87cf053379444f43973a0da4c5b4eb33f929a43;hpb=6f97684d56f852c11c0146dda4a3b4e6bf1e8d6e;p=lyx.git diff --git a/src/insets/InsetBranch.cpp b/src/insets/InsetBranch.cpp index a87cf05337..ad7cbc5cdc 100644 --- a/src/insets/InsetBranch.cpp +++ b/src/insets/InsetBranch.cpp @@ -17,7 +17,6 @@ #include "BufferView.h" #include "BranchList.h" #include "ColorSet.h" -#include "Counters.h" #include "Cursor.h" #include "DispatchResult.h" #include "FuncRequest.h" @@ -44,7 +43,7 @@ using namespace std; namespace lyx { InsetBranch::InsetBranch(Buffer * buf, InsetBranchParams const & params) - : InsetCollapsable(buf, InsetText::DefaultLayout), params_(params) + : InsetCollapsible(buf, InsetText::DefaultLayout), params_(params) {} @@ -53,14 +52,14 @@ void InsetBranch::write(ostream & os) const os << "Branch "; params_.write(os); os << '\n'; - InsetCollapsable::write(os); + InsetCollapsible::write(os); } void InsetBranch::read(Lexer & lex) { params_.read(lex); - InsetCollapsable::read(lex); + InsetCollapsible::read(lex); } @@ -72,11 +71,23 @@ docstring InsetBranch::toolTip(BufferView const & bv, int, int) const _("active") : _("non-active"); docstring const status = (masterstatus == childstatus) ? masterstatus : - support::bformat(_("master: %1$s, child: %2$s"), + support::bformat(_("master %1$s, child %2$s"), masterstatus, childstatus); - docstring const heading = params_.inverted ? - support::bformat(_("Branch, inverted (%1$s): %2$s"), status, params_.branch) : - support::bformat(_("Branch (%1$s): %2$s"), status, params_.branch); + + docstring const masteron = producesOutput() ? + _("on") : _("off"); + docstring const childon = + (isBranchSelected(true) != params_.inverted) ? + _("on") : _("off"); + docstring const onoff = (masteron == childon) ? + masteron : + support::bformat(_("master %1$s, child %2$s"), + masteron, childon); + + docstring const heading = + support::bformat(_("Branch Name: %1$s\nBranch Status: %2$s\nInset Status: %3$s"), + params_.branch, status, onoff); + if (isOpen(bv)) return heading; return toolTipText(heading + from_ascii("\n")); @@ -87,25 +98,18 @@ docstring const InsetBranch::buttonLabel(BufferView const &) const { static char_type const tick = 0x2714; // ✔ U+2714 HEAVY CHECK MARK static char_type const cross = 0x2716; // ✖ U+2716 HEAVY MULTIPLICATION X - static char_type const itick = 0x271A; // ✚ U+271A HEAVY GREEK CROSS - static char_type const icross = 0x274E; // ❎ U+274E NEGATIVE SQUARED CROSS MARK Buffer const & realbuffer = *buffer().masterBuffer(); BranchList const & branchlist = realbuffer.params().branchlist(); bool const inmaster = branchlist.find(params_.branch); bool const inchild = buffer().params().branchlist().find(params_.branch); - bool const master_selected = isBranchSelected(); - bool const child_selected = isBranchSelected(true); + bool const master_selected = producesOutput(); + bool const child_selected = isBranchSelected(true) != params_.inverted; - docstring symb = docstring(1, master_selected ? - (params_.inverted ? icross : tick) : - (params_.inverted ? itick: cross)); - if (inchild && master_selected != child_selected) { - symb += child_selected ? - (params_.inverted ? icross : tick) : - (params_.inverted ? itick: cross); - } + docstring symb = docstring(1, master_selected ? tick : cross); + if (inchild && master_selected != child_selected) + symb += (child_selected ? tick : cross); if (decoration() == InsetLayout::MINIMALISTIC) return symb + params_.branch; @@ -186,10 +190,29 @@ void InsetBranch::doDispatch(Cursor & cur, FuncRequest & cmd) // cur.forceBufferUpdate() is not enough buf->updateBuffer(); } + + // if branch exists in a descendant, update previews. + // TODO: only needed if "Show preview" is enabled in the included inset. + bool exists_in_desc = false; + for (auto const & it : buf->getDescendants()) { + if (it->params().branchlist().find(params_.branch)) + exists_in_desc = true; + } + if (exists_in_desc) { + // TODO: ideally we would only update the previews of the + // specific children that have this branch directly or + // in one of their descendants + buf->removePreviews(); + buf->updatePreviews(); + } break; } case LFUN_BRANCH_INVERT: + cur.recordUndoInset(this); params_.inverted = !params_.inverted; + // what we really want here is a TOC update, but that means + // a full buffer update + cur.forceBufferUpdate(); break; case LFUN_BRANCH_ADD: lyx::dispatch(FuncRequest(LFUN_BRANCH_ADD, params_.branch)); @@ -198,11 +221,11 @@ void InsetBranch::doDispatch(Cursor & cur, FuncRequest & cmd) if (cmd.argument() == "assign") setStatus(cur, isBranchSelected() ? Open : Collapsed); else - InsetCollapsable::doDispatch(cur, cmd); + InsetCollapsible::doDispatch(cur, cmd); break; default: - InsetCollapsable::doDispatch(cur, cmd); + InsetCollapsible::doDispatch(cur, cmd); break; } } @@ -250,11 +273,11 @@ bool InsetBranch::getStatus(Cursor & cur, FuncRequest const & cmd, if (cmd.argument() == "assign") flag.setEnabled(true); else - return InsetCollapsable::getStatus(cur, cmd, flag); + return InsetCollapsible::getStatus(cur, cmd, flag); break; default: - return InsetCollapsable::getStatus(cur, cmd, flag); + return InsetCollapsible::getStatus(cur, cmd, flag); } return true; } @@ -276,17 +299,26 @@ bool InsetBranch::isBranchSelected(bool const child) const } +bool InsetBranch::producesOutput() const +{ + return isBranchSelected() != params_.inverted; +} + + void InsetBranch::latex(otexstream & os, OutputParams const & runparams) const { - if (isBranchActive()) - InsetText::latex(os, runparams); + if (producesOutput()) { + OutputParams rp = runparams; + rp.inbranch = true; + InsetText::latex(os, rp); + } } int InsetBranch::plaintext(odocstringstream & os, OutputParams const & runparams, size_t max_length) const { - if (!isBranchActive()) + if (!producesOutput()) return 0; int len = InsetText::plaintext(os, runparams, max_length); @@ -297,13 +329,13 @@ int InsetBranch::plaintext(odocstringstream & os, int InsetBranch::docbook(odocstream & os, OutputParams const & runparams) const { - return isBranchActive() ? InsetText::docbook(os, runparams) : 0; + return producesOutput() ? InsetText::docbook(os, runparams) : 0; } docstring InsetBranch::xhtml(XHTMLStream & xs, OutputParams const & rp) const { - if (isBranchActive()) { + if (producesOutput()) { OutputParams newrp = rp; newrp.par_begin = 0; newrp.par_end = text().paragraphs().size(); @@ -315,23 +347,23 @@ docstring InsetBranch::xhtml(XHTMLStream & xs, OutputParams const & rp) const void InsetBranch::toString(odocstream & os) const { - if (isBranchActive()) - InsetCollapsable::toString(os); + if (producesOutput()) + InsetCollapsible::toString(os); } void InsetBranch::forOutliner(docstring & os, size_t const maxlen, bool const shorten) const { - if (isBranchActive()) - InsetCollapsable::forOutliner(os, maxlen, shorten); + if (producesOutput()) + InsetCollapsible::forOutliner(os, maxlen, shorten); } void InsetBranch::validate(LaTeXFeatures & features) const { - if (isBranchActive()) - InsetCollapsable::validate(features); + if (producesOutput()) + InsetCollapsible::validate(features); } @@ -341,10 +373,10 @@ string InsetBranch::contextMenuName() const } -bool InsetBranch::isMacroScope() const +bool InsetBranch::isMacroScope() const { // Its own scope if not selected by buffer - return !isBranchActive(); + return !producesOutput(); } @@ -370,37 +402,28 @@ void InsetBranch::string2params(string const & in, InsetBranchParams & params) } -void InsetBranch::addToToc(DocIterator const & cpit, bool output_active, - UpdateType utype) const +void InsetBranch::updateBuffer(ParIterator const & it, UpdateType utype, bool const deleted) { - DocIterator pit = cpit; - pit.push_back(CursorSlice(const_cast(*this))); - - docstring str; - text().forOutliner(str, TOC_ENTRY_LENGTH); - str = params_.branch + (params_.inverted ? " (-):" : ": ") + str; - - shared_ptr toc = buffer().tocBackend().toc("branch"); - toc->push_back(TocItem(pit, 0, str, output_active)); - - // Proceed with the rest of the inset. - bool const doing_output = output_active && isBranchActive(); - InsetCollapsable::addToToc(cpit, doing_output, utype); + setLabel(params_.branch + (params_.inverted ? " (-)" : "")); + InsetCollapsible::updateBuffer(it, utype, deleted); } void InsetBranchParams::write(ostream & os) const { - os << to_utf8(branch) - << '\n' - << "inverted " + os << to_utf8(branch) + << '\n' + << "inverted " << inverted; } void InsetBranchParams::read(Lexer & lex) { - lex >> branch; + // There may be a space in branch name + // if we wanted to use lex>>, the branch name should be properly in quotes + lex.eatLine(); + branch = lex.getDocString(); lex >> "inverted" >> inverted; }