1
/** ===========================================================
4
* This file is a part of digiKam project
5
* <a href="http://www.digikam.org">http://www.digikam.org</a>
8
* @brief private implementation of plugin config widget
10
* @author Copyright (C) 2004-2012 by Gilles Caulier
11
* <a href="mailto:caulier dot gilles at gmail dot com">caulier dot gilles at gmail dot com</a>
12
* @author Copyright (C) 2012 by Victor Dodon
13
* <a href="mailto:dodonvictor at gmail dot com">dodonvictor at gmail dot com</a>
15
* This program is free software; you can redistribute it
16
* and/or modify it under the terms of the GNU General
17
* Public License as published by the Free Software Foundation;
18
* either version 2, or (at your option)
21
* This program is distributed in the hope that it will be useful,
22
* but WITHOUT ANY WARRANTY; without even the implied warranty of
23
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24
* GNU General Public License for more details.
26
* ============================================================ */
28
#include "configwidget_p.moc"
33
#include <QHeaderView>
37
#include <ksharedconfig.h>
38
#include <kconfiggroup.h>
46
PluginCheckBox::PluginCheckBox(PluginLoader::Info* const info, QTreeWidget* const parent)
47
: QTreeWidgetItem(parent),
50
setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
51
setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicator);
54
// Name + Icon + Selector
55
setText(0, m_info->name());
56
setIcon(0, m_info->icon());
57
setCheckState(0, m_info->shouldLoad() ? Qt::Checked : Qt::Unchecked);
60
QStringList list = m_info->pluginCategories();
61
list.removeDuplicates();
63
setText(1, list.join(", "));
66
setText(2, m_info->comment());
69
setText(3, m_info->author().section(',', 0, 0));
72
PluginCheckBox::~PluginCheckBox()
76
bool PluginCheckBox::contains(const QString& txt, Qt::CaseSensitivity cs) const
78
return (text(0).contains(txt, cs) ||
79
text(1).contains(txt, cs) ||
80
text(2).contains(txt, cs) ||
81
text(3).contains(txt, cs));
84
// ---------------------------------------------------------------------
86
class PluginListView::Private
95
QList<PluginCheckBox*> boxes;
98
PluginListView::PluginListView(QWidget* const parent)
99
: QTreeWidget(parent),
102
setRootIsDecorated(false);
103
setSelectionMode(QAbstractItemView::SingleSelection);
104
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
105
setAllColumnsShowFocus(true);
106
setSortingEnabled(true);
110
labels.append(i18n("Name"));
111
labels.append(i18n("Categories"));
112
labels.append(i18n("Description"));
113
labels.append(i18n("Author"));
115
setHeaderLabels(labels);
116
header()->setResizeMode(0, QHeaderView::ResizeToContents);
117
header()->setResizeMode(1, QHeaderView::ResizeToContents);
118
header()->setResizeMode(2, QHeaderView::Stretch);
119
header()->setResizeMode(3, QHeaderView::Interactive);
120
header()->setSortIndicatorShown(true);
122
setAutoFillBackground(false);
123
viewport()->setAutoFillBackground(false);
125
PluginLoader* const loader = PluginLoader::instance();
129
foreach(PluginLoader::Info* const info, loader->pluginList())
133
d->boxes.append(new PluginCheckBox(info, this));
138
// Sort items by plugin names.
139
sortItems(0, Qt::AscendingOrder);
142
PluginListView::~PluginListView()
147
void PluginListView::slotApply()
149
KSharedConfigPtr config = KGlobal::config();
150
KConfigGroup group = config->group(QString::fromLatin1("KIPI/EnabledPlugin"));
152
foreach (PluginCheckBox* const item, d->boxes)
154
bool orig = item->m_info->shouldLoad();
155
bool load = (item->checkState(0) == Qt::Checked);
159
group.writeEntry(item->m_info->name(), load);
160
item->m_info->setShouldLoad(load);
162
// Bugfix #289779 - Plugins are not really freed / unplugged when disabled in the kipi setup dialog, always call reload()
163
// to reload plugins properly when the replug() signal is send.
164
item->m_info->reload();
169
void PluginListView::slotCheckAll()
171
foreach (PluginCheckBox* const item, d->boxes)
173
item->setCheckState(0, Qt::Checked);
177
void PluginListView::slotClear()
179
foreach (PluginCheckBox* const item, d->boxes)
181
item->setCheckState(0, Qt::Unchecked);
185
int PluginListView::count() const
187
return d->boxes.count();
190
int PluginListView::actived() const
194
foreach (PluginCheckBox* const item, d->boxes)
196
if (item->checkState(0) == Qt::Checked)
203
int PluginListView::visible() const
207
foreach (PluginCheckBox* const item, d->boxes)
209
if (!item->isHidden())
216
void PluginListView::setFilter(const QString& filter, Qt::CaseSensitivity cs)
221
foreach (PluginCheckBox* const item, d->boxes)
223
if (item->contains(filter, cs))
226
item->setHidden(false);
230
item->setHidden(true);
234
emit signalSearchResult(query);
237
QString PluginListView::filter() const