kspread

kspread_genvalidationstyle.cpp
1/* This file is part of the KDE project
2
3 Copyright 2004 Laurent Montel <montel@kde.org>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 * Boston, MA 02110-1301, USA.
19*/
20
21#include "kspread_genvalidationstyle.h"
22#include "kspread_cell.h"
23#include <KoXmlWriter.h>
24
25using namespace KSpread;
26
27GenValidationStyles::GenValidationStyles()
28{
29
30}
31
32GenValidationStyles::~GenValidationStyles()
33{
34
35}
36
37TQString GenValidationStyles::lookup( const GenValidationStyle& style )
38{
39 StyleMap::iterator it = m_styles.find( style );
40 if ( it == m_styles.end() ) {
41
42 TQString styleName( "val" );
43 styleName = makeUniqueName( styleName );
44 m_names.insert( styleName, true );
45 it = m_styles.insert( style, styleName );
46 }
47 return it.data();
48}
49
50TQString GenValidationStyles::makeUniqueName( const TQString& base ) const
51{
52 int num = 1;
53 TQString name;
54 do {
55 name = base;
56 name += TQString::number( num++ );
57 } while ( m_names.find( name ) != m_names.end() );
58 return name;
59}
60
61void GenValidationStyles::writeStyle( KoXmlWriter& writer )
62{
63 if ( m_styles.count()>0 )
64 {
65 writer.startElement( "table:content-validations" );
66 StyleMap::Iterator it;
67 for ( it = m_styles.begin(); it != m_styles.end(); ++it )
68 {
69 writer.startElement( "table:content-validation" );
70 writer.addAttribute( "table:name", it.data() );
71 writer.addAttribute( "table:allow-empty-cell", it.key().allowEmptyCell );
72 writer.addAttribute( "table:condition", it.key().condition );
73
74 writer.startElement( "table:help-message" );
75 writer.addAttribute( "table:title", it.key().title );
76 writer.addAttribute( "table:display", it.key().displayValidationInformation );
77
78 TQStringList text = TQStringList::split( "\n", it.key().messageInfo );
79 for ( TQStringList::Iterator it2 = text.begin(); it2 != text.end(); ++it2 ) {
80 writer.startElement( "text:p" );
81 writer.addTextNode( *it2 );
82 writer.endElement();
83 }
84 writer.endElement();
85
86 writer.startElement( "table:error-message" );
87 writer.addAttribute( "table:message-type", it.key().messageType );
88
89 writer.addAttribute("table:title", it.key().titleInfo);
90 writer.addAttribute("table:display", it.key().displayMessage);
91 text = TQStringList::split( "\n", it.key().message );
92 for ( TQStringList::Iterator it3 = text.begin(); it3 != text.end(); ++it3 ) {
93 writer.startElement( "text:p" );
94 writer.addTextNode( *it3 );
95 writer.endElement();
96 }
97 writer.endElement();
98
99 writer.endElement();
100 }
101 writer.endElement();//close sheet:content-validation
102 }
103}
104
105void GenValidationStyle::initVal( Validity *_val )
106{
107 if ( _val )
108 {
109 allowEmptyCell = ( _val->allowEmptyCell ? "true" : "false" );
110 condition = createValidationCondition( _val );
111 title = _val->title;
112 displayValidationInformation = ( _val->displayValidationInformation ? "true" : "false" );
113 messageInfo = _val->messageInfo;
114
115 switch( _val->m_action )
116 {
117 case Action::Warning:
118 messageType = "warning";
119 break;
120 case Action::Information:
121 messageType = "information";
122 break;
123 case Action::Stop:
124 messageType = "stop";
125 break;
126 }
127
128 titleInfo = _val->titleInfo;
129 displayMessage = ( _val->displayMessage ? "true" : "false" );
130 message = _val->message;
131 }
132}
133
134TQString GenValidationStyle::createValidationCondition( Validity* _val )
135{
136 TQString result;
137 switch( _val->m_restriction )
138 {
140 //nothing
141 break;
143 //doesn't exist into oo spec
144 result = "cell-content-is-text()";
145 break;
147 result = createTimeValidationCondition( _val );
148 break;
150 result = createDateValidationCondition( _val );
151 break;
154 result = createNumberValidationCondition( _val );
155 break;
157 result = createTextValidationCondition( _val );
158 break;
160 result = createListValidationCondition( _val );
161 break;
162 }
163 return result;
164}
165
166TQString GenValidationStyle::createListValidationCondition( Validity* _val )
167{
168 TQString result = "oooc:cell-content-is-in-list(";
169 result = _val->listValidity.join( ";" );
170 result +=")";
171 return result;
172}
173
174TQString GenValidationStyle::createNumberValidationCondition( Validity* _val )
175{
176 TQString result;
177 if ( _val->m_restriction == Restriction::Number )
178 result = "oooc:cell-content-is-whole-number() and ";
179 else if ( _val->m_restriction == Restriction::Integer )
180 result = "oooc:cell-content-is-decimal-number() and ";
181 switch( _val->m_cond )
182 {
183 case Conditional::None:
184 //nothing
185 break;
186 case Conditional::Equal:
187 result+="cell-content()";
188 result+="=";
189 result+=TQString::number( _val->valMin );
190 break;
191 case Conditional::Superior:
192 result+="cell-content()";
193 result+=">";
194 result+=TQString::number( _val->valMin );
195 break;
196 case Conditional::Inferior:
197 result+="cell-content()";
198 result+="<";
199 result+=TQString::number( _val->valMin );
200 break;
201 case Conditional::SuperiorEqual:
202 result+="cell-content()";
203 result+=">=";
204 result+=TQString::number( _val->valMin );
205 break;
206 case Conditional::InferiorEqual:
207 result+="cell-content()";
208 result+="<=";
209 result+=TQString::number( _val->valMin );
210 break;
211 case Conditional::Different:
212 result+="cell-content()";
213 result+="!=";
214 result+=TQString::number( _val->valMin );
215 break;
216 case Conditional::Between:
217 result+="cell-content-is-between(";
218 result+=TQString::number( _val->valMin );
219 result+=",";
220 result+=TQString::number( _val->valMax );
221 result+=")";
222 break;
223 case Conditional::DifferentTo:
224 result+="cell-content-is-not-between(";
225 result+=TQString::number( _val->valMin );
226 result+=",";
227 result+=TQString::number( _val->valMax );
228 result+=")";
229 break;
230 }
231 return result;
232}
233
234
235TQString GenValidationStyle::createTimeValidationCondition( Validity* _val )
236{
237 TQString result( "oooc:cell-content-is-time() and " );
238 switch( _val->m_cond )
239 {
240 case Conditional::None:
241 //nothing
242 break;
243 case Conditional::Equal:
244 result+="cell-content()";
245 result+="=";
246 result+=_val->timeMin.toString( );
247 break;
248 case Conditional::Superior:
249 result+="cell-content()";
250 result+=">";
251 result+=_val->timeMin.toString( );
252 break;
253 case Conditional::Inferior:
254 result+="cell-content()";
255 result+="<";
256 result+=_val->timeMin.toString( );
257 break;
258 case Conditional::SuperiorEqual:
259 result+="cell-content()";
260 result+=">=";
261 result+=_val->timeMin.toString( );
262 break;
263 case Conditional::InferiorEqual:
264 result+="cell-content()";
265 result+="<=";
266 result+=_val->timeMin.toString( );
267 break;
268 case Conditional::Different:
269 result+="cell-content()";
270 result+="!=";
271 result+=_val->timeMin.toString( );
272 break;
273 case Conditional::Between:
274 result+="cell-content-is-between(";
275 result+=_val->timeMin.toString( );
276 result+=",";
277 result+=_val->timeMax.toString( );
278 result+=")";
279 break;
280 case Conditional::DifferentTo:
281 result+="cell-content-is-not-between(";
282 result+=_val->timeMin.toString( );
283 result+=",";
284 result+=_val->timeMax.toString( );
285 result+=")";
286 break;
287 }
288 return result;
289}
290
291TQString GenValidationStyle::createDateValidationCondition( Validity* _val )
292{
293 TQString result( "oooc:cell-content-is-date() and " );
294 switch( _val->m_cond )
295 {
296 case Conditional::None:
297 //nothing
298 break;
299 case Conditional::Equal:
300 result+="cell-content()";
301 result+="=";
302 result+=_val->dateMin.toString();
303 break;
304 case Conditional::Superior:
305 result+="cell-content()";
306 result+=">";
307 result+=_val->dateMin.toString();
308 break;
309 case Conditional::Inferior:
310 result+="cell-content()";
311 result+="<";
312 result+=_val->dateMin.toString();
313 break;
314 case Conditional::SuperiorEqual:
315 result+="cell-content()";
316 result+=">=";
317 result+=_val->dateMin.toString();
318 break;
319 case Conditional::InferiorEqual:
320 result+="cell-content()";
321 result+="<=";
322 result+=_val->dateMin.toString();
323 break;
324 case Conditional::Different:
325 result+="cell-content()";
326 result+="!=";
327 result+=_val->dateMin.toString();
328 break;
329 case Conditional::Between:
330 result+="cell-content-is-between(";
331 result+=_val->dateMin.toString();
332 result+=",";
333 result+=_val->dateMax.toString();
334 result+=")";
335 break;
336 case Conditional::DifferentTo:
337 result+="cell-content-is-not-between(";
338 result+=_val->dateMin.toString();
339 result+=",";
340 result+=_val->dateMax.toString();
341 result+=")";
342 break;
343 }
344 return result;
345}
346
347TQString GenValidationStyle::createTextValidationCondition( Validity* _val )
348{
349 TQString result;
350 switch( _val->m_cond )
351 {
352 case Conditional::None:
353 //nothing
354 break;
355 case Conditional::Equal:
356 result+="oooc:cell-content-text-length()";
357 result+="=";
358 result+=TQString::number( _val->valMin );
359 break;
360 case Conditional::Superior:
361 result+="oooc:cell-content-text-length()";
362 result+=">";
363 result+=TQString::number( _val->valMin );
364 break;
365 case Conditional::Inferior:
366 result+="oooc:cell-content-text-length()";
367 result+="<";
368 result+=TQString::number( _val->valMin );
369 break;
370 case Conditional::SuperiorEqual:
371 result+="oooc:cell-content-text-length()";
372 result+=">=";
373 result+=TQString::number( _val->valMin );
374 break;
375 case Conditional::InferiorEqual:
376 result+="oooc:cell-content-text-length()";
377 result+="<=";
378 result+=TQString::number( _val->valMin );
379 break;
380 case Conditional::Different:
381 result+="oooc:cell-content-text-length()";
382 result+="!=";
383 result+=TQString::number( _val->valMin );
384 break;
385 case Conditional::Between:
386 result+="oooc:cell-content-text-length-is-between(";
387 result+=TQString::number( _val->valMin );
388 result+=",";
389 result+=TQString::number( _val->valMax );
390 result+=")";
391 break;
392 case Conditional::DifferentTo:
393 result+="oooc:cell-content-text-length-is-not-between(";
394 result+=TQString::number( _val->valMin );
395 result+=",";
396 result+=TQString::number( _val->valMax );
397 result+=")";
398 break;
399 }
400 return result;
401}
@ Text
Restrict to texts.
@ Date
Restrict to dates.
@ Number
Restrict to numbers.
@ Integer
Restrict to integers.
@ List
Restrict to lists.
@ TextLength
Restrict text length.
@ None
No restriction.
@ Time
Restrict to times.
The KSpread namespace.
Definition commands.h:39