diff --git a/src/insets/InsetCaption.cpp b/src/insets/InsetCaption.cpp index 241e147820..5697e53397 100644 --- a/src/insets/InsetCaption.cpp +++ b/src/insets/InsetCaption.cpp @@ -270,6 +270,14 @@ int InsetCaption::getOptArg(odocstream & os, } +int InsetCaption::getCaptionText(odocstream & os, + OutputParams const & runparams) const +{ + os << full_label_ << ' '; + return InsetText::plaintext(os, runparams); +} + + void InsetCaption::updateLabels(ParIterator const & it) { DocumentClass const & tclass = buffer().params().documentClass(); diff --git a/src/insets/InsetCaption.h b/src/insets/InsetCaption.h index f158e4a357..4f7aa9a981 100644 --- a/src/insets/InsetCaption.h +++ b/src/insets/InsetCaption.h @@ -28,6 +28,8 @@ public: int getArgument(odocstream & os, OutputParams const &) const; /// return the optional argument(s) only int getOptArg(odocstream & os, OutputParams const &) const; + /// return the caption text + int getCaptionText(odocstream & os, OutputParams const &) const; private: /// void write(std::ostream & os) const; diff --git a/src/insets/InsetFloat.cpp b/src/insets/InsetFloat.cpp index 4ba774314e..f449e97783 100644 --- a/src/insets/InsetFloat.cpp +++ b/src/insets/InsetFloat.cpp @@ -127,6 +127,17 @@ InsetFloat::~InsetFloat() } +docstring InsetFloat::toolTip(BufferView const & bv, int x, int y) const +{ + OutputParams rp(&buffer().params().encoding()); + docstring default_tip = InsetCollapsable::toolTip(bv, x, y); + docstring caption_tip = getCaptionText(rp); + if (!isOpen() && !caption_tip.empty()) + return caption_tip + '\n' + default_tip; + return default_tip; +} + + void InsetFloat::doDispatch(Cursor & cur, FuncRequest & cmd) { switch (cmd.action) { @@ -424,6 +435,29 @@ docstring InsetFloat::getCaption(OutputParams const & runparams) const } +docstring InsetFloat::getCaptionText(OutputParams const & runparams) const +{ + if (paragraphs().empty()) + return docstring(); + + ParagraphList::const_iterator pit = paragraphs().begin(); + for (; pit != paragraphs().end(); ++pit) { + InsetList::const_iterator it = pit->insetList().begin(); + for (; it != pit->insetList().end(); ++it) { + Inset & inset = *it->inset; + if (inset.lyxCode() == CAPTION_CODE) { + odocstringstream ods; + InsetCaption * ins = + static_cast(it->inset); + ins->getCaptionText(ods, runparams); + return ods.str(); + } + } + } + return docstring(); +} + + void InsetFloat::string2params(string const & in, InsetFloatParams & params) { params = InsetFloatParams(); diff --git a/src/insets/InsetFloat.h b/src/insets/InsetFloat.h index e806d9a709..604f5b9b4b 100644 --- a/src/insets/InsetFloat.h +++ b/src/insets/InsetFloat.h @@ -71,6 +71,8 @@ private: /// docstring name() const { return name_; } /// + docstring toolTip(BufferView const & bv, int x, int y) const; + /// void write(std::ostream & os) const; /// void read(Lexer & lex); @@ -105,6 +107,8 @@ private: /// docstring getCaption(OutputParams const &) const; /// + docstring getCaptionText(OutputParams const &) const; + /// InsetFloatParams params_; /// docstring name_; diff --git a/src/insets/InsetWrap.cpp b/src/insets/InsetWrap.cpp index 26b8cd236b..92dddaf489 100644 --- a/src/insets/InsetWrap.cpp +++ b/src/insets/InsetWrap.cpp @@ -12,6 +12,7 @@ #include #include "InsetWrap.h" +#include "InsetCaption.h" #include "Buffer.h" #include "BufferParams.h" @@ -23,6 +24,7 @@ #include "FloatList.h" #include "FuncRequest.h" #include "FuncStatus.h" +#include "InsetList.h" #include "LaTeXFeatures.h" #include "Lexer.h" #include "TextClass.h" @@ -64,6 +66,17 @@ docstring InsetWrap::name() const } +docstring InsetWrap::toolTip(BufferView const & bv, int x, int y) const +{ + OutputParams rp(&buffer().params().encoding()); + docstring default_tip = InsetCollapsable::toolTip(bv, x, y); + docstring caption_tip = getCaptionText(rp); + if (!isOpen() && !caption_tip.empty()) + return caption_tip + '\n' + default_tip; + return default_tip; +} + + void InsetWrap::doDispatch(Cursor & cur, FuncRequest & cmd) { switch (cmd.action) { @@ -227,6 +240,29 @@ bool InsetWrap::showInsetDialog(BufferView * bv) const } +docstring InsetWrap::getCaptionText(OutputParams const & runparams) const +{ + if (paragraphs().empty()) + return docstring(); + + ParagraphList::const_iterator pit = paragraphs().begin(); + for (; pit != paragraphs().end(); ++pit) { + InsetList::const_iterator it = pit->insetList().begin(); + for (; it != pit->insetList().end(); ++it) { + Inset & inset = *it->inset; + if (inset.lyxCode() == CAPTION_CODE) { + odocstringstream ods; + InsetCaption * ins = + static_cast(it->inset); + ins->getCaptionText(ods, runparams); + return ods.str(); + } + } + } + return docstring(); +} + + void InsetWrap::string2params(string const & in, InsetWrapParams & params) { params = InsetWrapParams(); diff --git a/src/insets/InsetWrap.h b/src/insets/InsetWrap.h index f22c2fd086..1ad80c570d 100644 --- a/src/insets/InsetWrap.h +++ b/src/insets/InsetWrap.h @@ -63,6 +63,8 @@ private: /// InsetCode lyxCode() const { return WRAP_CODE; } /// + docstring toolTip(BufferView const & bv, int x, int y) const; + /// int latex(odocstream &, OutputParams const &) const; /// int plaintext(odocstream &, OutputParams const &) const; @@ -81,6 +83,8 @@ private: /// void doDispatch(Cursor & cur, FuncRequest & cmd); /// + docstring getCaptionText(OutputParams const &) const; + /// docstring name() const; /// Inset * clone() const { return new InsetWrap(*this); }