File indexing completed on 2024-04-28 04:21:22

0001 // SPDX-FileCopyrightText: 2003-2020 Jesper K. Pedersen <blackie@kde.org>
0002 // SPDX-FileCopyrightText: 2022 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0003 //
0004 // SPDX-License-Identifier: GPL-2.0-or-later
0005 
0006 #include "SelectionInteraction.h"
0007 
0008 #include "ThumbnailFactory.h"
0009 #include "ThumbnailWidget.h"
0010 
0011 #include <MainWindow/Window.h>
0012 #include <kpabase/FileNameList.h>
0013 
0014 #include <QApplication>
0015 #include <QDrag>
0016 #include <QMimeData>
0017 #include <QMouseEvent>
0018 #include <QUrl>
0019 
0020 ThumbnailView::SelectionInteraction::SelectionInteraction(ThumbnailFactory *factory)
0021     : ThumbnailComponent(factory)
0022     , m_isMouseDragOperation(false)
0023     , m_dragInProgress(false)
0024 {
0025 }
0026 
0027 bool ThumbnailView::SelectionInteraction::mousePressEvent(QMouseEvent *event)
0028 {
0029     m_mousePressPos = event->pos();
0030     const DB::FileName fileName = widget()->mediaIdUnderCursor();
0031     m_isMouseDragOperation = widget()->isSelected(fileName) && !event->modifiers();
0032     return m_isMouseDragOperation;
0033 }
0034 
0035 bool ThumbnailView::SelectionInteraction::mouseMoveEvent(QMouseEvent *event)
0036 {
0037     if (m_isMouseDragOperation) {
0038         if ((m_mousePressPos - event->pos()).manhattanLength() > QApplication::startDragDistance())
0039             startDrag();
0040         return true;
0041     }
0042     return false;
0043 }
0044 
0045 void ThumbnailView::SelectionInteraction::startDrag()
0046 {
0047     m_dragInProgress = true;
0048     QList<QUrl> urls;
0049     const auto selection = widget()->selection(NoExpandCollapsedStacks);
0050     for (const DB::FileName &fileName : selection) {
0051         urls.append(QUrl::fromLocalFile(fileName.absolute()));
0052     }
0053     QDrag *drag = new QDrag(MainWindow::Window::theMainWindow());
0054     QMimeData *data = new QMimeData;
0055     data->setUrls(urls);
0056     drag->setMimeData(data);
0057 
0058     drag->exec(Qt::ActionMask);
0059 
0060     widget()->m_mouseHandler = &(widget()->m_mouseTrackingHandler);
0061     m_dragInProgress = false;
0062 }
0063 
0064 bool ThumbnailView::SelectionInteraction::isDragging() const
0065 {
0066     return m_dragInProgress;
0067 }
0068 
0069 // vi:expandtab:tabstop=4 shiftwidth=4:
0070 
0071 #include "moc_SelectionInteraction.cpp"