┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kitemlistcontroller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/kitemviews/kitemlistcontroller.cpp')
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp281
1 files changed, 281 insertions, 0 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
new file mode 100644
index 000000000..b709e5606
--- /dev/null
+++ b/src/kitemviews/kitemlistcontroller.cpp
@@ -0,0 +1,281 @@
+/***************************************************************************
+ * 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 *
+ ***************************************************************************/
+
+#include "kitemlistcontroller.h"
+
+#include "kitemlistview.h"
+#include "kitemlistselectionmanager.h"
+
+#include <QEvent>
+#include <QGraphicsSceneEvent>
+#include <QTransform>
+
+#include <KDebug>
+
+KItemListController::KItemListController(QObject* parent) :
+ QObject(parent),
+ m_selectionBehavior(NoSelection),
+ m_model(0),
+ m_view(0),
+ m_selectionManager(new KItemListSelectionManager(this))
+{
+}
+
+KItemListController::~KItemListController()
+{
+}
+
+void KItemListController::setModel(KItemModelBase* model)
+{
+ if (m_model == model) {
+ return;
+ }
+
+ KItemModelBase* oldModel = m_model;
+ m_model = model;
+
+ if (m_view) {
+ m_view->setModel(m_model);
+ }
+
+ emit modelChanged(m_model, oldModel);
+}
+
+KItemModelBase* KItemListController::model() const
+{
+ return m_model;
+}
+
+KItemListSelectionManager* KItemListController::selectionManager() const
+{
+ return m_selectionManager;
+}
+
+void KItemListController::setView(KItemListView* view)
+{
+ if (m_view == view) {
+ return;
+ }
+
+ KItemListView* oldView = m_view;
+ m_view = view;
+
+ if (m_view) {
+ m_view->setController(this);
+ m_view->setModel(m_model);
+ }
+
+ emit viewChanged(m_view, oldView);
+}
+
+KItemListView* KItemListController::view() const
+{
+ return m_view;
+}
+
+void KItemListController::setSelectionBehavior(SelectionBehavior behavior)
+{
+ m_selectionBehavior = behavior;
+}
+
+KItemListController::SelectionBehavior KItemListController::selectionBehavior() const
+{
+ return m_selectionBehavior;
+}
+
+bool KItemListController::showEvent(QShowEvent* event)
+{
+ Q_UNUSED(event);
+ return false;
+}
+
+bool KItemListController::hideEvent(QHideEvent* event)
+{
+ Q_UNUSED(event);
+ return false;
+}
+
+bool KItemListController::keyPressEvent(QKeyEvent* event)
+{
+ Q_UNUSED(event);
+ return false;
+}
+
+bool KItemListController::inputMethodEvent(QInputMethodEvent* event)
+{
+ Q_UNUSED(event);
+ return false;
+}
+
+bool KItemListController::mousePressEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::mouseMoveEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform)
+{
+ if (m_view) {
+ const QPointF pos = transform.map(event->pos());
+ const int index = m_view->itemAt(pos);
+ if (index >= 0) {
+ bool emitItemClicked = true;
+ if (event->button() & Qt::LeftButton) {
+ if (m_view->isAboveExpansionToggle(index, pos)) {
+ emit itemExpansionToggleClicked(index);
+ emitItemClicked = false;
+ }
+ }
+
+ if (emitItemClicked) {
+ emit itemClicked(index, event->button());
+ }
+ }
+ }
+
+ return false;
+}
+
+bool KItemListController::mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::dragEnterEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::dragLeaveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::dropEvent(QGraphicsSceneDragDropEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::hoverEnterEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::hoverMoveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::hoverLeaveEvent(QGraphicsSceneHoverEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::wheelEvent(QGraphicsSceneWheelEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::resizeEvent(QGraphicsSceneResizeEvent* event, const QTransform& transform)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(transform);
+ return false;
+}
+
+bool KItemListController::processEvent(QEvent* event, const QTransform& transform)
+{
+ if (!event) {
+ return false;
+ }
+
+ switch (event->type()) {
+// case QEvent::FocusIn:
+// case QEvent::FocusOut:
+// return focusEvent(static_cast<QFocusEvent*>(event));
+ case QEvent::KeyPress:
+ return keyPressEvent(static_cast<QKeyEvent*>(event));
+ case QEvent::InputMethod:
+ return inputMethodEvent(static_cast<QInputMethodEvent*>(event));
+ case QEvent::GraphicsSceneMousePress:
+ return mousePressEvent(static_cast<QGraphicsSceneMouseEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneMouseMove:
+ return mouseMoveEvent(static_cast<QGraphicsSceneMouseEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneMouseRelease:
+ return mouseReleaseEvent(static_cast<QGraphicsSceneMouseEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneWheel:
+ return wheelEvent(static_cast<QGraphicsSceneWheelEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneDragEnter:
+ return dragEnterEvent(static_cast<QGraphicsSceneDragDropEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneDragLeave:
+ return dragLeaveEvent(static_cast<QGraphicsSceneDragDropEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneDragMove:
+ return dragMoveEvent(static_cast<QGraphicsSceneDragDropEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneDrop:
+ return dropEvent(static_cast<QGraphicsSceneDragDropEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneHoverEnter:
+ return hoverEnterEvent(static_cast<QGraphicsSceneHoverEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneHoverMove:
+ return hoverMoveEvent(static_cast<QGraphicsSceneHoverEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneHoverLeave:
+ return hoverLeaveEvent(static_cast<QGraphicsSceneHoverEvent*>(event), QTransform());
+ case QEvent::GraphicsSceneResize:
+ return resizeEvent(static_cast<QGraphicsSceneResizeEvent*>(event), transform);
+ default:
+ break;
+ }
+
+ return false;
+}
+
+#include "kitemlistcontroller.moc"