22 #include "collectioncombobox.h"
23 #include "collectioncombobox_p.h"
25 #include "asyncselectionhandler_p.h"
26 #include "collectiondialog.h"
28 #include <akonadi/changerecorder.h>
29 #include <akonadi/collectionfetchscope.h>
30 #include <akonadi/collectionfilterproxymodel.h>
31 #include <akonadi/entityrightsfiltermodel.h>
32 #include <akonadi/entitytreemodel.h>
33 #include <akonadi/session.h>
35 #include <kdescendantsproxymodel.h>
36 #include "collectionutils_p.h"
38 #include <QtCore/QAbstractItemModel>
39 #include <QtCore/QEvent>
40 #include <QtGui/QMouseEvent>
42 using namespace Akonadi;
44 class CollectionComboBox::Private
48 : mParent( parent ), mMonitor( 0 ), mModel( 0 )
51 mBaseModel = customModel;
54 mMonitor->fetchCollection(
true );
63 KDescendantsProxyModel *proxyModel =
new KDescendantsProxyModel( parent );
64 proxyModel->setDisplayAncestorData(
true );
65 proxyModel->setSourceModel( mBaseModel );
68 mMimeTypeFilterModel->setSourceModel( proxyModel );
71 mRightsFilterModel->setSourceModel( mMimeTypeFilterModel );
73 mParent->setModel( mRightsFilterModel );
74 mParent->model()->sort( mParent->modelColumn() );
77 mParent->connect( mSelectionHandler, SIGNAL(collectionAvailable(QModelIndex)),
78 mParent, SLOT(activated(QModelIndex)) );
80 mParent->connect( mParent, SIGNAL(activated(
int)),
81 mParent, SLOT(activated(
int)) );
88 void activated(
int index );
89 void activated(
const QModelIndex& index );
95 QAbstractItemModel *mBaseModel;
101 void CollectionComboBox::Private::activated(
int index )
103 const QModelIndex modelIndex = mParent->model()->index( index, 0 );
104 if ( modelIndex.isValid() )
108 void CollectionComboBox::Private::activated(
const QModelIndex &index )
110 mParent->setCurrentIndex( index.row() );
115 : QObject( comboBox ),
116 mComboBox( comboBox ),
117 mMimeTypeFilter( mimeTypeFilter ),
118 mAccessRightsFilter( accessRightsFilter ),
119 mCustomModel( customModel )
123 bool MobileEventHandler::eventFilter( QObject *
object, QEvent *event )
125 if (
object == mComboBox && mComboBox->isEnabled() &&
event->type() == QEvent::MouseButtonPress ) {
127 const QMouseEvent *mouseEvent =
static_cast<QMouseEvent*
>( event );
130 if ( mComboBox->rect().contains( mouseEvent->pos() ) ) {
131 QMetaObject::invokeMethod(
this,
"openDialog", Qt::QueuedConnection );
137 return QObject::eventFilter(
object, event );
140 void MobileEventHandler::openDialog()
143 dialog.setMimeTypeFilter( mMimeTypeFilter->mimeTypeFilters() );
144 dialog.setAccessRightsFilter( mAccessRightsFilter->accessRights() );
146 if ( dialog.exec() ) {
149 mComboBox->setCurrentIndex( index.row() );
155 : KComboBox( parent ), d( new Private( 0, this ) )
157 #ifdef KDEPIM_MOBILE_UI
158 MobileEventHandler *handler =
new MobileEventHandler(
this, d->mMimeTypeFilterModel, d->mRightsFilterModel, d->mBaseModel );
159 installEventFilter( handler );
164 : KComboBox( parent ), d( new Private( model, this ) )
166 #ifdef KDEPIM_MOBILE_UI
167 MobileEventHandler *handler =
new MobileEventHandler(
this, d->mMimeTypeFilterModel, d->mRightsFilterModel, d->mBaseModel );
168 installEventFilter( handler );
179 d->mMimeTypeFilterModel->clearFilters();
180 d->mMimeTypeFilterModel->addMimeTypeFilters( contentMimeTypes );
183 foreach (
const QString &mimeType, contentMimeTypes )
184 d->mMonitor->setMimeTypeMonitored( mimeType,
true );
189 return d->mMimeTypeFilterModel->mimeTypeFilters();
194 d->mRightsFilterModel->setAccessRights( rights );
199 return d->mRightsFilterModel->accessRights();
204 d->mSelectionHandler->waitForCollection( collection );
209 const QModelIndex modelIndex = model()->index( currentIndex(), 0 );
210 if ( modelIndex.isValid() )
216 #include "collectioncombobox.moc"
217 #include "collectioncombobox_p.moc"