/* This file is part of the KDE project Copyright (C) 1998, 1999 Torben Weis 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_iconview_h__ #define __konq_iconview_h__ #include #include #include #include #include #include #include #include class KonqPropsView; class KFileItem; class KDirLister; class TDEAction; class TDEToggleAction; class TDEActionMenu; class TQIconViewItem; class IconViewBrowserExtension; /** * The Icon View for konqueror. * The "Kfm" in the name stands for file management since it shows files :) */ class KonqKfmIconView : public KonqDirPart { friend class IconViewBrowserExtension; // to access m_pProps Q_OBJECT TQ_PROPERTY( bool supportsUndo READ supportsUndo ) TQ_PROPERTY( TQString viewMode READ viewMode WRITE setViewMode ) public: enum SortCriterion { NameCaseSensitive, NameCaseInsensitive, Size, Type, Date }; KonqKfmIconView( TQWidget *parentWidget, TQObject *parent, const char *name, const TQString& mode ); virtual ~KonqKfmIconView(); virtual const KFileItem * currentItem(); virtual KFileItemList selectedFileItems() {return m_pIconView->selectedFileItems();}; KonqIconViewWidget *iconViewWidget() const { return m_pIconView; } bool supportsUndo() const { return true; } void setViewMode( const TQString &mode ); TQString viewMode() const { return m_mode; } // "Cut" icons : disable those whose URL is in lst, enable the rest virtual void disableIcons( const KURL::List & lst ); // See KMimeTypeResolver void mimeTypeDeterminationFinished(); void determineIcon( KFileIVI * item ); int iconSize() { return m_pIconView->iconSize(); } public slots: void slotPreview( bool toggle ); void slotShowDirectoryOverlays(); void slotShowFreeSpaceOverlays(); void slotShowDot(); void slotSelect(); void slotUnselect(); void slotSelectAll(); void slotUnselectAll(); void slotInvertSelection(); void slotSortByNameCaseSensitive( bool toggle ); void slotSortByNameCaseInsensitive( bool toggle ); void slotSortBySize( bool toggle ); void slotSortByType( bool toggle ); void slotSortByDate( bool toggle ); void slotSortDescending(); void slotSortDirsFirst(); protected slots: // slots connected to QIconView void slotReturnPressed( TQIconViewItem *item ); void slotMouseButtonPressed(int, TQIconViewItem*, const TQPoint&); void slotMouseButtonClicked(int, TQIconViewItem*, const TQPoint&); void slotDoubleClicked(TQIconViewItem*); void slotContextMenuRequested(TQIconViewItem*, const TQPoint&); void slotOnItem( TQIconViewItem *item ); void slotOnViewport(); void slotSelectionChanged(); // Slot used for spring loading folders void slotDragHeld( TQIconViewItem *item ); void slotDragMove( bool accepted ); void slotDragEntered( bool accepted ); void slotDragLeft(); void slotDragFinished(); // slots connected to the directory lister - or to the kfind interface // They are reimplemented from KonqDirPart. virtual void slotStarted(); virtual void slotCanceled(); void slotCanceled( const KURL& url ); virtual void slotCompleted(); virtual void slotNewItems( const KFileItemList& ); virtual void slotDeleteItem( KFileItem * ); virtual void slotRefreshItems( const KFileItemList& ); virtual void slotClear(); virtual void slotRedirection( const KURL & ); virtual void slotDirectoryOverlayStart(); virtual void slotFreeSpaceOverlayStart(); virtual void slotDirectoryOverlayFinished(); virtual void slotFreeSpaceOverlayFinished(); /** * This is the 'real' finished slot, where we emit the completed() signal * after everything was done. */ void slotRenderingFinished(); // (Re)Draws m_pIconView's contents. Connected to m_pTimeoutRefreshTimer. void slotRefreshViewport(); // Connected to KonqDirPart void slotKFindOpened(); void slotKFindClosed(); protected: virtual bool openFile() { return true; } virtual bool doOpenURL( const KURL& ); virtual bool doCloseURL(); virtual void newIconSize( int size ); void setupSorting( SortCriterion criterion ); /** */ void setupSortKeys(); TQString makeSizeKey( KFileIVI *item ); /** The directory lister for this URL */ KDirLister* m_dirLister; /** * Set to true while the constructor is running. * @ref #initConfig needs to know about that. */ bool m_bInit:1; /** * Set to true while the dirlister is running, _if_ we asked it * explicitly (openURL). If it is auto-updating, this is not set to true. */ bool m_bLoading:1; /** * Set to true if we still need to emit completed() at some point * (after the loading is finished and after the visible icons have been * processed) */ bool m_bNeedEmitCompleted:1; /** * Set to true if slotCompleted needs to realign the icons */ bool m_bNeedAlign:1; bool m_bUpdateContentsPosAfterListing:1; bool m_bDirPropertiesChanged:1; /** * Set in doCloseURL and used in setViewMode to restart a preview * job interrupted when switching to IconView or MultiColumnView. * Hacks like this must be removed in KDE4! */ bool m_bPreviewRunningBeforeCloseURL:1; bool m_bNeedSetCurrentItem:1; KFileIVI * m_pEnsureVisible; TQStringList m_itemsToSelect; SortCriterion m_eSortCriterion; TDEToggleAction *m_paDotFiles; TDEToggleAction *m_paDirectoryOverlays; TDEToggleAction *m_paFreeSpaceOverlays; TDEToggleAction *m_paEnablePreviews; TQPtrList m_paOutstandingOverlays; TQPtrList m_paOutstandingFreeSpaceOverlays; TQTimer *m_paOutstandingOverlaysTimer; TQTimer *m_paOutstandingFreeSpaceOverlaysTimer; /* TDEToggleAction *m_paImagePreview; TDEToggleAction *m_paTextPreview; TDEToggleAction *m_paHTMLPreview;*/ TDEActionMenu *m_pamPreview; TQPtrList m_paPreviewPlugins; TDEActionMenu *m_pamSort; TDEAction *m_paSelect; TDEAction *m_paUnselect; TDEAction *m_paSelectAll; TDEAction *m_paUnselectAll; TDEAction *m_paInvertSelection; TDEToggleAction *m_paSortDirsFirst; KonqIconViewWidget *m_pIconView; TQTimer *m_pTimeoutRefreshTimer; TQPtrDict m_itemDict; // maps KFileItem * -> KFileIVI * KMimeTypeResolver * m_mimeTypeResolver; TQString m_mode; private: void showDirectoryOverlay(KFileIVI* item); void showFreeSpaceOverlay(KFileIVI* item); }; class IconViewBrowserExtension : public KonqDirPartBrowserExtension { Q_OBJECT friend class KonqKfmIconView; // so that it can emit our signals public: IconViewBrowserExtension( KonqKfmIconView *iconView ); virtual int xOffset(); virtual int yOffset(); public slots: // Those slots are automatically connected by the shell void reparseConfiguration(); void setSaveViewPropertiesLocally( bool value ); void setNameFilter( const TQString &nameFilter ); void refreshMimeTypes() { m_iconView->iconViewWidget()->refreshMimeTypes(); } void rename() { m_iconView->iconViewWidget()->renameSelectedItem(); } void cut() { m_iconView->iconViewWidget()->cutSelection(); } void copy() { m_iconView->iconViewWidget()->copySelection(); } void paste() { m_iconView->iconViewWidget()->pasteSelection(); } void pasteTo( const KURL &u ) { m_iconView->iconViewWidget()->paste( u ); } void trash(); void del() { KonqOperations::del(m_iconView->iconViewWidget(), KonqOperations::DEL, m_iconView->iconViewWidget()->selectedUrls()); } void properties(); void editMimeType(); // void print(); private: KonqKfmIconView *m_iconView; bool m_bSaveViewPropertiesLocally; }; class SpringLoadingManager : public QObject { Q_OBJECT private: SpringLoadingManager(); static SpringLoadingManager *s_self; public: static SpringLoadingManager &self(); static bool exists(); void springLoadTrigger(KonqKfmIconView *view, KFileItem *file, TQIconViewItem *item); void dragLeft(KonqKfmIconView *view); void dragEntered(KonqKfmIconView *view); void dragFinished(KonqKfmIconView *view); private slots: void finished(); private: KURL m_startURL; KParts::ReadOnlyPart *m_startPart; // Timer allowing to know the user wants to abort the spring loading // and go back to his start url (closing the opened window if needed) TQTimer m_endTimer; }; #endif