File indexing completed on 2025-02-16 07:34:50
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 }