7#include "headerstylemenumanager.h"
8#include "headerstyleinterface.h"
9#include "headerstyleplugin.h"
10#include "headerstylepluginmanager.h"
11#include "messageviewer/messageviewersettings.h"
12#include "messageviewer_debug.h"
13#include "utils/messageviewerutil_p.h"
15#include <KActionCollection>
17#include <KLocalizedString>
19#include <QActionGroup>
21using namespace MessageViewer;
23class MessageViewer::HeaderStyleMenuManagerPrivate
26 HeaderStyleMenuManagerPrivate(HeaderStyleMenuManager *qq)
32 void writeSettings(
const QString &pluginName);
33 void initialize(KActionCollection *ac);
34 void setPluginName(
const QString &pluginName);
35 QHash<QString, MessageViewer::HeaderStyleInterface *> lstInterface;
36 QActionGroup *group =
nullptr;
37 KActionMenu *headerMenu =
nullptr;
38 HeaderStyleMenuManager *
const q =
nullptr;
41void HeaderStyleMenuManagerPrivate::setPluginName(
const QString &pluginName)
43 MessageViewer::HeaderStyleInterface *
interface = lstInterface.value(pluginName);
45 if (!interface->action().isEmpty()) {
46 interface->activateAction();
49 if (lstInterface.isEmpty()) {
50 qCCritical(MESSAGEVIEWER_LOG) <<
"No Header Style plugin found !";
53 interface = lstInterface.cbegin().value();
54 if (!interface->action().isEmpty()) {
55 interface->activateAction();
59 Q_EMIT q->styleChanged(interface->headerStylePlugin());
62void HeaderStyleMenuManagerPrivate::readSettings()
64 QString headerStyleName = MessageViewer::MessageViewerSettings::self()->headerPluginStyleName();
65 if (headerStyleName.
isEmpty()) {
66 const QString headerStyle = MessageViewer::MessageViewerSettings::self()->headerStyle();
67 const QString headerSetDisplayed = MessageViewer::MessageViewerSettings::self()->headerSetDisplayed();
69 if ((headerStyle == QLatin1StringView(
"custom")) && (headerSetDisplayed == QLatin1StringView(
"custom"))) {
70 headerStyleName = QStringLiteral(
"custom");
71 }
else if ((headerStyle == QLatin1StringView(
"plain")) && (headerSetDisplayed == QLatin1StringView(
"all"))) {
72 headerStyleName = QStringLiteral(
"all-headers");
73 }
else if ((headerStyle == QLatin1StringView(
"brief")) && (headerSetDisplayed == QLatin1StringView(
"brief"))) {
74 headerStyleName = QStringLiteral(
"brief");
75 }
else if ((headerStyle == QLatin1StringView(
"enterprise")) && (headerSetDisplayed == QLatin1StringView(
"rich"))) {
76 headerStyleName = QStringLiteral(
"enterprise");
77 }
else if ((headerStyle == QLatin1StringView(
"fancy")) && (headerSetDisplayed == QLatin1StringView(
"rich"))) {
78 headerStyleName = QStringLiteral(
"fancy");
79 }
else if ((headerStyle == QLatin1StringView(
"grantlee")) && (headerSetDisplayed == QLatin1StringView(
"grantlee"))) {
80 headerStyleName = QStringLiteral(
"grantlee");
81 }
else if ((headerStyle == QLatin1StringView(
"plain")) && (headerSetDisplayed == QLatin1StringView(
"rich"))) {
82 headerStyleName = QStringLiteral(
"long-header");
83 }
else if ((headerStyle == QLatin1StringView(
"plain")) && (headerSetDisplayed == QLatin1StringView(
"standard"))) {
84 headerStyleName = QStringLiteral(
"standards-header");
86 qCDebug(MESSAGEVIEWER_LOG) <<
"unknown style : headerstyle " << headerStyle <<
" headerstrategy :" << headerSetDisplayed;
88 MessageViewer::MessageViewerSettings::self()->setHeaderPluginStyleName(headerStyleName);
91 if (headerStyleName.
isEmpty()) {
92 headerStyleName = QStringLiteral(
"fancy");
94 setPluginName(headerStyleName);
97void HeaderStyleMenuManagerPrivate::writeSettings(
const QString &pluginName)
99 MessageViewer::MessageViewerSettings::self()->setHeaderPluginStyleName(pluginName);
100 MessageViewer::MessageViewerSettings::self()->save();
103void HeaderStyleMenuManagerPrivate::initialize(KActionCollection *ac)
105 headerMenu =
new KActionMenu(
i18nc(
"View->",
"&Headers"), q);
107 ac->
addAction(QStringLiteral(
"view_headers"), headerMenu);
109 MessageViewer::Util::addHelpTextAction(headerMenu,
i18n(
"Choose display style of message headers"));
110 group =
new QActionGroup(q);
112 const QList<MessageViewer::HeaderStylePlugin *> lstPlugin = MessageViewer::HeaderStylePluginManager::self()->pluginsList();
113 for (MessageViewer::HeaderStylePlugin *plugin : lstPlugin) {
114 if (plugin->isEnabled()) {
115 MessageViewer::HeaderStyleInterface *
interface = plugin->createView(headerMenu, group, ac, q);
116 lstInterface.insert(plugin->name(), interface);
117 q->connect(interface, &HeaderStyleInterface::styleChanged, q, &HeaderStyleMenuManager::slotStyleChanged);
118 q->connect(interface, &HeaderStyleInterface::styleUpdated, q, &HeaderStyleMenuManager::styleUpdated);
123HeaderStyleMenuManager::HeaderStyleMenuManager(KActionCollection *ac, QObject *parent)
125 , d(new MessageViewer::HeaderStyleMenuManagerPrivate(this))
130HeaderStyleMenuManager::~HeaderStyleMenuManager() =
default;
134 return d->headerMenu;
137void MessageViewer::HeaderStyleMenuManager::setPluginName(
const QString &pluginName)
139 d->setPluginName(pluginName);
142void HeaderStyleMenuManager::slotStyleChanged(MessageViewer::HeaderStylePlugin *plugin)
144 d->writeSettings(plugin->name());
145 Q_EMIT styleChanged(plugin);
148void HeaderStyleMenuManager::readConfig()
153#include "moc_headerstylemenumanager.cpp"
QAction * addAction(const QString &name, const QObject *receiver=nullptr, const char *member=nullptr)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
bool isEmpty() const const