filters

powerpointimport.cc

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