kspread
kspread_genvalidationstyle.cc00001
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 using namespace KSpread;
00026
00027 GenValidationStyles::GenValidationStyles()
00028 {
00029
00030 }
00031
00032 GenValidationStyles::~GenValidationStyles()
00033 {
00034
00035 }
00036
00037 QString GenValidationStyles::lookup( const GenValidationStyle& style )
00038 {
00039 StyleMap::iterator it = m_styles.find( style );
00040 if ( it == m_styles.end() ) {
00041
00042 QString styleName( "val" );
00043 styleName = makeUniqueName( styleName );
00044 m_names.insert( styleName, true );
00045 it = m_styles.insert( style, styleName );
00046 }
00047 return it.data();
00048 }
00049
00050 QString GenValidationStyles::makeUniqueName( const QString& base ) const
00051 {
00052 int num = 1;
00053 QString name;
00054 do {
00055 name = base;
00056 name += QString::number( num++ );
00057 } while ( m_names.find( name ) != m_names.end() );
00058 return name;
00059 }
00060
00061 void GenValidationStyles::writeStyle( KoXmlWriter& writer )
00062 {
00063 if ( m_styles.count()>0 )
00064 {
00065 writer.startElement( "table:content-validations" );
00066 StyleMap::Iterator it;
00067 for ( it = m_styles.begin(); it != m_styles.end(); ++it )
00068 {
00069 writer.startElement( "table:content-validation" );
00070 writer.addAttribute( "table:name", it.data() );
00071 writer.addAttribute( "table:allow-empty-cell", it.key().allowEmptyCell );
00072 writer.addAttribute( "table:condition", it.key().condition );
00073
00074 writer.startElement( "table:help-message" );
00075 writer.addAttribute( "table:title", it.key().title );
00076 writer.addAttribute( "table:display", it.key().displayValidationInformation );
00077
00078 QStringList text = QStringList::split( "\n", it.key().messageInfo );
00079 for ( QStringList::Iterator it2 = text.begin(); it2 != text.end(); ++it2 ) {
00080 writer.startElement( "text:p" );
00081 writer.addTextNode( *it2 );
00082 writer.endElement();
00083 }
00084 writer.endElement();
00085
00086 writer.startElement( "table:error-message" );
00087 writer.addAttribute( "table:message-type", it.key().messageType );
00088
00089 writer.addAttribute("table:title", it.key().titleInfo);
00090 writer.addAttribute("table:display", it.key().displayMessage);
00091 text = QStringList::split( "\n", it.key().message );
00092 for ( QStringList::Iterator it3 = text.begin(); it3 != text.end(); ++it3 ) {
00093 writer.startElement( "text:p" );
00094 writer.addTextNode( *it3 );
00095 writer.endElement();
00096 }
00097 writer.endElement();
00098
00099 writer.endElement();
00100 }
00101 writer.endElement();
00102 }
00103 }
00104
00105 void GenValidationStyle::initVal( Validity *_val )
00106 {
00107 if ( _val )
00108 {
00109 allowEmptyCell = ( _val->allowEmptyCell ? "true" : "false" );
00110 condition = createValidationCondition( _val );
00111 title = _val->title;
00112 displayValidationInformation = ( _val->displayValidationInformation ? "true" : "false" );
00113 messageInfo = _val->messageInfo;
00114
00115 switch( _val->m_action )
00116 {
00117 case Action::Warning:
00118 messageType = "warning";
00119 break;
00120 case Action::Information:
00121 messageType = "information";
00122 break;
00123 case Action::Stop:
00124 messageType = "stop";
00125 break;
00126 }
00127
00128 titleInfo = _val->titleInfo;
00129 displayMessage = ( _val->displayMessage ? "true" : "false" );
00130 message = _val->message;
00131 }
00132 }
00133
00134 QString GenValidationStyle::createValidationCondition( Validity* _val )
00135 {
00136 QString result;
00137 switch( _val->m_restriction )
00138 {
00139 case Restriction::None:
00140
00141 break;
00142 case Restriction::Text:
00143
00144 result = "cell-content-is-text()";
00145 break;
00146 case Restriction::Time:
00147 result = createTimeValidationCondition( _val );
00148 break;
00149 case Restriction::Date:
00150 result = createDateValidationCondition( _val );
00151 break;
00152 case Restriction::Integer:
00153 case Restriction::Number:
00154 result = createNumberValidationCondition( _val );
00155 break;
00156 case Restriction::TextLength:
00157 result = createTextValidationCondition( _val );
00158 break;
00159 case Restriction::List:
00160 result = createListValidationCondition( _val );
00161 break;
00162 }
00163 return result;
00164 }
00165
00166 QString GenValidationStyle::createListValidationCondition( Validity* _val )
00167 {
00168 QString result = "oooc:cell-content-is-in-list(";
00169 result = _val->listValidity.join( ";" );
00170 result +=")";
00171 return result;
00172 }
00173
00174 QString GenValidationStyle::createNumberValidationCondition( Validity* _val )
00175 {
00176 QString result;
00177 if ( _val->m_restriction == Restriction::Number )
00178 result = "oooc:cell-content-is-whole-number() and ";
00179 else if ( _val->m_restriction == Restriction::Integer )
00180 result = "oooc:cell-content-is-decimal-number() and ";
00181 switch( _val->m_cond )
00182 {
00183 case Conditional::None:
00184
00185 break;
00186 case Conditional::Equal:
00187 result+="cell-content()";
00188 result+="=";
00189 result+=QString::number( _val->valMin );
00190 break;
00191 case Conditional::Superior:
00192 result+="cell-content()";
00193 result+=">";
00194 result+=QString::number( _val->valMin );
00195 break;
00196 case Conditional::Inferior:
00197 result+="cell-content()";
00198 result+="<";
00199 result+=QString::number( _val->valMin );
00200 break;
00201 case Conditional::SuperiorEqual:
00202 result+="cell-content()";
00203 result+=">=";
00204 result+=QString::number( _val->valMin );
00205 break;
00206 case Conditional::InferiorEqual:
00207 result+="cell-content()";
00208 result+="<=";
00209 result+=QString::number( _val->valMin );
00210 break;
00211 case Conditional::Different:
00212 result+="cell-content()";
00213 result+="!=";
00214 result+=QString::number( _val->valMin );
00215 break;
00216 case Conditional::Between:
00217 result+="cell-content-is-between(";
00218 result+=QString::number( _val->valMin );
00219 result+=",";
00220 result+=QString::number( _val->valMax );
00221 result+=")";
00222 break;
00223 case Conditional::DifferentTo:
00224 result+="cell-content-is-not-between(";
00225 result+=QString::number( _val->valMin );
00226 result+=",";
00227 result+=QString::number( _val->valMax );
00228 result+=")";
00229 break;
00230 }
00231 return result;
00232 }
00233
00234
00235 QString GenValidationStyle::createTimeValidationCondition( Validity* _val )
00236 {
00237 QString result( "oooc:cell-content-is-time() and " );
00238 switch( _val->m_cond )
00239 {
00240 case Conditional::None:
00241
00242 break;
00243 case Conditional::Equal:
00244 result+="cell-content()";
00245 result+="=";
00246 result+=_val->timeMin.toString( );
00247 break;
00248 case Conditional::Superior:
00249 result+="cell-content()";
00250 result+=">";
00251 result+=_val->timeMin.toString( );
00252 break;
00253 case Conditional::Inferior:
00254 result+="cell-content()";
00255 result+="<";
00256 result+=_val->timeMin.toString( );
00257 break;
00258 case Conditional::SuperiorEqual:
00259 result+="cell-content()";
00260 result+=">=";
00261 result+=_val->timeMin.toString( );
00262 break;
00263 case Conditional::InferiorEqual:
00264 result+="cell-content()";
00265 result+="<=";
00266 result+=_val->timeMin.toString( );
00267 break;
00268 case Conditional::Different:
00269 result+="cell-content()";
00270 result+="!=";
00271 result+=_val->timeMin.toString( );
00272 break;
00273 case Conditional::Between:
00274 result+="cell-content-is-between(";
00275 result+=_val->timeMin.toString( );
00276 result+=",";
00277 result+=_val->timeMax.toString( );
00278 result+=")";
00279 break;
00280 case Conditional::DifferentTo:
00281 result+="cell-content-is-not-between(";
00282 result+=_val->timeMin.toString( );
00283 result+=",";
00284 result+=_val->timeMax.toString( );
00285 result+=")";
00286 break;
00287 }
00288 return result;
00289 }
00290
00291 QString GenValidationStyle::createDateValidationCondition( Validity* _val )
00292 {
00293 QString result( "oooc:cell-content-is-date() and " );
00294 switch( _val->m_cond )
00295 {
00296 case Conditional::None:
00297
00298 break;
00299 case Conditional::Equal:
00300 result+="cell-content()";
00301 result+="=";
00302 result+=_val->dateMin.toString();
00303 break;
00304 case Conditional::Superior:
00305 result+="cell-content()";
00306 result+=">";
00307 result+=_val->dateMin.toString();
00308 break;
00309 case Conditional::Inferior:
00310 result+="cell-content()";
00311 result+="<";
00312 result+=_val->dateMin.toString();
00313 break;
00314 case Conditional::SuperiorEqual:
00315 result+="cell-content()";
00316 result+=">=";
00317 result+=_val->dateMin.toString();
00318 break;
00319 case Conditional::InferiorEqual:
00320 result+="cell-content()";
00321 result+="<=";
00322 result+=_val->dateMin.toString();
00323 break;
00324 case Conditional::Different:
00325 result+="cell-content()";
00326 result+="!=";
00327 result+=_val->dateMin.toString();
00328 break;
00329 case Conditional::Between:
00330 result+="cell-content-is-between(";
00331 result+=_val->dateMin.toString();
00332 result+=",";
00333 result+=_val->dateMax.toString();
00334 result+=")";
00335 break;
00336 case Conditional::DifferentTo:
00337 result+="cell-content-is-not-between(";
00338 result+=_val->dateMin.toString();
00339 result+=",";
00340 result+=_val->dateMax.toString();
00341 result+=")";
00342 break;
00343 }
00344 return result;
00345 }
00346
00347 QString GenValidationStyle::createTextValidationCondition( Validity* _val )
00348 {
00349 QString result;
00350 switch( _val->m_cond )
00351 {
00352 case Conditional::None:
00353
00354 break;
00355 case Conditional::Equal:
00356 result+="oooc:cell-content-text-length()";
00357 result+="=";
00358 result+=QString::number( _val->valMin );
00359 break;
00360 case Conditional::Superior:
00361 result+="oooc:cell-content-text-length()";
00362 result+=">";
00363 result+=QString::number( _val->valMin );
00364 break;
00365 case Conditional::Inferior:
00366 result+="oooc:cell-content-text-length()";
00367 result+="<";
00368 result+=QString::number( _val->valMin );
00369 break;
00370 case Conditional::SuperiorEqual:
00371 result+="oooc:cell-content-text-length()";
00372 result+=">=";
00373 result+=QString::number( _val->valMin );
00374 break;
00375 case Conditional::InferiorEqual:
00376 result+="oooc:cell-content-text-length()";
00377 result+="<=";
00378 result+=QString::number( _val->valMin );
00379 break;
00380 case Conditional::Different:
00381 result+="oooc:cell-content-text-length()";
00382 result+="!=";
00383 result+=QString::number( _val->valMin );
00384 break;
00385 case Conditional::Between:
00386 result+="oooc:cell-content-text-length-is-between(";
00387 result+=QString::number( _val->valMin );
00388 result+=",";
00389 result+=QString::number( _val->valMax );
00390 result+=")";
00391 break;
00392 case Conditional::DifferentTo:
00393 result+="oooc:cell-content-text-length-is-not-between(";
00394 result+=QString::number( _val->valMin );
00395 result+=",";
00396 result+=QString::number( _val->valMax );
00397 result+=")";
00398 break;
00399 }
00400 return result;
00401 }
|