24#include "kspread_dlg_validity.h"
25#include "kspread_canvas.h"
26#include "kspread_doc.h"
27#include "kspread_locale.h"
28#include "kspread_sheet.h"
29#include "kspread_view.h"
32#include <tqbuttongroup.h>
33#include <knumvalidator.h>
35#include <tdemessagebox.h>
37#include <tqcombobox.h>
38#include <tqlineedit.h>
39#include <tqpushbutton.h>
41#include <tqtextedit.h>
42#include <tqcheckbox.h>
46DlgValidity::DlgValidity(
View* parent,
const char* name ,
const TQRect &_marker )
47 :KDialogBase(KDialogBase::Tabbed, i18n(
"Validity"),User2|User1|Cancel, User1, parent, name,true,false,KStdGuiItem::ok(),i18n(
"Clear &All"))
52 TQFrame *page1 = addPage(i18n(
"&Values"));
53 TQVBoxLayout *lay1 =
new TQVBoxLayout( page1, KDialogBase::marginHint(), KDialogBase::spacingHint() );
55 TQGroupBox* tmpTQButtonGroup;
56 tmpTQButtonGroup =
new TQGroupBox( 0, TQt::Vertical, i18n(
"Validity Criteria"), page1,
"ButtonGroup_1" );
57 tmpTQButtonGroup->layout()->setSpacing(KDialog::spacingHint());
58 tmpTQButtonGroup->layout()->setMargin(KDialog::marginHint());
59 TQGridLayout *grid1 =
new TQGridLayout(tmpTQButtonGroup->layout(),4,2);
61 TQLabel *tmpTQLabel =
new TQLabel( tmpTQButtonGroup,
"Label_1" );
62 tmpTQLabel->setText(i18n(
"Allow:" ));
63 grid1->addWidget(tmpTQLabel,0,0);
65 chooseType=
new TQComboBox(tmpTQButtonGroup);
66 grid1->addWidget(chooseType,0,1);
67 TQStringList listType;
68 listType+=i18n(
"All");
69 listType+=i18n(
"Number");
70 listType+=i18n(
"Integer");
71 listType+=i18n(
"Text");
72 listType+=i18n(
"Date");
73 listType+=i18n(
"Time");
74 listType+=i18n(
"Text Length");
75 listType+=i18n(
"List");
76 chooseType->insertStringList(listType);
77 chooseType->setCurrentItem(0);
79 allowEmptyCell =
new TQCheckBox( i18n(
"Allow blanks" ), tmpTQButtonGroup );
80 grid1->addWidget(allowEmptyCell,1,0);
82 tmpTQLabel =
new TQLabel( tmpTQButtonGroup,
"Label_2" );
83 tmpTQLabel->setText(i18n(
"Data:" ));
84 grid1->addWidget(tmpTQLabel,2,0);
86 choose=
new TQComboBox(tmpTQButtonGroup);
87 grid1->addWidget(choose,2,1);
89 list+=i18n(
"equal to");
90 list+=i18n(
"greater than");
91 list+=i18n(
"less than");
92 list+=i18n(
"equal to or greater than");
93 list+=i18n(
"equal to or less than");
94 list+=i18n(
"between");
95 list+=i18n(
"different from");
96 list+=i18n(
"different to");
97 choose->insertStringList(list);
98 choose->setCurrentItem(0);
100 edit1 =
new TQLabel( tmpTQButtonGroup,
"Label_3" );
101 edit1->setText(i18n(
"Minimum:" ));
102 grid1->addWidget(edit1,3,0);
104 val_min=
new TQLineEdit(tmpTQButtonGroup);
105 grid1->addWidget(val_min,3,1);
106 val_min->setValidator(
new KFloatValidator( val_min ) );
108 edit2 =
new TQLabel( tmpTQButtonGroup,
"Label_4" );
109 edit2->setText(i18n(
"Maximum:" ));
110 grid1->addWidget(edit2,4,0);
112 val_max=
new TQLineEdit(tmpTQButtonGroup);
113 grid1->addWidget(val_max,4,1);
114 val_max->setValidator(
new KFloatValidator( val_max ) );
115 lay1->addWidget(tmpTQButtonGroup);
120 edit2->setText( i18n(
"Date:" ) );
121 grid1->addColSpacing( 0, edit2->width() );
122 edit2->setText( i18n(
"Date minimum:" ) );
123 grid1->addColSpacing( 0, edit2->width() );
124 edit2->setText( i18n(
"Date maximum:" ) );
125 grid1->addColSpacing( 0, edit2->width() );
126 edit2->setText( i18n(
"Time:" ) );
127 grid1->addColSpacing( 0, edit2->width() );
128 edit2->setText( i18n(
"Time minimum:" ) );
129 grid1->addColSpacing( 0, edit2->width() );
130 edit2->setText( i18n(
"Time maximum:" ) );
131 grid1->addColSpacing( 0, edit2->width() );
132 edit2->setText( i18n(
"Minimum:" ) );
133 grid1->addColSpacing( 0, edit2->width() );
134 edit2->setText( i18n(
"Maximum:" ) );
135 grid1->addColSpacing( 0, edit2->width() );
136 edit2->setText( i18n(
"Number:" ) );
137 grid1->addColSpacing( 0, edit2->width() );
139 validityList =
new TQTextEdit( tmpTQButtonGroup );
140 grid1->addMultiCellWidget(validityList,2, 4,1, 1);
142 validityLabelList =
new TQLabel( tmpTQButtonGroup,
"Label_Label_List" );
143 validityLabelList->setText(i18n(
"Entries:" ));
144 grid1->addWidget(validityLabelList,2,0);
146 TQFrame *page2 = addPage(i18n(
"&Error Alert"));
148 lay1 =
new TQVBoxLayout( page2, KDialogBase::marginHint(), KDialogBase::spacingHint() );
150 tmpTQButtonGroup =
new TQButtonGroup( 0, TQt::Vertical, i18n(
"Contents"), page2,
"ButtonGroup_2" );
151 tmpTQButtonGroup->layout()->setSpacing(KDialog::spacingHint());
152 tmpTQButtonGroup->layout()->setMargin(KDialog::marginHint());
153 TQGridLayout *grid2 =
new TQGridLayout(tmpTQButtonGroup->layout(),5,2);
155 displayMessage =
new TQCheckBox(i18n(
"Show error message when invalid values are entered" ),tmpTQButtonGroup );
156 displayMessage->setChecked(
true );
157 grid2->addMultiCellWidget(displayMessage,0, 0,0, 1);
159 tmpTQLabel =
new TQLabel( tmpTQButtonGroup,
"Label_5" );
160 tmpTQLabel->setText(i18n(
"Action:" ));
161 grid2->addWidget(tmpTQLabel,1,0);
163 chooseAction=
new TQComboBox(tmpTQButtonGroup);
164 grid2->addWidget(chooseAction,1,1);
167 list2+=i18n(
"Warning");
168 list2+=i18n(
"Information");
169 chooseAction->insertStringList(list2);
170 chooseAction->setCurrentItem(0);
171 tmpTQLabel =
new TQLabel( tmpTQButtonGroup,
"Label_6" );
172 tmpTQLabel->setText(i18n(
"Title:" ));
173 grid2->addWidget(tmpTQLabel,2,0);
175 title=
new TQLineEdit( tmpTQButtonGroup);
176 grid2->addWidget(title,2,1);
178 tmpTQLabel =
new TQLabel( tmpTQButtonGroup,
"Label_7" );
179 tmpTQLabel->setText(i18n(
"Message:" ));
180 grid2->addWidget(tmpTQLabel,3,0);
182 message =
new TQTextEdit( tmpTQButtonGroup);
183 grid2->addMultiCellWidget(message,3, 4,1, 1);
184 lay1->addWidget(tmpTQButtonGroup);
185 message->setTextFormat( TQt::PlainText );
187 TQFrame *page3 = addPage(i18n(
"Input Help"));
188 lay1 =
new TQVBoxLayout( page3, KDialogBase::marginHint(), KDialogBase::spacingHint() );
190 tmpTQButtonGroup =
new TQButtonGroup( 0, TQt::Vertical, i18n(
"Contents"), page3,
"ButtonGroup_2" );
191 tmpTQButtonGroup->layout()->setSpacing(KDialog::spacingHint());
192 tmpTQButtonGroup->layout()->setMargin(KDialog::marginHint());
194 TQGridLayout *grid3 =
new TQGridLayout(tmpTQButtonGroup->layout(),5,2);
196 displayHelp =
new TQCheckBox(i18n(
"Show input help when cell is selected" ),tmpTQButtonGroup );
197 displayMessage->setChecked(
false );
198 grid3->addMultiCellWidget(displayHelp,0, 0,0, 1);
200 tmpTQLabel =
new TQLabel( tmpTQButtonGroup,
"Label_6" );
201 tmpTQLabel->setText(i18n(
"Title:" ));
202 grid3->addWidget(tmpTQLabel,2,0);
204 titleHelp=
new TQLineEdit( tmpTQButtonGroup);
205 grid3->addWidget(titleHelp,2,1);
207 tmpTQLabel =
new TQLabel( tmpTQButtonGroup,
"Label_7" );
208 tmpTQLabel->setText(i18n(
"Message:" ));
209 grid3->addWidget(tmpTQLabel,3,0);
211 messageHelp =
new TQTextEdit( tmpTQButtonGroup);
212 grid3->addMultiCellWidget(messageHelp,3, 4,1, 1);
213 lay1->addWidget(tmpTQButtonGroup);
214 messageHelp->setTextFormat( TQt::PlainText );
217 connect(choose,TQ_SIGNAL(activated(
int )),
this,TQ_SLOT(changeIndexCond(
int)));
218 connect(chooseType,TQ_SIGNAL(activated(
int )),
this,TQ_SLOT(changeIndexType(
int)));
219 connect(
this, TQ_SIGNAL(user1Clicked()), TQ_SLOT(OkPressed()) );
220 connect(
this, TQ_SIGNAL(user2Clicked()), TQ_SLOT(clearAllPressed()) );
224void DlgValidity::displayOrNotListOfValidity(
bool _displayList)
228 validityList->show();
229 validityLabelList->show();
237 validityList->hide();
238 validityLabelList->hide();
246void DlgValidity::changeIndexType(
int _index)
248 bool activate = ( _index!=0 );
249 message->setEnabled(activate);
250 title->setEnabled(activate);
251 chooseAction->setEnabled( activate );
252 displayHelp->setEnabled(activate);
253 messageHelp->setEnabled(activate);
254 titleHelp->setEnabled(activate);
256 displayOrNotListOfValidity(
true );
258 displayOrNotListOfValidity(
false );
265 val_max->setEnabled(
false);
266 val_min->setEnabled(
false);
267 edit1->setEnabled(
false);
268 edit2->setEnabled(
false);
269 choose->setEnabled(
false);
272 val_min->setEnabled(
true);
273 edit1->setEnabled(
true);
274 choose->setEnabled(
true);
275 val_min->setValidator(
new KFloatValidator( val_min ) );
276 val_max->setValidator(
new KFloatValidator( val_max ) );
277 if( choose->currentItem()<=4)
279 edit1->setText(i18n(
"Number:"));
281 edit2->setEnabled(
false);
282 val_max->setEnabled(
false);
286 edit1->setText(i18n(
"Minimum:" ));
287 edit2->setText(i18n(
"Maximum:" ));
288 edit2->setEnabled(
true);
289 val_max->setEnabled(
true);
294 val_min->setEnabled(
true);
295 edit1->setEnabled(
true);
296 choose->setEnabled(
true);
297 val_min->setValidator(
new KIntValidator( val_min ) );
298 val_max->setValidator(
new KIntValidator( val_max ) );
299 if( choose->currentItem()<=4)
301 edit1->setText(i18n(
"Number:"));
303 edit2->setEnabled(
false);
304 val_max->setEnabled(
false);
308 edit1->setText(i18n(
"Minimum:" ));
309 edit2->setText(i18n(
"Maximum:" ));
310 edit2->setEnabled(
true);
311 val_max->setEnabled(
true);
318 val_max->setEnabled(
false);
319 val_min->setEnabled(
false);
320 choose->setEnabled(
false);
321 edit1->setEnabled(
false);
322 edit2->setEnabled(
false);
325 edit1->setText(i18n(
"Date:"));
327 val_min->setEnabled(
true);
328 edit1->setEnabled(
true);
329 choose->setEnabled(
true);
331 val_min->clearValidator();
332 val_max->clearValidator();
333 if( choose->currentItem()<=4)
335 edit1->setText(i18n(
"Date:"));
337 edit2->setEnabled(
false);
338 val_max->setEnabled(
false);
342 edit1->setText(i18n(
"Date minimum:"));
343 edit2->setText(i18n(
"Date maximum:"));
344 edit2->setEnabled(
true);
345 val_max->setEnabled(
true);
349 val_min->setEnabled(
true);
350 edit1->setEnabled(
true);
351 choose->setEnabled(
true);
352 val_min->clearValidator();
353 val_max->clearValidator();
354 if( choose->currentItem()<=4)
356 edit1->setText(i18n(
"Time:"));
358 edit2->setEnabled(
false);
359 val_max->setEnabled(
false);
363 edit1->setText(i18n(
"Time minimum:"));
364 edit2->setText(i18n(
"Time maximum:"));
365 edit2->setEnabled(
true);
366 val_max->setEnabled(
true);
370 if ( width() < sizeHint().width() )
371 resize( sizeHint() );
374void DlgValidity::changeIndexCond(
int _index)
383 val_max->setEnabled(
false);
384 if(chooseType->currentItem()==1 ||chooseType->currentItem()==2
385 ||chooseType->currentItem()==6)
386 edit1->setText(i18n(
"Number:"));
387 else if( chooseType->currentItem()==3)
389 else if( chooseType->currentItem()==4)
390 edit1->setText(i18n(
"Date:"));
391 else if( chooseType->currentItem()==5)
392 edit1->setText(i18n(
"Time:"));
394 edit2->setEnabled(
false);
398 val_max->setEnabled(
true);
399 edit2->setEnabled(
true);
400 edit1->setEnabled(
true);
401 if(chooseType->currentItem()==1 || chooseType->currentItem()==2
402 || chooseType->currentItem()==6)
404 edit1->setText(i18n(
"Minimum:" ));
405 edit2->setText(i18n(
"Maximum:" ));
407 else if(chooseType->currentItem()==3)
412 else if(chooseType->currentItem()==4)
414 edit1->setText(i18n(
"Date minimum:"));
415 edit2->setText(i18n(
"Date maximum:"));
417 else if(chooseType->currentItem()==5)
419 edit1->setText(i18n(
"Time minimum:"));
420 edit2->setText(i18n(
"Time maximum:"));
426void DlgValidity::init()
428 Cell *c = m_pView->activeSheet()->cellAt( marker.left(), marker.top() );
429 Validity * tmpValidity=c->getValidity(0);
432 message->setText(tmpValidity->message);
433 title->setText(tmpValidity->title);
435 switch( tmpValidity->m_restriction)
438 chooseType->setCurrentItem(0);
441 chooseType->setCurrentItem(1);
442 if(tmpValidity->m_cond >=5 )
443 val_max->setText(tmp.setNum(tmpValidity->valMax));
444 val_min->setText(tmp.setNum(tmpValidity->valMin));
447 chooseType->setCurrentItem(2);
448 if(tmpValidity->m_cond >=5 )
449 val_max->setText(tmp.setNum(tmpValidity->valMax));
450 val_min->setText(tmp.setNum(tmpValidity->valMin));
453 chooseType->setCurrentItem(6);
454 if(tmpValidity->m_cond >=5 )
455 val_max->setText(tmp.setNum(tmpValidity->valMax));
456 val_min->setText(tmp.setNum(tmpValidity->valMin));
459 chooseType->setCurrentItem(3);
462 chooseType->setCurrentItem(4);
463 val_min->setText(m_pView->doc()->locale()->formatDate(tmpValidity->dateMin,
true));
464 if(tmpValidity->m_cond >=5 )
465 val_max->setText(m_pView->doc()->locale()->formatDate(tmpValidity->dateMax,
true));
468 chooseType->setCurrentItem(5);
469 val_min->setText(m_pView->doc()->locale()->formatTime(tmpValidity->timeMin,
true));
470 if(tmpValidity->m_cond >=5 )
471 val_max->setText(m_pView->doc()->locale()->formatTime(tmpValidity->timeMax,
true));
475 chooseType->setCurrentItem(7);
476 TQStringList lst =tmpValidity->listValidity;
478 for ( TQStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
481 validityList->setText( tmp );
485 chooseType->setCurrentItem(0);
488 switch (tmpValidity->m_action)
491 chooseAction->setCurrentItem(0);
493 case Action::Warning:
494 chooseAction->setCurrentItem(1);
496 case Action::Information:
497 chooseAction->setCurrentItem(2);
500 chooseAction->setCurrentItem(0);
503 switch ( tmpValidity->m_cond )
505 case Conditional::Equal:
506 choose->setCurrentItem(0);
508 case Conditional::Superior:
509 choose->setCurrentItem(1);
511 case Conditional::Inferior:
512 choose->setCurrentItem(2);
514 case Conditional::SuperiorEqual:
515 choose->setCurrentItem(3);
517 case Conditional::InferiorEqual:
518 choose->setCurrentItem(4);
520 case Conditional::Between:
521 choose->setCurrentItem(5);
523 case Conditional::Different:
524 choose->setCurrentItem(6);
526 case Conditional::DifferentTo:
527 choose->setCurrentItem(7);
530 choose->setCurrentItem(0);
533 displayMessage->setChecked( tmpValidity->displayMessage );
534 allowEmptyCell->setChecked( tmpValidity->allowEmptyCell );
535 titleHelp->setText( tmpValidity->titleInfo );
536 messageHelp->setText( tmpValidity->messageInfo );
537 displayHelp->setChecked( tmpValidity->displayValidationInformation );
539 changeIndexType(chooseType->currentItem()) ;
540 changeIndexCond(choose->currentItem()) ;
543void DlgValidity::clearAllPressed()
545 val_min->setText(
"");
546 val_max->setText(
"");
547 message->setText(
"");
549 displayMessage->setChecked(
true );
550 allowEmptyCell->setChecked(
false );
551 choose->setCurrentItem(0);
552 chooseType->setCurrentItem(0);
553 chooseAction->setCurrentItem(0);
556 messageHelp->setText(
"" );
557 titleHelp->setText(
"" );
558 validityList->setText(
"" );
559 displayHelp->setChecked(
false );
562void DlgValidity::OkPressed()
564 if( chooseType->currentItem()==1)
567 val_min->text().toDouble(&ok);
570 KMessageBox::error(
this , i18n(
"This is not a valid value."),i18n(
"Error"));
571 val_min->setText(
"");
574 val_max->text().toDouble(&ok);
575 if(! ok && choose->currentItem() >=5 && choose->currentItem()< 7)
577 KMessageBox::error(
this , i18n(
"This is not a valid value."),i18n(
"Error"));
578 val_max->setText(
"");
582 else if( chooseType->currentItem()==2 || chooseType->currentItem()==6)
585 val_min->text().toInt(&ok);
588 KMessageBox::error(
this , i18n(
"This is not a valid value."),i18n(
"Error"));
589 val_min->setText(
"");
592 val_max->text().toInt(&ok);
593 if(! ok && choose->currentItem() >=5 && choose->currentItem()< 7)
595 KMessageBox::error(
this , i18n(
"This is not a valid value."),i18n(
"Error"));
596 val_max->setText(
"");
600 else if( chooseType->currentItem()==5)
602 if(! m_pView->doc()->locale()->readTime(val_min->text()).isValid())
604 KMessageBox::error(
this , i18n(
"This is not a valid time."),i18n(
"Error"));
605 val_min->setText(
"");
608 if(! m_pView->doc()->locale()->readTime(val_max->text()).isValid() && choose->currentItem() >=5)
610 KMessageBox::error(
this , i18n(
"This is not a valid time."),i18n(
"Error"));
611 val_max->setText(
"");
615 else if( chooseType->currentItem()==4)
617 if(! m_pView->doc()->locale()->readDate(val_min->text()).isValid())
619 KMessageBox::error(
this , i18n(
"This is not a valid date."),i18n(
"Error"));
620 val_min->setText(
"");
623 if(! m_pView->doc()->locale()->readDate(val_max->text()).isValid() && choose->currentItem() >=5 )
625 KMessageBox::error(
this , i18n(
"This is not a valid date."),i18n(
"Error"));
626 val_max->setText(
"");
630 else if ( chooseType->currentItem()==7 )
635 if( chooseType->currentItem()==0)
638 result.m_action=Action::Stop;
639 result.m_cond=Conditional::Equal;
640 result.message=message->text();
641 result.title=title->text();
644 result.timeMin=TQTime(0,0,0);
645 result.timeMax=TQTime(0,0,0);
646 result.dateMin=TQDate(0,0,0);
647 result.dateMax=TQDate(0,0,0);
651 switch( chooseType->currentItem())
681 switch (chooseAction->currentItem())
684 result.m_action=Action::Stop;
687 result.m_action=Action::Warning;
690 result.m_action=Action::Information;
695 switch ( choose->currentItem())
698 result.m_cond=Conditional::Equal;
701 result.m_cond=Conditional::Superior;
704 result.m_cond=Conditional::Inferior;
707 result.m_cond=Conditional::SuperiorEqual;
710 result.m_cond=Conditional::InferiorEqual;
713 result.m_cond=Conditional::Between;
716 result.m_cond=Conditional::Different;
719 result.m_cond=Conditional::DifferentTo;
724 result.message=message->text();
725 result.title=title->text();
728 result.timeMin=TQTime(0,0,0);
729 result.timeMax=TQTime(0,0,0);
730 result.dateMin=TQDate(0,0,0);
731 result.dateMax=TQDate(0,0,0);
733 if( chooseType->currentItem()==1)
735 if(choose->currentItem() <5)
737 result.valMin=val_min->text().toDouble();
741 result.valMin=TQMIN(val_min->text().toDouble(),val_max->text().toDouble());
742 result.valMax=TQMAX(val_max->text().toDouble(),val_min->text().toDouble());
745 else if( chooseType->currentItem()==2 || chooseType->currentItem()==6)
747 if(choose->currentItem() <5)
749 result.valMin=val_min->text().toInt();
753 result.valMin=TQMIN(val_min->text().toInt(),val_max->text().toInt());
754 result.valMax=TQMAX(val_max->text().toInt(),val_min->text().toInt());
757 else if( chooseType->currentItem()==4)
759 if(choose->currentItem() <5)
761 result.dateMin=m_pView->doc()->locale()->readDate(val_min->text());
765 if(m_pView->doc()->locale()->readDate(val_min->text())<m_pView->doc()->locale()->readDate(val_max->text()))
767 result.dateMin=m_pView->doc()->locale()->readDate(val_min->text());
768 result.dateMax=m_pView->doc()->locale()->readDate(val_max->text());
772 result.dateMin=m_pView->doc()->locale()->readDate(val_max->text());
773 result.dateMax=m_pView->doc()->locale()->readDate(val_min->text());
777 else if( chooseType->currentItem()==5)
779 if(choose->currentItem() <5)
781 result.timeMin=m_pView->doc()->locale()->readTime(val_min->text());
785 if(m_pView->doc()->locale()->readTime(val_min->text())<m_pView->doc()->locale()->readTime(val_max->text()))
787 result.timeMax=m_pView->doc()->locale()->readTime(val_max->text());
788 result.timeMin=m_pView->doc()->locale()->readTime(val_min->text());
792 result.timeMax=m_pView->doc()->locale()->readTime(val_min->text());
793 result.timeMin=m_pView->doc()->locale()->readTime(val_max->text());
797 else if ( chooseType->currentItem()==7 )
799 result.listValidity=TQStringList::split(
"\n", validityList->text() );
802 result.displayMessage = displayMessage->isChecked();
803 result.allowEmptyCell = allowEmptyCell->isChecked();
804 result.displayValidationInformation = displayHelp->isChecked();
805 result.messageInfo= messageHelp->text();
806 result.titleInfo = titleHelp->text();
808 m_pView->doc()->emitBeginOperation(
false );
809 m_pView->activeSheet()->setValidity( m_pView->selectionInfo(), result);
810 m_pView->slotUpdateView( m_pView->activeSheet() );
814#include "kspread_dlg_validity.moc"
For every cell in the spread sheet there is a Cell object.
The View class displays a KSpread document.
@ Number
Restrict to numbers.
@ Integer
Restrict to integers
@ TextLength
Restrict text length.