]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/kitemlistcontroller.cpp
Fix unwanted triggering of items
[dolphin.git] / src / kitemviews / kitemlistcontroller.cpp
1 /***************************************************************************
2 * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
3 * *
4 * Based on the Itemviews NG project from Trolltech Labs: *
5 * http://qt.gitorious.org/qt-labs/itemviews-ng *
6 * *
7 * This program is free software; you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation; either version 2 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * This program is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with this program; if not, write to the *
19 * Free Software Foundation, Inc., *
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
21 ***************************************************************************/
22
23 #include "kitemlistcontroller.h"
24
25 #include "kitemlistview.h"
26 #include "kitemlistselectionmanager.h"
27
28 #include <QEvent>
29 #include <QGraphicsSceneEvent>
30 #include <QTransform>
31
32 #include <KDebug>
33
34 KItemListController::KItemListController(QObject* parent) :
35 QObject(parent),
36 m_selectionBehavior(NoSelection),
37 m_model(0),
38 m_view(0),
39 m_selectionManager(new KItemListSelectionManager(this)),
40 m_pressedIndex(-1)
41 {
42 }
43
44 KItemListController::~KItemListController()
45 {
46 }
47
48 void KItemListController::setModel(KItemModelBase* model)
49 {
50 if (m_model == model) {
51 return;
52 }
53
54 KItemModelBase* oldModel = m_model;
55 m_model = model;
56
57 if (m_view) {
58 m_view->setModel(m_model);
59 }
60
61 emit modelChanged(m_model, oldModel);
62 }
63
64 KItemModelBase* KItemListController::model() const
65 {
66 return m_model;
67 }
68
69 KItemListSelectionManager* KItemListController::selectionManager() const
70 {
71 return m_selectionManager;
72 }
73
74 void KItemListController::setView(KItemListView* view)
75 {
76 if (m_view == view) {
77 return;
78 }
79
80 KItemListView* oldView = m_view;
81 m_view = view;
82
83 if (m_view) {
84 m_view->setController(this);
85 m_view->setModel(m_model);
86 }
87
88 emit viewChanged(m_view, oldView);
89 }
90
91 KItemListView* KItemListController::view() const
92 {
93 return m_view;
94 }
95
96 void KItemListController::setSelectionBehavior(SelectionBehavior behavior)
97 {
98 m_selectionBehavior = behavior;
99 }
100
101 KItemListController::SelectionBehavior KItemListController::selectionBehavior() const
102 {
103 return m_selectionBehavior;
104 }
105
106 bool KItemListController::showEvent(QShowEvent* event)
107 {
108 Q_UNUSED(event);
109 return false;
110 }
111
112 bool KItemListController::hideEvent(QHideEvent* event)
113 {
114 Q_UNUSED(event);
115 return false;
116 }
117
118 bool KItemListController::keyPressEvent(QKeyEvent* event)
119 {
120 Q_UNUSED(event);
121 return false;
122 }
123
124 bool KItemListController::inputMethodEvent(QInputMethodEvent* event)
125 {
126 Q_UNUSED(event);
127 return false;
128 }
129
130 bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform)
131 {
132 Q_UNUSED(event);
133 Q_UNUSED(transform);
134 const QPointF pos = transform.map(event->pos());
135 m_pressedIndex = m_view->itemAt(pos);
136 return false;
137 }
138
139 bool KItemListController::mouseMoveEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform)
140 {
141 Q_UNUSED(event);
142 Q_UNUSED(transform);
143 return false;
144 }
145
146 bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform)
147 {
148 if (m_view) {
149 const QPointF pos = transform.map(event->pos());
150 const int index = m_view->itemAt(pos);
151 if (index >= 0 && index == m_pressedIndex) {
152 bool emitItemClicked = true;
153 if (event->button() & Qt::LeftButton) {
154 if (m_view->isAboveExpansionToggle(index, pos)) {
155 emit itemExpansionToggleClicked(index);
156 emitItemClicked = false;
157 }
158 }
159
160 if (emitItemClicked) {
161 emit itemClicked(index, event->button());
162 }
163 }
164 }
165
166 m_pressedIndex = -1;
167 return false;
168 }
169
170 bool KItemListController::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform)
171 {
172 Q_UNUSED(event);
173 Q_UNUSED(transform);
174 return false;
175 }
176
177 bool KItemListController::dragEnterEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform)
178 {
179 Q_UNUSED(event);
180 Q_UNUSED(transform);
181 return false;
182 }
183
184 bool KItemListController::dragLeaveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform)
185 {
186 Q_UNUSED(event);
187 Q_UNUSED(transform);
188 return false;
189 }
190
191 bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform)
192 {
193 Q_UNUSED(event);
194 Q_UNUSED(transform);
195 return false;
196 }
197
198 bool KItemListController::dropEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform)
199 {
200 Q_UNUSED(event);
201 Q_UNUSED(transform);
202 return false;
203 }
204
205 bool KItemListController::hoverEnterEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform)
206 {
207 Q_UNUSED(event);
208 Q_UNUSED(transform);
209 return false;
210 }
211
212 bool KItemListController::hoverMoveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform)
213 {
214 Q_UNUSED(event);
215 Q_UNUSED(transform);
216 return false;
217 }
218
219 bool KItemListController::hoverLeaveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform)
220 {
221 Q_UNUSED(event);
222 Q_UNUSED(transform);
223 return false;
224 }
225
226 bool KItemListController::wheelEvent(QGraphicsSceneWheelEvent* event, const QTransform& transform)
227 {
228 Q_UNUSED(event);
229 Q_UNUSED(transform);
230 return false;
231 }
232
233 bool KItemListController::resizeEvent(QGraphicsSceneResizeEvent* event, const QTransform& transform)
234 {
235 Q_UNUSED(event);
236 Q_UNUSED(transform);
237 return false;
238 }
239
240 bool KItemListController::processEvent(QEvent* event, const QTransform& transform)
241 {
242 if (!event) {
243 return false;
244 }
245
246 switch (event->type()) {
247 // case QEvent::FocusIn:
248 // case QEvent::FocusOut:
249 // return focusEvent(static_cast<QFocusEvent*>(event));
250 case QEvent::KeyPress:
251 return keyPressEvent(static_cast<QKeyEvent*>(event));
252 case QEvent::InputMethod:
253 return inputMethodEvent(static_cast<QInputMethodEvent*>(event));
254 case QEvent::GraphicsSceneMousePress:
255 return mousePressEvent(static_cast<QGraphicsSceneMouseEvent*>(event), QTransform());
256 case QEvent::GraphicsSceneMouseMove:
257 return mouseMoveEvent(static_cast<QGraphicsSceneMouseEvent*>(event), QTransform());
258 case QEvent::GraphicsSceneMouseRelease:
259 return mouseReleaseEvent(static_cast<QGraphicsSceneMouseEvent*>(event), QTransform());
260 case QEvent::GraphicsSceneWheel:
261 return wheelEvent(static_cast<QGraphicsSceneWheelEvent*>(event), QTransform());
262 case QEvent::GraphicsSceneDragEnter:
263 return dragEnterEvent(static_cast<QGraphicsSceneDragDropEvent*>(event), QTransform());
264 case QEvent::GraphicsSceneDragLeave:
265 return dragLeaveEvent(static_cast<QGraphicsSceneDragDropEvent*>(event), QTransform());
266 case QEvent::GraphicsSceneDragMove:
267 return dragMoveEvent(static_cast<QGraphicsSceneDragDropEvent*>(event), QTransform());
268 case QEvent::GraphicsSceneDrop:
269 return dropEvent(static_cast<QGraphicsSceneDragDropEvent*>(event), QTransform());
270 case QEvent::GraphicsSceneHoverEnter:
271 return hoverEnterEvent(static_cast<QGraphicsSceneHoverEvent*>(event), QTransform());
272 case QEvent::GraphicsSceneHoverMove:
273 return hoverMoveEvent(static_cast<QGraphicsSceneHoverEvent*>(event), QTransform());
274 case QEvent::GraphicsSceneHoverLeave:
275 return hoverLeaveEvent(static_cast<QGraphicsSceneHoverEvent*>(event), QTransform());
276 case QEvent::GraphicsSceneResize:
277 return resizeEvent(static_cast<QGraphicsSceneResizeEvent*>(event), transform);
278 default:
279 break;
280 }
281
282 return false;
283 }
284
285 #include "kitemlistcontroller.moc"