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 <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() ) {
109 void CollectionComboBox::Private::activated(
const QModelIndex &index )
111 mParent->setCurrentIndex( index.row() );
116 : QObject( comboBox ),
117 mComboBox( comboBox ),
118 mMimeTypeFilter( mimeTypeFilter ),
119 mAccessRightsFilter( accessRightsFilter ),
120 mCustomModel( customModel )
124 bool MobileEventHandler::eventFilter( QObject *
object, QEvent *event )
126 if (
object == mComboBox && mComboBox->isEnabled() &&
event->type() == QEvent::MouseButtonPress ) {
128 const QMouseEvent *mouseEvent =
static_cast<QMouseEvent*
>( event );
131 if ( mComboBox->rect().contains( mouseEvent->pos() ) ) {
132 QMetaObject::invokeMethod(
this,
"openDialog", Qt::QueuedConnection );
138 return QObject::eventFilter(
object, event );
141 void MobileEventHandler::openDialog()
144 dialog.setMimeTypeFilter( mMimeTypeFilter->mimeTypeFilters() );
145 dialog.setAccessRightsFilter( mAccessRightsFilter->accessRights() );
147 if ( dialog.exec() ) {
150 mComboBox->setCurrentIndex( index.row() );
156 : KComboBox( parent ), d( new Private( 0, this ) )
158 #ifdef KDEPIM_MOBILE_UI
159 MobileEventHandler *handler =
new MobileEventHandler(
this, d->mMimeTypeFilterModel, d->mRightsFilterModel, d->mBaseModel );
160 installEventFilter( handler );
165 : KComboBox( parent ), d( new Private( model, this ) )
167 #ifdef KDEPIM_MOBILE_UI
168 MobileEventHandler *handler =
new MobileEventHandler(
this, d->mMimeTypeFilterModel, d->mRightsFilterModel, d->mBaseModel );
169 installEventFilter( handler );
180 d->mMimeTypeFilterModel->clearFilters();
181 d->mMimeTypeFilterModel->addMimeTypeFilters( contentMimeTypes );
184 foreach (
const QString &mimeType, contentMimeTypes ) {
185 d->mMonitor->setMimeTypeMonitored( mimeType,
true );
192 return d->mMimeTypeFilterModel->mimeTypeFilters();
197 d->mRightsFilterModel->setAccessRights( rights );
202 return d->mRightsFilterModel->accessRights();
207 d->mSelectionHandler->waitForCollection( collection );
212 const QModelIndex modelIndex = model()->index( currentIndex(), 0 );
213 if ( modelIndex.isValid() ) {
220 #include "moc_collectioncombobox.cpp"
221 #include "moc_collectioncombobox_p.cpp"