CVS commit by mlaurent: Save area name M +22 -0 kspread_doc.cc 1.288 M +2 -0 kspread_doc.h 1.142 M +36 -0 kspread_util.cc 1.67 M +4 -0 kspread_util.h 1.36 --- koffice/kspread/kspread_doc.cc #1.287:1.288 @@ -587,4 +587,5 @@ bool KSpreadDoc::saveOasis( KoStore* sto xmlWriter.startElement( "office:body" ); d->workbook->saveOasis( xmlWriter ); + saveOasisAreaName( xmlWriter ); xmlWriter.endElement(); xmlWriter.endElement(); // root element @@ -1863,4 +1864,25 @@ void KSpreadDoc::loadOasisCellValidation } +bool KSpreadDoc::saveOasisAreaName( KoXmlWriter & xmlWriter ) +{ + if ( listArea().count()>0 ) + { + xmlWriter.startElement( "table:named-expressions" ); + QValueList::Iterator it; + for ( it = d->refs.begin(); it != d->refs.end(); ++it ) + { + xmlWriter.startElement( "table:named-range" ); + + xmlWriter.addAttribute( "table:name", ( *it ).ref_name ); + xmlWriter.addAttribute( "table:base-cell-address", convertRefToBase( ( *it ).table_name, ( *it ).rect ) ); + xmlWriter.addAttribute( "table:cell-range-address", convertRefToRange( ( *it ).table_name, ( *it ).rect ) ); + + xmlWriter.endElement(); + } + xmlWriter.endElement(); + } + return true; +} + void KSpreadDoc::loadOasisAreaName( const QDomElement& body ) { --- koffice/kspread/kspread_doc.h #1.141:1.142 @@ -443,4 +443,6 @@ public: virtual bool loadChildren( KoStore* _store ); QDomElement saveAreaName( QDomDocument& doc ) ; + bool saveOasisAreaName( KoXmlWriter & xmlWriter ); + void loadAreaName( const QDomElement& element ); void loadOasisAreaName( const QDomElement& element ); --- koffice/kspread/kspread_util.cc #1.66:1.67 @@ -1042,2 +1042,38 @@ int util_penCompare( QPen const & pen1, } + +QString convertRefToBase( const QString & table, const QRect & rect ) +{ + QPoint bottomRight( rect.bottomRight() ); + + QString s( "$" ); + s += table; + s += ".$"; + s += KSpreadCell::columnName( bottomRight.x() ); + s += '$'; + s += QString::number( bottomRight.y() ); + + return s; +} + +QString convertRefToRange( const QString & table, const QRect & rect ) +{ + QPoint topLeft( rect.topLeft() ); + QPoint bottomRight( rect.bottomRight() ); + + if ( topLeft == bottomRight ) + return convertRefToBase( table, rect ); + + QString s( "$" ); + s += table; + s += ".$"; + s += /*util_encodeColumnLabelText*/KSpreadCell::columnName( topLeft.x() ); + s += '$'; + s += QString::number( topLeft.y() ); + s += ":.$"; + s += /*util_encodeColumnLabelText*/KSpreadCell::columnName( bottomRight.x() ); + s += '$'; + s += QString::number( bottomRight.y() ); + + return s; +} --- koffice/kspread/kspread_util.h #1.35:1.36 @@ -187,3 +187,7 @@ QPen util_toPen( QDomElement & el int util_penCompare( QPen const & pen1, QPen const & pen2 ); +QString convertRefToRange( const QString & table, const QRect & rect ); +QString convertRefToBase( const QString & table, const QRect & rect ); + + #endif