2020-12-09 10:09:29 +08:00
|
|
|
/*
|
|
|
|
|
* Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
|
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
|
* the Free Software Foundation; either version 3, or (at your option)
|
|
|
|
|
* any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
2020-08-28 17:56:42 +08:00
|
|
|
#include "pasteitem.h"
|
|
|
|
|
|
2020-08-31 15:29:35 +08:00
|
|
|
#include <QClipboard>
|
|
|
|
|
#include <QApplication>
|
2020-09-10 19:13:18 +08:00
|
|
|
#include <QVBoxLayout>
|
2020-09-11 17:37:05 +08:00
|
|
|
#include <QMimeData>
|
2020-08-30 01:00:53 +08:00
|
|
|
#include <QDebug>
|
2020-08-28 17:56:42 +08:00
|
|
|
|
2020-09-11 17:37:05 +08:00
|
|
|
PasteItem::PasteItem(QWidget *parent, QListWidgetItem *item) : QWidget(parent),
|
2020-12-09 10:09:29 +08:00
|
|
|
m_frame(new QWidget(this)),
|
|
|
|
|
m_frame_effect(new QGraphicsDropShadowEffect(this)),
|
|
|
|
|
m_barnner(new Barnner(this->m_frame)),
|
|
|
|
|
m_context(new StackedWidget(this->m_frame)),
|
|
|
|
|
m_listwidget_item(item)
|
2020-08-30 01:00:53 +08:00
|
|
|
{
|
2020-12-09 10:09:29 +08:00
|
|
|
this->setFocusPolicy(Qt::StrongFocus);
|
|
|
|
|
this->setAttribute(Qt::WA_TranslucentBackground);
|
2020-09-10 19:13:18 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
m_frame_effect->setOffset(0, 0);
|
|
|
|
|
m_frame_effect->setColor(Qt::gray);
|
|
|
|
|
m_frame_effect->setBlurRadius(8);
|
|
|
|
|
m_frame->setGraphicsEffect(m_frame_effect);
|
|
|
|
|
m_frame->setObjectName("PasteItemFrame");
|
2020-09-10 19:13:18 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
QVBoxLayout *vboxlayout = new QVBoxLayout();
|
|
|
|
|
vboxlayout->addWidget(m_barnner);
|
|
|
|
|
vboxlayout->addWidget(m_context);
|
|
|
|
|
vboxlayout->setSpacing(0);
|
|
|
|
|
vboxlayout->setContentsMargins(5, 5, 5, 5);
|
2020-09-10 19:13:18 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
m_frame->setLayout(vboxlayout);
|
|
|
|
|
m_frame->show();
|
2020-08-30 17:12:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PasteItem::setImage(QImage &image)
|
|
|
|
|
{
|
2020-12-09 10:09:29 +08:00
|
|
|
QPixmap pixmap = QPixmap::fromImage(image);
|
|
|
|
|
m_context->setPixmap(pixmap);
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("Image"));
|
2020-08-30 17:12:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PasteItem::setPlainText(QString s)
|
|
|
|
|
{
|
2020-12-09 10:09:29 +08:00
|
|
|
m_context->setText(s);
|
|
|
|
|
m_text = s;
|
2020-09-17 16:29:31 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
if (s.startsWith("http://") || s.startsWith("ftp://") || s.startsWith("https://"))
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("Link"));
|
|
|
|
|
else if (QColor::isValidColor(s))
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("Color"));
|
|
|
|
|
else
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("PlainText"));
|
2020-09-10 19:13:18 +08:00
|
|
|
}
|
|
|
|
|
|
2020-09-18 12:41:41 +08:00
|
|
|
void PasteItem::setRichText(QString richText, QString plainText)
|
2020-09-15 23:11:02 +08:00
|
|
|
{
|
2020-12-09 10:09:29 +08:00
|
|
|
m_context->setRichText(richText, plainText);
|
|
|
|
|
m_text = plainText;
|
2020-09-17 16:29:31 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
if (plainText.startsWith("http://") || plainText.startsWith("ftp://") || plainText.startsWith("https://"))
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("Link"));
|
|
|
|
|
else if (QColor::isValidColor(plainText.simplified().trimmed()))
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("Color"));
|
|
|
|
|
else
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("RichText"));
|
2020-09-15 23:11:02 +08:00
|
|
|
}
|
|
|
|
|
|
2020-09-23 19:20:42 +08:00
|
|
|
bool PasteItem::setUrls(QList<QUrl> &urls)
|
2020-09-16 20:33:28 +08:00
|
|
|
{
|
2020-12-09 10:09:29 +08:00
|
|
|
for (auto url : urls) {
|
|
|
|
|
m_text += url.toString();
|
|
|
|
|
}
|
|
|
|
|
if (!m_context->setUrls(urls))
|
|
|
|
|
return false;
|
2020-09-23 19:20:42 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
this->m_barnner->setTitle(QString("%1 ").arg(urls.count()) + QObject::tr("Files"));
|
|
|
|
|
return true;
|
2020-09-16 20:33:28 +08:00
|
|
|
}
|
|
|
|
|
|
2020-09-10 19:13:18 +08:00
|
|
|
void PasteItem::setIcon(QPixmap pixmap)
|
|
|
|
|
{
|
2020-12-09 10:09:29 +08:00
|
|
|
m_barnner->setIcon(pixmap);
|
2020-08-30 01:00:53 +08:00
|
|
|
}
|
|
|
|
|
|
2021-07-23 16:42:17 +08:00
|
|
|
void PasteItem::setTime(QDateTime &dateTime) {
|
2020-12-09 10:09:29 +08:00
|
|
|
m_barnner->setTime(dateTime);
|
2020-09-12 13:52:09 +08:00
|
|
|
}
|
|
|
|
|
|
2021-07-23 16:42:17 +08:00
|
|
|
void PasteItem::resizeEvent(QResizeEvent *event) {
|
2020-12-09 10:09:29 +08:00
|
|
|
QSize size = event->size();
|
|
|
|
|
m_frame->resize(size);
|
|
|
|
|
m_barnner->setFixedHeight(size.height()/5);
|
2020-08-30 01:00:53 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
QWidget::resizeEvent(event);
|
2020-08-30 01:00:53 +08:00
|
|
|
}
|
|
|
|
|
|
2021-07-23 16:42:17 +08:00
|
|
|
void PasteItem::mouseDoubleClickEvent(QMouseEvent *event) {
|
2020-12-09 10:09:29 +08:00
|
|
|
this->copyData();
|
2020-08-30 01:00:53 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
QWidget::mouseDoubleClickEvent(event);
|
2020-08-30 01:00:53 +08:00
|
|
|
}
|
|
|
|
|
|
2021-07-23 16:42:17 +08:00
|
|
|
void PasteItem::mousePressEvent(QMouseEvent *event) {
|
|
|
|
|
if(event->button() == Qt::RightButton) {
|
|
|
|
|
// qDebug()<<"test";
|
2020-12-21 17:02:20 +08:00
|
|
|
// this->menuData();
|
2020-12-21 16:09:51 +08:00
|
|
|
}
|
|
|
|
|
QWidget::mousePressEvent(event);
|
|
|
|
|
}
|
2021-07-23 16:42:17 +08:00
|
|
|
void PasteItem::keyPressEvent(QKeyEvent *event) {
|
2020-12-09 10:09:29 +08:00
|
|
|
switch (event->key()) {
|
|
|
|
|
case Qt::Key_Return:
|
|
|
|
|
case Qt::Key_Enter:
|
|
|
|
|
this->copyData();
|
|
|
|
|
break;
|
|
|
|
|
case Qt::Key_Escape:
|
|
|
|
|
emit this->hideWindow();
|
|
|
|
|
break;
|
|
|
|
|
}
|
2020-08-30 01:00:53 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
QWidget::keyPressEvent(event);
|
2020-08-28 17:56:42 +08:00
|
|
|
}
|
2020-08-31 15:29:35 +08:00
|
|
|
|
|
|
|
|
void PasteItem::copyData(void)
|
|
|
|
|
{
|
2020-12-09 10:09:29 +08:00
|
|
|
emit this->hideWindow();
|
2020-09-24 00:01:45 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
QClipboard *clipboard = QApplication::clipboard();
|
|
|
|
|
ItemData itemData = this->m_listwidget_item->data(Qt::UserRole).value<ItemData>();
|
|
|
|
|
if (!itemData.image.isNull())
|
|
|
|
|
itemData.mimeData->setImageData(itemData.image);
|
2020-08-31 15:29:35 +08:00
|
|
|
|
2020-12-09 10:09:29 +08:00
|
|
|
clipboard->setMimeData(itemData.mimeData, QClipboard::Clipboard);
|
|
|
|
|
clipboard->setMimeData(itemData.mimeData, QClipboard::Selection);
|
2020-09-27 15:37:29 +08:00
|
|
|
|
2020-08-31 15:29:35 +08:00
|
|
|
}
|
2020-12-21 17:02:20 +08:00
|
|
|
|
|
|
|
|
//void PasteItem::menuData(void){
|
|
|
|
|
// QMenu menu =new QMenu;
|
|
|
|
|
//}
|