kfileitem.h
00001 /* This file is part of the KDE project 00002 Copyright (C) 1999 David Faure <faure@kde.org> 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public License 00015 along with this library; see the file COPYING.LIB. If not, write to 00016 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00017 Boston, MA 02110-1301, USA. 00018 */ 00019 00020 #ifndef __kfileitem_h__ 00021 #define __kfileitem_h__ 00022 00023 #include <tqstringlist.h> 00024 #include <sys/stat.h> 00025 00026 #include <tqptrlist.h> 00027 #include <kio/global.h> 00028 #include <kurl.h> 00029 #include <kacl.h> 00030 #include <kmimetype.h> 00031 #include <kfilemetainfo.h> 00032 00033 #define KFILEITEM_HAS_ISWRITABLE // only used in libkonq/konq_iconviewwidget.cc, will be removed for 3.4 00034 00041 class KIO_EXPORT KFileItem 00042 { 00043 public: 00044 enum { Unknown = (mode_t) - 1 }; 00045 00057 KFileItem( const KIO::UDSEntry& _entry, const KURL& _url, 00058 bool _determineMimeTypeOnDemand = false, 00059 bool _urlIsDirectory = false ); 00060 00074 KFileItem( mode_t _mode, mode_t _permissions, const KURL& _url, 00075 bool _determineMimeTypeOnDemand = false ); 00076 00083 KFileItem( const KURL &url, const TQString &mimeType, mode_t mode ); 00084 00089 KFileItem( const KFileItem &item ); 00090 00095 virtual ~KFileItem(); 00096 00101 void refresh(); 00102 00107 void refreshMimeType(); 00108 00113 const KURL & url() const { return m_url; } 00114 00120 void setURL( const KURL &url ); 00121 00128 void setName( const TQString &name ); 00129 00134 mode_t permissions() const { return m_permissions; } 00135 00140 TQString permissionsString() const; 00141 00147 bool hasExtendedACL() const; 00148 00154 KACL ACL() const; 00155 00161 KACL defaultACL() const; 00162 00167 mode_t mode() const { return m_fileMode; } 00168 00173 TQString user() const; 00174 00179 TQString group() const; 00180 00186 bool isLink() const { return m_bLink; } 00187 00192 bool isDir() const; 00193 00198 bool isFile() const { return !isDir(); } 00199 00206 bool isReadable() const; 00207 00215 bool isWritable() const; 00216 00221 bool isHidden() const; 00222 00227 TQString linkDest() const; 00228 00235 TQString localPath() const; 00236 00237 //FIXME KDE4 deprecate this in favor of size(bool &hasSize) 00242 KIO::filesize_t size() const; 00243 00249 KIO::filesize_t size(bool &hasSize) const; 00250 00251 //FIXME KDE4 deprecate this in favor of time(unsigned int which, bool &hasSize) 00258 time_t time( unsigned int which ) const; 00259 00267 time_t time( unsigned int which, bool &hasTime ) const; 00268 00276 TQString timeString( unsigned int which = KIO::UDS_MODIFICATION_TIME ) const; 00277 00282 bool isLocalFile() const { return m_bIsLocalURL; } 00283 00289 const TQString& text() const { return m_strText; } 00290 00298 const TQString& name( bool lowerCase = false ) const { 00299 if ( !lowerCase ) 00300 return m_strName; 00301 else 00302 if ( m_strLowerCaseName.isNull() ) 00303 m_strLowerCaseName = m_strName.lower(); 00304 return m_strLowerCaseName; 00305 } 00306 00313 TQString mimetype() const; 00314 00321 TQString mimetypeFast() const; 00322 00329 KMimeType::Ptr mimeTypePtrFast(); 00330 00337 KMimeType::Ptr determineMimeType(); 00338 00344 KMimeType::Ptr mimeTypePtr() const { return m_pMimeType; } 00345 00346 bool isMimeTypeKnown() const; 00352 TQString mimeComment(); 00353 00359 TQString iconName(); 00360 00369 TQPixmap pixmap( int _size, int _state=0 ) const; 00370 00377 int overlays() const; 00378 00384 TQString getStatusBarInfo(); 00385 00394 TQString getToolTipText(int maxcount = 6); 00395 00402 bool acceptsDrops( ); 00403 00408 void run(); 00409 00415 const KIO::UDSEntry & entry() const { return m_entry; } 00416 00421 bool isMarked() const { return m_bMarked; } 00426 void mark() { m_bMarked = true; } 00431 void unmark() { m_bMarked = false; } 00432 00438 bool cmp( const KFileItem & item ); 00439 00473 virtual void setExtraData( const void *key, void *value ); 00474 00482 virtual const void * extraData( const void *key ) const; 00483 00491 virtual void * extraData( const void *key ); 00492 00497 virtual void removeExtraData( const void *key ); 00498 00503 void setMetaInfo( const KFileMetaInfo & info ); 00504 00512 void setFileMode( mode_t m ); 00513 00519 void setMimeType( const TQString& mimetype ); 00520 00526 const KFileMetaInfo & metaInfo(bool autoget = true, 00527 int what = KFileMetaInfo::Fastest) const; 00528 00536 void assign( const KFileItem & item ); 00537 00555 void setUDSEntry( const KIO::UDSEntry& entry, const KURL& url, 00556 bool determineMimeTypeOnDemand = false, 00557 bool urlIsDirectory = false ); 00558 00562 KFileItem& operator=( const KFileItem& ); 00563 00568 KURL mostLocalURL(bool &local) const; 00569 00571 00572 protected: 00577 void init( bool _determineMimeTypeOnDemand ); 00578 00584 void readUDSEntry( bool _urlIsDirectory ); 00585 00589 TQString parsePermissions( mode_t perm ) const; 00590 00591 private: 00595 KIO::UDSEntry m_entry; 00599 KURL m_url; 00600 00604 TQString m_strName; 00605 00610 TQString m_strText; 00611 00615 mutable TQString m_user, m_group; 00616 00620 mutable TQString m_strLowerCaseName; 00621 00625 KMimeType::Ptr m_pMimeType; 00626 00630 mode_t m_fileMode; 00634 mode_t m_permissions; 00635 00639 bool m_bMarked:1; 00643 bool m_bLink:1; 00647 bool m_bIsLocalURL:1; 00648 00649 bool m_bMimeTypeKnown:1; 00650 00651 // Auto: check leading dot. 00652 enum { Auto, Hidden, Shown } m_hidden:3; 00653 00654 // For special case like link to dirs over FTP 00655 TQString m_guessedMimeType; 00656 mutable TQString m_access; 00657 TQMap<const void*, void*> m_extra; 00658 mutable KFileMetaInfo m_metaInfo; 00659 00660 enum { Modification = 0, Access = 1, Creation = 2, NumFlags = 3 }; 00661 mutable time_t m_time[3]; 00662 mutable KIO::filesize_t m_size; 00663 00664 protected: 00665 virtual void virtual_hook( int id, void* data ); 00666 private: 00667 class KFileItemPrivate; 00668 KFileItemPrivate * d; 00669 KIO_EXPORT friend TQDataStream & operator<< ( TQDataStream & s, const KFileItem & a ); 00670 KIO_EXPORT friend TQDataStream & operator>> ( TQDataStream & s, KFileItem & a ); 00671 }; 00672 00676 typedef TQPtrList<KFileItem> KFileItemList; 00677 00681 typedef TQPtrListIterator<KFileItem> KFileItemListIterator; 00682 00683 KIO_EXPORT TQDataStream & operator<< ( TQDataStream & s, const KFileItem & a ); 00684 KIO_EXPORT TQDataStream & operator>> ( TQDataStream & s, KFileItem & a ); 00685 00686 00687 #endif