20#include "subscriptiondialog_p.h"
23#include "recursivecollectionfilterproxymodel.h"
24#include "subscriptionjob_p.h"
25#include "subscriptionmodel_p.h"
29#include <ksharedconfig.h>
31#include <klocalizedstring.h>
36#ifndef KDEPIM_MOBILE_UI
39#include <krecursivefilterproxymodel.h>
45#include <kdescendantsproxymodel.h>
47#include <QSortFilterProxyModel>
49class CheckableFilterProxyModel :
public QSortFilterProxyModel
52 CheckableFilterProxyModel(QObject *parent = 0)
53 : QSortFilterProxyModel(parent)
59 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent)
const
61 QModelIndex sourceIndex = sourceModel()->index(sourceRow, 0, sourceParent);
62 return sourceModel()->flags(sourceIndex) &Qt::ItemIsUserCheckable;
72class SubscriptionDialog::Private
85 connect(job, SIGNAL(result(KJob*)), q, SLOT(subscriptionResult(KJob*)));
88 void subscriptionResult(KJob *job)
92 kWarning() << job->errorString();
99 collectionView->setEnabled(
true);
100#ifndef KDEPIM_MOBILE_UI
101 collectionView->expandAll();
103 q->enableButtonOk(
true);
106 void slotSetPattern(
const QString &text)
108 filterRecursiveCollectionFilter->setSearchPattern(text);
109#ifndef KDEPIM_MOBILE_UI
110 collectionView->expandAll();
114 void slotSetIncludeCheckedOnly(
bool checked)
116 filterRecursiveCollectionFilter->setIncludeCheckedOnly(checked);
121 KConfigGroup group(KGlobal::config(),
"SubscriptionDialog");
122 group.writeEntry(
"Size", q->size());
127 KConfigGroup group(KGlobal::config(),
"SubscriptionDialog");
128 const QSize sizeDialog = group.readEntry(
"Size", QSize(400, 300));
129 if (sizeDialog.isValid()) {
130 q->resize(sizeDialog);
134 void slotUnSubscribe();
135 void slotSubscribe();
138#ifndef KDEPIM_MOBILE_UI
139 QTreeView *collectionView;
140 KPushButton *subscribe;
141 KPushButton *unSubscribe;
143 QListView *collectionView;
150void SubscriptionDialog::Private::slotSubscribe()
152#ifndef KDEPIM_MOBILE_UI
153 QModelIndexList list = collectionView->selectionModel()->selectedIndexes();
154 foreach (
const QModelIndex &index, list) {
155 model->setData(index, Qt::Checked, Qt::CheckStateRole);
157 collectionView->setFocus();
161void SubscriptionDialog::Private::slotUnSubscribe()
163#ifndef KDEPIM_MOBILE_UI
164 QModelIndexList list = collectionView->selectionModel()->selectedIndexes();
165 foreach (
const QModelIndex &index, list) {
166 model->setData(index, Qt::Unchecked, Qt::CheckStateRole);
168 collectionView->setFocus();
174 , d(new Private(this))
181 , d(new Private(this))
188 d->model->showHiddenCollection(showHidden);
191void SubscriptionDialog::init(
const QStringList &mimetypes)
193 enableButtonOk(
false);
194 setCaption(i18n(
"Local Subscriptions"));
195 QWidget *mainWidget =
new QWidget(
this);
196 QVBoxLayout *mainLayout =
new QVBoxLayout;
197 mainWidget->setLayout(mainLayout);
198 setMainWidget(mainWidget);
202#ifndef KDEPIM_MOBILE_UI
203 d->filterRecursiveCollectionFilter
205 d->filterRecursiveCollectionFilter->setDynamicSortFilter(
true);
206 d->filterRecursiveCollectionFilter->setSourceModel(d->model);
207 d->filterRecursiveCollectionFilter->setFilterCaseSensitivity(Qt::CaseInsensitive);
208 if (!mimetypes.isEmpty()) {
209 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters(mimetypes);
212 d->collectionView =
new QTreeView(mainWidget);
213 d->collectionView->setEditTriggers(QAbstractItemView::NoEditTriggers);
214 d->collectionView->header()->hide();
215 d->collectionView->setModel(d->filterRecursiveCollectionFilter);
216 d->collectionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
218 QHBoxLayout *filterBarLayout =
new QHBoxLayout;
220 filterBarLayout->addWidget(
new QLabel(i18n(
"Search:")));
222 KLineEdit *lineEdit =
new KLineEdit(mainWidget);
223 lineEdit->setClearButtonShown(
true);
224 lineEdit->setFocus();
225 connect(lineEdit, SIGNAL(textChanged(QString)),
226 this, SLOT(slotSetPattern(QString)));
227 filterBarLayout->addWidget(lineEdit);
228 QCheckBox *checkBox =
new QCheckBox(i18n(
"Subscribed only"), mainWidget);
229 connect(checkBox, SIGNAL(clicked(
bool)),
230 this, SLOT(slotSetIncludeCheckedOnly(
bool)));
231 filterBarLayout->addWidget(checkBox);
233 QHBoxLayout *hboxLayout =
new QHBoxLayout;
234 hboxLayout->addWidget(d->collectionView);
236 QVBoxLayout *subscribeButtonLayout =
new QVBoxLayout;
237 d->subscribe =
new KPushButton(i18n(
"Subscribe"));
238 subscribeButtonLayout->addWidget(d->subscribe);
239 connect(d->subscribe, SIGNAL(clicked()),
this, SLOT(slotSubscribe()));
241 d->unSubscribe =
new KPushButton(i18n(
"Unsubscribe"));
242 subscribeButtonLayout->addWidget(d->unSubscribe);
243 connect(d->unSubscribe, SIGNAL(clicked()),
this, SLOT(slotUnSubscribe()));
244 subscribeButtonLayout->addItem(
new QSpacerItem(5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding));
246 hboxLayout->addLayout(subscribeButtonLayout);
248 mainLayout->addLayout(filterBarLayout);
249 mainLayout->addLayout(hboxLayout);
253 d->filterRecursiveCollectionFilter
255 if (!mimetypes.isEmpty()) {
256 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters(mimetypes);
259 d->filterRecursiveCollectionFilter->setSourceModel(d->model);
261 KDescendantsProxyModel *flatModel =
new KDescendantsProxyModel(
this);
262 flatModel->setDisplayAncestorData(
true);
263 flatModel->setAncestorSeparator(QLatin1String(
"/"));
264 flatModel->setSourceModel(d->filterRecursiveCollectionFilter);
266 CheckableFilterProxyModel *checkableModel =
new CheckableFilterProxyModel(
this);
267 checkableModel->setSourceModel(flatModel);
269 d->collectionView =
new QListView(mainWidget);
271 d->collectionView->setModel(checkableModel);
272 mainLayout->addWidget(d->collectionView);
275 connect(d->model, SIGNAL(loaded()), SLOT(modelLoaded()));
276 connect(
this, SIGNAL(okClicked()), SLOT(done()));
277 connect(
this, SIGNAL(cancelClicked()), SLOT(deleteLater()));
288#include "moc_subscriptiondialog_p.cpp"
static void widgetNeedsAkonadi(QWidget *widget)
Disable the given widget when Akonadi is not operational and show an error overlay (given enough spac...
A model to filter out collections of non-matching content types.
void showHiddenCollection(bool showHidden)
SubscriptionDialog(QWidget *parent=0)
Creates a new subscription dialog.
~SubscriptionDialog()
Destroys the subscription dialog.
Job to manipulate the local subscription state of a set of collections.
void subscribe(const Collection::List &collections)
Subscribes to the given list of collections.
void unsubscribe(const Collection::List &collections)
Unsubscribes from the given list of collections.
FreeBusyManager::Singleton.