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