kspread Library API Documentation

kspread_genvalidationstyle.cc

00001 /* This file is part of the KDE project
00002 
00003    Copyright 2004 Laurent Montel <montel@kde.org>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00018    Boston, MA 02111-1307, USA.
00019 */
00020 
00021 #include "kspread_genvalidationstyle.h"
00022 #include "kspread_cell.h"
00023 #include <koxmlwriter.h>
00024 
00025 
00026 KSpreadGenValidationStyles::KSpreadGenValidationStyles()
00027 {
00028 
00029 }
00030 
00031 KSpreadGenValidationStyles::~KSpreadGenValidationStyles()
00032 {
00033 
00034 }
00035 
00036 QString KSpreadGenValidationStyles::lookup( const KSpreadGenValidationStyle& style )
00037 {
00038     StyleMap::iterator it = m_styles.find( style );
00039     if ( it == m_styles.end() ) {
00040 
00041         QString styleName( "val" );
00042         styleName = makeUniqueName( styleName );
00043         m_names.insert( styleName, true );
00044         it = m_styles.insert( style, styleName );
00045     }
00046     return it.data();
00047 }
00048 
00049 QString KSpreadGenValidationStyles::makeUniqueName( const QString& base ) const
00050 {
00051     int num = 1;
00052     QString name;
00053     do {
00054         name = base;
00055         name += QString::number( num++ );
00056     } while ( m_names.find( name ) != m_names.end() );
00057     return name;
00058 }
00059 
00060 void KSpreadGenValidationStyles::writeStyle( KoXmlWriter& writer )
00061 {
00062     if ( m_styles.count()>0 )
00063     {
00064         writer.startElement( "table:content-validations" );
00065         StyleMap::Iterator it;
00066         for ( it = m_styles.begin(); it != m_styles.end(); ++it )
00067         {
00068             writer.startElement( "table:content-validation" );
00069             writer.addAttribute( "table:name", it.data() );
00070             writer.addAttribute( "table:allow-empty-cell", it.key().allowEmptyCell );
00071             writer.addAttribute( "table:condition", it.key().condition );
00072 
00073             writer.startElement( "table:help-message" );
00074             writer.addAttribute( "table:title", it.key().title );
00075             writer.addAttribute( "table:display", it.key().displayValidationInformation );
00076 
00077             QStringList text = QStringList::split( "\n", it.key().messageInfo );
00078             for ( QStringList::Iterator it2 = text.begin(); it2 != text.end(); ++it2 ) {
00079                 writer.startElement( "text:p" );
00080                 writer.addTextNode( *it2 );
00081                 writer.endElement();
00082             }
00083             writer.endElement();
00084 
00085             writer.startElement( "table:error-message" );
00086             writer.addAttribute( "table:message-type", it.key().messageType );
00087 
00088             writer.addAttribute("table:title", it.key().titleInfo);
00089             writer.addAttribute("table:display", it.key().displayMessage);
00090             text = QStringList::split( "\n", it.key().message );
00091             for ( QStringList::Iterator it3 = text.begin(); it3 != text.end(); ++it3 ) {
00092                 writer.startElement( "text:p" );
00093                 writer.addTextNode( *it3 );
00094                 writer.endElement();
00095             }
00096             writer.endElement();
00097 
00098             writer.endElement();
00099         }
00100         writer.endElement();//close sheet:content-validation
00101     }
00102 }
00103 
00104 void KSpreadGenValidationStyle::initVal( KSpreadValidity *_val )
00105 {
00106     if ( _val )
00107     {
00108         allowEmptyCell = ( _val->allowEmptyCell ? "true" : "false" );
00109         condition = createValidationCondition( _val );
00110         title = _val->title;
00111         displayValidationInformation = ( _val->displayValidationInformation ? "true" : "false" );
00112         messageInfo = _val->messageInfo;
00113 
00114         switch( _val->m_action )
00115         {
00116         case Warning:
00117             messageType = "warning";
00118             break;
00119         case Information:
00120             messageType = "information";
00121             break;
00122         case Stop:
00123             messageType = "stop";
00124             break;
00125         }
00126 
00127         titleInfo = _val->titleInfo;
00128         displayMessage = ( _val->displayMessage ? "true" : "false" );
00129         message = _val->message;
00130     }
00131 }
00132 
00133 QString KSpreadGenValidationStyle::createValidationCondition( KSpreadValidity* _val )
00134 {
00135     QString result;
00136     switch( _val->m_allow )
00137     {
00138     case Allow_All:
00139         //nothing
00140         break;
00141     case Allow_Text:
00142         //doesn't exist into oo spec
00143         result = "cell-content-is-text()";
00144         break;
00145     case Allow_Time:
00146         result = createTimeValidationCondition( _val );
00147         break;
00148     case Allow_Date:
00149         result = createDateValidationCondition( _val );
00150         break;
00151     case Allow_Integer:
00152     case Allow_Number:
00153         result = createNumberValidationCondition( _val );
00154         break;
00155     case Allow_TextLength:
00156         result = createTextValidationCondition( _val );
00157          break;
00158     case Allow_List:
00159         result = createListValidationCondition( _val );
00160         break;
00161     }
00162     return result;
00163 }
00164 
00165 QString KSpreadGenValidationStyle::createListValidationCondition( KSpreadValidity* _val )
00166 {
00167     QString result = "oooc:cell-content-is-in-list(";
00168     result = _val->listValidity.join( ";" );
00169     result +=")";
00170     return result;
00171 }
00172 
00173 QString KSpreadGenValidationStyle::createNumberValidationCondition( KSpreadValidity* _val )
00174 {
00175     QString result;
00176     if ( _val->m_allow == Allow_Number )
00177         result = "oooc:cell-content-is-whole-number() and ";
00178     else if ( _val->m_allow == Allow_Integer )
00179         result = "oooc:cell-content-is-decimal-number() and ";
00180     switch( _val->m_cond )
00181     {
00182     case None:
00183         //nothing
00184         break;
00185     case Equal:
00186         result+="cell-content()";
00187         result+="=";
00188         result+=QString::number( _val->valMin );
00189         break;
00190     case Superior:
00191         result+="cell-content()";
00192         result+=">";
00193         result+=QString::number( _val->valMin );
00194         break;
00195     case Inferior:
00196         result+="cell-content()";
00197         result+="<";
00198         result+=QString::number( _val->valMin );
00199         break;
00200     case SuperiorEqual:
00201         result+="cell-content()";
00202         result+=">=";
00203         result+=QString::number( _val->valMin );
00204         break;
00205     case InferiorEqual:
00206         result+="cell-content()";
00207         result+="<=";
00208         result+=QString::number( _val->valMin );
00209         break;
00210     case Different:
00211         result+="cell-content()";
00212         result+="!=";
00213         result+=QString::number( _val->valMin );
00214         break;
00215     case Between:
00216         result+="cell-content-is-between(";
00217         result+=QString::number( _val->valMin );
00218         result+=",";
00219         result+=QString::number( _val->valMax );
00220         result+=")";
00221         break;
00222     case DifferentTo:
00223         result+="cell-content-is-not-between(";
00224         result+=QString::number( _val->valMin );
00225         result+=",";
00226         result+=QString::number( _val->valMax );
00227         result+=")";
00228         break;
00229     }
00230     return result;
00231 }
00232 
00233 
00234 QString KSpreadGenValidationStyle::createTimeValidationCondition( KSpreadValidity* _val )
00235 {
00236     QString result( "oooc:cell-content-is-time() and " );
00237     switch( _val->m_cond )
00238     {
00239     case None:
00240         //nothing
00241         break;
00242     case Equal:
00243         result+="cell-content()";
00244         result+="=";
00245         result+=_val->timeMin.toString( );
00246         break;
00247     case Superior:
00248         result+="cell-content()";
00249         result+=">";
00250         result+=_val->timeMin.toString( );
00251         break;
00252     case Inferior:
00253         result+="cell-content()";
00254         result+="<";
00255         result+=_val->timeMin.toString( );
00256         break;
00257     case SuperiorEqual:
00258         result+="cell-content()";
00259         result+=">=";
00260         result+=_val->timeMin.toString( );
00261         break;
00262     case InferiorEqual:
00263         result+="cell-content()";
00264         result+="<=";
00265         result+=_val->timeMin.toString( );
00266         break;
00267     case Different:
00268         result+="cell-content()";
00269         result+="!=";
00270         result+=_val->timeMin.toString( );
00271         break;
00272     case Between:
00273         result+="cell-content-is-between(";
00274         result+=_val->timeMin.toString( );
00275         result+=",";
00276         result+=_val->timeMax.toString( );
00277         result+=")";
00278         break;
00279     case DifferentTo:
00280         result+="cell-content-is-not-between(";
00281         result+=_val->timeMin.toString( );
00282         result+=",";
00283         result+=_val->timeMax.toString( );
00284         result+=")";
00285         break;
00286     }
00287     return result;
00288 }
00289 
00290 QString KSpreadGenValidationStyle::createDateValidationCondition( KSpreadValidity* _val )
00291 {
00292     QString result( "oooc:cell-content-is-date() and " );
00293     switch( _val->m_cond )
00294     {
00295     case None:
00296         //nothing
00297         break;
00298     case Equal:
00299         result+="cell-content()";
00300         result+="=";
00301         result+=_val->dateMin.toString();
00302         break;
00303     case Superior:
00304         result+="cell-content()";
00305         result+=">";
00306         result+=_val->dateMin.toString();
00307         break;
00308     case Inferior:
00309         result+="cell-content()";
00310         result+="<";
00311         result+=_val->dateMin.toString();
00312         break;
00313     case SuperiorEqual:
00314         result+="cell-content()";
00315         result+=">=";
00316         result+=_val->dateMin.toString();
00317         break;
00318     case InferiorEqual:
00319         result+="cell-content()";
00320         result+="<=";
00321         result+=_val->dateMin.toString();
00322         break;
00323     case Different:
00324         result+="cell-content()";
00325         result+="!=";
00326         result+=_val->dateMin.toString();
00327         break;
00328     case Between:
00329         result+="cell-content-is-between(";
00330         result+=_val->dateMin.toString();
00331         result+=",";
00332         result+=_val->dateMax.toString();
00333         result+=")";
00334         break;
00335     case DifferentTo:
00336         result+="cell-content-is-not-between(";
00337         result+=_val->dateMin.toString();
00338         result+=",";
00339         result+=_val->dateMax.toString();
00340         result+=")";
00341         break;
00342     }
00343     return result;
00344 }
00345 
00346 QString KSpreadGenValidationStyle::createTextValidationCondition( KSpreadValidity* _val )
00347 {
00348     QString result;
00349     switch( _val->m_cond )
00350     {
00351     case None:
00352         //nothing
00353         break;
00354     case Equal:
00355         result+="oooc:cell-content-text-length()";
00356         result+="=";
00357         result+=QString::number( _val->valMin );
00358         break;
00359     case Superior:
00360         result+="oooc:cell-content-text-length()";
00361         result+=">";
00362         result+=QString::number( _val->valMin );
00363         break;
00364     case Inferior:
00365         result+="oooc:cell-content-text-length()";
00366         result+="<";
00367         result+=QString::number( _val->valMin );
00368         break;
00369     case SuperiorEqual:
00370         result+="oooc:cell-content-text-length()";
00371         result+=">=";
00372         result+=QString::number( _val->valMin );
00373         break;
00374     case InferiorEqual:
00375         result+="oooc:cell-content-text-length()";
00376         result+="<=";
00377         result+=QString::number( _val->valMin );
00378         break;
00379     case Different:
00380         result+="oooc:cell-content-text-length()";
00381         result+="!=";
00382         result+=QString::number( _val->valMin );
00383         break;
00384     case Between:
00385         result+="oooc:cell-content-text-length-is-between(";
00386         result+=QString::number( _val->valMin );
00387         result+=",";
00388         result+=QString::number( _val->valMax );
00389         result+=")";
00390         break;
00391     case DifferentTo:
00392         result+="oooc:cell-content-text-length-is-not-between(";
00393         result+=QString::number( _val->valMin );
00394         result+=",";
00395         result+=QString::number( _val->valMax );
00396         result+=")";
00397         break;
00398     }
00399     return result;
00400 }
KDE Logo
This file is part of the documentation for kspread Library Version 1.4.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Mon Feb 13 09:43:13 2006 by doxygen 1.4.2 written by Dimitri van Heesch, © 1997-2003