Subversion Repositories Scribus

Rev

Rev 23653 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
For general Scribus (>=1.3.2) copyright and licensing information please refer
to the COPYING file provided with the program. Following this notice may exist
a copyright and/or license notice that predates the release of Scribus 1.3.2
for which a new license (GPL+exception) is in place.
*/

#include "scpreview.h"
#include <QByteArray>
#include <QDomDocument>
#include <QImage>
#include <QList>
#include "pageitem.h"
#include "prefsmanager.h"
#include "scribuscore.h"
#include "scribusdoc.h"
#include "scribusXml.h"
#include "selection.h"



QImage ScPreview::createPreview(const QString& data)
{
//      PrefsManager& prefsManager = PrefsManager::instance();
        double gx, gy, gw, gh;
        ScriXmlDoc ss;
        if (ss.readElemHeader(data, false, &gx, &gy, &gw, &gh))
        {
                QDomDocument docu("scridoc");
                docu.setContent(data);
                QDomElement elem = docu.documentElement();
                if (elem.hasAttribute("previewData"))
                {
                        QString dat = elem.attribute("previewData", "");
                        QByteArray inlineImageData;
                        inlineImageData.append(dat.toUtf8());
                        inlineImageData = QByteArray::fromBase64(inlineImageData);
                        QImage tmp;
                        tmp.loadFromData(inlineImageData);
                        return tmp;
                }

                ScribusDoc *m_Doc = new ScribusDoc();
                m_Doc->setup(0, 1, 1, 1, 1, "Custom", "Custom");
                m_Doc->setPage(gw, gh, 0, 0, 0, 0, 0, 0, false, false);
                m_Doc->addPage(0);
                m_Doc->setGUI(false, ScCore->primaryMainWindow(), nullptr);
                m_Doc->setLoading(true);
                m_Doc->DoDrawing = false;
                if (ss.readElem(data, m_Doc, 0, 0, false, true))
                {
                        QList<PageItem*> Elements = *m_Doc->Items;
                        Selection *tmpSel = new Selection(m_Doc, false);
                        if (Elements.count() > 0)
                        {
                                if (Elements.count() > 1)
                                        m_Doc->groupObjectsList(Elements);
                                m_Doc->DoDrawing = true;
                                m_Doc->m_Selection->delaySignalsOn();
                                for (int dre=0; dre<Elements.count(); ++dre)
                                {
                                        tmpSel->addItem(Elements.at(dre), true);
                                }
                                tmpSel->setGroupRect();
                                double xs = tmpSel->width();
                                double ys = tmpSel->height();
                                //      double sc = 60.0 / qMax(xs, ys);
                                //      m_Doc->scaleGroup(sc, sc, true, tmpSel);
                                QImage tmpImage = Elements.at(0)->DrawObj_toImage(128);
                                tmpImage.setText("XSize", QString("%1").arg(xs));
                                tmpImage.setText("YSize", QString("%1").arg(ys));
                                m_Doc->m_Selection->delaySignalsOff();
                                delete tmpSel;
                                delete m_Doc;
                                return tmpImage;
                        }
                }
                delete m_Doc;
        }
        return QImage();
}