• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdeui
 

tdeui

  • tdeui
tdeactionselector.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2002 Anders Lund <anders.lund@lund.tdcadsl.dk>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License version 2 as published by the Free Software Foundation.
7
8 This library is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 Library General Public License for more details.
12
13 You should have received a copy of the GNU Library General Public License
14 along with this library; see the file COPYING.LIB. If not, write to
15 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
16 Boston, MA 02110-1301, USA.
17*/
18
19
20#include "tdeactionselector.h"
21
22#include <tdelocale.h>
23#include <kiconloader.h>
24#include <kdialog.h> // for spacingHint()
25#include <kdebug.h>
26#include <tqapplication.h>
27#include <tqlistbox.h>
28#include <tqtoolbutton.h>
29#include <tqlabel.h>
30#include <tqlayout.h>
31#include <tqevent.h>
32#include <tqwhatsthis.h>
33
34class TDEActionSelectorPrivate {
35 public:
36 TQListBox *availableListBox, *selectedListBox;
37 TQToolButton *btnAdd, *btnRemove, *btnUp, *btnDown;
38 TQLabel *lAvailable, *lSelected;
39 bool moveOnDoubleClick, keyboardEnabled;
40 TDEActionSelector::ButtonIconSize iconSize;
41 TQString addIcon, removeIcon, upIcon, downIcon;
42 TDEActionSelector::InsertionPolicy availableInsertionPolicy, selectedInsertionPolicy;
43 bool showUpDownButtons;
44};
45
46//BEGIN Constructor/destructor
47
48TDEActionSelector::TDEActionSelector( TQWidget *parent, const char *name )
49 : TQWidget( parent, name )
50{
51 d = new TDEActionSelectorPrivate();
52 d->moveOnDoubleClick = true;
53 d->keyboardEnabled = true;
54 d->iconSize = SmallIcon;
55 d->addIcon = TQApplication::reverseLayout()? "back" : "forward";
56 d->removeIcon = TQApplication::reverseLayout()? "forward" : "back";
57 d->upIcon = "go-up";
58 d->downIcon = "go-down";
59 d->availableInsertionPolicy = Sorted;
60 d->selectedInsertionPolicy = BelowCurrent;
61 d->showUpDownButtons = true;
62
63 //int isz = IconSize( TDEIcon::Small );
64
65 TQHBoxLayout *lo = new TQHBoxLayout( this );
66 lo->setSpacing( KDialog::spacingHint() );
67
68 TQVBoxLayout *loAv = new TQVBoxLayout( lo );
69 d->lAvailable = new TQLabel( i18n("&Available:"), this );
70 loAv->addWidget( d->lAvailable );
71 d->availableListBox = new TQListBox( this );
72 loAv->addWidget( d->availableListBox );
73 d->lAvailable->setBuddy( d->availableListBox );
74
75 TQVBoxLayout *loHBtns = new TQVBoxLayout( lo );
76 loHBtns->addStretch( 1 );
77 d->btnAdd = new TQToolButton( this );
78 loHBtns->addWidget( d->btnAdd );
79 d->btnRemove = new TQToolButton( this );
80 loHBtns->addWidget( d->btnRemove );
81 loHBtns->addStretch( 1 );
82
83 TQVBoxLayout *loS = new TQVBoxLayout( lo );
84 d->lSelected = new TQLabel( i18n("&Selected:"), this );
85 loS->addWidget( d->lSelected );
86 d->selectedListBox = new TQListBox( this );
87 loS->addWidget( d->selectedListBox );
88 d->lSelected->setBuddy( d->selectedListBox );
89
90 TQVBoxLayout *loVBtns = new TQVBoxLayout( lo );
91 loVBtns->addStretch( 1 );
92 d->btnUp = new TQToolButton( this );
93 d->btnUp->setAutoRepeat( true );
94 loVBtns->addWidget( d->btnUp );
95 d->btnDown = new TQToolButton( this );
96 d->btnDown->setAutoRepeat( true );
97 loVBtns->addWidget( d->btnDown );
98 loVBtns->addStretch( 1 );
99
100 loadIcons();
101
102 connect( d->btnAdd, TQ_SIGNAL(clicked()), this, TQ_SLOT(buttonAddClicked()) );
103 connect( d->btnRemove, TQ_SIGNAL(clicked()), this, TQ_SLOT(buttonRemoveClicked()) );
104 connect( d->btnUp, TQ_SIGNAL(clicked()), this, TQ_SLOT(buttonUpClicked()) );
105 connect( d->btnDown, TQ_SIGNAL(clicked()), this, TQ_SLOT(buttonDownClicked()) );
106 connect( d->availableListBox, TQ_SIGNAL(doubleClicked(TQListBoxItem*)),
107 this, TQ_SLOT(itemDoubleClicked(TQListBoxItem*)) );
108 connect( d->selectedListBox, TQ_SIGNAL(doubleClicked(TQListBoxItem*)),
109 this, TQ_SLOT(itemDoubleClicked(TQListBoxItem*)) );
110 connect( d->availableListBox, TQ_SIGNAL(currentChanged(TQListBoxItem*)),
111 this, TQ_SLOT(slotCurrentChanged(TQListBoxItem *)) );
112 connect( d->selectedListBox, TQ_SIGNAL(currentChanged(TQListBoxItem*)),
113 this, TQ_SLOT(slotCurrentChanged(TQListBoxItem *)) );
114
115 d->availableListBox->installEventFilter( this );
116 d->selectedListBox->installEventFilter( this );
117}
118
119TDEActionSelector::~TDEActionSelector()
120{
121 delete d;
122}
123
124//END Constructor/destroctor
125
126//BEGIN Public Methods
127
128TQListBox *TDEActionSelector::availableListBox() const
129{
130 return d->availableListBox;
131}
132
133TQListBox *TDEActionSelector::selectedListBox() const
134{
135 return d->selectedListBox;
136}
137
138void TDEActionSelector::setButtonIcon( const TQString &icon, MoveButton button )
139{
140 switch ( button )
141 {
142 case ButtonAdd:
143 d->addIcon = icon;
144 d->btnAdd->setIconSet( SmallIconSet( icon, d->iconSize ) );
145 break;
146 case ButtonRemove:
147 d->removeIcon = icon;
148 d->btnRemove->setIconSet( SmallIconSet( icon, d->iconSize ) );
149 break;
150 case ButtonUp:
151 d->upIcon = icon;
152 d->btnUp->setIconSet( SmallIconSet( icon, d->iconSize ) );
153 break;
154 case ButtonDown:
155 d->downIcon = icon;
156 d->btnDown->setIconSet( SmallIconSet( icon, d->iconSize ) );
157 break;
158 default:
159 kdDebug(13001)<<"TDEActionSelector::setButtonIcon: DAINBREAD!"<<endl;
160 }
161}
162
163void TDEActionSelector::setButtonIconSet( const TQIconSet &iconset, MoveButton button )
164{
165 switch ( button )
166 {
167 case ButtonAdd:
168 d->btnAdd->setIconSet( iconset );
169 break;
170 case ButtonRemove:
171 d->btnRemove->setIconSet( iconset );
172 break;
173 case ButtonUp:
174 d->btnUp->setIconSet( iconset );
175 break;
176 case ButtonDown:
177 d->btnDown->setIconSet( iconset );
178 break;
179 default:
180 kdDebug(13001)<<"TDEActionSelector::setButtonIconSet: DAINBREAD!"<<endl;
181 }
182}
183
184void TDEActionSelector::setButtonTooltip( const TQString &tip, MoveButton button )
185{
186 switch ( button )
187 {
188 case ButtonAdd:
189 d->btnAdd->setTextLabel( tip );
190 break;
191 case ButtonRemove:
192 d->btnRemove->setTextLabel( tip );
193 break;
194 case ButtonUp:
195 d->btnUp->setTextLabel( tip );
196 break;
197 case ButtonDown:
198 d->btnDown->setTextLabel( tip );
199 break;
200 default:
201 kdDebug(13001)<<"TDEActionSelector::setButtonToolTip: DAINBREAD!"<<endl;
202 }
203}
204
205void TDEActionSelector::setButtonWhatsThis( const TQString &text, MoveButton button )
206{
207 switch ( button )
208 {
209 case ButtonAdd:
210 TQWhatsThis::add( d->btnAdd, text );
211 break;
212 case ButtonRemove:
213 TQWhatsThis::add( d->btnRemove, text );
214 break;
215 case ButtonUp:
216 TQWhatsThis::add( d->btnUp, text );
217 break;
218 case ButtonDown:
219 TQWhatsThis::add( d->btnDown, text );
220 break;
221 default:
222 kdDebug(13001)<<"TDEActionSelector::setButtonWhatsThis: DAINBREAD!"<<endl;
223 }
224}
225
226void TDEActionSelector::setButtonsEnabled()
227{
228 d->btnAdd->setEnabled( d->availableListBox->currentItem() > -1 );
229 d->btnRemove->setEnabled( d->selectedListBox->currentItem() > -1 );
230 d->btnUp->setEnabled( d->selectedListBox->currentItem() > 0 );
231 d->btnDown->setEnabled( d->selectedListBox->currentItem() > -1 &&
232 d->selectedListBox->currentItem() < (int)d->selectedListBox->count() - 1 );
233}
234
235//END Public Methods
236
237//BEGIN Properties
238
239bool TDEActionSelector::moveOnDoubleClick() const
240{
241 return d->moveOnDoubleClick;
242}
243
244void TDEActionSelector::setMoveOnDoubleClick( bool b )
245{
246 d->moveOnDoubleClick = b;
247}
248
249bool TDEActionSelector::keyboardEnabled() const
250{
251 return d->keyboardEnabled;
252}
253
254void TDEActionSelector::setKeyboardEnabled( bool b )
255{
256 d->keyboardEnabled = b;
257}
258
259TQString TDEActionSelector::availableLabel() const
260{
261 return d->lAvailable->text();
262}
263
264void TDEActionSelector::setAvailableLabel( const TQString &text )
265{
266 d->lAvailable->setText( text );
267}
268
269TQString TDEActionSelector::selectedLabel() const
270{
271 return d->lSelected->text();
272}
273
274void TDEActionSelector::setSelectedLabel( const TQString &text )
275{
276 d->lSelected->setText( text );
277}
278
279TDEActionSelector::ButtonIconSize TDEActionSelector::buttonIconSize() const
280{
281 return d->iconSize;
282}
283
284void TDEActionSelector::setButtonIconSize( ButtonIconSize size )
285{
286 d->iconSize = size;
287 // reload icons
288 loadIcons();
289}
290
291TDEActionSelector::InsertionPolicy TDEActionSelector::availableInsertionPolicy() const
292{
293 return d->availableInsertionPolicy;
294}
295
296void TDEActionSelector::setAvailableInsertionPolicy( InsertionPolicy p )
297{
298 d->availableInsertionPolicy = p;
299}
300
301TDEActionSelector::InsertionPolicy TDEActionSelector::selectedInsertionPolicy() const
302{
303 return d->selectedInsertionPolicy;
304}
305
306void TDEActionSelector::setSelectedInsertionPolicy( InsertionPolicy p )
307{
308 d->selectedInsertionPolicy = p;
309}
310
311bool TDEActionSelector::showUpDownButtons() const
312{
313 return d->showUpDownButtons;
314}
315
316void TDEActionSelector::setShowUpDownButtons( bool show )
317{
318 d->showUpDownButtons = show;
319 if ( show )
320 {
321 d->btnUp->show();
322 d->btnDown->show();
323 }
324 else
325 {
326 d->btnUp->hide();
327 d->btnDown->hide();
328 }
329}
330
331//END Properties
332
333//BEGIN Public Slots
334
335void TDEActionSelector::polish()
336{
337 setButtonsEnabled();
338}
339
340//END Public Slots
341
342//BEGIN Protected
343void TDEActionSelector::keyPressEvent( TQKeyEvent *e )
344{
345 if ( ! d->keyboardEnabled ) return;
346 if ( (e->state() & TQt::ControlButton) )
347 {
348 switch ( e->key() )
349 {
350 case Key_Right:
351 buttonAddClicked();
352 break;
353 case Key_Left:
354 buttonRemoveClicked();
355 break;
356 case Key_Up:
357 buttonUpClicked();
358 break;
359 case Key_Down:
360 buttonDownClicked();
361 break;
362 default:
363 e->ignore();
364 return;
365 }
366 }
367}
368
369bool TDEActionSelector::eventFilter( TQObject *o, TQEvent *e )
370{
371 if ( d->keyboardEnabled && e->type() == TQEvent::KeyPress )
372 {
373 if ( (((TQKeyEvent*)e)->state() & TQt::ControlButton) )
374 {
375 switch ( ((TQKeyEvent*)e)->key() )
376 {
377 case Key_Right:
378 buttonAddClicked();
379 break;
380 case Key_Left:
381 buttonRemoveClicked();
382 break;
383 case Key_Up:
384 buttonUpClicked();
385 break;
386 case Key_Down:
387 buttonDownClicked();
388 break;
389 default:
390 return TQWidget::eventFilter( o, e );
391 break;
392 }
393 return true;
394 }
395 else if ( o->inherits( "TQListBox" ) )
396 {
397 switch ( ((TQKeyEvent*)e)->key() )
398 {
399 case Key_Return:
400 case Key_Enter:
401 TQListBox *lb = (TQListBox*)o;
402 int index = lb->currentItem();
403 if ( index < 0 ) break;
404 moveItem( lb->item( index ) );
405 return true;
406 }
407 }
408 }
409 return TQWidget::eventFilter( o, e );
410}
411
412//END Protected
413
414//BEGIN Private Slots
415
416void TDEActionSelector::buttonAddClicked()
417{
418 // move all selected items from available to selected listbox
419 TQListBoxItem *item = d->availableListBox->firstItem();
420 while ( item ) {
421 if ( item->isSelected() ) {
422 d->availableListBox->takeItem( item );
423 d->selectedListBox->insertItem( item, insertionIndex( d->selectedListBox, d->selectedInsertionPolicy ) );
424 d->selectedListBox->setCurrentItem( item );
425 emit added( item );
426 item = d->availableListBox->firstItem();
427 } else
428 item = item->next();
429 }
430 if ( d->selectedInsertionPolicy == Sorted )
431 d->selectedListBox->sort();
432 d->selectedListBox->setFocus();
433}
434
435void TDEActionSelector::buttonRemoveClicked()
436{
437 // move all selected items from selected to available listbox
438 TQListBoxItem *item = d->selectedListBox->firstItem();
439 while ( item ) {
440 if ( item->isSelected() ) {
441 d->selectedListBox->takeItem( item );
442 d->availableListBox->insertItem( item, insertionIndex( d->availableListBox, d->availableInsertionPolicy ) );
443 d->availableListBox->setCurrentItem( item );
444 emit removed( item );
445 item = d->selectedListBox->firstItem();
446 } else
447 item = item->next();
448 }
449 if ( d->availableInsertionPolicy == Sorted )
450 d->availableListBox->sort();
451 d->availableListBox->setFocus();
452}
453
454void TDEActionSelector::buttonUpClicked()
455{
456 int c = d->selectedListBox->currentItem();
457 if ( c < 1 ) return;
458 TQListBoxItem *item = d->selectedListBox->item( c );
459 d->selectedListBox->takeItem( item );
460 d->selectedListBox->insertItem( item, c-1 );
461 d->selectedListBox->setCurrentItem( item );
462 emit movedUp( item );
463}
464
465void TDEActionSelector::buttonDownClicked()
466{
467 int c = d->selectedListBox->currentItem();
468 if ( c < 0 || c == int( d->selectedListBox->count() ) - 1 ) return;
469 TQListBoxItem *item = d->selectedListBox->item( c );
470 d->selectedListBox->takeItem( item );
471 d->selectedListBox->insertItem( item, c+1 );
472 d->selectedListBox->setCurrentItem( item );
473 emit movedDown( item );
474}
475
476void TDEActionSelector::itemDoubleClicked( TQListBoxItem *item )
477{
478 if ( d->moveOnDoubleClick )
479 moveItem( item );
480}
481
482//END Private Slots
483
484//BEGIN Private Methods
485
486void TDEActionSelector::loadIcons()
487{
488 d->btnAdd->setIconSet( SmallIconSet( d->addIcon, d->iconSize ) );
489 d->btnRemove->setIconSet( SmallIconSet( d->removeIcon, d->iconSize ) );
490 d->btnUp->setIconSet( SmallIconSet( d->upIcon, d->iconSize ) );
491 d->btnDown->setIconSet( SmallIconSet( d->downIcon, d->iconSize ) );
492}
493
494void TDEActionSelector::moveItem( TQListBoxItem *item )
495{
496 TQListBox *lbFrom = item->listBox();
497 TQListBox *lbTo;
498 if ( lbFrom == d->availableListBox )
499 lbTo = d->selectedListBox;
500 else if ( lbFrom == d->selectedListBox )
501 lbTo = d->availableListBox;
502 else //?! somewhat unlikely...
503 return;
504
505 InsertionPolicy p = ( lbTo == d->availableListBox ) ?
506 d->availableInsertionPolicy : d->selectedInsertionPolicy;
507
508 lbFrom->takeItem( item );
509 lbTo->insertItem( item, insertionIndex( lbTo, p ) );
510 lbTo->setFocus();
511 lbTo->setCurrentItem( item );
512
513 if ( p == Sorted )
514 lbTo->sort();
515 if ( lbTo == d->selectedListBox )
516 emit added( item );
517 else
518 emit removed( item );
519}
520
521int TDEActionSelector::insertionIndex( TQListBox *lb, InsertionPolicy policy )
522{
523 int index;
524 switch ( policy )
525 {
526 case BelowCurrent:
527 index = lb->currentItem();
528 if ( index > -1 ) index += 1;
529 break;
530 case AtTop:
531 index = 0;
532 break;
533 default:
534 index = -1;
535 }
536 return index;
537}
538
539//END Private Methods
540#include "tdeactionselector.moc"
KDialog::spacingHint
static int spacingHint()
Return the number of pixels you shall use between widgets inside a dialog according to the KDE standa...
Definition: kdialog.cpp:110
TDEActionSelector::movedUp
void movedUp(TQListBoxItem *item)
Emitted when an item is moved upwards in the "selected" listbox.
TDEActionSelector::setSelectedInsertionPolicy
void setSelectedInsertionPolicy(InsertionPolicy policy)
Sets the insertion policy for the selected listbox.
Definition: tdeactionselector.cpp:306
TDEActionSelector::InsertionPolicy
InsertionPolicy
This enum defines policies for where to insert moved items in a listbox.
Definition: tdeactionselector.h:145
TDEActionSelector::MoveButton
MoveButton
This enum indentifies the moving buttons.
Definition: tdeactionselector.h:108
TDEActionSelector::showUpDownButtons
bool showUpDownButtons() const
Definition: tdeactionselector.cpp:311
TDEActionSelector::setAvailableLabel
void setAvailableLabel(const TQString &text)
Sets the label for the available items listbox to text.
Definition: tdeactionselector.cpp:264
TDEActionSelector::movedDown
void movedDown(TQListBoxItem *item)
Emitted when an item is moved downwards in the "selected" listbox.
TDEActionSelector::keyPressEvent
void keyPressEvent(TQKeyEvent *)
Reimplamented for internal reasons.
Definition: tdeactionselector.cpp:343
TDEActionSelector::selectedLabel
TQString selectedLabel() const
Definition: tdeactionselector.cpp:269
TDEActionSelector::setButtonWhatsThis
void setButtonWhatsThis(const TQString &text, MoveButton button)
Sets the whatsthis help for button button to text.
Definition: tdeactionselector.cpp:205
TDEActionSelector::setMoveOnDoubleClick
void setMoveOnDoubleClick(bool enable)
Sets moveOnDoubleClick to enable.
Definition: tdeactionselector.cpp:244
TDEActionSelector::setButtonsEnabled
void setButtonsEnabled()
Sets the enabled state of all moving buttons to reflect the current options.
Definition: tdeactionselector.cpp:226
TDEActionSelector::setButtonIconSet
void setButtonIconSet(const TQIconSet &iconset, MoveButton button)
Sets the iconset for button button to iconset.
Definition: tdeactionselector.cpp:163
TDEActionSelector::polish
void polish()
Emitted when an item is moved to the "selected" listbox.
Definition: tdeactionselector.cpp:335
TDEActionSelector::moveOnDoubleClick
bool moveOnDoubleClick() const
Definition: tdeactionselector.cpp:239
TDEActionSelector::setSelectedLabel
void setSelectedLabel(const TQString &text)
Sets the label for the selected items listbox to text.
Definition: tdeactionselector.cpp:274
TDEActionSelector::setButtonIconSize
void setButtonIconSize(ButtonIconSize size)
Sets the button icon size.
Definition: tdeactionselector.cpp:284
TDEActionSelector::keyboardEnabled
bool keyboardEnabled() const
Definition: tdeactionselector.cpp:249
TDEActionSelector::buttonIconSize
ButtonIconSize buttonIconSize() const
Definition: tdeactionselector.cpp:279
TDEActionSelector::setAvailableInsertionPolicy
void setAvailableInsertionPolicy(InsertionPolicy policy)
Sets the insertion policy for the available listbox.
Definition: tdeactionselector.cpp:296
TDEActionSelector::selectedInsertionPolicy
InsertionPolicy selectedInsertionPolicy() const
Definition: tdeactionselector.cpp:301
TDEActionSelector::setKeyboardEnabled
void setKeyboardEnabled(bool enable)
Sets the keyboard enabled depending on enable.
Definition: tdeactionselector.cpp:254
TDEActionSelector::setButtonIcon
void setButtonIcon(const TQString &icon, MoveButton button)
Sets the pixmap of the button button to icon.
Definition: tdeactionselector.cpp:138
TDEActionSelector::eventFilter
bool eventFilter(TQObject *, TQEvent *)
Reimplemented for internal reasons.
Definition: tdeactionselector.cpp:369
TDEActionSelector::availableLabel
TQString availableLabel() const
Definition: tdeactionselector.cpp:259
TDEActionSelector::ButtonIconSize
ButtonIconSize
This enum identifies the icon sizes, used for the move buttons.
Definition: tdeactionselector.h:125
TDEActionSelector::added
void added(TQListBoxItem *item)
Emitted when an item is moved to the "selected" listbox.
TDEActionSelector::availableListBox
TQListBox * availableListBox() const
Definition: tdeactionselector.cpp:128
TDEActionSelector::removed
void removed(TQListBoxItem *item)
Emitted when an item is moved out of the "selected" listbox.
TDEActionSelector::setButtonTooltip
void setButtonTooltip(const TQString &tip, MoveButton button)
Sets the tooltip for the button button to tip.
Definition: tdeactionselector.cpp:184
TDEActionSelector::availableInsertionPolicy
InsertionPolicy availableInsertionPolicy() const
Definition: tdeactionselector.cpp:291
TDEActionSelector::setShowUpDownButtons
void setShowUpDownButtons(bool show)
Sets wheather the Up and Down buttons should be displayed according to show.
Definition: tdeactionselector.cpp:316
TDEActionSelector::selectedListBox
TQListBox * selectedListBox() const
Definition: tdeactionselector.cpp:133
endl
kndbgstream & endl(kndbgstream &s)
kdDebug
kdbgstream kdDebug(int area=0)
TDEStdAccel::name
TQString name(StdAccel id)
tdelocale.h

tdeui

Skip menu "tdeui"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

tdeui

Skip menu "tdeui"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdeui by doxygen 1.9.4
This website is maintained by Timothy Pearson.