|
|
|
/* This file is part of the KDE project
|
|
|
|
Copyright (C) 2002-2003 Norbert Andres <nandres@web.de>
|
|
|
|
(C) 2002 John Dailey <dailey@vt.edu>
|
|
|
|
(C) 2001-2002 Philipp Mueller <philipp.mueller@gmx.de>
|
|
|
|
(C) 1999-2005 Laurent Montel <montel@kde.org>
|
|
|
|
(C) 1998-1999 Torben Weis <weis@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Library General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Library General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
|
|
* Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
#include "kspread_dlg_validity.h"
|
|
|
|
#include "kspread_canvas.h"
|
|
|
|
#include "kspread_doc.h"
|
|
|
|
#include "kspread_locale.h"
|
|
|
|
#include "kspread_sheet.h"
|
|
|
|
#include "kspread_view.h"
|
|
|
|
|
|
|
|
#include <layout.h>
|
|
|
|
#include <tqbuttongroup.h>
|
|
|
|
#include <knumvalidator.h>
|
|
|
|
#include <kdebug.h>
|
|
|
|
#include <kmessagebox.h>
|
|
|
|
|
|
|
|
#include <tqcombobox.h>
|
|
|
|
#include <tqlineedit.h>
|
|
|
|
#include <tqpushbutton.h>
|
|
|
|
#include <tqlabel.h>
|
|
|
|
#include <textedit.h>
|
|
|
|
#include <tqcheckbox.h>
|
|
|
|
|
|
|
|
using namespace KSpread;
|
|
|
|
|
|
|
|
DlgValidity::DlgValidity(View* parent,const char* name , const TQRect &_marker )
|
|
|
|
:KDialogBase(KDialogBase::Tabbed, i18n("Validity"),User2|User1|Cancel, User1, parent, name,true,false,KStdGuiItem::ok(),i18n("Clear &All"))
|
|
|
|
|
|
|
|
{
|
|
|
|
m_pView=parent;
|
|
|
|
marker=_marker;
|
|
|
|
TQFrame *page1 = addPage(i18n("&Values"));
|
|
|
|
TQVBoxLayout *lay1 = new TQVBoxLayout( page1, KDialogBase::marginHint(), KDialogBase::spacingHint() );
|
|
|
|
|
|
|
|
TQGroupBox* tmpTQButtonGroup;
|
|
|
|
tmpTQButtonGroup = new TQGroupBox( 0, Qt::Vertical, i18n("Validity Criteria"), page1, "ButtonGroup_1" );
|
|
|
|
tmpTQButtonGroup->layout()->setSpacing(KDialog::spacingHint());
|
|
|
|
tmpTQButtonGroup->layout()->setMargin(KDialog::marginHint());
|
|
|
|
TQGridLayout *grid1 = new TQGridLayout(tmpTQButtonGroup->layout(),4,2);
|
|
|
|
|
|
|
|
TQLabel *tmpTQLabel = new TQLabel( tmpTQButtonGroup, "Label_1" );
|
|
|
|
tmpTQLabel->setText(i18n("Allow:" ));
|
|
|
|
grid1->addWidget(tmpTQLabel,0,0);
|
|
|
|
|
|
|
|
chooseType=new TQComboBox(tmpTQButtonGroup);
|
|
|
|
grid1->addWidget(chooseType,0,1);
|
|
|
|
TQStringList listType;
|
|
|
|
listType+=i18n("All");
|
|
|
|
listType+=i18n("Number");
|
|
|
|
listType+=i18n("Integer");
|
|
|
|
listType+=i18n("Text");
|
|
|
|
listType+=i18n("Date");
|
|
|
|
listType+=i18n("Time");
|
|
|
|
listType+=i18n("Text Length");
|
|
|
|
listType+=i18n("List");
|
|
|
|
chooseType->insertStringList(listType);
|
|
|
|
chooseType->setCurrentItem(0);
|
|
|
|
|
|
|
|
allowEmptyCell = new TQCheckBox( i18n( "Allow blanks" ), tmpTQButtonGroup );
|
|
|
|
grid1->addWidget(allowEmptyCell,1,0);
|
|
|
|
|
|
|
|
tmpTQLabel = new TQLabel( tmpTQButtonGroup, "Label_2" );
|
|
|
|
tmpTQLabel->setText(i18n("Data:" ));
|
|
|
|
grid1->addWidget(tmpTQLabel,2,0);
|
|
|
|
|
|
|
|
choose=new TQComboBox(tmpTQButtonGroup);
|
|
|
|
grid1->addWidget(choose,2,1);
|
|
|
|
TQStringList list;
|
|
|
|
list+=i18n("equal to");
|
|
|
|
list+=i18n("greater than");
|
|
|
|
list+=i18n("less than");
|
|
|
|
list+=i18n("equal to or greater than");
|
|
|
|
list+=i18n("equal to or less than");
|
|
|
|
list+=i18n("between");
|
|
|
|
list+=i18n("different from");
|
|
|
|
list+=i18n("different to");
|
|
|
|
choose->insertStringList(list);
|
|
|
|
choose->setCurrentItem(0);
|
|
|
|
|
|
|
|
edit1 = new TQLabel( tmpTQButtonGroup, "Label_3" );
|
|
|
|
edit1->setText(i18n("Minimum:" ));
|
|
|
|
grid1->addWidget(edit1,3,0);
|
|
|
|
|
|
|
|
val_min=new TQLineEdit(tmpTQButtonGroup);
|
|
|
|
grid1->addWidget(val_min,3,1);
|
|
|
|
val_min->setValidator( new KFloatValidator( val_min ) );
|
|
|
|
|
|
|
|
edit2 = new TQLabel( tmpTQButtonGroup, "Label_4" );
|
|
|
|
edit2->setText(i18n("Maximum:" ));
|
|
|
|
grid1->addWidget(edit2,4,0);
|
|
|
|
|
|
|
|
val_max=new TQLineEdit(tmpTQButtonGroup);
|
|
|
|
grid1->addWidget(val_max,4,1);
|
|
|
|
val_max->setValidator( new KFloatValidator( val_max ) );
|
|
|
|
lay1->addWidget(tmpTQButtonGroup);
|
|
|
|
|
|
|
|
//Apply minimum width of column1 to avoid horizontal move when changing option
|
|
|
|
//A bit ugly to apply text always, but I couldn't get a label->TQFontMetrix.boundingRect("text").width()
|
|
|
|
//to give mew the correct results - Philipp
|
|
|
|
edit2->setText( i18n( "Date:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
edit2->setText( i18n( "Date minimum:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
edit2->setText( i18n( "Date maximum:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
edit2->setText( i18n( "Time:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
edit2->setText( i18n( "Time minimum:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
edit2->setText( i18n( "Time maximum:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
edit2->setText( i18n( "Minimum:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
edit2->setText( i18n( "Maximum:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
edit2->setText( i18n( "Number:" ) );
|
|
|
|
grid1->addColSpacing( 0, edit2->width() );
|
|
|
|
|
|
|
|
validityList = new TQTextEdit( tmpTQButtonGroup );
|
|
|
|
grid1->addMultiCellWidget(validityList,2, 4,1, 1);
|
|
|
|
|
|
|
|
validityLabelList = new TQLabel( tmpTQButtonGroup, "Label_Label_List" );
|
|
|
|
validityLabelList->setText(i18n("Entries:" ));
|
|
|
|
grid1->addWidget(validityLabelList,2,0);
|
|
|
|
|
|
|
|
TQFrame *page2 = addPage(i18n("&Error Alert"));
|
|
|
|
|
|
|
|
lay1 = new TQVBoxLayout( page2, KDialogBase::marginHint(), KDialogBase::spacingHint() );
|
|
|
|
|
|
|
|
tmpTQButtonGroup = new TQButtonGroup( 0, Qt::Vertical, i18n("Contents"), page2, "ButtonGroup_2" );
|
|
|
|
tmpTQButtonGroup->layout()->setSpacing(KDialog::spacingHint());
|
|
|
|
tmpTQButtonGroup->layout()->setMargin(KDialog::marginHint());
|
|
|
|
TQGridLayout *grid2 = new TQGridLayout(tmpTQButtonGroup->layout(),5,2);
|
|
|
|
|
|
|
|
displayMessage = new TQCheckBox(i18n( "Show error message when invalid values are entered" ),tmpTQButtonGroup );
|
|
|
|
displayMessage->setChecked( true );
|
|
|
|
grid2->addMultiCellWidget(displayMessage,0, 0,0, 1);
|
|
|
|
|
|
|
|
tmpTQLabel = new TQLabel( tmpTQButtonGroup, "Label_5" );
|
|
|
|
tmpTQLabel->setText(i18n("Action:" ));
|
|
|
|
grid2->addWidget(tmpTQLabel,1,0);
|
|
|
|
|
|
|
|
chooseAction=new TQComboBox(tmpTQButtonGroup);
|
|
|
|
grid2->addWidget(chooseAction,1,1);
|
|
|
|
TQStringList list2;
|
|
|
|
list2+=i18n("Stop");
|
|
|
|
list2+=i18n("Warning");
|
|
|
|
list2+=i18n("Information");
|
|
|
|
chooseAction->insertStringList(list2);
|
|
|
|
chooseAction->setCurrentItem(0);
|
|
|
|
tmpTQLabel = new TQLabel( tmpTQButtonGroup, "Label_6" );
|
|
|
|
tmpTQLabel->setText(i18n("Title:" ));
|
|
|
|
grid2->addWidget(tmpTQLabel,2,0);
|
|
|
|
|
|
|
|
title=new TQLineEdit( tmpTQButtonGroup);
|
|
|
|
grid2->addWidget(title,2,1);
|
|
|
|
|
|
|
|
tmpTQLabel = new TQLabel( tmpTQButtonGroup, "Label_7" );
|
|
|
|
tmpTQLabel->setText(i18n("Message:" ));
|
|
|
|
grid2->addWidget(tmpTQLabel,3,0);
|
|
|
|
|
|
|
|
message =new TQTextEdit( tmpTQButtonGroup);
|
|
|
|
grid2->addMultiCellWidget(message,3, 4,1, 1);
|
|
|
|
lay1->addWidget(tmpTQButtonGroup);
|
|
|
|
message->setTextFormat( TQt::PlainText );
|
|
|
|
|
|
|
|
TQFrame *page3 = addPage(i18n("Input Help"));
|
|
|
|
lay1 = new TQVBoxLayout( page3, KDialogBase::marginHint(), KDialogBase::spacingHint() );
|
|
|
|
|
|
|
|
tmpTQButtonGroup = new TQButtonGroup( 0, Qt::Vertical, i18n("Contents"), page3, "ButtonGroup_2" );
|
|
|
|
tmpTQButtonGroup->layout()->setSpacing(KDialog::spacingHint());
|
|
|
|
tmpTQButtonGroup->layout()->setMargin(KDialog::marginHint());
|
|
|
|
|
|
|
|
TQGridLayout *grid3 = new TQGridLayout(tmpTQButtonGroup->layout(),5,2);
|
|
|
|
|
|
|
|
displayHelp = new TQCheckBox(i18n( "Show input help when cell is selected" ),tmpTQButtonGroup );
|
|
|
|
displayMessage->setChecked( false );
|
|
|
|
grid3->addMultiCellWidget(displayHelp,0, 0,0, 1);
|
|
|
|
|
|
|
|
tmpTQLabel = new TQLabel( tmpTQButtonGroup, "Label_6" );
|
|
|
|
tmpTQLabel->setText(i18n("Title:" ));
|
|
|
|
grid3->addWidget(tmpTQLabel,2,0);
|
|
|
|
|
|
|
|
titleHelp=new TQLineEdit( tmpTQButtonGroup);
|
|
|
|
grid3->addWidget(titleHelp,2,1);
|
|
|
|
|
|
|
|
tmpTQLabel = new TQLabel( tmpTQButtonGroup, "Label_7" );
|
|
|
|
tmpTQLabel->setText(i18n("Message:" ));
|
|
|
|
grid3->addWidget(tmpTQLabel,3,0);
|
|
|
|
|
|
|
|
messageHelp =new TQTextEdit( tmpTQButtonGroup);
|
|
|
|
grid3->addMultiCellWidget(messageHelp,3, 4,1, 1);
|
|
|
|
lay1->addWidget(tmpTQButtonGroup);
|
|
|
|
messageHelp->setTextFormat( TQt::PlainText );
|
|
|
|
|
|
|
|
|
|
|
|
connect(choose,TQT_SIGNAL(activated(int )),this,TQT_SLOT(changeIndexCond(int)));
|
|
|
|
connect(chooseType,TQT_SIGNAL(activated(int )),this,TQT_SLOT(changeIndexType(int)));
|
|
|
|
connect( this, TQT_SIGNAL(user1Clicked()), TQT_SLOT(OkPressed()) );
|
|
|
|
connect( this, TQT_SIGNAL(user2Clicked()), TQT_SLOT(clearAllPressed()) );
|
|
|
|
init();
|
|
|
|
}
|
|
|
|
|
|
|
|
void DlgValidity::displayOrNotListOfValidity( bool _displayList)
|
|
|
|
{
|
|
|
|
if ( _displayList )
|
|
|
|
{
|
|
|
|
validityList->show();
|
|
|
|
validityLabelList->show();
|
|
|
|
edit1->hide();
|
|
|
|
val_min->hide();
|
|
|
|
edit2->hide();
|
|
|
|
val_max->hide();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
validityList->hide();
|
|
|
|
validityLabelList->hide();
|
|
|
|
edit1->show();
|
|
|
|
val_min->show();
|
|
|
|
edit2->show();
|
|
|
|
val_max->show();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DlgValidity::changeIndexType(int _index)
|
|
|
|
{
|
|
|
|
bool activate = ( _index!=0 );
|
|
|
|
message->setEnabled(activate);
|
|
|
|
title->setEnabled(activate);
|
|
|
|
chooseAction->setEnabled( activate );
|
|
|
|
displayHelp->setEnabled(activate);
|
|
|
|
messageHelp->setEnabled(activate);
|
|
|
|
titleHelp->setEnabled(activate);
|
|
|
|
if ( _index == 7 )
|
|
|
|
displayOrNotListOfValidity( true );
|
|
|
|
else
|
|
|
|
displayOrNotListOfValidity( false );
|
|
|
|
|
|
|
|
switch(_index)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
edit1->setText("");
|
|
|
|
edit2->setText("");
|
|
|
|
val_max->setEnabled(false);
|
|
|
|
val_min->setEnabled(false);
|
|
|
|
edit1->setEnabled(false);
|
|
|
|
edit2->setEnabled(false);
|
|
|
|
choose->setEnabled(false);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
val_min->setEnabled(true);
|
|
|
|
edit1->setEnabled(true);
|
|
|
|
choose->setEnabled(true);
|
|
|
|
val_min->setValidator( new KFloatValidator( val_min ) );
|
|
|
|
val_max->setValidator( new KFloatValidator( val_max ) );
|
|
|
|
if( choose->currentItem()<=4)
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Number:"));
|
|
|
|
edit2->setText("");
|
|
|
|
edit2->setEnabled(false);
|
|
|
|
val_max->setEnabled(false);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Minimum:" ));
|
|
|
|
edit2->setText(i18n("Maximum:" ));
|
|
|
|
edit2->setEnabled(true);
|
|
|
|
val_max->setEnabled(true);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
case 6:
|
|
|
|
val_min->setEnabled(true);
|
|
|
|
edit1->setEnabled(true);
|
|
|
|
choose->setEnabled(true);
|
|
|
|
val_min->setValidator( new KIntValidator( val_min ) );
|
|
|
|
val_max->setValidator( new KIntValidator( val_max ) );
|
|
|
|
if( choose->currentItem()<=4)
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Number:"));
|
|
|
|
edit2->setText("");
|
|
|
|
edit2->setEnabled(false);
|
|
|
|
val_max->setEnabled(false);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Minimum:" ));
|
|
|
|
edit2->setText(i18n("Maximum:" ));
|
|
|
|
edit2->setEnabled(true);
|
|
|
|
val_max->setEnabled(true);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
edit1->setText("");
|
|
|
|
edit2->setText("");
|
|
|
|
val_max->setEnabled(false);
|
|
|
|
val_min->setEnabled(false);
|
|
|
|
choose->setEnabled(false);
|
|
|
|
edit1->setEnabled(false);
|
|
|
|
edit2->setEnabled(false);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
edit1->setText(i18n("Date:"));
|
|
|
|
edit2->setText("");
|
|
|
|
val_min->setEnabled(true);
|
|
|
|
edit1->setEnabled(true);
|
|
|
|
choose->setEnabled(true);
|
|
|
|
|
|
|
|
val_min->clearValidator();
|
|
|
|
val_max->clearValidator();
|
|
|
|
if( choose->currentItem()<=4)
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Date:"));
|
|
|
|
edit2->setText("");
|
|
|
|
edit2->setEnabled(false);
|
|
|
|
val_max->setEnabled(false);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Date minimum:"));
|
|
|
|
edit2->setText(i18n("Date maximum:"));
|
|
|
|
edit2->setEnabled(true);
|
|
|
|
val_max->setEnabled(true);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
val_min->setEnabled(true);
|
|
|
|
edit1->setEnabled(true);
|
|
|
|
choose->setEnabled(true);
|
|
|
|
val_min->clearValidator();
|
|
|
|
val_max->clearValidator();
|
|
|
|
if( choose->currentItem()<=4)
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Time:"));
|
|
|
|
edit2->setText("");
|
|
|
|
edit2->setEnabled(false);
|
|
|
|
val_max->setEnabled(false);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Time minimum:"));
|
|
|
|
edit2->setText(i18n("Time maximum:"));
|
|
|
|
edit2->setEnabled(true);
|
|
|
|
val_max->setEnabled(true);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if ( width() < sizeHint().width() )
|
|
|
|
resize( sizeHint() );
|
|
|
|
}
|
|
|
|
|
|
|
|
void DlgValidity::changeIndexCond(int _index)
|
|
|
|
{
|
|
|
|
switch(_index)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
case 1:
|
|
|
|
case 2:
|
|
|
|
case 3:
|
|
|
|
case 4:
|
|
|
|
val_max->setEnabled(false);
|
|
|
|
if(chooseType->currentItem()==1 ||chooseType->currentItem()==2
|
|
|
|
||chooseType->currentItem()==6)
|
|
|
|
edit1->setText(i18n("Number:"));
|
|
|
|
else if( chooseType->currentItem()==3)
|
|
|
|
edit1->setText("");
|
|
|
|
else if( chooseType->currentItem()==4)
|
|
|
|
edit1->setText(i18n("Date:"));
|
|
|
|
else if( chooseType->currentItem()==5)
|
|
|
|
edit1->setText(i18n("Time:"));
|
|
|
|
edit2->setText("");
|
|
|
|
edit2->setEnabled(false);
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
case 6:
|
|
|
|
val_max->setEnabled(true);
|
|
|
|
edit2->setEnabled(true);
|
|
|
|
edit1->setEnabled(true);
|
|
|
|
if(chooseType->currentItem()==1 || chooseType->currentItem()==2
|
|
|
|
|| chooseType->currentItem()==6)
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Minimum:" ));
|
|
|
|
edit2->setText(i18n("Maximum:" ));
|
|
|
|
}
|
|
|
|
else if(chooseType->currentItem()==3)
|
|
|
|
{
|
|
|
|
edit1->setText("");
|
|
|
|
edit2->setText("");
|
|
|
|
}
|
|
|
|
else if(chooseType->currentItem()==4)
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Date minimum:"));
|
|
|
|
edit2->setText(i18n("Date maximum:"));
|
|
|
|
}
|
|
|
|
else if(chooseType->currentItem()==5)
|
|
|
|
{
|
|
|
|
edit1->setText(i18n("Time minimum:"));
|
|
|
|
edit2->setText(i18n("Time maximum:"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DlgValidity::init()
|
|
|
|
{
|
|
|
|
Cell *c = m_pView->activeSheet()->cellAt( marker.left(), marker.top() );
|
|
|
|
Validity * tmpValidity=c->getValidity(0);
|
|
|
|
if(tmpValidity!=0)
|
|
|
|
{
|
|
|
|
message->setText(tmpValidity->message);
|
|
|
|
title->setText(tmpValidity->title);
|
|
|
|
TQString tmp;
|
|
|
|
switch( tmpValidity->m_restriction)
|
|
|
|
{
|
|
|
|
case Restriction::None:
|
|
|
|
chooseType->setCurrentItem(0);
|
|
|
|
break;
|
|
|
|
case Restriction::Number:
|
|
|
|
chooseType->setCurrentItem(1);
|
|
|
|
if(tmpValidity->m_cond >=5 )
|
|
|
|
val_max->setText(tmp.setNum(tmpValidity->valMax));
|
|
|
|
val_min->setText(tmp.setNum(tmpValidity->valMin));
|
|
|
|
break;
|
|
|
|
case Restriction::Integer:
|
|
|
|
chooseType->setCurrentItem(2);
|
|
|
|
if(tmpValidity->m_cond >=5 )
|
|
|
|
val_max->setText(tmp.setNum(tmpValidity->valMax));
|
|
|
|
val_min->setText(tmp.setNum(tmpValidity->valMin));
|
|
|
|
break;
|
|
|
|
case Restriction::TextLength:
|
|
|
|
chooseType->setCurrentItem(6);
|
|
|
|
if(tmpValidity->m_cond >=5 )
|
|
|
|
val_max->setText(tmp.setNum(tmpValidity->valMax));
|
|
|
|
val_min->setText(tmp.setNum(tmpValidity->valMin));
|
|
|
|
break;
|
|
|
|
case Restriction::Text:
|
|
|
|
chooseType->setCurrentItem(3);
|
|
|
|
break;
|
|
|
|
case Restriction::Date:
|
|
|
|
chooseType->setCurrentItem(4);
|
|
|
|
val_min->setText(m_pView->doc()->locale()->formatDate(tmpValidity->dateMin,true));
|
|
|
|
if(tmpValidity->m_cond >=5 )
|
|
|
|
val_max->setText(m_pView->doc()->locale()->formatDate(tmpValidity->dateMax,true));
|
|
|
|
break;
|
|
|
|
case Restriction::Time:
|
|
|
|
chooseType->setCurrentItem(5);
|
|
|
|
val_min->setText(m_pView->doc()->locale()->formatTime(tmpValidity->timeMin,true));
|
|
|
|
if(tmpValidity->m_cond >=5 )
|
|
|
|
val_max->setText(m_pView->doc()->locale()->formatTime(tmpValidity->timeMax,true));
|
|
|
|
break;
|
|
|
|
case Restriction::List:
|
|
|
|
{
|
|
|
|
chooseType->setCurrentItem(7);
|
|
|
|
TQStringList lst =tmpValidity->listValidity;
|
|
|
|
TQString tmp;
|
|
|
|
for ( TQStringList::Iterator it = lst.begin(); it != lst.end(); ++it ) {
|
|
|
|
tmp +=( *it )+"\n";
|
|
|
|
}
|
|
|
|
validityList->setText( tmp );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default :
|
|
|
|
chooseType->setCurrentItem(0);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
switch (tmpValidity->m_action)
|
|
|
|
{
|
|
|
|
case Action::Stop:
|
|
|
|
chooseAction->setCurrentItem(0);
|
|
|
|
break;
|
|
|
|
case Action::Warning:
|
|
|
|
chooseAction->setCurrentItem(1);
|
|
|
|
break;
|
|
|
|
case Action::Information:
|
|
|
|
chooseAction->setCurrentItem(2);
|
|
|
|
break;
|
|
|
|
default :
|
|
|
|
chooseAction->setCurrentItem(0);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
switch ( tmpValidity->m_cond )
|
|
|
|
{
|
|
|
|
case Conditional::Equal:
|
|
|
|
choose->setCurrentItem(0);
|
|
|
|
break;
|
|
|
|
case Conditional::Superior:
|
|
|
|
choose->setCurrentItem(1);
|
|
|
|
break;
|
|
|
|
case Conditional::Inferior:
|
|
|
|
choose->setCurrentItem(2);
|
|
|
|
break;
|
|
|
|
case Conditional::SuperiorEqual:
|
|
|
|
choose->setCurrentItem(3);
|
|
|
|
break;
|
|
|
|
case Conditional::InferiorEqual:
|
|
|
|
choose->setCurrentItem(4);
|
|
|
|
break;
|
|
|
|
case Conditional::Between:
|
|
|
|
choose->setCurrentItem(5);
|
|
|
|
break;
|
|
|
|
case Conditional::Different:
|
|
|
|
choose->setCurrentItem(6);
|
|
|
|
break;
|
|
|
|
case Conditional::DifferentTo:
|
|
|
|
choose->setCurrentItem(7);
|
|
|
|
break;
|
|
|
|
default :
|
|
|
|
choose->setCurrentItem(0);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
displayMessage->setChecked( tmpValidity->displayMessage );
|
|
|
|
allowEmptyCell->setChecked( tmpValidity->allowEmptyCell );
|
|
|
|
titleHelp->setText( tmpValidity->titleInfo );
|
|
|
|
messageHelp->setText( tmpValidity->messageInfo );
|
|
|
|
displayHelp->setChecked( tmpValidity->displayValidationInformation );
|
|
|
|
}
|
|
|
|
changeIndexType(chooseType->currentItem()) ;
|
|
|
|
changeIndexCond(choose->currentItem()) ;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DlgValidity::clearAllPressed()
|
|
|
|
{
|
|
|
|
val_min->setText("");
|
|
|
|
val_max->setText("");
|
|
|
|
message->setText("");
|
|
|
|
title->setText("");
|
|
|
|
displayMessage->setChecked( true );
|
|
|
|
allowEmptyCell->setChecked( false );
|
|
|
|
choose->setCurrentItem(0);
|
|
|
|
chooseType->setCurrentItem(0);
|
|
|
|
chooseAction->setCurrentItem(0);
|
|
|
|
changeIndexType(0);
|
|
|
|
changeIndexCond(0);
|
|
|
|
messageHelp->setText("" );
|
|
|
|
titleHelp->setText( "" );
|
|
|
|
validityList->setText( "" );
|
|
|
|
displayHelp->setChecked( false );
|
|
|
|
}
|
|
|
|
|
|
|
|
void DlgValidity::OkPressed()
|
|
|
|
{
|
|
|
|
if( chooseType->currentItem()==1)
|
|
|
|
{
|
|
|
|
bool ok;
|
|
|
|
val_min->text().toDouble(&ok);
|
|
|
|
if(! ok)
|
|
|
|
{
|
|
|
|
KMessageBox::error( this , i18n("This is not a valid value."),i18n("Error"));
|
|
|
|
val_min->setText("");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
val_max->text().toDouble(&ok);
|
|
|
|
if(! ok && choose->currentItem() >=5 && choose->currentItem()< 7)
|
|
|
|
{
|
|
|
|
KMessageBox::error( this , i18n("This is not a valid value."),i18n("Error"));
|
|
|
|
val_max->setText("");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( chooseType->currentItem()==2 || chooseType->currentItem()==6)
|
|
|
|
{
|
|
|
|
bool ok;
|
|
|
|
val_min->text().toInt(&ok);
|
|
|
|
if(! ok)
|
|
|
|
{
|
|
|
|
KMessageBox::error( this , i18n("This is not a valid value."),i18n("Error"));
|
|
|
|
val_min->setText("");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
val_max->text().toInt(&ok);
|
|
|
|
if(! ok && choose->currentItem() >=5 && choose->currentItem()< 7)
|
|
|
|
{
|
|
|
|
KMessageBox::error( this , i18n("This is not a valid value."),i18n("Error"));
|
|
|
|
val_max->setText("");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( chooseType->currentItem()==5)
|
|
|
|
{
|
|
|
|
if(! m_pView->doc()->locale()->readTime(val_min->text()).isValid())
|
|
|
|
{
|
|
|
|
KMessageBox::error( this , i18n("This is not a valid time."),i18n("Error"));
|
|
|
|
val_min->setText("");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if(! m_pView->doc()->locale()->readTime(val_max->text()).isValid() && choose->currentItem() >=5)
|
|
|
|
{
|
|
|
|
KMessageBox::error( this , i18n("This is not a valid time."),i18n("Error"));
|
|
|
|
val_max->setText("");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( chooseType->currentItem()==4)
|
|
|
|
{
|
|
|
|
if(! m_pView->doc()->locale()->readDate(val_min->text()).isValid())
|
|
|
|
{
|
|
|
|
KMessageBox::error( this , i18n("This is not a valid date."),i18n("Error"));
|
|
|
|
val_min->setText("");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if(! m_pView->doc()->locale()->readDate(val_max->text()).isValid() && choose->currentItem() >=5 )
|
|
|
|
{
|
|
|
|
KMessageBox::error( this , i18n("This is not a valid date."),i18n("Error"));
|
|
|
|
val_max->setText("");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ( chooseType->currentItem()==7 )
|
|
|
|
{
|
|
|
|
//Nothing
|
|
|
|
}
|
|
|
|
|
|
|
|
if( chooseType->currentItem()==0)
|
|
|
|
{//no validity
|
|
|
|
result.m_restriction=Restriction::None;
|
|
|
|
result.m_action=Action::Stop;
|
|
|
|
result.m_cond=Conditional::Equal;
|
|
|
|
result.message=message->text();
|
|
|
|
result.title=title->text();
|
|
|
|
result.valMin=0;
|
|
|
|
result.valMax=0;
|
|
|
|
result.timeMin=TQTime(0,0,0);
|
|
|
|
result.timeMax=TQTime(0,0,0);
|
|
|
|
result.dateMin=TQDate(0,0,0);
|
|
|
|
result.dateMax=TQDate(0,0,0);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
switch( chooseType->currentItem())
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
result.m_restriction=Restriction::None;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
result.m_restriction=Restriction::Number;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
result.m_restriction=Restriction::Integer;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
result.m_restriction=Restriction::Text;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
result.m_restriction=Restriction::Date;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
result.m_restriction=Restriction::Time;
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
result.m_restriction=Restriction::TextLength;
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
result.m_restriction=Restriction::List;
|
|
|
|
break;
|
|
|
|
|
|
|
|
default :
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
switch (chooseAction->currentItem())
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
result.m_action=Action::Stop;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
result.m_action=Action::Warning;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
result.m_action=Action::Information;
|
|
|
|
break;
|
|
|
|
default :
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
switch ( choose->currentItem())
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
result.m_cond=Conditional::Equal;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
result.m_cond=Conditional::Superior;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
result.m_cond=Conditional::Inferior;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
result.m_cond=Conditional::SuperiorEqual;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
result.m_cond=Conditional::InferiorEqual;
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
result.m_cond=Conditional::Between;
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
result.m_cond=Conditional::Different;
|
|
|
|
break;
|
|
|
|
case 7:
|
|
|
|
result.m_cond=Conditional::DifferentTo;
|
|
|
|
break;
|
|
|
|
default :
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
result.message=message->text();
|
|
|
|
result.title=title->text();
|
|
|
|
result.valMin=0;
|
|
|
|
result.valMax=0;
|
|
|
|
result.timeMin=TQTime(0,0,0);
|
|
|
|
result.timeMax=TQTime(0,0,0);
|
|
|
|
result.dateMin=TQDate(0,0,0);
|
|
|
|
result.dateMax=TQDate(0,0,0);
|
|
|
|
|
|
|
|
if( chooseType->currentItem()==1)
|
|
|
|
{
|
|
|
|
if(choose->currentItem() <5)
|
|
|
|
{
|
|
|
|
result.valMin=val_min->text().toDouble();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result.valMin=TQMIN(val_min->text().toDouble(),val_max->text().toDouble());
|
|
|
|
result.valMax=TQMAX(val_max->text().toDouble(),val_min->text().toDouble());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( chooseType->currentItem()==2 || chooseType->currentItem()==6)
|
|
|
|
{
|
|
|
|
if(choose->currentItem() <5)
|
|
|
|
{
|
|
|
|
result.valMin=val_min->text().toInt();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result.valMin=TQMIN(val_min->text().toInt(),val_max->text().toInt());
|
|
|
|
result.valMax=TQMAX(val_max->text().toInt(),val_min->text().toInt());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( chooseType->currentItem()==4)
|
|
|
|
{
|
|
|
|
if(choose->currentItem() <5)
|
|
|
|
{
|
|
|
|
result.dateMin=m_pView->doc()->locale()->readDate(val_min->text());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if(m_pView->doc()->locale()->readDate(val_min->text())<m_pView->doc()->locale()->readDate(val_max->text()))
|
|
|
|
{
|
|
|
|
result.dateMin=m_pView->doc()->locale()->readDate(val_min->text());
|
|
|
|
result.dateMax=m_pView->doc()->locale()->readDate(val_max->text());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result.dateMin=m_pView->doc()->locale()->readDate(val_max->text());
|
|
|
|
result.dateMax=m_pView->doc()->locale()->readDate(val_min->text());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if( chooseType->currentItem()==5)
|
|
|
|
{
|
|
|
|
if(choose->currentItem() <5)
|
|
|
|
{
|
|
|
|
result.timeMin=m_pView->doc()->locale()->readTime(val_min->text());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if(m_pView->doc()->locale()->readTime(val_min->text())<m_pView->doc()->locale()->readTime(val_max->text()))
|
|
|
|
{
|
|
|
|
result.timeMax=m_pView->doc()->locale()->readTime(val_max->text());
|
|
|
|
result.timeMin=m_pView->doc()->locale()->readTime(val_min->text());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
result.timeMax=m_pView->doc()->locale()->readTime(val_min->text());
|
|
|
|
result.timeMin=m_pView->doc()->locale()->readTime(val_max->text());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ( chooseType->currentItem()==7 )
|
|
|
|
{
|
|
|
|
result.listValidity=TQStringList::split( "\n", validityList->text() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
result.displayMessage = displayMessage->isChecked();
|
|
|
|
result.allowEmptyCell = allowEmptyCell->isChecked();
|
|
|
|
result.displayValidationInformation = displayHelp->isChecked();
|
|
|
|
result.messageInfo= messageHelp->text();
|
|
|
|
result.titleInfo = titleHelp->text();
|
|
|
|
|
|
|
|
m_pView->doc()->emitBeginOperation( false );
|
|
|
|
m_pView->activeSheet()->setValidity( m_pView->selectionInfo(), result);
|
|
|
|
m_pView->slotUpdateView( m_pView->activeSheet() );
|
|
|
|
accept();
|
|
|
|
}
|
|
|
|
|
|
|
|
#include "kspread_dlg_validity.moc"
|