X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Finsets%2FInsetLabel.cpp;h=553c6d7b969bac5cb09fcf1f26862c4a99509328;hb=1f0305509b99681885958c03f8d8f04c1564c84c;hp=4dfbc96448a628fb8e34c1bea7a9fd1cd4fd1d47;hpb=2c75ad0294d4cf3698c77020f910e184a60ce5a8;p=lyx.git diff --git a/src/insets/InsetLabel.cpp b/src/insets/InsetLabel.cpp index 4dfbc96448..553c6d7b96 100644 --- a/src/insets/InsetLabel.cpp +++ b/src/insets/InsetLabel.cpp @@ -169,28 +169,29 @@ void InsetLabel::updateBuffer(ParIterator const & par, UpdateType utype) } -void InsetLabel::addToToc(DocIterator const & cpit, bool output_active) const +void InsetLabel::addToToc(DocIterator const & cpit, bool output_active, + UpdateType) const { docstring const & label = getParam("name"); - Toc & toc = buffer().tocBackend().toc("label"); + shared_ptr toc = buffer().tocBackend().toc("label"); if (buffer().insetLabel(label) != this) { - toc.push_back(TocItem(cpit, 0, screen_label_, output_active)); - return; - } - toc.push_back(TocItem(cpit, 0, screen_label_, output_active)); - Buffer::References const & refs = buffer().references(label); - Buffer::References::const_iterator it = refs.begin(); - Buffer::References::const_iterator end = refs.end(); - for (; it != end; ++it) { - DocIterator const ref_pit(it->second); - if (it->first->lyxCode() == MATH_REF_CODE) - toc.push_back(TocItem(ref_pit, 1, - it->first->asInsetMath()->asRefInset()->screenLabel(), - output_active)); - else - toc.push_back(TocItem(ref_pit, 1, - static_cast(it->first)->screenLabel(), - output_active)); + toc->push_back(TocItem(cpit, 0, screen_label_, output_active)); + } else { + toc->push_back(TocItem(cpit, 0, screen_label_, output_active)); + Buffer::References const & refs = buffer().references(label); + Buffer::References::const_iterator it = refs.begin(); + Buffer::References::const_iterator end = refs.end(); + for (; it != end; ++it) { + DocIterator const ref_pit(it->second); + if (it->first->lyxCode() == MATH_REF_CODE) + toc->push_back(TocItem(ref_pit, 1, + it->first->asInsetMath()->asRefInset()->screenLabel(), + output_active)); + else + toc->push_back(TocItem(ref_pit, 1, + static_cast(it->first)->getTOCString(), + output_active)); + } } } @@ -200,10 +201,17 @@ bool InsetLabel::getStatus(Cursor & cur, FuncRequest const & cmd, { bool enabled; switch (cmd.action()) { - case LFUN_LABEL_INSERT_AS_REF: - case LFUN_LABEL_COPY_AS_REF: + case LFUN_LABEL_INSERT_AS_REFERENCE: + case LFUN_LABEL_COPY_AS_REFERENCE: enabled = true; break; + case LFUN_INSET_MODIFY: + if (cmd.getArg(0) == "changetype") { + // this is handled by InsetCommand, + // but not by InsetLabel. + enabled = false; + break; + } default: return InsetCommand::getStatus(cur, cmd, status); } @@ -218,6 +226,12 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd) switch (cmd.action()) { case LFUN_INSET_MODIFY: { + // the only other option here is "changetype", and we + // do not have different types. + if (cmd.getArg(0) != "label") { + cur.undispatched(); + return; + } InsetCommandParams p(LABEL_CODE); // FIXME UNICODE InsetCommand::string2params(to_utf8(cmd.argument()), p); @@ -233,7 +247,7 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd) break; } - case LFUN_LABEL_COPY_AS_REF: { + case LFUN_LABEL_COPY_AS_REFERENCE: { InsetCommandParams p(REF_CODE, "ref"); p["reference"] = getParam("name"); cap::clearSelection(); @@ -241,7 +255,7 @@ void InsetLabel::doDispatch(Cursor & cur, FuncRequest & cmd) break; } - case LFUN_LABEL_INSERT_AS_REF: { + case LFUN_LABEL_INSERT_AS_REFERENCE: { InsetCommandParams p(REF_CODE, "ref"); p["reference"] = getParam("name"); string const data = InsetCommand::params2string(p); @@ -281,8 +295,8 @@ docstring InsetLabel::xhtml(XHTMLStream & xs, OutputParams const &) const // id here to get the document to validate as XHTML 1.1. This will cause a // problem with some browsers, though, I'm sure. (Guess which!) So we will // have to figure out what to do about this later. - string const attr = "id=\"" + html::cleanAttr(to_utf8(getParam("name"))) + "\""; - xs << html::CompTag("a", attr); + docstring const attr = "id=\"" + html::cleanAttr(getParam("name")) + '"'; + xs << html::CompTag("a", to_utf8(attr)); return docstring(); }