1/* This file is part of the KDE project
2 Copyright (C) 2007 Kevin Ottens <ervin@kde.org>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License version 2 as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details.
12
13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 Boston, MA 02110-1301, USA.
17
18*/
19#ifndef KFILEPLACESVIEW_H
20#define KFILEPLACESVIEW_H
21
22#include <kfile_export.h>
23
24#include <QtGui/QListView>
25
26#include <kurl.h>
27
28class QResizeEvent;
29class QContextMenuEvent;
30
31/**
32 * This class allows to display a KFilePlacesModel.
33 */
34class KFILE_EXPORT KFilePlacesView : public QListView
35{
36 Q_OBJECT
37public:
38 KFilePlacesView(QWidget *parent = 0);
39 ~KFilePlacesView();
40
41 /**
42 * If \a enabled is true, it is allowed dropping items
43 * above a place for e. g. copy or move operations. The application
44 * has to take care itself to perform the operation
45 * (see KFilePlacesView::urlsDropped()). If
46 * \a enabled is false, it is only possible adding items
47 * as additional place. Per default dropping on a place is
48 * disabled.
49 */
50 void setDropOnPlaceEnabled(bool enabled);
51 bool isDropOnPlaceEnabled() const;
52
53 /**
54 * If \a enabled is true (the default), items will automatically resize
55 * themselves to fill the view.
56 *
57 * @since 4.1
58 */
59 void setAutoResizeItemsEnabled(bool enabled);
60 bool isAutoResizeItemsEnabled() const;
61
62public Q_SLOTS:
63 void setUrl(const KUrl &url);
64 void setShowAll(bool showAll);
65 virtual QSize sizeHint() const;
66 virtual void setModel(QAbstractItemModel *model);
67
68protected:
69 virtual void keyPressEvent(QKeyEvent *event);
70 virtual void contextMenuEvent(QContextMenuEvent *event);
71 virtual void resizeEvent(QResizeEvent *event);
72 virtual void showEvent(QShowEvent *event);
73 virtual void hideEvent(QHideEvent *event);
74 virtual void dragEnterEvent(QDragEnterEvent *event);
75 virtual void dragLeaveEvent(QDragLeaveEvent *event);
76 virtual void dragMoveEvent(QDragMoveEvent *event);
77 virtual void dropEvent(QDropEvent *event);
78 virtual void paintEvent(QPaintEvent *event);
79
80protected Q_SLOTS:
81 void rowsInserted(const QModelIndex &parent, int start, int end);
82 void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
83
84Q_SIGNALS:
85 void urlChanged(const KUrl &url);
86
87 /**
88 * Is emitted if items are dropped on the place \a dest.
89 * The application has to take care itself about performing the
90 * corresponding action like copying or moving.
91 */
92 void urlsDropped(const KUrl &dest, QDropEvent *event, QWidget *parent);
93
94private:
95 Q_PRIVATE_SLOT(d, void adaptItemSize())
96 Q_PRIVATE_SLOT(d, void _k_placeClicked(const QModelIndex &))
97 Q_PRIVATE_SLOT(d, void _k_placeEntered(const QModelIndex &))
98 Q_PRIVATE_SLOT(d, void _k_placeLeft(const QModelIndex &))
99 Q_PRIVATE_SLOT(d, void _k_storageSetupDone(const QModelIndex &, bool))
100 Q_PRIVATE_SLOT(d, void _k_adaptItemsUpdate(qreal))
101 Q_PRIVATE_SLOT(d, void _k_itemAppearUpdate(qreal))
102 Q_PRIVATE_SLOT(d, void _k_itemDisappearUpdate(qreal))
103 Q_PRIVATE_SLOT(d, void _k_enableSmoothItemResizing())
104 Q_PRIVATE_SLOT(d, void _k_trashUpdated(KJob *))
105 Q_PRIVATE_SLOT(d, void _k_capacityBarFadeValueChanged())
106 Q_PRIVATE_SLOT(d, void _k_triggerDevicePolling())
107
108 class Private;
109 Private * const d;
110 friend class Private;
111};
112
113#endif
114