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-08-30 19:00:54 +08:00
|
|
|
m_frame(new QWidget(this)),
|
|
|
|
|
m_frame_effect(new QGraphicsDropShadowEffect(this)),
|
2020-09-10 19:13:18 +08:00
|
|
|
m_barnner(new Barnner(this->m_frame)),
|
2020-09-11 17:37:05 +08:00
|
|
|
m_context(new StackedWidget(this->m_frame)),
|
|
|
|
|
m_listwidget_item(item)
|
2020-08-30 01:00:53 +08:00
|
|
|
{
|
|
|
|
|
this->setFocusPolicy(Qt::StrongFocus);
|
2020-08-30 19:00:54 +08:00
|
|
|
this->setAttribute(Qt::WA_TranslucentBackground);
|
2020-09-10 19:13:18 +08:00
|
|
|
|
2020-08-30 19:00:54 +08:00
|
|
|
m_frame_effect->setOffset(0, 0);
|
2020-08-31 18:32:45 +08:00
|
|
|
m_frame_effect->setColor(Qt::gray);
|
|
|
|
|
m_frame_effect->setBlurRadius(8);
|
2020-08-30 19:00:54 +08:00
|
|
|
m_frame->setGraphicsEffect(m_frame_effect);
|
2020-09-10 19:13:18 +08:00
|
|
|
m_frame->setObjectName("PasteItemFrame");
|
|
|
|
|
|
|
|
|
|
QVBoxLayout *vboxlayout = new QVBoxLayout();
|
|
|
|
|
vboxlayout->addWidget(m_barnner);
|
|
|
|
|
vboxlayout->addWidget(m_context);
|
|
|
|
|
vboxlayout->setSpacing(0);
|
|
|
|
|
vboxlayout->setContentsMargins(5, 5, 5, 5);
|
|
|
|
|
|
|
|
|
|
m_frame->setLayout(vboxlayout);
|
2020-08-30 19:00:54 +08:00
|
|
|
m_frame->show();
|
2020-08-30 17:12:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PasteItem::setImage(QImage &image)
|
|
|
|
|
{
|
|
|
|
|
QPixmap pixmap = QPixmap::fromImage(image);
|
2020-09-10 19:13:18 +08:00
|
|
|
m_context->setPixmap(pixmap);
|
2020-09-12 01:06:17 +08:00
|
|
|
this->m_barnner->setTitle(QObject::tr("Image"));
|
2020-08-30 17:12:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PasteItem::setPlainText(QString s)
|
|
|
|
|
{
|
2020-09-10 19:13:18 +08:00
|
|
|
m_context->setText(s);
|
2020-09-19 18:05:33 +08:00
|
|
|
m_text = s;
|
2020-09-17 16:29:31 +08:00
|
|
|
|
|
|
|
|
if (s.startsWith("http://") || s.startsWith("ftp://") || s.startsWith("https://"))
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("Link"));
|
2020-09-18 11:09:03 +08:00
|
|
|
else if (QColor::isValidColor(s))
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("Color"));
|
2020-09-17 16:29:31 +08:00
|
|
|
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-09-18 12:41:41 +08:00
|
|
|
m_context->setRichText(richText, plainText);
|
2020-09-19 18:05:33 +08:00
|
|
|
m_text = plainText;
|
2020-09-17 16:29:31 +08:00
|
|
|
|
2020-09-18 12:41:41 +08:00
|
|
|
if (plainText.startsWith("http://") || plainText.startsWith("ftp://") || plainText.startsWith("https://"))
|
2020-09-17 16:29:31 +08:00
|
|
|
this->m_barnner->setTitle(QObject::tr("Link"));
|
2020-09-18 12:41:41 +08:00
|
|
|
else if (QColor::isValidColor(plainText.simplified().trimmed()))
|
2020-09-18 11:09:03 +08:00
|
|
|
this->m_barnner->setTitle(QObject::tr("Color"));
|
2020-09-17 16:29:31 +08:00
|
|
|
else
|
|
|
|
|
this->m_barnner->setTitle(QObject::tr("RichText"));
|
2020-09-15 23:11:02 +08:00
|
|
|
}
|
|
|
|
|
|
2020-09-16 20:33:28 +08:00
|
|
|
void PasteItem::setUrls(QList<QUrl> &urls)
|
|
|
|
|
{
|
2020-09-19 18:05:33 +08:00
|
|
|
for (auto url : urls) {
|
|
|
|
|
m_text += url.toString();
|
|
|
|
|
}
|
2020-09-16 20:33:28 +08:00
|
|
|
m_context->setUrls(urls);
|
2020-09-17 11:36:35 +08:00
|
|
|
this->m_barnner->setTitle(QString("%1 ").arg(urls.count()) + QObject::tr("Files"));
|
2020-09-16 20:33:28 +08:00
|
|
|
}
|
|
|
|
|
|
2020-09-10 19:13:18 +08:00
|
|
|
void PasteItem::setIcon(QPixmap pixmap)
|
|
|
|
|
{
|
|
|
|
|
m_barnner->setIcon(pixmap);
|
2020-08-30 01:00:53 +08:00
|
|
|
}
|
|
|
|
|
|
2020-09-12 13:52:09 +08:00
|
|
|
void PasteItem::setTime(QDateTime &dateTime)
|
|
|
|
|
{
|
|
|
|
|
m_barnner->setTime(dateTime);
|
|
|
|
|
}
|
|
|
|
|
|
2020-08-30 01:00:53 +08:00
|
|
|
void PasteItem::resizeEvent(QResizeEvent *event)
|
|
|
|
|
{
|
|
|
|
|
QSize size = event->size();
|
|
|
|
|
m_frame->resize(size);
|
2020-09-10 21:05:59 +08:00
|
|
|
m_barnner->setFixedHeight(size.height()/5);
|
2020-08-30 01:00:53 +08:00
|
|
|
|
|
|
|
|
QWidget::resizeEvent(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PasteItem::mouseDoubleClickEvent(QMouseEvent *event)
|
|
|
|
|
{
|
2020-08-31 15:29:35 +08:00
|
|
|
this->copyData();
|
2020-08-30 01:00:53 +08:00
|
|
|
|
|
|
|
|
QWidget::mouseDoubleClickEvent(event);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void PasteItem::keyPressEvent(QKeyEvent *event)
|
|
|
|
|
{
|
|
|
|
|
switch (event->key()) {
|
|
|
|
|
case Qt::Key_Return:
|
|
|
|
|
case Qt::Key_Enter:
|
2020-08-31 15:29:35 +08:00
|
|
|
this->copyData();
|
|
|
|
|
break;
|
|
|
|
|
case Qt::Key_Escape:
|
2020-09-17 12:42:12 +08:00
|
|
|
emit this->hideWindow();
|
2020-08-31 15:29:35 +08:00
|
|
|
break;
|
2020-08-30 01:00:53 +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)
|
|
|
|
|
{
|
|
|
|
|
QClipboard *clipboard = QApplication::clipboard();
|
2020-09-11 17:37:05 +08:00
|
|
|
ItemData itemData = this->m_listwidget_item->data(Qt::UserRole).value<ItemData>();
|
2020-09-16 10:07:08 +08:00
|
|
|
if (!itemData.image.isNull())
|
|
|
|
|
itemData.mimeData->setImageData(itemData.image);
|
2020-08-31 15:29:35 +08:00
|
|
|
|
2020-09-16 10:07:08 +08:00
|
|
|
clipboard->setMimeData(itemData.mimeData);
|
2020-09-17 12:42:12 +08:00
|
|
|
emit this->hideWindow();
|
2020-08-31 15:29:35 +08:00
|
|
|
}
|