kio
kfilefilter.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <qregexp.h>
00022
00023 #include <kfileitem.h>
00024 #include <kglobal.h>
00025
00026 #include "kfilefilter.h"
00027
00028 KSimpleFileFilter::KSimpleFileFilter()
00029 : m_filterDotFiles( true ),
00030 m_filterSpecials( true ),
00031 m_modeFilter( 0 )
00032 {
00033 m_nameFilters.setAutoDelete( true );
00034 }
00035
00036 KSimpleFileFilter::~KSimpleFileFilter()
00037 {
00038 }
00039
00040 void KSimpleFileFilter::setFilterDotFiles( bool filter )
00041 {
00042 m_filterDotFiles = filter;
00043 }
00044
00045 void KSimpleFileFilter::setFilterSpecials( bool filter )
00046 {
00047 m_filterSpecials = filter;
00048 }
00049
00050 void KSimpleFileFilter::setNameFilters( const QString& nameFilters )
00051 {
00052
00053 setNameFilters( nameFilters, false, ' ' );
00054 }
00055
00056 void KSimpleFileFilter::setNameFilters( const QString& nameFilters,
00057 bool caseSensitive,
00058 const QChar& separator )
00059 {
00060 m_nameFilters.clear();
00061
00062
00063 QStringList list = QStringList::split(separator, nameFilters);
00064
00065 QStringList::ConstIterator it = list.begin();
00066 for ( ; it != list.end(); ++it )
00067 m_nameFilters.append(new QRegExp(*it, caseSensitive, true ));
00068 }
00069
00070 void KSimpleFileFilter::setMimeFilters( const QStringList& mimeFilters )
00071 {
00072 m_mimeFilters = mimeFilters;
00073 }
00074
00075 void KSimpleFileFilter::setModeFilter( mode_t mode )
00076 {
00077 m_modeFilter = mode;
00078 }
00079
00080 bool KSimpleFileFilter::passesFilter( const KFileItem *item ) const
00081 {
00082 static const QString& dot = KGlobal::staticQString(".");
00083 static const QString& dotdot = KGlobal::staticQString("..");
00084
00085 const QString& name = item->name();
00086
00087 if ( m_filterDotFiles && item->isHidden() )
00088 return false;
00089
00090 if ( m_filterSpecials && (name == dot || name == dotdot) )
00091 return false;
00092
00093 if ( m_modeFilter && !(m_modeFilter & item->mode()) )
00094 return false;
00095
00096 if ( !m_mimeFilters.isEmpty() ) {
00097
00098 KMimeType::Ptr mime = item->mimeTypePtr();
00099 bool ok = false;
00100
00101 QStringList::ConstIterator it = m_mimeFilters.begin();
00102 for ( ; it != m_mimeFilters.end(); ++it ) {
00103 if ( mime->is(*it) ) {
00104 ok = true;
00105 break;
00106 }
00107 }
00108 if ( !ok )
00109 return false;
00110 }
00111
00112 if ( !m_nameFilters.isEmpty() ) {
00113 bool ok = false;
00114
00115 QPtrListIterator<QRegExp> it( m_nameFilters );
00116 for ( ; it.current(); ++it ) {
00117 if ( it.current()->exactMatch( name ) ) {
00118 ok = true;
00119 break;
00120 }
00121 }
00122 if ( !ok )
00123 return false;
00124 }
00125
00126 return true;
00127 }
00128
00129 void KFileFilter::virtual_hook( int, void* )
00130 { }
00131
00132 void KSimpleFileFilter::virtual_hook( int id, void* data )
00133 { KFileFilter::virtual_hook( id, data ); }
00134