powerpointimport.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2005 Yolla Indria <yolla.indria@gmail.com>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18*/
19
20#include <config.h>
21
22#ifdef HAVE_UNISTD_H
23#include <unistd.h>
24#endif
25
26#include <powerpointimport.h>
27#include <powerpointimport.moc>
28
29#include <tqbuffer.h>
30#include <tqcstring.h>
31#include <tqfile.h>
32#include <tqstring.h>
33#include <tqtextstream.h>
34
35#include <kdebug.h>
36#include <KoFilterChain.h>
37#include <KoGlobal.h>
38#include <KoUnit.h>
39#include <kgenericfactory.h>
40
41#include <KoXmlWriter.h>
42
43#include "libppt.h"
44#include <iostream>
45#include <math.h>
46
47using namespace Libppt;
48
49typedef KGenericFactory<PowerPointImport, KoFilter> PowerPointImportFactory;
50K_EXPORT_COMPONENT_FACTORY( libpowerpointimport,
51 PowerPointImportFactory( "kofficefilters" ) )
52
53namespace Libppt {
54
55inline TQConstString string( const Libppt::UString& str )
56{
57 return TQConstString( reinterpret_cast<const TQChar*>( str.data() ), str.length() );
58}
59
60}
61
62class PowerPointImport::Private
63{
64public:
65 TQString inputFile;
66 TQString outputFile;
67
68 Presentation *presentation;
69};
70
71
72PowerPointImport::PowerPointImport ( TQObject*, const char*, const TQStringList& )
73 : KoFilter()
74{
75 d = new Private;
76}
77
78PowerPointImport::~PowerPointImport()
79{
80 delete d;
81}
82
83KoFilter::ConversionStatus PowerPointImport::convert( const TQCString& from, const TQCString& to )
84{
85 if ( from != "application/mspowerpoint" )
86 return KoFilter::NotImplemented;
87
88 if ( to != "application/vnd.oasis.opendocument.presentation" )
89 return KoFilter::NotImplemented;
90
91 d->inputFile = m_chain->inputFile();
92 d->outputFile = m_chain->outputFile();
93
94 // open inputFile
95 d->presentation = new Presentation;
96 if( !d->presentation->load( d->inputFile.local8Bit() ) )
97 {
98 delete d->presentation;
99 d->presentation = 0;
100 return KoFilter::StupidError;
101 }
102
103 // create output store
104 KoStore* storeout;
105 storeout = KoStore::createStore( d->outputFile, KoStore::Write,
106 "application/vnd.oasis.opendocument.presentation", KoStore::Zip );
107
108 if ( !storeout )
109 {
110 kdWarning() << "Couldn't open the requested file." << endl;
111 return KoFilter::FileNotFound;
112 }
113
114 // store document content
115 if ( !storeout->open( "content.xml" ) )
116 {
117 kdWarning() << "Couldn't open the file 'content.xml'." << endl;
118 return KoFilter::CreationError;
119 }
120 storeout->write( createContent() );
121 storeout->close();
122
123 // store document styles
124 if ( !storeout->open( "styles.xml" ) )
125 {
126 kdWarning() << "Couldn't open the file 'styles.xml'." << endl;
127 return KoFilter::CreationError;
128 }
129 storeout->write( createStyles() );
130 storeout->close();
131
132 // store document manifest
133 storeout->enterDirectory( "META-INF" );
134 if ( !storeout->open( "manifest.xml" ) )
135 {
136 kdWarning() << "Couldn't open the file 'META-INF/manifest.xml'." << endl;
137 return KoFilter::CreationError;
138 }
139 storeout->write( createManifest() );
140 storeout->close();
141
142
143 // we are done!
144 delete d->presentation;
145 delete storeout;
146 d->inputFile = TQString();
147 d->outputFile = TQString();
148 d->presentation = 0;
149
150 return KoFilter::OK;
151}
152
153TQByteArray PowerPointImport::createStyles()
154{
155 KoXmlWriter* stylesWriter;
156 TQByteArray stylesData;
157 TQBuffer stylesBuffer( stylesData );
158
159 TQString pageWidth = TQString("%1pt").arg( d->presentation->masterSlide()->pageWidth() );
160 TQString pageHeight = TQString("%1pt").arg( d->presentation->masterSlide()->pageHeight() );
161
162 stylesBuffer.open( IO_WriteOnly );
163 stylesWriter = new KoXmlWriter( &stylesBuffer );
164
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" );
174
175 // office:styles
176 stylesWriter->startElement( "office:styles" );
177 stylesWriter->endElement();
178
179 // office:automatic-styles
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(); // style:page-layout-properties
193 stylesWriter->endElement(); // style:page-layout
194
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(); // style:drawing-page-properties
203 stylesWriter->endElement(); // style:style
204
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(); // style:paragraph-properties
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(); // style:text-properties
218 stylesWriter->endElement(); // style:style
219
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(); // style:text-properties
231 stylesWriter->endElement(); // text:list-level-style-bullet
232 stylesWriter->endElement(); // text:list-style
233
234 stylesWriter->endElement(); // office:automatic-styles
235
236 // office:master-stylesborder
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();
244
245 stylesWriter->endElement(); // office:document-styles
246 stylesWriter->endDocument();
247 delete stylesWriter;
248
249 // for troubleshooting only !!
250 TQString dbg;
251 for( unsigned i=0; i<stylesData.size(); i++ )
252 dbg.append( stylesData[i] );
253 tqDebug("\nstyles.xml:\n%s\n", dbg.latin1() );
254
255 return stylesData;
256}
257
258
259TQByteArray PowerPointImport::createContent()
260{
261 KoXmlWriter* contentWriter;
262 TQByteArray contentData;
263 TQBuffer contentBuffer( contentData );
264
265 contentBuffer.open( IO_WriteOnly );
266 contentWriter = new KoXmlWriter( &contentBuffer );
267
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" );
277
278 // office:automatic-styles
279
280 drawingObjectCounter = 0;
281 contentWriter->startElement( "office:automatic-styles" );
282 for( unsigned c=0; c < d->presentation->slideCount(); c++ )
283 {
284 Slide* slide = d->presentation->slide( c );
285 processSlideForStyle( c, slide, contentWriter );
286 }
287 contentWriter->endElement();
288
289
290
291 // office:body
292
293 contentWriter->startElement( "office:body" );
294 contentWriter->startElement( "office:presentation" );
295
296 drawingObjectCounter = 0;
297 for( unsigned c=0; c < d->presentation->slideCount(); c++ )
298 {
299 Slide* slide = d->presentation->slide( c );
300 processSlideForBody( c, slide, contentWriter );
301 }
302
303 contentWriter->endElement(); // office:presentation
304 contentWriter->endElement(); // office:body
305
306 contentWriter->endElement(); // office:document-content
307 contentWriter->endDocument();
308 delete contentWriter;
309
310 // for troubleshooting only !!
311 TQString dbg;
312 for( unsigned i=0; i<contentData.size(); i++ )
313 dbg.append( contentData[i] );
314 tqDebug("\ncontent.xml:\n%s\n", dbg.latin1() );
315
316 return contentData;
317}
318
319TQByteArray PowerPointImport::createManifest()
320{
321 KoXmlWriter* manifestWriter;
322 TQByteArray manifestData;
323 TQBuffer manifestBuffer( manifestData );
324
325 manifestBuffer.open( IO_WriteOnly );
326 manifestWriter = new KoXmlWriter( &manifestBuffer );
327
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" );
332
333 manifestWriter->addManifestEntry( "/", "application/vnd.oasis.opendocument.presentation" );
334 manifestWriter->addManifestEntry( "styles.xml", "text/xml" );
335 manifestWriter->addManifestEntry( "content.xml", "text/xml" );
336
337 manifestWriter->endElement();
338 manifestWriter->endDocument();
339 delete manifestWriter;
340
341 // for troubleshooting only !!
342 TQString dbg;
343 for( unsigned i=0; i<manifestData.size(); i++ )
344 dbg.append( manifestData[i] );
345 tqDebug("\nmanifest.xml:\n%s\n", dbg.latin1() );
346
347 return manifestData;
348}
349
350void PowerPointImport::processEllipse (DrawObject* drawObject, KoXmlWriter* xmlWriter )
351{
352 if( !drawObject || !xmlWriter ) return;
353
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 );
359
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(); // draw:ellipse
368}
369
370void PowerPointImport::processRectangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
371{
372 if( !drawObject ) return;
373 if( !xmlWriter ) return;
374
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 );
380
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" ) )
386 {
387
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();
393
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 );
398 }
399 else
400 {
401 xmlWriter->addAttribute( "svg:x", xStr );
402 xmlWriter->addAttribute( "svg:y", yStr );
403 }
404 xmlWriter->addAttribute( "draw:layer", "layout" );
405 xmlWriter->endElement(); // draw:rect
406}
407
408void PowerPointImport::processRoundRectangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
409{
410 if( !drawObject || !xmlWriter ) return;
411
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 );
417
418 xmlWriter->startElement( "draw:custom-shape" );
419 xmlWriter->addAttribute( "draw:style-name", styleName );
420
421
422 if ( drawObject->hasProperty ( "libppt:rotation" ) )
423 {
424 double rotAngle = drawObject->getDoubleProperty("libppt:rotation" );
425
426
427
428 if ( rotAngle > 0.785399 ) // > 45 deg
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;
435
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 );
440 }
441 else
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();
448
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 );
453 }
454
455
456 }
457 else
458 { xmlWriter->addAttribute( "svg:width", widthStr );
459 xmlWriter->addAttribute( "svg:height", heightStr );
460 xmlWriter->addAttribute( "svg:x", xStr );
461 xmlWriter->addAttribute( "svg:y", yStr );
462 }
463 // xmlWriter->addAttribute( "svg:x", xStr );
464 // xmlWriter->addAttribute( "svg:y", yStr );
465
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(); // draw:equation
473 xmlWriter->startElement( "draw:equation" );
474 xmlWriter->addAttribute( "draw:formula", "right-?f0 " );
475 xmlWriter->addAttribute( "draw:name", "f1" );
476 xmlWriter->endElement(); // draw:equation
477 xmlWriter->startElement( "draw:equation" );
478 xmlWriter->addAttribute( "draw:formula", "bottom-?f0 " );
479 xmlWriter->addAttribute( "draw:name", "f2" );
480 xmlWriter->endElement(); // draw:equation
481 xmlWriter->startElement( "draw:equation" );
482 xmlWriter->addAttribute( "draw:formula", "left+?f0 " );
483 xmlWriter->addAttribute( "draw:name", "f3" );
484 xmlWriter->endElement(); // draw:equation
485 xmlWriter->startElement( "draw:equation" );
486 xmlWriter->addAttribute( "draw:formula", "top+?f0 " );
487 xmlWriter->addAttribute( "draw:name", "f4" );
488 xmlWriter->endElement(); // draw:equation
489 xmlWriter->endElement(); // draw:enhanced-geometry
490 xmlWriter->endElement(); // draw:custom-shape
491}
492
493void PowerPointImport::processDiamond (DrawObject* drawObject, KoXmlWriter* xmlWriter )
494{
495 if( !drawObject || !xmlWriter ) return;
496
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 );
502
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();
530}
531
532void PowerPointImport::processTriangle (DrawObject* drawObject, KoXmlWriter* xmlWriter )
533{
534 if( !drawObject || !xmlWriter ) return;
535
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 );
541
542 /* draw IsocelesTriangle or RightTriangle */
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();
574
575 xmlWriter->startElement( "draw:enhanced-geometry" );
576
577 if (drawObject->hasProperty("draw:mirror-vertical"))
578 {
579 xmlWriter->addAttribute("draw:mirror-vertical","true");
580 }
581 if ( drawObject->hasProperty("draw:mirror-horizontal"))
582 {
583 xmlWriter->addAttribute("draw:mirror-horizontal","true");
584 }
585 if ( drawObject->hasProperty ( "libppt:rotation" ) )
586 { // draw:transform="rotate (1.5707963267946) translate (6.985cm 14.181cm)"
587
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 );
593 }
594 if (drawObject->shape() == DrawObject::RightTriangle)
595 {
596 xmlWriter->addAttribute( "draw:type", "right-triangle");
597 }
598 else if (drawObject->shape() == DrawObject::IsoscelesTriangle)
599 {
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();
638 }
639
640 xmlWriter->endElement(); // enhanced-geometry
641 xmlWriter->endElement(); // custom-shape
642}
643
644void PowerPointImport::processTrapezoid (DrawObject* drawObject, KoXmlWriter* xmlWriter )
645{
646 if( !drawObject || !xmlWriter ) return;
647
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 );
653
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" );
661
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") )
680 {
681 xmlWriter->addAttribute("draw:mirror-vertical","true");
682 }
683 if ( drawObject->hasProperty("draw:mirror-horizontal"))
684 {
685 xmlWriter->addAttribute("draw:mirror-horizontal","true");
686 }
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(); // enhanced-geometry
722 xmlWriter->endElement(); // custom-shape
723}
724
725void PowerPointImport::processParallelogram (DrawObject* drawObject, KoXmlWriter* xmlWriter )
726{
727 if( !drawObject || !xmlWriter ) return;
728
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 );
734
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"))
768 {
769 xmlWriter->addAttribute("draw:mirror-vertical","true");
770 }
771 if ( drawObject->hasProperty("draw:mirror-horizontal"))
772 {
773 xmlWriter->addAttribute("draw:mirror-horizontal","true");
774 }
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(); // enhanced-geometry
838 xmlWriter->endElement(); // custom-shape
839}
840
841void PowerPointImport::processHexagon (DrawObject* drawObject, KoXmlWriter* xmlWriter )
842{
843 if( !drawObject || !xmlWriter ) return;
844
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 );
850
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(); // enhanced-geometry
902 xmlWriter->endElement(); // custom-shape
903}
904
905void PowerPointImport::processOctagon (DrawObject* drawObject, KoXmlWriter* xmlWriter )
906{
907 if( !drawObject || !xmlWriter ) return;
908
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 );
914
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(); // enhanced-geometry
982 xmlWriter->endElement(); // custom-shape
983}
984
985void PowerPointImport::processArrow (DrawObject* drawObject, KoXmlWriter* xmlWriter )
986{
987 if( !drawObject || !xmlWriter ) return;
988
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 );
994
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" );
1003
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(); // draw:equation
1016 xmlWriter->startElement( "draw:equation" );
1017 xmlWriter->addAttribute( "draw:formula","$0");
1018 xmlWriter->addAttribute( "draw:name","f1");
1019 xmlWriter->endElement(); // draw:equation
1020 xmlWriter->startElement( "draw:equation" );
1021 xmlWriter->addAttribute( "draw:formula","21600-$1");
1022 xmlWriter->addAttribute( "draw:name","f2");
1023 xmlWriter->endElement(); // draw:equation
1024 xmlWriter->startElement( "draw:equation" );
1025 xmlWriter->addAttribute( "draw:formula","21600-?f1");
1026 xmlWriter->addAttribute( "draw:name","f3");
1027 xmlWriter->endElement(); // draw:equation
1028 xmlWriter->startElement( "draw:equation" );
1029 xmlWriter->addAttribute( "draw:formula","?f3 *?f0 /10800");
1030 xmlWriter->addAttribute( "draw:name","f4");
1031 xmlWriter->endElement(); // draw:equation
1032 xmlWriter->startElement( "draw:equation" );
1033 xmlWriter->addAttribute( "draw:formula","?f1 +?f4 " );
1034 xmlWriter->addAttribute( "draw:name","f5");
1035 xmlWriter->endElement(); // draw:equation
1036 xmlWriter->startElement( "draw:equation" );
1037 xmlWriter->addAttribute( "draw:formula","?f1 *?f0 /10800");
1038 xmlWriter->addAttribute( "draw:name","f6");
1039 xmlWriter->endElement(); // draw:equation
1040 xmlWriter->startElement( "draw:equation" );
1041 xmlWriter->addAttribute( "draw:formula","?f1 -?f6 ");
1042 xmlWriter->addAttribute( "draw:name","f7");
1043 xmlWriter->endElement(); // draw:equation
1044 xmlWriter->startElement( "draw:handle" );
1045 if ( drawObject->shape() == DrawObject::RightArrow | drawObject->shape() == DrawObject::LeftArrow )
1046 {
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);
1052 }
1053 else if ( drawObject->shape() == DrawObject::UpArrow | drawObject->shape() == DrawObject::DownArrow )
1054 {
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);
1060 }
1061 xmlWriter->endElement(); // draw:handle
1062 xmlWriter->endElement(); // draw:enhanced-geometry
1063 xmlWriter->endElement(); // draw:custom-shape
1064}
1065
1066void PowerPointImport::processLine (DrawObject* drawObject, KoXmlWriter* xmlWriter )
1067{
1068 if( !drawObject || !xmlWriter) return;
1069
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 );
1075
1076 if ( drawObject->hasProperty("draw:mirror-vertical") )
1077 { TQString temp = y1Str;
1078 y1Str = y2Str;
1079 y2Str = temp;
1080 }
1081 if ( drawObject->hasProperty("draw:mirror-horizontal") )
1082 { TQString temp = x1Str;
1083 x1Str = x2Str;
1084 x2Str = temp;
1085 }
1086
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" );
1094
1095 xmlWriter->endElement();
1096}
1097
1098void PowerPointImport::processSmiley (DrawObject* drawObject, KoXmlWriter* xmlWriter )
1099{
1100 if( !drawObject ||!xmlWriter ) return;
1101
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 );
1107
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(); // enhanced-geometry
1160 xmlWriter->endElement(); // custom-shape
1161}
1162
1163void PowerPointImport::processHeart (DrawObject* drawObject, KoXmlWriter* xmlWriter )
1164{
1165 if( !drawObject || !xmlWriter ) return;
1166
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 );
1172
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" );
1198
1199 xmlWriter->endElement(); // enhanced-geometry
1200 xmlWriter->endElement(); // custom-shape
1201}
1202
1203void PowerPointImport::processFreeLine (DrawObject* drawObject, KoXmlWriter* xmlWriter)
1204{
1205 if( !drawObject ||!xmlWriter ) return;
1206
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 );
1212
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(); // path
1221}
1222
1223void PowerPointImport::processDrawingObjectForBody( DrawObject* drawObject, KoXmlWriter* xmlWriter )
1224{
1225
1226 if( !drawObject || !xmlWriter ) return;
1227
1228 drawingObjectCounter++;
1229
1230
1231 if (drawObject->shape() == DrawObject::Ellipse)
1232 {
1233 processEllipse (drawObject, xmlWriter );
1234 }
1235 else if (drawObject->shape() == DrawObject::Rectangle)
1236 {
1237 processRectangle (drawObject, xmlWriter );
1238 }
1239 else if (drawObject->shape() == DrawObject::RoundRectangle)
1240 {
1241 processRoundRectangle (drawObject, xmlWriter );
1242 }
1243 else if (drawObject->shape() == DrawObject::Diamond)
1244 {
1245 processDiamond (drawObject, xmlWriter );
1246 }
1247 else if (drawObject->shape() == DrawObject::IsoscelesTriangle |
1248 drawObject->shape() == DrawObject::RightTriangle)
1249 {
1250 processTriangle (drawObject, xmlWriter );
1251 }
1252 else if (drawObject->shape() == DrawObject::Trapezoid)
1253 {
1254 processTrapezoid (drawObject, xmlWriter );
1255 }
1256 else if (drawObject->shape() == DrawObject::Parallelogram)
1257 {
1258 processParallelogram( drawObject, xmlWriter);
1259 }
1260 else if (drawObject->shape() == DrawObject::Hexagon)
1261 {
1262 processHexagon ( drawObject, xmlWriter );
1263 }
1264 else if (drawObject->shape() == DrawObject::Octagon)
1265 {
1266 processOctagon ( drawObject, xmlWriter );
1267 }
1268 else if (drawObject->shape() == DrawObject::RightArrow |
1269 drawObject->shape() == DrawObject::LeftArrow |
1270 drawObject->shape() == DrawObject::UpArrow |
1271 drawObject->shape() == DrawObject::DownArrow )
1272 {
1273 processArrow ( drawObject, xmlWriter );
1274 }
1275 else if (drawObject->shape() == DrawObject::Line)
1276 {
1277 processLine ( drawObject, xmlWriter );
1278 }
1279 else if (drawObject->shape() == DrawObject::Smiley)
1280 {
1281 processSmiley (drawObject, xmlWriter );
1282 }
1283 else if (drawObject->shape() == DrawObject::Heart)
1284 {
1285 processHeart (drawObject, xmlWriter );
1286 }
1287 else if (drawObject->shape() == DrawObject::FreeLine)
1288 {
1289 processFreeLine (drawObject, xmlWriter );
1290 }
1291}
1292
1293void PowerPointImport::processGroupObjectForBody( GroupObject* groupObject, KoXmlWriter* xmlWriter )
1294{
1295 if( !groupObject || !xmlWriter ) return;
1296 if( !groupObject->objectCount() ) return;
1297
1298 xmlWriter->startElement( "draw:g" );
1299
1300 for( unsigned i = 0; i < groupObject->objectCount(); i++ )
1301 {
1302 Object* object = groupObject->object( i );
1303 if( object )
1304 processObjectForBody( object, xmlWriter );
1305 }
1306
1307 xmlWriter->endElement(); // draw:g
1308}
1309
1310void PowerPointImport::processTextObjectForBody( TextObject* textObject, KoXmlWriter* xmlWriter )
1311{
1312 if( !textObject || !xmlWriter ) return;
1313
1314 TQString classStr = "subtitle";
1315 if( textObject->type() == TextObject::Title )
1316 classStr = "title";
1317// TQString pStr = string( textObject->text() ).string();
1318 TQString pStr;
1319
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() );
1324
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" );
1334
1335 // count error if i begins with 0
1336 for (unsigned i=0; i<textObject->listSize(); i++)
1337 {
1338 pStr = Libppt::string(textObject->text(i)).string();
1339 if (textObject->bulletFlag(i) == 1 )
1340 {
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(); // text:p
1348 xmlWriter->endElement(); // text:list-item
1349 xmlWriter->endElement(); // text:list
1350 }
1351 else
1352 {
1353 xmlWriter->startElement( "text:p" );
1354 xmlWriter->addAttribute( "text:style-name", "P1" );
1355 xmlWriter->addTextSpan( pStr );
1356 xmlWriter->endElement(); // text:p
1357 }
1358 }
1359
1360 xmlWriter->endElement(); // draw:text-box
1361 xmlWriter->endElement(); // draw:frame
1362
1363
1364}
1365
1366void PowerPointImport::processObjectForBody( Object* object, KoXmlWriter* xmlWriter )
1367{
1368 if( !object || !xmlWriter) return;
1369
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 );
1376}
1377
1378void PowerPointImport::processSlideForBody( unsigned slideNo, Slide* slide, KoXmlWriter* xmlWriter )
1379{
1380 if( !slide || !xmlWriter ) return;
1381
1382 TQString nameStr = Libppt::string( slide->title() ).string();
1383 if( nameStr.isEmpty() )
1384 nameStr = TQString("page%1").arg(slideNo+1);
1385
1386 TQString styleNameStr = TQString("dp%1").arg(slideNo+1);
1387
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");
1393
1394 GroupObject* root = slide->rootObject();
1395 if( root )
1396 for( unsigned i = 0; i < root->objectCount(); i++ )
1397 {
1398 Object* object = root->object( i );
1399 if( object )
1400 processObjectForBody( object, xmlWriter );
1401 }
1402
1403 xmlWriter->endElement(); // draw:page
1404}
1405
1406void PowerPointImport::processSlideForStyle( unsigned , Slide* slide, KoXmlWriter* xmlWriter )
1407{
1408 if( !slide || !xmlWriter ) return;
1409
1410 GroupObject* root = slide->rootObject();
1411 if( root )
1412 for( unsigned i = 0; i < root->objectCount(); i++ )
1413 {
1414 Object* object = root->object( i );
1415 if( object )
1416 processObjectForStyle( object, xmlWriter );
1417 }
1418}
1419
1420void PowerPointImport::processObjectForStyle( Object* object, KoXmlWriter* xmlWriter )
1421{
1422 if( !object || !xmlWriter ) return;
1423
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 );
1430}
1431
1432void PowerPointImport::processTextObjectForStyle( TextObject* textObject, KoXmlWriter* xmlWriter )
1433{
1434 if( !textObject || !xmlWriter ) return;
1435}
1436
1437void PowerPointImport::processGroupObjectForStyle( GroupObject* groupObject, KoXmlWriter* xmlWriter )
1438{
1439 if( !groupObject ||!xmlWriter ) return;
1440}
1441
1442TQString hexname( const Color &c )
1443{
1444 TQColor qc( c.red, c.green, c.blue );
1445 return qc.name();
1446}
1447
1448void PowerPointImport::processDrawingObjectForStyle( DrawObject* drawObject, KoXmlWriter* xmlWriter )
1449{
1450 if( !drawObject || !xmlWriter) return;
1451
1452 drawingObjectCounter++;
1453 TQString styleName = TQString("gr%1").arg( drawingObjectCounter );
1454
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" );
1459
1460 xmlWriter->startElement( "style:graphic-properties" );
1461/*
1462 if (drawObject->hasProperty("draw:stroke") )
1463 {
1464 xmlWriter->addAttribute( "draw:stroke", "dash" );
1465 std::string s = drawObject->getStrProperty("draw:stroke-dash");
1466 TQString ss( s.c_str() );
1467 xmlWriter->addAttribute( "draw:stroke-dash", ss );
1468 } else xmlWriter->addAttribute( "draw:stroke", "dash" );
1469*/
1470 if (drawObject->hasProperty( "libppt:invisibleLine" ))
1471 {
1472 if (drawObject->getBoolProperty("libppt:invisibleLine") == true)
1473 xmlWriter->addAttribute( "draw:stroke", "none" );
1474 }
1475 else if( drawObject->hasProperty( "draw:stroke" ) )
1476 { if (drawObject->getStrProperty( "draw:stroke" ) == "dash")
1477 {
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===================");
1483// tqDebug("test %g\n",angka);
1484 }
1485 else if (drawObject->getStrProperty( "draw:stroke" ) == "solid")
1486 xmlWriter->addAttribute( "draw:stroke", "solid" );
1487 }
1488
1489
1490 if( drawObject->hasProperty( "svg:stroke-width" ) )
1491 {
1492 double strokeWidth = drawObject->getDoubleProperty("svg:stroke-width" );
1493 xmlWriter->addAttribute( "svg:stroke-width",TQString("%1mm").arg( strokeWidth ) );
1494 }
1495
1496 if( drawObject->hasProperty( "svg:stroke-color" ) )
1497 {
1498 Color strokeColor = drawObject->getColorProperty("svg:stroke-color" );
1499 xmlWriter->addAttribute( "svg:stroke-color", hexname( strokeColor ) );
1500 }
1501
1502 if( drawObject->hasProperty( "draw:marker-start" ) )
1503 {
1504 std::string s = drawObject->getStrProperty("draw:marker-start");
1505 TQString ss( s.c_str() );
1506 xmlWriter->addAttribute( "draw:marker-start", ss );
1507 }
1508 if( drawObject->hasProperty( "draw:marker-end" ) )
1509 {
1510 std::string s = drawObject->getStrProperty("draw:marker-end");
1511 TQString ss( s.c_str() );
1512 xmlWriter->addAttribute( "draw:marker-end", ss);
1513 }
1514/* if( drawObject->hasProperty( "draw:marker-start-length" ) )
1515 {
1516 std::string s = drawObject->getStrProperty("draw:marker-start-length");
1517 TQString ss( s.c_str() );
1518 xmlWriter->addAttribute("draw:marker-start-length", ss );
1519 }
1520 if( drawObject->hasProperty( "draw:marker-end-length" ) )
1521 {
1522 std::string s = drawObject->getStrProperty("draw:marker-end-length");
1523 TQString ss( s.c_str() );
1524 xmlWriter->addAttribute( "draw:marker-end-length", ss);
1525 } */
1526
1527 if( drawObject->hasProperty( "draw:marker-start-width" ) )
1528 {
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 ) );
1532 }
1533
1534 if( drawObject->hasProperty( "draw:marker-end-width" ) )
1535 {
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 ) );
1539 }
1540
1541
1542
1543 if( drawObject->hasProperty( "draw:fill" ) )
1544 {
1545 std::string s = drawObject->getStrProperty("draw:fill");
1546 TQString ss( s.c_str() );
1547 xmlWriter->addAttribute( "draw:fill", ss);
1548 }
1549
1550
1551
1552 if( drawObject->hasProperty( "draw:fill-color" ) )
1553 {
1554 Color fillColor = drawObject->getColorProperty("draw:fill-color" );
1555 xmlWriter->addAttribute( "draw:fill-color", hexname( fillColor ) );
1556
1557 } else xmlWriter->addAttribute( "draw:fill-color", "#99ccff" );
1558
1559#if 0
1560 if( drawObject->hasProperty( "draw:shadow-color" ) )
1561 {
1562 xmlWriter->addAttribute( "draw:shadow", "visible" );
1563 Color shadowColor = drawObject->getColorProperty("draw:shadow-color" );
1564 xmlWriter->addAttribute( "draw:shadow-color", hexname( shadowColor ) );
1565 }
1566 else xmlWriter->addAttribute( "draw:shadow", "hidden" );
1567#endif
1568
1569 if( drawObject->hasProperty( "draw:shadow-opacity" ) )
1570 {
1571 double opacity = drawObject->getDoubleProperty("draw:shadow-opacity") ;
1572 xmlWriter->addAttribute( "draw:shadow-opacity",TQString("%1%").arg( opacity ) );
1573 }
1574
1575 if( drawObject->hasProperty( "draw:shadow-offset-x" ) )
1576 {
1577 double offset = drawObject->getDoubleProperty("draw:shadow-offset-x") ;
1578 xmlWriter->addAttribute( "draw:shadow-offset-x",TQString("%1cm").arg( offset ) );
1579 }
1580
1581 if( drawObject->hasProperty( "draw:shadow-offset-y" ) )
1582 {
1583 double offset = drawObject->getDoubleProperty("draw:shadow-offset-y");
1584 xmlWriter->addAttribute( "draw:shadow-offset-y",TQString("%1cm").arg( offset ) );
1585 }
1586
1587
1588 xmlWriter->endElement();
1589
1590 xmlWriter->endElement();
1591}
1592