X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetInfo.cpp;h=2218ef660d50bd5435d59f41adbe33ad4f0c5f9d;hb=2c357c1d23b7b83839a9beb8225d4f1ae4f793b4;hp=831a7a4b1a73efebd7d24872835c27446624b318;hpb=62c98f2ffca915a6d4c91753b9340dc57722b43f;p=lyx.git diff --git a/src/insets/InsetInfo.cpp b/src/insets/InsetInfo.cpp index 831a7a4b1a..2218ef660d 100644 --- a/src/insets/InsetInfo.cpp +++ b/src/insets/InsetInfo.cpp @@ -14,39 +14,38 @@ #include #include +#include "Buffer.h" #include "BufferParams.h" #include "BufferView.h" -#include "debug.h" #include "FuncRequest.h" -#include "gettext.h" #include "InsetSpecialChar.h" #include "KeyMap.h" #include "LaTeXFeatures.h" #include "LyXAction.h" +#include "LyXRC.h" #include "Lexer.h" +#include "MenuBackend.h" #include "MetricsInfo.h" #include "ParagraphParameters.h" #include "TextClassList.h" + +#include "frontends/Application.h" + +#include "support/debug.h" +#include "support/docstream.h" +#include "support/FileName.h" +#include "support/gettext.h" #include "support/lstrings.h" #include "support/ExceptionMessage.h" -using std::pair; -using std::string; -using std::ostream; -using std::ostringstream; -using std::stack; +using namespace std; +using namespace lyx::support; namespace lyx { -using support::prefixIs; -using support::trim; -using support::split; -using support::rtrim; -using support::ExceptionMessage; -using support::WarningException; InsetInfo::InsetInfo(BufferParams const & bp, string const & name) - : InsetText(bp), bp_(bp), type_(UNKNOWN_INFO), name_(), + : InsetText(bp), type_(UNKNOWN_INFO), name_(), mouse_hover_(false) { setAutoBreakRows(true); @@ -55,7 +54,7 @@ InsetInfo::InsetInfo(BufferParams const & bp, string const & name) } -Inset * InsetInfo::editXY(Cursor & cur, int x, int y) +Inset * InsetInfo::editXY(Cursor &, int, int) { return this; } @@ -81,15 +80,18 @@ Translator const initTranslator() Translator translator(InsetInfo::UNKNOWN_INFO, "unknown"); translator.addPair(InsetInfo::SHORTCUT_INFO, "shortcut"); + translator.addPair(InsetInfo::LYXRC_INFO, "lyxrc"); translator.addPair(InsetInfo::PACKAGE_INFO, "package"); translator.addPair(InsetInfo::TEXTCLASS_INFO, "textclass"); + translator.addPair(InsetInfo::MENU_INFO, "menu"); + translator.addPair(InsetInfo::BUFFER_INFO, "buffer"); return translator; } } // namespace anon -Translator const & InsetInfo::nameTranslator() const +Translator const & InsetInfo::nameTranslator() const { static Translator const translator = initTranslator(); @@ -120,11 +122,11 @@ void InsetInfo::read(Buffer const & buf, Lexer & lex) _("Missing \\end_inset at this point."), from_utf8(token)); } - updateInfo(); + updateInfo(buf); } -void InsetInfo::write(Buffer const & buf, std::ostream & os) const +void InsetInfo::write(Buffer const &, ostream & os) const { os << "Info\ntype \"" << nameTranslator().find(type_) @@ -160,37 +162,89 @@ void InsetInfo::setInfo(string const & name) string type; name_ = trim(split(name, type, ' ')); type_ = nameTranslator().find(type); - updateInfo(); } -void InsetInfo::updateInfo() +void InsetInfo::updateInfo(Buffer const & buf) { InsetText::clear(); + BufferParams const & bp = buf.params(); + switch (type_) { case UNKNOWN_INFO: setText(_("Unknown Info: ") + from_utf8(name_), - bp_.getFont(), false); + bp.getFont(), false); break; case SHORTCUT_INFO: { FuncRequest func = lyxaction.lookupFunc(name_); if (func.action != LFUN_UNKNOWN_ACTION) - setText(theTopLevelKeymap().printbindings(func), - bp_.getFont(), false); + setText(theTopLevelKeymap().printBindings(func), + bp.getFont(), false); + break; + } + case LYXRC_INFO: { + ostringstream oss; + lyxrc.write(oss, true, name_); + string result = oss.str(); + // remove leading \\name + result = result.substr(name_.size() + 2); + // remove \n and "" + result = rtrim(result, "\n"); + result = trim(result, "\""); + setText(from_utf8(result), bp.getFont(), false); break; } case PACKAGE_INFO: // check in packages.lst setText(LaTeXFeatures::isAvailable(name_) ? _("yes") : _("no"), - bp_.getFont(), false); + bp.getFont(), false); break; case TEXTCLASS_INFO: { // name_ is the class name pair pp = textclasslist.numberOfClass(name_); setText(pp.first ? _("yes") : _("no"), - bp_.getFont(), false); + bp.getFont(), false); + break; + } + case MENU_INFO: { + stack names; + FuncRequest func = lyxaction.lookupFunc(name_); + if (func.action == LFUN_UNKNOWN_ACTION) { + setText(_("No menu entry for "), bp.getFont(), false); + break; + } + // iterate through the menubackend to find it + Menu menu = theApp()->menuBackend().getMenubar(); + if (!menu.searchFunc(func, names)) { + setText(_("No menu entry for "), bp.getFont(), false); + break; + } + // if find, return its path. + InsetText::clear(); + Paragraph & info = paragraphs().front(); + unsigned int i = 0; + while (!names.empty()) { + // do not insert > for the top level menu item + if (i != 0) + info.insertInset(0, new InsetSpecialChar(InsetSpecialChar::MENU_SEPARATOR), + Change(Change::UNCHANGED)); + for (i = 0; i < names.top().length(); ++i) + info.insertChar(i, names.top()[i], bp.getFont(), false); + names.pop(); + } + break; + } + case BUFFER_INFO: { + if (name_ == "name") + setText(from_utf8(buf.fileName().onlyFileName()), bp.getFont(), false); + else if (name_ == "path") + setText(from_utf8(buf.filePath()), bp.getFont(), false); + else if (name_ == "class") + setText(from_utf8(bp.getTextClass().name()), bp.getFont(), false); + else + setText(_("Unknown buffer info"), bp.getFont(), false); break; } }