Make sure the selectable state is correctly preserved when filtering.

Also, hide non-selectable entries when filtering.

svn path=/trunk/KDE/kdepim/; revision=967145
wilder-work
Thomas McGuire 17 years ago
parent 183fc9598d
commit 6206b40cde
  1. 27
      folderselectiontreewidget.cpp
  2. 5
      folderselectiontreewidget.h

@ -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<FolderSelectionTreeWidgetItem*>( item ) ) )
continue;
item->setFlags( item->flags() | Qt::ItemIsSelectable );
item->setHidden( false );

@ -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

Loading…
Cancel
Save