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>
41 #include <QMouseEvent>
43 using namespace Akonadi;
45 class CollectionComboBox::Private
49 : mParent( parent ), mMonitor( 0 ), mModel( 0 )
52 mBaseModel = customModel;
55 mMonitor->fetchCollection(
true );
64 KDescendantsProxyModel *proxyModel =
new KDescendantsProxyModel( parent );
65 proxyModel->setDisplayAncestorData(
true );
66 proxyModel->setSourceModel( mBaseModel );
69 mMimeTypeFilterModel->setSourceModel( proxyModel );
72 mRightsFilterModel->setSourceModel( mMimeTypeFilterModel );
74 mParent->setModel( mRightsFilterModel );
75 mParent->model()->sort( mParent->modelColumn() );
78 mParent->connect( mSelectionHandler, SIGNAL(collectionAvailable(QModelIndex)),
79 mParent, SLOT(activated(QModelIndex)) );
81 mParent->connect( mParent, SIGNAL(activated(
int)),
82 mParent, SLOT(activated(
int)) );
89 void activated(
int index );
90 void activated(
const QModelIndex& index );
96 QAbstractItemModel *mBaseModel;
102 void CollectionComboBox::Private::activated(
int index )
104 const QModelIndex modelIndex = mParent->model()->index( index, 0 );
105 if ( modelIndex.isValid() ) {
110 void CollectionComboBox::Private::activated(
const QModelIndex &index )
112 mParent->setCurrentIndex( index.row() );
117 : QObject( comboBox ),
118 mComboBox( comboBox ),
119 mMimeTypeFilter( mimeTypeFilter ),
120 mAccessRightsFilter( accessRightsFilter ),
121 mCustomModel( customModel )
125 bool MobileEventHandler::eventFilter( QObject *
object, QEvent *event )
127 if (
object == mComboBox && mComboBox->isEnabled() &&
event->type() == QEvent::MouseButtonPress ) {
129 const QMouseEvent *mouseEvent =
static_cast<QMouseEvent*
>( event );
132 if ( mComboBox->rect().contains( mouseEvent->pos() ) ) {
133 QMetaObject::invokeMethod(
this,
"openDialog", Qt::QueuedConnection );
139 return QObject::eventFilter(
object, event );
142 void MobileEventHandler::openDialog()
145 dialog->setMimeTypeFilter( mMimeTypeFilter->mimeTypeFilters() );
146 dialog->setAccessRightsFilter( mAccessRightsFilter->accessRights() );
148 if ( dialog->exec() == QDialog::Accepted && dialog != 0 ) {
151 mComboBox->setCurrentIndex( index.row() );
158 : KComboBox( parent ), d( new Private( 0, this ) )
160 #ifdef KDEPIM_MOBILE_UI
161 MobileEventHandler *handler =
new MobileEventHandler(
this, d->mMimeTypeFilterModel, d->mRightsFilterModel, d->mBaseModel );
162 installEventFilter( handler );
167 : KComboBox( parent ), d( new Private( model, this ) )
169 #ifdef KDEPIM_MOBILE_UI
170 MobileEventHandler *handler =
new MobileEventHandler(
this, d->mMimeTypeFilterModel, d->mRightsFilterModel, d->mBaseModel );
171 installEventFilter( handler );
182 d->mMimeTypeFilterModel->clearFilters();
183 d->mMimeTypeFilterModel->addMimeTypeFilters( contentMimeTypes );
186 foreach (
const QString &mimeType, contentMimeTypes ) {
187 d->mMonitor->setMimeTypeMonitored( mimeType,
true );
194 return d->mMimeTypeFilterModel->mimeTypeFilters();
199 d->mRightsFilterModel->setAccessRights( rights );
204 return d->mRightsFilterModel->accessRights();
209 d->mSelectionHandler->waitForCollection( collection );
214 const QModelIndex modelIndex = model()->index( currentIndex(), 0 );
215 if ( modelIndex.isValid() ) {
222 #include "moc_collectioncombobox.cpp"
223 #include "moc_collectioncombobox_p.cpp"