File indexing completed on 2024-04-28 11:20:57

0001 /*
0002     SPDX-License-Identifier: GPL-2.0-or-later
0003     SPDX-FileCopyrightText: 2012 Martin Kuettler <martin.kuettler@gmail.com>
0004     SPDX-FileCopyrightText: 2018-2022 by Alexander Semke (alexander.semke@web.de)
0005 */
0006 
0007 #include "imageresultitem.h"
0008 #include "commandentry.h"
0009 #include "worksheetview.h"
0010 #include "lib/imageresult.h"
0011 #include "lib/epsresult.h"
0012 
0013 #include <config-cantor.h>
0014 
0015 #include <KLocalizedString>
0016 #include <QFileDialog>
0017 #include <QImageReader>
0018 
0019 ImageResultItem::ImageResultItem(QGraphicsObject* parent, Cantor::Result* result)
0020     : WorksheetImageItem(parent), ResultItem(result)
0021 {
0022     update();
0023 }
0024 
0025 double ImageResultItem::setGeometry(double x, double y, double w)
0026 {
0027     Q_UNUSED(w);
0028     setPos(x,y);
0029     return height();
0030 }
0031 
0032 void ImageResultItem::populateMenu(QMenu* menu, QPointF)
0033 {
0034     ResultItem::addCommonActions(this, menu);
0035 }
0036 
0037 void ImageResultItem::update()
0038 {
0039     Q_ASSERT(m_result->type() == Cantor::ImageResult::Type || m_result->type() == Cantor::EpsResult::Type);
0040     switch(m_result->type()) {
0041     case Cantor::ImageResult::Type:
0042     {
0043         QSize displaySize = static_cast<Cantor::ImageResult*>(m_result)->displaySize();
0044         if (displaySize.isValid())
0045             setImage(m_result->data().value<QImage>(), displaySize);
0046         else
0047             setImage(m_result->data().value<QImage>());
0048     }
0049         break;
0050     case Cantor::EpsResult::Type:
0051     {
0052         Cantor::EpsResult* epsResult = static_cast<Cantor::EpsResult*>(m_result);
0053 #ifdef WITH_EPS
0054         bool cacheVersionEnough = worksheet()->renderer()->scale() == 1.0 && !worksheet()->isPrinting();
0055         if (!epsResult->image().isNull() && cacheVersionEnough)
0056             setImage(epsResult->image());
0057         else
0058             setEps(m_result->data().toUrl());
0059 #else
0060         setImage(epsResult->image());
0061 #endif
0062     }
0063         break;
0064     default:
0065         break;
0066     }
0067 }
0068 
0069 QRectF ImageResultItem::boundingRect() const
0070 {
0071     return QRectF(0, 0, width(), height());
0072 }
0073 
0074 double ImageResultItem::width() const
0075 {
0076     return WorksheetImageItem::width();
0077 }
0078 
0079 double ImageResultItem::height() const
0080 {
0081     return WorksheetImageItem::height();
0082 }
0083 
0084 void ImageResultItem::saveResult()
0085 {
0086     QString format;
0087     if (m_result->type() == Cantor::ImageResult::Type)
0088     {
0089         auto* imageResult = static_cast<Cantor::ImageResult*>(result());
0090         format = i18n("%1 files (*.%2)", imageResult->extension().toUpper(), imageResult->extension());
0091     }
0092     else
0093         format = i18n("EPS files (*.eps)");
0094 
0095     const auto& fileName = QFileDialog::getSaveFileName(worksheet()->worksheetView(),
0096                                                            i18n("Save image result"),
0097                                                            /*dir*/ QString(),
0098                                                            format);
0099     if (!fileName.isEmpty())
0100         result()->save(fileName);
0101 }
0102 
0103 void ImageResultItem::deleteLater()
0104 {
0105     WorksheetImageItem::deleteLater();
0106 }