summaryrefslogtreecommitdiffstats
path: root/filters/kpresenter/powerpoint/import/powerpointimport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'filters/kpresenter/powerpoint/import/powerpointimport.cpp')
-rw-r--r--filters/kpresenter/powerpoint/import/powerpointimport.cpp1592
1 files changed, 1592 insertions, 0 deletions
diff --git a/filters/kpresenter/powerpoint/import/powerpointimport.cpp b/filters/kpresenter/powerpoint/import/powerpointimport.cpp
new file mode 100644
index 000000000..4291c0a4e
--- /dev/null
+++ b/filters/kpresenter/powerpoint/import/powerpointimport.cpp
@@ -0,0 +1,1592 @@
+/* This file is part of the KDE project
+ Copyright (C) 2005 Yolla Indria <yolla.indria@gmail.com>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#include <config.h>
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <powerpointimport.h>
+#include <powerpointimport.moc>
+
+#include <tqbuffer.h>
+#include <tqcstring.h>
+#include <tqfile.h>
+#include <tqstring.h>
+#include <tqtextstream.h>
+
+#include <kdebug.h>
+#include <KoFilterChain.h>
+#include <KoGlobal.h>
+#include <KoUnit.h>
+#include <kgenericfactory.h>
+
+#include <KoXmlWriter.h>
+
+#include "libppt.h"
+#include <iostream>
+#include <math.h>
+
+using namespace Libppt;
+
+typedef KGenericFactory<PowerPointImport, KoFilter> PowerPointImportFactory;
+K_EXPORT_COMPONENT_FACTORY( libpowerpointimport,
+ PowerPointImportFactory( "kofficefilters" ) )
+
+namespace Libppt {
+
+inline TQConstString string( const Libppt::UString& str )
+{
+ return TQConstString( reinterpret_cast<const TQChar*>( str.data() ), str.length() );
+}
+
+}
+
+class PowerPointImport::Private
+{
+public:
+ TQString inputFile;
+ TQString outputFile;
+
+ Presentation *presentation;
+};
+
+
+PowerPointImport::PowerPointImport ( TQObject*, const char*, const TQStringList& )
+ : KoFilter()
+{
+ d = new Private;
+}
+
+PowerPointImport::~PowerPointImport()
+{
+ delete d;
+}
+
+KoFilter::ConversionStatus PowerPointImport::convert( const TQCString& from, const TQCString& to )
+{
+ if ( from != "application/mspowerpoint" )
+ return KoFilter::NotImplemented;
+
+ if ( to != "application/vnd.oasis.opendocument.presentation" )
+ return KoFilter::NotImplemented;
+
+ d->inputFile = m_chain->inputFile();
+ d->outputFile = m_chain->outputFile();
+
+ // open inputFile
+ d->presentation = new Presentation;
+ if( !d->presentation->load( d->inputFile.local8Bit() ) )
+ {
+ delete d->presentation;
+ d->presentation = 0;
+ return KoFilter::StupidError;
+ }
+
+ // create output store
+ KoStore* storeout;
+ storeout = KoStore::createStore( d->outputFile, KoStore::Write,
+ "application/vnd.oasis.opendocument.presentation", KoStore::Zip );
+
+ if ( !storeout )
+ {
+ kdWarning() << "Couldn't open the requested file." << endl;
+ return KoFilter::FileNotFound;
+ }
+
+ // store document content
+ if ( !storeout->open( "content.xml" ) )
+ {
+ kdWarning() << "Couldn't open the file 'content.xml'." << endl;
+ return KoFilter::CreationError;
+ }
+ storeout->write( createContent() );
+ storeout->close();
+
+ // store document styles
+ if ( !storeout->open( "styles.xml" ) )
+ {
+ kdWarning() << "Couldn't open the file 'styles.xml'." << endl;
+ return KoFilter::CreationError;
+ }
+ storeout->write( createStyles() );
+ storeout->close();
+
+ // store document manifest
+ storeout->enterDirectory( "META-INF" );
+ if ( !storeout->open( "manifest.xml" ) )
+ {
+ kdWarning() << "Couldn't open the file 'META-INF/manifest.xml'." << endl;
+ return KoFilter::CreationError;
+ }
+ storeout->write( createManifest() );
+ storeout->close();
+
+
+ // we are done!
+ delete d->presentation;
+ delete storeout;
+ d->inputFile = TQString();
+ d->outputFile = TQString();
+ d->presentation = 0;
+
+ return KoFilter::OK;
+}
+
+TQByteArray PowerPointImport::createStyles()
+{
+ KoXmlWriter* stylesWriter;
+ TQByteArray stylesData;
+ TQBuffer stylesBuffer( stylesData );
+
+ TQString pageWidth = TQString("%1pt").arg( d->presentation->masterSlide()->pageWidth() );
+ TQString pageHeight = TQString("%1pt").arg( d->presentation->masterSlide()->pageHeight() );
+
+ stylesBuffer.open( IO_WriteOnly );
+ stylesWriter = new KoXmlWriter( &stylesBuffer );
+
+ stylesWriter->startDocument( "office:document-styles" );
+ stylesWriter->startElement( "office:document-styles" );
+ stylesWriter->addAttribute( "xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0" );
+ stylesWriter->addAttribute( "xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" );
+ stylesWriter->addAttribute( "xmlns:presentation", "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" );
+ stylesWriter->addAttribute( "xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" );
+ stylesWriter->addAttribute( "xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0" );
+ stylesWriter->addAttribute( "xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" );
+ stylesWriter->addAttribute( "office:version","1.0" );
+
+ // office:styles
+ stylesWriter->startElement( "office:styles" );
+ stylesWriter->endElement();
+
+ // office:automatic-styles
+ stylesWriter->startElement( "office:automatic-styles" );
+ stylesWriter->startElement( "style:page-layout" );
+ stylesWriter->addAttribute( "style:name","pm1" );
+ stylesWriter->addAttribute( "style:page-usage","all" );
+ stylesWriter->startElement( "style:page-layout-properties" );
+ stylesWriter->addAttribute( "fo:margin-bottom","0pt" );
+ stylesWriter->addAttribute( "fo:margin-left","0pt" );
+ stylesWriter->addAttribute( "fo:margin-right","0pt" );
+ stylesWriter->addAttribute( "fo:margin-top","0pt" );
+ stylesWriter->addAttribute( "fo:page-height", pageHeight );
+ stylesWriter->addAttribute( "fo:page-width", pageWidth );
+ stylesWriter->addAttribute( "style:print-orientation","landscape" );
+ stylesWriter->endElement(); // style:page-layout-properties
+ stylesWriter->endElement(); // style:page-layout
+
+ stylesWriter->startElement( "style:style" );
+ stylesWriter->addAttribute( "style:name","dp1" );
+ stylesWriter->addAttribute( "style:family","drawing-page" );
+ stylesWriter->startElement( "style:drawing-page-properties" );
+ stylesWriter->addAttribute( "draw:background-size","border" );
+ stylesWriter->addAttribute( "draw:fill","solid" );
+ stylesWriter->addAttribute( "draw:fill-color","#ffffff" );
+ stylesWriter->endElement(); // style:drawing-page-properties
+ stylesWriter->endElement(); // style:style
+
+ stylesWriter->startElement( "style:style" );
+ stylesWriter->addAttribute( "style:name","P1" );
+ stylesWriter->addAttribute( "style:family","paragraph" );
+ stylesWriter->startElement( "style:paragraph-properties" );
+ stylesWriter->addAttribute( "fo:margin-left","0cm" );
+ stylesWriter->addAttribute( "fo:margin-right","0cm" );
+ stylesWriter->addAttribute( "fo:text-indent","0cm" );
+ stylesWriter->endElement(); // style:paragraph-properties
+ stylesWriter->startElement( "style:text-properties" );
+ stylesWriter->addAttribute( "fo:font-size","14pt" );
+ stylesWriter->addAttribute( "style:font-size-asian","14pt" );
+ stylesWriter->addAttribute( "style:font-size-complex","14pt" );
+ stylesWriter->endElement(); // style:text-properties
+ stylesWriter->endElement(); // style:style
+
+ stylesWriter->startElement( "text:list-style" );
+ stylesWriter->addAttribute( "style:name","L2" );
+ stylesWriter->startElement( "text:list-level-style-bullet" );
+ stylesWriter->addAttribute( "text:level","1" );
+ stylesWriter->addAttribute( "text:bullet-char","●" );
+ stylesWriter->startElement( "style:text-properties" );
+ stylesWriter->addAttribute( "fo:font-family","StarSymbol" );
+ stylesWriter->addAttribute( "font-pitch","variable" );
+ stylesWriter->addAttribute( "fo:color","#000000" );
+ stylesWriter->addAttribute( "fo:font-size","45%" );
+ stylesWriter->endElement(); // style:text-properties
+ stylesWriter->endElement(); // text:list-level-style-bullet
+ stylesWriter->endElement(); // text:list-style
+
+ stylesWriter->endElement(); // office:automatic-styles
+
+ // office:master-stylesborder
+ stylesWriter->startElement( "office:master-styles" );
+ stylesWriter->startElement( "style:master-page" );
+ stylesWriter->addAttribute( "style:name", "Standard" );
+ stylesWriter->addAttribute( "style:page-layout-name", "pm1" );
+ stylesWriter->addAttribute( "draw:style-name", "dp1" );
+ stylesWriter->endElement();
+ stylesWriter->endElement();
+
+ stylesWriter->endElement(); // office:document-styles
+ stylesWriter->endDocument();
+ delete stylesWriter;
+
+ // for troubleshooting only !!
+ TQString dbg;
+ for( unsigned i=0; i<stylesData.size(); i++ )
+ dbg.append( stylesData[i] );
+ tqDebug("\nstyles.xml:\n%s\n", dbg.latin1() );
+
+ return stylesData;
+}
+
+
+TQByteArray PowerPointImport::createContent()
+{
+ KoXmlWriter* contentWriter;
+ TQByteArray contentData;
+ TQBuffer contentBuffer( contentData );
+
+ contentBuffer.open( IO_WriteOnly );
+ contentWriter = new KoXmlWriter( &contentBuffer );
+
+ contentWriter->startDocument( "office:document-content" );
+ contentWriter->startElement( "office:document-content" );
+ contentWriter->addAttribute( "xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0" );
+ contentWriter->addAttribute( "xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0" );
+ contentWriter->addAttribute( "xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" );
+ contentWriter->addAttribute( "xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" );
+ contentWriter->addAttribute( "xmlns:presentation", "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" );
+ contentWriter->addAttribute( "xmlns:svg","urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" );
+ contentWriter->addAttribute( "office:version","1.0" );
+
+ // office:automatic-styles
+
+ drawingObjectCounter = 0;
+ contentWriter->startElement( "office:automatic-styles" );
+ for( unsigned c=0; c < d->presentation->slideCount(); c++ )
+ {
+ Slide* slide = d->presentation->slide( c );
+ processSlideForStyle( c, slide, contentWriter );
+ }
+ contentWriter->endElement();
+
+
+
+ // office:body
+
+ contentWriter->startElement( "office:body" );
+ contentWriter->startElement( "office:presentation" );
+
+ drawingObjectCounter = 0;
+ for( unsigned c=0; c < d->presentation->slideCount(); c++ )
+ {
+ Slide* slide = d->presentation->slide( c );
+ processSlideForBody( c, slide, contentWriter );
+ }
+
+ contentWriter->endElement(); // office:presentation
+ contentWriter->endElement(); // office:body
+
+ contentWriter->endElement(); // office:document-content
+ contentWriter->endDocument();
+ delete contentWriter;
+
+ // for troubleshooting only !!
+ TQString dbg;
+ for( unsigned i=0; i<contentData.size(); i++ )
+ dbg.append( contentData[i] );
+ tqDebug("\ncontent.xml:\n%s\n", dbg.latin1() );
+
+ return contentData;
+}
+
+TQByteArray PowerPointImport::createManifest()
+{
+ KoXmlWriter* manifestWriter;
+ TQByteArray manifestData;
+ TQBuffer manifestBuffer( manifestData );
+
+ manifestBuffer.open( IO_WriteOnly );
+ manifestWriter = new KoXmlWriter( &manifestBuffer );
+
+ manifestWriter->startDocument( "manifest:manifest" );
+ manifestWriter->startElement( "manifest:manifest" );
+ manifestWriter->addAttribute( "xmlns:manifest",
+ "urn:oasis:names:tc:openoffice:xmlns:manifest:1.0" );
+
+ manifestWriter->addManifestEntry( "/", "application/vnd.oasis.opendocument.presentation" );
+ manifestWriter->addManifestEntry( "styles.xml", "text/xml" );
+ manifestWriter->addManifestEntry( "content.xml", "text/xml" );
+
+ manifestWriter->endElement();
+ manifestWriter->endDocument();
+ delete manifestWriter;
+
+ // for troubleshooting only !!
+ TQString dbg;
+ for( unsigned i=0; i<manifestData.size(); i++ )
+ dbg.append( manifestData[i] );
+ tqDebug("\nmanifest.xml:\n%s\n", dbg.latin1() );
+
+ return manifestData;
+}
+
+void PowerPointImport::processEllipse (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:ellipse" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->endElement(); // draw:ellipse
+}
+
+void PowerPointImport::processRectangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject ) return;
+ if( !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:rect" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ if ( drawObject->hasProperty ( "libppt:rotation" ) )
+ {
+
+ double rotAngle = drawObject->getDoubleProperty("libppt:rotation" );
+ double xMid = ( drawObject->left() + 0.5*drawObject->width() );
+ double yMid = ( drawObject->top() + 0.5*drawObject->height() );
+ double xVec = drawObject->left()- xMid;
+ double yVec = yMid - drawObject->top();
+
+ double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
+ double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
+ TQString rot = TQString("rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid-yNew);
+ xmlWriter->addAttribute( "draw:transform", rot );
+ }
+ else
+ {
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ }
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->endElement(); // draw:rect
+}
+
+void PowerPointImport::processRoundRectangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+
+
+ if ( drawObject->hasProperty ( "libppt:rotation" ) )
+ {
+ double rotAngle = drawObject->getDoubleProperty("libppt:rotation" );
+
+
+
+ if ( rotAngle > 0.785399 ) // > 45 deg
+ { xmlWriter->addAttribute( "svg:width", heightStr );
+ xmlWriter->addAttribute( "svg:height", widthStr );
+ double xMid = ( drawObject->left() - 0.5*drawObject->height() );
+ double yMid = ( drawObject->top() + 0.5*drawObject->width() );
+ double xVec = drawObject->left()- xMid;
+ double yVec = drawObject->top()- yMid;
+
+ double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
+ double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
+ TQString rot = TQString("rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid+yNew);
+ xmlWriter->addAttribute( "draw:transform", rot );
+ }
+ else
+ { xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ double xMid = ( drawObject->left() + 0.5*drawObject->width() );
+ double yMid = ( drawObject->top() + 0.5*drawObject->height() );
+ double xVec = drawObject->left()- xMid;
+ double yVec = yMid - drawObject->top();
+
+ double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
+ double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
+ TQString rot = TQString("rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid-yNew);
+ xmlWriter->addAttribute( "draw:transform", rot );
+ }
+
+
+ }
+ else
+ { xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ }
+ // xmlWriter->addAttribute( "svg:x", xStr );
+ // xmlWriter->addAttribute( "svg:y", yStr );
+
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+ xmlWriter->addAttribute( "draw:type", "round-rectangle");
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 /3" );
+ xmlWriter->addAttribute( "draw:name", "f0" );
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "right-?f0 " );
+ xmlWriter->addAttribute( "draw:name", "f1" );
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "bottom-?f0 " );
+ xmlWriter->addAttribute( "draw:name", "f2" );
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "left+?f0 " );
+ xmlWriter->addAttribute( "draw:name", "f3" );
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "top+?f0 " );
+ xmlWriter->addAttribute( "draw:name", "f4" );
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->endElement(); // draw:enhanced-geometry
+ xmlWriter->endElement(); // draw:custom-shape
+}
+
+void PowerPointImport::processDiamond (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 0 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 0 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 10 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+ xmlWriter->addAttribute( "draw:type", "diamond");
+ xmlWriter->endElement();
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->endElement();
+}
+
+void PowerPointImport::processTriangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ /* draw IsocelesTriangle or RightTriangle */
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 0 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 2.5 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 0 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 10 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 7.5 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+
+ if (drawObject->hasProperty("draw:mirror-vertical"))
+ {
+ xmlWriter->addAttribute("draw:mirror-vertical","true");
+ }
+ if ( drawObject->hasProperty("draw:mirror-horizontal"))
+ {
+ xmlWriter->addAttribute("draw:mirror-horizontal","true");
+ }
+ if ( drawObject->hasProperty ( "libppt:rotation" ) )
+ { // draw:transform="rotate (1.5707963267946) translate (6.985cm 14.181cm)"
+
+ double rotAngle = drawObject->getDoubleProperty("libppt:rotation" );
+ double xMid = ( drawObject->left() + 0.5*drawObject->width() );
+ double yMid = ( drawObject->top() + 0.5*drawObject->height() );
+ TQString rot = TQString("rotate (%1) translate (%2cm %3cm)").arg(rotAngle).arg(xMid).arg(yMid);
+ xmlWriter->addAttribute( "draw:transform", rot );
+ }
+ if (drawObject->shape() == DrawObject::RightTriangle)
+ {
+ xmlWriter->addAttribute( "draw:type", "right-triangle");
+ }
+ else if (drawObject->shape() == DrawObject::IsoscelesTriangle)
+ {
+ xmlWriter->addAttribute( "draw:type", "isosceles-triangle");
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 " );
+ xmlWriter->addAttribute( "draw:name", "f0" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 /2" );
+ xmlWriter->addAttribute( "draw:name", "f1" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "?f1 +10800" );
+ xmlWriter->addAttribute( "draw:name", "f2" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 *2/3" );
+ xmlWriter->addAttribute( "draw:name", "f3" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "?f3 +7200" );
+ xmlWriter->addAttribute( "draw:name", "f4" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-?f0 " );
+ xmlWriter->addAttribute( "draw:name", "f5" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "?f5 /2" );
+ xmlWriter->addAttribute( "draw:name", "f6" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-?f6 " );
+ xmlWriter->addAttribute( "draw:name", "f7" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:handle" );
+ xmlWriter->addAttribute( "draw:handle-range-x-maximum", 21600);
+ xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
+ xmlWriter->addAttribute( "draw:handle-position","$0 top");
+ xmlWriter->endElement();
+ }
+
+ xmlWriter->endElement(); // enhanced-geometry
+ xmlWriter->endElement(); // custom-shape
+}
+
+void PowerPointImport::processTrapezoid (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 0 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 2.5 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 0 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+ if ( drawObject->hasProperty("draw:mirror-vertical") )
+ {
+ xmlWriter->addAttribute("draw:mirror-vertical","true");
+ }
+ if ( drawObject->hasProperty("draw:mirror-horizontal"))
+ {
+ xmlWriter->addAttribute("draw:mirror-horizontal","true");
+ }
+ xmlWriter->addAttribute( "draw:type", "trapezoid" );
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-$0 " );
+ xmlWriter->addAttribute( "draw:name", "f0" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0" );
+ xmlWriter->addAttribute( "draw:name", "f1" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 *10/18" );
+ xmlWriter->addAttribute( "draw:name", "f2" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "?f2 +1750");
+ xmlWriter->addAttribute( "draw:name", "f3" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-?f3" );
+ xmlWriter->addAttribute( "draw:name", "f4" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 /2" );
+ xmlWriter->addAttribute( "draw:name", "f5" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-?f5" );
+ xmlWriter->addAttribute( "draw:name", "f6" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:handle" );
+ xmlWriter->addAttribute( "draw:handle-range-x-maximum", 10800);
+ xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
+ xmlWriter->addAttribute("draw:handle-position","$0 bottom");
+ xmlWriter->endElement();
+ xmlWriter->endElement(); // enhanced-geometry
+ xmlWriter->endElement(); // custom-shape
+}
+
+void PowerPointImport::processParallelogram (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 6.25 );
+ xmlWriter->addAttribute( "svg:y", 0 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 4.5 );
+ xmlWriter->addAttribute( "svg:y", 0 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 8.75 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 3.75 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 1.25 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+ if (drawObject->hasProperty("draw:mirror-vertical"))
+ {
+ xmlWriter->addAttribute("draw:mirror-vertical","true");
+ }
+ if ( drawObject->hasProperty("draw:mirror-horizontal"))
+ {
+ xmlWriter->addAttribute("draw:mirror-horizontal","true");
+ }
+ xmlWriter->addAttribute( "draw:type", "parallelogram" );
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 " );
+ xmlWriter->addAttribute( "draw:name", "f0" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-$0" );
+ xmlWriter->addAttribute( "draw:name", "f1" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 *10/24" );
+ xmlWriter->addAttribute( "draw:name", "f2" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "?f2 +1750");
+ xmlWriter->addAttribute( "draw:name", "f3" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-?f3" );
+ xmlWriter->addAttribute( "draw:name", "f4" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "?f0 /2" );
+ xmlWriter->addAttribute( "draw:name", "f5" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "10800+?f5" );
+ xmlWriter->addAttribute( "draw:name", "f6" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "?f0-10800 " );
+ xmlWriter->addAttribute( "draw:name", "f7" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "if(?f7,?f12,0" );
+ xmlWriter->addAttribute( "draw:name", "f8" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "10800-?f5" );
+ xmlWriter->addAttribute( "draw:name", "f9" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "if(?f7, ?f12, 21600");
+ xmlWriter->addAttribute( "draw:name", "f10" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-?f5" );
+ xmlWriter->addAttribute( "draw:name", "f11" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600*10800/?f0" );
+ xmlWriter->addAttribute( "draw:name", "f12" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-?f12" );
+ xmlWriter->addAttribute( "draw:name", "f13" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:handle" );
+ xmlWriter->addAttribute( "draw:handle-range-x-maximum", 21600);
+ xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
+ xmlWriter->addAttribute("draw:handle-position","$0 top");
+ xmlWriter->endElement();
+ xmlWriter->endElement(); // enhanced-geometry
+ xmlWriter->endElement(); // custom-shape
+}
+
+void PowerPointImport::processHexagon (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 0 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 0 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 10 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+ xmlWriter->addAttribute( "draw:type", "hexagon" );
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 " );
+ xmlWriter->addAttribute( "draw:name", "f0" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-$0" );
+ xmlWriter->addAttribute( "draw:name", "f1" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 *100/234" );
+ xmlWriter->addAttribute( "draw:name", "f2" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "?f2 +1700");
+ xmlWriter->addAttribute( "draw:name", "f3" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "21600-?f3" );
+ xmlWriter->addAttribute( "draw:name", "f4" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:handle" );
+ xmlWriter->addAttribute( "draw:handle-range-x-maximum", 10800);
+ xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
+ xmlWriter->addAttribute("draw:handle-position","$0 top");
+ xmlWriter->endElement();
+ xmlWriter->endElement(); // enhanced-geometry
+ xmlWriter->endElement(); // custom-shape
+}
+
+void PowerPointImport::processOctagon (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 0 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 0 );
+ xmlWriter->addAttribute( "svg:y", 4.782 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 10 );
+ xmlWriter->addAttribute( "svg:y", 4.782 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+ xmlWriter->addAttribute( "draw:type", "octagon" );
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "left+$0 " );
+ xmlWriter->addAttribute( "draw:name", "f0" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "top+$0 " );
+ xmlWriter->addAttribute( "draw:name", "f1" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "right-$0 " );
+ xmlWriter->addAttribute( "draw:name", "f2" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "bottom-$0 ");
+ xmlWriter->addAttribute( "draw:name", "f3" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0 /2" );
+ xmlWriter->addAttribute( "draw:name", "f4" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "left+?f4 " );
+ xmlWriter->addAttribute( "draw:name", "f5" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "top+?f4 " );
+ xmlWriter->addAttribute( "draw:name", "f6" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "right-?f4 " );
+ xmlWriter->addAttribute( "draw:name", "f7" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "bottom-?f4 ");
+ xmlWriter->addAttribute( "draw:name", "f8" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:handle" );
+ xmlWriter->addAttribute( "draw:handle-range-x-maximum", 10800);
+ xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
+ xmlWriter->addAttribute("draw:handle-position","$0 top");
+ xmlWriter->endElement();
+ xmlWriter->endElement(); // enhanced-geometry
+ xmlWriter->endElement(); // custom-shape
+}
+
+void PowerPointImport::processArrow (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+
+ if (drawObject->shape() == DrawObject::RightArrow)
+ xmlWriter->addAttribute( "draw:type", "right-arrow" );
+ else if (drawObject->shape() == DrawObject::LeftArrow)
+ xmlWriter->addAttribute( "draw:type", "left-arrow" );
+ else if (drawObject->shape() == DrawObject::UpArrow)
+ xmlWriter->addAttribute( "draw:type", "up-arrow" );
+ else if (drawObject->shape() == DrawObject::DownArrow)
+ xmlWriter->addAttribute( "draw:type", "down-arrow" );
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula","$1");
+ xmlWriter->addAttribute( "draw:name","f0");
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula","$0");
+ xmlWriter->addAttribute( "draw:name","f1");
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula","21600-$1");
+ xmlWriter->addAttribute( "draw:name","f2");
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula","21600-?f1");
+ xmlWriter->addAttribute( "draw:name","f3");
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula","?f3 *?f0 /10800");
+ xmlWriter->addAttribute( "draw:name","f4");
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula","?f1 +?f4 " );
+ xmlWriter->addAttribute( "draw:name","f5");
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula","?f1 *?f0 /10800");
+ xmlWriter->addAttribute( "draw:name","f6");
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula","?f1 -?f6 ");
+ xmlWriter->addAttribute( "draw:name","f7");
+ xmlWriter->endElement(); // draw:equation
+ xmlWriter->startElement( "draw:handle" );
+ if ( drawObject->shape() == DrawObject::RightArrow | drawObject->shape() == DrawObject::LeftArrow )
+ {
+ xmlWriter->addAttribute( "draw:handle-range-x-maximum", 21600);
+ xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
+ xmlWriter->addAttribute("draw:handle-position","$0 $1");
+ xmlWriter->addAttribute("draw:handle-range-y-maximum",10800);
+ xmlWriter->addAttribute("draw:handle-range-y-minimum",0);
+ }
+ else if ( drawObject->shape() == DrawObject::UpArrow | drawObject->shape() == DrawObject::DownArrow )
+ {
+ xmlWriter->addAttribute( "draw:handle-range-x-maximum", 10800);
+ xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
+ xmlWriter->addAttribute("draw:handle-position","$1 $0");
+ xmlWriter->addAttribute("draw:handle-range-y-maximum",21600);
+ xmlWriter->addAttribute("draw:handle-range-y-minimum",0);
+ }
+ xmlWriter->endElement(); // draw:handle
+ xmlWriter->endElement(); // draw:enhanced-geometry
+ xmlWriter->endElement(); // draw:custom-shape
+}
+
+void PowerPointImport::processLine (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter) return;
+
+ TQString x1Str = TQString("%1mm").arg( drawObject->left() );
+ TQString y1Str = TQString("%1mm").arg( drawObject->top() );
+ TQString x2Str = TQString("%1mm").arg( drawObject->left() + drawObject->width() );
+ TQString y2Str = TQString("%1mm").arg( drawObject->top() + drawObject->height() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ if ( drawObject->hasProperty("draw:mirror-vertical") )
+ { TQString temp = y1Str;
+ y1Str = y2Str;
+ y2Str = temp;
+ }
+ if ( drawObject->hasProperty("draw:mirror-horizontal") )
+ { TQString temp = x1Str;
+ x1Str = x2Str;
+ x2Str = temp;
+ }
+
+ xmlWriter->startElement( "draw:line" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:y1", y1Str );
+ xmlWriter->addAttribute( "svg:y2", y2Str );
+ xmlWriter->addAttribute( "svg:x1", x1Str );
+ xmlWriter->addAttribute( "svg:x2", x2Str );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+
+ xmlWriter->endElement();
+}
+
+void PowerPointImport::processSmiley (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject ||!xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 0 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 1.461 );
+ xmlWriter->addAttribute( "svg:y", 1.461 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 0 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 1.461 );
+ xmlWriter->addAttribute( "svg:y", 8.536 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 10 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 8.536 );
+ xmlWriter->addAttribute( "svg:y", 1.461 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+ xmlWriter->addAttribute( "draw:type", "smiley" );
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "$0-15510 " );
+ xmlWriter->addAttribute( "draw:name", "f0" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "17520-?f0" );
+ xmlWriter->addAttribute( "draw:name", "f1" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:equation" );
+ xmlWriter->addAttribute( "draw:formula", "15510+?f0" );
+ xmlWriter->addAttribute( "draw:name", "f2" );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:handle" );
+ xmlWriter->addAttribute( "draw:position", 10800);
+ xmlWriter->addAttribute( "draw:handle-range-y-maximum", 17520);
+ xmlWriter->addAttribute( "draw:handle-range-y-minimum", 15510);
+ xmlWriter->addAttribute("draw:handle-position","$0 top");
+ xmlWriter->endElement();
+ xmlWriter->endElement(); // enhanced-geometry
+ xmlWriter->endElement(); // custom-shape
+}
+
+void PowerPointImport::processHeart (DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:custom-shape" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 1 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 1.43 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 5 );
+ xmlWriter->addAttribute( "svg:y", 10 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:glue-point" );
+ xmlWriter->addAttribute( "svg:x", 8.553 );
+ xmlWriter->addAttribute( "svg:y", 5 );
+ xmlWriter->endElement();
+ xmlWriter->startElement( "draw:enhanced-geometry" );
+ xmlWriter->addAttribute( "draw:type", "heart" );
+
+ xmlWriter->endElement(); // enhanced-geometry
+ xmlWriter->endElement(); // custom-shape
+}
+
+void PowerPointImport::processFreeLine (DrawObject* drawObject, KoXmlWriter* xmlWriter)
+{
+ if( !drawObject ||!xmlWriter ) return;
+
+ TQString widthStr = TQString("%1mm").arg( drawObject->width() );
+ TQString heightStr = TQString("%1mm").arg( drawObject->height() );
+ TQString xStr = TQString("%1mm").arg( drawObject->left() );
+ TQString yStr = TQString("%1mm").arg( drawObject->top() );
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "draw:path" );
+ xmlWriter->addAttribute( "draw:style-name", styleName );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->endElement(); // path
+}
+
+void PowerPointImport::processDrawingObjectForBody( DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+
+ if( !drawObject || !xmlWriter ) return;
+
+ drawingObjectCounter++;
+
+
+ if (drawObject->shape() == DrawObject::Ellipse)
+ {
+ processEllipse (drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::Rectangle)
+ {
+ processRectangle (drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::RoundRectangle)
+ {
+ processRoundRectangle (drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::Diamond)
+ {
+ processDiamond (drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::IsoscelesTriangle |
+ drawObject->shape() == DrawObject::RightTriangle)
+ {
+ processTriangle (drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::Trapezoid)
+ {
+ processTrapezoid (drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::Parallelogram)
+ {
+ processParallelogram( drawObject, xmlWriter);
+ }
+ else if (drawObject->shape() == DrawObject::Hexagon)
+ {
+ processHexagon ( drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::Octagon)
+ {
+ processOctagon ( drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::RightArrow |
+ drawObject->shape() == DrawObject::LeftArrow |
+ drawObject->shape() == DrawObject::UpArrow |
+ drawObject->shape() == DrawObject::DownArrow )
+ {
+ processArrow ( drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::Line)
+ {
+ processLine ( drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::Smiley)
+ {
+ processSmiley (drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::Heart)
+ {
+ processHeart (drawObject, xmlWriter );
+ }
+ else if (drawObject->shape() == DrawObject::FreeLine)
+ {
+ processFreeLine (drawObject, xmlWriter );
+ }
+}
+
+void PowerPointImport::processGroupObjectForBody( GroupObject* groupObject, KoXmlWriter* xmlWriter )
+{
+ if( !groupObject || !xmlWriter ) return;
+ if( !groupObject->objectCount() ) return;
+
+ xmlWriter->startElement( "draw:g" );
+
+ for( unsigned i = 0; i < groupObject->objectCount(); i++ )
+ {
+ Object* object = groupObject->object( i );
+ if( object )
+ processObjectForBody( object, xmlWriter );
+ }
+
+ xmlWriter->endElement(); // draw:g
+}
+
+void PowerPointImport::processTextObjectForBody( TextObject* textObject, KoXmlWriter* xmlWriter )
+{
+ if( !textObject || !xmlWriter ) return;
+
+ TQString classStr = "subtitle";
+ if( textObject->type() == TextObject::Title )
+ classStr = "title";
+// TQString pStr = string( textObject->text() ).string();
+ TQString pStr;
+
+ TQString widthStr = TQString("%1mm").arg( textObject->width() );
+ TQString heightStr = TQString("%1mm").arg( textObject->height() );
+ TQString xStr = TQString("%1mm").arg( textObject->left() );
+ TQString yStr = TQString("%1mm").arg( textObject->top() );
+
+ xmlWriter->startElement( "draw:frame" );
+ xmlWriter->addAttribute( "presentation:style-name", "pr1" );
+ xmlWriter->addAttribute( "draw:layer", "layout" );
+ xmlWriter->addAttribute( "svg:width", widthStr );
+ xmlWriter->addAttribute( "svg:height", heightStr );
+ xmlWriter->addAttribute( "svg:x", xStr );
+ xmlWriter->addAttribute( "svg:y", yStr );
+ xmlWriter->addAttribute( "presentation:class", classStr );
+ xmlWriter->startElement( "draw:text-box" );
+
+ // count error if i begins with 0
+ for (unsigned i=0; i<textObject->listSize(); i++)
+ {
+ pStr = Libppt::string(textObject->text(i)).string();
+ if (textObject->bulletFlag(i) == 1 )
+ {
+ xmlWriter->startElement( "text:list" );
+ xmlWriter->addAttribute( "text:style-name","L2");
+ xmlWriter->startElement( "text:list-item" );
+ xmlWriter->startElement( "text:p" );
+ xmlWriter->addAttribute( "text:style-name", "P1" );
+ xmlWriter->addTextSpan( pStr );
+ xmlWriter->endElement(); // text:p
+ xmlWriter->endElement(); // text:list-item
+ xmlWriter->endElement(); // text:list
+ }
+ else
+ {
+ xmlWriter->startElement( "text:p" );
+ xmlWriter->addAttribute( "text:style-name", "P1" );
+ xmlWriter->addTextSpan( pStr );
+ xmlWriter->endElement(); // text:p
+ }
+ }
+
+ xmlWriter->endElement(); // draw:text-box
+ xmlWriter->endElement(); // draw:frame
+
+
+}
+
+void PowerPointImport::processObjectForBody( Object* object, KoXmlWriter* xmlWriter )
+{
+ if( !object || !xmlWriter) return;
+
+ if( object->isText() )
+ processTextObjectForBody( static_cast<TextObject*>(object), xmlWriter );
+ else if( object->isGroup() )
+ processGroupObjectForBody( static_cast<GroupObject*>(object), xmlWriter );
+ else if( object->isDrawing() )
+ processDrawingObjectForBody( static_cast<DrawObject*>(object), xmlWriter );
+}
+
+void PowerPointImport::processSlideForBody( unsigned slideNo, Slide* slide, KoXmlWriter* xmlWriter )
+{
+ if( !slide || !xmlWriter ) return;
+
+ TQString nameStr = Libppt::string( slide->title() ).string();
+ if( nameStr.isEmpty() )
+ nameStr = TQString("page%1").arg(slideNo+1);
+
+ TQString styleNameStr = TQString("dp%1").arg(slideNo+1);
+
+ xmlWriter->startElement( "draw:page" );
+ xmlWriter->addAttribute( "draw:master-page-name", "Default" );
+ xmlWriter->addAttribute( "draw:name", nameStr );
+ xmlWriter->addAttribute( "draw:style-name", styleNameStr );
+ xmlWriter->addAttribute( "presentation:presentation-page-layout-name", "AL1T0");
+
+ GroupObject* root = slide->rootObject();
+ if( root )
+ for( unsigned i = 0; i < root->objectCount(); i++ )
+ {
+ Object* object = root->object( i );
+ if( object )
+ processObjectForBody( object, xmlWriter );
+ }
+
+ xmlWriter->endElement(); // draw:page
+}
+
+void PowerPointImport::processSlideForStyle( unsigned , Slide* slide, KoXmlWriter* xmlWriter )
+{
+ if( !slide || !xmlWriter ) return;
+
+ GroupObject* root = slide->rootObject();
+ if( root )
+ for( unsigned i = 0; i < root->objectCount(); i++ )
+ {
+ Object* object = root->object( i );
+ if( object )
+ processObjectForStyle( object, xmlWriter );
+ }
+}
+
+void PowerPointImport::processObjectForStyle( Object* object, KoXmlWriter* xmlWriter )
+{
+ if( !object || !xmlWriter ) return;
+
+ if( object->isText() )
+ processTextObjectForStyle( static_cast<TextObject*>(object), xmlWriter );
+ else if( object->isGroup() )
+ processGroupObjectForStyle( static_cast<GroupObject*>(object), xmlWriter );
+ else if( object->isDrawing() )
+ processDrawingObjectForStyle( static_cast<DrawObject*>(object), xmlWriter );
+}
+
+void PowerPointImport::processTextObjectForStyle( TextObject* textObject, KoXmlWriter* xmlWriter )
+{
+ if( !textObject || !xmlWriter ) return;
+}
+
+void PowerPointImport::processGroupObjectForStyle( GroupObject* groupObject, KoXmlWriter* xmlWriter )
+{
+ if( !groupObject ||!xmlWriter ) return;
+}
+
+TQString hexname( const Color &c )
+{
+ TQColor qc( c.red, c.green, c.blue );
+ return qc.name();
+}
+
+void PowerPointImport::processDrawingObjectForStyle( DrawObject* drawObject, KoXmlWriter* xmlWriter )
+{
+ if( !drawObject || !xmlWriter) return;
+
+ drawingObjectCounter++;
+ TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
+
+ xmlWriter->startElement( "style:style" );
+ xmlWriter->addAttribute( "style:name", styleName );
+ xmlWriter->addAttribute( "style:family", "graphic" );
+ xmlWriter->addAttribute( "style:parent-style-name", "standard" );
+
+ xmlWriter->startElement( "style:graphic-properties" );
+/*
+ if (drawObject->hasProperty("draw:stroke") )
+ {
+ xmlWriter->addAttribute( "draw:stroke", "dash" );
+ std::string s = drawObject->getStrProperty("draw:stroke-dash");
+ TQString ss( s.c_str() );
+ xmlWriter->addAttribute( "draw:stroke-dash", ss );
+ } else xmlWriter->addAttribute( "draw:stroke", "dash" );
+*/
+ if (drawObject->hasProperty( "libppt:invisibleLine" ))
+ {
+ if (drawObject->getBoolProperty("libppt:invisibleLine") == true)
+ xmlWriter->addAttribute( "draw:stroke", "none" );
+ }
+ else if( drawObject->hasProperty( "draw:stroke" ) )
+ { if (drawObject->getStrProperty( "draw:stroke" ) == "dash")
+ {
+ xmlWriter->addAttribute( "draw:stroke", "dash" );
+ std::string s = drawObject->getStrProperty("draw:stroke-dash");
+ TQString ss( s.c_str() );
+ xmlWriter->addAttribute( "draw:stroke-dash", ss );
+ tqDebug("=============stroke dash===================");
+// tqDebug("test %g\n",angka);
+ }
+ else if (drawObject->getStrProperty( "draw:stroke" ) == "solid")
+ xmlWriter->addAttribute( "draw:stroke", "solid" );
+ }
+
+
+ if( drawObject->hasProperty( "svg:stroke-width" ) )
+ {
+ double strokeWidth = drawObject->getDoubleProperty("svg:stroke-width" );
+ xmlWriter->addAttribute( "svg:stroke-width",TQString("%1mm").arg( strokeWidth ) );
+ }
+
+ if( drawObject->hasProperty( "svg:stroke-color" ) )
+ {
+ Color strokeColor = drawObject->getColorProperty("svg:stroke-color" );
+ xmlWriter->addAttribute( "svg:stroke-color", hexname( strokeColor ) );
+ }
+
+ if( drawObject->hasProperty( "draw:marker-start" ) )
+ {
+ std::string s = drawObject->getStrProperty("draw:marker-start");
+ TQString ss( s.c_str() );
+ xmlWriter->addAttribute( "draw:marker-start", ss );
+ }
+ if( drawObject->hasProperty( "draw:marker-end" ) )
+ {
+ std::string s = drawObject->getStrProperty("draw:marker-end");
+ TQString ss( s.c_str() );
+ xmlWriter->addAttribute( "draw:marker-end", ss);
+ }
+/* if( drawObject->hasProperty( "draw:marker-start-length" ) )
+ {
+ std::string s = drawObject->getStrProperty("draw:marker-start-length");
+ TQString ss( s.c_str() );
+ xmlWriter->addAttribute("draw:marker-start-length", ss );
+ }
+ if( drawObject->hasProperty( "draw:marker-end-length" ) )
+ {
+ std::string s = drawObject->getStrProperty("draw:marker-end-length");
+ TQString ss( s.c_str() );
+ xmlWriter->addAttribute( "draw:marker-end-length", ss);
+ } */
+
+ if( drawObject->hasProperty( "draw:marker-start-width" ) )
+ {
+ double strokeWidth = drawObject->getDoubleProperty("svg:stroke-width" );
+ double arrowWidth = (drawObject->getDoubleProperty("draw:marker-start-width") * strokeWidth);
+ xmlWriter->addAttribute( "draw:marker-start-width",TQString("%1cm").arg( arrowWidth ) );
+ }
+
+ if( drawObject->hasProperty( "draw:marker-end-width" ) )
+ {
+ double strokeWidth = drawObject->getDoubleProperty("svg:stroke-width" );
+ double arrowWidth = (drawObject->getDoubleProperty("draw:marker-end-width") * strokeWidth);
+ xmlWriter->addAttribute( "draw:marker-end-width",TQString("%1cm").arg( arrowWidth ) );
+ }
+
+
+
+ if( drawObject->hasProperty( "draw:fill" ) )
+ {
+ std::string s = drawObject->getStrProperty("draw:fill");
+ TQString ss( s.c_str() );
+ xmlWriter->addAttribute( "draw:fill", ss);
+ }
+
+
+
+ if( drawObject->hasProperty( "draw:fill-color" ) )
+ {
+ Color fillColor = drawObject->getColorProperty("draw:fill-color" );
+ xmlWriter->addAttribute( "draw:fill-color", hexname( fillColor ) );
+
+ } else xmlWriter->addAttribute( "draw:fill-color", "#99ccff" );
+
+#if 0
+ if( drawObject->hasProperty( "draw:shadow-color" ) )
+ {
+ xmlWriter->addAttribute( "draw:shadow", "visible" );
+ Color shadowColor = drawObject->getColorProperty("draw:shadow-color" );
+ xmlWriter->addAttribute( "draw:shadow-color", hexname( shadowColor ) );
+ }
+ else xmlWriter->addAttribute( "draw:shadow", "hidden" );
+#endif
+
+ if( drawObject->hasProperty( "draw:shadow-opacity" ) )
+ {
+ double opacity = drawObject->getDoubleProperty("draw:shadow-opacity") ;
+ xmlWriter->addAttribute( "draw:shadow-opacity",TQString("%1%").arg( opacity ) );
+ }
+
+ if( drawObject->hasProperty( "draw:shadow-offset-x" ) )
+ {
+ double offset = drawObject->getDoubleProperty("draw:shadow-offset-x") ;
+ xmlWriter->addAttribute( "draw:shadow-offset-x",TQString("%1cm").arg( offset ) );
+ }
+
+ if( drawObject->hasProperty( "draw:shadow-offset-y" ) )
+ {
+ double offset = drawObject->getDoubleProperty("draw:shadow-offset-y");
+ xmlWriter->addAttribute( "draw:shadow-offset-y",TQString("%1cm").arg( offset ) );
+ }
+
+
+ xmlWriter->endElement();
+
+ xmlWriter->endElement();
+}
+