[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