00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "koOasisStyles.h"
00020 #include <koxmlwriter.h>
00021 #include <kdebug.h>
00022 #include <qdom.h>
00023 #include "kodom.h"
00024 #include "koxmlns.h"
00025 #include "koGenStyles.h"
00026 #include <qbuffer.h>
00027 #include <kglobal.h>
00028 #include <klocale.h>
00029 #include <qbrush.h>
00030 #include <koStyleStack.h>
00031
00032 KoOasisStyles::KoOasisStyles()
00033 {
00034 m_styles.setAutoDelete( true );
00035 m_defaultStyle.setAutoDelete( true );
00036 m_masterPages.setAutoDelete( true );
00037 m_listStyles.setAutoDelete( true );
00038 m_drawStyles.setAutoDelete( true );
00039 }
00040
00041 KoOasisStyles::~KoOasisStyles()
00042 {
00043
00044 }
00045
00046 void KoOasisStyles::createStyleMap( const QDomDocument& doc )
00047 {
00048 const QDomElement docElement = doc.documentElement();
00049
00050 QDomElement fontStyles = KoDom::namedItemNS( docElement, KoXmlNS::office, "font-decls" );
00051
00052 if ( !fontStyles.isNull() ) {
00053
00054 insertStyles( fontStyles );
00055 }
00056
00057
00058
00059
00060 QDomElement autoStyles = KoDom::namedItemNS( docElement, KoXmlNS::office, "automatic-styles" );
00061 if ( !autoStyles.isNull() ) {
00062 insertStyles( autoStyles );
00063 }
00064
00065
00066
00067
00068
00069 QDomNode masterStyles = KoDom::namedItemNS( docElement, KoXmlNS::office, "master-styles" );
00070
00071 if ( !masterStyles.isNull() ) {
00072 QDomElement master;
00073 forEachElement( master, masterStyles )
00074 {
00075 if ( master.localName() == "master-page" &&
00076 master.namespaceURI() == KoXmlNS::style ) {
00077 const QString name = master.attributeNS( KoXmlNS::style, "name", QString::null );
00078 kdDebug(30003) << "Master style: '" << name << "' loaded " << endl;
00079 m_masterPages.insert( name, new QDomElement( master ) );
00080 } else
00081
00082 kdWarning(30003) << "Unknown tag " << master.tagName() << " in office:master-styles" << endl;
00083 }
00084 }
00085
00086
00087 kdDebug(30003) << "Starting reading in office:styles" << endl;
00088
00089 const QDomElement officeStyle = KoDom::namedItemNS( docElement, KoXmlNS::office, "styles" );
00090
00091 if ( !officeStyle.isNull() ) {
00092 m_officeStyle = officeStyle;
00093 insertOfficeStyles( m_officeStyle );
00094
00095 }
00096
00097
00098 }
00099
00100 QValueVector<QDomElement> KoOasisStyles::userStyles() const
00101 {
00102 QValueVector<QDomElement> vec;
00103
00104 unsigned int i = 0;
00105 QDomElement e;
00106 forEachElement( e, m_officeStyle )
00107 {
00108 if ( e.localName() == "style" &&
00109 e.namespaceURI() == KoXmlNS::style )
00110 {
00111 vec.resize( i+1 );
00112 vec[i++] = e;
00113 }
00114 }
00115 return vec;
00116 }
00117
00118 void KoOasisStyles::insertOfficeStyles( const QDomElement& styles )
00119 {
00120 QDomElement e;
00121 forEachElement( e, styles )
00122 {
00123 const QString localName = e.localName();
00124 const QString ns = e.namespaceURI();
00125 if ( ( ns == KoXmlNS::svg && (
00126 localName == "linearGradient"
00127 || localName == "radialGradient" ) )
00128 || ( ns == KoXmlNS::draw && (
00129 localName == "gradient"
00130 || localName == "hatch"
00131 || localName == "fill-image"
00132 || localName == "marker"
00133 || localName == "stroke-dash"
00134 || localName == "opacity" ) )
00135 )
00136 {
00137 const QString name = e.attributeNS( KoXmlNS::draw, "name", QString::null );
00138 Q_ASSERT( !name.isEmpty() );
00139 QDomElement* ep = new QDomElement( e );
00140 m_drawStyles.insert( name, ep );
00141 }
00142 else
00143 insertStyle( e );
00144 }
00145 }
00146
00147
00148 void KoOasisStyles::insertStyles( const QDomElement& styles )
00149 {
00150
00151 QDomElement e;
00152 forEachElement( e, styles )
00153 insertStyle( e );
00154 }
00155
00156 void KoOasisStyles::insertStyle( const QDomElement& e )
00157 {
00158 const QString localName = e.localName();
00159 const QString ns = e.namespaceURI();
00160
00161 const QString name = e.attributeNS( KoXmlNS::style, "name", QString::null );
00162 if ( ns == KoXmlNS::style && (
00163 localName == "style"
00164 || localName == "page-master"
00165 || localName == "page-layout"
00166 || localName == "font-decl"
00167 || localName == "presentation-page-layout" ) )
00168 {
00169 if ( m_styles.find( name ) != 0 )
00170 {
00171 kdDebug(30003) << "Style: '" << name << "' allready exists" << endl;
00172 }
00173 m_styles.insert( name, new QDomElement( e ) );
00174
00175 } else if ( localName == "default-style" && ns == KoXmlNS::style ) {
00176 const QString family = e.attributeNS( KoXmlNS::style, "family", QString::null );
00177 if ( !family.isEmpty() )
00178 m_defaultStyle.insert( family, new QDomElement( e ) );
00179 } else if ( localName == "list-style" && ns == KoXmlNS::text ) {
00180 m_listStyles.insert( name, new QDomElement( e ) );
00181
00182 } else if ( ns == KoXmlNS::number && (
00183 localName == "number-style"
00184 || localName == "currency-style"
00185 || localName == "percentage-style"
00186 || localName == "boolean-style"
00187 || localName == "text-style"
00188 || localName == "date-style"
00189 || localName == "time-style" ) ) {
00190 importDataStyle( e );
00191 }
00192
00193 }
00194
00195
00196
00197
00198 void KoOasisStyles::importDataStyle( const QDomElement& parent )
00199 {
00200 QString format;
00201 int precision = 0;
00202 int leadingZ = 1;
00203 bool thousandsSep = false;
00204
00205 bool negRed = false;
00206 bool ok = false;
00207 int i = 0;
00208 QDomElement e;
00209 QString prefix;
00210 QString suffix;
00211 forEachElement( e, parent )
00212 {
00213 if ( e.namespaceURI() != KoXmlNS::number )
00214 continue;
00215 QString localName = e.localName();
00216 const QString numberStyle = e.attributeNS( KoXmlNS::number, "style", QString::null );
00217 const bool shortForm = numberStyle == "short" || numberStyle.isEmpty();
00218 if ( localName == "day" ) {
00219 format += shortForm ? "d" : "dd";
00220 } else if ( localName == "day-of-week" ) {
00221 format += shortForm ? "ddd" : "dddd";
00222 } else if ( localName == "month" ) {
00223 if ( e.attributeNS( KoXmlNS::number, "possessive-form", QString::null ) == "true" ) {
00224 format += shortForm ? "PPP" : "PPPP";
00225 }
00226
00227 else if ( e.attributeNS( KoXmlNS::number, "textual", QString::null ) == "true" ) {
00228 format += shortForm ? "MMM" : "MMMM";
00229 } else {
00230 format += shortForm ? "M" : "MM";
00231 }
00232 } else if ( localName == "year" ) {
00233 format += shortForm ? "yy" : "yyyy";
00234 } else if ( localName == "era" ) {
00235
00236 } else if ( localName == "week-of-year" || localName == "quarter") {
00237
00238 } else if ( localName == "hours" ) {
00239 format += shortForm ? "h" : "hh";
00240 } else if ( localName == "minutes" ) {
00241 format += shortForm ? "m" : "mm";
00242 } else if ( localName == "seconds" ) {
00243 format += shortForm ? "s" : "ss";
00244 } else if ( localName == "am-pm" ) {
00245 format += "ap";
00246 } else if ( localName == "text" ) {
00247 format += e.text();
00248 } else if ( localName == "suffix" ) {
00249 suffix = e.text();
00250 kdDebug()<<" suffix :"<<suffix<<endl;
00251 } else if ( localName == "prefix" ) {
00252 prefix = e.text();
00253 kdDebug()<<" prefix :"<<prefix<<endl;
00254 } else if ( localName == "currency-symbol" ) {
00255 format += e.text();
00256
00257
00258 } else if ( localName == "number" ) {
00259
00260 if ( e.hasAttributeNS( KoXmlNS::number, "decimal-places" ) )
00261 {
00262 int d = e.attributeNS( KoXmlNS::number, "decimal-places", QString::null ).toInt( &ok );
00263 if ( ok )
00264 precision = d;
00265 }
00266 if ( e.hasAttributeNS( KoXmlNS::number, "min-integer-digits" ) )
00267 {
00268 int d = e.attributeNS( KoXmlNS::number, "min-integer-digits", QString::null ).toInt( &ok );
00269 if ( ok )
00270 leadingZ = d;
00271 }
00272 if ( thousandsSep && leadingZ <= 3 )
00273 {
00274 format += "#,";
00275 for ( i = leadingZ; i <= 3; ++i )
00276 format += '#';
00277 }
00278 for ( i = 1; i <= leadingZ; ++i )
00279 {
00280 format += '0';
00281 if ( ( i % 3 == 0 ) && thousandsSep )
00282 format =+ ',' ;
00283 }
00284 format += '.';
00285 for ( i = 0; i < precision; ++i )
00286 format += '0';
00287 }
00288 else if ( localName == "scientific-number" ) {
00289 int exp = 2;
00290
00291 if ( e.hasAttributeNS( KoXmlNS::number, "decimal-places" ) )
00292 {
00293 int d = e.attributeNS( KoXmlNS::number, "decimal-places", QString::null ).toInt( &ok );
00294 if ( ok )
00295 precision = d;
00296 }
00297
00298 if ( e.hasAttributeNS( KoXmlNS::number, "min-integer-digits" ) )
00299 {
00300 int d = e.attributeNS( KoXmlNS::number, "min-integer-digits", QString::null ).toInt( &ok );
00301 if ( ok )
00302 leadingZ = d;
00303 }
00304
00305 if ( e.hasAttributeNS( KoXmlNS::number, "min-exponent-digits" ) )
00306 {
00307 int d = e.attributeNS( KoXmlNS::number, "min-exponent-digits", QString::null ).toInt( &ok );
00308 if ( ok )
00309 exp = d;
00310 if ( exp <= 0 )
00311 exp = 1;
00312 }
00313
00314 if ( thousandsSep && leadingZ <= 3 )
00315 {
00316 format += "#,";
00317 for ( i = leadingZ; i <= 3; ++i )
00318 format += '#';
00319 }
00320
00321 for ( i = 1; i <= leadingZ; ++i )
00322 {
00323 format+='0';
00324 if ( ( i % 3 == 0 ) && thousandsSep )
00325 format+=',';
00326 }
00327
00328 format+='.';
00329 for ( i = 0; i < precision; ++i )
00330 format+='0';
00331
00332 format+="E+";
00333 for ( i = 0; i < exp; ++i )
00334 format+='0';
00335 } else if ( localName == "fraction" ) {
00336 int integer = 0;
00337 int numerator = 1;
00338 int denominator = 1;
00339 int denominatorValue=0;
00340 if ( e.hasAttributeNS( KoXmlNS::number, "min-integer-digits" ) )
00341 {
00342 int d = e.attributeNS( KoXmlNS::number, "min-integer-digits", QString::null ).toInt( &ok );
00343 if ( ok )
00344 integer = d;
00345 }
00346 if ( e.hasAttributeNS( KoXmlNS::number, "min-numerator-digits" ) )
00347 {
00348 int d = e.attributeNS( KoXmlNS::number, "min-numerator-digits", QString::null ).toInt( &ok );
00349 if ( ok )
00350 numerator = d;
00351 }
00352 if ( e.hasAttributeNS( KoXmlNS::number, "min-denominator-digits" ) )
00353 {
00354 int d = e.attributeNS( KoXmlNS::number, "min-denominator-digits", QString::null ).toInt( &ok );
00355 if ( ok )
00356 denominator = d;
00357 }
00358 if ( e.hasAttributeNS( KoXmlNS::number, "denominator-value" ) )
00359 {
00360 int d = e.attributeNS( KoXmlNS::number, "denominator-value", QString::null ).toInt( &ok );
00361 if ( ok )
00362 denominatorValue = d;
00363 }
00364
00365 for ( i = 0; i < integer; ++i )
00366 format+='#';
00367
00368 format+=' ';
00369
00370 for ( i = 0; i < numerator; ++i )
00371 format+='?';
00372
00373 format+='/';
00374
00375 if ( denominatorValue != 0 )
00376 format+=QString::number( denominatorValue );
00377 else
00378 {
00379 for ( i = 0; i < denominator; ++i )
00380 format+='?';
00381 }
00382 }
00383
00384
00385
00386
00387 }
00388
00389 const QString styleName = parent.attributeNS( KoXmlNS::style, "name", QString::null );
00390 kdDebug(30003) << "datetime style: " << styleName << " qt format=" << format << endl;
00391 if ( !prefix.isEmpty() )
00392 {
00393 kdDebug(30003)<<" format.left( prefix.length() ) :"<<format.left( prefix.length() )<<" prefix :"<<prefix<<endl;
00394 if ( format.left( prefix.length() )==prefix )
00395 {
00396 format = format.right( format.length()-prefix.length() );
00397 }
00398 else
00399 prefix = QString::null;
00400 }
00401 if ( !suffix.isEmpty() )
00402 {
00403 kdDebug(30003)<<"format.right( suffix.length() ) :"<<format.right( suffix.length() )<<" suffix :"<<suffix<<endl;
00404 if ( format.right( suffix.length() )==suffix )
00405 {
00406 format = format.left( format.length()-suffix.length() );
00407 }
00408 else
00409 suffix = QString::null;
00410 }
00411 NumericStyleFormat numeric;
00412 numeric.formatStr=format;
00413 numeric.prefix=prefix;
00414 numeric.suffix=suffix;
00415 kdDebug()<<" finish insert format :"<<format<<" prefix :"<<prefix<<" suffix :"<<suffix<<endl;
00416 m_dataFormats.insert( styleName, numeric );
00417 }
00418
00419 #define addTextNumber( text, elementWriter ) { \
00420 if ( !text.isEmpty() ) \
00421 { \
00422 elementWriter.startElement( "number:text" ); \
00423 elementWriter.addTextNode( text ); \
00424 elementWriter.endElement(); \
00425 text=""; \
00426 } \
00427 }
00428
00429 void KoOasisStyles::parseOasisTimeKlocale(KoXmlWriter &elementWriter, QString & format, QString & text )
00430 {
00431 kdDebug(30003)<<"parseOasisTimeKlocale(KoXmlWriter &elementWriter, QString & format, QString & text ) :"<<format<<endl;
00432 do
00433 {
00434 if ( !saveOasisKlocaleTimeFormat( elementWriter, format, text ) )
00435 {
00436 text += format[0];
00437 format = format.remove( 0, 1 );
00438 }
00439 }
00440 while ( format.length() > 0 );
00441 addTextNumber( text, elementWriter );
00442 }
00443
00444 bool KoOasisStyles::saveOasisKlocaleTimeFormat( KoXmlWriter &elementWriter, QString & format, QString & text )
00445 {
00446 bool changed = false;
00447 if ( format.startsWith( "%H" ) )
00448 {
00449
00450 addTextNumber( text, elementWriter );
00451
00452 elementWriter.startElement( "number:hours" );
00453 elementWriter.addAttribute( "number:style", "long" );
00454 elementWriter.endElement();
00455 format = format.remove( 0, 2 );
00456 changed = true;
00457 }
00458 else if ( format.startsWith( "%k" ) )
00459 {
00460 addTextNumber( text, elementWriter );
00461
00462 elementWriter.startElement( "number:hours" );
00463 elementWriter.addAttribute( "number:style", "short" );
00464 elementWriter.endElement();
00465 format = format.remove( 0, 2 );
00466 changed = true;
00467 }
00468 else if ( format.startsWith( "%I" ) )
00469 {
00470
00471 changed = true;
00472 }
00473 else if ( format.startsWith( "%l" ) )
00474 {
00475
00476 changed = true;
00477 }
00478 else if ( format.startsWith( "%M" ) )
00479 {
00480 addTextNumber( text, elementWriter );
00481
00482 elementWriter.startElement( "number:minutes" );
00483 elementWriter.addAttribute( "number:style", "long" );
00484 elementWriter.endElement();
00485 format = format.remove( 0, 2 );
00486 changed = true;
00487
00488 }
00489 else if ( format.startsWith( "%S" ) )
00490 {
00491 addTextNumber( text, elementWriter );
00492
00493 elementWriter.startElement( "number:seconds" );
00494 elementWriter.addAttribute( "number:style", "long" );
00495 elementWriter.endElement();
00496 format = format.remove( 0, 2 );
00497 changed = true;
00498 }
00499 else if ( format.startsWith( "%p" ) )
00500 {
00501
00502 addTextNumber( text, elementWriter );
00503
00504 elementWriter.startElement( "number:am-pm" );
00505 elementWriter.endElement();
00506 format = format.remove( 0, 2 );
00507 changed = true;
00508 }
00509 return changed;
00510 }
00511
00512
00513 bool KoOasisStyles::saveOasisTimeFormat( KoXmlWriter &elementWriter, QString & format, QString & text, bool &antislash )
00514 {
00515 bool changed = false;
00516
00517 if ( antislash )
00518 {
00519 text+=format[0];
00520 format = format.remove( 0, 1 );
00521 antislash = false;
00522 changed = true;
00523 }
00524 else if ( format.startsWith( "hh" ) )
00525 {
00526 addTextNumber( text, elementWriter );
00527
00528 elementWriter.startElement( "number:hours" );
00529 elementWriter.addAttribute( "number:style", "long" );
00530 elementWriter.endElement();
00531 format = format.remove( 0, 2 );
00532 changed = true;
00533 }
00534 else if ( format.startsWith( "h" ) )
00535 {
00536 addTextNumber( text, elementWriter );
00537
00538 elementWriter.startElement( "number:hours" );
00539 elementWriter.addAttribute( "number:style", "short" );
00540 elementWriter.endElement();
00541 format = format.remove( 0, 1 );
00542 changed = true;
00543 }
00544 else if ( format.startsWith( "mm" ) )
00545 {
00546 addTextNumber( text, elementWriter );
00547
00548 elementWriter.startElement( "number:minutes" );
00549 elementWriter.addAttribute( "number:style", "long" );
00550 elementWriter.endElement();
00551 format = format.remove( 0, 2 );
00552 changed = true;
00553 }
00554 else if ( format.startsWith( "m" ) )
00555 {
00556 addTextNumber( text, elementWriter );
00557
00558 elementWriter.startElement( "number:minutes" );
00559 elementWriter.addAttribute( "number:style", "short" );
00560 elementWriter.endElement();
00561 format = format.remove( 0, 1 );
00562 changed = true;
00563 }
00564 else if ( format.startsWith( "ss" ) )
00565 {
00566 addTextNumber( text, elementWriter );
00567
00568 elementWriter.startElement( "number:seconds" );
00569 elementWriter.addAttribute( "number:style", "long" );
00570 elementWriter.endElement();
00571 format = format.remove( 0, 2 );
00572 changed = true;
00573 }
00574 else if ( format.startsWith( "s" ) )
00575 {
00576 addTextNumber( text, elementWriter );
00577
00578 elementWriter.startElement( "number:seconds" );
00579 elementWriter.addAttribute( "number:style", "short" );
00580 elementWriter.endElement();
00581 format = format.remove( 0, 1 );
00582 changed = true;
00583 }
00584 else if ( format.startsWith( "ap" ) )
00585 {
00586 addTextNumber( text, elementWriter );
00587
00588 elementWriter.startElement( "number:am-pm" );
00589 elementWriter.endElement();
00590 format = format.remove( 0, 2 );
00591 changed = true;
00592 }
00593 return changed;
00594 }
00595
00596 QString KoOasisStyles::saveOasisTimeStyle( KoGenStyles &mainStyles, const QString & _format, bool klocaleFormat )
00597 {
00598 kdDebug(30003)<<"QString KoOasisStyles::saveOasisTimeStyle( KoGenStyles &mainStyles, const QString & _format ) :"<<_format<<endl;
00599 QString format( _format );
00600 KoGenStyle currentStyle( KoGenStyle::STYLE_NUMERIC_TIME );
00601 QBuffer buffer;
00602 buffer.open( IO_WriteOnly );
00603 KoXmlWriter elementWriter( &buffer );
00604 QString text;
00605 if ( klocaleFormat )
00606 {
00607 parseOasisTimeKlocale( elementWriter, format, text );
00608 }
00609 else
00610 {
00611 bool antislash = false;
00612 do
00613 {
00614 if ( !saveOasisTimeFormat( elementWriter, format, text, antislash ) )
00615 {
00616 QString elem( format[0] );
00617 format = format.remove( 0, 1 );
00618 if ( elem == "\\" )
00619 {
00620 antislash = true;
00621 }
00622 else
00623 {
00624 text += elem;
00625 antislash = false;
00626 }
00627 }
00628 }
00629 while ( format.length() > 0 );
00630 addTextNumber( text, elementWriter );
00631 }
00632 QString elementContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
00633 currentStyle.addChildElement( "number", elementContents );
00634 return mainStyles.lookup( currentStyle, "N" );
00635 }
00636
00637
00638 void KoOasisStyles::parseOasisDateKlocale(KoXmlWriter &elementWriter, QString & format, QString & text )
00639 {
00640 kdDebug(30003)<<"KoOasisStyles::parseOasisDateKlocale(KoXmlWriter &elementWriter, QString & format, QString & text ) :"<<format<<endl;
00641 do
00642 {
00643 if ( format.startsWith( "%Y" ) )
00644 {
00645 addTextNumber( text, elementWriter );
00646 elementWriter.startElement( "number:year" );
00647 elementWriter.addAttribute( "number:style", "long" );
00648 elementWriter.endElement();
00649 format = format.remove( 0, 2 );
00650 }
00651 else if ( format.startsWith( "%y" ) )
00652 {
00653
00654 addTextNumber( text, elementWriter );
00655
00656 elementWriter.startElement( "number:year" );
00657 elementWriter.addAttribute( "number:style", "short" );
00658 elementWriter.endElement();
00659 format = format.remove( 0, 2 );
00660 }
00661 else if ( format.startsWith( "%n" ) )
00662 {
00663 addTextNumber( text, elementWriter );
00664 elementWriter.startElement( "number:month" );
00665 elementWriter.addAttribute( "number:style", "short" );
00666 elementWriter.addAttribute( "number:textual", "false");
00667 elementWriter.endElement();
00668 format = format.remove( 0, 2 );
00669 }
00670 else if ( format.startsWith( "%m" ) )
00671 {
00672 addTextNumber( text, elementWriter );
00673 elementWriter.startElement( "number:month" );
00674 elementWriter.addAttribute( "number:style", "long" );
00675 elementWriter.addAttribute( "number:textual", "false");
00676 elementWriter.endElement();
00677 format = format.remove( 0, 2 );
00678 }
00679 else if ( format.startsWith( "%e" ) )
00680 {
00681 addTextNumber( text, elementWriter );
00682
00683 elementWriter.startElement( "number:day" );
00684 elementWriter.addAttribute( "number:style", "short" );
00685 elementWriter.endElement();
00686 format = format.remove( 0, 2 );
00687 }
00688 else if ( format.startsWith( "%d" ) )
00689 {
00690 addTextNumber( text, elementWriter );
00691
00692 elementWriter.startElement( "number:day" );
00693 elementWriter.addAttribute( "number:style", "long" );
00694 elementWriter.endElement();
00695 format = format.remove( 0, 2 );
00696 }
00697 else if ( format.startsWith( "%b" ) )
00698 {
00699 addTextNumber( text, elementWriter );
00700 elementWriter.startElement( "number:month" );
00701 elementWriter.addAttribute( "number:style", "short" );
00702 elementWriter.addAttribute( "number:textual", "true");
00703 elementWriter.endElement();
00704 format = format.remove( 0, 2 );
00705 }
00706 else if ( format.startsWith( "%B" ) )
00707 {
00708 addTextNumber( text, elementWriter );
00709 elementWriter.startElement( "number:month" );
00710 elementWriter.addAttribute( "number:style", "long" );
00711 elementWriter.addAttribute( "number:textual", "true");
00712 elementWriter.endElement();
00713 format = format.remove( 0, 2 );
00714 }
00715 else if ( format.startsWith( "%a" ) )
00716 {
00717 addTextNumber( text, elementWriter );
00718 elementWriter.startElement( "number:day-of-week" );
00719 elementWriter.addAttribute( "number:style", "short" );
00720 elementWriter.endElement();
00721
00722 format = format.remove( 0, 2 );
00723 }
00724 else if ( format.startsWith( "%A" ) )
00725 {
00726 addTextNumber( text, elementWriter );
00727 elementWriter.startElement( "number:day-of-week" );
00728 elementWriter.addAttribute( "number:style", "long" );
00729 elementWriter.endElement();
00730 format = format.remove( 0, 2 );
00731 }
00732 else
00733 {
00734 if ( !saveOasisKlocaleTimeFormat( elementWriter, format, text ) )
00735 {
00736 text += format[0];
00737 format = format.remove( 0, 1 );
00738 }
00739 }
00740 }
00741 while ( format.length() > 0 );
00742 addTextNumber( text, elementWriter );
00743 }
00744
00745 QString KoOasisStyles::saveOasisDateStyle( KoGenStyles &mainStyles, const QString & _format, bool klocaleFormat )
00746 {
00747 kdDebug(30003)<<"QString KoOasisStyles::saveOasisDateStyle( KoGenStyles &mainStyles, const QString & _format ) :"<<_format<<endl;
00748 QString format( _format );
00749
00750
00751
00752 KoGenStyle currentStyle( KoGenStyle::STYLE_NUMERIC_DATE );
00753 QBuffer buffer;
00754 buffer.open( IO_WriteOnly );
00755 KoXmlWriter elementWriter( &buffer );
00756 QString text;
00757 if ( klocaleFormat )
00758 {
00759 parseOasisDateKlocale( elementWriter, format, text );
00760 }
00761 else
00762 {
00763 bool antislash = false;
00764 do
00765 {
00766 if ( antislash )
00767 {
00768 text+=format[0];
00769 format = format.remove( 0, 1 );
00770 }
00771
00772 else if ( format.startsWith( "MMMMM" ) )
00773 {
00774 addTextNumber( text, elementWriter );
00775 elementWriter.startElement( "number:month" );
00776 elementWriter.addAttribute( "number:textual", "true");
00777 elementWriter.endElement();
00778 format = format.remove( 0, 5 );
00779 }
00780 else if ( format.startsWith( "MMMM" ) )
00781 {
00782 addTextNumber( text, elementWriter );
00783 elementWriter.startElement( "number:month" );
00784 elementWriter.addAttribute( "number:style", "long" );
00785 elementWriter.addAttribute( "number:textual", "true");
00786 elementWriter.endElement();
00787 format = format.remove( 0, 4 );
00788 }
00789 else if ( format.startsWith( "MMM" ) )
00790 {
00791 addTextNumber( text, elementWriter );
00792 elementWriter.startElement( "number:month" );
00793 elementWriter.addAttribute( "number:style", "short" );
00794 elementWriter.addAttribute( "number:textual", "true");
00795 elementWriter.endElement();
00796 format = format.remove( 0, 3 );
00797 }
00798 else if ( format.startsWith( "MM" ) )
00799 {
00800 addTextNumber( text, elementWriter );
00801 elementWriter.startElement( "number:month" );
00802 elementWriter.addAttribute( "number:style", "long" );
00803 elementWriter.addAttribute( "number:textual", "false");
00804 elementWriter.endElement();
00805 format = format.remove( 0, 2 );
00806 }
00807 else if ( format.startsWith( "M" ) )
00808 {
00809 addTextNumber( text, elementWriter );
00810 elementWriter.startElement( "number:month" );
00811 elementWriter.addAttribute( "number:style", "short" );
00812 elementWriter.addAttribute( "number:textual", "false");
00813 elementWriter.endElement();
00814 format = format.remove( 0, 1 );
00815 }
00816 else if ( format.startsWith( "PPPP" ) )
00817 {
00818 addTextNumber( text, elementWriter );
00819
00820 elementWriter.startElement( "number:month" );
00821 elementWriter.addAttribute( "number:style", "short" );
00822 elementWriter.addAttribute( "number:textual", "false");
00823 elementWriter.addAttribute( "number:possessive-form", "true" );
00824 elementWriter.endElement();
00825 format = format.remove( 0, 4 );
00826 }
00827 else if ( format.startsWith( "PPP" ) )
00828 {
00829 addTextNumber( text, elementWriter );
00830
00831 elementWriter.startElement( "number:month" );
00832 elementWriter.addAttribute( "number:possessive-form", "true" );
00833
00834 elementWriter.addAttribute( "number:style", "short" );
00835 elementWriter.addAttribute( "number:textual", "false");
00836 elementWriter.endElement();
00837 format = format.remove( 0, 3 );
00838 }
00839 else if ( format.startsWith( "dddd" ) )
00840 {
00841 addTextNumber( text, elementWriter );
00842
00843 elementWriter.startElement( "number:day-of-week" );
00844 elementWriter.addAttribute( "number:style", "long" );
00845 elementWriter.endElement();
00846 format = format.remove( 0, 4 );
00847 }
00848 else if ( format.startsWith( "ddd" ) )
00849 {
00850 addTextNumber( text, elementWriter );
00851
00852 elementWriter.startElement( "number:day-of-week" );
00853 elementWriter.addAttribute( "number:style", "short" );
00854 elementWriter.endElement();
00855 format = format.remove( 0, 3 );
00856 }
00857 else if ( format.startsWith( "dd" ) )
00858 {
00859 addTextNumber( text, elementWriter );
00860
00861 elementWriter.startElement( "number:day" );
00862 elementWriter.addAttribute( "number:style", "long" );
00863 elementWriter.endElement();
00864 format = format.remove( 0, 2 );
00865 }
00866 else if ( format.startsWith( "d" ) )
00867 {
00868 addTextNumber( text, elementWriter );
00869
00870 elementWriter.startElement( "number:day" );
00871 elementWriter.addAttribute( "number:style", "short" );
00872 elementWriter.endElement();
00873 format = format.remove( 0, 1 );
00874 }
00875 else if ( format.startsWith( "yyyy" ) )
00876 {
00877 addTextNumber( text, elementWriter );
00878
00879 elementWriter.startElement( "number:year" );
00880 elementWriter.addAttribute( "number:style", "long" );
00881 elementWriter.endElement();
00882 format = format.remove( 0, 4 );
00883 }
00884 else if ( format.startsWith( "yy" ) )
00885 {
00886 addTextNumber( text, elementWriter );
00887
00888 elementWriter.startElement( "number:year" );
00889 elementWriter.addAttribute( "number:style", "short" );
00890 elementWriter.endElement();
00891 format = format.remove( 0, 2 );
00892 }
00893 else
00894 {
00895 if ( !saveOasisTimeFormat( elementWriter, format, text,antislash ) )
00896 {
00897 QString elem( format[0] );
00898 format = format.remove( 0, 1 );
00899 if ( elem == "\\" )
00900 {
00901 antislash = true;
00902 }
00903 else
00904 {
00905 text += elem;
00906 antislash = false;
00907 }
00908 }
00909 }
00910 }
00911 while ( format.length() > 0 );
00912 addTextNumber( text, elementWriter );
00913 }
00914
00915 QString elementContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
00916 currentStyle.addChildElement( "number", elementContents );
00917 return mainStyles.lookup( currentStyle, "N" );
00918 }
00919
00920
00921 QString KoOasisStyles::saveOasisFractionStyle( KoGenStyles &mainStyles, const QString & _format, const QString &_prefix, const QString &_suffix )
00922 {
00923 kdDebug(30003)<<"QString saveOasisFractionStyle( KoGenStyles &mainStyles, const QString & _format ) :"<<_format<<endl;
00924 QString format( _format );
00925
00926 KoGenStyle currentStyle( KoGenStyle::STYLE_NUMERIC_FRACTION );
00927 QBuffer buffer;
00928 buffer.open( IO_WriteOnly );
00929 KoXmlWriter elementWriter( &buffer );
00930 QString text;
00931 int integer = 0;
00932 int numerator = 0;
00933 int denominator = 0;
00934 int denominatorValue = 0;
00935 bool beforeSlash = true;
00936 do
00937 {
00938 if ( format[0]=='#' )
00939 integer++;
00940 else if ( format[0]=='/' )
00941 beforeSlash = false;
00942 else if ( format[0]=='?' )
00943 {
00944 if ( beforeSlash )
00945 numerator++;
00946 else
00947 denominator++;
00948 }
00949 else
00950 {
00951 bool ok;
00952 int value = format.toInt( &ok );
00953 if ( ok )
00954 {
00955 denominatorValue=value;
00956 break;
00957 }
00958 }
00959 format.remove( 0,1 );
00960 }
00961 while ( format.length() > 0 );
00962
00963 text= _prefix;
00964 addTextNumber(text, elementWriter );
00965
00966 elementWriter.startElement( "number:fraction" );
00967 elementWriter.addAttribute( "number:min-integer-digits", integer );
00968 elementWriter.addAttribute( "number:min-numerator-digits",numerator );
00969 elementWriter.addAttribute( "number:min-denominator-digits",denominator );
00970 if ( denominatorValue != 0 )
00971 elementWriter.addAttribute( "number:denominator-value",denominatorValue );
00972 elementWriter.endElement();
00973
00974 addKofficeNumericStyleExtension( elementWriter, _suffix, _prefix );
00975
00976 text=_suffix;
00977 addTextNumber(text, elementWriter );
00978
00979 QString elementContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
00980 currentStyle.addChildElement( "number", elementContents );
00981 return mainStyles.lookup( currentStyle, "N" );
00982 }
00983
00984
00985 QString KoOasisStyles::saveOasisPercentageStyle( KoGenStyles &mainStyles, const QString & _format, const QString &_prefix, const QString &_suffix )
00986 {
00987
00988
00989
00990
00991
00992 kdDebug(30003)<<"QString saveOasisPercentageStyle( KoGenStyles &mainStyles, const QString & _format ) :"<<_format<<endl;
00993 QString format( _format );
00994
00995 KoGenStyle currentStyle( KoGenStyle::STYLE_NUMERIC_PERCENTAGE );
00996 QBuffer buffer;
00997 buffer.open( IO_WriteOnly );
00998 KoXmlWriter elementWriter( &buffer );
00999 QString text;
01000 int decimalplaces = 0;
01001 int integerdigits = 0;
01002 bool beforeSeparator = true;
01003 do
01004 {
01005 if ( format[0]=='.' || format[0]==',' )
01006 beforeSeparator = true;
01007 else if ( format[0]=='0' && beforeSeparator )
01008 integerdigits++;
01009 else if ( format[0]=='0' && !beforeSeparator )
01010 decimalplaces++;
01011 else
01012 kdDebug(30003)<<" error format 0 \n";
01013 format.remove( 0,1 );
01014 }
01015 while ( format.length() > 0 );
01016 text= _prefix ;
01017 addTextNumber(text, elementWriter );
01018 elementWriter.startElement( "number:number" );
01019 elementWriter.addAttribute( "number:decimal-places", decimalplaces );
01020 elementWriter.addAttribute( "number:min-integer-digits", integerdigits );
01021 elementWriter.endElement();
01022
01023 addTextNumber(QString( "%" ), elementWriter );
01024
01025 text =_suffix ;
01026 addTextNumber(text, elementWriter );
01027 addKofficeNumericStyleExtension( elementWriter, _suffix,_prefix );
01028
01029 QString elementContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
01030 currentStyle.addChildElement( "number", elementContents );
01031 return mainStyles.lookup( currentStyle, "N" );
01032
01033 }
01034
01035 QString KoOasisStyles::saveOasisScientificStyle( KoGenStyles &mainStyles, const QString & _format, const QString &_prefix, const QString &_suffix )
01036 {
01037
01038
01039
01040
01041
01042 kdDebug(30003)<<"QString saveOasisScientificStyle( KoGenStyles &mainStyles, const QString & _format ) :"<<_format<<endl;
01043 QString format( _format );
01044
01045 KoGenStyle currentStyle( KoGenStyle::STYLE_NUMERIC_SCIENTIFIC );
01046 QBuffer buffer;
01047 buffer.open( IO_WriteOnly );
01048 int decimalplace = 0;
01049 int integerdigits = 0;
01050 int exponentdigits = 0;
01051 KoXmlWriter elementWriter( &buffer );
01052 QString text;
01053 bool beforeSeparator = true;
01054 bool exponential = false;
01055 bool positive = true;
01056 do
01057 {
01058 if ( !exponential )
01059 {
01060 if ( format[0]=='0' && beforeSeparator )
01061 integerdigits++;
01062 else if ( format[0]==',' || format[0]=='.' )
01063 beforeSeparator = false;
01064 else if ( format[0]=='0' && !beforeSeparator )
01065 decimalplace++;
01066 else if ( format[0].lower()=='e' )
01067 {
01068 format.remove( 0, 1 );
01069 if ( format[0]=='+' )
01070 positive = true;
01071 else if ( format[0]=='-' )
01072 positive = false;
01073 else
01074 kdDebug(30003)<<"Error into scientific number\n";
01075 exponential = true;
01076 }
01077 }
01078 else
01079 {
01080 if ( format[0]=='0' && positive )
01081 exponentdigits++;
01082 else if ( format[0]=='0' && !positive )
01083 exponentdigits--;
01084 else
01085 kdDebug(30003)<<" error into scientific number exponential value\n";
01086 }
01087 format.remove( 0,1 );
01088 }
01089 while ( format.length() > 0 );
01090 text = _prefix ;
01091 addTextNumber(text, elementWriter );
01092
01093 elementWriter.startElement( "number:scientific-number" );
01094 kdDebug(30003)<<" decimalplace :"<<decimalplace<<" integerdigits :"<<integerdigits<<" exponentdigits :"<<exponentdigits<<endl;
01095 elementWriter.addAttribute( "number:decimal-places", decimalplace );
01096 elementWriter.addAttribute( "number:min-integer-digits",integerdigits );
01097 elementWriter.addAttribute( "number:min-exponent-digits",exponentdigits );
01098 elementWriter.endElement();
01099
01100 text = _suffix;
01101 addTextNumber(text, elementWriter );
01102 addKofficeNumericStyleExtension( elementWriter, _suffix,_prefix );
01103
01104 QString elementContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
01105 currentStyle.addChildElement( "number", elementContents );
01106 return mainStyles.lookup( currentStyle, "N" );
01107 }
01108
01109 QString KoOasisStyles::saveOasisCurrencyStyle( KoGenStyles &mainStyles, const QString & _format, const QString &_prefix, const QString &_suffix )
01110 {
01111
01112
01113
01114
01115
01116
01117
01118 kdDebug(30003)<<"QString saveOasisCurrencyStyle( KoGenStyles &mainStyles, const QString & _format ) :"<<_format<<endl;
01119 QString format( _format );
01120
01121 KoGenStyle currentStyle( KoGenStyle::STYLE_NUMERIC_CURRENCY );
01122 QBuffer buffer;
01123 buffer.open( IO_WriteOnly );
01124 KoXmlWriter elementWriter( &buffer );
01125 QString text;
01126 do
01127 {
01128 format.remove( 0,1 );
01129 }
01130 while ( format.length() > 0 );
01131 text = _prefix ;
01132 addTextNumber(text, elementWriter );
01133
01134 elementWriter.startElement( "number:currency-style" );
01135
01136 text = _suffix ;
01137 addTextNumber(text, elementWriter );
01138 addKofficeNumericStyleExtension( elementWriter, _suffix,_prefix );
01139 elementWriter.endElement();
01140
01141 QString elementContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
01142 currentStyle.addChildElement( "number", elementContents );
01143 return mainStyles.lookup( currentStyle, "N" );
01144 }
01145
01146 QString KoOasisStyles::saveOasisTextStyle( KoGenStyles &mainStyles, const QString & _format, const QString &_prefix, const QString &_suffix )
01147 {
01148
01149
01150
01152
01153 kdDebug(30003)<<"QString saveOasisTextStyle( KoGenStyles &mainStyles, const QString & _format ) :"<<_format<<endl;
01154 QString format( _format );
01155
01156 KoGenStyle currentStyle( KoGenStyle::STYLE_NUMERIC_TEXT );
01157 QBuffer buffer;
01158 buffer.open( IO_WriteOnly );
01159 KoXmlWriter elementWriter( &buffer );
01160 QString text;
01161 do
01162 {
01163 format.remove( 0,1 );
01164 }
01165 while ( format.length() > 0 );
01166 text = _prefix ;
01167 addTextNumber(text, elementWriter );
01168
01169 elementWriter.startElement( "number:text-style" );
01170
01171 text = _suffix ;
01172 addTextNumber(text, elementWriter );
01173 addKofficeNumericStyleExtension( elementWriter, _suffix,_prefix );
01174 elementWriter.endElement();
01175
01176 QString elementContents = QString::fromUtf8( buffer.buffer(), buffer.buffer().size() );
01177 currentStyle.addChildElement( "number", elementContents );
01178 return mainStyles.lookup( currentStyle, "N" );
01179 }
01180
01181
01182 void KoOasisStyles::addKofficeNumericStyleExtension( KoXmlWriter & elementWriter, const QString &_suffix, const QString &_prefix )
01183 {
01184 if ( !_suffix.isEmpty() )
01185 {
01186 elementWriter.startElement( "number:suffix" );
01187 elementWriter.addTextNode( _suffix );
01188 elementWriter.endElement();
01189 }
01190 if ( !_prefix.isEmpty() )
01191 {
01192 elementWriter.startElement( "number:prefix" );
01193 elementWriter.addTextNode( _prefix );
01194 elementWriter.endElement();
01195 }
01196 }
01197
01198 void KoOasisStyles::saveOasisFillStyle( KoGenStyle &styleFill, KoGenStyles& mainStyles, const QBrush & brush )
01199 {
01200 if ( brush.style() == Qt::SolidPattern )
01201 {
01202 styleFill.addProperty( "draw:fill","solid" );
01203 styleFill.addProperty( "draw:fill-color", brush.color().name() );
01204 }
01205 else if ( brush.style() == Qt::Dense1Pattern )
01206 {
01207 styleFill.addProperty( "draw:transparency", "94%" );
01208 styleFill.addProperty( "draw:fill","solid" );
01209 styleFill.addProperty( "draw:fill-color", brush.color().name() );
01210 }
01211 else if ( brush.style() == Qt::Dense2Pattern )
01212 {
01213 styleFill.addProperty( "draw:transparency", "88%" );
01214 styleFill.addProperty( "draw:fill","solid" );
01215 styleFill.addProperty( "draw:fill-color", brush.color().name() );
01216 }
01217 else if ( brush.style() == Qt::Dense3Pattern )
01218 {
01219 styleFill.addProperty( "draw:transparency", "63%" );
01220 styleFill.addProperty( "draw:fill","solid" );
01221 styleFill.addProperty( "draw:fill-color", brush.color().name() );
01222 }
01223 else if ( brush.style() == Qt::Dense4Pattern )
01224 {
01225 styleFill.addProperty( "draw:transparency", "50%" );
01226 styleFill.addProperty( "draw:fill","solid" );
01227 styleFill.addProperty( "draw:fill-color", brush.color().name() );
01228 }
01229 else if ( brush.style() == Qt::Dense5Pattern )
01230 {
01231 styleFill.addProperty( "draw:transparency", "37%" );
01232 styleFill.addProperty( "draw:fill","solid" );
01233 styleFill.addProperty( "draw:fill-color", brush.color().name() );
01234 }
01235 else if ( brush.style() == Qt::Dense6Pattern )
01236 {
01237 styleFill.addProperty( "draw:transparency", "12%" );
01238 styleFill.addProperty( "draw:fill","solid" );
01239 styleFill.addProperty( "draw:fill-color", brush.color().name() );
01240 }
01241 else if ( brush.style() == Qt::Dense7Pattern )
01242 {
01243 styleFill.addProperty( "draw:transparency", "6%" );
01244 styleFill.addProperty( "draw:fill","solid" );
01245 styleFill.addProperty( "draw:fill-color", brush.color().name() );
01246 }
01247 else
01248 {
01249 styleFill.addProperty( "draw:fill","hatch" );
01250 styleFill.addProperty( "draw:fill-hatch-name", saveOasisHatchStyle( mainStyles,brush ) );
01251 }
01252
01253 }
01254
01255 QString KoOasisStyles::saveOasisHatchStyle( KoGenStyles& mainStyles, const QBrush &brush )
01256 {
01257 KoGenStyle hatchStyle( KoGenStyle::STYLE_HATCH );
01258 hatchStyle.addAttribute( "draw:color", brush.color().name() );
01259
01260 switch( brush.style() )
01261 {
01262 case Qt::HorPattern:
01263 hatchStyle.addAttribute( "draw:style", "single" );
01264 hatchStyle.addAttribute( "draw:rotation", 0);
01265 break;
01266 case Qt::BDiagPattern:
01267 hatchStyle.addAttribute( "draw:style", "single" );
01268 hatchStyle.addAttribute( "draw:rotation", 450);
01269 break;
01270 case Qt::VerPattern:
01271 hatchStyle.addAttribute( "draw:style", "single" );
01272 hatchStyle.addAttribute( "draw:rotation", 900);
01273 break;
01274 case Qt::FDiagPattern:
01275 hatchStyle.addAttribute( "draw:style", "single" );
01276 hatchStyle.addAttribute( "draw:rotation", 1350);
01277 break;
01278 case Qt::CrossPattern:
01279 hatchStyle.addAttribute( "draw:style", "double" );
01280 hatchStyle.addAttribute( "draw:rotation", 0);
01281 break;
01282 case Qt::DiagCrossPattern:
01283 hatchStyle.addAttribute( "draw:style", "double" );
01284 hatchStyle.addAttribute( "draw:rotation", 450);
01285 break;
01286 default:
01287 break;
01288 }
01289
01290 return mainStyles.lookup( hatchStyle, "hatch" );
01291 }
01292
01293 QBrush KoOasisStyles::loadOasisFillStyle( const KoStyleStack &styleStack, const QString & fill, const KoOasisStyles & oasisStyles )
01294 {
01295 QBrush tmpBrush;
01296 if ( fill == "solid" )
01297 {
01298 tmpBrush.setStyle(static_cast<Qt::BrushStyle>( 1 ) );
01299 if ( styleStack.hasAttributeNS( KoXmlNS::draw, "fill-color" ) )
01300 tmpBrush.setColor(styleStack.attributeNS( KoXmlNS::draw, "fill-color" ) );
01301 if ( styleStack.hasAttributeNS( KoXmlNS::draw, "transparency" ) )
01302 {
01303 QString transparency = styleStack.attributeNS( KoXmlNS::draw, "transparency" );
01304 if ( transparency == "94%" )
01305 {
01306 tmpBrush.setStyle(Qt::Dense1Pattern);
01307 }
01308 else if ( transparency == "88%" )
01309 {
01310 tmpBrush.setStyle(Qt::Dense2Pattern);
01311 }
01312 else if ( transparency == "63%" )
01313 {
01314 tmpBrush.setStyle(Qt::Dense3Pattern);
01315
01316 }
01317 else if ( transparency == "50%" )
01318 {
01319 tmpBrush.setStyle(Qt::Dense4Pattern);
01320
01321 }
01322 else if ( transparency == "37%" )
01323 {
01324 tmpBrush.setStyle(Qt::Dense5Pattern);
01325
01326 }
01327 else if ( transparency == "12%" )
01328 {
01329 tmpBrush.setStyle(Qt::Dense6Pattern);
01330
01331 }
01332 else if ( transparency == "6%" )
01333 {
01334 tmpBrush.setStyle(Qt::Dense7Pattern);
01335
01336 }
01337 else
01338 kdDebug()<<" transparency is not defined into kpresenter :"<<transparency<<endl;
01339 }
01340 }
01341 else if ( fill == "hatch" )
01342 {
01343 QString style = styleStack.attributeNS( KoXmlNS::draw, "fill-hatch-name" );
01344 kdDebug()<<" hatch style is : "<<style<<endl;
01345
01346
01347
01348 QDomElement* draw = oasisStyles.drawStyles()[style];
01349 if ( draw)
01350 {
01351 kdDebug()<<"We have a style\n";
01352 int angle = 0;
01353 if( draw->hasAttributeNS( KoXmlNS::draw, "rotation" ))
01354 {
01355 angle = (draw->attributeNS( KoXmlNS::draw, "rotation", QString::null ).toInt())/10;
01356 kdDebug()<<"angle :"<<angle<<endl;
01357 }
01358 if(draw->hasAttributeNS( KoXmlNS::draw, "color" ) )
01359 {
01360
01361 tmpBrush.setColor(draw->attributeNS( KoXmlNS::draw, "color", QString::null ) );
01362 }
01363 if( draw->hasAttributeNS( KoXmlNS::draw, "distance" ))
01364 {
01365
01366 }
01367 if( draw->hasAttributeNS( KoXmlNS::draw, "display-name"))
01368 {
01369
01370 }
01371 if( draw->hasAttributeNS( KoXmlNS::draw, "style" ))
01372 {
01373
01374 QString styleHash = draw->attributeNS( KoXmlNS::draw, "style", QString::null );
01375 if( styleHash == "single")
01376 {
01377 switch( angle )
01378 {
01379 case 0:
01380 case 180:
01381 tmpBrush.setStyle(Qt::HorPattern );
01382 break;
01383 case 45:
01384 case 225:
01385 tmpBrush.setStyle(Qt::BDiagPattern );
01386 break;
01387 case 90:
01388 case 270:
01389 tmpBrush.setStyle(Qt::VerPattern );
01390 break;
01391 case 135:
01392 case 315:
01393 tmpBrush.setStyle(Qt::FDiagPattern );
01394 break;
01395 default:
01396
01397 kdDebug()<<" draw:rotation 'angle' : "<<angle<<endl;
01398 break;
01399 }
01400 }
01401 else if( styleHash == "double")
01402 {
01403 switch( angle )
01404 {
01405 case 0:
01406 case 180:
01407 case 90:
01408 case 270:
01409 tmpBrush.setStyle(Qt::CrossPattern );
01410 break;
01411 case 45:
01412 case 135:
01413 case 225:
01414 case 315:
01415 tmpBrush.setStyle(Qt::DiagCrossPattern );
01416 break;
01417 default:
01418
01419 kdDebug()<<" draw:rotation 'angle' : "<<angle<<endl;
01420 break;
01421 }
01422
01423 }
01424 else if( styleHash == "triple")
01425 {
01426 kdDebug()<<" it is not implemented :( \n";
01427 }
01428 }
01429 }
01430 }
01431 return tmpBrush;
01432 }
01433
01434 QDomElement* KoOasisStyles::defaultStyle( const QString& family ) const
01435 {
01436 return m_defaultStyle[family];
01437 }