kspread_genvalidationstyle.cc
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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();
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
00140 break;
00141 case Allow_Text:
00142
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
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
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
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
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 }
This file is part of the documentation for kspread Library Version 1.4.2.