20 #include <tdelocale.h> 22 #include <kurlrequester.h> 23 #include <klineedit.h> 24 #include <kdialogbase.h> 25 #include <tdeversion.h> 27 #include <tqapplication.h> 28 #include <tqtooltip.h> 30 #include <tqstringlist.h> 34 #include <tqspinbox.h> 39 TQString TQRegExp_escape(
const TQString& str )
41 static const char meta[] =
"$()*+.?[\\]^{|}";
42 TQString quoted = str;
45 while ( i < (
int) quoted.length() ) {
46 if ( strchr(meta, quoted[i].latin1()) != 0 )
47 quoted.insert( i++,
"\\" );
54 class FlagListToolTip :
public TQToolTip
57 FlagListToolTip(TQWidget *parent);
59 void maybeTip(
const TQPoint &p);
63 FlagListToolTip::FlagListToolTip(TQWidget *parent)
68 void FlagListToolTip::maybeTip(
const TQPoint &pos)
71 TQListViewItem *item = listbox->itemAt(pos);
75 tip(listbox->itemRect(item), flitem->desc);
79 FlagListItem::FlagListItem(
FlagListBox *parent,
const TQString &flagstr,
80 const TQString &description)
81 : TQCheckListItem(parent, flagstr, TQCheckListItem::CheckBox),
82 flag(flagstr), desc(description)
86 FlagListItem::FlagListItem(
FlagListBox *parent,
const TQString &flagstr,
87 const TQString &description,
const TQString &offstr)
88 : TQCheckListItem(parent, flagstr, TQCheckListItem::CheckBox),
89 flag(flagstr), off(offstr), desc(description)
93 FlagListBox::FlagListBox(TQWidget *parent,
const char *name)
94 : TQListView(parent, name)
96 setResizeMode(LastColumn);
98 addColumn(i18n(
"Flags"));
99 (void)
new FlagListToolTip(
this);
103 void FlagListBox::readFlags(TQStringList *list)
105 TQListViewItem *item = firstChild();
106 for (; item; item = item->nextSibling()) {
108 TQStringList::Iterator sli = list->find(flitem->flag);
109 if (sli != list->end()) {
113 sli = list->find(flitem->off);
114 if (sli != list->end()) {
115 flitem->setOn(
false);
122 void FlagListBox::writeFlags(TQStringList *list)
124 TQListViewItem *item = firstChild();
125 for (; item; item = item->nextSibling()) {
128 (*list) << flitem->flag;
134 const TQString &flagstr,
const TQString &description)
135 : TQCheckBox(description, parent), flag(flagstr), includeOff(false), useDef(false), defSet(false)
137 TQToolTip::add(
this, flagstr);
138 controller->addCheckBox(
this);
143 const TQString &flagstr,
const TQString &description,
144 const TQString &offstr)
145 : TQCheckBox(description, parent), flag(flagstr), off(offstr), includeOff(false), useDef(false), defSet(false)
147 TQToolTip::add(
this, flagstr);
148 controller->addCheckBox(
this);
152 const TQString &flagstr,
const TQString &description,
153 const TQString &offstr,
const TQString &defstr)
154 : TQCheckBox(description, parent), flag(flagstr), off(offstr), def(defstr), includeOff(false), useDef(true), defSet(false)
156 TQToolTip::add(
this, flagstr);
157 controller->addCheckBox(
this);
161 :m_multiKeys(multiKeys)
166 void FlagCheckBoxController::addCheckBox(
FlagCheckBox *item)
172 void FlagCheckBoxController::readFlags(TQStringList *list)
205 TQPtrListIterator<FlagCheckBox> it(cblist);
206 for (; it.current(); ++it) {
208 TQStringList::Iterator sli = list->find(fitem->flag);
209 if (sli != list->end()) {
210 fitem->setChecked(
true);
211 fitem->useDef =
false;
214 sli = list->find(fitem->off);
215 if (sli != list->end()) {
216 fitem->setChecked(
false);
217 fitem->includeOff =
true;
218 fitem->useDef =
false;
221 if (!fitem->def.isEmpty())
222 if (fitem->useDef && (fitem->def == fitem->flag))
224 fitem->setChecked(
true);
225 fitem->defSet =
true;
228 fitem->useDef =
false;
233 void FlagCheckBoxController::writeFlags(TQStringList *list)
235 TQPtrListIterator<FlagCheckBox> it(cblist);
236 for (; it.current(); ++it) {
238 if (fitem->isChecked() && (!fitem->useDef))
240 (*list) << fitem->flag;
242 else if ((!fitem->off.isEmpty()) && fitem->includeOff)
243 (*list) << fitem->off;
244 else if ((fitem->def == fitem->flag) && (!fitem->isChecked()))
245 (*list) << fitem->off;
246 else if ((fitem->def == fitem->off) && (fitem->isChecked()))
247 (*list) << fitem->flag;
251 FlagPathEditController::FlagPathEditController( )
255 FlagPathEditController::~ FlagPathEditController( )
259 void FlagPathEditController::readFlags( TQStringList * list )
262 TQPtrListIterator<FlagPathEdit> it(plist);
263 for (; it.current(); ++it) {
266 TQStringList::Iterator sli = list->begin();
267 while ( sli != list->end() )
270 if ((*sli).startsWith(peitem->flag))
273 peitem->setText((*sli).replace(TQRegExp(TQRegExp_escape(peitem->flag)),
""));
274 sli = list->remove(sli);
287 void FlagPathEditController::writeFlags( TQStringList * list )
289 TQPtrListIterator<FlagPathEdit> it(plist);
290 for (; it.current(); ++it) {
292 if (!pitem->isEmpty())
293 (*list) << pitem->flag + pitem->text();
297 void FlagPathEditController::addPathEdit(
FlagPathEdit * item )
305 : TQWidget(parent), delimiter(pathDelimiter), flag(flagstr), m_description(description)
307 TQBoxLayout *topLayout =
new TQVBoxLayout(
this, 0, 1);
308 topLayout->addWidget(
new TQLabel(description,
this));
309 TQBoxLayout *layout =
new TQHBoxLayout(topLayout, KDialog::spacingHint());
311 if (delimiter.isEmpty())
313 url =
new KURLRequester(
this);
315 layout->addWidget(url);
319 edit =
new KLineEdit(
this);
320 layout->addWidget(edit);
321 details =
new TQPushButton(
"...",
this);
322 details->setMaximumWidth(30);
323 connect(details, TQT_SIGNAL(clicked()),
this, TQT_SLOT(showPathDetails()));
324 layout->addWidget(details);
327 TQApplication::sendPostedEvents(
this, TQEvent::ChildInserted);
329 TQToolTip::add(
this, flagstr);
330 controller->addPathEdit(
this);
333 void FlagPathEdit::showPathDetails( )
335 KDialogBase *dia =
new KDialogBase(0,
"flag_path_edit_dia",
true, m_description,
336 KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok,
true);
338 TQBoxLayout *diaLayout =
new TQVBoxLayout(dia, KDialog::marginHint(), KDialog::spacingHint());
339 diaLayout->setAutoAdd(
true);
341 KURLRequester *req =
new KURLRequester( dia );
342 req->setMode(KFile::Directory);
343 KEditListBox::CustomEditor pCustomEditor;
344 pCustomEditor = req->customEditor();
345 KEditListBox *elb =
new KEditListBox(
"", pCustomEditor, dia );
346 dia->setMainWidget(elb);
348 elb->insertStringList(TQStringList::split(delimiter, text()));
350 if (dia->exec() == TQDialog::Accepted)
352 setText(elb->items().join(delimiter));
358 void FlagPathEdit::setText(
const TQString text )
360 if (delimiter.isEmpty())
366 TQString FlagPathEdit::text( )
368 if (delimiter.isEmpty())
374 bool FlagPathEdit::isEmpty( )
376 if (delimiter.isEmpty())
377 return url->url().isEmpty();
379 return edit->text().isEmpty();
382 FlagRadioButton::FlagRadioButton( TQWidget * parent,
FlagRadioButtonController * controller,
const TQString & flagstr,
const TQString & description )
383 : TQRadioButton(description, parent), flag(flagstr)
385 TQToolTip::add(
this, flagstr);
386 controller->addRadioButton(
this);
390 :m_multiKeys(multiKeys)
400 void FlagRadioButtonController::readFlags(TQStringList *list)
433 TQPtrListIterator<FlagRadioButton> it(cblist);
434 for (; it.current(); ++it) {
436 TQStringList::Iterator sli = list->find(fitem->flag);
437 if (sli != list->end()) {
438 fitem->setChecked(
true);
445 void FlagRadioButtonController::writeFlags(TQStringList *list)
447 TQPtrListIterator<FlagRadioButton> it(cblist);
448 for (; it.current(); ++it) {
450 if (fitem->isChecked())
451 (*list) << fitem->flag;
455 FlagEditController::FlagEditController( )
459 FlagEditController::~ FlagEditController( )
463 void FlagEditController::readFlags( TQStringList * list )
465 TQPtrListIterator<FlagListEdit> it(plist);
466 for (; it.current(); ++it) {
469 TQStringList::Iterator sli = list->begin();
470 while (sli != list->end())
472 if ((*sli).startsWith(peitem->flag))
474 peitem->appendText((*sli).replace(TQRegExp(TQRegExp_escape(peitem->flag)),
""));
475 sli = list->remove(sli);
483 TQPtrListIterator<FlagSpinEdit> it2(slist);
484 for (; it2.current(); ++it2) {
487 TQStringList::Iterator sli = list->begin();
488 while ( sli != list->end() )
490 if ((*sli).startsWith(sitem->flag))
492 sitem->setText((*sli).replace(TQRegExp(TQRegExp_escape(sitem->flag)),
""));
493 sli = list->remove(sli);
501 void FlagEditController::writeFlags( TQStringList * list )
503 TQPtrListIterator<FlagListEdit> it(plist);
504 for (; it.current(); ++it) {
506 if (!pitem->isEmpty())
507 (*list) += pitem->flags();
510 TQPtrListIterator<FlagSpinEdit> it2(slist);
511 for (; it2.current(); ++it2) {
513 if (!sitem->isDefault())
514 (*list) << sitem->flags();
518 void FlagEditController::addListEdit(
FlagListEdit * item )
530 const TQString & flagstr,
const TQString & description)
531 : TQWidget(parent), delimiter(listDelimiter), flag(flagstr), m_description(description)
533 TQBoxLayout *topLayout =
new TQVBoxLayout(
this, 0, 1);
534 topLayout->addWidget(
new TQLabel(description,
this));
535 TQBoxLayout *layout =
new TQHBoxLayout(topLayout, KDialog::spacingHint());
537 edit =
new KLineEdit(
this);
538 layout->addWidget(edit);
539 if (! listDelimiter.isEmpty())
541 details =
new TQPushButton(
"...",
this);
542 details->setMaximumWidth(30);
543 connect(details, TQT_SIGNAL(clicked()),
this, TQT_SLOT(showListDetails()));
544 layout->addWidget(details);
547 TQApplication::sendPostedEvents(
this, TQEvent::ChildInserted);
549 TQToolTip::add(
this, flagstr);
550 controller->addListEdit(
this);
553 void FlagListEdit::setText(
const TQString text )
558 bool FlagListEdit::isEmpty( )
560 return edit->text().isEmpty();
563 TQString FlagListEdit::text( )
568 void FlagListEdit::showListDetails( )
570 KDialogBase *dia =
new KDialogBase(0,
"flag_list_edit_dia",
true, m_description,
571 KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok,
true);
573 TQBoxLayout *diaLayout =
new TQVBoxLayout(dia, KDialog::marginHint(), KDialog::spacingHint());
574 diaLayout->setAutoAdd(
true);
576 KEditListBox *elb =
new KEditListBox(
"", dia );
577 dia->setMainWidget(elb);
579 elb->insertStringList(TQStringList::split(delimiter, text()));
581 if (dia->exec() == TQDialog::Accepted)
583 setText(elb->items().join(delimiter));
589 void FlagListEdit::appendText(
const TQString text )
591 edit->setText(edit->text() + (edit->text().isEmpty()?TQString(
""):delimiter) + text);
594 TQStringList FlagListEdit::flags( )
596 TQStringList fl = TQStringList::split(delimiter, text());
597 for (TQStringList::iterator it = fl.begin(); it != fl.end(); ++it)
604 FlagSpinEdit::FlagSpinEdit( TQWidget * parent,
int minVal,
int maxVal,
int incr,
int defaultVal,
FlagEditController * controller,
const TQString & flagstr,
const TQString & description )
605 :TQWidget(parent), m_defaultVal(defaultVal), flag(flagstr)
607 TQBoxLayout *topLayout =
new TQVBoxLayout(
this, 0, 1);
608 topLayout->addWidget(
new TQLabel(description,
this));
610 spb =
new TQSpinBox(minVal, maxVal, incr,
this);
611 spb->setValue(defaultVal);
612 topLayout->addWidget(spb);
614 TQApplication::sendPostedEvents(
this, TQEvent::ChildInserted);
616 TQToolTip::add(
this, flagstr);
617 controller->addSpinBox(
this);
620 void FlagSpinEdit::setText(
const TQString text )
622 spb->setValue(text.toInt());
625 TQString FlagSpinEdit::text( )
627 return TQString(
"%1").arg(spb->value());
630 TQString FlagSpinEdit::flags( )
632 return flag + text();
635 bool FlagSpinEdit::isDefault( )
637 if (spb->value() == m_defaultVal)
643 #include "flagboxes.moc" FlagPathEdit(TQWidget *parent, TQString pathDelimiter, FlagPathEditController *controller, const TQString &flagstr, const TQString &description, KFile::Mode mode=KFile::Directory)
If the pathDelimiter is not empty then path edit can contain a list of paths.
FlagCheckBoxController(TQStringList multiKeys=TQStringList())
"multi key" is a list of options like -vxyz (-vx -vy -vz) multiKeys must contain a list of option nam...
Controller for path editors.
List box item holding a compiler flag.
List editor if list is a compiler flag.
Check box item holding a compiler flag.
Spin editor of a compiler flag.
Controller for check box editors.
FlagListEdit(TQWidget *parent, TQString listDelimiter, FlagEditController *controller, const TQString &flagstr, const TQString &description)
If the listDelimiter is not empty then list edit can contain a list of entries.
Support classes for compiler plugins.
List item holding a compiler flag.
Controller for flag editors.
Path editor if path is a compiler flag.