Changeset View
Changeset View
Standalone View
Standalone View
src/pimcommon/genericgrantlee/genericgrantleeformatter.cpp
Show All 20 Lines | |||||
21 | #include <grantlee/engine.h> | 21 | #include <grantlee/engine.h> | ||
22 | 22 | | |||
23 | using namespace PimCommon; | 23 | using namespace PimCommon; | ||
24 | 24 | | |||
25 | class PimCommon::GenericGrantleeFormatterPrivate | 25 | class PimCommon::GenericGrantleeFormatterPrivate | ||
26 | { | 26 | { | ||
27 | public: | 27 | public: | ||
28 | GenericGrantleeFormatterPrivate() | 28 | GenericGrantleeFormatterPrivate() | ||
29 | : mEngine(new Grantlee::Engine) | ||||
29 | { | 30 | { | ||
30 | mEngine = new Grantlee::Engine; | | |||
31 | } | 31 | } | ||
32 | 32 | | |||
33 | GenericGrantleeFormatterPrivate(const QString &defaultHtmlMain, const QString &themePath) | | |||
34 | : mThemePath(themePath) | | |||
35 | , mDefaultMainFile(defaultHtmlMain) | | |||
36 | { | | |||
37 | initializeEngine(); | | |||
38 | } | | |||
39 | | ||||
40 | ~GenericGrantleeFormatterPrivate() | | |||
41 | { | | |||
42 | delete mEngine; | | |||
43 | mTemplateLoader.clear(); | | |||
44 | } | | |||
45 | | ||||
46 | void setContent(const QString &content); | | |||
47 | void setDefaultHtmlMainFile(const QString &name); | | |||
48 | void initializeEngine(); | | |||
49 | void refreshTemplate(); | | |||
50 | void changeGrantleePath(const QString &path); | | |||
51 | void insertToContext(const QString &key, const QVariantHash &mapping); | | |||
52 | QString render(const QVariantHash &mapping) const; | | |||
53 | | ||||
54 | QString mThemePath; | 33 | QString mThemePath; | ||
55 | QString mDefaultMainFile; | 34 | QString mDefaultMainFile; | ||
56 | Grantlee::Engine *mEngine = nullptr; | 35 | std::unique_ptr<Grantlee::Engine> mEngine; | ||
57 | QString mErrorMessage; | 36 | QString mErrorMessage; | ||
58 | QSharedPointer<Grantlee::FileSystemTemplateLoader> mTemplateLoader; | 37 | QSharedPointer<Grantlee::FileSystemTemplateLoader> mTemplateLoader; | ||
59 | Grantlee::Template mSelfcontainedTemplate; | 38 | Grantlee::Template mTemplate; | ||
60 | }; | 39 | }; | ||
61 | 40 | | |||
62 | void GenericGrantleeFormatterPrivate::setContent(const QString &content) | | |||
63 | { | | |||
64 | mSelfcontainedTemplate = mEngine->newTemplate(content, QStringLiteral("content")); | | |||
65 | if (mSelfcontainedTemplate->error()) { | | |||
66 | mErrorMessage = mSelfcontainedTemplate->errorString() + QLatin1String("<br>"); | | |||
67 | } | | |||
68 | } | | |||
69 | | ||||
70 | void GenericGrantleeFormatterPrivate::setDefaultHtmlMainFile(const QString &name) | | |||
71 | { | | |||
72 | if (mDefaultMainFile != name) { | | |||
73 | mDefaultMainFile = name; | | |||
74 | refreshTemplate(); | | |||
75 | } | | |||
76 | } | | |||
77 | | ||||
78 | void GenericGrantleeFormatterPrivate::initializeEngine() | | |||
79 | { | | |||
80 | mEngine = new Grantlee::Engine; | | |||
81 | mTemplateLoader = QSharedPointer<Grantlee::FileSystemTemplateLoader>(new Grantlee::FileSystemTemplateLoader); | | |||
82 | | ||||
83 | changeGrantleePath(mThemePath); | | |||
84 | } | | |||
85 | | ||||
86 | void GenericGrantleeFormatterPrivate::refreshTemplate() | | |||
87 | { | | |||
88 | mSelfcontainedTemplate = mEngine->loadByName(mDefaultMainFile); | | |||
89 | if (mSelfcontainedTemplate->error()) { | | |||
90 | mErrorMessage += mSelfcontainedTemplate->errorString() + QLatin1String("<br>"); | | |||
91 | } | | |||
92 | } | | |||
93 | | ||||
94 | void GenericGrantleeFormatterPrivate::changeGrantleePath(const QString &path) | | |||
95 | { | | |||
96 | if (!mTemplateLoader) { | | |||
97 | mTemplateLoader = QSharedPointer<Grantlee::FileSystemTemplateLoader>(new Grantlee::FileSystemTemplateLoader); | | |||
98 | } | | |||
99 | mTemplateLoader->setTemplateDirs(QStringList() << path); | | |||
100 | mEngine->addTemplateLoader(mTemplateLoader); | | |||
101 | | ||||
102 | refreshTemplate(); | | |||
103 | } | | |||
104 | | ||||
105 | QString GenericGrantleeFormatterPrivate::render(const QVariantHash &mapping) const | | |||
106 | { | | |||
107 | Grantlee::Context context(mapping); | | |||
108 | const QString contentHtml = mSelfcontainedTemplate->render(&context); | | |||
109 | return contentHtml; | | |||
110 | } | | |||
111 | 41 | | |||
112 | GenericGrantleeFormatter::GenericGrantleeFormatter(const QString &defaultHtmlMain, const QString &themePath, QObject *parent) | 42 | GenericGrantleeFormatter::GenericGrantleeFormatter(const QString &defaultHtmlMain, const QString &themePath, QObject *parent) | ||
113 | : QObject(parent) | 43 | : QObject(parent) | ||
114 | , d(new PimCommon::GenericGrantleeFormatterPrivate(defaultHtmlMain, themePath)) | 44 | , d(new PimCommon::GenericGrantleeFormatterPrivate) | ||
115 | { | 45 | { | ||
46 | d->mThemePath = themePath; | ||||
47 | d->mDefaultMainFile = defaultHtmlMain; | ||||
48 | changeGrantleePath(d->mThemePath); | ||||
116 | } | 49 | } | ||
117 | 50 | | |||
118 | GenericGrantleeFormatter::GenericGrantleeFormatter(QObject *parent) | 51 | GenericGrantleeFormatter::GenericGrantleeFormatter(QObject *parent) | ||
119 | : QObject(parent) | 52 | : QObject(parent) | ||
120 | , d(new PimCommon::GenericGrantleeFormatterPrivate) | 53 | , d(new PimCommon::GenericGrantleeFormatterPrivate) | ||
121 | { | 54 | { | ||
122 | } | 55 | } | ||
123 | 56 | | |||
124 | GenericGrantleeFormatter::~GenericGrantleeFormatter() | 57 | GenericGrantleeFormatter::~GenericGrantleeFormatter() = default; | ||
125 | { | | |||
126 | delete d; | | |||
127 | } | | |||
128 | 58 | | |||
129 | void GenericGrantleeFormatter::setDefaultHtmlMainFile(const QString &name) | 59 | void GenericGrantleeFormatter::setDefaultHtmlMainFile(const QString &name) | ||
130 | { | 60 | { | ||
131 | d->setDefaultHtmlMainFile(name); | 61 | if (d->mDefaultMainFile != name) { | ||
62 | d->mDefaultMainFile = name; | ||||
63 | refreshTemplate(); | ||||
64 | } | ||||
132 | } | 65 | } | ||
133 | 66 | | |||
134 | void GenericGrantleeFormatter::changeGrantleePath(const QString &path) | 67 | void GenericGrantleeFormatter::changeGrantleePath(const QString &path) | ||
135 | { | 68 | { | ||
136 | d->changeGrantleePath(path); | 69 | if (!d->mTemplateLoader) { | ||
70 | d->mTemplateLoader.reset(new Grantlee::FileSystemTemplateLoader); | ||||
71 | } | ||||
72 | d->mTemplateLoader->setTemplateDirs(QStringList() << path); | ||||
73 | d->mEngine->addTemplateLoader(d->mTemplateLoader); | ||||
74 | | ||||
75 | refreshTemplate(); | ||||
137 | } | 76 | } | ||
138 | 77 | | |||
139 | QString GenericGrantleeFormatter::errorMessage() const | 78 | QString GenericGrantleeFormatter::errorMessage() const | ||
140 | { | 79 | { | ||
141 | return d->mErrorMessage; | 80 | return d->mErrorMessage; | ||
142 | } | 81 | } | ||
143 | 82 | | |||
144 | QString GenericGrantleeFormatter::render(const QVariantHash &mapping) const | 83 | QString GenericGrantleeFormatter::render(const QVariantHash &mapping) const | ||
145 | { | 84 | { | ||
146 | return d->render(mapping); | 85 | Grantlee::Context context(mapping); | ||
86 | const QString contentHtml = d->mTemplate->render(&context); | ||||
87 | return contentHtml; | ||||
147 | } | 88 | } | ||
148 | 89 | | |||
149 | void GenericGrantleeFormatter::setContent(const QString &content) | 90 | void GenericGrantleeFormatter::setContent(const QString &content) | ||
150 | { | 91 | { | ||
151 | d->setContent(content); | 92 | d->mTemplate = d->mEngine->newTemplate(content, QStringLiteral("content")); | ||
93 | if (d->mTemplate->error()) { | ||||
94 | d->mErrorMessage = d->mTemplate->errorString() + QLatin1String("<br>"); | ||||
95 | } | ||||
152 | } | 96 | } | ||
153 | 97 | | |||
154 | void GenericGrantleeFormatter::refreshTemplate() | 98 | void GenericGrantleeFormatter::refreshTemplate() | ||
155 | { | 99 | { | ||
156 | d->refreshTemplate(); | 100 | d->mTemplate = d->mEngine->loadByName(d->mDefaultMainFile); | ||
101 | if (d->mTemplate->error()) { | ||||
102 | d->mErrorMessage += d->mTemplate->errorString() + QLatin1String("<br>"); | ||||
103 | } | ||||
157 | } | 104 | } |