20 #include "subscriptiondialog_p.h"
23 #include "recursivecollectionfilterproxymodel.h"
24 #include "subscriptionjob_p.h"
25 #include "subscriptionmodel_p.h"
33 #ifndef KDEPIM_MOBILE_UI
34 #include <klineedit.h>
35 #include <KPushButton>
36 #include <krecursivefilterproxymodel.h>
37 #include <QHeaderView>
41 #include <QItemSelectionModel>
43 #include <kdescendantsproxymodel.h>
45 #include <QSortFilterProxyModel>
47 class CheckableFilterProxyModel :
public QSortFilterProxyModel
50 CheckableFilterProxyModel( QObject *parent = 0 )
51 : QSortFilterProxyModel( parent ) { }
54 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent )
const
56 QModelIndex sourceIndex = sourceModel()->index( sourceRow, 0, sourceParent );
57 return sourceModel()->flags( sourceIndex ) & Qt::ItemIsUserCheckable;
62 using namespace Akonadi;
67 class SubscriptionDialog::Private
77 connect( job, SIGNAL(result(KJob*)), q, SLOT(subscriptionResult(KJob*)) );
80 void subscriptionResult( KJob *job )
84 kWarning() << job->errorString();
91 collectionView->setEnabled(
true );
92 #ifndef KDEPIM_MOBILE_UI
93 collectionView->expandAll();
95 q->enableButtonOk(
true );
97 void slotSetPattern(
const QString &text)
99 filterRecursiveCollectionFilter->setSearchPattern( text );
101 void slotSetIncludeCheckedOnly(
bool checked)
103 filterRecursiveCollectionFilter->setIncludeCheckedOnly( checked );
106 void slotUnSubscribe();
107 void slotSubscribe();
110 #ifndef KDEPIM_MOBILE_UI
111 QTreeView *collectionView;
112 KPushButton *subscribe;
113 KPushButton *unSubscribe;
115 QListView *collectionView;
123 void SubscriptionDialog::Private::slotSubscribe()
125 #ifndef KDEPIM_MOBILE_UI
126 QModelIndexList list = collectionView->selectionModel()->selectedIndexes();
127 foreach (
const QModelIndex& index, list) {
128 model->setData(index, Qt::Checked, Qt::CheckStateRole);
130 collectionView->setFocus();
134 void SubscriptionDialog::Private::slotUnSubscribe()
136 #ifndef KDEPIM_MOBILE_UI
137 QModelIndexList list = collectionView->selectionModel()->selectedIndexes();
138 foreach (
const QModelIndex& index, list) {
139 model->setData(index, Qt::Unchecked, Qt::CheckStateRole);
141 collectionView->setFocus();
148 d( new Private( this ) )
150 init( QStringList() );
155 d( new Private( this ) )
162 d->model->showHiddenCollection(showHidden);
165 void SubscriptionDialog::init(
const QStringList &mimetypes )
167 enableButtonOk(
false );
168 setCaption( i18n(
"Local Subscriptions" ) );
169 QWidget *mainWidget =
new QWidget(
this );
170 QVBoxLayout *mainLayout =
new QVBoxLayout;
171 mainWidget->setLayout( mainLayout );
172 setMainWidget( mainWidget );
176 #ifndef KDEPIM_MOBILE_UI
177 d->filterRecursiveCollectionFilter
179 d->filterRecursiveCollectionFilter->setDynamicSortFilter(
true );
180 d->filterRecursiveCollectionFilter->setSourceModel( d->model );
181 d->filterRecursiveCollectionFilter->setFilterCaseSensitivity( Qt::CaseInsensitive );
182 if ( !mimetypes.isEmpty() ) {
183 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters( mimetypes );
187 d->collectionView =
new QTreeView( mainWidget );
188 d->collectionView->setEditTriggers( QAbstractItemView::NoEditTriggers );
189 d->collectionView->header()->hide();
190 d->collectionView->setModel( d->filterRecursiveCollectionFilter );
191 d->collectionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
193 QHBoxLayout *filterBarLayout =
new QHBoxLayout;
195 filterBarLayout->addWidget(
new QLabel( i18n(
"Search:" ) ) );
197 KLineEdit *lineEdit =
new KLineEdit( mainWidget );
198 lineEdit->setClearButtonShown(
true);
199 lineEdit->setFocus();
200 connect( lineEdit, SIGNAL(textChanged(QString)),
201 this, SLOT(slotSetPattern(QString)) );
202 filterBarLayout->addWidget( lineEdit );
203 QCheckBox *checkBox =
new QCheckBox( i18n(
"Subscribed only"), mainWidget );
204 connect( checkBox, SIGNAL(clicked(
bool)),
205 this, SLOT(slotSetIncludeCheckedOnly(
bool)) );
206 filterBarLayout->addWidget( checkBox );
209 QHBoxLayout *hboxLayout =
new QHBoxLayout;
210 hboxLayout->addWidget( d->collectionView );
213 QVBoxLayout *subscribeButtonLayout =
new QVBoxLayout;
214 d->subscribe =
new KPushButton(i18n(
"Subscribe"));
215 subscribeButtonLayout->addWidget(d->subscribe);
216 connect(d->subscribe,SIGNAL(clicked()),
this,SLOT(slotSubscribe()));
218 d->unSubscribe =
new KPushButton(i18n(
"Unsubscribe"));
219 subscribeButtonLayout->addWidget(d->unSubscribe);
220 connect(d->unSubscribe,SIGNAL(clicked()),
this,SLOT(slotUnSubscribe()));
221 subscribeButtonLayout->addItem(
new QSpacerItem( 5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
224 hboxLayout->addLayout(subscribeButtonLayout);
226 mainLayout->addLayout(filterBarLayout);
227 mainLayout->addLayout(hboxLayout);
232 d->filterRecursiveCollectionFilter
234 if ( !mimetypes.isEmpty() )
235 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters( mimetypes );
237 d->filterRecursiveCollectionFilter->setSourceModel( d->model );
239 KDescendantsProxyModel *flatModel =
new KDescendantsProxyModel(
this );
240 flatModel->setDisplayAncestorData(
true );
241 flatModel->setAncestorSeparator( QLatin1String(
"/" ) );
242 flatModel->setSourceModel( d->filterRecursiveCollectionFilter );
244 CheckableFilterProxyModel *checkableModel =
new CheckableFilterProxyModel(
this );
245 checkableModel->setSourceModel( flatModel );
247 d->collectionView =
new QListView( mainWidget );
249 d->collectionView->setModel( checkableModel );
250 mainLayout->addWidget( d->collectionView );
253 connect( d->model, SIGNAL(loaded()), SLOT(modelLoaded()) );
254 connect(
this, SIGNAL(okClicked()), SLOT(done()) );
255 connect(
this, SIGNAL(cancelClicked()), SLOT(deleteLater()) );
265 #include "moc_subscriptiondialog_p.cpp"