File indexing completed on 2024-04-28 11:21:04
0001 /* 0002 SPDX-License-Identifier: GPL-2.0-or-later 0003 SPDX-FileCopyrightText: 2012 Martin Kuettler <martin.kuettler@gmail.com> 0004 */ 0005 0006 #include "worksheetimageitem.h" 0007 #include "worksheet.h" 0008 0009 #include <QGraphicsSceneContextMenuEvent> 0010 #include <QMenu> 0011 #include <QPainter> 0012 #include <QStyleOptionGraphicsItem> 0013 0014 WorksheetImageItem::WorksheetImageItem(QGraphicsObject* parent) 0015 : QGraphicsObject(parent) 0016 { 0017 setFlag(QGraphicsItem::ItemIsFocusable, true); 0018 connect(this, SIGNAL(menuCreated(QMenu*,QPointF)), parent, 0019 SLOT(populateMenu(QMenu*,QPointF)), Qt::DirectConnection); 0020 } 0021 0022 WorksheetImageItem::~WorksheetImageItem() 0023 { 0024 if (worksheet()) 0025 worksheet()->removeRequestedWidth(this); 0026 } 0027 0028 int WorksheetImageItem::type() const 0029 { 0030 return Type; 0031 } 0032 0033 bool WorksheetImageItem::imageIsValid() 0034 { 0035 return !m_pixmap.isNull(); 0036 } 0037 0038 qreal WorksheetImageItem::setGeometry(qreal x, qreal y, qreal w, bool centered) 0039 { 0040 if (width() <= w && centered) 0041 setPos(x + w/2 - width()/2, y); 0042 else 0043 setPos(x, y); 0044 0045 worksheet()->setRequestedWidth(this, scenePos().x() + width()); 0046 0047 return height(); 0048 } 0049 0050 qreal WorksheetImageItem::height() const 0051 { 0052 return m_size.height(); 0053 } 0054 0055 qreal WorksheetImageItem::width() const 0056 { 0057 return m_size.width(); 0058 } 0059 0060 QSizeF WorksheetImageItem::size() 0061 { 0062 return m_size; 0063 } 0064 0065 void WorksheetImageItem::setSize(QSizeF size) 0066 { 0067 m_size = size; 0068 0069 qreal width = scenePos().x() + size.width(); 0070 worksheet()->setRequestedWidth(this, width); 0071 } 0072 0073 QSize WorksheetImageItem::imageSize() 0074 { 0075 return m_pixmap.size(); 0076 } 0077 0078 QRectF WorksheetImageItem::boundingRect() const 0079 { 0080 return QRectF(QPointF(0, 0), m_size); 0081 } 0082 0083 void WorksheetImageItem::paint(QPainter *painter, 0084 const QStyleOptionGraphicsItem *option, 0085 QWidget *widget) 0086 { 0087 Q_UNUSED(option); 0088 Q_UNUSED(widget); 0089 painter->drawPixmap(QRectF(QPointF(0,0), m_size), m_pixmap, 0090 m_pixmap.rect()); 0091 if (hasFocus()) 0092 { 0093 painter->setPen(Qt::DashLine); 0094 painter->drawRect(0, 0, width(), height()); 0095 } 0096 } 0097 0098 void WorksheetImageItem::setEps(const QUrl& url) 0099 { 0100 const QImage img = worksheet()->renderer()->renderToImage(url, Cantor::Renderer::EPS, &m_size); 0101 m_pixmap = QPixmap::fromImage(img.convertToFormat(QImage::Format_ARGB32)); 0102 } 0103 0104 void WorksheetImageItem::setImage(QImage img) 0105 { 0106 m_pixmap = QPixmap::fromImage(img); 0107 setSize(m_pixmap.size()); 0108 } 0109 0110 void WorksheetImageItem::setImage(QImage img, QSize displaySize) 0111 { 0112 m_pixmap = QPixmap::fromImage(img); 0113 setSize(displaySize); 0114 } 0115 0116 void WorksheetImageItem::setPixmap(QPixmap pixmap) 0117 { 0118 m_pixmap = pixmap; 0119 } 0120 0121 QPixmap WorksheetImageItem::pixmap() const 0122 { 0123 return m_pixmap; 0124 } 0125 0126 void WorksheetImageItem::populateMenu(QMenu* menu, QPointF pos) 0127 { 0128 emit menuCreated(menu, mapToParent(pos)); 0129 } 0130 0131 void WorksheetImageItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) 0132 { 0133 QMenu *menu = worksheet()->createContextMenu(); 0134 populateMenu(menu, event->pos()); 0135 0136 menu->popup(event->screenPos()); 0137 } 0138 0139 Worksheet* WorksheetImageItem::worksheet() 0140 { 0141 return qobject_cast<Worksheet*>(scene()); 0142 }