Modify class KFileItem to use a TDEHiddenFileMatcher class

instance to determine whether or not a file is hidden.

KFileItem is initialized to use the single default instance
TDEGlobal::hiddenFileMatcher but a method is provided for
installing an application-specific instance.

Provide a caching mechanism to minimize calls to the match()
method of the TDEHiddenFileMatcher instance after an initial
determination of "hidden" for a filesystem object has been made.

Change names of variables and functions to use *HiddenFiles
instead of *DotFiles terminology.

Signed-off-by: Vincent Reher <tde@4reher.org>
pull/178/head
Vincent Reher 3 years ago
parent a084db1966
commit e9c4a2c039

@ -301,7 +301,7 @@ void KDirOperator::slotSimpleView()
void KDirOperator::slotToggleHidden( bool show )
{
dir->setShowingDotFiles( show );
dir->setShowingHiddenFiles( show );
updateDir();
if ( m_fileView )
m_fileView->listingCompleted();
@ -1486,7 +1486,7 @@ void KDirOperator::readConfig( TDEConfig *kc, const TQString& group )
if ( kc->readBoolEntry( TQString::fromLatin1("Show hidden files"),
DefaultShowHidden ) ) {
showHiddenAction->setChecked( true );
dir->setShowingDotFiles( true );
dir->setShowingHiddenFiles( true );
}
if ( kc->readBoolEntry( TQString::fromLatin1("Sort reversed"),
DefaultSortReversed ) )

@ -62,7 +62,7 @@ KFileTreeBranch::KFileTreeBranch( KFileTreeView *parent, const KURL& url,
m_root->setPixmap( 0, pix );
m_root->setText( 0, name );
setShowingDotFiles( showHidden );
setShowingHiddenFiles( showHidden );
connect( this, TQT_SIGNAL( refreshItems(const KFileItemList&)),
this, TQT_SLOT ( slotRefreshItems( const KFileItemList& )));

@ -44,7 +44,7 @@ public:
complete = false;
autoUpdate = false;
isShowingDotFiles = false;
isShowingHiddenFiles = false;
dirOnlyMode = false;
autoErrorHandling = false;
@ -79,7 +79,7 @@ public:
bool complete;
bool autoUpdate;
bool isShowingDotFiles;
bool isShowingHiddenFiles;
bool dirOnlyMode;
bool autoErrorHandling;

@ -26,7 +26,7 @@
#include "tdefilefilter.h"
KSimpleFileFilter::KSimpleFileFilter()
: m_filterDotFiles( true ),
: m_filterHiddenFiles( true ),
m_filterSpecials( true ),
m_modeFilter( 0 )
{
@ -37,9 +37,9 @@ KSimpleFileFilter::~KSimpleFileFilter()
{
}
void KSimpleFileFilter::setFilterDotFiles( bool filter )
void KSimpleFileFilter::setFilterHiddenFiles( bool filter )
{
m_filterDotFiles = filter;
m_filterHiddenFiles = filter;
}
void KSimpleFileFilter::setFilterSpecials( bool filter )
@ -84,7 +84,7 @@ bool KSimpleFileFilter::passesFilter( const KFileItem *item ) const
const TQString& name = item->name();
if ( m_filterDotFiles && item->isHidden() )
if ( m_filterHiddenFiles && item->isHidden() )
return false;
if ( m_filterSpecials && (name == dot || name == dotdot) )

@ -60,27 +60,27 @@ class TDEIO_EXPORT KSimpleFileFilter : public KFileFilter
{
public:
/**
* Creates a new filter. By default, it filters only hidden dot files
* Creates a new filter. By default, it filters only hidden files
* and "." and "..".
*/
KSimpleFileFilter();
virtual ~KSimpleFileFilter();
/**
* Enable or disable filtering hidden dot files.
* Enable or disable filtering hidden files.
* This option is enabled by default.
* @param filter true to enable filtering dot files, false to
* @param filter true to enable filtering hidden files, false to
* disable
* @see filterDotFiles
* @see filterHiddenFiles
*/
virtual void setFilterDotFiles( bool filter );
virtual void setFilterHiddenFiles( bool filter );
/**
* Checks whether filtering dot files is enabled.
* Checks whether filtering hidden files is enabled.
* This option is enabled by default.
* @return true if filtering is enabled, false otherwise
* @see setFilterDotFiles
* @see setFilterHiddenFiles
*/
bool filterDotFiles() const { return m_filterDotFiles; }
bool filterHiddenFiles() const { return m_filterHiddenFiles; }
/**
* Filters "." and "..", default is true.
@ -158,7 +158,7 @@ protected:
private:
TQStringList m_mimeFilters;
bool m_filterDotFiles :1;
bool m_filterHiddenFiles :1;
bool m_filterSpecials :1;
mode_t m_modeFilter;
protected:

@ -204,6 +204,9 @@ void KFileItem::init( bool _determineMimeTypeOnDemand )
// otherwise, determineMimeType will be able to do better.
m_bMimeTypeKnown = (!_determineMimeTypeOnDemand) || accurate;
}
// initialize hidden file matching apparatus
setHiddenFileMatcher( TDEGlobal::hiddenFileMatcher() );
}
void KFileItem::readUDSEntry( bool _urlIsDirectory )
@ -830,15 +833,44 @@ bool KFileItem::isWritable() const
return true;
}
void KFileItem::setHiddenFileMatcher( TDEHiddenFileMatcher *hiddenFileMatcher )
{
kdDebug(7077) << "KFileItem::setHiddenFileMatcher(...) called for " << m_url.fileName() << " [" << hiddenFileMatcher->getCriteria() << "]" <<endl ;
m_pHiddenFileMatcher = hiddenFileMatcher;
m_bCheckHidden = true;
m_bHiddenByMatcher = false;
}
void KFileItem::reEvaluateHidden()
{
kdDebug(7077) << "KFileItem::reEvaluateHidden() called for " << m_url.fileName() <<endl ;
m_bCheckHidden = true;
}
void KFileItem::checkHiddenByMatcher()
{
if ( !m_url.isEmpty() )
m_bHiddenByMatcher = m_pHiddenFileMatcher->match( m_url.fileName() );
else // should never happen
m_bHiddenByMatcher = m_pHiddenFileMatcher->match( m_strName );
kdDebug(7077) << "KFileItem::checkHiddenByMatcher() called for " << m_url.fileName() << " [" << m_bHiddenByMatcher << "]" <<endl ;
m_bCheckHidden = false;
}
bool KFileItem::isHidden() const
{
if ( m_hidden != Auto )
return m_hidden == Hidden;
if ( !m_url.isEmpty() )
return m_url.fileName()[0] == '.';
else // should never happen
return m_strName[0] == '.';
if ( m_bCheckHidden )
const_cast<KFileItem*>(this)->checkHiddenByMatcher();
kdDebug(7077) << "KFileItem::isHidden() called for " << m_url.fileName() << " [" << m_bHiddenByMatcher << "]" <<endl ;
return m_bHiddenByMatcher;
}
bool KFileItem::isDir() const

@ -24,6 +24,7 @@
#include <sys/stat.h>
#include <tqptrlist.h>
#include <tdestringmatcher.h>
#include <tdeio/global.h>
#include <kurl.h>
#include <kacl.h>
@ -228,16 +229,33 @@ public:
*/
bool isWritable() const;
/**
* Checks whether the file is hidden.
* @return true if the file is hidden.
/**
* Sets pointer to object that encapsulates criteria for determining
* whether or not a filesystem entity is hidden based on characteristics
* of its name. Pointer is stored in @property m_pHiddenFileMatcher.
*/
bool isHidden() const;
void setHiddenFileMatcher( TDEHiddenFileMatcher *hiddenFileMatcher );
/**
* Sets @property m_bCheckHidden to true, thereby forcing next call
* to method isHidden() to call method checkHiddenByMatcher() instead
* of simply relying on previously cached result.
*/
void reEvaluateHidden();
/**
* Returns the link destination if isLink() == true.
* @return the link destination. TQString::null if the item is not a link
Checks whether or not the current filesystem object is "hidden" by
calling the match() method of the TDEHiddenFileMatcher object stored
in @property m_pHiddenFileMatcher. Result of this check is cached in
@property m_bHiddenByMatcher.
*/
void checkHiddenByMatcher();
/**
Checks whether or not the current filesystem object is "hidden".
*/
bool isHidden() const;
TQString linkDest() const;
/**
@ -261,7 +279,7 @@ public:
* @return the file size, or 0 if not known
*/
TDEIO::filesize_t size(bool &hasSize) const;
//FIXME KDE4 deprecate this in favor of time(unsigned int which, bool &hasSize)
/**
* Requests the modification, access or creation time, depending on @p which.
@ -667,9 +685,31 @@ private:
bool m_bMimeTypeKnown:1;
// Auto: check leading dot.
// Auto: always check if hidden.
enum { Auto, Hidden, Shown } m_hidden:3;
/**
* If true, next call to isHidden() will force a full (re-)evaluation of
* whether or not a filesystem object is hidden based on criteria stored
* in the TDEHiddenFileMatcher object @property m_pHiddenFileMatcher. Can
* be set to true by external callers using method reEvaluateHidden().
*/
mutable bool m_bCheckHidden:1;
/**
* Caches result of most recent call to the TDEHiddenFileMatcher object
* @property m_pHiddenFileMatcher. True if file is "hidden" (i.e. hide-able),
* false otherwise.
*/
mutable bool m_bHiddenByMatcher:1;
/**
* Pointer to object that encapsulates criteria for determining whether
* or not a this filesystem entity is hidden based on characteristics of
* its name. This property is set by method setHiddenFileMatcher().
*/
mutable TDEHiddenFileMatcher *m_pHiddenFileMatcher;
// For special case like link to dirs over FTP
TQString m_guessedMimeType;
mutable TQString m_access;

Loading…
Cancel
Save