tdefileitem.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 __tdefileitem_h__ 00021 #define __tdefileitem_h__ 00022 00023 #include <tqstringlist.h> 00024 #include <sys/stat.h> 00025 00026 #include <tqptrlist.h> 00027 #include <tdeio/global.h> 00028 #include <kurl.h> 00029 #include <kacl.h> 00030 #include <kmimetype.h> 00031 #include <tdefilemetainfo.h> 00032 00033 #define TDEFILEITEM_HAS_ISWRITABLE // only used in libkonq/konq_iconviewwidget.cc, will be removed for 3.4 00034 00041 class TDEIO_EXPORT KFileItem 00042 { 00043 public: 00044 enum { Unknown = (mode_t) - 1 }; 00045 00057 KFileItem( const TDEIO::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 00127 const KURL & listerURL() const { return m_listerURL; } 00128 00134 void setListerURL( const KURL &url ); 00135 00142 void setName( const TQString &name ); 00143 00148 mode_t permissions() const { return m_permissions; } 00149 00154 TQString permissionsString() const; 00155 00161 bool hasExtendedACL() const; 00162 00168 KACL ACL() const; 00169 00175 KACL defaultACL() const; 00176 00181 mode_t mode() const { return m_fileMode; } 00182 00187 TQString user() const; 00188 00193 TQString group() const; 00194 00200 bool isLink() const { return m_bLink; } 00201 00206 bool isDir() const; 00207 00212 bool isFile() const { return !isDir(); } 00213 00220 bool isReadable() const; 00221 00229 bool isWritable() const; 00230 00235 bool isHidden() const; 00236 00241 TQString linkDest() const; 00242 00249 TQString localPath() const; 00250 00251 //FIXME KDE4 deprecate this in favor of size(bool &hasSize) 00256 TDEIO::filesize_t size() const; 00257 00263 TDEIO::filesize_t size(bool &hasSize) const; 00264 00265 //FIXME KDE4 deprecate this in favor of time(unsigned int which, bool &hasSize) 00272 time_t time( unsigned int which ) const; 00273 00281 time_t time( unsigned int which, bool &hasTime ) const; 00282 00290 TQString timeString( unsigned int which = TDEIO::UDS_MODIFICATION_TIME ) const; 00291 00296 bool isLocalFile() const { return m_bIsLocalURL; } 00297 00303 const TQString& text() const { return m_strText; } 00304 00312 const TQString& name( bool lowerCase = false ) const { 00313 if ( !lowerCase ) 00314 return m_strName; 00315 else 00316 if ( m_strLowerCaseName.isNull() ) 00317 m_strLowerCaseName = m_strName.lower(); 00318 return m_strLowerCaseName; 00319 } 00320 00327 TQString mimetype() const; 00328 00335 TQString mimetypeFast() const; 00336 00343 KMimeType::Ptr mimeTypePtrFast(); 00344 00351 KMimeType::Ptr determineMimeType(); 00352 00358 KMimeType::Ptr mimeTypePtr() const { return m_pMimeType; } 00359 00360 bool isMimeTypeKnown() const; 00366 TQString mimeComment(); 00367 00373 TQString iconName(); 00374 00383 TQPixmap pixmap( int _size, int _state=0 ) const; 00384 00391 int overlays() const; 00392 00398 TQString getStatusBarInfo(); 00399 00408 TQString getToolTipText(int maxcount = 6); 00409 00416 bool acceptsDrops( ); 00417 00422 void run(); 00423 00429 const TDEIO::UDSEntry & entry() const { return m_entry; } 00430 00435 bool isMarked() const { return m_bMarked; } 00440 void mark() { m_bMarked = true; } 00445 void unmark() { m_bMarked = false; } 00446 00452 bool cmp( const KFileItem & item ); 00453 00487 virtual void setExtraData( const void *key, void *value ); 00488 00496 virtual const void * extraData( const void *key ) const; 00497 00505 virtual void * extraData( const void *key ); 00506 00511 virtual void removeExtraData( const void *key ); 00512 00517 void setMetaInfo( const KFileMetaInfo & info ); 00518 00526 void setFileMode( mode_t m ); 00527 00533 void setMimeType( const TQString& mimetype ); 00534 00540 const KFileMetaInfo & metaInfo(bool autoget = true, 00541 int what = KFileMetaInfo::Fastest) const; 00542 00550 void assign( const KFileItem & item ); 00551 00569 void setUDSEntry( const TDEIO::UDSEntry& entry, const KURL& url, 00570 bool determineMimeTypeOnDemand = false, 00571 bool urlIsDirectory = false ); 00572 00576 KFileItem& operator=( const KFileItem& ); 00577 00582 KURL mostLocalURL(bool &local) const; 00583 00585 00586 protected: 00591 void init( bool _determineMimeTypeOnDemand ); 00592 00598 void readUDSEntry( bool _urlIsDirectory ); 00599 00603 TQString parsePermissions( mode_t perm ) const; 00604 00605 private: 00609 TDEIO::UDSEntry m_entry; 00613 KURL m_url; 00614 00618 KURL m_listerURL; 00619 00623 TQString m_strName; 00624 00629 TQString m_strText; 00630 00634 mutable TQString m_user, m_group; 00635 00639 mutable TQString m_strLowerCaseName; 00640 00644 KMimeType::Ptr m_pMimeType; 00645 00649 mode_t m_fileMode; 00653 mode_t m_permissions; 00654 00658 bool m_bMarked:1; 00662 bool m_bLink:1; 00666 bool m_bIsLocalURL:1; 00667 00668 bool m_bMimeTypeKnown:1; 00669 00670 // Auto: check leading dot. 00671 enum { Auto, Hidden, Shown } m_hidden:3; 00672 00673 // For special case like link to dirs over FTP 00674 TQString m_guessedMimeType; 00675 mutable TQString m_access; 00676 TQMap<const void*, void*> m_extra; 00677 mutable KFileMetaInfo m_metaInfo; 00678 00679 enum { Modification = 0, Access = 1, Creation = 2, NumFlags = 3 }; 00680 mutable time_t m_time[3]; 00681 mutable TDEIO::filesize_t m_size; 00682 00683 protected: 00684 virtual void virtual_hook( int id, void* data ); 00685 private: 00686 class KFileItemPrivate; 00687 KFileItemPrivate * d; 00688 TDEIO_EXPORT friend TQDataStream & operator<< ( TQDataStream & s, const KFileItem & a ); 00689 TDEIO_EXPORT friend TQDataStream & operator>> ( TQDataStream & s, KFileItem & a ); 00690 }; 00691 00695 typedef TQPtrList<KFileItem> KFileItemList; 00696 00700 typedef TQPtrListIterator<KFileItem> KFileItemListIterator; 00701 00702 TDEIO_EXPORT TQDataStream & operator<< ( TQDataStream & s, const KFileItem & a ); 00703 TDEIO_EXPORT TQDataStream & operator>> ( TQDataStream & s, KFileItem & a ); 00704 00705 00706 #endif