Warning, file /plasma/milou/lib/draghelper.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /*************************************************************************** 0002 * SPDX-FileCopyrightText: 2013 Eike Hein <hein@kde.org> 0003 * SPDX-License-Identifier: GPL-2.0-or-later 0004 ***************************************************************************/ 0005 0006 #include "draghelper.h" 0007 0008 #include <QApplication> 0009 #include <QDrag> 0010 #include <QMimeData> 0011 #include <QQuickItem> 0012 0013 using namespace Milou; 0014 0015 DragHelper::DragHelper(QObject *parent) 0016 : QObject(parent) 0017 , m_dragIconSize(32) 0018 { 0019 } 0020 0021 DragHelper::~DragHelper() 0022 { 0023 } 0024 0025 int DragHelper::dragIconSize() const 0026 { 0027 return m_dragIconSize; 0028 } 0029 0030 void DragHelper::setDragIconSize(int size) 0031 { 0032 if (m_dragIconSize != size) { 0033 m_dragIconSize = size; 0034 0035 Q_EMIT dragIconSizeChanged(); 0036 } 0037 } 0038 0039 bool DragHelper::isDrag(int oldX, int oldY, int newX, int newY) const 0040 { 0041 return ((QPoint(oldX, oldY) - QPoint(newX, newY)).manhattanLength() >= QApplication::startDragDistance()); 0042 } 0043 0044 void DragHelper::startDrag(QQuickItem *item, QMimeData *mimeData, const QIcon &icon) 0045 { 0046 // This allows the caller to return, making sure we don't crash if 0047 // the caller is destroyed mid-drag 0048 // clang-format off 0049 QMetaObject::invokeMethod(this, "doDrag", Qt::QueuedConnection, 0050 Q_ARG(QQuickItem*, item), Q_ARG(QMimeData*, mimeData), Q_ARG(QIcon, icon)); 0051 // clang-format on 0052 } 0053 0054 void DragHelper::startDrag(QQuickItem *item, QMimeData *mimeData, const QString &iconName) 0055 { 0056 startDrag(item, mimeData, QIcon::fromTheme(iconName)); 0057 } 0058 0059 void DragHelper::doDrag(QQuickItem *item, QMimeData *mimeData, const QIcon &icon) 0060 { 0061 QDrag *drag = new QDrag(item); 0062 drag->setMimeData(mimeData); 0063 0064 if (!icon.isNull()) { 0065 drag->setPixmap(icon.pixmap(m_dragIconSize, m_dragIconSize)); 0066 } 0067 0068 drag->exec(); 0069 0070 Q_EMIT dropped(); 0071 }