+ 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
+ // going through FileName. The code below won't work
+ // if the icon is embedded in the executable through
+ // the Qt resource system.
+ // This is only a negligible performance problem:
+ // If the installed icon differs from the resource icon the
+ // 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();
+ Font const f(inherit_font, buffer().params().language);
+ paragraphs().front().insertInset(0, inset, f,
+ Change(Change::UNCHANGED));
+ break;
+ }
+ case BUFFER_INFO: {
+ if (name_ == "name") {
+ setText(from_utf8(buffer().fileName().onlyFileName()));
+ break;
+ }
+ if (name_ == "path") {
+ setText(from_utf8(os::latex_path(buffer().filePath())));
+ break;
+ }
+ if (name_ == "class") {
+ setText(from_utf8(bp.documentClass().name()));
+ break;
+ }
+
+ // everything that follows is for version control.
+ // nothing that isn't version control should go below this line.
+ if (!buffer().lyxvc().inUse()) {
+ setText(_("No version control"));
+ break;
+ }
+ LyXVC::RevisionInfo itype = LyXVC::Unknown;
+ if (name_ == "vcs-revision")
+ itype = LyXVC::File;
+ else if (name_ == "vcs-tree-revision")
+ itype = LyXVC::Tree;
+ else if (name_ == "vcs-author")
+ itype = LyXVC::Author;
+ else if (name_ == "vcs-time")
+ itype = LyXVC::Time;
+ else if (name_ == "vcs-date")
+ itype = LyXVC::Date;
+ string binfo = buffer().lyxvc().revisionInfo(itype);
+ if (binfo.empty())
+ setText(from_ascii(name_) + " unknown");
+ else
+ setText(from_utf8(binfo));
+ break;
+ }
+ case LYX_INFO:
+ if (name_ == "version")
+ setText(from_ascii(lyx_version));
+ break;