00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
#include <qlabel.h>
00015
#include <qlayout.h>
00016
#include <qcombobox.h>
00017
#include <qlineedit.h>
00018
#include <qpushbutton.h>
00019
#include <qspinbox.h>
00020
#include <qtooltip.h>
00021
#include <klocale.h>
00022
#include <kfiledialog.h>
00023
#include <kglobal.h>
00024
#include <kiconloader.h>
00025
00026
#include "input.h"
00027
00028
00029 static const char *
const add_xpm_data[] =
00030 {
00031
"16 16 5 1",
00032
". c None",
00033
"* c #0328f9",
00034
"# c #354396",
00035
"a c #353740",
00036
"c c #999999",
00037
"................",
00038
"......###.......",
00039
"......#*ac......",
00040
"......#*ac......",
00041
"......#*ac......",
00042
"......#*ac......",
00043
".######*a#####..",
00044
".#***********ac.",
00045
".#aaaaa*aaaaaac.",
00046
"..cccc#*acccccc.",
00047
"......#*ac......",
00048
"......#*ac......",
00049
"......#*ac......",
00050
"......#aac......",
00051
".......ccc......",
00052
"................"
00053 };
00054 const char **
add_xpm = (
const char **)
add_xpm_data;
00055
00056 static const char *
const del_xpm_data[] =
00057 {
00058
"16 16 5 1",
00059
". c None",
00060
"* c #0328f9",
00061
"# c #354396",
00062
"a c #353740",
00063
"c c #999999",
00064
"................",
00065
"................",
00066
"................",
00067
"................",
00068
"................",
00069
"................",
00070
".#############..",
00071
".#***********ac.",
00072
".aaaaaaaaaaaaac.",
00073
"..ccccccccccccc.",
00074
"................",
00075
"................",
00076
"................",
00077
"................",
00078
"................",
00079
"................"
00080 };
00081 const char **
del_xpm = (
const char **)
del_xpm_data;
00082
00083 static const char*
const update_xpm_data[] =
00084 {
00085
"16 16 5 1",
00086
00087
". c #0328f9",
00088
"# c #354396",
00089
"a c #353740",
00090
"b c None",
00091
"c c #999999",
00092
00093
"bbbbbbbbbbbbbbbb",
00094
"bbbbbbbb#####acb",
00095
"bbbbbbbb#....abb",
00096
"bbc##cbb#...acbb",
00097
"bb#..abb#....abb",
00098
"bc#..abb#.a..acb",
00099
"b#..acbbaac#..ab",
00100
"b#..abbbcbb#..ab",
00101
"b#..abbbbbb#..ab",
00102
"b#..acbbbbc#..ab",
00103
"bc#..#cbbc#..acb",
00104
"bb#...####...acb",
00105
"bbca........acbb",
00106
"bbbbaa....aaccbb",
00107
"bbbbbcaaaaccbbbb",
00108
"bbbbbbbbbbbbbbbb"
00109 };
00110 const char **
update_xpm = (
const char **)
update_xpm_data;
00111
00112
00113 InputBool::InputBool(
const QCString &k,
const QString &text,
QWidget * parent,
bool &flag)
00114 :
QWidget(parent), state(flag), key(k)
00115 {
00116
QHBoxLayout *layout =
new QHBoxLayout(
this);
00117
cb =
new QCheckBox(
text,
this);
00118
00119
init();
00120
00121 layout->addWidget(
cb);
00122 layout->addStretch(1);
00123
00124 connect(
cb, SIGNAL(toggled(
bool)),
this, SLOT(
valueChanged(
bool)));
00125 }
00126
00127
00128 InputBool::~InputBool()
00129 {}
00130
00131
00132 void InputBool::init()
00133 {
00134
cb->setChecked(
state);
00135 }
00136
00137
00138 void InputBool::valueChanged(
bool s)
00139 {
00140
if (s !=
state) {
00141 emit
changed();
00142 emit
toggle(
key, s);
00143 }
00144
state = s;
00145 }
00146
00147
00148 void InputBool::setEnabled(
bool b)
00149 {
00150
cb->setEnabled(b);
00151 }
00152
00153
00154 InputInt::InputInt(
const QString &label,
QWidget *parent,
int &val,
int minVal,
int maxVal)
00155 :
QWidget(parent), m_val(val), m_minVal(minVal), m_maxVal(maxVal)
00156 {
00157
QHBoxLayout *layout =
new QHBoxLayout(
this, 5);
00158
00159
sp =
new QSpinBox(minVal, maxVal, 1,
this);
00160
lab =
new QLabel(
sp, label+
":",
this);
00161
00162
init();
00163
00164 layout->addWidget(
lab);
00165 layout->addWidget(
sp);
00166 layout->addStretch(1);
00167
00168 connect(
sp, SIGNAL(
valueChanged(
int)),
this, SLOT(
valueChanged(
int)));
00169 }
00170
00171
00172 InputInt::~InputInt()
00173 {}
00174
00175
00176 void InputInt::init()
00177 {
00178
m_val = QMAX(
m_minVal,
m_val);
00179
m_val = QMIN(
m_maxVal,
m_val);
00180
sp->setValue(
m_val);
00181 }
00182
00183
00184 void InputInt::valueChanged(
int val)
00185 {
00186
if (val !=
m_val)
00187 emit
changed();
00188
m_val = val;
00189 }
00190
00191
00192 void InputInt::setEnabled(
bool state)
00193 {
00194
lab->setEnabled(state);
00195
sp->setEnabled(state);
00196 }
00197
00198
00199 InputString::InputString(
const QString & label,
00200
QWidget *parent,
QCString &s, StringMode m)
00201 :
QWidget(parent), str(s), sm(m), m_values(0), m_index(0)
00202 {
00203
le = 0;
br = 0;
com = 0;
00204
00205
if (m ==
StringFixed) {
00206
QHBoxLayout *layout =
new QHBoxLayout(
this, 5);
00207
com =
new QComboBox(
this);
00208
lab =
new QLabel(
com,label+
":",
this);
00209 layout->addWidget(
lab);
00210 layout->addWidget(
com);
00211 layout->addStretch(1);
00212 }
else {
00213
QGridLayout *layout =
new QGridLayout(
this, 1, m==
StringFree? 1 : 3, 5);
00214
le =
new QLineEdit(
this);
00215
lab =
new QLabel(
le,label+
":",
this);
00216 layout->addWidget(
lab, 0, 0);
00217
le->setText(s);
00218 layout->addWidget(
le, 0, 1);
00219
00220
if (m ==
StringFile || m ==
StringDir) {
00221
br =
new QPushButton(
this);
00222
br->setPixmap(SmallIcon(m==
StringFile?
"document" :
"folder"));
00223 QToolTip::add(
br, m==StringFile? i18n(
"Browse to a file") : i18n(
"Browse to a folder"));
00224 layout->addWidget(
br, 0, 2);
00225 }
00226 }
00227
00228
if (
le)
00229 connect(
le, SIGNAL(
textChanged(
const QString&)),
00230
this, SLOT(
textChanged(
const QString&)) );
00231
if (
br)
00232 connect(
br, SIGNAL(clicked()),
this, SLOT(
browse()) );
00233
if (
com)
00234 connect(
com, SIGNAL(activated(
const QString &)),
00235
this, SLOT(
textChanged(
const QString &)) );
00236 }
00237
00238 InputString::~InputString()
00239 {
00240
if (
m_values)
00241
delete m_values;
00242 }
00243
00244
00245 void InputString::init()
00246 {
00247
if (
sm ==
StringFixed) {
00248
int *itemIndex =
m_values->find(
str);
00249
if (itemIndex)
00250
com->setCurrentItem(*itemIndex);
00251
else
00252
com->setCurrentItem(0);
00253 }
else
00254
le->setText(
str);
00255 }
00256
00257
00258 void InputString::addValue(
const char *s)
00259 {
00260
if (
sm ==
StringFixed) {
00261
if (!
m_values)
00262
m_values =
new QDict<int>;
00263
m_values->setAutoDelete(
true);
00264
m_values->insert(s,
new int(
m_index++));
00265
com->insertItem(s);
00266 }
00267 }
00268
00269
00270 void InputString::clear()
00271 {
00272
le->setText(
"");
00273
if (!
str.isEmpty()) {
00274 emit
changed();
00275
str =
"";
00276 }
00277 }
00278
00279
00280 void InputString::textChanged(
const QString &s)
00281 {
00282
if (
str!=s.latin1()) {
00283
str = s.latin1();
00284 emit
changed();
00285 }
00286 }
00287
00288 void InputString::setEnabled(
bool state)
00289 {
00290
lab->setEnabled(state);
00291
if (
le)
00292
le->setEnabled(state);
00293
if (
br)
00294
br->setEnabled(state);
00295
if (
com)
00296
com->setEnabled(state);
00297 }
00298
00299
00300 void InputString::browse()
00301 {
00302
if (
sm ==
StringFile) {
00303
QString fileName = KFileDialog::getOpenFileName();
00304
00305
if (!fileName.isNull()) {
00306
le->setText(fileName);
00307
if (
str !=
le->text().latin1()) {
00308
str =
le->text().latin1();
00309 emit
changed();
00310 }
00311 }
00312 }
else {
00313
QString dirName = KFileDialog::getExistingDirectory();
00314
00315
if (!dirName.isNull()) {
00316
le->setText( dirName );
00317
if (
str !=
le->text().latin1()) {
00318
str =
le->text().latin1();
00319 emit
changed();
00320 }
00321 }
00322 }
00323 }
00324
00325
00326 InputStrList::InputStrList(
const QString & label,
00327
QWidget *parent,
QStrList &sl, ListMode lm)
00328 :
QWidget(parent), strList(sl)
00329 {
00330
QGridLayout *layout =
new QGridLayout(
this, 2, 2, 5);
00331
00332
QWidget *dw =
new QWidget(
this);
00333
QHBoxLayout *boxlayout =
new QHBoxLayout(dw, 0, 5);
00334
le =
new QLineEdit(dw);
00335
lab =
new QLabel(
le,label+
":",
this );
00336 layout->addWidget(
lab, 0, 0);
00337 boxlayout->addWidget(
le, 1);
00338
00339
add =
new QPushButton(dw);
00340
add->setPixmap(
QPixmap(
add_xpm ));
00341 QToolTip::add(
add, i18n(
"Add item"));
00342 boxlayout->addWidget(
add);
00343
00344
del =
new QPushButton(dw);
00345
del->setPixmap(
QPixmap(
del_xpm ));
00346 QToolTip::add(
del, i18n(
"Delete selected item"));
00347 boxlayout->addWidget(
del);
00348
00349
upd =
new QPushButton(dw);
00350
upd->setPixmap(
QPixmap(
update_xpm ));
00351 QToolTip::add(
upd, i18n(
"Update selected item"));
00352 boxlayout->addWidget(
upd);
00353
00354
lb =
new QListBox(
this);
00355
lb->setMinimumSize(400, 100);
00356
init();
00357
lb->setVScrollBarMode(QScrollView::Auto);
00358
lb->setHScrollBarMode(QScrollView::Auto);
00359
00360
brFile = 0;
00361
brDir = 0;
00362
if (lm !=
ListString) {
00363
if (lm &
ListFile) {
00364
brFile =
new QPushButton(dw);
00365
brFile->setPixmap(SmallIcon(
"document"));
00366 QToolTip::add(
brFile, i18n(
"Browse to a file"));
00367 boxlayout->addWidget(
brFile);
00368 }
00369
if (lm &
ListDir) {
00370
brDir =
new QPushButton(dw);
00371
brDir->setPixmap(SmallIcon(
"folder"));
00372 QToolTip::add(
brDir, i18n(
"Browse to a folder"));
00373 boxlayout->addWidget(
brDir);
00374 }
00375 }
00376 layout->addWidget(dw, 0, 1);
00377 layout->addWidget(
lb, 1, 1);
00378
00379 connect(
le, SIGNAL(returnPressed()),
00380
this, SLOT(
addString()) );
00381 connect(
add, SIGNAL(clicked()),
00382
this, SLOT(
addString()) );
00383 connect(
del, SIGNAL(clicked()),
00384
this, SLOT(
delString()) );
00385 connect(
upd, SIGNAL(clicked()),
00386
this, SLOT(
updateString()) );
00387
if (
brFile)
00388 connect(
brFile, SIGNAL(clicked()),
00389
this, SLOT(
browseFiles()) );
00390
if (
brDir)
00391 connect(
brDir, SIGNAL(clicked()),
00392
this, SLOT(
browseDir()) );
00393 connect(
lb, SIGNAL(selected(
const QString &)),
00394
this, SLOT(
selectText(
const QString &)) );
00395
00396
strList = sl;
00397 }
00398
00399
00400 InputStrList::~InputStrList()
00401 {}
00402
00403
00404 void InputStrList::init()
00405 {
00406
le->clear();
00407
lb->clear();
00408
char *s =
strList.first();
00409
while (s) {
00410
lb->insertItem(s);
00411 s =
strList.next();
00412 }
00413 }
00414
00415
00416 void InputStrList::addString()
00417 {
00418
if (!
le->text().isEmpty()) {
00419
lb->insertItem(
le->text());
00420
strList.append(
le->text().latin1());
00421 emit
changed();
00422
le->clear();
00423 }
00424 }
00425
00426
00427 void InputStrList::delString()
00428 {
00429
if (
lb->currentItem() != -1) {
00430
int itemIndex =
lb->currentItem();
00431
lb->removeItem(itemIndex);
00432
strList.remove(itemIndex);
00433 emit
changed();
00434 }
00435 }
00436
00437
00438 void InputStrList::updateString()
00439 {
00440
if (
lb->currentItem() != -1 && !
le->text().isEmpty()) {
00441
lb->changeItem(
le->text(),
lb->currentItem());
00442
strList.insert(
lb->currentItem(),
le->text().latin1());
00443
strList.remove(
lb->currentItem()+1);
00444 emit
changed();
00445 }
00446 }
00447
00448
00449 void InputStrList::selectText(
const QString &s)
00450 {
00451
le->setText(s);
00452 }
00453
00454
00455 void InputStrList::setEnabled(
bool state)
00456 {
00457
lab->setEnabled(state);
00458
le->setEnabled(state);
00459
add->setEnabled(state);
00460
del->setEnabled(state);
00461
upd->setEnabled(state);
00462
lb->setEnabled(state);
00463
if (
brFile)
00464
brFile->setEnabled(state);
00465
if (
brDir)
00466
brDir->setEnabled(state);
00467 }
00468
00469
00470 void InputStrList::browseFiles()
00471 {
00472
QStringList fileNames = KFileDialog::getOpenFileNames();
00473
00474
if (!fileNames.isEmpty()) {
00475 QStringList::Iterator it;
00476
for (it = fileNames.begin(); it != fileNames.end(); ++it) {
00477
lb->insertItem(*it);
00478
strList.append(( *it ).latin1());
00479 emit
changed();
00480 }
00481
le->setText(*fileNames.begin());
00482 }
00483 }
00484
00485
00486 void InputStrList::browseDir()
00487 {
00488
QString dirName = KFileDialog::getExistingDirectory();
00489
00490
if (!dirName.isNull()) {
00491
lb->insertItem(dirName);
00492
strList.append(dirName.latin1());
00493 emit
changed();
00494
le->setText(dirName);
00495 }
00496 }
00497
00498
00499
#include "input.moc"