summaryrefslogtreecommitdiffstats
path: root/src/dolphiniconsview.h
blob: 9be210209e6d71e4226bb12c893b91c9b5cbfb15 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/***************************************************************************
 *   Copyright (C) 2006 by Peter Penz                                      *
 *   peter.penz@gmx.at                                                     *
 *                                                                         *
 *   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 DOLPHINICONSVIEW_H
#define DOLPHINICONSVIEW_H

#include <kfileiconview.h>
#include <qpixmap.h>
#include <kurl.h>
#include <itemeffectsmanager.h>

class DolphinView;

/**
 * @brief Represents the view, where each item is shown as an icon.
 *
 * It is also possible that instead of the icon a preview of the item
 * content is shown.
 *
 * @author Peter Penz
 */
class DolphinIconsView : public KFileIconView, public ItemEffectsManager
{
    Q_OBJECT

public:
    enum LayoutMode {
        Icons,
        Previews
    };

    DolphinIconsView(DolphinView *parent, LayoutMode layoutMode);

    virtual ~DolphinIconsView();

    void setLayoutMode(LayoutMode mode);
    LayoutMode layoutMode() const { return m_layoutMode; }

    /** @see ItemEffectsManager::updateItems */
    virtual void beginItemUpdates();

    /** @see ItemEffectsManager::updateItems */
    virtual void endItemUpdates();

    /**
     * Reads out the dolphin settings for the icons view and refreshs
     * the details view.
     */
    // TODO: Other view implementations use a similar interface. When using
    // Interview in Qt4 this method should be moved to a base class (currently
    // not possible due to having different base classes for the views).
    void refreshSettings();

    /** @see ItemEffectsManager::zoomIn() */
    virtual void zoomIn();

    /** @see ItemEffectsManager::zoomOut() */
    virtual void zoomOut();

    /** @see ItemEffectsManager::isZoomInPossible() */
    virtual bool isZoomInPossible() const;

    /** @see ItemEffectsManager::isZoomOutPossible() */
    virtual bool isZoomOutPossible() const;

public slots:
    /**
     * Bypass a layout issue in KFileIconView in combination with previews.
     * @see KFileIconView::arrangeItemsInGrid
     */
    virtual void arrangeItemsInGrid(bool updated = true);

signals:
    /**
     * Is send, if the details view should be activated. Usually an activation
     * is triggered by a mouse click.
     */
    void signalRequestActivation();

protected:
    /** @see ItemEffectsManager::setContextPixmap */
    virtual void setContextPixmap(void* context,
                                  const QPixmap& pixmap);

    /** @see ItemEffectsManager::contextPixmap */
    virtual const QPixmap* contextPixmap(void* context);

    /** @see ItemEffectsManager::firstContext */
    virtual void* firstContext();

    /** @see ItemEffectsManager::nextContext */
    virtual void* nextContext(void* context);

    /** @see ItemEffectsManager::contextFileInfo */
    virtual KFileItem* contextFileInfo(void* context);

    /** @see KFileIconView::contentsMousePressEvent */
    virtual void contentsMousePressEvent(QMouseEvent* event);

    /** @see KFileIconView::contentsMouseReleaseEvent */
    virtual void contentsMouseReleaseEvent(QMouseEvent* event);

    /** @see KFileIconView::drawBackground */
    virtual void drawBackground(QPainter* painter, const QRect& rect);

    /** @see KFileIconView::dragObject */
    virtual QDragObject* dragObject();

    /** @see KFileIconView::contentsDragEnterEvent */
    virtual void contentsDragEnterEvent(QDragEnterEvent* event);

    /** @see KFileIconView::contentsDragMoveEvent */
    virtual void contentsDragMoveEvent(QDragMoveEvent* event);

    /** @see KFileIconView::contentsDropEvent */
    virtual void contentsDropEvent(QDropEvent* event);

private slots:
    /** Is connected to the onItem-signal from KFileIconView. */
    void slotOnItem(QIconViewItem* item);

    /** Is connected to the onViewport-signal from KFileIconView. */
    void slotOnViewport();

    /**
     * Opens the context menu for the item \a item on the given
     * position \a pos.
     */
    void slotContextMenuRequested(QIconViewItem* item,
                                  const QPoint& pos);

    /** Renames the item \a item to the name \a name. */
    void slotItemRenamed(QIconViewItem* item,
                         const QString& name);

    void slotActivationUpdate();
    void slotUpdateDisabledItems();

private:
    int m_previewIconSize;
    LayoutMode m_layoutMode;
    DolphinView* m_dolphinView;

    /** Returns the increased icon size for the size \a size. */
    int increasedIconSize(int size) const;

    /** Returns the decreased icon size for the size \a size. */
    int decreasedIconSize(int size) const;
};

#endif