20 #include "subscriptiondialog_p.h"
23 #include "recursivecollectionfilterproxymodel.h"
24 #include "subscriptionjob_p.h"
25 #include "subscriptionmodel_p.h"
29 #include <QtGui/QBoxLayout>
33 #ifndef KDEPIM_MOBILE_UI
34 #include <klineedit.h>
35 #include <krecursivefilterproxymodel.h>
36 #include <QtGui/QHeaderView>
37 #include <QtGui/QLabel>
38 #include <QtGui/QTreeView>
39 #include <QtGui/QCheckBox>
41 #include <kdescendantsproxymodel.h>
42 #include <QtGui/QListView>
43 #include <QtGui/QSortFilterProxyModel>
45 class CheckableFilterProxyModel :
public QSortFilterProxyModel
48 CheckableFilterProxyModel( QObject *parent = 0 )
49 : QSortFilterProxyModel( parent ) { }
52 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent )
const
54 QModelIndex sourceIndex = sourceModel()->index( sourceRow, 0, sourceParent );
55 return sourceModel()->flags( sourceIndex ) & Qt::ItemIsUserCheckable;
60 using namespace Akonadi;
65 class SubscriptionDialog::Private
68 Private( SubscriptionDialog *parent ) : q( parent ) {}
72 SubscriptionJob *job =
new SubscriptionJob( q );
73 job->subscribe( model->subscribed() );
74 job->unsubscribe( model->unsubscribed() );
75 connect( job, SIGNAL(result(KJob*)), q, SLOT(subscriptionResult(KJob*)) );
78 void subscriptionResult( KJob *job )
82 kWarning() << job->errorString();
89 collectionView->setEnabled(
true );
90 #ifndef KDEPIM_MOBILE_UI
91 collectionView->expandAll();
93 q->enableButtonOk(
true );
95 void slotSetPattern(
const QString &text)
97 filterRecursiveCollectionFilter->setSearchPattern( text );
99 void slotSetIncludeCheckedOnly(
bool checked)
101 filterRecursiveCollectionFilter->setIncludeCheckedOnly( checked );
104 SubscriptionDialog* q;
105 #ifndef KDEPIM_MOBILE_UI
106 QTreeView *collectionView;
108 QListView *collectionView;
110 SubscriptionModel* model;
111 RecursiveCollectionFilterProxyModel *filterRecursiveCollectionFilter;
115 SubscriptionDialog::SubscriptionDialog(QWidget * parent) :
117 d( new Private( this ) )
119 init( QStringList() );
122 SubscriptionDialog::SubscriptionDialog(
const QStringList& mimetypes, QWidget * parent) :
124 d( new Private( this ) )
129 void SubscriptionDialog::showHiddenCollection(
bool showHidden)
131 d->model->showHiddenCollection(showHidden);
134 void SubscriptionDialog::init(
const QStringList &mimetypes )
136 enableButtonOk(
false );
137 setCaption( i18n(
"Local Subscriptions" ) );
138 QWidget *mainWidget =
new QWidget(
this );
139 QVBoxLayout *mainLayout =
new QVBoxLayout;
140 mainWidget->setLayout( mainLayout );
141 setMainWidget( mainWidget );
143 d->model =
new SubscriptionModel(
this );
145 #ifndef KDEPIM_MOBILE_UI
146 d->filterRecursiveCollectionFilter
147 =
new Akonadi::RecursiveCollectionFilterProxyModel(
this );
148 d->filterRecursiveCollectionFilter->setDynamicSortFilter(
true );
149 d->filterRecursiveCollectionFilter->setSourceModel( d->model );
150 d->filterRecursiveCollectionFilter->setFilterCaseSensitivity( Qt::CaseInsensitive );
151 if ( !mimetypes.isEmpty() ) {
152 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters( mimetypes );
155 d->collectionView =
new QTreeView( mainWidget );
156 d->collectionView->setEditTriggers( QAbstractItemView::NoEditTriggers );
157 d->collectionView->header()->hide();
158 d->collectionView->setModel( d->filterRecursiveCollectionFilter );
161 QHBoxLayout *filterBarLayout =
new QHBoxLayout;
163 filterBarLayout->addWidget(
new QLabel( i18n(
"Search:" ) ) );
165 KLineEdit *lineEdit =
new KLineEdit( mainWidget );
166 lineEdit->setClearButtonShown(
true);
167 lineEdit->setFocus();
168 connect( lineEdit, SIGNAL(textChanged(QString)),
169 this, SLOT(slotSetPattern(QString)) );
170 filterBarLayout->addWidget( lineEdit );
171 QCheckBox *checkBox =
new QCheckBox( i18n(
"Subscribed only"), mainWidget );
172 connect( checkBox, SIGNAL(clicked(
bool)),
173 this, SLOT(slotSetIncludeCheckedOnly(
bool)) );
174 filterBarLayout->addWidget( checkBox );
176 mainLayout->addLayout( filterBarLayout );
177 mainLayout->addWidget( d->collectionView );
180 d->filterRecursiveCollectionFilter
181 =
new Akonadi::RecursiveCollectionFilterProxyModel(
this );
182 if ( !mimetypes.isEmpty() )
183 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters( mimetypes );
185 d->filterRecursiveCollectionFilter->setSourceModel( d->model );
187 KDescendantsProxyModel *flatModel =
new KDescendantsProxyModel(
this );
188 flatModel->setDisplayAncestorData(
true );
189 flatModel->setAncestorSeparator( QLatin1String(
"/" ) );
190 flatModel->setSourceModel( d->filterRecursiveCollectionFilter );
192 CheckableFilterProxyModel *checkableModel =
new CheckableFilterProxyModel(
this );
193 checkableModel->setSourceModel( flatModel );
195 d->collectionView =
new QListView( mainWidget );
197 d->collectionView->setModel( checkableModel );
198 mainLayout->addWidget( d->collectionView );
201 connect( d->model, SIGNAL(loaded()), SLOT(modelLoaded()) );
202 connect(
this, SIGNAL(okClicked()), SLOT(done()) );
203 connect(
this, SIGNAL(cancelClicked()), SLOT(deleteLater()) );
204 Control::widgetNeedsAkonadi( mainWidget );
207 SubscriptionDialog::~ SubscriptionDialog()
213 #include "subscriptiondialog_p.moc"