commit 12a9753fb527161cc25ba2a8df6166c96ceabe07
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Thu May 14 16:35:51 2020 +0200
Allow to provide explicit icons for things like command-alternative
The automatic icons for "command-alternative", "math-insert",
"math-(big)delim" and "command" can be overriden by an explicit icon
name.
Besides that, the iconName function is refactored, and now returns an
additional bool that indicates whether the icon should be flipped.
The code that uses resources is still useless. This will be the
subject of further work.
---
src/frontends/qt/GuiApplication.cpp | 161 ++++++++++++++++-------------------
1 files changed, 75 insertions(+), 86 deletions(-)
diff --git a/src/frontends/qt/GuiApplication.cpp
b/src/frontends/qt/GuiApplication.cpp
index 5c5c2a6..e9244e1 100644
--- a/src/frontends/qt/GuiApplication.cpp
+++ b/src/frontends/qt/GuiApplication.cpp
@@ -82,6 +82,7 @@
#endif
#include <queue>
+#include <tuple>
#include <QByteArray>
#include <QDateTime>
@@ -486,98 +487,92 @@ QString themeIconName(QString const & action)
}
-QString iconName(FuncRequest const & f, bool unknown, QString const & suffix)
+// the returned bool is true if the icon needs to be flipped
+pair<QString,bool> iconName(FuncRequest const & f, bool unknown, bool rtl)
{
initializeResources();
- QString name1;
- QString name2;
- QString path;
- switch (f.action()) {
- case LFUN_MATH_INSERT:
- if (!f.argument().empty()) {
- path = "math/";
- name1 = findImg(toqstr(f.argument()).mid(1));
- }
- break;
- case LFUN_MATH_DELIM:
- case LFUN_MATH_BIGDELIM:
- path = "math/";
- name1 = findImg(toqstr(f.argument()));
- break;
- case LFUN_CALL:
- path = "commands/";
- name1 = toqstr(f.argument());
- break;
- case LFUN_COMMAND_ALTERNATIVES: {
- // use the first of the alternative commands
- docstring firstcom;
- docstring dummy = split(f.argument(), firstcom, ';');
- name1 = toqstr(firstcom);
- name1.replace(' ', '_');
- break;
- }
- default:
- name2 = toqstr(lyxaction.getActionName(f.action()));
- name1 = name2;
-
- if (!f.argument().empty()) {
- name1 = name2 + ' ' + toqstr(f.argument());
+ QStringList names;
+ QString lfunname = toqstr(lyxaction.getActionName(f.action()));
+
+ if (!f.argument().empty()) {
+ // if there are arguments, first search an icon which name is
the full thing
+ QString name = lfunname + ' ' + toqstr(f.argument());
+ name.replace(' ', '_');
+ name.replace(';', '_');
+ name.replace('\\', "backslash");
+ names << name;
+
+ // then special default icon for some lfuns
+ switch (f.action()) {
+ case LFUN_MATH_INSERT:
+ names << "math/" +
findImg(toqstr(f.argument()).mid(1));
+ break;
+ case LFUN_MATH_DELIM:
+ case LFUN_MATH_BIGDELIM:
+ names << "math/" + findImg(toqstr(f.argument()));
+ break;
+ case LFUN_CALL:
+ names << "commands/" + toqstr(f.argument());
+ break;
+ case LFUN_COMMAND_ALTERNATIVES: {
+ // use the first of the alternative commands
+ docstring firstcom;
+ docstring dummy = split(f.argument(), firstcom, ';');
+ QString name1 = toqstr(firstcom);
name1.replace(' ', '_');
+ name1.replace(';', '_');
name1.replace('\\', "backslash");
+ names << name1;
+ break;
+ }
+ default:
+ break;
}
}
- // maybe a suffix?
- name1 += suffix;
- name2 += suffix;
+ // next thing to try is function name alone
+ names << lfunname;
+
+ // and finally maybe the unkown icon
+ if (unknown)
+ names << "unknown";
+ search_mode const mode = theGuiApp()->imageSearchMode();
QStringList imagedirs;
imagedirs << "images/" << "images/ipa/";
- search_mode mode = theGuiApp()->imageSearchMode();
- for (int i = 0; i < imagedirs.size(); ++i) {
- QString imagedir = imagedirs.at(i) + path;
- FileName fname = imageLibFileSearch(imagedir, name1,
"svgz,png", mode);
- if (fname.exists())
- return toqstr(fname.absFileName());
-
- fname = imageLibFileSearch(imagedir, name2, "svgz,png", mode);
- if (fname.exists())
- return toqstr(fname.absFileName());
- }
+ QStringList suffixes;
+ if (rtl)
+ suffixes << "+rtl";
+ suffixes << QString();
+ for (QString const & imagedir : imagedirs)
+ for (QString const & name : names)
+ for (QString const & suffix : suffixes) {
+ QString id = imagedir;
+ FileName fname = imageLibFileSearch(id, name +
suffix, "svgz,png", mode);
+ if (fname.exists())
+ return
make_pair(toqstr(fname.absFileName()), rtl && suffix.isEmpty());
+ }
- path = ":/images/" + path;
- QDir res(path);
+ QString const resdir(":/images/");
+ QDir res(resdir);
if (!res.exists()) {
- LYXERR0("Directory " << path << " not found in resource!");
- return QString();
+ LYXERR0("Directory :/images/ not found in resource!");
+ return make_pair(QString(), false);
}
- if (res.exists(name1 + ".svgz"))
- return path + name1 + ".svgz";
- else if (res.exists(name1 + ".png"))
- return path + name1 + ".png";
-
- if (res.exists(name2 + ".svgz"))
- return path + name2 + ".svgz";
- else if (res.exists(name2 + ".png"))
- return path + name2 + ".png";
-
- LYXERR(Debug::GUI, "Cannot find icon with filename "
- << "\"" << name1 << ".{svgz,png}\""
- << " or filename "
- << "\"" << name2 << ".{svgz,png}\""
- << " for command \""
+
+ for (QString const & name : names)
+ for (QString const & suffix : suffixes) {
+ if (res.exists(name + suffix + ".svgz"))
+ return make_pair(resdir + name + ".svgz", rtl
&& suffix.isEmpty());
+ if (res.exists(name + suffix + ".png"))
+ return make_pair(resdir + name + ".png", rtl &&
suffix.isEmpty());
+ }
+
+ LYXERR(Debug::GUI, "Cannot find icon for command \""
<< lyxaction.getActionName(f.action())
<< '(' << to_utf8(f.argument()) << ")\"");
- if (unknown) {
- QString imagedir = "images/";
- FileName fname = imageLibFileSearch(imagedir, "unknown",
"svgz,png", mode);
- if (fname.exists())
- return toqstr(fname.absFileName());
- return QString(":/images/unknown.svgz");
- }
-
- return QString();
+ return make_pair(QString(), false);
}
@@ -626,15 +621,9 @@ QIcon getIcon(FuncRequest const & f, bool unknown, bool
rtl)
}
#endif
- bool flip = false;
QString icon;
- if (rtl) {
- icon = iconName(f, unknown, "+rtl");
- // No RTL icon, we'll make it ourselves
- flip = icon.isEmpty();
- }
- if (icon.isEmpty())
- icon = iconName(f, unknown);
+ bool flip;
+ tie(icon, flip) = iconName(f, unknown, rtl);
if (icon.isEmpty())
return QIcon();
@@ -1144,7 +1133,7 @@ void GuiApplication::clearSession()
docstring Application::iconName(FuncRequest const & f, bool unknown)
{
- return qstring_to_ucs4(lyx::frontend::iconName(f, unknown));
+ return qstring_to_ucs4(lyx::frontend::iconName(f, unknown,
false).first);
}
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs