From 9761d953dcf38da8a9f5d01316136c960eb51e1d Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Wed, 25 Mar 2009 12:23:43 +0000 Subject: [PATCH] Tooltips for InsetCitation. Please check if this works with RTL. I think it should. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@28896 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/insets/InsetCitation.cpp | 54 ++++++++++++++++++++++++++++++++++++ src/insets/InsetCitation.h | 2 ++ 2 files changed, 56 insertions(+) diff --git a/src/insets/InsetCitation.cpp b/src/insets/InsetCitation.cpp index da075faf0b..77bce69878 100644 --- a/src/insets/InsetCitation.cpp +++ b/src/insets/InsetCitation.cpp @@ -16,6 +16,7 @@ #include "Buffer.h" #include "buffer_funcs.h" #include "BufferParams.h" +#include "BufferView.h" #include "DispatchResult.h" #include "FuncRequest.h" #include "LaTeXFeatures.h" @@ -382,6 +383,59 @@ bool InsetCitation::isCompatibleCommand(string const & cmd) } +docstring InsetCitation:: toolTip(BufferView const & bv, int, int) const +{ + static unsigned int maxwdth = 80; + Buffer const & buf = bv.buffer(); + // Only after the buffer is loaded from file... + if (!buf.isFullyLoaded()) + return docstring(); + + BiblioInfo const & bi = buf.masterBibInfo(); + if (bi.empty()) + return _("No bibliography defined!"); + + docstring const & key = getParam("key"); + if (key.empty()) + return _("No citations selected!"); + + vector keys = getVectorFromString(key); + vector::const_iterator it = keys.begin(); + vector::const_iterator en = keys.end(); + docstring tip; + for (; it != en; ++it) { + docstring key_info = bi.getInfo(*it); + if (key_info.empty()) + continue; + if (!tip.empty()) + tip += "\n"; + docstring newkey; + while (key_info.size() > maxwdth) { + int i = maxwdth - 1; + // find the last space + for (; i >= 0; --i) + if (key_info[i] == ' ') + break; + if (i < 0) { // no space found? + key_info = key_info.substr(0, maxwdth - 3) + "..."; + break; + } + if (!newkey.empty()) + newkey += "\n"; + newkey += key_info.substr(0, i); + key_info = " " + key_info.substr(i); + //key_info = key_info.substr(0, maxtip - 3) + "..."; + } + if (!newkey.empty()) + newkey += "\n"; + newkey += key_info; + tip += newkey; + } + return tip; +} + + + docstring InsetCitation::generateLabel() const { docstring const before = getParam("before"); diff --git a/src/insets/InsetCitation.h b/src/insets/InsetCitation.h index 7e15f219a8..d2e88b4d60 100644 --- a/src/insets/InsetCitation.h +++ b/src/insets/InsetCitation.h @@ -40,6 +40,8 @@ public: /// EDITABLE editable() const { return IS_EDITABLE; } /// + docstring toolTip(BufferView const & bv, int x, int y) const; + /// InsetCode lyxCode() const { return CITE_CODE; } /// int latex(odocstream &, OutputParams const &) const; -- 2.39.2