/* This file is part of the KDE project Copyright (C) 1998, 1999 Torben Weis Copyright (C) 2000, 2001, 2002 David Faure This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __konq_iconviewwidget_h__ #define __konq_iconviewwidget_h__ #include #include #include #include #include #include #include class KonqFMSettings; class KFileIVI; class KonqIconDrag; namespace KIO { class Job; } /** * A file-aware icon view, implementing drag'n'drop, KDE icon sizes, * user settings, animated icons... * Used by kdesktop and konq_iconview. * */ class LIBKONQ_EXPORT KonqIconViewWidget : public KIconView { Q_OBJECT Q_PROPERTY( bool sortDirectoriesFirst READ sortDirectoriesFirst WRITE setSortDirectoriesFirst ) Q_PROPERTY( TQRect iconArea READ iconArea WRITE setIconArea ) Q_PROPERTY( int lineupMode READ lineupMode WRITE setLineupMode ) Q_PROPERTY( TQString url READ urlString WRITE setNewURL ) friend class KFileIVI; public: enum LineupMode { LineupHorizontal=1, LineupVertical, LineupBoth }; /** * Constructor */ KonqIconViewWidget( TQWidget *parent = 0L, const char *name = 0L, WFlags f = 0, bool kdesktop = FALSE ); virtual ~KonqIconViewWidget(); /** * Read the configuration and apply it. * Call this in the inherited constructor with bInit=true, * and in some reparseConfiguration() slot with bInit=false. * Returns true if the font was changed (which means something has to * be done so that the icon's texts don't run into each other). * However Konq and KDesktop handle this differently. */ bool initConfig( bool bInit ); /** * Set the area that will be occupied by icons. It is still possible to * drag icons outside this area; this only applies to automatically placed * icons. */ void setIconArea( const TQRect &rect ); /** * Reimplemented to make the slotOnItem highlighting work. */ virtual void focusOutEvent( TQFocusEvent * /* ev */ ); /** * Returns the icon area. */ TQRect iconArea() const; /** * Set the lineup mode. This determines in which direction(s) icons are * moved when lineing them up. */ void setLineupMode(int mode); /** * Returns the lineup mode. */ int lineupMode() const; /** * Line up the icons to a regular grid. The outline of the grid is * specified by iconArea. The two length parameters are * gridX and gridY. */ void lineupIcons(); /** * Line up the icons to a regular grid horizontally or vertically. * * @param arrangement the arrangement to use (TQIconView::LeftToRight * for a horizontal arrangement and TQIconView::TopToBottom * for vertical) */ void lineupIcons( TQIconView::Arrangement arrangement ); /** * Sets the icons of all items, and stores the @p size * This doesn't touch thumbnails, except if @p stopImagePreviewFor is set. * Takes care of the grid, when changing the size. * * @param size size to use for the icons * @param stopImagePreviewFor set to a list of mimetypes which should be made normal again. * For instance "text/plain,image/wmf". * Can be set to "*" for "all mimetypes" and to "image/"+"*" for "all images". */ void setIcons( int size, const TQStringList& stopImagePreviewFor = TQStringList() ); /** * Called on databaseChanged */ void refreshMimeTypes(); int iconSize() { return m_size; } void calculateGridX(); /** * The horizontal distance between two icons * (whether or not a grid has been given to TQIconView) */ int gridXValue() const; /** * Calculate the tqgeometry of the fixed grid that is used to line up the * icons, for example when using the lineupIcons() method. * * @param x * @param y * @param dx Cell width * @param dy Cell height * @param nx Number of columns * @param ny Number of rows */ void gridValues( int* x, int* y, int* dx, int* dy, int* nx, int* ny ); /** * Start generating the previews. * @param ignored this parameter is probably ignored * @param force if true, all files are looked at. * Otherwise, only those which are not a thumbnail already. * * @todo figure out the parameter meanings again */ void startImagePreview( const TQStringList &ignored, bool force ); void stopImagePreview(); bool isPreviewRunning() const; // unused void setThumbnailPixmap( KFileIVI * item, const TQPixmap & pixmap ); void disableSoundPreviews(); void setURL ( const KURL & kurl ); // ### KDE4: make const const KURL & url() { return m_url; } TQString urlString() const { return m_url.url(); } void setRootItem ( const KFileItem * item ) { m_rootItem = item; } /** * Get list of selected KFileItems */ KFileItemList selectedFileItems(); void setItemColor( const TQColor &c ); TQColor itemColor() const; virtual void cutSelection(); virtual void copySelection(); virtual void pasteSelection(); virtual KURL::List selectedUrls(); // KDE4: remove virtual + add const enum UrlFlags { UserVisibleUrls = 0, MostLocalUrls = 1 }; KURL::List selectedUrls( UrlFlags flags ) const; // KDE4: merge with above, default is == UserVisibleUrls void paste( const KURL &url ); bool sortDirectoriesFirst() const; void setSortDirectoriesFirst( bool b ); void setCaseInsensitiveSort( bool b ); bool caseInsensitiveSort() const; /** * Cache of the dragged URLs over the icon view, used by KFileIVI */ const KURL::List & dragURLs() { return m_lstDragURLs; } /** * Reimplemented from QIconView */ virtual void clear(); /** * Reimplemented from QIconView */ virtual void takeItem( TQIconViewItem *item ); /** * Reimplemented from TQIconView to take into account iconArea. */ virtual void insertInGrid( TQIconViewItem *item ); /** * Reimplemented from TQIconView to update the gridX */ virtual void setItemTextPos( ItemTextPos pos ); /** * Give feedback when item is activated. */ virtual void visualActivate(TQIconViewItem *); bool isDesktop() const { return m_bDesktop; } /** * Provided for KDesktop. */ virtual void setWallpaper(const KURL&) { } bool maySetWallpaper(); void setMaySetWallpaper(bool b); void disableIcons( const KURL::List & lst ); TQString iconPositionGroupPrefix() const { return m_iconPositionGroupPrefix; } TQString dotDirectoryPath() const { return m_dotDirectoryPath; } void setPreviewSettings(const TQStringList& mimeTypes); const TQStringList& previewSettings(); void setNewURL( const TQString& url ); public slots: /** * Checks the new selection and emits enableAction() signals */ virtual void slotSelectionChanged(); void slotSaveIconPositions(); void renameSelectedItem(); void renameCurrentItem(); void slotToolTipPreview( const KFileItem *, const TQPixmap & ); // ### unused - remove for KDE4 void slotToolTipPreviewResult() ; // ### unused - remove for KDE4 signals: /** * For cut/copy/paste/move/delete (see kparts/browserextension.h) */ void enableAction( const char * name, bool enabled ); void dropped(); void imagePreviewFinished(); void incIconSize(); void decIconSize(); /** * We need to track drag in icon views for the spring loading folders */ void dragEntered( bool accepted ); void dragLeft(); void dragMove( bool accepted ); /** * Emited after the dropped() event. This way we know when the * drag'n'drop is really finished. */ void dragFinished(); protected slots: virtual void slotDropped( TQDropEvent *e, const TQValueList & ); void slotItemRenamed(TQIconViewItem *item, const TQString &name); void slotIconChanged(int); void slotOnItem(TQIconViewItem *); void slotOnViewport(); void slotStartSoundPreview(); void slotPreview(const KFileItem *, const TQPixmap &); void slotPreviewResult(); void slotMovieUpdate( const TQRect& rect ); void slotMovietqStatus( int status ); void slotReenableAnimation(); void slotAboutToCreate(const TQPoint &pos, const TQValueList &files); void doubleClickTimeout(); protected: virtual TQDragObject *dragObject(); KonqIconDrag *konqDragObject( TQWidget * dragSource = 0L ); bool mimeTypeMatch( const TQString& mimeType, const TQStringList& mimeList ) const; virtual void drawBackground( TQPainter *p, const TQRect &r ); /** * r is the rectangle which you want to paint from the background. * pt is the upper left point in the painter device where you want to paint * the rectangle r. */ virtual void drawBackground( TQPainter *p, const TQRect &r, const TQPoint &pt ); virtual void contentsDragEnterEvent( TQDragEnterEvent *e ); virtual void contentsDragLeaveEvent( TQDragLeaveEvent *e ); virtual void contentsDragMoveEvent( TQDragMoveEvent *e ); virtual void contentsDropEvent( TQDropEvent *e ); virtual void contentsMousePressEvent( TQMouseEvent *e ); virtual void contentsMouseReleaseEvent ( TQMouseEvent * e ); virtual void contentsMouseMoveEvent( TQMouseEvent *e ); virtual void backgroundPixmapChange( const TQPixmap & ); virtual void wheelEvent( TQWheelEvent* ); virtual void leaveEvent( TQEvent *e ); void readAnimatedIconsConfig(); void mousePressChangeValue(); bool boostPreview() const; int previewIconSize( int size ) const; int largestPreviewIconSize( int size ) const; bool canPreview( KFileItem* item ); void updatePreviewMimeTypes(); private: KURL m_url; const KFileItem * m_rootItem; KURL::List m_lstDragURLs; int m_size; /** Konqueror settings */ KonqFMSettings * m_pSettings; bool m_bMousePressed; TQPoint m_mousePos; TQColor iColor; bool m_bSortDirsFirst; TQString m_iconPositionGroupPrefix; TQString m_dotDirectoryPath; int m_LineupMode; TQRect m_IconRect; bool m_bDesktop; bool m_bSetGridX; private: struct KonqIconViewWidgetPrivate *d; }; #endif