File indexing completed on 2024-05-12 05:13:33
0001 /* 0002 SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "genericformatter.h" 0008 #include "grantleeki18nlocalizer.h" 0009 #include "grantleethemeengine.h" 0010 0011 using namespace GrantleeTheme; 0012 0013 class GrantleeTheme::GenericFormatterPrivate 0014 { 0015 public: 0016 GenericFormatterPrivate() 0017 : mEngine(new Engine) 0018 { 0019 } 0020 0021 QString mThemePath; 0022 QString mDefaultMainFile; 0023 std::unique_ptr<Engine> const mEngine; 0024 QString mErrorMessage; 0025 QSharedPointer<KTextTemplate::FileSystemTemplateLoader> mTemplateLoader; 0026 KTextTemplate::Template mTemplate; 0027 }; 0028 0029 GenericFormatter::GenericFormatter(const QString &defaultHtmlMain, const QString &themePath) 0030 : d(new GenericFormatterPrivate) 0031 { 0032 d->mThemePath = themePath; 0033 d->mDefaultMainFile = defaultHtmlMain; 0034 setTemplatePath(d->mThemePath); 0035 } 0036 0037 GenericFormatter::GenericFormatter() 0038 : d(new GenericFormatterPrivate) 0039 { 0040 } 0041 0042 GenericFormatter::~GenericFormatter() = default; 0043 0044 void GenericFormatter::setDefaultHtmlMainFile(const QString &name) 0045 { 0046 if (d->mDefaultMainFile != name) { 0047 d->mDefaultMainFile = name; 0048 reloadTemplate(); 0049 } 0050 } 0051 0052 void GenericFormatter::setTemplatePath(const QString &path) 0053 { 0054 if (!d->mTemplateLoader) { 0055 d->mTemplateLoader.reset(new KTextTemplate::FileSystemTemplateLoader); 0056 } 0057 d->mTemplateLoader->setTemplateDirs(QStringList() << path); 0058 d->mEngine->addTemplateLoader(d->mTemplateLoader); 0059 0060 reloadTemplate(); 0061 } 0062 0063 void GenericFormatter::setApplicationDomain(const QByteArray &domain) 0064 { 0065 d->mEngine->localizer()->setApplicationDomain(domain); 0066 } 0067 0068 QString GenericFormatter::errorMessage() const 0069 { 0070 return d->mErrorMessage; 0071 } 0072 0073 QString GenericFormatter::render(const QVariantHash &mapping) const 0074 { 0075 KTextTemplate::Context context(mapping); 0076 context.setLocalizer(d->mEngine->localizer()); 0077 0078 const QString contentHtml = d->mTemplate->render(&context); 0079 return contentHtml; 0080 } 0081 0082 void GenericFormatter::setTemplateContent(const QString &content) 0083 { 0084 d->mTemplate = d->mEngine->newTemplate(content, QStringLiteral("content")); 0085 if (d->mTemplate->error()) { 0086 d->mErrorMessage = d->mTemplate->errorString() + QLatin1StringView("<br>"); 0087 } 0088 } 0089 0090 void GenericFormatter::reloadTemplate() 0091 { 0092 d->mTemplate = d->mEngine->loadByName(d->mDefaultMainFile); 0093 if (d->mTemplate->error()) { 0094 d->mErrorMessage += d->mTemplate->errorString() + QLatin1StringView("<br>"); 0095 } 0096 }