You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
371 lines
11 KiB
371 lines
11 KiB
/* This file is part of the KDE project
|
|
Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
|
|
Copyright (C) 2000, 2001, 2002 David Faure <david@mandrakesoft.com>
|
|
|
|
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 <kiconloader.h>
|
|
#include <kiconview.h>
|
|
#include <kurl.h>
|
|
#include <tqguardedptr.h>
|
|
#include <kfileitem.h>
|
|
#include <kio/jobclasses.h>
|
|
#include <libkonq_export.h>
|
|
|
|
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
|
|
TQ_PROPERTY( bool sortDirectoriesFirst READ sortDirectoriesFirst WRITE setSortDirectoriesFirst )
|
|
TQ_PROPERTY( TQRect iconArea READ iconArea WRITE setIconArea )
|
|
TQ_PROPERTY( int lineupMode READ lineupMode WRITE setLineupMode )
|
|
TQ_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 geometry 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<TQIconDragItem> & );
|
|
|
|
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 slotMovieStatus( int status );
|
|
void slotReenableAnimation();
|
|
|
|
void slotAboutToCreate(const TQPoint &pos, const TQValueList<KIO::CopyInfo> &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
|