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