• 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
39 TQString 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 
54 class FlagListToolTip : public TQToolTip
55 {
56 public:
57  FlagListToolTip(TQWidget *parent);
58 protected:
59  void maybeTip(const TQPoint &p);
60 };
61 
62 
63 FlagListToolTip::FlagListToolTip(TQWidget *parent)
64  : TQToolTip(parent)
65 {}
66 
67 
68 void 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 
79 FlagListItem::FlagListItem(FlagListBox *parent, const TQString &flagstr,
80  const TQString &description)
81  : TQCheckListItem(parent, flagstr, TQCheckListItem::CheckBox),
82  flag(flagstr), desc(description)
83 {}
84 
85 
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)
90 {}
91 
92 
93 FlagListBox::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 
103 void 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 
122 void 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 
133 FlagCheckBox::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 
142 FlagCheckBox::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 
151 FlagCheckBox::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 
160 FlagCheckBoxController::FlagCheckBoxController(TQStringList multiKeys)
161  :m_multiKeys(multiKeys)
162 {
163 }
164 
165 
166 void FlagCheckBoxController::addCheckBox(FlagCheckBox *item)
167 {
168  cblist.append(item);
169 }
170 
171 
172 void 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 
233 void 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 
259 void 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 
287 void 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 
297 void FlagPathEditController::addPathEdit( FlagPathEdit * item )
298 {
299  plist.append(item);
300 }
301 
302 FlagPathEdit::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, TQT_SIGNAL(clicked()), this, TQT_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 
333 void 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 
358 void FlagPathEdit::setText( const TQString text )
359 {
360  if (delimiter.isEmpty())
361  url->setURL(text);
362  else
363  edit->setText(text);
364 }
365 
366 TQString FlagPathEdit::text( )
367 {
368  if (delimiter.isEmpty())
369  return url->url();
370  else
371  return edit->text();
372 }
373 
374 bool FlagPathEdit::isEmpty( )
375 {
376  if (delimiter.isEmpty())
377  return url->url().isEmpty();
378  else
379  return edit->text().isEmpty();
380 }
381 
382 FlagRadioButton::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 
389 FlagRadioButtonController::FlagRadioButtonController(TQStringList multiKeys)
390  :m_multiKeys(multiKeys)
391 {
392 }
393 
394 void FlagRadioButtonController::addRadioButton(FlagRadioButton *item)
395 {
396  cblist.append(item);
397 }
398 
399 
400 void 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 
445 void 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 
463 void 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 
501 void 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 
518 void FlagEditController::addListEdit( FlagListEdit * item )
519 {
520  plist.append(item);
521 }
522 
523 void FlagEditController::addSpinBox(FlagSpinEdit *item)
524 {
525  slist.append(item);
526 }
527 
528 
529 FlagListEdit::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, TQT_SIGNAL(clicked()), this, TQT_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 
553 void FlagListEdit::setText( const TQString text )
554 {
555  edit->setText(text);
556 }
557 
558 bool FlagListEdit::isEmpty( )
559 {
560  return edit->text().isEmpty();
561 }
562 
563 TQString FlagListEdit::text( )
564 {
565  return edit->text();
566 }
567 
568 void 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 
589 void FlagListEdit::appendText( const TQString text )
590 {
591  edit->setText(edit->text() + (edit->text().isEmpty()?TQString(""):delimiter) + text);
592 }
593 
594 TQStringList 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 
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)
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 
620 void FlagSpinEdit::setText( const TQString text )
621 {
622  spb->setValue(text.toInt());
623 }
624 
625 TQString FlagSpinEdit::text( )
626 {
627  return TQString("%1").arg(spb->value());
628 }
629 
630 TQString FlagSpinEdit::flags( )
631 {
632  return flag + text();
633 }
634 
635 bool FlagSpinEdit::isDefault( )
636 {
637  if (spb->value() == m_defaultVal)
638  return true;
639  return false;
640 }
641 
642 
643 #include "flagboxes.moc"
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
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
FlagPathEditController
Controller for path editors.
Definition: flagboxes.h:210
FlagListBox
List box item holding a compiler flag.
Definition: flagboxes.h:68
FlagListEdit
List editor if list is a compiler flag.
Definition: flagboxes.h:156
FlagCheckBox
Check box item holding a compiler flag.
Definition: flagboxes.h:83
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
FlagSpinEdit
Spin editor of a compiler flag.
Definition: flagboxes.h:187
FlagRadioButton
Radiobutton item holding an option of a compiler flag.
Definition: flagboxes.h:110
FlagCheckBoxController
Controller for check box editors.
Definition: flagboxes.h:245
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
FlagRadioButtonController
Controller for radiobutton editors.
Definition: flagboxes.h:267
flagboxes.h
Support classes for compiler plugins.
FlagListItem
List item holding a compiler flag.
Definition: flagboxes.h:49
FlagEditController
Controller for flag editors.
Definition: flagboxes.h:226
FlagPathEdit
Path editor if path is a compiler flag.
Definition: flagboxes.h:126

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.8.13
This website is maintained by Timothy Pearson.