20 #include "subscriptiondialog_p.h"
23 #include "recursivecollectionfilterproxymodel.h"
24 #include "subscriptionjob_p.h"
25 #include "subscriptionmodel_p.h"
29 #include <ksharedconfig.h>
32 #include <klocalizedstring.h>
34 #include <QVBoxLayout>
35 #include <QHBoxLayout>
38 #ifndef KDEPIM_MOBILE_UI
39 #include <klineedit.h>
40 #include <KPushButton>
41 #include <krecursivefilterproxymodel.h>
42 #include <QHeaderView>
47 #include <kdescendantsproxymodel.h>
49 #include <QSortFilterProxyModel>
51 class CheckableFilterProxyModel :
public QSortFilterProxyModel
54 CheckableFilterProxyModel( QObject *parent = 0 )
55 : QSortFilterProxyModel( parent ) { }
58 bool filterAcceptsRow(
int sourceRow,
const QModelIndex &sourceParent )
const
60 QModelIndex sourceIndex = sourceModel()->index( sourceRow, 0, sourceParent );
61 return sourceModel()->flags( sourceIndex ) & Qt::ItemIsUserCheckable;
66 using namespace Akonadi;
71 class SubscriptionDialog::Private
81 connect( job, SIGNAL(result(KJob*)), q, SLOT(subscriptionResult(KJob*)) );
84 void subscriptionResult( KJob *job )
88 kWarning() << job->errorString();
95 collectionView->setEnabled(
true );
96 #ifndef KDEPIM_MOBILE_UI
97 collectionView->expandAll();
99 q->enableButtonOk(
true );
101 void slotSetPattern(
const QString &text)
103 filterRecursiveCollectionFilter->setSearchPattern( text );
104 #ifndef KDEPIM_MOBILE_UI
105 collectionView->expandAll();
108 void slotSetIncludeCheckedOnly(
bool checked)
110 filterRecursiveCollectionFilter->setIncludeCheckedOnly( checked );
115 KConfigGroup group( KGlobal::config(),
"SubscriptionDialog" );
116 group.writeEntry(
"Size", q->size() );
121 KConfigGroup group( KGlobal::config(),
"SubscriptionDialog" );
122 const QSize sizeDialog = group.readEntry(
"Size", QSize(300,200) );
123 if ( sizeDialog.isValid() ) {
124 q->resize( sizeDialog );
128 void slotUnSubscribe();
129 void slotSubscribe();
132 #ifndef KDEPIM_MOBILE_UI
133 QTreeView *collectionView;
134 KPushButton *subscribe;
135 KPushButton *unSubscribe;
137 QListView *collectionView;
144 void SubscriptionDialog::Private::slotSubscribe()
146 #ifndef KDEPIM_MOBILE_UI
147 QModelIndexList list = collectionView->selectionModel()->selectedIndexes();
148 foreach (
const QModelIndex& index, list) {
149 model->setData(index, Qt::Checked, Qt::CheckStateRole);
151 collectionView->setFocus();
155 void SubscriptionDialog::Private::slotUnSubscribe()
157 #ifndef KDEPIM_MOBILE_UI
158 QModelIndexList list = collectionView->selectionModel()->selectedIndexes();
159 foreach (
const QModelIndex& index, list) {
160 model->setData(index, Qt::Unchecked, Qt::CheckStateRole);
162 collectionView->setFocus();
168 d( new Private( this ) )
170 init( QStringList() );
175 d( new Private( this ) )
182 d->model->showHiddenCollection(showHidden);
185 void SubscriptionDialog::init(
const QStringList &mimetypes )
187 enableButtonOk(
false );
188 setCaption( i18n(
"Local Subscriptions" ) );
189 QWidget *mainWidget =
new QWidget(
this );
190 QVBoxLayout *mainLayout =
new QVBoxLayout;
191 mainWidget->setLayout( mainLayout );
192 setMainWidget( mainWidget );
196 #ifndef KDEPIM_MOBILE_UI
197 d->filterRecursiveCollectionFilter
199 d->filterRecursiveCollectionFilter->setDynamicSortFilter(
true );
200 d->filterRecursiveCollectionFilter->setSourceModel( d->model );
201 d->filterRecursiveCollectionFilter->setFilterCaseSensitivity( Qt::CaseInsensitive );
202 if ( !mimetypes.isEmpty() ) {
203 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters( mimetypes );
206 d->collectionView =
new QTreeView( mainWidget );
207 d->collectionView->setEditTriggers( QAbstractItemView::NoEditTriggers );
208 d->collectionView->header()->hide();
209 d->collectionView->setModel( d->filterRecursiveCollectionFilter );
210 d->collectionView->setSelectionMode(QAbstractItemView::ExtendedSelection);
212 QHBoxLayout *filterBarLayout =
new QHBoxLayout;
214 filterBarLayout->addWidget(
new QLabel( i18n(
"Search:" ) ) );
216 KLineEdit *lineEdit =
new KLineEdit( mainWidget );
217 lineEdit->setClearButtonShown(
true);
218 lineEdit->setFocus();
219 connect( lineEdit, SIGNAL(textChanged(QString)),
220 this, SLOT(slotSetPattern(QString)) );
221 filterBarLayout->addWidget( lineEdit );
222 QCheckBox *checkBox =
new QCheckBox( i18n(
"Subscribed only"), mainWidget );
223 connect( checkBox, SIGNAL(clicked(
bool)),
224 this, SLOT(slotSetIncludeCheckedOnly(
bool)) );
225 filterBarLayout->addWidget( checkBox );
227 QHBoxLayout *hboxLayout =
new QHBoxLayout;
228 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 ) );
240 hboxLayout->addLayout(subscribeButtonLayout);
242 mainLayout->addLayout(filterBarLayout);
243 mainLayout->addLayout(hboxLayout);
247 d->filterRecursiveCollectionFilter
249 if ( !mimetypes.isEmpty() )
250 d->filterRecursiveCollectionFilter->addContentMimeTypeInclusionFilters( mimetypes );
252 d->filterRecursiveCollectionFilter->setSourceModel( d->model );
254 KDescendantsProxyModel *flatModel =
new KDescendantsProxyModel(
this );
255 flatModel->setDisplayAncestorData(
true );
256 flatModel->setAncestorSeparator( QLatin1String(
"/" ) );
257 flatModel->setSourceModel( d->filterRecursiveCollectionFilter );
259 CheckableFilterProxyModel *checkableModel =
new CheckableFilterProxyModel(
this );
260 checkableModel->setSourceModel( flatModel );
262 d->collectionView =
new QListView( mainWidget );
264 d->collectionView->setModel( checkableModel );
265 mainLayout->addWidget( d->collectionView );
268 connect( d->model, SIGNAL(loaded()), SLOT(modelLoaded()) );
269 connect(
this, SIGNAL(okClicked()), SLOT(done()) );
270 connect(
this, SIGNAL(cancelClicked()), SLOT(deleteLater()) );
281 #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.