6#include <qohosplugincore.h>
8#include <QtGui/qfont.h>
9#include <QtGui/private/qfonticonengine_p.h>
11#include <QtCore/qhash.h>
12#include <QtCore/private/qnapi_p.h>
13#include <QtCore/private/qohoslogger_p.h>
19using namespace Qt::StringLiterals;
23std::optional<
char32_t> tryGetOhosSymbolCodepoint(
QtOhos::
JsState &jsState,
const char *ohosSymbolName)
26 return jsState.eval<QNapi::Number>(
27 "@ohos.resourceManager.getSysResourceManager().getSymbolByName(*)",
28 {ohosSymbolName}).Uint32Value();
29 }
catch (
const Napi::Error &error) {
31 "%s: getSymbolByName('%s') failed: %s",
32 Q_FUNC_INFO, ohosSymbolName, error.what());
37const QHash<QString,
char32_t> &getThemeIconCodepoints()
40 static constexpr struct {
41 QLatin1StringView qtThemeIconName;
42 const char *ohosSymbolName;
43 } themeIconToOhosSymbolMapping[] = {
44 {
"computer"_L1,
"computer"},
45 {
"user-desktop"_L1,
"desktop"},
46 {
"user-trash"_L1,
"trash"},
47 {
"network-workgroup"_L1,
"dot_radiowaves_left_and_right"},
48 {
"drive-harddisk"_L1,
"externaldrive"},
49 {
"folder"_L1,
"folder"},
50 {
"text-x-generic"_L1,
"doc"},
53 static const QHash<QString,
char32_t> codepoints =
QtOhos::evalInJsThread(
55 QHash<QString,
char32_t> codepoints;
56 for (
const auto &entry : themeIconToOhosSymbolMapping) {
57 const auto optCodepoint = tryGetOhosSymbolCodepoint(jsState, entry.ohosSymbolName);
59 codepoints.insert(entry.qtThemeIconName, *optCodepoint);
70 QFont font(
"HM Symbol"_L1);
71 font.setStyleStrategy(QFont::NoFontMerging);
75std::optional<QString> tryGetGlyphForThemeIcon(
const QString &iconName)
77 const QHash<QString,
char32_t> &codepoints = getThemeIconCodepoints();
78 const auto codepointIt = codepoints.constFind(iconName);
79 if (codepointIt == codepoints.cend())
82 const char32_t ucs4 = *codepointIt;
84 return QString::fromUcs4(&ucs4, 1);
87class QOhosIconEngine :
public QFontIconEngine
90 explicit QOhosIconEngine(
const QString &iconName,
const QString &glyphString);
92 QIconEngine *clone()
const override;
93 QString key()
const override;
96 QString string()
const override;
97 glyph_t glyph()
const override;
100 QString m_glyphString;
103QOhosIconEngine::QOhosIconEngine(
const QString &iconName,
const QString &glyphString)
104 : QFontIconEngine(iconName, ohosSymbolFont())
105 , m_glyphString(glyphString)
109QIconEngine *QOhosIconEngine::clone()
const
111 auto *constThis =
const_cast<QOhosIconEngine *>(
this);
112 return new QOhosIconEngine(constThis->iconName(), m_glyphString);
115QString QOhosIconEngine::key()
const
117 return "QOhosIconEngine"_L1;
120QString QOhosIconEngine::string()
const
122 return m_glyphString;
125glyph_t QOhosIconEngine::glyph()
const
134 auto optGlyphString = tryGetGlyphForThemeIcon(iconName);
138 return new QOhosIconEngine(iconName, *optGlyphString);
Combined button and popup list for selecting options.
QIconEngine * tryCreateQOhosIconEngine(const QString &iconName)