summaryrefslogtreecommitdiffstats
path: root/konqueror/iconview/konq_iconview.h
diff options
context:
space:
mode:
Diffstat (limited to 'konqueror/iconview/konq_iconview.h')
-rw-r--r--konqueror/iconview/konq_iconview.h299
1 files changed, 299 insertions, 0 deletions
diff --git a/konqueror/iconview/konq_iconview.h b/konqueror/iconview/konq_iconview.h
new file mode 100644
index 000000000..7563fedcd
--- /dev/null
+++ b/konqueror/iconview/konq_iconview.h
@@ -0,0 +1,299 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Torben Weis <weis@kde.org>
+
+ 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 <kparts/browserextension.h>
+#include <konq_iconviewwidget.h>
+#include <konq_operations.h>
+#include <konq_dirpart.h>
+#include <kmimetyperesolver.h>
+#include <qptrdict.h>
+#include <qptrlist.h>
+#include <kfileivi.h>
+
+class KonqPropsView;
+class KFileItem;
+class KDirLister;
+class KAction;
+class KToggleAction;
+class KActionMenu;
+class QIconViewItem;
+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
+ Q_PROPERTY( bool supportsUndo READ supportsUndo )
+ Q_PROPERTY( QString viewMode READ viewMode WRITE setViewMode )
+public:
+
+ enum SortCriterion { NameCaseSensitive, NameCaseInsensitive, Size, Type, Date };
+
+ KonqKfmIconView( QWidget *parentWidget, QObject *parent, const char *name, const QString& 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 QString &mode );
+ QString 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 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( QIconViewItem *item );
+ void slotMouseButtonPressed(int, QIconViewItem*, const QPoint&);
+ void slotMouseButtonClicked(int, QIconViewItem*, const QPoint&);
+ void slotContextMenuRequested(QIconViewItem*, const QPoint&);
+ void slotOnItem( QIconViewItem *item );
+ void slotOnViewport();
+ void slotSelectionChanged();
+
+ // Slot used for spring loading folders
+ void slotDragHeld( QIconViewItem *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 slotDirectoryOverlayFinished();
+
+ /**
+ * 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();
+
+ QString 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;
+
+ QStringList m_itemsToSelect;
+
+ SortCriterion m_eSortCriterion;
+
+ KToggleAction *m_paDotFiles;
+ KToggleAction *m_paDirectoryOverlays;
+ KToggleAction *m_paEnablePreviews;
+ QPtrList<KFileIVI> m_paOutstandingOverlays;
+ QTimer *m_paOutstandingOverlaysTimer;
+/* KToggleAction *m_paImagePreview;
+ KToggleAction *m_paTextPreview;
+ KToggleAction *m_paHTMLPreview;*/
+ KActionMenu *m_pamPreview;
+ QPtrList<KToggleAction> m_paPreviewPlugins;
+ KActionMenu *m_pamSort;
+
+ KAction *m_paSelect;
+ KAction *m_paUnselect;
+ KAction *m_paSelectAll;
+ KAction *m_paUnselectAll;
+ KAction *m_paInvertSelection;
+
+ KToggleAction *m_paSortDirsFirst;
+
+ KonqIconViewWidget *m_pIconView;
+
+ QTimer *m_pTimeoutRefreshTimer;
+
+ QPtrDict<KFileIVI> m_itemDict; // maps KFileItem * -> KFileIVI *
+
+ KMimeTypeResolver<KFileIVI,KonqKfmIconView> * m_mimeTypeResolver;
+
+ QString m_mode;
+
+ private:
+ void showDirectoryOverlay(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 QString &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,
+ QIconViewItem *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)
+ QTimer m_endTimer;
+};
+
+
+#endif