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