• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • KDevelop Widgets Library
 

KDevelop Widgets Library

  • lib
  • widgets
flagboxes.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2000-2001 Bernd Gehrmann <bernd@kdevelop.org>
3 Copyright (C) 2003 Alexander Dymo <cloudtemple@mksat.net>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*/
20#include <tdelocale.h>
21#include <kdebug.h>
22#include <kurlrequester.h>
23#include <klineedit.h>
24#include <kdialogbase.h>
25#include <tdeversion.h>
26
27#include <tqapplication.h>
28#include <tqtooltip.h>
29#include <tqheader.h>
30#include <tqstringlist.h>
31#include <tqlayout.h>
32#include <tqlabel.h>
33#include <tqregexp.h>
34#include <tqspinbox.h>
35
36#include "flagboxes.h"
37
38// partial copy of TQt-3.1 for back-compatibility to KDE-3.0
39TQString TQRegExp_escape( const TQString& str )
40{
41 static const char meta[] = "$()*+.?[\\]^{|}";
42 TQString quoted = str;
43 int i = 0;
44
45 while ( i < (int) quoted.length() ) {
46 if ( strchr(meta, quoted[i].latin1()) != 0 )
47 quoted.insert( i++, "\\" );
48 i++;
49 }
50 return quoted;
51}
52
53
54class FlagListToolTip : public TQToolTip
55{
56public:
57 FlagListToolTip(TQWidget *parent);
58protected:
59 void maybeTip(const TQPoint &p);
60};
61
62
63FlagListToolTip::FlagListToolTip(TQWidget *parent)
64 : TQToolTip(parent)
65{}
66
67
68void FlagListToolTip::maybeTip(const TQPoint &pos)
69{
70 FlagListBox *listbox = static_cast<FlagListBox*>(parentWidget());
71 TQListViewItem *item = listbox->itemAt(pos);
72 FlagListItem *flitem = static_cast<FlagListItem*>(item);
73
74 if (item)
75 tip(listbox->itemRect(item), flitem->desc);
76}
77
78
79FlagListItem::FlagListItem(FlagListBox *parent, const TQString &flagstr,
80 const TQString &description)
81 : TQCheckListItem(parent, flagstr, TQCheckListItem::CheckBox),
82 flag(flagstr), desc(description)
83{}
84
85
86FlagListItem::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)
90{}
91
92
93FlagListBox::FlagListBox(TQWidget *parent, const char *name)
94 : TQListView(parent, name)
95{
96 setResizeMode(LastColumn);
97 header()->hide();
98 addColumn(i18n("Flags"));
99 (void) new FlagListToolTip(this);
100}
101
102
103void FlagListBox::readFlags(TQStringList *list)
104{
105 TQListViewItem *item = firstChild();
106 for (; item; item = item->nextSibling()) {
107 FlagListItem *flitem = static_cast<FlagListItem*>(item);
108 TQStringList::Iterator sli = list->find(flitem->flag);
109 if (sli != list->end()) {
110 flitem->setOn(true);
111 list->remove(sli);
112 }
113 sli = list->find(flitem->off);
114 if (sli != list->end()) {
115 flitem->setOn(false);
116 list->remove(sli);
117 }
118 }
119}
120
121
122void FlagListBox::writeFlags(TQStringList *list)
123{
124 TQListViewItem *item = firstChild();
125 for (; item; item = item->nextSibling()) {
126 FlagListItem *flitem = static_cast<FlagListItem*>(item);
127 if (flitem->isOn())
128 (*list) << flitem->flag;
129 }
130}
131
132
133FlagCheckBox::FlagCheckBox(TQWidget *parent, FlagCheckBoxController *controller,
134 const TQString &flagstr, const TQString &description)
135 : TQCheckBox(description, parent), flag(flagstr), includeOff(false), useDef(false), defSet(false)
136{
137 TQToolTip::add(this, flagstr);
138 controller->addCheckBox(this);
139}
140
141
142FlagCheckBox::FlagCheckBox(TQWidget *parent, FlagCheckBoxController *controller,
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)
146{
147 TQToolTip::add(this, flagstr);
148 controller->addCheckBox(this);
149}
150
151FlagCheckBox::FlagCheckBox(TQWidget *parent, FlagCheckBoxController *controller,
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)
155{
156 TQToolTip::add(this, flagstr);
157 controller->addCheckBox(this);
158}
159
160FlagCheckBoxController::FlagCheckBoxController(TQStringList multiKeys)
161 :m_multiKeys(multiKeys)
162{
163}
164
165
166void FlagCheckBoxController::addCheckBox(FlagCheckBox *item)
167{
168 cblist.append(item);
169}
170
171
172void FlagCheckBoxController::readFlags(TQStringList *list)
173{
174 //handle keys like -vxyz -> transform they into -vx -vy -vz
175 //very "effective" algo :(
176/* TQStringList addons;
177 for (TQStringList::Iterator mk = m_multiKeys.begin(); mk != m_multiKeys.end(); ++ mk)
178 {
179 kdDebug() << "multikey " << *mk << endl;
180 for (TQStringList::Iterator sli = list->begin(); sli != list->end(); ++sli)
181 {
182 TQString key = *sli;
183 kdDebug() << "current key: " << key << endl;
184 if ( (key.length() > 3) && (key.startsWith(*mk)) )
185 {
186 list->remove(sli);
187 key = key.remove(*mk);
188 kdDebug() << "refined key " << key << endl;
189 for (int i = 0; i < key.length(); ++i)
190 {
191 kdDebug() << "adding key " << *mk + key[i] << endl;
192 addons << *mk + key[i];
193 }
194 }
195 }
196 }
197 kdDebug() << "good" << endl;
198 *list += addons;
199
200 for (TQStringList::Iterator sli = list->begin(); sli != list->end(); ++sli)
201 {
202 kdDebug() << "KEYS: " << *sli << endl;
203 }
204*/
205 TQPtrListIterator<FlagCheckBox> it(cblist);
206 for (; it.current(); ++it) {
207 FlagCheckBox *fitem = it.current();
208 TQStringList::Iterator sli = list->find(fitem->flag);
209 if (sli != list->end()) {
210 fitem->setChecked(true);
211 fitem->useDef = false;
212 list->remove(sli);
213 }
214 sli = list->find(fitem->off);
215 if (sli != list->end()) {
216 fitem->setChecked(false);
217 fitem->includeOff = true;
218 fitem->useDef = false;
219 list->remove(sli);
220 }
221 if (!fitem->def.isEmpty())
222 if (fitem->useDef && (fitem->def == fitem->flag))
223 {
224 fitem->setChecked(true);
225 fitem->defSet = true;
226 }
227 else
228 fitem->useDef = false;
229 }
230}
231
232
233void FlagCheckBoxController::writeFlags(TQStringList *list)
234{
235 TQPtrListIterator<FlagCheckBox> it(cblist);
236 for (; it.current(); ++it) {
237 FlagCheckBox *fitem = it.current();
238 if (fitem->isChecked() && (!fitem->useDef))
239 {
240 (*list) << fitem->flag;
241 }
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;
248 }
249}
250
251 FlagPathEditController::FlagPathEditController( )
252{
253}
254
255 FlagPathEditController::~ FlagPathEditController( )
256{
257}
258
259void FlagPathEditController::readFlags( TQStringList * list )
260{
261// kdDebug() << "read path flags" << endl;
262 TQPtrListIterator<FlagPathEdit> it(plist);
263 for (; it.current(); ++it) {
264 FlagPathEdit *peitem = it.current();
265
266 TQStringList::Iterator sli = list->begin();
267 while ( sli != list->end() )
268 {
269 // kdDebug() << "option: " << (*sli) << " flag is: " << peitem->flag << endl;
270 if ((*sli).startsWith(peitem->flag))
271 {
272// kdDebug() << "Processing.." << endl;
273 peitem->setText((*sli).replace(TQRegExp(TQRegExp_escape(peitem->flag)),""));
274 sli = list->remove(sli);
275 continue;
276 }
277 ++sli;
278 }
279/* TQStringList::Iterator sli = list->find(peitem->flag);
280 if (sli != list->end()) {
281 peitem->setText((*sli).remove(peitem->flag));
282 list->remove(sli);
283 }*/
284 }
285}
286
287void FlagPathEditController::writeFlags( TQStringList * list )
288{
289 TQPtrListIterator<FlagPathEdit> it(plist);
290 for (; it.current(); ++it) {
291 FlagPathEdit *pitem = it.current();
292 if (!pitem->isEmpty())
293 (*list) << pitem->flag + pitem->text();
294 }
295}
296
297void FlagPathEditController::addPathEdit( FlagPathEdit * item )
298{
299 plist.append(item);
300}
301
302FlagPathEdit::FlagPathEdit( TQWidget * parent, TQString pathDelimiter,
303 FlagPathEditController * controller, const TQString & flagstr, const TQString & description,
304 KFile::Mode mode )
305 : TQWidget(parent), delimiter(pathDelimiter), flag(flagstr), m_description(description)
306{
307 TQBoxLayout *topLayout = new TQVBoxLayout(this, 0, 1);
308 topLayout->addWidget(new TQLabel(description, this));
309 TQBoxLayout *layout = new TQHBoxLayout(topLayout, KDialog::spacingHint());
310
311 if (delimiter.isEmpty())
312 {
313 url = new KURLRequester(this);
314 url->setMode(mode);
315 layout->addWidget(url);
316 }
317 else
318 {
319 edit = new KLineEdit(this);
320 layout->addWidget(edit);
321 details = new TQPushButton("...", this);
322 details->setMaximumWidth(30);
323 connect(details, TQ_SIGNAL(clicked()), this, TQ_SLOT(showPathDetails()));
324 layout->addWidget(details);
325 }
326
327 TQApplication::sendPostedEvents(this, TQEvent::ChildInserted);
328
329 TQToolTip::add(this, flagstr);
330 controller->addPathEdit(this);
331}
332
333void FlagPathEdit::showPathDetails( )
334{
335 KDialogBase *dia = new KDialogBase(0, "flag_path_edit_dia", true, m_description,
336 KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true);
337
338 TQBoxLayout *diaLayout = new TQVBoxLayout(dia, KDialog::marginHint(), KDialog::spacingHint());
339 diaLayout->setAutoAdd(true);
340
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);
347
348 elb->insertStringList(TQStringList::split(delimiter, text()));
349
350 if (dia->exec() == TQDialog::Accepted)
351 {
352 setText(elb->items().join(delimiter));
353 }
354
355 delete dia;
356}
357
358void FlagPathEdit::setText( const TQString text )
359{
360 if (delimiter.isEmpty())
361 url->setURL(text);
362 else
363 edit->setText(text);
364}
365
366TQString FlagPathEdit::text( )
367{
368 if (delimiter.isEmpty())
369 return url->url();
370 else
371 return edit->text();
372}
373
374bool FlagPathEdit::isEmpty( )
375{
376 if (delimiter.isEmpty())
377 return url->url().isEmpty();
378 else
379 return edit->text().isEmpty();
380}
381
382FlagRadioButton::FlagRadioButton( TQWidget * parent, FlagRadioButtonController * controller, const TQString & flagstr, const TQString & description )
383 : TQRadioButton(description, parent), flag(flagstr)
384{
385 TQToolTip::add(this, flagstr);
386 controller->addRadioButton(this);
387}
388
389FlagRadioButtonController::FlagRadioButtonController(TQStringList multiKeys)
390 :m_multiKeys(multiKeys)
391{
392}
393
394void FlagRadioButtonController::addRadioButton(FlagRadioButton *item)
395{
396 cblist.append(item);
397}
398
399
400void FlagRadioButtonController::readFlags(TQStringList *list)
401{
402 //handle keys like -vxyz -> transform they into -vx -vy -vz
403 //very "effective" algo :(
404/* TQStringList addons;
405 for (TQStringList::Iterator mk = m_multiKeys.begin(); mk != m_multiKeys.end(); ++ mk)
406 {
407 kdDebug() << "multikey " << *mk << endl;
408 for (TQStringList::Iterator sli = list->begin(); sli != list->end(); ++sli)
409 {
410 TQString key = *sli;
411 kdDebug() << "current key: " << key << endl;
412 if ( (key.length() > 3) && (key.startsWith(*mk)) )
413 {
414 list->remove(sli);
415 key = key.remove(*mk);
416 kdDebug() << "refined key " << key << endl;
417 for (int i = 0; i < key.length(); ++i)
418 {
419 kdDebug() << "adding key " << *mk + key[i] << endl;
420 addons << *mk + key[i];
421 }
422 }
423 }
424 }
425 kdDebug() << "good" << endl;
426 *list += addons;
427
428 for (TQStringList::Iterator sli = list->begin(); sli != list->end(); ++sli)
429 {
430 kdDebug() << "KEYS: " << *sli << endl;
431 }
432*/
433 TQPtrListIterator<FlagRadioButton> it(cblist);
434 for (; it.current(); ++it) {
435 FlagRadioButton *fitem = it.current();
436 TQStringList::Iterator sli = list->find(fitem->flag);
437 if (sli != list->end()) {
438 fitem->setChecked(true);
439 list->remove(sli);
440 }
441 }
442}
443
444
445void FlagRadioButtonController::writeFlags(TQStringList *list)
446{
447 TQPtrListIterator<FlagRadioButton> it(cblist);
448 for (; it.current(); ++it) {
449 FlagRadioButton *fitem = it.current();
450 if (fitem->isChecked())
451 (*list) << fitem->flag;
452 }
453}
454
455 FlagEditController::FlagEditController( )
456{
457}
458
459 FlagEditController::~ FlagEditController( )
460{
461}
462
463void FlagEditController::readFlags( TQStringList * list )
464{
465 TQPtrListIterator<FlagListEdit> it(plist);
466 for (; it.current(); ++it) {
467 FlagListEdit *peitem = it.current();
468
469 TQStringList::Iterator sli = list->begin();
470 while (sli != list->end())
471 {
472 if ((*sli).startsWith(peitem->flag))
473 {
474 peitem->appendText((*sli).replace(TQRegExp(TQRegExp_escape(peitem->flag)),""));
475 sli = list->remove(sli);
476 continue;
477 }
478 ++sli;
479 }
480 }
481
482
483 TQPtrListIterator<FlagSpinEdit> it2(slist);
484 for (; it2.current(); ++it2) {
485 FlagSpinEdit *sitem = it2.current();
486
487 TQStringList::Iterator sli = list->begin();
488 while ( sli != list->end() )
489 {
490 if ((*sli).startsWith(sitem->flag))
491 {
492 sitem->setText((*sli).replace(TQRegExp(TQRegExp_escape(sitem->flag)),""));
493 sli = list->remove(sli);
494 continue;
495 }
496 ++sli;
497 }
498 }
499}
500
501void FlagEditController::writeFlags( TQStringList * list )
502{
503 TQPtrListIterator<FlagListEdit> it(plist);
504 for (; it.current(); ++it) {
505 FlagListEdit *pitem = it.current();
506 if (!pitem->isEmpty())
507 (*list) += pitem->flags();
508 }
509
510 TQPtrListIterator<FlagSpinEdit> it2(slist);
511 for (; it2.current(); ++it2) {
512 FlagSpinEdit *sitem = it2.current();
513 if (!sitem->isDefault())
514 (*list) << sitem->flags();
515 }
516}
517
518void FlagEditController::addListEdit( FlagListEdit * item )
519{
520 plist.append(item);
521}
522
523void FlagEditController::addSpinBox(FlagSpinEdit *item)
524{
525 slist.append(item);
526}
527
528
529FlagListEdit::FlagListEdit( TQWidget * parent, TQString listDelimiter, FlagEditController * controller,
530 const TQString & flagstr, const TQString & description)
531 : TQWidget(parent), delimiter(listDelimiter), flag(flagstr), m_description(description)
532{
533 TQBoxLayout *topLayout = new TQVBoxLayout(this, 0, 1);
534 topLayout->addWidget(new TQLabel(description, this));
535 TQBoxLayout *layout = new TQHBoxLayout(topLayout, KDialog::spacingHint());
536
537 edit = new KLineEdit(this);
538 layout->addWidget(edit);
539 if (! listDelimiter.isEmpty())
540 {
541 details = new TQPushButton("...", this);
542 details->setMaximumWidth(30);
543 connect(details, TQ_SIGNAL(clicked()), this, TQ_SLOT(showListDetails()));
544 layout->addWidget(details);
545 }
546
547 TQApplication::sendPostedEvents(this, TQEvent::ChildInserted);
548
549 TQToolTip::add(this, flagstr);
550 controller->addListEdit(this);
551}
552
553void FlagListEdit::setText( const TQString text )
554{
555 edit->setText(text);
556}
557
558bool FlagListEdit::isEmpty( )
559{
560 return edit->text().isEmpty();
561}
562
563TQString FlagListEdit::text( )
564{
565 return edit->text();
566}
567
568void FlagListEdit::showListDetails( )
569{
570 KDialogBase *dia = new KDialogBase(0, "flag_list_edit_dia", true, m_description,
571 KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true);
572
573 TQBoxLayout *diaLayout = new TQVBoxLayout(dia, KDialog::marginHint(), KDialog::spacingHint());
574 diaLayout->setAutoAdd(true);
575
576 KEditListBox *elb = new KEditListBox( "", dia );
577 dia->setMainWidget(elb);
578
579 elb->insertStringList(TQStringList::split(delimiter, text()));
580
581 if (dia->exec() == TQDialog::Accepted)
582 {
583 setText(elb->items().join(delimiter));
584 }
585
586 delete dia;
587}
588
589void FlagListEdit::appendText( const TQString text )
590{
591 edit->setText(edit->text() + (edit->text().isEmpty()?TQString(""):delimiter) + text);
592}
593
594TQStringList FlagListEdit::flags( )
595{
596 TQStringList fl = TQStringList::split(delimiter, text());
597 for (TQStringList::iterator it = fl.begin(); it != fl.end(); ++it)
598 {
599 (*it).prepend(flag);
600 }
601 return fl;
602}
603
604FlagSpinEdit::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)
606{
607 TQBoxLayout *topLayout = new TQVBoxLayout(this, 0, 1);
608 topLayout->addWidget(new TQLabel(description, this));
609
610 spb = new TQSpinBox(minVal, maxVal, incr, this);
611 spb->setValue(defaultVal);
612 topLayout->addWidget(spb);
613
614 TQApplication::sendPostedEvents(this, TQEvent::ChildInserted);
615
616 TQToolTip::add(this, flagstr);
617 controller->addSpinBox(this);
618}
619
620void FlagSpinEdit::setText( const TQString text )
621{
622 spb->setValue(text.toInt());
623}
624
625TQString FlagSpinEdit::text( )
626{
627 return TQString("%1").arg(spb->value());
628}
629
630TQString FlagSpinEdit::flags( )
631{
632 return flag + text();
633}
634
635bool FlagSpinEdit::isDefault( )
636{
637 if (spb->value() == m_defaultVal)
638 return true;
639 return false;
640}
641
642
643#include "flagboxes.moc"
FlagCheckBoxController
Controller for check box editors.
Definition flagboxes.h:246
FlagCheckBoxController::FlagCheckBoxController
FlagCheckBoxController(TQStringList multiKeys=TQStringList())
"multi key" is a list of options like -vxyz (-vx -vy -vz) multiKeys must contain a list of option nam...
Definition flagboxes.cpp:160
FlagCheckBox
Check box item holding a compiler flag.
Definition flagboxes.h:84
FlagEditController
Controller for flag editors.
Definition flagboxes.h:227
FlagListBox
List box item holding a compiler flag.
Definition flagboxes.h:69
FlagListEdit
List editor if list is a compiler flag.
Definition flagboxes.h:157
FlagListEdit::FlagListEdit
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.
Definition flagboxes.cpp:529
FlagListItem
List item holding a compiler flag.
Definition flagboxes.h:50
FlagPathEditController
Controller for path editors.
Definition flagboxes.h:211
FlagPathEdit
Path editor if path is a compiler flag.
Definition flagboxes.h:127
FlagPathEdit::FlagPathEdit
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.
Definition flagboxes.cpp:302
FlagRadioButtonController
Controller for radiobutton editors.
Definition flagboxes.h:268
FlagRadioButtonController::FlagRadioButtonController
FlagRadioButtonController(TQStringList multiKeys=TQStringList())
multiKeys is a list of options like -vxyz (-vx -vy -vz) multiKeys must contain a list of option names...
Definition flagboxes.cpp:389
FlagRadioButton
Radiobutton item holding an option of a compiler flag.
Definition flagboxes.h:111
FlagSpinEdit
Spin editor of a compiler flag.
Definition flagboxes.h:188
flagboxes.h
Support classes for compiler plugins.

KDevelop Widgets Library

Skip menu "KDevelop Widgets Library"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members

KDevelop Widgets Library

Skip menu "KDevelop Widgets Library"
  • buildtools
  •   lib
  •     base
  •     parsers
  •       autotools
  •       qmake
  •     widgets
  •   api
  • languages
  •   lib
  •     debugger
  •     designer_integration
  •     interfaces
  • lib
  •   catalog
  •   interfaces
  •     extensions
  •     external
  •     extras
  •   util
  •   widgets
  •     propeditor
  • parts
  •   documentation
  •     interfaces
  • src
  •   profileengine
  •     lib
Generated for KDevelop Widgets Library by doxygen 1.9.8
This website is maintained by Timothy Pearson.