File indexing completed on 2024-05-05 16:21:39

0001 /*
0002     SPDX-FileCopyrightText: 2010-2014 Sune Vuorela <sune@vuorela.dk>
0003 
0004     SPDX-License-Identifier: MIT
0005 */
0006 
0007 #include "barcodeexamplewidget.h"
0008 // Prison
0009 #include <Prison/AbstractBarcode>
0010 // Qt
0011 #include <QDrag>
0012 #include <QGuiApplication>
0013 #include <QMimeData>
0014 #include <QPainter>
0015 #include <QResizeEvent>
0016 #include <QScreen>
0017 
0018 using namespace Prison;
0019 
0020 BarcodeExampleWidget::BarcodeExampleWidget(AbstractBarcode *barcode, QWidget *parent)
0021     : QWidget(parent)
0022     , m_barcode(barcode)
0023 {
0024 }
0025 
0026 void BarcodeExampleWidget::setData(const QString &data)
0027 {
0028     if (m_barcode) {
0029         m_barcode->setData(data);
0030     }
0031     updateGeometry();
0032     repaint();
0033 }
0034 
0035 void BarcodeExampleWidget::paintEvent(QPaintEvent *event)
0036 {
0037     QPainter painter(this);
0038     if (m_barcode) {
0039         QRect targetrect = rect();
0040         QImage image = m_barcode->toImage(targetrect.size());
0041         if (!image.isNull()) {
0042             QRectF rect(targetrect.left() + targetrect.width() / 2 - image.size().width() / 2,
0043                         targetrect.top() + targetrect.height() / 2 - image.size().height() / 2,
0044                         targetrect.size().width(),
0045                         targetrect.height());
0046             painter.drawImage(rect.topLeft(), image, image.rect());
0047         } else {
0048             painter.fillRect(QRectF(QPointF(0, 0), size()), Qt::cyan);
0049         }
0050     } else {
0051         painter.fillRect(QRectF(QPointF(0, 0), size()), Qt::black);
0052     }
0053     QWidget::paintEvent(event);
0054 }
0055 
0056 void BarcodeExampleWidget::resizeEvent(QResizeEvent *event)
0057 {
0058     if (m_barcode) {
0059         updateGeometry();
0060         repaint();
0061     }
0062     QWidget::resizeEvent(event);
0063 }
0064 
0065 void BarcodeExampleWidget::mousePressEvent(QMouseEvent *event)
0066 {
0067     if (m_barcode && event->buttons() & Qt::LeftButton) {
0068         QMimeData *data = new QMimeData();
0069         data->setImageData(m_barcode->toImage(rect().size()));
0070         QDrag *drag = new QDrag(this);
0071         drag->setMimeData(data);
0072         drag->exec();
0073     } else {
0074         QWidget::mousePressEvent(event);
0075     }
0076 }
0077 
0078 QSize BarcodeExampleWidget::minimumSizeHint() const
0079 {
0080     if (m_barcode) {
0081         return m_barcode->preferredSize(QGuiApplication::primaryScreen()->devicePixelRatio()).toSize();
0082     } else {
0083         return QWidget::minimumSizeHint();
0084     }
0085 }
0086 
0087 BarcodeExampleWidget::~BarcodeExampleWidget()
0088 {
0089     delete m_barcode;
0090 }