X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Finsets%2FInsetInfo.cpp;h=2f26c971f864b8293b3d146e59fb038d21775f23;hb=83d2c7fa3704a221b143a54b0c78747fbd712504;hp=212567686771fd4d762ef71156d4d4483392d738;hpb=6056db3212555ce5b7c599a350e95e9a4b5d1853;p=lyx.git diff --git a/src/insets/InsetInfo.cpp b/src/insets/InsetInfo.cpp index 2125676867..2f26c971f8 100644 --- a/src/insets/InsetInfo.cpp +++ b/src/insets/InsetInfo.cpp @@ -10,7 +10,7 @@ #include #include "InsetInfo.h" - +#include "LyX.h" #include "Buffer.h" #include "BufferParams.h" #include "BufferView.h" @@ -22,6 +22,7 @@ #include "KeyMap.h" #include "LaTeXFeatures.h" #include "LayoutFile.h" +#include "Length.h" #include "LyXAction.h" #include "LyXRC.h" #include "LyXVC.h" @@ -31,6 +32,7 @@ #include "frontends/Application.h" +#include "support/convert.h" #include "support/debug.h" #include "support/docstream.h" #include "support/docstring_list.h" @@ -39,10 +41,13 @@ #include "support/filetools.h" #include "support/gettext.h" #include "support/lstrings.h" +#include "support/qstring_helpers.h" #include "support/Translator.h" #include +#include + using namespace std; using namespace lyx::support; @@ -89,7 +94,6 @@ NameTranslator const & nameTranslator() InsetInfo::InsetInfo(Buffer * buf, string const & name) : InsetCollapsable(buf), type_(UNKNOWN_INFO), name_() { - setAutoBreakRows(true); setInfo(name); status_ = Collapsed; } @@ -165,12 +169,20 @@ bool InsetInfo::validateModifyArgument(docstring const & arg) const case SHORTCUT_INFO: case SHORTCUTS_INFO: - case MENU_INFO: - case ICON_INFO: { + case MENU_INFO: { FuncRequest func = lyxaction.lookupFunc(name); return func.action() != LFUN_UNKNOWN_ACTION; } + case ICON_INFO: { + FuncCode const action = lyxaction.lookupFunc(name).action(); + if (action == LFUN_UNKNOWN_ACTION) { + string dir = "images"; + return !imageLibFileSearch(dir, name, "svgz,png").empty(); + } + return true; + } + case LYXRC_INFO: { ostringstream oss; lyxrc.write(oss, true, name); @@ -381,7 +393,7 @@ void InsetInfo::updateInfo() // do not insert > for the top level menu item if (it != beg) par.insertInset(par.size(), new InsetSpecialChar(InsetSpecialChar::MENU_SEPARATOR), - Change(Change::UNCHANGED)); + f, Change(Change::UNCHANGED)); //FIXME: add proper underlines here. This // involves rewriting searchMenu used above to // return a vector of menus. If we do not do @@ -396,7 +408,7 @@ void InsetInfo::updateInfo() case ICON_INFO: { FuncRequest func = lyxaction.lookupFunc(name_); docstring icon_name = frontend::Application::iconName(func, true); - //FIXME: We should use the icon directly instead of + // FIXME: We should use the icon directly instead of // going through FileName. The code below won't work // if the icon is embedded in the executable through // the Qt resource system. @@ -405,14 +417,36 @@ void InsetInfo::updateInfo() // installed one is preferred anyway, and all icons that are // embedded in the resources are installed as well. FileName file(to_utf8(icon_name)); + if (file.onlyFileNameWithoutExt() == "unknown") { + string dir = "images"; + FileName file2(imageLibFileSearch(dir, name_, "svgz,png")); + if (!file2.empty()) + file = file2; + } if (!file.exists()) break; + int percent_scale = 100; + if (use_gui) { + // Compute the scale factor for the icon such that its + // width on screen is equal to 1em in pixels. + // The scale factor is rounded to the integer nearest + // to the float value of the ratio 100*iconsize/imgsize. + int imgsize = QImage(toqstr(file.absFileName())).width(); + if (imgsize > 0) { + int iconsize = Length(1, Length::EM).inPixels(1); + percent_scale = (100 * iconsize + imgsize / 2)/imgsize; + } + } InsetGraphics * inset = new InsetGraphics(buffer_); InsetGraphicsParams igp; igp.filename = file; + igp.lyxscale = percent_scale; + igp.scale = string(); + igp.width = Length(1, Length::EM); inset->setParams(igp); clear(); - paragraphs().front().insertInset(0, inset, + Font const f(inherit_font, buffer().params().language); + paragraphs().front().insertInset(0, inset, f, Change(Change::UNCHANGED)); break; } @@ -422,7 +456,7 @@ void InsetInfo::updateInfo() break; } if (name_ == "path") { - setText(from_utf8(buffer().filePath())); + setText(from_utf8(os::latex_path(buffer().filePath()))); break; } if (name_ == "class") { @@ -462,7 +496,7 @@ void InsetInfo::updateInfo() } -docstring InsetInfo::contextMenu(BufferView const &, int, int) const +string InsetInfo::contextMenu(BufferView const &, int, int) const { //FIXME: We override the implementation of InsetCollapsable, //because this inset is not a collapsable inset. @@ -470,9 +504,9 @@ docstring InsetInfo::contextMenu(BufferView const &, int, int) const } -docstring InsetInfo::contextMenuName() const +string InsetInfo::contextMenuName() const { - return from_ascii("context-info"); + return "context-info"; }