00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <qlayout.h>
00021 #include <qlabel.h>
00022 #include <qvalidator.h>
00023 #include <qwhatsthis.h>
00024
00025 #include <klineedit.h>
00026 #include <knuminput.h>
00027 #include <kcombobox.h>
00028 #include <klistbox.h>
00029 #include <ktextedit.h>
00030
00031 #include "kinputdialog.h"
00032
00033 class KInputDialogPrivate
00034 {
00035 public:
00036 KInputDialogPrivate();
00037
00038 QLabel *m_label;
00039 KLineEdit *m_lineEdit;
00040 KIntSpinBox *m_intSpinBox;
00041 KDoubleSpinBox *m_doubleSpinBox;
00042 KComboBox *m_comboBox;
00043 KListBox *m_listBox;
00044 KTextEdit *m_textEdit;
00045 };
00046
00047 KInputDialogPrivate::KInputDialogPrivate()
00048 : m_label( 0L ), m_lineEdit( 0L ), m_intSpinBox( 0L ),
00049 m_doubleSpinBox( 0L ), m_comboBox( 0L )
00050 {
00051 }
00052
00053 KInputDialog::KInputDialog( const QString &caption, const QString &label,
00054 const QString &value, QWidget *parent, const char *name,
00055 QValidator *validator, const QString &mask )
00056 : KDialogBase( parent, name, true, caption, Ok|Cancel|User1, Ok, true,
00057 KStdGuiItem::clear() ),
00058 d( new KInputDialogPrivate() )
00059 {
00060 QFrame *frame = makeMainWidget();
00061 QVBoxLayout *layout = new QVBoxLayout( frame, 0, spacingHint() );
00062
00063 d->m_label = new QLabel( label, frame );
00064 layout->addWidget( d->m_label );
00065
00066 d->m_lineEdit = new KLineEdit( value, frame );
00067 layout->addWidget( d->m_lineEdit );
00068
00069 d->m_lineEdit->setFocus();
00070 d->m_label->setBuddy( d->m_lineEdit );
00071
00072 layout->addStretch();
00073
00074 if ( validator )
00075 d->m_lineEdit->setValidator( validator );
00076
00077 if ( !mask.isEmpty() )
00078 d->m_lineEdit->setInputMask( mask );
00079
00080 connect( d->m_lineEdit, SIGNAL( textChanged( const QString & ) ),
00081 SLOT( slotEditTextChanged( const QString & ) ) );
00082 connect( this, SIGNAL( user1Clicked() ), d->m_lineEdit, SLOT( clear() ) );
00083
00084 slotEditTextChanged( value );
00085 setMinimumWidth( 350 );
00086 }
00087
00088 KInputDialog::KInputDialog( const QString &caption, const QString &label,
00089 const QString &value, QWidget *parent, const char *name )
00090 : KDialogBase( parent, name, true, caption, Ok|Cancel|User1, Ok, false,
00091 KStdGuiItem::clear() ),
00092 d( new KInputDialogPrivate() )
00093 {
00094 QFrame *frame = makeMainWidget();
00095 QVBoxLayout *layout = new QVBoxLayout( frame, 0, spacingHint() );
00096
00097 d->m_label = new QLabel( label, frame );
00098 layout->addWidget( d->m_label );
00099
00100 d->m_textEdit = new KTextEdit( frame );
00101 d->m_textEdit->setTextFormat( PlainText );
00102 d->m_textEdit->setText( value );
00103 layout->addWidget( d->m_textEdit, 10 );
00104
00105 d->m_textEdit->setFocus();
00106 d->m_label->setBuddy( d->m_textEdit );
00107
00108 connect( this, SIGNAL( user1Clicked() ), d->m_textEdit, SLOT( clear() ) );
00109
00110 setMinimumWidth( 400 );
00111 }
00112
00113 KInputDialog::KInputDialog( const QString &caption, const QString &label,
00114 int value, int minValue, int maxValue, int step, int base,
00115 QWidget *parent, const char *name )
00116 : KDialogBase( parent, name, true, caption, Ok|Cancel, Ok, true ),
00117 d( new KInputDialogPrivate() )
00118 {
00119 QFrame *frame = makeMainWidget();
00120 QVBoxLayout *layout = new QVBoxLayout( frame, 0, spacingHint() );
00121
00122 d->m_label = new QLabel( label, frame );
00123 layout->addWidget( d->m_label );
00124
00125 d->m_intSpinBox = new KIntSpinBox( minValue, maxValue, step, value,
00126 base, frame );
00127 layout->addWidget( d->m_intSpinBox );
00128
00129 layout->addStretch();
00130
00131 d->m_intSpinBox->setFocus();
00132 setMinimumWidth( 300 );
00133 }
00134
00135 KInputDialog::KInputDialog( const QString &caption, const QString &label,
00136 double value, double minValue, double maxValue, double step, int decimals,
00137 QWidget *parent, const char *name )
00138 : KDialogBase( parent, name, true, caption, Ok|Cancel, Ok, true ),
00139 d( new KInputDialogPrivate() )
00140 {
00141 QFrame *frame = makeMainWidget();
00142 QVBoxLayout *layout = new QVBoxLayout( frame, 0, spacingHint() );
00143
00144 d->m_label = new QLabel( label, frame );
00145 layout->addWidget( d->m_label );
00146
00147 d->m_doubleSpinBox = new KDoubleSpinBox( minValue, maxValue, step, value,
00148 decimals, frame );
00149 layout->addWidget( d->m_doubleSpinBox );
00150
00151 layout->addStretch();
00152
00153 d->m_doubleSpinBox->setFocus();
00154 setMinimumWidth( 300 );
00155 }
00156
00157 KInputDialog::KInputDialog( const QString &caption, const QString &label,
00158 const QStringList &list, int current, bool editable, QWidget *parent,
00159 const char *name )
00160 : KDialogBase( parent, name, true, caption, Ok|Cancel|User1, Ok, true,
00161 KStdGuiItem::clear() ),
00162 d( new KInputDialogPrivate() )
00163 {
00164 showButton( User1, editable );
00165
00166 QFrame *frame = makeMainWidget();
00167 QVBoxLayout *layout = new QVBoxLayout( frame, 0, spacingHint() );
00168
00169 d->m_label = new QLabel( label, frame );
00170 layout->addWidget( d->m_label );
00171
00172 if ( editable )
00173 {
00174 d->m_comboBox = new KComboBox( editable, frame );
00175 d->m_comboBox->insertStringList( list );
00176 d->m_comboBox->setCurrentItem( current );
00177 layout->addWidget( d->m_comboBox );
00178
00179 connect( d->m_comboBox, SIGNAL( textChanged( const QString & ) ),
00180 SLOT( slotUpdateButtons( const QString & ) ) );
00181 connect( this, SIGNAL( user1Clicked() ),
00182 d->m_comboBox, SLOT( clearEdit() ) );
00183 slotUpdateButtons( d->m_comboBox->currentText() );
00184 d->m_comboBox->setFocus();
00185 } else {
00186 d->m_listBox = new KListBox( frame );
00187 d->m_listBox->insertStringList( list );
00188 d->m_listBox->setSelected( current, true );
00189 d->m_listBox->ensureCurrentVisible();
00190 layout->addWidget( d->m_listBox, 10 );
00191 connect( d->m_listBox, SIGNAL( doubleClicked( QListBoxItem * ) ),
00192 SLOT( slotOk() ) );
00193 connect( d->m_listBox, SIGNAL( returnPressed( QListBoxItem * ) ),
00194 SLOT( slotOk() ) );
00195
00196 d->m_listBox->setFocus();
00197 }
00198
00199 layout->addStretch();
00200
00201 setMinimumWidth( 320 );
00202 }
00203
00204 KInputDialog::KInputDialog( const QString &caption, const QString &label,
00205 const QStringList &list, const QStringList &select, bool multiple,
00206 QWidget *parent, const char *name )
00207 : KDialogBase( parent, name, true, caption, Ok|Cancel, Ok, true ),
00208 d( new KInputDialogPrivate() )
00209 {
00210 QFrame *frame = makeMainWidget();
00211 QVBoxLayout *layout = new QVBoxLayout( frame, 0, spacingHint() );
00212
00213 d->m_label = new QLabel( label, frame );
00214 layout->addWidget( d->m_label );
00215
00216 d->m_listBox = new KListBox( frame );
00217 d->m_listBox->insertStringList( list );
00218 layout->addWidget( d->m_listBox );
00219
00220 QListBoxItem *item;
00221
00222 if ( multiple )
00223 {
00224 d->m_listBox->setSelectionMode( QListBox::Extended );
00225
00226 for ( QStringList::ConstIterator it=select.begin(); it!=select.end(); ++it )
00227 {
00228 item = d->m_listBox->findItem( *it, CaseSensitive|ExactMatch );
00229 if ( item )
00230 d->m_listBox->setSelected( item, true );
00231 }
00232 }
00233 else
00234 {
00235 connect( d->m_listBox, SIGNAL( doubleClicked( QListBoxItem * ) ),
00236 SLOT( slotOk() ) );
00237 connect( d->m_listBox, SIGNAL( returnPressed( QListBoxItem * ) ),
00238 SLOT( slotOk() ) );
00239
00240 QString text = select.first();
00241 item = d->m_listBox->findItem( text, CaseSensitive|ExactMatch );
00242 if ( item )
00243 d->m_listBox->setSelected( item, true );
00244 }
00245
00246 d->m_listBox->ensureCurrentVisible();
00247 d->m_listBox->setFocus();
00248
00249 layout->addStretch();
00250
00251 setMinimumWidth( 320 );
00252 }
00253
00254 KInputDialog::~KInputDialog()
00255 {
00256 delete d;
00257 }
00258
00259 QString KInputDialog::getText( const QString &caption, const QString &label,
00260 const QString &value, bool *ok, QWidget *parent, const char *name,
00261 QValidator *validator, const QString &mask )
00262 {
00263 return text( caption, label, value, ok, parent, name, validator, mask,
00264 QString::null );
00265 }
00266
00267 QString KInputDialog::text( const QString &caption,
00268 const QString &label, const QString &value, bool *ok, QWidget *parent,
00269 const char *name, QValidator *validator, const QString &mask,
00270 const QString &whatsThis )
00271 {
00272 KInputDialog dlg( caption, label, value, parent, name, validator, mask );
00273
00274 if( !whatsThis.isEmpty() )
00275 QWhatsThis::add( dlg.lineEdit(), whatsThis );
00276
00277 bool _ok = ( dlg.exec() == Accepted );
00278
00279 if ( ok )
00280 *ok = _ok;
00281
00282 QString result;
00283 if ( _ok )
00284 result = dlg.lineEdit()->text();
00285
00286
00287 if ( !validator )
00288 result = result.stripWhiteSpace();
00289
00290 return result;
00291 }
00292
00293 QString KInputDialog::getMultiLineText( const QString &caption,
00294 const QString &label, const QString &value, bool *ok,
00295 QWidget *parent, const char *name )
00296 {
00297 KInputDialog dlg( caption, label, value, parent, name );
00298
00299 bool _ok = ( dlg.exec() == Accepted );
00300
00301 if ( ok )
00302 *ok = _ok;
00303
00304 QString result;
00305 if ( _ok )
00306 result = dlg.textEdit()->text();
00307
00308 return result;
00309 }
00310
00311 int KInputDialog::getInteger( const QString &caption, const QString &label,
00312 int value, int minValue, int maxValue, int step, int base, bool *ok,
00313 QWidget *parent, const char *name )
00314 {
00315 KInputDialog dlg( caption, label, value, minValue,
00316 maxValue, step, base, parent, name );
00317
00318 bool _ok = ( dlg.exec() == Accepted );
00319
00320 if ( ok )
00321 *ok = _ok;
00322
00323 int result=0;
00324 if ( _ok )
00325 result = dlg.intSpinBox()->value();
00326
00327 return result;
00328 }
00329
00330 int KInputDialog::getInteger( const QString &caption, const QString &label,
00331 int value, int minValue, int maxValue, int step, bool *ok,
00332 QWidget *parent, const char *name )
00333 {
00334 return getInteger( caption, label, value, minValue, maxValue, step,
00335 10, ok, parent, name );
00336 }
00337
00338 double KInputDialog::getDouble( const QString &caption, const QString &label,
00339 double value, double minValue, double maxValue, double step, int decimals,
00340 bool *ok, QWidget *parent, const char *name )
00341 {
00342 KInputDialog dlg( caption, label, value, minValue,
00343 maxValue, step, decimals, parent, name );
00344
00345 bool _ok = ( dlg.exec() == Accepted );
00346
00347 if ( ok )
00348 *ok = _ok;
00349
00350 double result=0;
00351 if ( _ok )
00352 result = dlg.doubleSpinBox()->value();
00353
00354 return result;
00355 }
00356
00357 double KInputDialog::getDouble( const QString &caption, const QString &label,
00358 double value, double minValue, double maxValue, int decimals,
00359 bool *ok, QWidget *parent, const char *name )
00360 {
00361 return getDouble( caption, label, value, minValue, maxValue, 0.1, decimals,
00362 ok, parent, name );
00363 }
00364
00365 QString KInputDialog::getItem( const QString &caption, const QString &label,
00366 const QStringList &list, int current, bool editable, bool *ok,
00367 QWidget *parent, const char *name )
00368 {
00369 KInputDialog dlg( caption, label, list, current,
00370 editable, parent, name );
00371 if ( !editable)
00372 {
00373 connect( dlg.listBox(), SIGNAL(doubleClicked ( QListBoxItem *)), &dlg, SLOT( slotOk()));
00374 }
00375 bool _ok = ( dlg.exec() == Accepted );
00376
00377 if ( ok )
00378 *ok = _ok;
00379
00380 QString result;
00381 if ( _ok )
00382 if ( editable )
00383 result = dlg.comboBox()->currentText();
00384 else
00385 result = dlg.listBox()->currentText();
00386
00387 return result;
00388 }
00389
00390 QStringList KInputDialog::getItemList( const QString &caption,
00391 const QString &label, const QStringList &list, const QStringList &select,
00392 bool multiple, bool *ok, QWidget *parent, const char *name )
00393 {
00394 KInputDialog dlg( caption, label, list, select,
00395 multiple, parent, name );
00396
00397 bool _ok = ( dlg.exec() == Accepted );
00398
00399 if ( ok )
00400 *ok = _ok;
00401
00402 QStringList result;
00403 if ( _ok )
00404 {
00405 for (const QListBoxItem* i = dlg.listBox()->firstItem(); i != 0; i = i->next() )
00406 if ( i->isSelected() )
00407 result.append( i->text() );
00408 }
00409
00410 return result;
00411 }
00412
00413 void KInputDialog::slotEditTextChanged( const QString &text )
00414 {
00415 bool on;
00416 if ( lineEdit()->validator() ) {
00417 QString str = lineEdit()->text();
00418 int index = lineEdit()->cursorPosition();
00419 on = ( lineEdit()->validator()->validate( str, index )
00420 == QValidator::Acceptable );
00421 } else {
00422 on = !text.stripWhiteSpace().isEmpty();
00423 }
00424
00425 enableButton( Ok, on );
00426 enableButton( User1, !text.isEmpty() );
00427 }
00428
00429 void KInputDialog::slotUpdateButtons( const QString &text )
00430 {
00431 enableButton( Ok, !text.isEmpty() );
00432 enableButton( User1, !text.isEmpty() );
00433 }
00434
00435 KLineEdit *KInputDialog::lineEdit() const
00436 {
00437 return d->m_lineEdit;
00438 }
00439
00440 KIntSpinBox *KInputDialog::intSpinBox() const
00441 {
00442 return d->m_intSpinBox;
00443 }
00444
00445 KDoubleSpinBox *KInputDialog::doubleSpinBox() const
00446 {
00447 return d->m_doubleSpinBox;
00448 }
00449
00450 KComboBox *KInputDialog::comboBox() const
00451 {
00452 return d->m_comboBox;
00453 }
00454
00455 KListBox *KInputDialog::listBox() const
00456 {
00457 return d->m_listBox;
00458 }
00459
00460 KTextEdit *KInputDialog::textEdit() const
00461 {
00462 return d->m_textEdit;
00463 }
00464
00465 #include "kinputdialog.moc"
00466
00467
00468