akonadi
collectionrequester.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "collectionrequester.h"
00021 #include "collectiondialog.h"
00022
00023 #include <klineedit.h>
00024 #include <klocale.h>
00025 #include <kpushbutton.h>
00026 #include <kstandardshortcut.h>
00027
00028 #include <QtCore/QEvent>
00029 #include <QtGui/QAction>
00030 #include <QtGui/QApplication>
00031
00032 using namespace Akonadi;
00033
00034 class CollectionRequester::Private
00035 {
00036 public:
00037 Private( CollectionRequester *parent )
00038 : q( parent ),
00039 edit( 0 ),
00040 button( 0 ),
00041 collectionDialog( 0 )
00042 {
00043 }
00044
00045 ~Private()
00046 {
00047 }
00048
00049 void init();
00050
00051
00052 void _k_slotOpenDialog();
00053
00054 CollectionRequester *q;
00055 Collection collection;
00056 KLineEdit *edit;
00057 KPushButton *button;
00058 CollectionDialog *collectionDialog;
00059 };
00060
00061
00062 void CollectionRequester::Private::init()
00063 {
00064 q->setMargin( 0 );
00065
00066 edit = new KLineEdit( q );
00067 edit->setReadOnly( true );
00068 edit->setClearButtonShown( false );
00069
00070 button = new KPushButton( q );
00071 button->setIcon( KIcon( QLatin1String( "document-open" ) ) );
00072 const int buttonSize = edit->sizeHint().height();
00073 button->setFixedSize( buttonSize, buttonSize );
00074 button->setToolTip( i18n( "Open collection dialog" ) );
00075
00076 q->setSpacing( -1 );
00077
00078 edit->installEventFilter( q );
00079 q->setFocusProxy( edit );
00080 q->setFocusPolicy( Qt::StrongFocus );
00081
00082 q->connect( button, SIGNAL( clicked() ), q, SLOT( _k_slotOpenDialog() ) );
00083
00084 QAction *openAction = new QAction( q );
00085 openAction->setShortcut( KStandardShortcut::Open );
00086 q->connect( openAction, SIGNAL( triggered( bool ) ), q, SLOT( _k_slotOpenDialog() ) );
00087
00088 collectionDialog = new CollectionDialog( q );
00089 collectionDialog->setSelectionMode( QAbstractItemView::SingleSelection );
00090 }
00091
00092 void CollectionRequester::Private::_k_slotOpenDialog()
00093 {
00094 CollectionDialog *dlg = collectionDialog;
00095
00096 if ( dlg->exec() != QDialog::Accepted )
00097 return;
00098
00099 q->setCollection( dlg->selectedCollection() );
00100 }
00101
00102 CollectionRequester::CollectionRequester( QWidget *parent )
00103 : KHBox( parent ),
00104 d( new Private( this ) )
00105 {
00106 d->init();
00107 }
00108
00109
00110 CollectionRequester::CollectionRequester( const Akonadi::Collection &collection, QWidget *parent )
00111 : KHBox( parent ),
00112 d( new Private( this ) )
00113 {
00114 d->init();
00115 setCollection( collection );
00116 }
00117
00118
00119 CollectionRequester::~CollectionRequester()
00120 {
00121 delete d;
00122 }
00123
00124
00125 Collection CollectionRequester::collection() const
00126 {
00127 return d->collection;
00128 }
00129
00130
00131 void CollectionRequester::setCollection( const Collection& collection )
00132 {
00133 d->collection = collection;
00134 d->edit->setText( collection.isValid() ? collection.name() : i18n( "no collection" ) );
00135 }
00136
00137 void CollectionRequester::setMimeTypeFilter( const QStringList &mimeTypes )
00138 {
00139 if ( d->collectionDialog )
00140 d->collectionDialog->setMimeTypeFilter( mimeTypes );
00141 }
00142
00143 QStringList CollectionRequester::mimeTypeFilter() const
00144 {
00145 if ( d->collectionDialog )
00146 return d->collectionDialog->mimeTypeFilter();
00147 else
00148 return QStringList();
00149 }
00150
00151 void CollectionRequester::setAccessRightsFilter( Collection::Rights rights )
00152 {
00153 if ( d->collectionDialog )
00154 d->collectionDialog->setAccessRightsFilter( rights );
00155 }
00156
00157 Collection::Rights CollectionRequester::accessRightsFilter() const
00158 {
00159 if ( d->collectionDialog )
00160 return d->collectionDialog->accessRightsFilter();
00161 else
00162 return Akonadi::Collection::ReadOnly;
00163 }
00164
00165 #include "collectionrequester.moc"