20 #include "subscriptiondialog_p.h"
23 #include "recursivecollectionfilterproxymodel.h"
24 #include "subscriptionjob_p.h"
25 #include "subscriptionmodel_p.h"
31 #include <klocalizedstring.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 );
108 KConfigGroup group( KGlobal::config(),
"SubscriptionDialog" );
109 group.writeEntry(
"Size", q->size() );
114 KConfigGroup group( KGlobal::config(),
"SubscriptionDialog" );
115 const QSize sizeDialog = group.readEntry(
"Size", QSize() );
116 if ( sizeDialog.isValid() ) {
117 q->resize( sizeDialog );
123 void slotUnSubscribe();
124 void slotSubscribe();
127 #ifndef KDEPIM_MOBILE_UI
128 QTreeView *collectionView;
129 KPushButton *subscribe;
130 KPushButton *unSubscribe;
132 QListView *collectionView;
140 void SubscriptionDialog::Private::slotSubscribe()
142 #ifndef KDEPIM_MOBILE_UI
143 QModelIndexList list = collectionView->selectionModel()->selectedIndexes();
144 foreach (
const QModelIndex& index, list) {
145 model->setData(index, Qt::Checked, Qt::CheckStateRole);
147 collectionView->setFocus();
151 void SubscriptionDialog::Private::slotUnSubscribe()
153 #ifndef KDEPIM_MOBILE_UI
154 QModelIndexList list = collectionView->selectionModel()->selectedIndexes();
155 foreach (
const QModelIndex& index, list) {
156 model->setData(index, Qt::Unchecked, Qt::CheckStateRole);
158 collectionView->setFocus();
165 d( new Private( this ) )
167 init( QStringList() );
172 d( new Private( this ) )
179 d->model->showHiddenCollection(showHidden);
182 void SubscriptionDialog::init(
const QStringList &mimetypes )
184 enableButtonOk(
false );
185 setCaption( i18n(
"Local Subscriptions" ) );
186 QWidget *mainWidget =
new QWidget(
this );
187 QVBoxLayout *mainLayout =
new QVBoxLayout;
188 mainWidget->setLayout( mainLayout );
189 setMainWidget( mainWidget );
193 #ifndef KDEPIM_MOBILE_UI
194 d->filterRecursiveCollectionFilter
196 d->filterRecursiveCollectionFilter->setDynamicSortFilter(
true );
197 d->filterRecursiveCollectionFilter->setSourceModel( d->model );
198 d->filterRecursiveCollectionFilter->setFilterCaseSensitivity( Qt::CaseInsensitive );
199 if ( !mimetypes.isEmpty() ) {
200 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters( mimetypes );
204 d->collectionView =
new QTreeView( mainWidget );
205 d->collectionView->setEditTriggers( QAbstractItemView::NoEditTriggers );
206 d->collectionView->header()->hide();
207 d->collectionView->setModel( d->filterRecursiveCollectionFilter );
208 d->collectionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
210 QHBoxLayout *filterBarLayout =
new QHBoxLayout;
212 filterBarLayout->addWidget(
new QLabel( i18n(
"Search:" ) ) );
214 KLineEdit *lineEdit =
new KLineEdit( mainWidget );
215 lineEdit->setClearButtonShown(
true);
216 lineEdit->setFocus();
217 connect( lineEdit, SIGNAL(textChanged(QString)),
218 this, SLOT(slotSetPattern(QString)) );
219 filterBarLayout->addWidget( lineEdit );
220 QCheckBox *checkBox =
new QCheckBox( i18n(
"Subscribed only"), mainWidget );
221 connect( checkBox, SIGNAL(clicked(
bool)),
222 this, SLOT(slotSetIncludeCheckedOnly(
bool)) );
223 filterBarLayout->addWidget( checkBox );
226 QHBoxLayout *hboxLayout =
new QHBoxLayout;
227 hboxLayout->addWidget( d->collectionView );
230 QVBoxLayout *subscribeButtonLayout =
new QVBoxLayout;
231 d->subscribe =
new KPushButton(i18n(
"Subscribe"));
232 subscribeButtonLayout->addWidget(d->subscribe);
233 connect(d->subscribe,SIGNAL(clicked()),
this,SLOT(slotSubscribe()));
235 d->unSubscribe =
new KPushButton(i18n(
"Unsubscribe"));
236 subscribeButtonLayout->addWidget(d->unSubscribe);
237 connect(d->unSubscribe,SIGNAL(clicked()),
this,SLOT(slotUnSubscribe()));
238 subscribeButtonLayout->addItem(
new QSpacerItem( 5, 5, QSizePolicy::Minimum, QSizePolicy::Expanding ) );
241 hboxLayout->addLayout(subscribeButtonLayout);
243 mainLayout->addLayout(filterBarLayout);
244 mainLayout->addLayout(hboxLayout);
249 d->filterRecursiveCollectionFilter
251 if ( !mimetypes.isEmpty() )
252 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters( mimetypes );
254 d->filterRecursiveCollectionFilter->setSourceModel( d->model );
256 KDescendantsProxyModel *flatModel =
new KDescendantsProxyModel(
this );
257 flatModel->setDisplayAncestorData(
true );
258 flatModel->setAncestorSeparator( QLatin1String(
"/" ) );
259 flatModel->setSourceModel( d->filterRecursiveCollectionFilter );
261 CheckableFilterProxyModel *checkableModel =
new CheckableFilterProxyModel(
this );
262 checkableModel->setSourceModel( flatModel );
264 d->collectionView =
new QListView( mainWidget );
266 d->collectionView->setModel( checkableModel );
267 mainLayout->addWidget( d->collectionView );
270 connect( d->model, SIGNAL(loaded()), SLOT(modelLoaded()) );
271 connect(
this, SIGNAL(okClicked()), SLOT(done()) );
272 connect(
this, SIGNAL(cancelClicked()), SLOT(deleteLater()) );
284 #include "moc_subscriptiondialog_p.cpp"
void subscribe(const Collection::List &collections)
Subscribes to the given list of collections.
~SubscriptionDialog()
Destroys the subscription dialog.
void showHiddenCollection(bool showHidden)
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.
SubscriptionDialog(QWidget *parent=0)
Creates a new subscription dialog.
Job to manipulate the local subscription state of a set of collections.
void unsubscribe(const Collection::List &collections)
Unsubscribes from the given list of collections.