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
|
/***************************************************************************
* Copyright (C) 2011 by Peter Penz <[email protected]> *
* *
* Based on the Itemviews NG project from Trolltech Labs: *
* http://qt.gitorious.org/qt-labs/itemviews-ng *
* *
* 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 KITEMLISTCONTROLLER_H
#define KITEMLISTCONTROLLER_H
#include <libdolphin_export.h>
#include <QObject>
class KItemModelBase;
class KItemListSelectionManager;
class KItemListView;
class QGraphicsSceneHoverEvent;
class QGraphicsSceneDragDropEvent;
class QGraphicsSceneMouseEvent;
class QGraphicsSceneResizeEvent;
class QGraphicsSceneWheelEvent;
class QHideEvent;
class QInputMethodEvent;
class QKeyEvent;
class QShowEvent;
class QTransform;
/**
* @brief Controls the view, model and selection of an item-list.
*
* For a working item-list it is mandatory to set a compatible view and model
* with KItemListController::setView() and KItemListController::setModel().
*
* @see KItemListView
* @see KItemModelBase
* @see KItemListSelectionManager
*/
class LIBDOLPHINPRIVATE_EXPORT KItemListController : public QObject
{
Q_OBJECT
Q_ENUMS(SelectionBehavior)
Q_PROPERTY(KItemModelBase* model READ model WRITE setModel)
Q_PROPERTY(KItemListView *view READ view WRITE setView)
Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior WRITE setSelectionBehavior)
public:
enum SelectionBehavior {
NoSelection,
SingleSelection,
MultiSelection
};
KItemListController(QObject* parent = 0);
virtual ~KItemListController();
void setModel(KItemModelBase* model);
KItemModelBase* model() const;
void setView(KItemListView* view);
KItemListView* view() const;
KItemListSelectionManager* selectionManager() const;
void setSelectionBehavior(SelectionBehavior behavior);
SelectionBehavior selectionBehavior() const;
virtual bool showEvent(QShowEvent* event);
virtual bool hideEvent(QHideEvent* event);
virtual bool keyPressEvent(QKeyEvent* event);
virtual bool inputMethodEvent(QInputMethodEvent* event);
virtual bool mousePressEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
virtual bool mouseMoveEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
virtual bool mouseReleaseEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
virtual bool mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform);
virtual bool dragEnterEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
virtual bool dragLeaveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
virtual bool dragMoveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
virtual bool dropEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform);
virtual bool hoverEnterEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
virtual bool hoverMoveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
virtual bool hoverLeaveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform);
virtual bool wheelEvent(QGraphicsSceneWheelEvent* event, const QTransform& transform);
virtual bool resizeEvent(QGraphicsSceneResizeEvent* event, const QTransform& transform);
virtual bool processEvent(QEvent* event, const QTransform& transform);
signals:
void itemClicked(int index, Qt::MouseButton button);
/**
* Is emitted if the item with the index \p index gets hovered.
*/
void itemHovered(int index);
/**
* Is emitted if the item with the index \p index gets unhovered.
* It is assured that the signal itemHovered() for this index
* has been emitted before.
*/
void itemUnhovered(int index);
void itemExpansionToggleClicked(int index);
void modelChanged(KItemModelBase* current, KItemModelBase* previous);
void viewChanged(KItemListView* current, KItemListView* previous);
private slots:
void slotViewOffsetChanged(qreal current, qreal previous);
/**
* Is invoked when the rubberband boundaries have been changed and will select
* all items that are touched by the rubberband.
*/
void slotRubberBandChanged();
private:
SelectionBehavior m_selectionBehavior;
KItemModelBase* m_model;
KItemListView* m_view;
KItemListSelectionManager* m_selectionManager;
int m_pressedIndex;
};
#endif
|