/* This file is part of the KDE project Copyright (C) 1999, 2000, 2001, 2002 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 __tdefileivi_h__ #define __tdefileivi_h__ #include <kiconview.h> #include <kiconloader.h> #include <libkonq_export.h> class KFileItem; class KonqIconViewWidget; class KIVDirectoryOverlay; class KIVFreeSpaceOverlay; /** * KFileIVI (short form of "Konq - File - IconViewItem") * is, as expected, an improved TDEIconViewItem, because * it represents a file. * All the information about the file is contained in the KFileItem * pointer. */ class LIBKONQ_EXPORT KFileIVI : public TDEIconViewItem { public: /** * Create an icon, within a qlistview, representing a file * @param iconview the parent widget * @param fileitem the file item created by KDirLister * @param size the icon size */ KFileIVI( KonqIconViewWidget *iconview, KFileItem* fileitem, int size ); virtual ~KFileIVI(); /** * Handler for return (or single/double click) on ONE icon. * Runs the file through KRun. */ virtual void returnPressed(); /** * @return the file item held by this instance */ KFileItem * item() const { return m_fileitem; } /** * @return true if dropping on this file is allowed * Overloads TQIconView::acceptDrop() */ virtual bool acceptDrop( const TQMimeSource *mime ) const; /** * Changes the icon for this item. * @param size the icon size (0 for default, otherwise size in pixels) * @param state the state of the icon (enum in TDEIcon) * @param recalc whether to update the layout of the icon view when setting the icon * @param redraw whether to redraw the item after setting the icon */ virtual void setIcon( int size, int state=TDEIcon::DefaultState, bool recalc=false, bool redraw=false); /** * Bypass @ref setIcon. This is for animated icons, you should use setIcon * in all other cases. * @param pixmap the pixmap to set - it SHOULD really have the right icon size! * @param recalc whether to update the layout of the icon view when setting the icon * @param redraw whether to redraw the item after setting the icon */ void setPixmapDirect( const TQPixmap & pixmap, bool recalc=false, bool redraw=false); /** * Notifies that all icon effects on thumbs should be invalidated, * e.g. because the effect settings have been changed. The thumb itself * is assumed to be still valid (use setThumbnailPixmap() instead * otherwise). * @param state the state of the icon (enum in TDEIcon) * @param redraw whether to redraw the item after setting the icon */ void invalidateThumb( int state, bool redraw = false ); /** * Our current thumbnail is not longer "current". * Called when the file contents have changed. */ void invalidateThumbnail(); bool isThumbnailInvalid() const; bool hasValidThumbnail() const { return isThumbnail() && !isThumbnailInvalid(); } /** * Return the current state of the icon * (TDEIcon::DefaultState, TDEIcon::ActiveState etc.) */ int state() const { return m_state; } /** * Return the theorical size of the icon */ int iconSize() const { return m_size; } /** * Set to true when this icon is 'cut' */ void setDisabled( bool disabled ); /** * Set this when the thumbnail was loaded */ void setThumbnailPixmap( const TQPixmap & pixmap ); /** * Set the icon to use the specified TDEIconEffect * See the docs for TDEIconEffect for details. */ void setEffect( /*int group,*/ int state ); /** * @return true if this item is a thumbnail */ bool isThumbnail() const { return m_bThumbnail; } /** * Sets an icon to be shown over the bottom left corner of the icon. * Currently used for directory overlays. * setOverlay(TQString::null) to remove icon. */ void setOverlay( const TQString & iconName); /** * Sets a progress bar to be shown on the right side of the icon. * Currently used for disk space overlays. * setOverlayProgressBar(-1) to remove progress bar. */ void setOverlayProgressBar( const int progress); /** * Redetermines the icon (useful if KFileItem might return another icon). * Does nothing with thumbnails */ virtual void refreshIcon( bool redraw ); virtual void setKey( const TQString &key ); /** * Paints this item. Takes care of using the normal or alpha * blending methods depending on the configuration. */ virtual void paintItem( TQPainter *p, const TQColorGroup &cg ); virtual bool move( int x, int y ); /** * Enable an animation on mouseover, if there is an available mng. * @param movieFileName the base name for the mng, e.g. "folder". * Nothing happens if there is no animation available. */ void setMouseOverAnimation( const TQString& movieFileName ); TQString mouseOverAnimation() const; /** * Return true if the icon _might_ have an animation available. * This doesn't mean the .mng exists (only determined when hovering on the * icon - and if it doesn't exist setMouseOverAnimation(TQString::null) is called), * and it doesn't mean that it's currently running either. */ bool hasAnimation() const; /** Return true if we are currently animating this icon */ bool isAnimated() const; void setAnimated( bool ); /** Called when the mouse is over the icon */ void setActive( bool active ); /** * Sets showing of directory overlays. Does nothing if this does * not represent a folder. */ KIVDirectoryOverlay* setShowDirectoryOverlay( bool ); bool showDirectoryOverlay( ); /** * Sets showing of free space overlays. Does nothing if this does * not represent a media device. */ KIVFreeSpaceOverlay* setShowFreeSpaceOverlay( bool ); bool showFreeSpaceOverlay( ); virtual int compare( TQIconViewItem *i ) const; protected: virtual void dropped( TQDropEvent *e, const TQValueList<TQIconDragItem> & ); /** * Contains the logic and code for painting the overlay pixmap. */ void paintOverlay( TQPainter *p ) const; /** * Contains the logic and code for painting the overlay progress bar. */ void paintOverlayProgressBar( TQPainter *p ) const; /** * Updates the colorgroup. */ TQColorGroup updateColors(const TQColorGroup &c) const; /** * Contains the logic and code for painting links. */ void paintFontUpdate( TQPainter *p ) const; private: /** You are not supposed to call this on a KFileIVI, from the outside, * it bypasses the icons cache */ virtual void setPixmap ( const TQPixmap & icon ) { TDEIconViewItem::setPixmap( icon ); } virtual void setPixmap ( const TQPixmap & icon, bool recalc, bool redraw = TRUE ) { TDEIconViewItem::setPixmap( icon, recalc, redraw ); } /** Check if a thumbnail will be generated and calc the size of the icon */ void updatePixmapSize(); int m_size, m_state; bool m_bDisabled; bool m_bThumbnail; /** Pointer to the file item in KDirLister's list */ KFileItem* m_fileitem; /** * Private data for KFileIVI * Implementation in tdefileivi.cc */ struct Private; Private *d; }; #endif