File indexing completed on 2024-05-05 04:45:45

0001 // SPDX-License-Identifier: BSD-3-Clause
0002 // SPDX-FileCopyrightText: 2016 The Qt Company Ltd. <https://www.qt.io/licensing/>
0003 // SPDX-FileCopyrightText: 2022 Harald Sitter <sitter@kde.org>
0004 
0005 #include "droparea.h"
0006 
0007 #include <QDragEnterEvent>
0008 #include <QMimeData>
0009 
0010 #include <KUrlMimeData>
0011 
0012 DropArea::DropArea(QWidget *parent)
0013     : QLabel(parent)
0014 {
0015     setFrameStyle(QFrame::Sunken | QFrame::StyledPanel);
0016     setAlignment(Qt::AlignCenter);
0017     setAcceptDrops(true);
0018     setAutoFillBackground(true);
0019     clear();
0020 }
0021 
0022 void DropArea::dragEnterEvent(QDragEnterEvent *event)
0023 {
0024     setText(tr("<drop content>"));
0025     setBackgroundRole(QPalette::Highlight);
0026 
0027     event->acceptProposedAction();
0028     Q_EMIT changed(event->mimeData());
0029 }
0030 
0031 void DropArea::dragMoveEvent(QDragMoveEvent *event)
0032 {
0033     event->acceptProposedAction();
0034 }
0035 
0036 void DropArea::dropEvent(QDropEvent *event)
0037 {
0038     const QMimeData *mimeData = event->mimeData();
0039 
0040     if (mimeData->hasImage()) {
0041         setPixmap(qvariant_cast<QPixmap>(mimeData->imageData()));
0042     } else if (mimeData->hasHtml()) {
0043         setText(mimeData->html());
0044         setTextFormat(Qt::RichText);
0045     } else if (mimeData->hasText()) {
0046         setText(mimeData->text());
0047         setTextFormat(Qt::PlainText);
0048     } else if (mimeData->hasUrls()) {
0049         QList<QUrl> urlList = KUrlMimeData::urlsFromMimeData(mimeData);
0050         QString text;
0051         for (int i = 0; i < urlList.size() && i < 32; ++i) {
0052             text += urlList.at(i).path() + QLatin1Char('\n');
0053         }
0054         setText(text);
0055     } else {
0056         setText(tr("Cannot display data"));
0057     }
0058 
0059     setBackgroundRole(QPalette::Dark);
0060     event->acceptProposedAction();
0061 }
0062 
0063 void DropArea::dragLeaveEvent(QDragLeaveEvent *event)
0064 {
0065     clear();
0066     event->accept();
0067 }
0068 
0069 void DropArea::clear()
0070 {
0071     setText(tr("<drop content>"));
0072     setBackgroundRole(QPalette::Dark);
0073 
0074     Q_EMIT changed();
0075 }