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"