00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <config.h>
00021
00022 #ifdef HAVE_UNISTD_H
00023 #include <unistd.h>
00024 #endif
00025
00026 #include <powerpointimport.h>
00027 #include <powerpointimport.moc>
00028
00029 #include <qbuffer.h>
00030 #include <qcstring.h>
00031 #include <qfile.h>
00032 #include <qstring.h>
00033 #include <qtextstream.h>
00034
00035 #include <kdebug.h>
00036 #include <KoFilterChain.h>
00037 #include <KoGlobal.h>
00038 #include <KoUnit.h>
00039 #include <kgenericfactory.h>
00040
00041 #include <KoXmlWriter.h>
00042
00043 #include "libppt.h"
00044 #include <iostream>
00045 #include <math.h>
00046
00047 using namespace Libppt;
00048
00049 typedef KGenericFactory<PowerPointImport, KoFilter> PowerPointImportFactory;
00050 K_EXPORT_COMPONENT_FACTORY( libpowerpointimport,
00051 PowerPointImportFactory( "kofficefilters" ) )
00052
00053 namespace Libppt {
00054
00055 inline QConstString string( const Libppt::UString& str )
00056 {
00057 return QConstString( reinterpret_cast<const QChar*>( str.data() ), str.length() );
00058 }
00059
00060 }
00061
00062 class PowerPointImport::Private
00063 {
00064 public:
00065 QString inputFile;
00066 QString outputFile;
00067
00068 Presentation *presentation;
00069 };
00070
00071
00072 PowerPointImport::PowerPointImport ( QObject*, const char*, const QStringList& )
00073 : KoFilter()
00074 {
00075 d = new Private;
00076 }
00077
00078 PowerPointImport::~PowerPointImport()
00079 {
00080 delete d;
00081 }
00082
00083 KoFilter::ConversionStatus PowerPointImport::convert( const QCString& from, const QCString& to )
00084 {
00085 if ( from != "application/mspowerpoint" )
00086 return KoFilter::NotImplemented;
00087
00088 if ( to != "application/vnd.oasis.opendocument.presentation" )
00089 return KoFilter::NotImplemented;
00090
00091 d->inputFile = m_chain->inputFile();
00092 d->outputFile = m_chain->outputFile();
00093
00094
00095 d->presentation = new Presentation;
00096 if( !d->presentation->load( d->inputFile.local8Bit() ) )
00097 {
00098 delete d->presentation;
00099 d->presentation = 0;
00100 return KoFilter::StupidError;
00101 }
00102
00103
00104 KoStore* storeout;
00105 storeout = KoStore::createStore( d->outputFile, KoStore::Write,
00106 "application/vnd.oasis.opendocument.presentation", KoStore::Zip );
00107
00108 if ( !storeout )
00109 {
00110 kdWarning() << "Couldn't open the requested file." << endl;
00111 return KoFilter::FileNotFound;
00112 }
00113
00114
00115 if ( !storeout->open( "content.xml" ) )
00116 {
00117 kdWarning() << "Couldn't open the file 'content.xml'." << endl;
00118 return KoFilter::CreationError;
00119 }
00120 storeout->write( createContent() );
00121 storeout->close();
00122
00123
00124 if ( !storeout->open( "styles.xml" ) )
00125 {
00126 kdWarning() << "Couldn't open the file 'styles.xml'." << endl;
00127 return KoFilter::CreationError;
00128 }
00129 storeout->write( createStyles() );
00130 storeout->close();
00131
00132
00133 storeout->enterDirectory( "META-INF" );
00134 if ( !storeout->open( "manifest.xml" ) )
00135 {
00136 kdWarning() << "Couldn't open the file 'META-INF/manifest.xml'." << endl;
00137 return KoFilter::CreationError;
00138 }
00139 storeout->write( createManifest() );
00140 storeout->close();
00141
00142
00143
00144 delete d->presentation;
00145 delete storeout;
00146 d->inputFile = QString::null;
00147 d->outputFile = QString::null;
00148 d->presentation = 0;
00149
00150 return KoFilter::OK;
00151 }
00152
00153 QByteArray PowerPointImport::createStyles()
00154 {
00155 KoXmlWriter* stylesWriter;
00156 QByteArray stylesData;
00157 QBuffer stylesBuffer( stylesData );
00158
00159 QString pageWidth = QString("%1pt").arg( d->presentation->masterSlide()->pageWidth() );
00160 QString pageHeight = QString("%1pt").arg( d->presentation->masterSlide()->pageHeight() );
00161
00162 stylesBuffer.open( IO_WriteOnly );
00163 stylesWriter = new KoXmlWriter( &stylesBuffer );
00164
00165 stylesWriter->startDocument( "office:document-styles" );
00166 stylesWriter->startElement( "office:document-styles" );
00167 stylesWriter->addAttribute( "xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0" );
00168 stylesWriter->addAttribute( "xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" );
00169 stylesWriter->addAttribute( "xmlns:presentation", "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" );
00170 stylesWriter->addAttribute( "xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" );
00171 stylesWriter->addAttribute( "xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0" );
00172 stylesWriter->addAttribute( "xmlns:fo", "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" );
00173 stylesWriter->addAttribute( "office:version","1.0" );
00174
00175
00176 stylesWriter->startElement( "office:styles" );
00177 stylesWriter->endElement();
00178
00179
00180 stylesWriter->startElement( "office:automatic-styles" );
00181 stylesWriter->startElement( "style:page-layout" );
00182 stylesWriter->addAttribute( "style:name","pm1" );
00183 stylesWriter->addAttribute( "style:page-usage","all" );
00184 stylesWriter->startElement( "style:page-layout-properties" );
00185 stylesWriter->addAttribute( "fo:margin-bottom","0pt" );
00186 stylesWriter->addAttribute( "fo:margin-left","0pt" );
00187 stylesWriter->addAttribute( "fo:margin-right","0pt" );
00188 stylesWriter->addAttribute( "fo:margin-top","0pt" );
00189 stylesWriter->addAttribute( "fo:page-height", pageHeight );
00190 stylesWriter->addAttribute( "fo:page-width", pageWidth );
00191 stylesWriter->addAttribute( "style:print-orientation","landscape" );
00192 stylesWriter->endElement();
00193 stylesWriter->endElement();
00194
00195 stylesWriter->startElement( "style:style" );
00196 stylesWriter->addAttribute( "style:name","dp1" );
00197 stylesWriter->addAttribute( "style:family","drawing-page" );
00198 stylesWriter->startElement( "style:drawing-page-properties" );
00199 stylesWriter->addAttribute( "draw:background-size","border" );
00200 stylesWriter->addAttribute( "draw:fill","solid" );
00201 stylesWriter->addAttribute( "draw:fill-color","#ffffff" );
00202 stylesWriter->endElement();
00203 stylesWriter->endElement();
00204
00205 stylesWriter->startElement( "style:style" );
00206 stylesWriter->addAttribute( "style:name","P1" );
00207 stylesWriter->addAttribute( "style:family","paragraph" );
00208 stylesWriter->startElement( "style:paragraph-properties" );
00209 stylesWriter->addAttribute( "fo:margin-left","0cm" );
00210 stylesWriter->addAttribute( "fo:margin-right","0cm" );
00211 stylesWriter->addAttribute( "fo:text-indent","0cm" );
00212 stylesWriter->endElement();
00213 stylesWriter->startElement( "style:text-properties" );
00214 stylesWriter->addAttribute( "fo:font-size","14pt" );
00215 stylesWriter->addAttribute( "style:font-size-asian","14pt" );
00216 stylesWriter->addAttribute( "style:font-size-complex","14pt" );
00217 stylesWriter->endElement();
00218 stylesWriter->endElement();
00219
00220 stylesWriter->startElement( "text:list-style" );
00221 stylesWriter->addAttribute( "style:name","L2" );
00222 stylesWriter->startElement( "text:list-level-style-bullet" );
00223 stylesWriter->addAttribute( "text:level","1" );
00224 stylesWriter->addAttribute( "text:bullet-char","●" );
00225 stylesWriter->startElement( "style:text-properties" );
00226 stylesWriter->addAttribute( "fo:font-family","StarSymbol" );
00227 stylesWriter->addAttribute( "font-pitch","variable" );
00228 stylesWriter->addAttribute( "fo:color","#000000" );
00229 stylesWriter->addAttribute( "fo:font-size","45%" );
00230 stylesWriter->endElement();
00231 stylesWriter->endElement();
00232 stylesWriter->endElement();
00233
00234 stylesWriter->endElement();
00235
00236
00237 stylesWriter->startElement( "office:master-styles" );
00238 stylesWriter->startElement( "style:master-page" );
00239 stylesWriter->addAttribute( "style:name", "Standard" );
00240 stylesWriter->addAttribute( "style:page-layout-name", "pm1" );
00241 stylesWriter->addAttribute( "draw:style-name", "dp1" );
00242 stylesWriter->endElement();
00243 stylesWriter->endElement();
00244
00245 stylesWriter->endElement();
00246 stylesWriter->endDocument();
00247 delete stylesWriter;
00248
00249
00250 QString dbg;
00251 for( unsigned i=0; i<stylesData.size(); i++ )
00252 dbg.append( stylesData[i] );
00253 qDebug("\nstyles.xml:\n%s\n", dbg.latin1() );
00254
00255 return stylesData;
00256 }
00257
00258
00259 QByteArray PowerPointImport::createContent()
00260 {
00261 KoXmlWriter* contentWriter;
00262 QByteArray contentData;
00263 QBuffer contentBuffer( contentData );
00264
00265 contentBuffer.open( IO_WriteOnly );
00266 contentWriter = new KoXmlWriter( &contentBuffer );
00267
00268 contentWriter->startDocument( "office:document-content" );
00269 contentWriter->startElement( "office:document-content" );
00270 contentWriter->addAttribute( "xmlns:office", "urn:oasis:names:tc:opendocument:xmlns:office:1.0" );
00271 contentWriter->addAttribute( "xmlns:style", "urn:oasis:names:tc:opendocument:xmlns:style:1.0" );
00272 contentWriter->addAttribute( "xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0" );
00273 contentWriter->addAttribute( "xmlns:draw", "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" );
00274 contentWriter->addAttribute( "xmlns:presentation", "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" );
00275 contentWriter->addAttribute( "xmlns:svg","urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" );
00276 contentWriter->addAttribute( "office:version","1.0" );
00277
00278
00279
00280 drawingObjectCounter = 0;
00281 contentWriter->startElement( "office:automatic-styles" );
00282 for( unsigned c=0; c < d->presentation->slideCount(); c++ )
00283 {
00284 Slide* slide = d->presentation->slide( c );
00285 processSlideForStyle( c, slide, contentWriter );
00286 }
00287 contentWriter->endElement();
00288
00289
00290
00291
00292
00293 contentWriter->startElement( "office:body" );
00294 contentWriter->startElement( "office:presentation" );
00295
00296 drawingObjectCounter = 0;
00297 for( unsigned c=0; c < d->presentation->slideCount(); c++ )
00298 {
00299 Slide* slide = d->presentation->slide( c );
00300 processSlideForBody( c, slide, contentWriter );
00301 }
00302
00303 contentWriter->endElement();
00304 contentWriter->endElement();
00305
00306 contentWriter->endElement();
00307 contentWriter->endDocument();
00308 delete contentWriter;
00309
00310
00311 QString dbg;
00312 for( unsigned i=0; i<contentData.size(); i++ )
00313 dbg.append( contentData[i] );
00314 qDebug("\ncontent.xml:\n%s\n", dbg.latin1() );
00315
00316 return contentData;
00317 }
00318
00319 QByteArray PowerPointImport::createManifest()
00320 {
00321 KoXmlWriter* manifestWriter;
00322 QByteArray manifestData;
00323 QBuffer manifestBuffer( manifestData );
00324
00325 manifestBuffer.open( IO_WriteOnly );
00326 manifestWriter = new KoXmlWriter( &manifestBuffer );
00327
00328 manifestWriter->startDocument( "manifest:manifest" );
00329 manifestWriter->startElement( "manifest:manifest" );
00330 manifestWriter->addAttribute( "xmlns:manifest",
00331 "urn:oasis:names:tc:openoffice:xmlns:manifest:1.0" );
00332
00333 manifestWriter->addManifestEntry( "/", "application/vnd.oasis.opendocument.presentation" );
00334 manifestWriter->addManifestEntry( "styles.xml", "text/xml" );
00335 manifestWriter->addManifestEntry( "content.xml", "text/xml" );
00336
00337 manifestWriter->endElement();
00338 manifestWriter->endDocument();
00339 delete manifestWriter;
00340
00341
00342 QString dbg;
00343 for( unsigned i=0; i<manifestData.size(); i++ )
00344 dbg.append( manifestData[i] );
00345 qDebug("\nmanifest.xml:\n%s\n", dbg.latin1() );
00346
00347 return manifestData;
00348 }
00349
00350 void PowerPointImport::processEllipse (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00351 {
00352 if( !drawObject || !xmlWriter ) return;
00353
00354 QString widthStr = QString("%1mm").arg( drawObject->width() );
00355 QString heightStr = QString("%1mm").arg( drawObject->height() );
00356 QString xStr = QString("%1mm").arg( drawObject->left() );
00357 QString yStr = QString("%1mm").arg( drawObject->top() );
00358 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00359
00360 xmlWriter->startElement( "draw:ellipse" );
00361 xmlWriter->addAttribute( "draw:style-name", styleName );
00362 xmlWriter->addAttribute( "svg:width", widthStr );
00363 xmlWriter->addAttribute( "svg:height", heightStr );
00364 xmlWriter->addAttribute( "svg:x", xStr );
00365 xmlWriter->addAttribute( "svg:y", yStr );
00366 xmlWriter->addAttribute( "draw:layer", "layout" );
00367 xmlWriter->endElement();
00368 }
00369
00370 void PowerPointImport::processRectangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00371 {
00372 if( !drawObject ) return;
00373 if( !xmlWriter ) return;
00374
00375 QString widthStr = QString("%1mm").arg( drawObject->width() );
00376 QString heightStr = QString("%1mm").arg( drawObject->height() );
00377 QString xStr = QString("%1mm").arg( drawObject->left() );
00378 QString yStr = QString("%1mm").arg( drawObject->top() );
00379 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00380
00381 xmlWriter->startElement( "draw:rect" );
00382 xmlWriter->addAttribute( "draw:style-name", styleName );
00383 xmlWriter->addAttribute( "svg:width", widthStr );
00384 xmlWriter->addAttribute( "svg:height", heightStr );
00385 if ( drawObject->hasProperty ( "libppt:rotation" ) )
00386 {
00387
00388 double rotAngle = drawObject->getDoubleProperty("libppt:rotation" );
00389 double xMid = ( drawObject->left() + 0.5*drawObject->width() );
00390 double yMid = ( drawObject->top() + 0.5*drawObject->height() );
00391 double xVec = drawObject->left()- xMid;
00392 double yVec = yMid - drawObject->top();
00393
00394 double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
00395 double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
00396 QString rot = QString("rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid-yNew);
00397 xmlWriter->addAttribute( "draw:transform", rot );
00398 }
00399 else
00400 {
00401 xmlWriter->addAttribute( "svg:x", xStr );
00402 xmlWriter->addAttribute( "svg:y", yStr );
00403 }
00404 xmlWriter->addAttribute( "draw:layer", "layout" );
00405 xmlWriter->endElement();
00406 }
00407
00408 void PowerPointImport::processRoundRectangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00409 {
00410 if( !drawObject || !xmlWriter ) return;
00411
00412 QString widthStr = QString("%1mm").arg( drawObject->width() );
00413 QString heightStr = QString("%1mm").arg( drawObject->height() );
00414 QString xStr = QString("%1mm").arg( drawObject->left() );
00415 QString yStr = QString("%1mm").arg( drawObject->top() );
00416 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00417
00418 xmlWriter->startElement( "draw:custom-shape" );
00419 xmlWriter->addAttribute( "draw:style-name", styleName );
00420
00421
00422 if ( drawObject->hasProperty ( "libppt:rotation" ) )
00423 {
00424 double rotAngle = drawObject->getDoubleProperty("libppt:rotation" );
00425
00426
00427
00428 if ( rotAngle > 0.785399 )
00429 { xmlWriter->addAttribute( "svg:width", heightStr );
00430 xmlWriter->addAttribute( "svg:height", widthStr );
00431 double xMid = ( drawObject->left() - 0.5*drawObject->height() );
00432 double yMid = ( drawObject->top() + 0.5*drawObject->width() );
00433 double xVec = drawObject->left()- xMid;
00434 double yVec = drawObject->top()- yMid;
00435
00436 double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
00437 double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
00438 QString rot = QString("rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid+yNew);
00439 xmlWriter->addAttribute( "draw:transform", rot );
00440 }
00441 else
00442 { xmlWriter->addAttribute( "svg:width", widthStr );
00443 xmlWriter->addAttribute( "svg:height", heightStr );
00444 double xMid = ( drawObject->left() + 0.5*drawObject->width() );
00445 double yMid = ( drawObject->top() + 0.5*drawObject->height() );
00446 double xVec = drawObject->left()- xMid;
00447 double yVec = yMid - drawObject->top();
00448
00449 double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
00450 double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
00451 QString rot = QString("rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid-yNew);
00452 xmlWriter->addAttribute( "draw:transform", rot );
00453 }
00454
00455
00456 }
00457 else
00458 { xmlWriter->addAttribute( "svg:width", widthStr );
00459 xmlWriter->addAttribute( "svg:height", heightStr );
00460 xmlWriter->addAttribute( "svg:x", xStr );
00461 xmlWriter->addAttribute( "svg:y", yStr );
00462 }
00463
00464
00465
00466 xmlWriter->addAttribute( "draw:layer", "layout" );
00467 xmlWriter->startElement( "draw:enhanced-geometry" );
00468 xmlWriter->addAttribute( "draw:type", "round-rectangle");
00469 xmlWriter->startElement( "draw:equation" );
00470 xmlWriter->addAttribute( "draw:formula", "$0 /3" );
00471 xmlWriter->addAttribute( "draw:name", "f0" );
00472 xmlWriter->endElement();
00473 xmlWriter->startElement( "draw:equation" );
00474 xmlWriter->addAttribute( "draw:formula", "right-?f0 " );
00475 xmlWriter->addAttribute( "draw:name", "f1" );
00476 xmlWriter->endElement();
00477 xmlWriter->startElement( "draw:equation" );
00478 xmlWriter->addAttribute( "draw:formula", "bottom-?f0 " );
00479 xmlWriter->addAttribute( "draw:name", "f2" );
00480 xmlWriter->endElement();
00481 xmlWriter->startElement( "draw:equation" );
00482 xmlWriter->addAttribute( "draw:formula", "left+?f0 " );
00483 xmlWriter->addAttribute( "draw:name", "f3" );
00484 xmlWriter->endElement();
00485 xmlWriter->startElement( "draw:equation" );
00486 xmlWriter->addAttribute( "draw:formula", "top+?f0 " );
00487 xmlWriter->addAttribute( "draw:name", "f4" );
00488 xmlWriter->endElement();
00489 xmlWriter->endElement();
00490 xmlWriter->endElement();
00491 }
00492
00493 void PowerPointImport::processDiamond (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00494 {
00495 if( !drawObject || !xmlWriter ) return;
00496
00497 QString widthStr = QString("%1mm").arg( drawObject->width() );
00498 QString heightStr = QString("%1mm").arg( drawObject->height() );
00499 QString xStr = QString("%1mm").arg( drawObject->left() );
00500 QString yStr = QString("%1mm").arg( drawObject->top() );
00501 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00502
00503 xmlWriter->startElement( "draw:custom-shape" );
00504 xmlWriter->addAttribute( "draw:style-name", styleName );
00505 xmlWriter->addAttribute( "svg:width", widthStr );
00506 xmlWriter->addAttribute( "svg:height", heightStr );
00507 xmlWriter->addAttribute( "svg:x", xStr );
00508 xmlWriter->addAttribute( "svg:y", yStr );
00509 xmlWriter->startElement( "draw:glue-point" );
00510 xmlWriter->addAttribute( "svg:x", 5 );
00511 xmlWriter->addAttribute( "svg:y", 0 );
00512 xmlWriter->endElement();
00513 xmlWriter->startElement( "draw:glue-point" );
00514 xmlWriter->addAttribute( "svg:x", 0 );
00515 xmlWriter->addAttribute( "svg:y", 5 );
00516 xmlWriter->endElement();
00517 xmlWriter->startElement( "draw:glue-point" );
00518 xmlWriter->addAttribute( "svg:x", 5 );
00519 xmlWriter->addAttribute( "svg:y", 10 );
00520 xmlWriter->endElement();
00521 xmlWriter->startElement( "draw:glue-point" );
00522 xmlWriter->addAttribute( "svg:x", 10 );
00523 xmlWriter->addAttribute( "svg:y", 5 );
00524 xmlWriter->endElement();
00525 xmlWriter->startElement( "draw:enhanced-geometry" );
00526 xmlWriter->addAttribute( "draw:type", "diamond");
00527 xmlWriter->endElement();
00528 xmlWriter->addAttribute( "draw:layer", "layout" );
00529 xmlWriter->endElement();
00530 }
00531
00532 void PowerPointImport::processTriangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00533 {
00534 if( !drawObject || !xmlWriter ) return;
00535
00536 QString widthStr = QString("%1mm").arg( drawObject->width() );
00537 QString heightStr = QString("%1mm").arg( drawObject->height() );
00538 QString xStr = QString("%1mm").arg( drawObject->left() );
00539 QString yStr = QString("%1mm").arg( drawObject->top() );
00540 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00541
00542
00543 xmlWriter->startElement( "draw:custom-shape" );
00544 xmlWriter->addAttribute( "draw:style-name", styleName );
00545 xmlWriter->addAttribute( "svg:width", widthStr );
00546 xmlWriter->addAttribute( "svg:height", heightStr );
00547 xmlWriter->addAttribute( "svg:x", xStr );
00548 xmlWriter->addAttribute( "svg:y", yStr );
00549 xmlWriter->addAttribute( "draw:layer", "layout" );
00550 xmlWriter->startElement( "draw:glue-point" );
00551 xmlWriter->addAttribute( "svg:x", 5 );
00552 xmlWriter->addAttribute( "svg:y", 0 );
00553 xmlWriter->endElement();
00554 xmlWriter->startElement( "draw:glue-point" );
00555 xmlWriter->addAttribute( "svg:x", 2.5 );
00556 xmlWriter->addAttribute( "svg:y", 5 );
00557 xmlWriter->endElement();
00558 xmlWriter->startElement( "draw:glue-point" );
00559 xmlWriter->addAttribute( "svg:x", 0 );
00560 xmlWriter->addAttribute( "svg:y", 10 );
00561 xmlWriter->endElement();
00562 xmlWriter->startElement( "draw:glue-point" );
00563 xmlWriter->addAttribute( "svg:x", 5 );
00564 xmlWriter->addAttribute( "svg:y", 10 );
00565 xmlWriter->endElement();
00566 xmlWriter->startElement( "draw:glue-point" );
00567 xmlWriter->addAttribute( "svg:x", 10 );
00568 xmlWriter->addAttribute( "svg:y", 10 );
00569 xmlWriter->endElement();
00570 xmlWriter->startElement( "draw:glue-point" );
00571 xmlWriter->addAttribute( "svg:x", 7.5 );
00572 xmlWriter->addAttribute( "svg:y", 5 );
00573 xmlWriter->endElement();
00574
00575 xmlWriter->startElement( "draw:enhanced-geometry" );
00576
00577 if (drawObject->hasProperty("draw:mirror-vertical"))
00578 {
00579 xmlWriter->addAttribute("draw:mirror-vertical","true");
00580 }
00581 if ( drawObject->hasProperty("draw:mirror-horizontal"))
00582 {
00583 xmlWriter->addAttribute("draw:mirror-horizontal","true");
00584 }
00585 if ( drawObject->hasProperty ( "libppt:rotation" ) )
00586 {
00587
00588 double rotAngle = drawObject->getDoubleProperty("libppt:rotation" );
00589 double xMid = ( drawObject->left() + 0.5*drawObject->width() );
00590 double yMid = ( drawObject->top() + 0.5*drawObject->height() );
00591 QString rot = QString("rotate (%1) translate (%2cm %3cm)").arg(rotAngle).arg(xMid).arg(yMid);
00592 xmlWriter->addAttribute( "draw:transform", rot );
00593 }
00594 if (drawObject->shape() == DrawObject::RightTriangle)
00595 {
00596 xmlWriter->addAttribute( "draw:type", "right-triangle");
00597 }
00598 else if (drawObject->shape() == DrawObject::IsoscelesTriangle)
00599 {
00600 xmlWriter->addAttribute( "draw:type", "isosceles-triangle");
00601 xmlWriter->startElement( "draw:equation" );
00602 xmlWriter->addAttribute( "draw:formula", "$0 " );
00603 xmlWriter->addAttribute( "draw:name", "f0" );
00604 xmlWriter->endElement();
00605 xmlWriter->startElement( "draw:equation" );
00606 xmlWriter->addAttribute( "draw:formula", "$0 /2" );
00607 xmlWriter->addAttribute( "draw:name", "f1" );
00608 xmlWriter->endElement();
00609 xmlWriter->startElement( "draw:equation" );
00610 xmlWriter->addAttribute( "draw:formula", "?f1 +10800" );
00611 xmlWriter->addAttribute( "draw:name", "f2" );
00612 xmlWriter->endElement();
00613 xmlWriter->startElement( "draw:equation" );
00614 xmlWriter->addAttribute( "draw:formula", "$0 *2/3" );
00615 xmlWriter->addAttribute( "draw:name", "f3" );
00616 xmlWriter->endElement();
00617 xmlWriter->startElement( "draw:equation" );
00618 xmlWriter->addAttribute( "draw:formula", "?f3 +7200" );
00619 xmlWriter->addAttribute( "draw:name", "f4" );
00620 xmlWriter->endElement();
00621 xmlWriter->startElement( "draw:equation" );
00622 xmlWriter->addAttribute( "draw:formula", "21600-?f0 " );
00623 xmlWriter->addAttribute( "draw:name", "f5" );
00624 xmlWriter->endElement();
00625 xmlWriter->startElement( "draw:equation" );
00626 xmlWriter->addAttribute( "draw:formula", "?f5 /2" );
00627 xmlWriter->addAttribute( "draw:name", "f6" );
00628 xmlWriter->endElement();
00629 xmlWriter->startElement( "draw:equation" );
00630 xmlWriter->addAttribute( "draw:formula", "21600-?f6 " );
00631 xmlWriter->addAttribute( "draw:name", "f7" );
00632 xmlWriter->endElement();
00633 xmlWriter->startElement( "draw:handle" );
00634 xmlWriter->addAttribute( "draw:handle-range-x-maximum", 21600);
00635 xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
00636 xmlWriter->addAttribute( "draw:handle-position","$0 top");
00637 xmlWriter->endElement();
00638 }
00639
00640 xmlWriter->endElement();
00641 xmlWriter->endElement();
00642 }
00643
00644 void PowerPointImport::processTrapezoid (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00645 {
00646 if( !drawObject || !xmlWriter ) return;
00647
00648 QString widthStr = QString("%1mm").arg( drawObject->width() );
00649 QString heightStr = QString("%1mm").arg( drawObject->height() );
00650 QString xStr = QString("%1mm").arg( drawObject->left() );
00651 QString yStr = QString("%1mm").arg( drawObject->top() );
00652 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00653
00654 xmlWriter->startElement( "draw:custom-shape" );
00655 xmlWriter->addAttribute( "draw:style-name", styleName );
00656 xmlWriter->addAttribute( "svg:width", widthStr );
00657 xmlWriter->addAttribute( "svg:height", heightStr );
00658 xmlWriter->addAttribute( "svg:x", xStr );
00659 xmlWriter->addAttribute( "svg:y", yStr );
00660 xmlWriter->addAttribute( "draw:layer", "layout" );
00661
00662 xmlWriter->startElement( "draw:glue-point" );
00663 xmlWriter->addAttribute( "svg:x", 5 );
00664 xmlWriter->addAttribute( "svg:y", 0 );
00665 xmlWriter->endElement();
00666 xmlWriter->startElement( "draw:glue-point" );
00667 xmlWriter->addAttribute( "svg:x", 2.5 );
00668 xmlWriter->addAttribute( "svg:y", 5 );
00669 xmlWriter->endElement();
00670 xmlWriter->startElement( "draw:glue-point" );
00671 xmlWriter->addAttribute( "svg:x", 0 );
00672 xmlWriter->addAttribute( "svg:y", 10 );
00673 xmlWriter->endElement();
00674 xmlWriter->startElement( "draw:glue-point" );
00675 xmlWriter->addAttribute( "svg:x", 5 );
00676 xmlWriter->addAttribute( "svg:y", 10 );
00677 xmlWriter->endElement();
00678 xmlWriter->startElement( "draw:enhanced-geometry" );
00679 if ( drawObject->hasProperty("draw:mirror-vertical") )
00680 {
00681 xmlWriter->addAttribute("draw:mirror-vertical","true");
00682 }
00683 if ( drawObject->hasProperty("draw:mirror-horizontal"))
00684 {
00685 xmlWriter->addAttribute("draw:mirror-horizontal","true");
00686 }
00687 xmlWriter->addAttribute( "draw:type", "trapezoid" );
00688 xmlWriter->startElement( "draw:equation" );
00689 xmlWriter->addAttribute( "draw:formula", "21600-$0 " );
00690 xmlWriter->addAttribute( "draw:name", "f0" );
00691 xmlWriter->endElement();
00692 xmlWriter->startElement( "draw:equation" );
00693 xmlWriter->addAttribute( "draw:formula", "$0" );
00694 xmlWriter->addAttribute( "draw:name", "f1" );
00695 xmlWriter->endElement();
00696 xmlWriter->startElement( "draw:equation" );
00697 xmlWriter->addAttribute( "draw:formula", "$0 *10/18" );
00698 xmlWriter->addAttribute( "draw:name", "f2" );
00699 xmlWriter->endElement();
00700 xmlWriter->startElement( "draw:equation" );
00701 xmlWriter->addAttribute( "draw:formula", "?f2 +1750");
00702 xmlWriter->addAttribute( "draw:name", "f3" );
00703 xmlWriter->endElement();
00704 xmlWriter->startElement( "draw:equation" );
00705 xmlWriter->addAttribute( "draw:formula", "21600-?f3" );
00706 xmlWriter->addAttribute( "draw:name", "f4" );
00707 xmlWriter->endElement();
00708 xmlWriter->startElement( "draw:equation" );
00709 xmlWriter->addAttribute( "draw:formula", "$0 /2" );
00710 xmlWriter->addAttribute( "draw:name", "f5" );
00711 xmlWriter->endElement();
00712 xmlWriter->startElement( "draw:equation" );
00713 xmlWriter->addAttribute( "draw:formula", "21600-?f5" );
00714 xmlWriter->addAttribute( "draw:name", "f6" );
00715 xmlWriter->endElement();
00716 xmlWriter->startElement( "draw:handle" );
00717 xmlWriter->addAttribute( "draw:handle-range-x-maximum", 10800);
00718 xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
00719 xmlWriter->addAttribute("draw:handle-position","$0 bottom");
00720 xmlWriter->endElement();
00721 xmlWriter->endElement();
00722 xmlWriter->endElement();
00723 }
00724
00725 void PowerPointImport::processParallelogram (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00726 {
00727 if( !drawObject || !xmlWriter ) return;
00728
00729 QString widthStr = QString("%1mm").arg( drawObject->width() );
00730 QString heightStr = QString("%1mm").arg( drawObject->height() );
00731 QString xStr = QString("%1mm").arg( drawObject->left() );
00732 QString yStr = QString("%1mm").arg( drawObject->top() );
00733 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00734
00735 xmlWriter->startElement( "draw:custom-shape" );
00736 xmlWriter->addAttribute( "draw:style-name", styleName );
00737 xmlWriter->addAttribute( "svg:width", widthStr );
00738 xmlWriter->addAttribute( "svg:height", heightStr );
00739 xmlWriter->addAttribute( "svg:x", xStr );
00740 xmlWriter->addAttribute( "svg:y", yStr );
00741 xmlWriter->addAttribute( "draw:layer", "layout" );
00742 xmlWriter->startElement( "draw:glue-point" );
00743 xmlWriter->addAttribute( "svg:x", 6.25 );
00744 xmlWriter->addAttribute( "svg:y", 0 );
00745 xmlWriter->endElement();
00746 xmlWriter->startElement( "draw:glue-point" );
00747 xmlWriter->addAttribute( "svg:x", 4.5 );
00748 xmlWriter->addAttribute( "svg:y", 0 );
00749 xmlWriter->endElement();
00750 xmlWriter->startElement( "draw:glue-point" );
00751 xmlWriter->addAttribute( "svg:x", 8.75 );
00752 xmlWriter->addAttribute( "svg:y", 5 );
00753 xmlWriter->endElement();
00754 xmlWriter->startElement( "draw:glue-point" );
00755 xmlWriter->addAttribute( "svg:x", 3.75 );
00756 xmlWriter->addAttribute( "svg:y", 10 );
00757 xmlWriter->endElement();
00758 xmlWriter->startElement( "draw:glue-point" );
00759 xmlWriter->addAttribute( "svg:x", 5 );
00760 xmlWriter->addAttribute( "svg:y", 10 );
00761 xmlWriter->endElement();
00762 xmlWriter->startElement( "draw:glue-point" );
00763 xmlWriter->addAttribute( "svg:x", 1.25 );
00764 xmlWriter->addAttribute( "svg:y", 5 );
00765 xmlWriter->endElement();
00766 xmlWriter->startElement( "draw:enhanced-geometry" );
00767 if (drawObject->hasProperty("draw:mirror-vertical"))
00768 {
00769 xmlWriter->addAttribute("draw:mirror-vertical","true");
00770 }
00771 if ( drawObject->hasProperty("draw:mirror-horizontal"))
00772 {
00773 xmlWriter->addAttribute("draw:mirror-horizontal","true");
00774 }
00775 xmlWriter->addAttribute( "draw:type", "parallelogram" );
00776 xmlWriter->startElement( "draw:equation" );
00777 xmlWriter->addAttribute( "draw:formula", "$0 " );
00778 xmlWriter->addAttribute( "draw:name", "f0" );
00779 xmlWriter->endElement();
00780 xmlWriter->startElement( "draw:equation" );
00781 xmlWriter->addAttribute( "draw:formula", "21600-$0" );
00782 xmlWriter->addAttribute( "draw:name", "f1" );
00783 xmlWriter->endElement();
00784 xmlWriter->startElement( "draw:equation" );
00785 xmlWriter->addAttribute( "draw:formula", "$0 *10/24" );
00786 xmlWriter->addAttribute( "draw:name", "f2" );
00787 xmlWriter->endElement();
00788 xmlWriter->startElement( "draw:equation" );
00789 xmlWriter->addAttribute( "draw:formula", "?f2 +1750");
00790 xmlWriter->addAttribute( "draw:name", "f3" );
00791 xmlWriter->endElement();
00792 xmlWriter->startElement( "draw:equation" );
00793 xmlWriter->addAttribute( "draw:formula", "21600-?f3" );
00794 xmlWriter->addAttribute( "draw:name", "f4" );
00795 xmlWriter->endElement();
00796 xmlWriter->startElement( "draw:equation" );
00797 xmlWriter->addAttribute( "draw:formula", "?f0 /2" );
00798 xmlWriter->addAttribute( "draw:name", "f5" );
00799 xmlWriter->endElement();
00800 xmlWriter->startElement( "draw:equation" );
00801 xmlWriter->addAttribute( "draw:formula", "10800+?f5" );
00802 xmlWriter->addAttribute( "draw:name", "f6" );
00803 xmlWriter->endElement();
00804 xmlWriter->startElement( "draw:equation" );
00805 xmlWriter->addAttribute( "draw:formula", "?f0-10800 " );
00806 xmlWriter->addAttribute( "draw:name", "f7" );
00807 xmlWriter->endElement();
00808 xmlWriter->startElement( "draw:equation" );
00809 xmlWriter->addAttribute( "draw:formula", "if(?f7,?f12,0" );
00810 xmlWriter->addAttribute( "draw:name", "f8" );
00811 xmlWriter->endElement();
00812 xmlWriter->startElement( "draw:equation" );
00813 xmlWriter->addAttribute( "draw:formula", "10800-?f5" );
00814 xmlWriter->addAttribute( "draw:name", "f9" );
00815 xmlWriter->endElement();
00816 xmlWriter->startElement( "draw:equation" );
00817 xmlWriter->addAttribute( "draw:formula", "if(?f7, ?f12, 21600");
00818 xmlWriter->addAttribute( "draw:name", "f10" );
00819 xmlWriter->endElement();
00820 xmlWriter->startElement( "draw:equation" );
00821 xmlWriter->addAttribute( "draw:formula", "21600-?f5" );
00822 xmlWriter->addAttribute( "draw:name", "f11" );
00823 xmlWriter->endElement();
00824 xmlWriter->startElement( "draw:equation" );
00825 xmlWriter->addAttribute( "draw:formula", "21600*10800/?f0" );
00826 xmlWriter->addAttribute( "draw:name", "f12" );
00827 xmlWriter->endElement();
00828 xmlWriter->startElement( "draw:equation" );
00829 xmlWriter->addAttribute( "draw:formula", "21600-?f12" );
00830 xmlWriter->addAttribute( "draw:name", "f13" );
00831 xmlWriter->endElement();
00832 xmlWriter->startElement( "draw:handle" );
00833 xmlWriter->addAttribute( "draw:handle-range-x-maximum", 21600);
00834 xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
00835 xmlWriter->addAttribute("draw:handle-position","$0 top");
00836 xmlWriter->endElement();
00837 xmlWriter->endElement();
00838 xmlWriter->endElement();
00839 }
00840
00841 void PowerPointImport::processHexagon (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00842 {
00843 if( !drawObject || !xmlWriter ) return;
00844
00845 QString widthStr = QString("%1mm").arg( drawObject->width() );
00846 QString heightStr = QString("%1mm").arg( drawObject->height() );
00847 QString xStr = QString("%1mm").arg( drawObject->left() );
00848 QString yStr = QString("%1mm").arg( drawObject->top() );
00849 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00850
00851 xmlWriter->startElement( "draw:custom-shape" );
00852 xmlWriter->addAttribute( "draw:style-name", styleName );
00853 xmlWriter->addAttribute( "svg:width", widthStr );
00854 xmlWriter->addAttribute( "svg:height", heightStr );
00855 xmlWriter->addAttribute( "svg:x", xStr );
00856 xmlWriter->addAttribute( "svg:y", yStr );
00857 xmlWriter->addAttribute( "draw:layer", "layout" );
00858 xmlWriter->startElement( "draw:glue-point" );
00859 xmlWriter->addAttribute( "svg:x", 5 );
00860 xmlWriter->addAttribute( "svg:y", 0 );
00861 xmlWriter->endElement();
00862 xmlWriter->startElement( "draw:glue-point" );
00863 xmlWriter->addAttribute( "svg:x", 0 );
00864 xmlWriter->addAttribute( "svg:y", 5 );
00865 xmlWriter->endElement();
00866 xmlWriter->startElement( "draw:glue-point" );
00867 xmlWriter->addAttribute( "svg:x", 5 );
00868 xmlWriter->addAttribute( "svg:y", 10 );
00869 xmlWriter->endElement();
00870 xmlWriter->startElement( "draw:glue-point" );
00871 xmlWriter->addAttribute( "svg:x", 10 );
00872 xmlWriter->addAttribute( "svg:y", 5 );
00873 xmlWriter->endElement();
00874 xmlWriter->startElement( "draw:enhanced-geometry" );
00875 xmlWriter->addAttribute( "draw:type", "hexagon" );
00876 xmlWriter->startElement( "draw:equation" );
00877 xmlWriter->addAttribute( "draw:formula", "$0 " );
00878 xmlWriter->addAttribute( "draw:name", "f0" );
00879 xmlWriter->endElement();
00880 xmlWriter->startElement( "draw:equation" );
00881 xmlWriter->addAttribute( "draw:formula", "21600-$0" );
00882 xmlWriter->addAttribute( "draw:name", "f1" );
00883 xmlWriter->endElement();
00884 xmlWriter->startElement( "draw:equation" );
00885 xmlWriter->addAttribute( "draw:formula", "$0 *100/234" );
00886 xmlWriter->addAttribute( "draw:name", "f2" );
00887 xmlWriter->endElement();
00888 xmlWriter->startElement( "draw:equation" );
00889 xmlWriter->addAttribute( "draw:formula", "?f2 +1700");
00890 xmlWriter->addAttribute( "draw:name", "f3" );
00891 xmlWriter->endElement();
00892 xmlWriter->startElement( "draw:equation" );
00893 xmlWriter->addAttribute( "draw:formula", "21600-?f3" );
00894 xmlWriter->addAttribute( "draw:name", "f4" );
00895 xmlWriter->endElement();
00896 xmlWriter->startElement( "draw:handle" );
00897 xmlWriter->addAttribute( "draw:handle-range-x-maximum", 10800);
00898 xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
00899 xmlWriter->addAttribute("draw:handle-position","$0 top");
00900 xmlWriter->endElement();
00901 xmlWriter->endElement();
00902 xmlWriter->endElement();
00903 }
00904
00905 void PowerPointImport::processOctagon (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00906 {
00907 if( !drawObject || !xmlWriter ) return;
00908
00909 QString widthStr = QString("%1mm").arg( drawObject->width() );
00910 QString heightStr = QString("%1mm").arg( drawObject->height() );
00911 QString xStr = QString("%1mm").arg( drawObject->left() );
00912 QString yStr = QString("%1mm").arg( drawObject->top() );
00913 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00914
00915 xmlWriter->startElement( "draw:custom-shape" );
00916 xmlWriter->addAttribute( "draw:style-name", styleName );
00917 xmlWriter->addAttribute( "svg:width", widthStr );
00918 xmlWriter->addAttribute( "svg:height", heightStr );
00919 xmlWriter->addAttribute( "svg:x", xStr );
00920 xmlWriter->addAttribute( "svg:y", yStr );
00921 xmlWriter->addAttribute( "draw:layer", "layout" );
00922 xmlWriter->startElement( "draw:glue-point" );
00923 xmlWriter->addAttribute( "svg:x", 5 );
00924 xmlWriter->addAttribute( "svg:y", 0 );
00925 xmlWriter->endElement();
00926 xmlWriter->startElement( "draw:glue-point" );
00927 xmlWriter->addAttribute( "svg:x", 0 );
00928 xmlWriter->addAttribute( "svg:y", 4.782 );
00929 xmlWriter->endElement();
00930 xmlWriter->startElement( "draw:glue-point" );
00931 xmlWriter->addAttribute( "svg:x", 5 );
00932 xmlWriter->addAttribute( "svg:y", 10 );
00933 xmlWriter->endElement();
00934 xmlWriter->startElement( "draw:glue-point" );
00935 xmlWriter->addAttribute( "svg:x", 10 );
00936 xmlWriter->addAttribute( "svg:y", 4.782 );
00937 xmlWriter->endElement();
00938 xmlWriter->startElement( "draw:enhanced-geometry" );
00939 xmlWriter->addAttribute( "draw:type", "octagon" );
00940 xmlWriter->startElement( "draw:equation" );
00941 xmlWriter->addAttribute( "draw:formula", "left+$0 " );
00942 xmlWriter->addAttribute( "draw:name", "f0" );
00943 xmlWriter->endElement();
00944 xmlWriter->startElement( "draw:equation" );
00945 xmlWriter->addAttribute( "draw:formula", "top+$0 " );
00946 xmlWriter->addAttribute( "draw:name", "f1" );
00947 xmlWriter->endElement();
00948 xmlWriter->startElement( "draw:equation" );
00949 xmlWriter->addAttribute( "draw:formula", "right-$0 " );
00950 xmlWriter->addAttribute( "draw:name", "f2" );
00951 xmlWriter->endElement();
00952 xmlWriter->startElement( "draw:equation" );
00953 xmlWriter->addAttribute( "draw:formula", "bottom-$0 ");
00954 xmlWriter->addAttribute( "draw:name", "f3" );
00955 xmlWriter->endElement();
00956 xmlWriter->startElement( "draw:equation" );
00957 xmlWriter->addAttribute( "draw:formula", "$0 /2" );
00958 xmlWriter->addAttribute( "draw:name", "f4" );
00959 xmlWriter->endElement();
00960 xmlWriter->startElement( "draw:equation" );
00961 xmlWriter->addAttribute( "draw:formula", "left+?f4 " );
00962 xmlWriter->addAttribute( "draw:name", "f5" );
00963 xmlWriter->endElement();
00964 xmlWriter->startElement( "draw:equation" );
00965 xmlWriter->addAttribute( "draw:formula", "top+?f4 " );
00966 xmlWriter->addAttribute( "draw:name", "f6" );
00967 xmlWriter->endElement();
00968 xmlWriter->startElement( "draw:equation" );
00969 xmlWriter->addAttribute( "draw:formula", "right-?f4 " );
00970 xmlWriter->addAttribute( "draw:name", "f7" );
00971 xmlWriter->endElement();
00972 xmlWriter->startElement( "draw:equation" );
00973 xmlWriter->addAttribute( "draw:formula", "bottom-?f4 ");
00974 xmlWriter->addAttribute( "draw:name", "f8" );
00975 xmlWriter->endElement();
00976 xmlWriter->startElement( "draw:handle" );
00977 xmlWriter->addAttribute( "draw:handle-range-x-maximum", 10800);
00978 xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
00979 xmlWriter->addAttribute("draw:handle-position","$0 top");
00980 xmlWriter->endElement();
00981 xmlWriter->endElement();
00982 xmlWriter->endElement();
00983 }
00984
00985 void PowerPointImport::processArrow (DrawObject* drawObject, KoXmlWriter* xmlWriter )
00986 {
00987 if( !drawObject || !xmlWriter ) return;
00988
00989 QString widthStr = QString("%1mm").arg( drawObject->width() );
00990 QString heightStr = QString("%1mm").arg( drawObject->height() );
00991 QString xStr = QString("%1mm").arg( drawObject->left() );
00992 QString yStr = QString("%1mm").arg( drawObject->top() );
00993 QString styleName = QString("gr%1").arg( drawingObjectCounter );
00994
00995 xmlWriter->startElement( "draw:custom-shape" );
00996 xmlWriter->addAttribute( "draw:style-name", styleName );
00997 xmlWriter->addAttribute( "svg:width", widthStr );
00998 xmlWriter->addAttribute( "svg:height", heightStr );
00999 xmlWriter->addAttribute( "svg:x", xStr );
01000 xmlWriter->addAttribute( "svg:y", yStr );
01001 xmlWriter->addAttribute( "draw:layer", "layout" );
01002 xmlWriter->startElement( "draw:enhanced-geometry" );
01003
01004 if (drawObject->shape() == DrawObject::RightArrow)
01005 xmlWriter->addAttribute( "draw:type", "right-arrow" );
01006 else if (drawObject->shape() == DrawObject::LeftArrow)
01007 xmlWriter->addAttribute( "draw:type", "left-arrow" );
01008 else if (drawObject->shape() == DrawObject::UpArrow)
01009 xmlWriter->addAttribute( "draw:type", "up-arrow" );
01010 else if (drawObject->shape() == DrawObject::DownArrow)
01011 xmlWriter->addAttribute( "draw:type", "down-arrow" );
01012 xmlWriter->startElement( "draw:equation" );
01013 xmlWriter->addAttribute( "draw:formula","$1");
01014 xmlWriter->addAttribute( "draw:name","f0");
01015 xmlWriter->endElement();
01016 xmlWriter->startElement( "draw:equation" );
01017 xmlWriter->addAttribute( "draw:formula","$0");
01018 xmlWriter->addAttribute( "draw:name","f1");
01019 xmlWriter->endElement();
01020 xmlWriter->startElement( "draw:equation" );
01021 xmlWriter->addAttribute( "draw:formula","21600-$1");
01022 xmlWriter->addAttribute( "draw:name","f2");
01023 xmlWriter->endElement();
01024 xmlWriter->startElement( "draw:equation" );
01025 xmlWriter->addAttribute( "draw:formula","21600-?f1");
01026 xmlWriter->addAttribute( "draw:name","f3");
01027 xmlWriter->endElement();
01028 xmlWriter->startElement( "draw:equation" );
01029 xmlWriter->addAttribute( "draw:formula","?f3 *?f0 /10800");
01030 xmlWriter->addAttribute( "draw:name","f4");
01031 xmlWriter->endElement();
01032 xmlWriter->startElement( "draw:equation" );
01033 xmlWriter->addAttribute( "draw:formula","?f1 +?f4 " );
01034 xmlWriter->addAttribute( "draw:name","f5");
01035 xmlWriter->endElement();
01036 xmlWriter->startElement( "draw:equation" );
01037 xmlWriter->addAttribute( "draw:formula","?f1 *?f0 /10800");
01038 xmlWriter->addAttribute( "draw:name","f6");
01039 xmlWriter->endElement();
01040 xmlWriter->startElement( "draw:equation" );
01041 xmlWriter->addAttribute( "draw:formula","?f1 -?f6 ");
01042 xmlWriter->addAttribute( "draw:name","f7");
01043 xmlWriter->endElement();
01044 xmlWriter->startElement( "draw:handle" );
01045 if ( drawObject->shape() == DrawObject::RightArrow | drawObject->shape() == DrawObject::LeftArrow )
01046 {
01047 xmlWriter->addAttribute( "draw:handle-range-x-maximum", 21600);
01048 xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
01049 xmlWriter->addAttribute("draw:handle-position","$0 $1");
01050 xmlWriter->addAttribute("draw:handle-range-y-maximum",10800);
01051 xmlWriter->addAttribute("draw:handle-range-y-minimum",0);
01052 }
01053 else if ( drawObject->shape() == DrawObject::UpArrow | drawObject->shape() == DrawObject::DownArrow )
01054 {
01055 xmlWriter->addAttribute( "draw:handle-range-x-maximum", 10800);
01056 xmlWriter->addAttribute( "draw:handle-range-x-minimum", 0);
01057 xmlWriter->addAttribute("draw:handle-position","$1 $0");
01058 xmlWriter->addAttribute("draw:handle-range-y-maximum",21600);
01059 xmlWriter->addAttribute("draw:handle-range-y-minimum",0);
01060 }
01061 xmlWriter->endElement();
01062 xmlWriter->endElement();
01063 xmlWriter->endElement();
01064 }
01065
01066 void PowerPointImport::processLine (DrawObject* drawObject, KoXmlWriter* xmlWriter )
01067 {
01068 if( !drawObject || !xmlWriter) return;
01069
01070 QString x1Str = QString("%1mm").arg( drawObject->left() );
01071 QString y1Str = QString("%1mm").arg( drawObject->top() );
01072 QString x2Str = QString("%1mm").arg( drawObject->left() + drawObject->width() );
01073 QString y2Str = QString("%1mm").arg( drawObject->top() + drawObject->height() );
01074 QString styleName = QString("gr%1").arg( drawingObjectCounter );
01075
01076 if ( drawObject->hasProperty("draw:mirror-vertical") )
01077 { QString temp = y1Str;
01078 y1Str = y2Str;
01079 y2Str = temp;
01080 }
01081 if ( drawObject->hasProperty("draw:mirror-horizontal") )
01082 { QString temp = x1Str;
01083 x1Str = x2Str;
01084 x2Str = temp;
01085 }
01086
01087 xmlWriter->startElement( "draw:line" );
01088 xmlWriter->addAttribute( "draw:style-name", styleName );
01089 xmlWriter->addAttribute( "svg:y1", y1Str );
01090 xmlWriter->addAttribute( "svg:y2", y2Str );
01091 xmlWriter->addAttribute( "svg:x1", x1Str );
01092 xmlWriter->addAttribute( "svg:x2", x2Str );
01093 xmlWriter->addAttribute( "draw:layer", "layout" );
01094
01095 xmlWriter->endElement();
01096 }
01097
01098 void PowerPointImport::processSmiley (DrawObject* drawObject, KoXmlWriter* xmlWriter )
01099 {
01100 if( !drawObject ||!xmlWriter ) return;
01101
01102 QString widthStr = QString("%1mm").arg( drawObject->width() );
01103 QString heightStr = QString("%1mm").arg( drawObject->height() );
01104 QString xStr = QString("%1mm").arg( drawObject->left() );
01105 QString yStr = QString("%1mm").arg( drawObject->top() );
01106 QString styleName = QString("gr%1").arg( drawingObjectCounter );
01107
01108 xmlWriter->startElement( "draw:custom-shape" );
01109 xmlWriter->addAttribute( "draw:style-name", styleName );
01110 xmlWriter->addAttribute( "svg:width", widthStr );
01111 xmlWriter->addAttribute( "svg:height", heightStr );
01112 xmlWriter->addAttribute( "svg:x", xStr );
01113 xmlWriter->addAttribute( "svg:y", yStr );
01114 xmlWriter->addAttribute( "draw:layer", "layout" );
01115 xmlWriter->startElement( "draw:glue-point" );
01116 xmlWriter->addAttribute( "svg:x", 5 );
01117 xmlWriter->addAttribute( "svg:y", 0 );
01118 xmlWriter->endElement();
01119 xmlWriter->startElement( "draw:glue-point" );
01120 xmlWriter->addAttribute( "svg:x", 1.461 );
01121 xmlWriter->addAttribute( "svg:y", 1.461 );
01122 xmlWriter->endElement();
01123 xmlWriter->startElement( "draw:glue-point" );
01124 xmlWriter->addAttribute( "svg:x", 0 );
01125 xmlWriter->addAttribute( "svg:y", 5 );
01126 xmlWriter->endElement();
01127 xmlWriter->startElement( "draw:glue-point" );
01128 xmlWriter->addAttribute( "svg:x", 1.461 );
01129 xmlWriter->addAttribute( "svg:y", 8.536 );
01130 xmlWriter->endElement();
01131 xmlWriter->startElement( "draw:glue-point" );
01132 xmlWriter->addAttribute( "svg:x", 10 );
01133 xmlWriter->addAttribute( "svg:y", 5 );
01134 xmlWriter->endElement();
01135 xmlWriter->startElement( "draw:glue-point" );
01136 xmlWriter->addAttribute( "svg:x", 8.536 );
01137 xmlWriter->addAttribute( "svg:y", 1.461 );
01138 xmlWriter->endElement();
01139 xmlWriter->startElement( "draw:enhanced-geometry" );
01140 xmlWriter->addAttribute( "draw:type", "smiley" );
01141 xmlWriter->startElement( "draw:equation" );
01142 xmlWriter->addAttribute( "draw:formula", "$0-15510 " );
01143 xmlWriter->addAttribute( "draw:name", "f0" );
01144 xmlWriter->endElement();
01145 xmlWriter->startElement( "draw:equation" );
01146 xmlWriter->addAttribute( "draw:formula", "17520-?f0" );
01147 xmlWriter->addAttribute( "draw:name", "f1" );
01148 xmlWriter->endElement();
01149 xmlWriter->startElement( "draw:equation" );
01150 xmlWriter->addAttribute( "draw:formula", "15510+?f0" );
01151 xmlWriter->addAttribute( "draw:name", "f2" );
01152 xmlWriter->endElement();
01153 xmlWriter->startElement( "draw:handle" );
01154 xmlWriter->addAttribute( "draw:position", 10800);
01155 xmlWriter->addAttribute( "draw:handle-range-y-maximum", 17520);
01156 xmlWriter->addAttribute( "draw:handle-range-y-minimum", 15510);
01157 xmlWriter->addAttribute("draw:handle-position","$0 top");
01158 xmlWriter->endElement();
01159 xmlWriter->endElement();
01160 xmlWriter->endElement();
01161 }
01162
01163 void PowerPointImport::processHeart (DrawObject* drawObject, KoXmlWriter* xmlWriter )
01164 {
01165 if( !drawObject || !xmlWriter ) return;
01166
01167 QString widthStr = QString("%1mm").arg( drawObject->width() );
01168 QString heightStr = QString("%1mm").arg( drawObject->height() );
01169 QString xStr = QString("%1mm").arg( drawObject->left() );
01170 QString yStr = QString("%1mm").arg( drawObject->top() );
01171 QString styleName = QString("gr%1").arg( drawingObjectCounter );
01172
01173 xmlWriter->startElement( "draw:custom-shape" );
01174 xmlWriter->addAttribute( "draw:style-name", styleName );
01175 xmlWriter->addAttribute( "svg:width", widthStr );
01176 xmlWriter->addAttribute( "svg:height", heightStr );
01177 xmlWriter->addAttribute( "svg:x", xStr );
01178 xmlWriter->addAttribute( "svg:y", yStr );
01179 xmlWriter->addAttribute( "draw:layer", "layout" );
01180 xmlWriter->startElement( "draw:glue-point" );
01181 xmlWriter->addAttribute( "svg:x", 5 );
01182 xmlWriter->addAttribute( "svg:y", 1 );
01183 xmlWriter->endElement();
01184 xmlWriter->startElement( "draw:glue-point" );
01185 xmlWriter->addAttribute( "svg:x", 1.43 );
01186 xmlWriter->addAttribute( "svg:y", 5 );
01187 xmlWriter->endElement();
01188 xmlWriter->startElement( "draw:glue-point" );
01189 xmlWriter->addAttribute( "svg:x", 5 );
01190 xmlWriter->addAttribute( "svg:y", 10 );
01191 xmlWriter->endElement();
01192 xmlWriter->startElement( "draw:glue-point" );
01193 xmlWriter->addAttribute( "svg:x", 8.553 );
01194 xmlWriter->addAttribute( "svg:y", 5 );
01195 xmlWriter->endElement();
01196 xmlWriter->startElement( "draw:enhanced-geometry" );
01197 xmlWriter->addAttribute( "draw:type", "heart" );
01198
01199 xmlWriter->endElement();
01200 xmlWriter->endElement();
01201 }
01202
01203 void PowerPointImport::processFreeLine (DrawObject* drawObject, KoXmlWriter* xmlWriter)
01204 {
01205 if( !drawObject ||!xmlWriter ) return;
01206
01207 QString widthStr = QString("%1mm").arg( drawObject->width() );
01208 QString heightStr = QString("%1mm").arg( drawObject->height() );
01209 QString xStr = QString("%1mm").arg( drawObject->left() );
01210 QString yStr = QString("%1mm").arg( drawObject->top() );
01211 QString styleName = QString("gr%1").arg( drawingObjectCounter );
01212
01213 xmlWriter->startElement( "draw:path" );
01214 xmlWriter->addAttribute( "draw:style-name", styleName );
01215 xmlWriter->addAttribute( "svg:width", widthStr );
01216 xmlWriter->addAttribute( "svg:height", heightStr );
01217 xmlWriter->addAttribute( "svg:x", xStr );
01218 xmlWriter->addAttribute( "svg:y", yStr );
01219 xmlWriter->addAttribute( "draw:layer", "layout" );
01220 xmlWriter->endElement();
01221 }
01222
01223 void PowerPointImport::processDrawingObjectForBody( DrawObject* drawObject, KoXmlWriter* xmlWriter )
01224 {
01225
01226 if( !drawObject || !xmlWriter ) return;
01227
01228 drawingObjectCounter++;
01229
01230
01231 if (drawObject->shape() == DrawObject::Ellipse)
01232 {
01233 processEllipse (drawObject, xmlWriter );
01234 }
01235 else if (drawObject->shape() == DrawObject::Rectangle)
01236 {
01237 processRectangle (drawObject, xmlWriter );
01238 }
01239 else if (drawObject->shape() == DrawObject::RoundRectangle)
01240 {
01241 processRoundRectangle (drawObject, xmlWriter );
01242 }
01243 else if (drawObject->shape() == DrawObject::Diamond)
01244 {
01245 processDiamond (drawObject, xmlWriter );
01246 }
01247 else if (drawObject->shape() == DrawObject::IsoscelesTriangle |
01248 drawObject->shape() == DrawObject::RightTriangle)
01249 {
01250 processTriangle (drawObject, xmlWriter );
01251 }
01252 else if (drawObject->shape() == DrawObject::Trapezoid)
01253 {
01254 processTrapezoid (drawObject, xmlWriter );
01255 }
01256 else if (drawObject->shape() == DrawObject::Parallelogram)
01257 {
01258 processParallelogram( drawObject, xmlWriter);
01259 }
01260 else if (drawObject->shape() == DrawObject::Hexagon)
01261 {
01262 processHexagon ( drawObject, xmlWriter );
01263 }
01264 else if (drawObject->shape() == DrawObject::Octagon)
01265 {
01266 processOctagon ( drawObject, xmlWriter );
01267 }
01268 else if (drawObject->shape() == DrawObject::RightArrow |
01269 drawObject->shape() == DrawObject::LeftArrow |
01270 drawObject->shape() == DrawObject::UpArrow |
01271 drawObject->shape() == DrawObject::DownArrow )
01272 {
01273 processArrow ( drawObject, xmlWriter );
01274 }
01275 else if (drawObject->shape() == DrawObject::Line)
01276 {
01277 processLine ( drawObject, xmlWriter );
01278 }
01279 else if (drawObject->shape() == DrawObject::Smiley)
01280 {
01281 processSmiley (drawObject, xmlWriter );
01282 }
01283 else if (drawObject->shape() == DrawObject::Heart)
01284 {
01285 processHeart (drawObject, xmlWriter );
01286 }
01287 else if (drawObject->shape() == DrawObject::FreeLine)
01288 {
01289 processFreeLine (drawObject, xmlWriter );
01290 }
01291 }
01292
01293 void PowerPointImport::processGroupObjectForBody( GroupObject* groupObject, KoXmlWriter* xmlWriter )
01294 {
01295 if( !groupObject || !xmlWriter ) return;
01296 if( !groupObject->objectCount() ) return;
01297
01298 xmlWriter->startElement( "draw:g" );
01299
01300 for( unsigned i = 0; i < groupObject->objectCount(); i++ )
01301 {
01302 Object* object = groupObject->object( i );
01303 if( object )
01304 processObjectForBody( object, xmlWriter );
01305 }
01306
01307 xmlWriter->endElement();
01308 }
01309
01310 void PowerPointImport::processTextObjectForBody( TextObject* textObject, KoXmlWriter* xmlWriter )
01311 {
01312 if( !textObject || !xmlWriter ) return;
01313
01314 QString classStr = "subtitle";
01315 if( textObject->type() == TextObject::Title )
01316 classStr = "title";
01317
01318 QString pStr;
01319
01320 QString widthStr = QString("%1mm").arg( textObject->width() );
01321 QString heightStr = QString("%1mm").arg( textObject->height() );
01322 QString xStr = QString("%1mm").arg( textObject->left() );
01323 QString yStr = QString("%1mm").arg( textObject->top() );
01324
01325 xmlWriter->startElement( "draw:frame" );
01326 xmlWriter->addAttribute( "presentation:style-name", "pr1" );
01327 xmlWriter->addAttribute( "draw:layer", "layout" );
01328 xmlWriter->addAttribute( "svg:width", widthStr );
01329 xmlWriter->addAttribute( "svg:height", heightStr );
01330 xmlWriter->addAttribute( "svg:x", xStr );
01331 xmlWriter->addAttribute( "svg:y", yStr );
01332 xmlWriter->addAttribute( "presentation:class", classStr );
01333 xmlWriter->startElement( "draw:text-box" );
01334
01335
01336 for (unsigned i=0; i<textObject->listSize(); i++)
01337 {
01338 pStr = Libppt::string(textObject->text(i)).string();
01339 if (textObject->bulletFlag(i) == 1 )
01340 {
01341 xmlWriter->startElement( "text:list" );
01342 xmlWriter->addAttribute( "text:style-name","L2");
01343 xmlWriter->startElement( "text:list-item" );
01344 xmlWriter->startElement( "text:p" );
01345 xmlWriter->addAttribute( "text:style-name", "P1" );
01346 xmlWriter->addTextSpan( pStr );
01347 xmlWriter->endElement();
01348 xmlWriter->endElement();
01349 xmlWriter->endElement();
01350 }
01351 else
01352 {
01353 xmlWriter->startElement( "text:p" );
01354 xmlWriter->addAttribute( "text:style-name", "P1" );
01355 xmlWriter->addTextSpan( pStr );
01356 xmlWriter->endElement();
01357 }
01358 }
01359
01360 xmlWriter->endElement();
01361 xmlWriter->endElement();
01362
01363
01364 }
01365
01366 void PowerPointImport::processObjectForBody( Object* object, KoXmlWriter* xmlWriter )
01367 {
01368 if( !object || !xmlWriter) return;
01369
01370 if( object->isText() )
01371 processTextObjectForBody( static_cast<TextObject*>(object), xmlWriter );
01372 else if( object->isGroup() )
01373 processGroupObjectForBody( static_cast<GroupObject*>(object), xmlWriter );
01374 else if( object->isDrawing() )
01375 processDrawingObjectForBody( static_cast<DrawObject*>(object), xmlWriter );
01376 }
01377
01378 void PowerPointImport::processSlideForBody( unsigned slideNo, Slide* slide, KoXmlWriter* xmlWriter )
01379 {
01380 if( !slide || !xmlWriter ) return;
01381
01382 QString nameStr = Libppt::string( slide->title() ).string();
01383 if( nameStr.isEmpty() )
01384 nameStr = QString("page%1").arg(slideNo+1);
01385
01386 QString styleNameStr = QString("dp%1").arg(slideNo+1);
01387
01388 xmlWriter->startElement( "draw:page" );
01389 xmlWriter->addAttribute( "draw:master-page-name", "Default" );
01390 xmlWriter->addAttribute( "draw:name", nameStr );
01391 xmlWriter->addAttribute( "draw:style-name", styleNameStr );
01392 xmlWriter->addAttribute( "presentation:presentation-page-layout-name", "AL1T0");
01393
01394 GroupObject* root = slide->rootObject();
01395 if( root )
01396 for( unsigned i = 0; i < root->objectCount(); i++ )
01397 {
01398 Object* object = root->object( i );
01399 if( object )
01400 processObjectForBody( object, xmlWriter );
01401 }
01402
01403 xmlWriter->endElement();
01404 }
01405
01406 void PowerPointImport::processSlideForStyle( unsigned , Slide* slide, KoXmlWriter* xmlWriter )
01407 {
01408 if( !slide || !xmlWriter ) return;
01409
01410 GroupObject* root = slide->rootObject();
01411 if( root )
01412 for( unsigned i = 0; i < root->objectCount(); i++ )
01413 {
01414 Object* object = root->object( i );
01415 if( object )
01416 processObjectForStyle( object, xmlWriter );
01417 }
01418 }
01419
01420 void PowerPointImport::processObjectForStyle( Object* object, KoXmlWriter* xmlWriter )
01421 {
01422 if( !object || !xmlWriter ) return;
01423
01424 if( object->isText() )
01425 processTextObjectForStyle( static_cast<TextObject*>(object), xmlWriter );
01426 else if( object->isGroup() )
01427 processGroupObjectForStyle( static_cast<GroupObject*>(object), xmlWriter );
01428 else if( object->isDrawing() )
01429 processDrawingObjectForStyle( static_cast<DrawObject*>(object), xmlWriter );
01430 }
01431
01432 void PowerPointImport::processTextObjectForStyle( TextObject* textObject, KoXmlWriter* xmlWriter )
01433 {
01434 if( !textObject || !xmlWriter ) return;
01435 }
01436
01437 void PowerPointImport::processGroupObjectForStyle( GroupObject* groupObject, KoXmlWriter* xmlWriter )
01438 {
01439 if( !groupObject ||!xmlWriter ) return;
01440 }
01441
01442 QString hexname( const Color &c )
01443 {
01444 QColor qc( c.red, c.green, c.blue );
01445 return qc.name();
01446 }
01447
01448 void PowerPointImport::processDrawingObjectForStyle( DrawObject* drawObject, KoXmlWriter* xmlWriter )
01449 {
01450 if( !drawObject || !xmlWriter) return;
01451
01452 drawingObjectCounter++;
01453 QString styleName = QString("gr%1").arg( drawingObjectCounter );
01454
01455 xmlWriter->startElement( "style:style" );
01456 xmlWriter->addAttribute( "style:name", styleName );
01457 xmlWriter->addAttribute( "style:family", "graphic" );
01458 xmlWriter->addAttribute( "style:parent-style-name", "standard" );
01459
01460 xmlWriter->startElement( "style:graphic-properties" );
01461
01462
01463
01464
01465
01466
01467
01468
01469
01470 if (drawObject->hasProperty( "libppt:invisibleLine" ))
01471 {
01472 if (drawObject->getBoolProperty("libppt:invisibleLine") == true)
01473 xmlWriter->addAttribute( "draw:stroke", "none" );
01474 }
01475 else if( drawObject->hasProperty( "draw:stroke" ) )
01476 { if (drawObject->getStrProperty( "draw:stroke" ) == "dash")
01477 {
01478 xmlWriter->addAttribute( "draw:stroke", "dash" );
01479 std::string s = drawObject->getStrProperty("draw:stroke-dash");
01480 QString ss( s.c_str() );
01481 xmlWriter->addAttribute( "draw:stroke-dash", ss );
01482 qDebug("=============stroke dash===================");
01483
01484 }
01485 else if (drawObject->getStrProperty( "draw:stroke" ) == "solid")
01486 xmlWriter->addAttribute( "draw:stroke", "solid" );
01487 }
01488
01489
01490 if( drawObject->hasProperty( "svg:stroke-width" ) )
01491 {
01492 double strokeWidth = drawObject->getDoubleProperty("svg:stroke-width" );
01493 xmlWriter->addAttribute( "svg:stroke-width",QString("%1mm").arg( strokeWidth ) );
01494 }
01495
01496 if( drawObject->hasProperty( "svg:stroke-color" ) )
01497 {
01498 Color strokeColor = drawObject->getColorProperty("svg:stroke-color" );
01499 xmlWriter->addAttribute( "svg:stroke-color", hexname( strokeColor ) );
01500 }
01501
01502 if( drawObject->hasProperty( "draw:marker-start" ) )
01503 {
01504 std::string s = drawObject->getStrProperty("draw:marker-start");
01505 QString ss( s.c_str() );
01506 xmlWriter->addAttribute( "draw:marker-start", ss );
01507 }
01508 if( drawObject->hasProperty( "draw:marker-end" ) )
01509 {
01510 std::string s = drawObject->getStrProperty("draw:marker-end");
01511 QString ss( s.c_str() );
01512 xmlWriter->addAttribute( "draw:marker-end", ss);
01513 }
01514
01515
01516
01517
01518
01519
01520
01521
01522
01523
01524
01525
01526
01527 if( drawObject->hasProperty( "draw:marker-start-width" ) )
01528 {
01529 double strokeWidth = drawObject->getDoubleProperty("svg:stroke-width" );
01530 double arrowWidth = (drawObject->getDoubleProperty("draw:marker-start-width") * strokeWidth);
01531 xmlWriter->addAttribute( "draw:marker-start-width",QString("%1cm").arg( arrowWidth ) );
01532 }
01533
01534 if( drawObject->hasProperty( "draw:marker-end-width" ) )
01535 {
01536 double strokeWidth = drawObject->getDoubleProperty("svg:stroke-width" );
01537 double arrowWidth = (drawObject->getDoubleProperty("draw:marker-end-width") * strokeWidth);
01538 xmlWriter->addAttribute( "draw:marker-end-width",QString("%1cm").arg( arrowWidth ) );
01539 }
01540
01541
01542
01543 if( drawObject->hasProperty( "draw:fill" ) )
01544 {
01545 std::string s = drawObject->getStrProperty("draw:fill");
01546 QString ss( s.c_str() );
01547 xmlWriter->addAttribute( "draw:fill", ss);
01548 }
01549
01550
01551
01552 if( drawObject->hasProperty( "draw:fill-color" ) )
01553 {
01554 Color fillColor = drawObject->getColorProperty("draw:fill-color" );
01555 xmlWriter->addAttribute( "draw:fill-color", hexname( fillColor ) );
01556
01557 } else xmlWriter->addAttribute( "draw:fill-color", "#99ccff" );
01558
01559 #if 0
01560 if( drawObject->hasProperty( "draw:shadow-color" ) )
01561 {
01562 xmlWriter->addAttribute( "draw:shadow", "visible" );
01563 Color shadowColor = drawObject->getColorProperty("draw:shadow-color" );
01564 xmlWriter->addAttribute( "draw:shadow-color", hexname( shadowColor ) );
01565 }
01566 else xmlWriter->addAttribute( "draw:shadow", "hidden" );
01567 #endif
01568
01569 if( drawObject->hasProperty( "draw:shadow-opacity" ) )
01570 {
01571 double opacity = drawObject->getDoubleProperty("draw:shadow-opacity") ;
01572 xmlWriter->addAttribute( "draw:shadow-opacity",QString("%1%").arg( opacity ) );
01573 }
01574
01575 if( drawObject->hasProperty( "draw:shadow-offset-x" ) )
01576 {
01577 double offset = drawObject->getDoubleProperty("draw:shadow-offset-x") ;
01578 xmlWriter->addAttribute( "draw:shadow-offset-x",QString("%1cm").arg( offset ) );
01579 }
01580
01581 if( drawObject->hasProperty( "draw:shadow-offset-y" ) )
01582 {
01583 double offset = drawObject->getDoubleProperty("draw:shadow-offset-y");
01584 xmlWriter->addAttribute( "draw:shadow-offset-y",QString("%1cm").arg( offset ) );
01585 }
01586
01587
01588 xmlWriter->endElement();
01589
01590 xmlWriter->endElement();
01591 }
01592