26#include <powerpointimport.h>
27#include <powerpointimport.moc>
33#include <tqtextstream.h>
36#include <KoFilterChain.h>
39#include <kgenericfactory.h>
41#include <KoXmlWriter.h>
47using namespace Libppt;
49typedef KGenericFactory<PowerPointImport, KoFilter> PowerPointImportFactory;
50K_EXPORT_COMPONENT_FACTORY( libpowerpointimport,
51 PowerPointImportFactory(
"kofficefilters" ) )
57 return TQConstString(
reinterpret_cast<const TQChar*
>( str.
data() ), str.
length() );
62class PowerPointImport::Private
68 Presentation *presentation;
72PowerPointImport::PowerPointImport ( TQObject*,
const char*,
const TQStringList& )
78PowerPointImport::~PowerPointImport()
83KoFilter::ConversionStatus PowerPointImport::convert(
const TQCString& from,
const TQCString& to )
85 if ( from !=
"application/mspowerpoint" )
86 return KoFilter::NotImplemented;
88 if ( to !=
"application/vnd.oasis.opendocument.presentation" )
89 return KoFilter::NotImplemented;
91 d->inputFile = m_chain->inputFile();
92 d->outputFile = m_chain->outputFile();
95 d->presentation =
new Presentation;
96 if( !d->presentation->load( d->inputFile.local8Bit() ) )
98 delete d->presentation;
100 return KoFilter::StupidError;
105 storeout = KoStore::createStore( d->outputFile, KoStore::Write,
106 "application/vnd.oasis.opendocument.presentation", KoStore::Zip );
110 kdWarning() <<
"Couldn't open the requested file." << endl;
111 return KoFilter::FileNotFound;
115 if ( !storeout->open(
"content.xml" ) )
117 kdWarning() <<
"Couldn't open the file 'content.xml'." << endl;
118 return KoFilter::CreationError;
120 storeout->write( createContent() );
124 if ( !storeout->open(
"styles.xml" ) )
126 kdWarning() <<
"Couldn't open the file 'styles.xml'." << endl;
127 return KoFilter::CreationError;
129 storeout->write( createStyles() );
133 storeout->enterDirectory(
"META-INF" );
134 if ( !storeout->open(
"manifest.xml" ) )
136 kdWarning() <<
"Couldn't open the file 'META-INF/manifest.xml'." << endl;
137 return KoFilter::CreationError;
139 storeout->write( createManifest() );
144 delete d->presentation;
146 d->inputFile = TQString();
147 d->outputFile = TQString();
153TQByteArray PowerPointImport::createStyles()
155 KoXmlWriter* stylesWriter;
156 TQByteArray stylesData;
157 TQBuffer stylesBuffer( stylesData );
159 TQString pageWidth = TQString(
"%1pt").arg( d->presentation->masterSlide()->pageWidth() );
160 TQString pageHeight = TQString(
"%1pt").arg( d->presentation->masterSlide()->pageHeight() );
162 stylesBuffer.open( IO_WriteOnly );
163 stylesWriter =
new KoXmlWriter( &stylesBuffer );
165 stylesWriter->startDocument(
"office:document-styles" );
166 stylesWriter->startElement(
"office:document-styles" );
167 stylesWriter->addAttribute(
"xmlns:office",
"urn:oasis:names:tc:opendocument:xmlns:office:1.0" );
168 stylesWriter->addAttribute(
"xmlns:draw",
"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" );
169 stylesWriter->addAttribute(
"xmlns:presentation",
"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" );
170 stylesWriter->addAttribute(
"xmlns:text",
"urn:oasis:names:tc:opendocument:xmlns:text:1.0" );
171 stylesWriter->addAttribute(
"xmlns:style",
"urn:oasis:names:tc:opendocument:xmlns:style:1.0" );
172 stylesWriter->addAttribute(
"xmlns:fo",
"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" );
173 stylesWriter->addAttribute(
"office:version",
"1.0" );
176 stylesWriter->startElement(
"office:styles" );
177 stylesWriter->endElement();
180 stylesWriter->startElement(
"office:automatic-styles" );
181 stylesWriter->startElement(
"style:page-layout" );
182 stylesWriter->addAttribute(
"style:name",
"pm1" );
183 stylesWriter->addAttribute(
"style:page-usage",
"all" );
184 stylesWriter->startElement(
"style:page-layout-properties" );
185 stylesWriter->addAttribute(
"fo:margin-bottom",
"0pt" );
186 stylesWriter->addAttribute(
"fo:margin-left",
"0pt" );
187 stylesWriter->addAttribute(
"fo:margin-right",
"0pt" );
188 stylesWriter->addAttribute(
"fo:margin-top",
"0pt" );
189 stylesWriter->addAttribute(
"fo:page-height", pageHeight );
190 stylesWriter->addAttribute(
"fo:page-width", pageWidth );
191 stylesWriter->addAttribute(
"style:print-orientation",
"landscape" );
192 stylesWriter->endElement();
193 stylesWriter->endElement();
195 stylesWriter->startElement(
"style:style" );
196 stylesWriter->addAttribute(
"style:name",
"dp1" );
197 stylesWriter->addAttribute(
"style:family",
"drawing-page" );
198 stylesWriter->startElement(
"style:drawing-page-properties" );
199 stylesWriter->addAttribute(
"draw:background-size",
"border" );
200 stylesWriter->addAttribute(
"draw:fill",
"solid" );
201 stylesWriter->addAttribute(
"draw:fill-color",
"#ffffff" );
202 stylesWriter->endElement();
203 stylesWriter->endElement();
205 stylesWriter->startElement(
"style:style" );
206 stylesWriter->addAttribute(
"style:name",
"P1" );
207 stylesWriter->addAttribute(
"style:family",
"paragraph" );
208 stylesWriter->startElement(
"style:paragraph-properties" );
209 stylesWriter->addAttribute(
"fo:margin-left",
"0cm" );
210 stylesWriter->addAttribute(
"fo:margin-right",
"0cm" );
211 stylesWriter->addAttribute(
"fo:text-indent",
"0cm" );
212 stylesWriter->endElement();
213 stylesWriter->startElement(
"style:text-properties" );
214 stylesWriter->addAttribute(
"fo:font-size",
"14pt" );
215 stylesWriter->addAttribute(
"style:font-size-asian",
"14pt" );
216 stylesWriter->addAttribute(
"style:font-size-complex",
"14pt" );
217 stylesWriter->endElement();
218 stylesWriter->endElement();
220 stylesWriter->startElement(
"text:list-style" );
221 stylesWriter->addAttribute(
"style:name",
"L2" );
222 stylesWriter->startElement(
"text:list-level-style-bullet" );
223 stylesWriter->addAttribute(
"text:level",
"1" );
224 stylesWriter->addAttribute(
"text:bullet-char",
"●" );
225 stylesWriter->startElement(
"style:text-properties" );
226 stylesWriter->addAttribute(
"fo:font-family",
"StarSymbol" );
227 stylesWriter->addAttribute(
"font-pitch",
"variable" );
228 stylesWriter->addAttribute(
"fo:color",
"#000000" );
229 stylesWriter->addAttribute(
"fo:font-size",
"45%" );
230 stylesWriter->endElement();
231 stylesWriter->endElement();
232 stylesWriter->endElement();
234 stylesWriter->endElement();
237 stylesWriter->startElement(
"office:master-styles" );
238 stylesWriter->startElement(
"style:master-page" );
239 stylesWriter->addAttribute(
"style:name",
"Standard" );
240 stylesWriter->addAttribute(
"style:page-layout-name",
"pm1" );
241 stylesWriter->addAttribute(
"draw:style-name",
"dp1" );
242 stylesWriter->endElement();
243 stylesWriter->endElement();
245 stylesWriter->endElement();
246 stylesWriter->endDocument();
251 for(
unsigned i=0; i<stylesData.size(); i++ )
252 dbg.append( stylesData[i] );
253 tqDebug(
"\nstyles.xml:\n%s\n", dbg.latin1() );
259TQByteArray PowerPointImport::createContent()
261 KoXmlWriter* contentWriter;
262 TQByteArray contentData;
263 TQBuffer contentBuffer( contentData );
265 contentBuffer.open( IO_WriteOnly );
266 contentWriter =
new KoXmlWriter( &contentBuffer );
268 contentWriter->startDocument(
"office:document-content" );
269 contentWriter->startElement(
"office:document-content" );
270 contentWriter->addAttribute(
"xmlns:office",
"urn:oasis:names:tc:opendocument:xmlns:office:1.0" );
271 contentWriter->addAttribute(
"xmlns:style",
"urn:oasis:names:tc:opendocument:xmlns:style:1.0" );
272 contentWriter->addAttribute(
"xmlns:text",
"urn:oasis:names:tc:opendocument:xmlns:text:1.0" );
273 contentWriter->addAttribute(
"xmlns:draw",
"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" );
274 contentWriter->addAttribute(
"xmlns:presentation",
"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" );
275 contentWriter->addAttribute(
"xmlns:svg",
"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" );
276 contentWriter->addAttribute(
"office:version",
"1.0" );
280 drawingObjectCounter = 0;
281 contentWriter->startElement(
"office:automatic-styles" );
282 for(
unsigned c=0; c < d->presentation->slideCount(); c++ )
284 Slide* slide = d->presentation->slide( c );
285 processSlideForStyle( c, slide, contentWriter );
287 contentWriter->endElement();
293 contentWriter->startElement(
"office:body" );
294 contentWriter->startElement(
"office:presentation" );
296 drawingObjectCounter = 0;
297 for(
unsigned c=0; c < d->presentation->slideCount(); c++ )
299 Slide* slide = d->presentation->slide( c );
300 processSlideForBody( c, slide, contentWriter );
303 contentWriter->endElement();
304 contentWriter->endElement();
306 contentWriter->endElement();
307 contentWriter->endDocument();
308 delete contentWriter;
312 for(
unsigned i=0; i<contentData.size(); i++ )
313 dbg.append( contentData[i] );
314 tqDebug(
"\ncontent.xml:\n%s\n", dbg.latin1() );
319TQByteArray PowerPointImport::createManifest()
321 KoXmlWriter* manifestWriter;
322 TQByteArray manifestData;
323 TQBuffer manifestBuffer( manifestData );
325 manifestBuffer.open( IO_WriteOnly );
326 manifestWriter =
new KoXmlWriter( &manifestBuffer );
328 manifestWriter->startDocument(
"manifest:manifest" );
329 manifestWriter->startElement(
"manifest:manifest" );
330 manifestWriter->addAttribute(
"xmlns:manifest",
331 "urn:oasis:names:tc:openoffice:xmlns:manifest:1.0" );
333 manifestWriter->addManifestEntry(
"/",
"application/vnd.oasis.opendocument.presentation" );
334 manifestWriter->addManifestEntry(
"styles.xml",
"text/xml" );
335 manifestWriter->addManifestEntry(
"content.xml",
"text/xml" );
337 manifestWriter->endElement();
338 manifestWriter->endDocument();
339 delete manifestWriter;
343 for(
unsigned i=0; i<manifestData.size(); i++ )
344 dbg.append( manifestData[i] );
345 tqDebug(
"\nmanifest.xml:\n%s\n", dbg.latin1() );
350void PowerPointImport::processEllipse (DrawObject* drawObject, KoXmlWriter* xmlWriter )
352 if( !drawObject || !xmlWriter )
return;
354 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
355 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
356 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
357 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
358 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
360 xmlWriter->startElement(
"draw:ellipse" );
361 xmlWriter->addAttribute(
"draw:style-name", styleName );
362 xmlWriter->addAttribute(
"svg:width", widthStr );
363 xmlWriter->addAttribute(
"svg:height", heightStr );
364 xmlWriter->addAttribute(
"svg:x", xStr );
365 xmlWriter->addAttribute(
"svg:y", yStr );
366 xmlWriter->addAttribute(
"draw:layer",
"layout" );
367 xmlWriter->endElement();
370void PowerPointImport::processRectangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
372 if( !drawObject )
return;
373 if( !xmlWriter )
return;
375 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
376 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
377 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
378 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
379 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
381 xmlWriter->startElement(
"draw:rect" );
382 xmlWriter->addAttribute(
"draw:style-name", styleName );
383 xmlWriter->addAttribute(
"svg:width", widthStr );
384 xmlWriter->addAttribute(
"svg:height", heightStr );
385 if ( drawObject->hasProperty (
"libppt:rotation" ) )
388 double rotAngle = drawObject->getDoubleProperty(
"libppt:rotation" );
389 double xMid = ( drawObject->left() + 0.5*drawObject->width() );
390 double yMid = ( drawObject->top() + 0.5*drawObject->height() );
391 double xVec = drawObject->left()- xMid;
392 double yVec = yMid - drawObject->top();
394 double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
395 double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
396 TQString rot = TQString(
"rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid-yNew);
397 xmlWriter->addAttribute(
"draw:transform", rot );
401 xmlWriter->addAttribute(
"svg:x", xStr );
402 xmlWriter->addAttribute(
"svg:y", yStr );
404 xmlWriter->addAttribute(
"draw:layer",
"layout" );
405 xmlWriter->endElement();
408void PowerPointImport::processRoundRectangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
410 if( !drawObject || !xmlWriter )
return;
412 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
413 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
414 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
415 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
416 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
418 xmlWriter->startElement(
"draw:custom-shape" );
419 xmlWriter->addAttribute(
"draw:style-name", styleName );
422 if ( drawObject->hasProperty (
"libppt:rotation" ) )
424 double rotAngle = drawObject->getDoubleProperty(
"libppt:rotation" );
428 if ( rotAngle > 0.785399 )
429 { xmlWriter->addAttribute(
"svg:width", heightStr );
430 xmlWriter->addAttribute(
"svg:height", widthStr );
431 double xMid = ( drawObject->left() - 0.5*drawObject->height() );
432 double yMid = ( drawObject->top() + 0.5*drawObject->width() );
433 double xVec = drawObject->left()- xMid;
434 double yVec = drawObject->top()- yMid;
436 double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
437 double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
438 TQString rot = TQString(
"rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid+yNew);
439 xmlWriter->addAttribute(
"draw:transform", rot );
442 { xmlWriter->addAttribute(
"svg:width", widthStr );
443 xmlWriter->addAttribute(
"svg:height", heightStr );
444 double xMid = ( drawObject->left() + 0.5*drawObject->width() );
445 double yMid = ( drawObject->top() + 0.5*drawObject->height() );
446 double xVec = drawObject->left()- xMid;
447 double yVec = yMid - drawObject->top();
449 double xNew = xVec*cos(rotAngle) - yVec*sin(rotAngle);
450 double yNew = xVec*sin(rotAngle) + yVec*cos(rotAngle);
451 TQString rot = TQString(
"rotate (%1) translate (%2mm %3mm)").arg(rotAngle).arg(xNew+xMid).arg(yMid-yNew);
452 xmlWriter->addAttribute(
"draw:transform", rot );
458 { xmlWriter->addAttribute(
"svg:width", widthStr );
459 xmlWriter->addAttribute(
"svg:height", heightStr );
460 xmlWriter->addAttribute(
"svg:x", xStr );
461 xmlWriter->addAttribute(
"svg:y", yStr );
466 xmlWriter->addAttribute(
"draw:layer",
"layout" );
467 xmlWriter->startElement(
"draw:enhanced-geometry" );
468 xmlWriter->addAttribute(
"draw:type",
"round-rectangle");
469 xmlWriter->startElement(
"draw:equation" );
470 xmlWriter->addAttribute(
"draw:formula",
"$0 /3" );
471 xmlWriter->addAttribute(
"draw:name",
"f0" );
472 xmlWriter->endElement();
473 xmlWriter->startElement(
"draw:equation" );
474 xmlWriter->addAttribute(
"draw:formula",
"right-?f0 " );
475 xmlWriter->addAttribute(
"draw:name",
"f1" );
476 xmlWriter->endElement();
477 xmlWriter->startElement(
"draw:equation" );
478 xmlWriter->addAttribute(
"draw:formula",
"bottom-?f0 " );
479 xmlWriter->addAttribute(
"draw:name",
"f2" );
480 xmlWriter->endElement();
481 xmlWriter->startElement(
"draw:equation" );
482 xmlWriter->addAttribute(
"draw:formula",
"left+?f0 " );
483 xmlWriter->addAttribute(
"draw:name",
"f3" );
484 xmlWriter->endElement();
485 xmlWriter->startElement(
"draw:equation" );
486 xmlWriter->addAttribute(
"draw:formula",
"top+?f0 " );
487 xmlWriter->addAttribute(
"draw:name",
"f4" );
488 xmlWriter->endElement();
489 xmlWriter->endElement();
490 xmlWriter->endElement();
493void PowerPointImport::processDiamond (DrawObject* drawObject, KoXmlWriter* xmlWriter )
495 if( !drawObject || !xmlWriter )
return;
497 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
498 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
499 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
500 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
501 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
503 xmlWriter->startElement(
"draw:custom-shape" );
504 xmlWriter->addAttribute(
"draw:style-name", styleName );
505 xmlWriter->addAttribute(
"svg:width", widthStr );
506 xmlWriter->addAttribute(
"svg:height", heightStr );
507 xmlWriter->addAttribute(
"svg:x", xStr );
508 xmlWriter->addAttribute(
"svg:y", yStr );
509 xmlWriter->startElement(
"draw:glue-point" );
510 xmlWriter->addAttribute(
"svg:x", 5 );
511 xmlWriter->addAttribute(
"svg:y", 0 );
512 xmlWriter->endElement();
513 xmlWriter->startElement(
"draw:glue-point" );
514 xmlWriter->addAttribute(
"svg:x", 0 );
515 xmlWriter->addAttribute(
"svg:y", 5 );
516 xmlWriter->endElement();
517 xmlWriter->startElement(
"draw:glue-point" );
518 xmlWriter->addAttribute(
"svg:x", 5 );
519 xmlWriter->addAttribute(
"svg:y", 10 );
520 xmlWriter->endElement();
521 xmlWriter->startElement(
"draw:glue-point" );
522 xmlWriter->addAttribute(
"svg:x", 10 );
523 xmlWriter->addAttribute(
"svg:y", 5 );
524 xmlWriter->endElement();
525 xmlWriter->startElement(
"draw:enhanced-geometry" );
526 xmlWriter->addAttribute(
"draw:type",
"diamond");
527 xmlWriter->endElement();
528 xmlWriter->addAttribute(
"draw:layer",
"layout" );
529 xmlWriter->endElement();
532void PowerPointImport::processTriangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
534 if( !drawObject || !xmlWriter )
return;
536 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
537 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
538 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
539 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
540 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
543 xmlWriter->startElement(
"draw:custom-shape" );
544 xmlWriter->addAttribute(
"draw:style-name", styleName );
545 xmlWriter->addAttribute(
"svg:width", widthStr );
546 xmlWriter->addAttribute(
"svg:height", heightStr );
547 xmlWriter->addAttribute(
"svg:x", xStr );
548 xmlWriter->addAttribute(
"svg:y", yStr );
549 xmlWriter->addAttribute(
"draw:layer",
"layout" );
550 xmlWriter->startElement(
"draw:glue-point" );
551 xmlWriter->addAttribute(
"svg:x", 5 );
552 xmlWriter->addAttribute(
"svg:y", 0 );
553 xmlWriter->endElement();
554 xmlWriter->startElement(
"draw:glue-point" );
555 xmlWriter->addAttribute(
"svg:x", 2.5 );
556 xmlWriter->addAttribute(
"svg:y", 5 );
557 xmlWriter->endElement();
558 xmlWriter->startElement(
"draw:glue-point" );
559 xmlWriter->addAttribute(
"svg:x", 0 );
560 xmlWriter->addAttribute(
"svg:y", 10 );
561 xmlWriter->endElement();
562 xmlWriter->startElement(
"draw:glue-point" );
563 xmlWriter->addAttribute(
"svg:x", 5 );
564 xmlWriter->addAttribute(
"svg:y", 10 );
565 xmlWriter->endElement();
566 xmlWriter->startElement(
"draw:glue-point" );
567 xmlWriter->addAttribute(
"svg:x", 10 );
568 xmlWriter->addAttribute(
"svg:y", 10 );
569 xmlWriter->endElement();
570 xmlWriter->startElement(
"draw:glue-point" );
571 xmlWriter->addAttribute(
"svg:x", 7.5 );
572 xmlWriter->addAttribute(
"svg:y", 5 );
573 xmlWriter->endElement();
575 xmlWriter->startElement(
"draw:enhanced-geometry" );
577 if (drawObject->hasProperty(
"draw:mirror-vertical"))
579 xmlWriter->addAttribute(
"draw:mirror-vertical",
"true");
581 if ( drawObject->hasProperty(
"draw:mirror-horizontal"))
583 xmlWriter->addAttribute(
"draw:mirror-horizontal",
"true");
585 if ( drawObject->hasProperty (
"libppt:rotation" ) )
588 double rotAngle = drawObject->getDoubleProperty(
"libppt:rotation" );
589 double xMid = ( drawObject->left() + 0.5*drawObject->width() );
590 double yMid = ( drawObject->top() + 0.5*drawObject->height() );
591 TQString rot = TQString(
"rotate (%1) translate (%2cm %3cm)").arg(rotAngle).arg(xMid).arg(yMid);
592 xmlWriter->addAttribute(
"draw:transform", rot );
594 if (drawObject->shape() == DrawObject::RightTriangle)
596 xmlWriter->addAttribute(
"draw:type",
"right-triangle");
598 else if (drawObject->shape() == DrawObject::IsoscelesTriangle)
600 xmlWriter->addAttribute(
"draw:type",
"isosceles-triangle");
601 xmlWriter->startElement(
"draw:equation" );
602 xmlWriter->addAttribute(
"draw:formula",
"$0 " );
603 xmlWriter->addAttribute(
"draw:name",
"f0" );
604 xmlWriter->endElement();
605 xmlWriter->startElement(
"draw:equation" );
606 xmlWriter->addAttribute(
"draw:formula",
"$0 /2" );
607 xmlWriter->addAttribute(
"draw:name",
"f1" );
608 xmlWriter->endElement();
609 xmlWriter->startElement(
"draw:equation" );
610 xmlWriter->addAttribute(
"draw:formula",
"?f1 +10800" );
611 xmlWriter->addAttribute(
"draw:name",
"f2" );
612 xmlWriter->endElement();
613 xmlWriter->startElement(
"draw:equation" );
614 xmlWriter->addAttribute(
"draw:formula",
"$0 *2/3" );
615 xmlWriter->addAttribute(
"draw:name",
"f3" );
616 xmlWriter->endElement();
617 xmlWriter->startElement(
"draw:equation" );
618 xmlWriter->addAttribute(
"draw:formula",
"?f3 +7200" );
619 xmlWriter->addAttribute(
"draw:name",
"f4" );
620 xmlWriter->endElement();
621 xmlWriter->startElement(
"draw:equation" );
622 xmlWriter->addAttribute(
"draw:formula",
"21600-?f0 " );
623 xmlWriter->addAttribute(
"draw:name",
"f5" );
624 xmlWriter->endElement();
625 xmlWriter->startElement(
"draw:equation" );
626 xmlWriter->addAttribute(
"draw:formula",
"?f5 /2" );
627 xmlWriter->addAttribute(
"draw:name",
"f6" );
628 xmlWriter->endElement();
629 xmlWriter->startElement(
"draw:equation" );
630 xmlWriter->addAttribute(
"draw:formula",
"21600-?f6 " );
631 xmlWriter->addAttribute(
"draw:name",
"f7" );
632 xmlWriter->endElement();
633 xmlWriter->startElement(
"draw:handle" );
634 xmlWriter->addAttribute(
"draw:handle-range-x-maximum", 21600);
635 xmlWriter->addAttribute(
"draw:handle-range-x-minimum", 0);
636 xmlWriter->addAttribute(
"draw:handle-position",
"$0 top");
637 xmlWriter->endElement();
640 xmlWriter->endElement();
641 xmlWriter->endElement();
644void PowerPointImport::processTrapezoid (DrawObject* drawObject, KoXmlWriter* xmlWriter )
646 if( !drawObject || !xmlWriter )
return;
648 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
649 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
650 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
651 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
652 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
654 xmlWriter->startElement(
"draw:custom-shape" );
655 xmlWriter->addAttribute(
"draw:style-name", styleName );
656 xmlWriter->addAttribute(
"svg:width", widthStr );
657 xmlWriter->addAttribute(
"svg:height", heightStr );
658 xmlWriter->addAttribute(
"svg:x", xStr );
659 xmlWriter->addAttribute(
"svg:y", yStr );
660 xmlWriter->addAttribute(
"draw:layer",
"layout" );
662 xmlWriter->startElement(
"draw:glue-point" );
663 xmlWriter->addAttribute(
"svg:x", 5 );
664 xmlWriter->addAttribute(
"svg:y", 0 );
665 xmlWriter->endElement();
666 xmlWriter->startElement(
"draw:glue-point" );
667 xmlWriter->addAttribute(
"svg:x", 2.5 );
668 xmlWriter->addAttribute(
"svg:y", 5 );
669 xmlWriter->endElement();
670 xmlWriter->startElement(
"draw:glue-point" );
671 xmlWriter->addAttribute(
"svg:x", 0 );
672 xmlWriter->addAttribute(
"svg:y", 10 );
673 xmlWriter->endElement();
674 xmlWriter->startElement(
"draw:glue-point" );
675 xmlWriter->addAttribute(
"svg:x", 5 );
676 xmlWriter->addAttribute(
"svg:y", 10 );
677 xmlWriter->endElement();
678 xmlWriter->startElement(
"draw:enhanced-geometry" );
679 if ( drawObject->hasProperty(
"draw:mirror-vertical") )
681 xmlWriter->addAttribute(
"draw:mirror-vertical",
"true");
683 if ( drawObject->hasProperty(
"draw:mirror-horizontal"))
685 xmlWriter->addAttribute(
"draw:mirror-horizontal",
"true");
687 xmlWriter->addAttribute(
"draw:type",
"trapezoid" );
688 xmlWriter->startElement(
"draw:equation" );
689 xmlWriter->addAttribute(
"draw:formula",
"21600-$0 " );
690 xmlWriter->addAttribute(
"draw:name",
"f0" );
691 xmlWriter->endElement();
692 xmlWriter->startElement(
"draw:equation" );
693 xmlWriter->addAttribute(
"draw:formula",
"$0" );
694 xmlWriter->addAttribute(
"draw:name",
"f1" );
695 xmlWriter->endElement();
696 xmlWriter->startElement(
"draw:equation" );
697 xmlWriter->addAttribute(
"draw:formula",
"$0 *10/18" );
698 xmlWriter->addAttribute(
"draw:name",
"f2" );
699 xmlWriter->endElement();
700 xmlWriter->startElement(
"draw:equation" );
701 xmlWriter->addAttribute(
"draw:formula",
"?f2 +1750");
702 xmlWriter->addAttribute(
"draw:name",
"f3" );
703 xmlWriter->endElement();
704 xmlWriter->startElement(
"draw:equation" );
705 xmlWriter->addAttribute(
"draw:formula",
"21600-?f3" );
706 xmlWriter->addAttribute(
"draw:name",
"f4" );
707 xmlWriter->endElement();
708 xmlWriter->startElement(
"draw:equation" );
709 xmlWriter->addAttribute(
"draw:formula",
"$0 /2" );
710 xmlWriter->addAttribute(
"draw:name",
"f5" );
711 xmlWriter->endElement();
712 xmlWriter->startElement(
"draw:equation" );
713 xmlWriter->addAttribute(
"draw:formula",
"21600-?f5" );
714 xmlWriter->addAttribute(
"draw:name",
"f6" );
715 xmlWriter->endElement();
716 xmlWriter->startElement(
"draw:handle" );
717 xmlWriter->addAttribute(
"draw:handle-range-x-maximum", 10800);
718 xmlWriter->addAttribute(
"draw:handle-range-x-minimum", 0);
719 xmlWriter->addAttribute(
"draw:handle-position",
"$0 bottom");
720 xmlWriter->endElement();
721 xmlWriter->endElement();
722 xmlWriter->endElement();
725void PowerPointImport::processParallelogram (DrawObject* drawObject, KoXmlWriter* xmlWriter )
727 if( !drawObject || !xmlWriter )
return;
729 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
730 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
731 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
732 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
733 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
735 xmlWriter->startElement(
"draw:custom-shape" );
736 xmlWriter->addAttribute(
"draw:style-name", styleName );
737 xmlWriter->addAttribute(
"svg:width", widthStr );
738 xmlWriter->addAttribute(
"svg:height", heightStr );
739 xmlWriter->addAttribute(
"svg:x", xStr );
740 xmlWriter->addAttribute(
"svg:y", yStr );
741 xmlWriter->addAttribute(
"draw:layer",
"layout" );
742 xmlWriter->startElement(
"draw:glue-point" );
743 xmlWriter->addAttribute(
"svg:x", 6.25 );
744 xmlWriter->addAttribute(
"svg:y", 0 );
745 xmlWriter->endElement();
746 xmlWriter->startElement(
"draw:glue-point" );
747 xmlWriter->addAttribute(
"svg:x", 4.5 );
748 xmlWriter->addAttribute(
"svg:y", 0 );
749 xmlWriter->endElement();
750 xmlWriter->startElement(
"draw:glue-point" );
751 xmlWriter->addAttribute(
"svg:x", 8.75 );
752 xmlWriter->addAttribute(
"svg:y", 5 );
753 xmlWriter->endElement();
754 xmlWriter->startElement(
"draw:glue-point" );
755 xmlWriter->addAttribute(
"svg:x", 3.75 );
756 xmlWriter->addAttribute(
"svg:y", 10 );
757 xmlWriter->endElement();
758 xmlWriter->startElement(
"draw:glue-point" );
759 xmlWriter->addAttribute(
"svg:x", 5 );
760 xmlWriter->addAttribute(
"svg:y", 10 );
761 xmlWriter->endElement();
762 xmlWriter->startElement(
"draw:glue-point" );
763 xmlWriter->addAttribute(
"svg:x", 1.25 );
764 xmlWriter->addAttribute(
"svg:y", 5 );
765 xmlWriter->endElement();
766 xmlWriter->startElement(
"draw:enhanced-geometry" );
767 if (drawObject->hasProperty(
"draw:mirror-vertical"))
769 xmlWriter->addAttribute(
"draw:mirror-vertical",
"true");
771 if ( drawObject->hasProperty(
"draw:mirror-horizontal"))
773 xmlWriter->addAttribute(
"draw:mirror-horizontal",
"true");
775 xmlWriter->addAttribute(
"draw:type",
"parallelogram" );
776 xmlWriter->startElement(
"draw:equation" );
777 xmlWriter->addAttribute(
"draw:formula",
"$0 " );
778 xmlWriter->addAttribute(
"draw:name",
"f0" );
779 xmlWriter->endElement();
780 xmlWriter->startElement(
"draw:equation" );
781 xmlWriter->addAttribute(
"draw:formula",
"21600-$0" );
782 xmlWriter->addAttribute(
"draw:name",
"f1" );
783 xmlWriter->endElement();
784 xmlWriter->startElement(
"draw:equation" );
785 xmlWriter->addAttribute(
"draw:formula",
"$0 *10/24" );
786 xmlWriter->addAttribute(
"draw:name",
"f2" );
787 xmlWriter->endElement();
788 xmlWriter->startElement(
"draw:equation" );
789 xmlWriter->addAttribute(
"draw:formula",
"?f2 +1750");
790 xmlWriter->addAttribute(
"draw:name",
"f3" );
791 xmlWriter->endElement();
792 xmlWriter->startElement(
"draw:equation" );
793 xmlWriter->addAttribute(
"draw:formula",
"21600-?f3" );
794 xmlWriter->addAttribute(
"draw:name",
"f4" );
795 xmlWriter->endElement();
796 xmlWriter->startElement(
"draw:equation" );
797 xmlWriter->addAttribute(
"draw:formula",
"?f0 /2" );
798 xmlWriter->addAttribute(
"draw:name",
"f5" );
799 xmlWriter->endElement();
800 xmlWriter->startElement(
"draw:equation" );
801 xmlWriter->addAttribute(
"draw:formula",
"10800+?f5" );
802 xmlWriter->addAttribute(
"draw:name",
"f6" );
803 xmlWriter->endElement();
804 xmlWriter->startElement(
"draw:equation" );
805 xmlWriter->addAttribute(
"draw:formula",
"?f0-10800 " );
806 xmlWriter->addAttribute(
"draw:name",
"f7" );
807 xmlWriter->endElement();
808 xmlWriter->startElement(
"draw:equation" );
809 xmlWriter->addAttribute(
"draw:formula",
"if(?f7,?f12,0" );
810 xmlWriter->addAttribute(
"draw:name",
"f8" );
811 xmlWriter->endElement();
812 xmlWriter->startElement(
"draw:equation" );
813 xmlWriter->addAttribute(
"draw:formula",
"10800-?f5" );
814 xmlWriter->addAttribute(
"draw:name",
"f9" );
815 xmlWriter->endElement();
816 xmlWriter->startElement(
"draw:equation" );
817 xmlWriter->addAttribute(
"draw:formula",
"if(?f7, ?f12, 21600");
818 xmlWriter->addAttribute(
"draw:name",
"f10" );
819 xmlWriter->endElement();
820 xmlWriter->startElement(
"draw:equation" );
821 xmlWriter->addAttribute(
"draw:formula",
"21600-?f5" );
822 xmlWriter->addAttribute(
"draw:name",
"f11" );
823 xmlWriter->endElement();
824 xmlWriter->startElement(
"draw:equation" );
825 xmlWriter->addAttribute(
"draw:formula",
"21600*10800/?f0" );
826 xmlWriter->addAttribute(
"draw:name",
"f12" );
827 xmlWriter->endElement();
828 xmlWriter->startElement(
"draw:equation" );
829 xmlWriter->addAttribute(
"draw:formula",
"21600-?f12" );
830 xmlWriter->addAttribute(
"draw:name",
"f13" );
831 xmlWriter->endElement();
832 xmlWriter->startElement(
"draw:handle" );
833 xmlWriter->addAttribute(
"draw:handle-range-x-maximum", 21600);
834 xmlWriter->addAttribute(
"draw:handle-range-x-minimum", 0);
835 xmlWriter->addAttribute(
"draw:handle-position",
"$0 top");
836 xmlWriter->endElement();
837 xmlWriter->endElement();
838 xmlWriter->endElement();
841void PowerPointImport::processHexagon (DrawObject* drawObject, KoXmlWriter* xmlWriter )
843 if( !drawObject || !xmlWriter )
return;
845 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
846 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
847 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
848 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
849 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
851 xmlWriter->startElement(
"draw:custom-shape" );
852 xmlWriter->addAttribute(
"draw:style-name", styleName );
853 xmlWriter->addAttribute(
"svg:width", widthStr );
854 xmlWriter->addAttribute(
"svg:height", heightStr );
855 xmlWriter->addAttribute(
"svg:x", xStr );
856 xmlWriter->addAttribute(
"svg:y", yStr );
857 xmlWriter->addAttribute(
"draw:layer",
"layout" );
858 xmlWriter->startElement(
"draw:glue-point" );
859 xmlWriter->addAttribute(
"svg:x", 5 );
860 xmlWriter->addAttribute(
"svg:y", 0 );
861 xmlWriter->endElement();
862 xmlWriter->startElement(
"draw:glue-point" );
863 xmlWriter->addAttribute(
"svg:x", 0 );
864 xmlWriter->addAttribute(
"svg:y", 5 );
865 xmlWriter->endElement();
866 xmlWriter->startElement(
"draw:glue-point" );
867 xmlWriter->addAttribute(
"svg:x", 5 );
868 xmlWriter->addAttribute(
"svg:y", 10 );
869 xmlWriter->endElement();
870 xmlWriter->startElement(
"draw:glue-point" );
871 xmlWriter->addAttribute(
"svg:x", 10 );
872 xmlWriter->addAttribute(
"svg:y", 5 );
873 xmlWriter->endElement();
874 xmlWriter->startElement(
"draw:enhanced-geometry" );
875 xmlWriter->addAttribute(
"draw:type",
"hexagon" );
876 xmlWriter->startElement(
"draw:equation" );
877 xmlWriter->addAttribute(
"draw:formula",
"$0 " );
878 xmlWriter->addAttribute(
"draw:name",
"f0" );
879 xmlWriter->endElement();
880 xmlWriter->startElement(
"draw:equation" );
881 xmlWriter->addAttribute(
"draw:formula",
"21600-$0" );
882 xmlWriter->addAttribute(
"draw:name",
"f1" );
883 xmlWriter->endElement();
884 xmlWriter->startElement(
"draw:equation" );
885 xmlWriter->addAttribute(
"draw:formula",
"$0 *100/234" );
886 xmlWriter->addAttribute(
"draw:name",
"f2" );
887 xmlWriter->endElement();
888 xmlWriter->startElement(
"draw:equation" );
889 xmlWriter->addAttribute(
"draw:formula",
"?f2 +1700");
890 xmlWriter->addAttribute(
"draw:name",
"f3" );
891 xmlWriter->endElement();
892 xmlWriter->startElement(
"draw:equation" );
893 xmlWriter->addAttribute(
"draw:formula",
"21600-?f3" );
894 xmlWriter->addAttribute(
"draw:name",
"f4" );
895 xmlWriter->endElement();
896 xmlWriter->startElement(
"draw:handle" );
897 xmlWriter->addAttribute(
"draw:handle-range-x-maximum", 10800);
898 xmlWriter->addAttribute(
"draw:handle-range-x-minimum", 0);
899 xmlWriter->addAttribute(
"draw:handle-position",
"$0 top");
900 xmlWriter->endElement();
901 xmlWriter->endElement();
902 xmlWriter->endElement();
905void PowerPointImport::processOctagon (DrawObject* drawObject, KoXmlWriter* xmlWriter )
907 if( !drawObject || !xmlWriter )
return;
909 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
910 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
911 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
912 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
913 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
915 xmlWriter->startElement(
"draw:custom-shape" );
916 xmlWriter->addAttribute(
"draw:style-name", styleName );
917 xmlWriter->addAttribute(
"svg:width", widthStr );
918 xmlWriter->addAttribute(
"svg:height", heightStr );
919 xmlWriter->addAttribute(
"svg:x", xStr );
920 xmlWriter->addAttribute(
"svg:y", yStr );
921 xmlWriter->addAttribute(
"draw:layer",
"layout" );
922 xmlWriter->startElement(
"draw:glue-point" );
923 xmlWriter->addAttribute(
"svg:x", 5 );
924 xmlWriter->addAttribute(
"svg:y", 0 );
925 xmlWriter->endElement();
926 xmlWriter->startElement(
"draw:glue-point" );
927 xmlWriter->addAttribute(
"svg:x", 0 );
928 xmlWriter->addAttribute(
"svg:y", 4.782 );
929 xmlWriter->endElement();
930 xmlWriter->startElement(
"draw:glue-point" );
931 xmlWriter->addAttribute(
"svg:x", 5 );
932 xmlWriter->addAttribute(
"svg:y", 10 );
933 xmlWriter->endElement();
934 xmlWriter->startElement(
"draw:glue-point" );
935 xmlWriter->addAttribute(
"svg:x", 10 );
936 xmlWriter->addAttribute(
"svg:y", 4.782 );
937 xmlWriter->endElement();
938 xmlWriter->startElement(
"draw:enhanced-geometry" );
939 xmlWriter->addAttribute(
"draw:type",
"octagon" );
940 xmlWriter->startElement(
"draw:equation" );
941 xmlWriter->addAttribute(
"draw:formula",
"left+$0 " );
942 xmlWriter->addAttribute(
"draw:name",
"f0" );
943 xmlWriter->endElement();
944 xmlWriter->startElement(
"draw:equation" );
945 xmlWriter->addAttribute(
"draw:formula",
"top+$0 " );
946 xmlWriter->addAttribute(
"draw:name",
"f1" );
947 xmlWriter->endElement();
948 xmlWriter->startElement(
"draw:equation" );
949 xmlWriter->addAttribute(
"draw:formula",
"right-$0 " );
950 xmlWriter->addAttribute(
"draw:name",
"f2" );
951 xmlWriter->endElement();
952 xmlWriter->startElement(
"draw:equation" );
953 xmlWriter->addAttribute(
"draw:formula",
"bottom-$0 ");
954 xmlWriter->addAttribute(
"draw:name",
"f3" );
955 xmlWriter->endElement();
956 xmlWriter->startElement(
"draw:equation" );
957 xmlWriter->addAttribute(
"draw:formula",
"$0 /2" );
958 xmlWriter->addAttribute(
"draw:name",
"f4" );
959 xmlWriter->endElement();
960 xmlWriter->startElement(
"draw:equation" );
961 xmlWriter->addAttribute(
"draw:formula",
"left+?f4 " );
962 xmlWriter->addAttribute(
"draw:name",
"f5" );
963 xmlWriter->endElement();
964 xmlWriter->startElement(
"draw:equation" );
965 xmlWriter->addAttribute(
"draw:formula",
"top+?f4 " );
966 xmlWriter->addAttribute(
"draw:name",
"f6" );
967 xmlWriter->endElement();
968 xmlWriter->startElement(
"draw:equation" );
969 xmlWriter->addAttribute(
"draw:formula",
"right-?f4 " );
970 xmlWriter->addAttribute(
"draw:name",
"f7" );
971 xmlWriter->endElement();
972 xmlWriter->startElement(
"draw:equation" );
973 xmlWriter->addAttribute(
"draw:formula",
"bottom-?f4 ");
974 xmlWriter->addAttribute(
"draw:name",
"f8" );
975 xmlWriter->endElement();
976 xmlWriter->startElement(
"draw:handle" );
977 xmlWriter->addAttribute(
"draw:handle-range-x-maximum", 10800);
978 xmlWriter->addAttribute(
"draw:handle-range-x-minimum", 0);
979 xmlWriter->addAttribute(
"draw:handle-position",
"$0 top");
980 xmlWriter->endElement();
981 xmlWriter->endElement();
982 xmlWriter->endElement();
985void PowerPointImport::processArrow (DrawObject* drawObject, KoXmlWriter* xmlWriter )
987 if( !drawObject || !xmlWriter )
return;
989 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
990 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
991 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
992 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
993 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
995 xmlWriter->startElement(
"draw:custom-shape" );
996 xmlWriter->addAttribute(
"draw:style-name", styleName );
997 xmlWriter->addAttribute(
"svg:width", widthStr );
998 xmlWriter->addAttribute(
"svg:height", heightStr );
999 xmlWriter->addAttribute(
"svg:x", xStr );
1000 xmlWriter->addAttribute(
"svg:y", yStr );
1001 xmlWriter->addAttribute(
"draw:layer",
"layout" );
1002 xmlWriter->startElement(
"draw:enhanced-geometry" );
1004 if (drawObject->shape() == DrawObject::RightArrow)
1005 xmlWriter->addAttribute(
"draw:type",
"right-arrow" );
1006 else if (drawObject->shape() == DrawObject::LeftArrow)
1007 xmlWriter->addAttribute(
"draw:type",
"left-arrow" );
1008 else if (drawObject->shape() == DrawObject::UpArrow)
1009 xmlWriter->addAttribute(
"draw:type",
"up-arrow" );
1010 else if (drawObject->shape() == DrawObject::DownArrow)
1011 xmlWriter->addAttribute(
"draw:type",
"down-arrow" );
1012 xmlWriter->startElement(
"draw:equation" );
1013 xmlWriter->addAttribute(
"draw:formula",
"$1");
1014 xmlWriter->addAttribute(
"draw:name",
"f0");
1015 xmlWriter->endElement();
1016 xmlWriter->startElement(
"draw:equation" );
1017 xmlWriter->addAttribute(
"draw:formula",
"$0");
1018 xmlWriter->addAttribute(
"draw:name",
"f1");
1019 xmlWriter->endElement();
1020 xmlWriter->startElement(
"draw:equation" );
1021 xmlWriter->addAttribute(
"draw:formula",
"21600-$1");
1022 xmlWriter->addAttribute(
"draw:name",
"f2");
1023 xmlWriter->endElement();
1024 xmlWriter->startElement(
"draw:equation" );
1025 xmlWriter->addAttribute(
"draw:formula",
"21600-?f1");
1026 xmlWriter->addAttribute(
"draw:name",
"f3");
1027 xmlWriter->endElement();
1028 xmlWriter->startElement(
"draw:equation" );
1029 xmlWriter->addAttribute(
"draw:formula",
"?f3 *?f0 /10800");
1030 xmlWriter->addAttribute(
"draw:name",
"f4");
1031 xmlWriter->endElement();
1032 xmlWriter->startElement(
"draw:equation" );
1033 xmlWriter->addAttribute(
"draw:formula",
"?f1 +?f4 " );
1034 xmlWriter->addAttribute(
"draw:name",
"f5");
1035 xmlWriter->endElement();
1036 xmlWriter->startElement(
"draw:equation" );
1037 xmlWriter->addAttribute(
"draw:formula",
"?f1 *?f0 /10800");
1038 xmlWriter->addAttribute(
"draw:name",
"f6");
1039 xmlWriter->endElement();
1040 xmlWriter->startElement(
"draw:equation" );
1041 xmlWriter->addAttribute(
"draw:formula",
"?f1 -?f6 ");
1042 xmlWriter->addAttribute(
"draw:name",
"f7");
1043 xmlWriter->endElement();
1044 xmlWriter->startElement(
"draw:handle" );
1045 if ( drawObject->shape() == DrawObject::RightArrow | drawObject->shape() == DrawObject::LeftArrow )
1047 xmlWriter->addAttribute(
"draw:handle-range-x-maximum", 21600);
1048 xmlWriter->addAttribute(
"draw:handle-range-x-minimum", 0);
1049 xmlWriter->addAttribute(
"draw:handle-position",
"$0 $1");
1050 xmlWriter->addAttribute(
"draw:handle-range-y-maximum",10800);
1051 xmlWriter->addAttribute(
"draw:handle-range-y-minimum",0);
1053 else if ( drawObject->shape() == DrawObject::UpArrow | drawObject->shape() == DrawObject::DownArrow )
1055 xmlWriter->addAttribute(
"draw:handle-range-x-maximum", 10800);
1056 xmlWriter->addAttribute(
"draw:handle-range-x-minimum", 0);
1057 xmlWriter->addAttribute(
"draw:handle-position",
"$1 $0");
1058 xmlWriter->addAttribute(
"draw:handle-range-y-maximum",21600);
1059 xmlWriter->addAttribute(
"draw:handle-range-y-minimum",0);
1061 xmlWriter->endElement();
1062 xmlWriter->endElement();
1063 xmlWriter->endElement();
1066void PowerPointImport::processLine (DrawObject* drawObject, KoXmlWriter* xmlWriter )
1068 if( !drawObject || !xmlWriter)
return;
1070 TQString x1Str = TQString(
"%1mm").arg( drawObject->left() );
1071 TQString y1Str = TQString(
"%1mm").arg( drawObject->top() );
1072 TQString x2Str = TQString(
"%1mm").arg( drawObject->left() + drawObject->width() );
1073 TQString y2Str = TQString(
"%1mm").arg( drawObject->top() + drawObject->height() );
1074 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
1076 if ( drawObject->hasProperty(
"draw:mirror-vertical") )
1077 { TQString temp = y1Str;
1081 if ( drawObject->hasProperty(
"draw:mirror-horizontal") )
1082 { TQString temp = x1Str;
1087 xmlWriter->startElement(
"draw:line" );
1088 xmlWriter->addAttribute(
"draw:style-name", styleName );
1089 xmlWriter->addAttribute(
"svg:y1", y1Str );
1090 xmlWriter->addAttribute(
"svg:y2", y2Str );
1091 xmlWriter->addAttribute(
"svg:x1", x1Str );
1092 xmlWriter->addAttribute(
"svg:x2", x2Str );
1093 xmlWriter->addAttribute(
"draw:layer",
"layout" );
1095 xmlWriter->endElement();
1098void PowerPointImport::processSmiley (DrawObject* drawObject, KoXmlWriter* xmlWriter )
1100 if( !drawObject ||!xmlWriter )
return;
1102 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
1103 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
1104 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
1105 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
1106 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
1108 xmlWriter->startElement(
"draw:custom-shape" );
1109 xmlWriter->addAttribute(
"draw:style-name", styleName );
1110 xmlWriter->addAttribute(
"svg:width", widthStr );
1111 xmlWriter->addAttribute(
"svg:height", heightStr );
1112 xmlWriter->addAttribute(
"svg:x", xStr );
1113 xmlWriter->addAttribute(
"svg:y", yStr );
1114 xmlWriter->addAttribute(
"draw:layer",
"layout" );
1115 xmlWriter->startElement(
"draw:glue-point" );
1116 xmlWriter->addAttribute(
"svg:x", 5 );
1117 xmlWriter->addAttribute(
"svg:y", 0 );
1118 xmlWriter->endElement();
1119 xmlWriter->startElement(
"draw:glue-point" );
1120 xmlWriter->addAttribute(
"svg:x", 1.461 );
1121 xmlWriter->addAttribute(
"svg:y", 1.461 );
1122 xmlWriter->endElement();
1123 xmlWriter->startElement(
"draw:glue-point" );
1124 xmlWriter->addAttribute(
"svg:x", 0 );
1125 xmlWriter->addAttribute(
"svg:y", 5 );
1126 xmlWriter->endElement();
1127 xmlWriter->startElement(
"draw:glue-point" );
1128 xmlWriter->addAttribute(
"svg:x", 1.461 );
1129 xmlWriter->addAttribute(
"svg:y", 8.536 );
1130 xmlWriter->endElement();
1131 xmlWriter->startElement(
"draw:glue-point" );
1132 xmlWriter->addAttribute(
"svg:x", 10 );
1133 xmlWriter->addAttribute(
"svg:y", 5 );
1134 xmlWriter->endElement();
1135 xmlWriter->startElement(
"draw:glue-point" );
1136 xmlWriter->addAttribute(
"svg:x", 8.536 );
1137 xmlWriter->addAttribute(
"svg:y", 1.461 );
1138 xmlWriter->endElement();
1139 xmlWriter->startElement(
"draw:enhanced-geometry" );
1140 xmlWriter->addAttribute(
"draw:type",
"smiley" );
1141 xmlWriter->startElement(
"draw:equation" );
1142 xmlWriter->addAttribute(
"draw:formula",
"$0-15510 " );
1143 xmlWriter->addAttribute(
"draw:name",
"f0" );
1144 xmlWriter->endElement();
1145 xmlWriter->startElement(
"draw:equation" );
1146 xmlWriter->addAttribute(
"draw:formula",
"17520-?f0" );
1147 xmlWriter->addAttribute(
"draw:name",
"f1" );
1148 xmlWriter->endElement();
1149 xmlWriter->startElement(
"draw:equation" );
1150 xmlWriter->addAttribute(
"draw:formula",
"15510+?f0" );
1151 xmlWriter->addAttribute(
"draw:name",
"f2" );
1152 xmlWriter->endElement();
1153 xmlWriter->startElement(
"draw:handle" );
1154 xmlWriter->addAttribute(
"draw:position", 10800);
1155 xmlWriter->addAttribute(
"draw:handle-range-y-maximum", 17520);
1156 xmlWriter->addAttribute(
"draw:handle-range-y-minimum", 15510);
1157 xmlWriter->addAttribute(
"draw:handle-position",
"$0 top");
1158 xmlWriter->endElement();
1159 xmlWriter->endElement();
1160 xmlWriter->endElement();
1163void PowerPointImport::processHeart (DrawObject* drawObject, KoXmlWriter* xmlWriter )
1165 if( !drawObject || !xmlWriter )
return;
1167 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
1168 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
1169 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
1170 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
1171 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
1173 xmlWriter->startElement(
"draw:custom-shape" );
1174 xmlWriter->addAttribute(
"draw:style-name", styleName );
1175 xmlWriter->addAttribute(
"svg:width", widthStr );
1176 xmlWriter->addAttribute(
"svg:height", heightStr );
1177 xmlWriter->addAttribute(
"svg:x", xStr );
1178 xmlWriter->addAttribute(
"svg:y", yStr );
1179 xmlWriter->addAttribute(
"draw:layer",
"layout" );
1180 xmlWriter->startElement(
"draw:glue-point" );
1181 xmlWriter->addAttribute(
"svg:x", 5 );
1182 xmlWriter->addAttribute(
"svg:y", 1 );
1183 xmlWriter->endElement();
1184 xmlWriter->startElement(
"draw:glue-point" );
1185 xmlWriter->addAttribute(
"svg:x", 1.43 );
1186 xmlWriter->addAttribute(
"svg:y", 5 );
1187 xmlWriter->endElement();
1188 xmlWriter->startElement(
"draw:glue-point" );
1189 xmlWriter->addAttribute(
"svg:x", 5 );
1190 xmlWriter->addAttribute(
"svg:y", 10 );
1191 xmlWriter->endElement();
1192 xmlWriter->startElement(
"draw:glue-point" );
1193 xmlWriter->addAttribute(
"svg:x", 8.553 );
1194 xmlWriter->addAttribute(
"svg:y", 5 );
1195 xmlWriter->endElement();
1196 xmlWriter->startElement(
"draw:enhanced-geometry" );
1197 xmlWriter->addAttribute(
"draw:type",
"heart" );
1199 xmlWriter->endElement();
1200 xmlWriter->endElement();
1203void PowerPointImport::processFreeLine (DrawObject* drawObject, KoXmlWriter* xmlWriter)
1205 if( !drawObject ||!xmlWriter )
return;
1207 TQString widthStr = TQString(
"%1mm").arg( drawObject->width() );
1208 TQString heightStr = TQString(
"%1mm").arg( drawObject->height() );
1209 TQString xStr = TQString(
"%1mm").arg( drawObject->left() );
1210 TQString yStr = TQString(
"%1mm").arg( drawObject->top() );
1211 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
1213 xmlWriter->startElement(
"draw:path" );
1214 xmlWriter->addAttribute(
"draw:style-name", styleName );
1215 xmlWriter->addAttribute(
"svg:width", widthStr );
1216 xmlWriter->addAttribute(
"svg:height", heightStr );
1217 xmlWriter->addAttribute(
"svg:x", xStr );
1218 xmlWriter->addAttribute(
"svg:y", yStr );
1219 xmlWriter->addAttribute(
"draw:layer",
"layout" );
1220 xmlWriter->endElement();
1223void PowerPointImport::processDrawingObjectForBody( DrawObject* drawObject, KoXmlWriter* xmlWriter )
1226 if( !drawObject || !xmlWriter )
return;
1228 drawingObjectCounter++;
1231 if (drawObject->shape() == DrawObject::Ellipse)
1233 processEllipse (drawObject, xmlWriter );
1235 else if (drawObject->shape() == DrawObject::Rectangle)
1237 processRectangle (drawObject, xmlWriter );
1239 else if (drawObject->shape() == DrawObject::RoundRectangle)
1241 processRoundRectangle (drawObject, xmlWriter );
1243 else if (drawObject->shape() == DrawObject::Diamond)
1245 processDiamond (drawObject, xmlWriter );
1247 else if (drawObject->shape() == DrawObject::IsoscelesTriangle |
1248 drawObject->shape() == DrawObject::RightTriangle)
1250 processTriangle (drawObject, xmlWriter );
1252 else if (drawObject->shape() == DrawObject::Trapezoid)
1254 processTrapezoid (drawObject, xmlWriter );
1256 else if (drawObject->shape() == DrawObject::Parallelogram)
1258 processParallelogram( drawObject, xmlWriter);
1260 else if (drawObject->shape() == DrawObject::Hexagon)
1262 processHexagon ( drawObject, xmlWriter );
1264 else if (drawObject->shape() == DrawObject::Octagon)
1266 processOctagon ( drawObject, xmlWriter );
1268 else if (drawObject->shape() == DrawObject::RightArrow |
1269 drawObject->shape() == DrawObject::LeftArrow |
1270 drawObject->shape() == DrawObject::UpArrow |
1271 drawObject->shape() == DrawObject::DownArrow )
1273 processArrow ( drawObject, xmlWriter );
1275 else if (drawObject->shape() == DrawObject::Line)
1277 processLine ( drawObject, xmlWriter );
1279 else if (drawObject->shape() == DrawObject::Smiley)
1281 processSmiley (drawObject, xmlWriter );
1283 else if (drawObject->shape() == DrawObject::Heart)
1285 processHeart (drawObject, xmlWriter );
1287 else if (drawObject->shape() == DrawObject::FreeLine)
1289 processFreeLine (drawObject, xmlWriter );
1293void PowerPointImport::processGroupObjectForBody( GroupObject* groupObject, KoXmlWriter* xmlWriter )
1295 if( !groupObject || !xmlWriter )
return;
1296 if( !groupObject->objectCount() )
return;
1298 xmlWriter->startElement(
"draw:g" );
1300 for(
unsigned i = 0; i < groupObject->objectCount(); i++ )
1302 Object*
object = groupObject->object( i );
1304 processObjectForBody(
object, xmlWriter );
1307 xmlWriter->endElement();
1310void PowerPointImport::processTextObjectForBody( TextObject* textObject, KoXmlWriter* xmlWriter )
1312 if( !textObject || !xmlWriter )
return;
1314 TQString classStr =
"subtitle";
1315 if( textObject->type() == TextObject::Title )
1320 TQString widthStr = TQString(
"%1mm").arg( textObject->width() );
1321 TQString heightStr = TQString(
"%1mm").arg( textObject->height() );
1322 TQString xStr = TQString(
"%1mm").arg( textObject->left() );
1323 TQString yStr = TQString(
"%1mm").arg( textObject->top() );
1325 xmlWriter->startElement(
"draw:frame" );
1326 xmlWriter->addAttribute(
"presentation:style-name",
"pr1" );
1327 xmlWriter->addAttribute(
"draw:layer",
"layout" );
1328 xmlWriter->addAttribute(
"svg:width", widthStr );
1329 xmlWriter->addAttribute(
"svg:height", heightStr );
1330 xmlWriter->addAttribute(
"svg:x", xStr );
1331 xmlWriter->addAttribute(
"svg:y", yStr );
1332 xmlWriter->addAttribute(
"presentation:class", classStr );
1333 xmlWriter->startElement(
"draw:text-box" );
1336 for (
unsigned i=0; i<textObject->listSize(); i++)
1338 pStr = Libppt::string(textObject->text(i)).string();
1339 if (textObject->bulletFlag(i) == 1 )
1341 xmlWriter->startElement(
"text:list" );
1342 xmlWriter->addAttribute(
"text:style-name",
"L2");
1343 xmlWriter->startElement(
"text:list-item" );
1344 xmlWriter->startElement(
"text:p" );
1345 xmlWriter->addAttribute(
"text:style-name",
"P1" );
1346 xmlWriter->addTextSpan( pStr );
1347 xmlWriter->endElement();
1348 xmlWriter->endElement();
1349 xmlWriter->endElement();
1353 xmlWriter->startElement(
"text:p" );
1354 xmlWriter->addAttribute(
"text:style-name",
"P1" );
1355 xmlWriter->addTextSpan( pStr );
1356 xmlWriter->endElement();
1360 xmlWriter->endElement();
1361 xmlWriter->endElement();
1366void PowerPointImport::processObjectForBody( Object*
object, KoXmlWriter* xmlWriter )
1368 if( !
object || !xmlWriter)
return;
1370 if( object->isText() )
1371 processTextObjectForBody(
static_cast<TextObject*
>(
object), xmlWriter );
1372 else if( object->isGroup() )
1373 processGroupObjectForBody(
static_cast<GroupObject*
>(
object), xmlWriter );
1374 else if( object->isDrawing() )
1375 processDrawingObjectForBody(
static_cast<DrawObject*
>(
object), xmlWriter );
1378void PowerPointImport::processSlideForBody(
unsigned slideNo, Slide* slide, KoXmlWriter* xmlWriter )
1380 if( !slide || !xmlWriter )
return;
1382 TQString nameStr = Libppt::string( slide->title() ).string();
1383 if( nameStr.isEmpty() )
1384 nameStr = TQString(
"page%1").arg(slideNo+1);
1386 TQString styleNameStr = TQString(
"dp%1").arg(slideNo+1);
1388 xmlWriter->startElement(
"draw:page" );
1389 xmlWriter->addAttribute(
"draw:master-page-name",
"Default" );
1390 xmlWriter->addAttribute(
"draw:name", nameStr );
1391 xmlWriter->addAttribute(
"draw:style-name", styleNameStr );
1392 xmlWriter->addAttribute(
"presentation:presentation-page-layout-name",
"AL1T0");
1394 GroupObject* root = slide->rootObject();
1396 for(
unsigned i = 0; i < root->objectCount(); i++ )
1398 Object*
object = root->object( i );
1400 processObjectForBody(
object, xmlWriter );
1403 xmlWriter->endElement();
1406void PowerPointImport::processSlideForStyle(
unsigned , Slide* slide, KoXmlWriter* xmlWriter )
1408 if( !slide || !xmlWriter )
return;
1410 GroupObject* root = slide->rootObject();
1412 for(
unsigned i = 0; i < root->objectCount(); i++ )
1414 Object*
object = root->object( i );
1416 processObjectForStyle(
object, xmlWriter );
1420void PowerPointImport::processObjectForStyle( Object*
object, KoXmlWriter* xmlWriter )
1422 if( !
object || !xmlWriter )
return;
1424 if( object->isText() )
1425 processTextObjectForStyle(
static_cast<TextObject*
>(
object), xmlWriter );
1426 else if( object->isGroup() )
1427 processGroupObjectForStyle(
static_cast<GroupObject*
>(
object), xmlWriter );
1428 else if( object->isDrawing() )
1429 processDrawingObjectForStyle(
static_cast<DrawObject*
>(
object), xmlWriter );
1432void PowerPointImport::processTextObjectForStyle( TextObject* textObject, KoXmlWriter* xmlWriter )
1434 if( !textObject || !xmlWriter )
return;
1437void PowerPointImport::processGroupObjectForStyle( GroupObject* groupObject, KoXmlWriter* xmlWriter )
1439 if( !groupObject ||!xmlWriter )
return;
1442TQString hexname(
const Color &c )
1444 TQColor qc( c.red, c.green, c.blue );
1448void PowerPointImport::processDrawingObjectForStyle( DrawObject* drawObject, KoXmlWriter* xmlWriter )
1450 if( !drawObject || !xmlWriter)
return;
1452 drawingObjectCounter++;
1453 TQString styleName = TQString(
"gr%1").arg( drawingObjectCounter );
1455 xmlWriter->startElement(
"style:style" );
1456 xmlWriter->addAttribute(
"style:name", styleName );
1457 xmlWriter->addAttribute(
"style:family",
"graphic" );
1458 xmlWriter->addAttribute(
"style:parent-style-name",
"standard" );
1460 xmlWriter->startElement(
"style:graphic-properties" );
1470 if (drawObject->hasProperty(
"libppt:invisibleLine" ))
1472 if (drawObject->getBoolProperty(
"libppt:invisibleLine") ==
true)
1473 xmlWriter->addAttribute(
"draw:stroke",
"none" );
1475 else if( drawObject->hasProperty(
"draw:stroke" ) )
1476 {
if (drawObject->getStrProperty(
"draw:stroke" ) ==
"dash")
1478 xmlWriter->addAttribute(
"draw:stroke",
"dash" );
1479 std::string s = drawObject->getStrProperty(
"draw:stroke-dash");
1480 TQString ss( s.c_str() );
1481 xmlWriter->addAttribute(
"draw:stroke-dash", ss );
1482 tqDebug(
"=============stroke dash===================");
1485 else if (drawObject->getStrProperty(
"draw:stroke" ) ==
"solid")
1486 xmlWriter->addAttribute(
"draw:stroke",
"solid" );
1490 if( drawObject->hasProperty(
"svg:stroke-width" ) )
1492 double strokeWidth = drawObject->getDoubleProperty(
"svg:stroke-width" );
1493 xmlWriter->addAttribute(
"svg:stroke-width",TQString(
"%1mm").arg( strokeWidth ) );
1496 if( drawObject->hasProperty(
"svg:stroke-color" ) )
1498 Color strokeColor = drawObject->getColorProperty(
"svg:stroke-color" );
1499 xmlWriter->addAttribute(
"svg:stroke-color", hexname( strokeColor ) );
1502 if( drawObject->hasProperty(
"draw:marker-start" ) )
1504 std::string s = drawObject->getStrProperty(
"draw:marker-start");
1505 TQString ss( s.c_str() );
1506 xmlWriter->addAttribute(
"draw:marker-start", ss );
1508 if( drawObject->hasProperty(
"draw:marker-end" ) )
1510 std::string s = drawObject->getStrProperty(
"draw:marker-end");
1511 TQString ss( s.c_str() );
1512 xmlWriter->addAttribute(
"draw:marker-end", ss);
1527 if( drawObject->hasProperty(
"draw:marker-start-width" ) )
1529 double strokeWidth = drawObject->getDoubleProperty(
"svg:stroke-width" );
1530 double arrowWidth = (drawObject->getDoubleProperty(
"draw:marker-start-width") * strokeWidth);
1531 xmlWriter->addAttribute(
"draw:marker-start-width",TQString(
"%1cm").arg( arrowWidth ) );
1534 if( drawObject->hasProperty(
"draw:marker-end-width" ) )
1536 double strokeWidth = drawObject->getDoubleProperty(
"svg:stroke-width" );
1537 double arrowWidth = (drawObject->getDoubleProperty(
"draw:marker-end-width") * strokeWidth);
1538 xmlWriter->addAttribute(
"draw:marker-end-width",TQString(
"%1cm").arg( arrowWidth ) );
1543 if( drawObject->hasProperty(
"draw:fill" ) )
1545 std::string s = drawObject->getStrProperty(
"draw:fill");
1546 TQString ss( s.c_str() );
1547 xmlWriter->addAttribute(
"draw:fill", ss);
1552 if( drawObject->hasProperty(
"draw:fill-color" ) )
1554 Color fillColor = drawObject->getColorProperty(
"draw:fill-color" );
1555 xmlWriter->addAttribute(
"draw:fill-color", hexname( fillColor ) );
1557 }
else xmlWriter->addAttribute(
"draw:fill-color",
"#99ccff" );
1560 if( drawObject->hasProperty(
"draw:shadow-color" ) )
1562 xmlWriter->addAttribute(
"draw:shadow",
"visible" );
1563 Color shadowColor = drawObject->getColorProperty(
"draw:shadow-color" );
1564 xmlWriter->addAttribute(
"draw:shadow-color", hexname( shadowColor ) );
1566 else xmlWriter->addAttribute(
"draw:shadow",
"hidden" );
1569 if( drawObject->hasProperty(
"draw:shadow-opacity" ) )
1571 double opacity = drawObject->getDoubleProperty(
"draw:shadow-opacity") ;
1572 xmlWriter->addAttribute(
"draw:shadow-opacity",TQString(
"%1%").arg( opacity ) );
1575 if( drawObject->hasProperty(
"draw:shadow-offset-x" ) )
1577 double offset = drawObject->getDoubleProperty(
"draw:shadow-offset-x") ;
1578 xmlWriter->addAttribute(
"draw:shadow-offset-x",TQString(
"%1cm").arg( offset ) );
1581 if( drawObject->hasProperty(
"draw:shadow-offset-y" ) )
1583 double offset = drawObject->getDoubleProperty(
"draw:shadow-offset-y");
1584 xmlWriter->addAttribute(
"draw:shadow-offset-y",TQString(
"%1cm").arg( offset ) );
1588 xmlWriter->endElement();
1590 xmlWriter->endElement();
const UChar * data() const