From 6206b40cde5f95dcfc9bcbd34c06f050ac5aef36 Mon Sep 17 00:00:00 2001 From: Thomas McGuire Date: Tue, 12 May 2009 17:25:32 +0000 Subject: [PATCH] Make sure the selectable state is correctly preserved when filtering. Also, hide non-selectable entries when filtering. svn path=/trunk/KDE/kdepim/; revision=967145 --- folderselectiontreewidget.cpp | 27 ++++++++++++++++++++++++--- folderselectiontreewidget.h | 5 +++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/folderselectiontreewidget.cpp b/folderselectiontreewidget.cpp index 1682b8100..71214516d 100644 --- a/folderselectiontreewidget.cpp +++ b/folderselectiontreewidget.cpp @@ -66,6 +66,16 @@ public: KMFolder * folder() const { return mFolder; }; + bool isReadOnly() const + { + return folder() && folder()->isReadOnly(); + } + + bool noContent() const + { + return folder() && folder()->noContent(); + } + private: KMFolder * mFolder; @@ -92,6 +102,12 @@ FolderSelectionTreeWidget::FolderSelectionTreeWidget( QWidget * parent, ::KMail: this, SLOT( addChildFolder() ) ); } +bool FolderSelectionTreeWidget::itemSelectable( const FolderSelectionTreeWidgetItem *item ) const +{ + return !( ( mLastMustBeReadWrite && item->isReadOnly() ) || + ( item->noContent() ) ); +} + void FolderSelectionTreeWidget::recursiveReload( FolderViewItem *fti, FolderSelectionTreeWidgetItem *parent ) { // search folders are never shown @@ -121,8 +137,7 @@ void FolderSelectionTreeWidget::recursiveReload( FolderViewItem *fti, FolderSele item->setText( mPathColumnIndex, path ); // Make readonly and nocoontent items unselectable, if we're told so - if ( ( mLastMustBeReadWrite && ( fti->folder() && fti->folder()->isReadOnly() ) ) || - ( fti->folder() && fti->folder()->noContent() ) ) { + if ( !itemSelectable( item ) ) { item->setFlags( item->flags() & ~Qt::ItemIsSelectable ); } else { item->setFolder( fti->folder() ); @@ -299,7 +314,10 @@ void FolderSelectionTreeWidget::applyFilter( const QString& filter ) { item->setHidden( false ); item->setSelected( false ); - item->setFlags( item->flags() | Qt::ItemIsSelectable ); + if ( itemSelectable( static_cast< FolderSelectionTreeWidgetItem* >( item ) ) ) + item->setFlags( item->flags() | Qt::ItemIsSelectable ); + else + item->setFlags( item->flags() & ~Qt::ItemIsSelectable ); ++clean; } @@ -323,6 +341,9 @@ void FolderSelectionTreeWidget::applyFilter( const QString& filter ) foreach( QTreeWidgetItem *item, lItems ) { + if ( !itemSelectable( static_cast( item ) ) ) + continue; + item->setFlags( item->flags() | Qt::ItemIsSelectable ); item->setHidden( false ); diff --git a/folderselectiontreewidget.h b/folderselectiontreewidget.h index f431933a4..912431cd4 100644 --- a/folderselectiontreewidget.h +++ b/folderselectiontreewidget.h @@ -153,6 +153,11 @@ protected: */ void recursiveReload( FolderViewItem *fti, FolderSelectionTreeWidgetItem *parent ); + /** + * Returns false if the item is read-only and we need write access or has no content. + */ + bool itemSelectable( const FolderSelectionTreeWidgetItem *item ) const; + signals: /** * Emitted when the tree widget selection changes, to inform the parent dialogue