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->setCaption( i18n( "Select a collection" ) );
00090 collectionDialog->setSelectionMode( QAbstractItemView::SingleSelection );
00091 }
00092
00093 void CollectionRequester::Private::_k_slotOpenDialog()
00094 {
00095 CollectionDialog *dlg = collectionDialog;
00096
00097 if ( dlg->exec() != QDialog::Accepted )
00098 return;
00099
00100 const Akonadi::Collection collection = dlg->selectedCollection();
00101 q->setCollection( collection );
00102 emit q->collectionChanged( collection );
00103 }
00104
00105 CollectionRequester::CollectionRequester( QWidget *parent )
00106 : KHBox( parent ),
00107 d( new Private( this ) )
00108 {
00109 d->init();
00110 }
00111
00112
00113 CollectionRequester::CollectionRequester( const Akonadi::Collection &collection, QWidget *parent )
00114 : KHBox( parent ),
00115 d( new Private( this ) )
00116 {
00117 d->init();
00118 setCollection( collection );
00119 }
00120
00121
00122 CollectionRequester::~CollectionRequester()
00123 {
00124 delete d;
00125 }
00126
00127
00128 Collection CollectionRequester::collection() const
00129 {
00130 return d->collection;
00131 }
00132
00133
00134 void CollectionRequester::setCollection( const Collection& collection )
00135 {
00136 d->collection = collection;
00137 d->edit->setText( collection.isValid() ? collection.name() : i18n( "No Folder" ) );
00138 emit collectionChanged( collection );
00139 }
00140
00141 void CollectionRequester::setMimeTypeFilter( const QStringList &mimeTypes )
00142 {
00143 if ( d->collectionDialog )
00144 d->collectionDialog->setMimeTypeFilter( mimeTypes );
00145 }
00146
00147 QStringList CollectionRequester::mimeTypeFilter() const
00148 {
00149 if ( d->collectionDialog )
00150 return d->collectionDialog->mimeTypeFilter();
00151 else
00152 return QStringList();
00153 }
00154
00155 void CollectionRequester::setAccessRightsFilter( Collection::Rights rights )
00156 {
00157 if ( d->collectionDialog )
00158 d->collectionDialog->setAccessRightsFilter( rights );
00159 }
00160
00161 Collection::Rights CollectionRequester::accessRightsFilter() const
00162 {
00163 if ( d->collectionDialog )
00164 return d->collectionDialog->accessRightsFilter();
00165 else
00166 return Akonadi::Collection::ReadOnly;
00167 }
00168
00169 void CollectionRequester::changeCollectionDialogOptions( CollectionDialog::CollectionDialogOptions options )
00170 {
00171 if ( d->collectionDialog )
00172 d->collectionDialog->changeCollectionDialogOptions( options );
00173 }
00174
00175 #include "collectionrequester.moc"