diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-01-27 01:04:16 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2013-01-27 01:04:16 -0600 |
commit | 5159cd2beb2e87806a5b54e9991b7895285c9d3e (patch) | |
tree | 9b70e8be47a390f8f4d56ead812ab0c9dad88709 /tdeio/tdeio/tdefileitem.h | |
parent | c17cb900dcf52b8bd6dc300d4f103392900ec2b4 (diff) | |
download | tdelibs-5159cd2beb2e87806a5b54e9991b7895285c9d3e.tar.gz tdelibs-5159cd2beb2e87806a5b54e9991b7895285c9d3e.zip |
Rename a number of libraries and executables to avoid conflicts with KDE4
Diffstat (limited to 'tdeio/tdeio/tdefileitem.h')
-rw-r--r-- | tdeio/tdeio/tdefileitem.h | 671 |
1 files changed, 671 insertions, 0 deletions
diff --git a/tdeio/tdeio/tdefileitem.h b/tdeio/tdeio/tdefileitem.h new file mode 100644 index 000000000..7097d7bc5 --- /dev/null +++ b/tdeio/tdeio/tdefileitem.h @@ -0,0 +1,671 @@ +/* This file is part of the KDE project + Copyright (C) 1999 David Faure <faure@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __tdefileitem_h__ +#define __tdefileitem_h__ + +#include <tqstringlist.h> +#include <sys/stat.h> + +#include <tqptrlist.h> +#include <tdeio/global.h> +#include <kurl.h> +#include <kacl.h> +#include <kmimetype.h> +#include <tdefilemetainfo.h> + +#define KFILEITEM_HAS_ISWRITABLE // only used in libkonq/konq_iconviewwidget.cc, will be removed for 3.4 + +/** + * A KFileItem is a generic class to handle a file, local or remote. + * In particular, it makes it easier to handle the result of TDEIO::listDir + * (UDSEntry isn't very friendly to use). + * It includes many file attributes such as mimetype, icon, text, mode, link... + */ +class TDEIO_EXPORT KFileItem +{ +public: + enum { Unknown = (mode_t) - 1 }; + + /** + * Creates an item representing a file, from a UDSEntry. + * This is the preferred constructor when using TDEIO::listDir(). + * + * @param _entry the KIO entry used to get the file, contains info about it + * @param _url the file url + * @param _determineMimeTypeOnDemand specifies if the mimetype of the given + * URL should be determined immediately or on demand + * @param _urlIsDirectory specifies if the url is just the directory of the + * fileitem and the filename from the UDSEntry should be used. + */ + KFileItem( const TDEIO::UDSEntry& _entry, const KURL& _url, + bool _determineMimeTypeOnDemand = false, + bool _urlIsDirectory = false ); + + /** + * Creates an item representing a file, from all the necessary info for it. + * @param _mode the file mode (according to stat() (e.g. S_IFDIR...) + * Set to KFileItem::Unknown if unknown. For local files, KFileItem will use stat(). + * @param _permissions the access permissions + * If you set both the mode and the permissions, you save a ::stat() for + * local files. + * Set to KFileItem::Unknown if you don't know the mode or the permission. + * @param _url the file url + * + * @param _determineMimeTypeOnDemand specify if the mimetype of the given URL + * should be determined immediately or on demand + */ + KFileItem( mode_t _mode, mode_t _permissions, const KURL& _url, + bool _determineMimeTypeOnDemand = false ); + + /** + * Creates an item representing a file, for which the mimetype is already known. + * @param url the file url + * @param mimeType the name of the file's mimetype + * @param mode the mode (S_IFDIR...) + */ + KFileItem( const KURL &url, const TQString &mimeType, mode_t mode ); + + /** + * Copy constructor. Note that extra-data set via setExtraData() is not + * deeply copied -- just the pointers are copied. + */ + KFileItem( const KFileItem &item ); + + /** + * Destructs the KFileItem. Extra data set via setExtraData() + * is not deleted. + */ + virtual ~KFileItem(); + + /** + * Throw away and re-read (for local files) all information about the file. + * This is called when the _file_ changes. + */ + void refresh(); + + /** + * Re-reads mimetype information. + * This is called when the mimetype database changes. + */ + void refreshMimeType(); + + /** + * Returns the url of the file. + * @return the url of the file + */ + const KURL & url() const { return m_url; } + + /** + * Sets the item's URL. Do not call unless you know what you are doing! + * (used for example when an item got renamed). + * @param url the item's URL + */ + void setURL( const KURL &url ); + + /** + * Sets the item's name (i.e. the filename). + * This is automatically done by setURL, to set the name from the URL's fileName(). + * This method is provided for some special cases like relative paths as names (KFindPart) + * @param name the item's name + */ + void setName( const TQString &name ); + + /** + * Returns the permissions of the file (stat.st_mode containing only permissions). + * @return the permissions of the file + */ + mode_t permissions() const { return m_permissions; } + + /** + * Returns the access permissions for the file as a string. + * @return the access persmission as string + */ + TQString permissionsString() const; + + /** + * Tells if the file has extended access level information ( Posix ACL ) + * @return true if the file has extend ACL information or false if it hasn't + * @since 3.5 + */ + bool hasExtendedACL() const; + + /** + * Returns the access control list for the file. + * @return the access control list as a KACL + * @since 3.5 + */ + KACL ACL() const; + + /** + * Returns the default access control list for the directory. + * @return the default access control list as a KACL + * @since 3.5 + */ + KACL defaultACL() const; + + /** + * Returns the file type (stat.st_mode containing only S_IFDIR, S_IFLNK, ...). + * @return the file type + */ + mode_t mode() const { return m_fileMode; } + + /** + * Returns the owner of the file. + * @return the file's owner + */ + TQString user() const; + + /** + * Returns the group of the file. + * @return the file's group + */ + TQString group() const; + + /** + * Returns true if this item represents a link in the UNIX sense of + * a link. + * @return true if the file is a link + */ + bool isLink() const { return m_bLink; } + + /** + * Returns true if this item represents a directory. + * @return true if the item is a directory + */ + bool isDir() const; + + /** + * Returns true if this item represents a file (and not a a directory) + * @return true if the item is a file + */ + bool isFile() const { return !isDir(); } + + /** + * Checks whether the file or directory is readable. In some cases + * (remote files), we may return true even though it can't be read. + * @return true if the file can be read - more precisely, + * false if we know for sure it can't + */ + bool isReadable() const; + + /** + * Checks whether the file or directory is writable. In some cases + * (remote files), we may return true even though it can't be written to. + * @return true if the file or directory can be written to - more precisely, + * false if we know for sure it can't + * @since 3.4 + */ + bool isWritable() const; + + /** + * Checks whether the file is hidden. + * @return true if the file is hidden. + */ + bool isHidden() const; + + /** + * Returns the link destination if isLink() == true. + * @return the link destination. TQString::null if the item is not a link + */ + TQString linkDest() const; + + /** + * Returns the local path if isLocalFile() == true or the KIO item has + * a UDS_LOCAL_PATH atom. + * @return the item local path, or TQString::null if not known + * @since 3.4 + */ + TQString localPath() const; + + //FIXME KDE4 deprecate this in favor of size(bool &hasSize) + /** + * Returns the size of the file, if known. + * @return the file size, or 0 if not known + */ + TDEIO::filesize_t size() const; + + /** + * Returns the size of the file, if known, and sets @p hasSize to false if not known + * @param @hasSize This is set to true if the size is known, and false if not known + * @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. + * @param which UDS_MODIFICATION_TIME, UDS_ACCESS_TIME or UDS_CREATION_TIME + * @return the time asked for, (time_t)0 if not available + * @see timeString() + */ + time_t time( unsigned int which ) const; + + /** + * Requests the modification, access or creation time, depending on @p which. + * @param which UDS_MODIFICATION_TIME, UDS_ACCESS_TIME or UDS_CREATION_TIME + * @param hasTime This is set to true is the time is known, and false if not known + * @return the time asked for, (time_t)0 if not known/available + * @see timeString() + */ + time_t time( unsigned int which, bool &hasTime ) const; + + /** + * Requests the modification, access or creation time as a string, depending + * on @p which. + * @param which UDS_MODIFICATION_TIME, UDS_ACCESS_TIME or UDS_CREATION_TIME + * @returns a formatted string of the requested time, TQString::null if time is not known + * @see time + */ + TQString timeString( unsigned int which = TDEIO::UDS_MODIFICATION_TIME ) const; + + /** + * Returns true if the file is a local file. + * @return true if the file is local, false otherwise + */ + bool isLocalFile() const { return m_bIsLocalURL; } + + /** + * Returns the text of the file item. + * It's not exactly the filename since some decoding happens ('%2F'->'/'). + * @return the text of the file item + */ + const TQString& text() const { return m_strText; } + + /** + * Return the name of the file item (without a path). + * Similar to text(), but unencoded, i.e. the original name. + * @param lowerCase if true, the name will be returned in lower case, + * which is useful to speed up sorting by name, case insensitively. + * @return the file's name + */ + const TQString& name( bool lowerCase = false ) const { + if ( !lowerCase ) + return m_strName; + else + if ( m_strLowerCaseName.isNull() ) + m_strLowerCaseName = m_strName.lower(); + return m_strLowerCaseName; + } + + /** + * Returns the mimetype of the file item. + * If @p _determineMimeTypeOnDemand was used in the constructor, this will determine + * the mimetype first. Equivalent to determineMimeType()->name() + * @return the mime type of the file + */ + TQString mimetype() const; + + /** + * Returns the mimetype of the file item. + * If _determineMimeTypeOnDemand was used in the constructor, this will determine + * the mimetype first. + * @return the mime type + */ + KMimeType::Ptr determineMimeType(); + + /** + * Returns the currently known mimetype of the file item. + * This will not try to determine the mimetype if unknown. + * @return the known mime type + */ + KMimeType::Ptr mimeTypePtr() const { return m_pMimeType; } + + bool isMimeTypeKnown() const; + /** + * Returns the descriptive comment for this mime type, or + * the mime type itself if none is present. + * @return the mime type description, or the mime type itself + */ + TQString mimeComment(); + + /** + * Returns the full path name to the icon that represents + * this mime type. + * @return iconName the name of the file's icon + */ + TQString iconName(); + + /** + * Returns a pixmap representing the file. + * @param _size Size for the pixmap in pixels. Zero will return the + * globally configured default size. + * @param _state The state of the icon: KIcon::DefaultState, + * KIcon::ActiveState or KIcon::DisabledState. + * @return the pixmap + */ + TQPixmap pixmap( int _size, int _state=0 ) const; + + /** + * Returns the overlays (bitfield of KIcon::*Overlay flags) that are used + * for this item's pixmap. Overlays are used to show for example, whether + * a file can be modified. + * @return the overlays of the pixmap + */ + int overlays() const; + + /** + * Returns the string to be displayed in the statusbar, + * e.g. when the mouse is over this item + * @return the status bar information + */ + TQString getStatusBarInfo(); + + /** + * Returns the string to be displayed in the tool tip when the mouse + * is over this item. This may load a plugin to determine additional + * information specific to the mimetype of the file. + * + * @param maxcount the maximum number of entries shown + * @return the tool tip string + */ + TQString getToolTipText(int maxcount = 6); + + /** + * Returns true if files can be dropped over this item. + * Contrary to popular belief, not only dirs will return true :) + * Executables, .desktop files, will do so as well. + * @return true if you can drop files over the item + */ + bool acceptsDrops( ); + + /** + * Let's "KRun" this file ! + * (e.g. when file is clicked or double-clicked or return is pressed) + */ + void run(); + + /** + * Returns the UDS entry. Used by the tree view to access all details + * by position. + * @return the UDS entry + */ + const TDEIO::UDSEntry & entry() const { return m_entry; } + + /** + * Used when updating a directory. marked == seen when refreshing. + * @return true if the file item is marked + */ + bool isMarked() const { return m_bMarked; } + /** + * Marks the item. + * @see isMarked() + */ + void mark() { m_bMarked = true; } + /** + * Unmarks the item. + * @see isMarked() + */ + void unmark() { m_bMarked = false; } + + /** + * Somewhat like a comparison operator, but more explicit. + * @param item the item to compare + * @return true if all values are equal + */ + bool cmp( const KFileItem & item ); + + /** + * This allows to associate some "extra" data to a KFileItem. As one + * KFileItem can be used by several objects (often views) which all need + * to add some data, you have to use a key to reference your extra data + * within the KFileItem. + * + * That way a KFileItem can hold and provide access to all those views + * separately. + * + * I.e. a KFileIconView that associates a KFileIconViewItem (an item suitable + * for use with TQIconView) does + * + * \code + * tdefileItem->setExtraData( this, iconViewItem ); + * \endcode + * + * and can later access the iconViewItem by doing + * + * \code + * KFileIconViewItem *iconViewItem = static_cast<KFileIconViewItem*>( tdefileItem->extraData( this )); + * \endcode + * + * This is usually more efficient then having every view associate data to + * items by using a separate TQDict or TQMap. + * + * Note: you have to remove and destroy the data you associated yourself + * when you don't need it anymore! + * + * @param key the key of the extra data + * @param value the value of the extra data + * @see extraData + * @see removeExtraData + */ + virtual void setExtraData( const void *key, void *value ); + + /** + * Retrieves the extra data with the given @p key. + * @param key the key of the extra data + * @return the extra data associated to an item with @p key via + * setExtraData. 0L if nothing was associated with @p key. + * @see extraData + */ + virtual const void * extraData( const void *key ) const; + + /** + * Retrieves the extra data with the given @p key. + * @param key the key of the extra data + * @return the extra data associated to an item with @p key via + * setExtraData. 0L if nothing was associated with @p key. + * @see extraData + */ + virtual void * extraData( const void *key ); + + /** + * Removes the extra data associated with an item via @p key. + * @param key the key of the extra data to remove + */ + virtual void removeExtraData( const void *key ); + + /** + * Sets the metainfo of this item to @p info. + * @param info the new meta info + */ + void setMetaInfo( const KFileMetaInfo & info ); + + /** + * Sets the file type (stat.st_mode containing only S_IFDIR, S_IFLNK, ...). + * @param m the new file type + * @since 3.5.0 + * @todo Actually explain what this does -- does setting S_IFDIR + * mean the file type is set to Directory? + */ + void setFileMode( mode_t m ); + + /** + * Sets new mimetype for item + * @param mimetype the new mimetype + * @since 3.5.0 + */ + void setMimeType( const TQString& mimetype ); + + /** + * Returns the metainfo of this item. + * @param autoget if true, the metainfo will automatically be created + * @param what ignored + */ + const KFileMetaInfo & metaInfo(bool autoget = true, + int what = KFileMetaInfo::Fastest) const; + + /** + * Somewhat like an assignment operator, but more explicit. + * Note: extra-data set with setExtraData() is not copied, so be careful + * what you do! + * + * @param item the item to copy + */ + void assign( const KFileItem & item ); + + /** + * Reinitialize KFileItem with a new UDSEntry. + * + * Note: extra-data set with setExtraData() is not changed or deleted, so + * be careful what you do! + * + * KDirListerCache uses it to save new/delete calls by updating existing + * items that are otherwise not needed anymore. + * + * @param entry the UDSEntry to assign to this KFileItem + * @param url the file url + * @param determineMimeTypeOnDemand specifies if the mimetype of the given + * URL should be determined immediately or on demand + * @param urlIsDirectory specifies if the url is just the directory of the + * fileitem and the filename from the UDSEntry should be used. + * @since 3.4.1 + */ + void setUDSEntry( const TDEIO::UDSEntry& entry, const KURL& url, + bool determineMimeTypeOnDemand = false, + bool urlIsDirectory = false ); + + /** + * Assignment operator, calls assign() + */ + KFileItem& operator=( const KFileItem& ); + + /** + * Tries to give a local URL for this file item if possible. + * The given boolean indicates if the returned url is local or not. + */ + KURL mostLocalURL(bool &local) const; + + ///////////// + +protected: + /** + * Computes the text, mode, and mimetype from the UDSEntry + * Called by constructor, but can be called again later + */ + void init( bool _determineMimeTypeOnDemand ); + + /** + * Extracts the data from the UDSEntry member and updates the KFileItem + * accordingly. + * @since 3.4.1 + */ + void readUDSEntry( bool _urlIsDirectory ); + + /** + * Parses the given permission set and provides it for access() + */ + TQString parsePermissions( mode_t perm ) const; + +private: + /** + * We keep a copy of the UDSEntry since we need it for getStatusBarInfo + */ + TDEIO::UDSEntry m_entry; + /** + * The url of the file + */ + KURL m_url; + + /** + * The text for this item, i.e. the file name without path, + */ + TQString m_strName; + + /** + * The text for this item, i.e. the file name without path, decoded + * ('%%' becomes '%', '%2F' becomes '/') + */ + TQString m_strText; + + /** + * the user and group assigned to the file. + */ + mutable TQString m_user, m_group; + + /** + * The filename in lower case (to speed up sorting) + */ + mutable TQString m_strLowerCaseName; + + /** + * The mimetype of the file + */ + KMimeType::Ptr m_pMimeType; + + /** + * The file mode + */ + mode_t m_fileMode; + /** + * The permissions + */ + mode_t m_permissions; + + /** + * Marked : see mark() + */ + bool m_bMarked:1; + /** + * Whether the file is a link + */ + bool m_bLink:1; + /** + * True if local file + */ + bool m_bIsLocalURL:1; + + bool m_bMimeTypeKnown:1; + + // Auto: check leading dot. + enum { Auto, Hidden, Shown } m_hidden:3; + + // For special case like link to dirs over FTP + TQString m_guessedMimeType; + mutable TQString m_access; + TQMap<const void*, void*> m_extra; + mutable KFileMetaInfo m_metaInfo; + + enum { Modification = 0, Access = 1, Creation = 2, NumFlags = 3 }; + mutable time_t m_time[3]; + mutable TDEIO::filesize_t m_size; + +protected: + virtual void virtual_hook( int id, void* data ); +private: + class KFileItemPrivate; + KFileItemPrivate * d; + TDEIO_EXPORT friend TQDataStream & operator<< ( TQDataStream & s, const KFileItem & a ); + TDEIO_EXPORT friend TQDataStream & operator>> ( TQDataStream & s, KFileItem & a ); +}; + +/** + * List of KFileItems + */ +typedef TQPtrList<KFileItem> KFileItemList; + +/** + * Iterator for KFileItemList + */ +typedef TQPtrListIterator<KFileItem> KFileItemListIterator; + +TDEIO_EXPORT TQDataStream & operator<< ( TQDataStream & s, const KFileItem & a ); +TDEIO_EXPORT TQDataStream & operator>> ( TQDataStream & s, KFileItem & a ); + + +#endif |