[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/filters
From: Lassi Taneli Nieminen <lassniem () gmail ! com>
Date: 2010-10-15 12:19:19
Message-ID: 20101015121919.3F0BFAC895 () svn ! kde ! org
[Download RAW message or body]
SVN commit 1186211 by lassin:
Fixed pictures in xlsx files to have a graphics style.
M +3 -52 kspread/xlsx/XlsxXmlDrawingReader.cpp
M +2 -6 kspread/xlsx/XlsxXmlDrawingReader.h
M +41 -14 libmsooxml/MsooXmlCommonReaderDrawingMLImpl.h
--- trunk/koffice/filters/kspread/xlsx/XlsxXmlDrawingReader.cpp #1186210:1186211
@@ -477,71 +477,22 @@
}
XlsxXmlEmbeddedPicture::XlsxXmlEmbeddedPicture()
- : m_x(0.0)
- , m_y(0.0)
- , m_width(0.0)
- , m_height(0.0)
{
}
-XlsxXmlEmbeddedPicture::XlsxXmlEmbeddedPicture(const QString &filePath)
- : m_x(0.0)
- , m_y(0.0)
- , m_width(0.0)
- , m_height(0.0)
+void XlsxXmlEmbeddedPicture::setImageXml(const QString imageXml)
{
- m_path = filePath;
+ m_imageXml = imageXml;
}
bool XlsxXmlEmbeddedPicture::saveXml(KoXmlWriter *xmlWriter) // save all needed \
attributes to .ods {
- xmlWriter->startElement("draw:frame");
+ xmlWriter->addCompleteElement(m_imageXml.toUtf8());
- if (m_fromCell.m_col > 0) {
- xmlWriter->addAttributePt("svg:x", EMU_TO_POINT(m_fromCell.m_colOff));
- xmlWriter->addAttributePt("svg:y", EMU_TO_POINT(m_fromCell.m_rowOff));
- } else {
- xmlWriter->addAttributePt("svg:x", m_x);
- xmlWriter->addAttributePt("svg:y", m_y);
- }
-
- // use width and height only if they are non-zero
- if (m_width > 0) {
- xmlWriter->addAttributePt("svg:width", m_width);
- }
- if (m_height > 0) {
- xmlWriter->addAttributePt("svg:height", m_height);
- }
-
- if (m_toCell.m_col > 0) {
- xmlWriter->addAttribute("table:end-cell-address", \
KSpread::Util::encodeColumnLabelText(m_toCell.m_col+1) + \
QString::number(m_toCell.m_row+1));
- xmlWriter->addAttributePt("table:end-x", EMU_TO_POINT(m_toCell.m_colOff));
- xmlWriter->addAttributePt("table:end-y", EMU_TO_POINT(m_toCell.m_rowOff));
- }
-
- xmlWriter->startElement("draw:image");
-
- xmlWriter->addAttribute("xlink:href", m_path);
- xmlWriter->addAttribute("xlink:type", "simple");
- xmlWriter->addAttribute("xlink:show", "embed");
- xmlWriter->addAttribute("xlink:actuate", "onLoad");
-
- xmlWriter->endElement(); // draw:object
- xmlWriter->endElement(); // draw:frame
return true;
}
-QString XlsxXmlEmbeddedPicture::path()
-{
- return m_path;
-}
-
-void XlsxXmlEmbeddedPicture::setPath(QString &newPath)
-{
- m_path = newPath;
-}
-
// in PPTX we do not have pPr, so p@text:style-name should be added earlier
//#define SETUP_PARA_STYLE_IN_READ_P
#include <MsooXmlCommonReaderImpl.h> // this adds a:p, a:pPr, a:t, a:r, etc.
--- trunk/koffice/filters/kspread/xlsx/XlsxXmlDrawingReader.h #1186210:1186211
@@ -143,15 +143,11 @@
{
public:
XlsxXmlEmbeddedPicture();
- XlsxXmlEmbeddedPicture(const QString &filePath);
bool saveXml(KoXmlWriter *xmlWriter); // save the .xml part of the picture \
(the picture itself isn't stored here)
- void setPath(QString &newPath); // set the new path for the file
- QString path();
+ void setImageXml(const QString imageXml);
- qreal m_x, m_y, m_width, m_height; // picture position and size in Pt
- XlsxDrawingObject::Position m_fromCell, m_toCell; // picture position and size \
in cells (starting cell, ending cell)
- QString m_path; // path to the embedded file
+ QString m_imageXml; // draw:image of the image
};
#endif
--- trunk/koffice/filters/libmsooxml/MsooXmlCommonReaderDrawingMLImpl.h \
#1186210:1186211 @@ -184,6 +184,13 @@
}
#endif
+#if defined(XLSXXMLDRAWINGREADER_CPP)
+ QBuffer picBuf;
+ KoXmlWriter picWriter(&picBuf);
+ KoXmlWriter *bodyBackup = body;
+ body = &picWriter;
+#endif
+
#ifndef DOCXXMLDOCREADER_H
body->startElement("draw:frame"); // CASE #P421
#ifdef PPTXXMLSLIDEREADER_H
@@ -202,11 +209,35 @@
}
if (m_rot == 0) {
+#if defined(XLSXXMLDRAWINGREADER_CPP)
+ if (m_currentDrawingObject->m_positions.contains(XlsxDrawingObject::FromAnchor)) \
{ // if we got 'from' cell + if \
(m_currentDrawingObject->m_positions[XlsxDrawingObject::FromAnchor].m_col > 0) { + \
body->addAttributePt("svg:x", \
EMU_TO_POINT(m_currentDrawingObject->m_positions[XlsxDrawingObject::FromAnchor].m_colOff));
+ body->addAttributePt("svg:y", \
EMU_TO_POINT(m_currentDrawingObject->m_positions[XlsxDrawingObject::FromAnchor].m_rowOff));
+ }
+ else {
+ body->addAttribute("svg:x", EMU_TO_POINT(m_svgX));
+ body->addAttribute("svg:y", EMU_TO_POINT(m_svgY));
+ }
+ if (m_currentDrawingObject->m_positions[XlsxDrawingObject::ToAnchor].m_col > \
0) { + body->addAttribute("table:end-cell-address", \
KSpread::Util::encodeColumnLabelText(m_currentDrawingObject->m_positions[XlsxDrawingObject::ToAnchor].m_col+1) \
+ + QString::number(m_currentDrawingObject->m_positions[XlsxDrawingObject::ToAnchor].m_row+1));
+ body->addAttributePt("table:end-x", \
EMU_TO_POINT(m_currentDrawingObject->m_positions[XlsxDrawingObject::ToAnchor].m_colOff));
+ body->addAttributePt("table:end-y", \
EMU_TO_POINT(m_currentDrawingObject->m_positions[XlsxDrawingObject::ToAnchor].m_rowOff));
+ }
+ }
+
+#else
body->addAttribute("svg:x", EMU_TO_CM_STRING(m_svgX));
body->addAttribute("svg:y", EMU_TO_CM_STRING(m_svgY));
+#endif
}
+ if (m_svgWidth > 0) {
body->addAttribute("svg:width", EMU_TO_CM_STRING(m_svgWidth));
+ }
+ if (m_svgHeight > 0) {
body->addAttribute("svg:height", EMU_TO_CM_STRING(m_svgHeight));
+ }
if (m_rot != 0) {
// m_rot is in 1/60,000th of a degree
@@ -247,6 +278,7 @@
//! @todo xlink:actuate?
body->addAttribute("xlink:actuate", "onLoad");
body->endElement(); //draw:image
+
#ifdef DOCXXMLDOCREADER_H
if (!m_cNvPrName.isEmpty() || !m_cNvPrDescr.isEmpty()) {
body->startElement("svg:title");
@@ -271,6 +303,14 @@
}
#endif
+#if defined(XLSXXMLDRAWINGREADER_CPP)
+ body = bodyBackup;
+
+ XlsxXmlEmbeddedPicture *picture = new XlsxXmlEmbeddedPicture;
+ picture->setImageXml(QString::fromUtf8(picBuf.buffer(), \
picBuf.buffer().size())); + m_currentDrawingObject->setPicture(picture);
+#endif
+
#ifndef DOCXXMLDOCREADER_H
popCurrentDrawStyle();
#endif
@@ -2459,26 +2499,13 @@
if (sourceName.isEmpty()) {
return KoFilter::FileNotFound;
}
-#if defined(XLSXXMLDRAWINGREADER_CPP)
- QString destinationName = QLatin1String("Pictures/") + \
sourceName.mid(sourceName.lastIndexOf('/') + 1);;
- if(m_context->import->copyFile(sourceName, destinationName, false) == \
KoFilter::OK) {
- XlsxXmlEmbeddedPicture *picture = new \
XlsxXmlEmbeddedPicture(destinationName);
- if (m_currentDrawingObject->m_positions.contains(XlsxDrawingObject::FromAnchor)) \
{ // if we got 'from' cell
- picture->m_fromCell = \
m_currentDrawingObject->m_positions[XlsxDrawingObject::FromAnchor]; // store the \
starting cell
- if (m_currentDrawingObject->m_positions.contains(XlsxDrawingObject::ToAnchor)) \
{ // if we got 'to' cell
- picture->m_toCell = \
m_currentDrawingObject->m_positions[XlsxDrawingObject::ToAnchor]; // store the ending \
cell
- }
- }
- m_currentDrawingObject->setPicture(picture);
- }
-#else
QString destinationName;
+
RETURN_IF_ERROR( copyFile(sourceName, QLatin1String("Pictures/"), \
destinationName) ) addManifestEntryForFile(destinationName);
m_recentSourceName = sourceName;
addManifestEntryForPicturesDir();
m_xlinkHref = destinationName;
-#endif
}
// Read child elements
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic