• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdelibs-4.14.38 API Reference
  • KDE Home
  • Contact Us
 

KDEUI

  • kdeui
  • widgets
kactionselector.cpp
Go to the documentation of this file.
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 "kactionselector.h"
21
22#include <klocale.h>
23#include <kicon.h>
24#include <kdebug.h>
25#include <QtGui/QApplication>
26#include <QtGui/QToolButton>
27#include <QtGui/QLabel>
28#include <QtGui/QLayout>
29#include <QtGui/QActionEvent>
30#include <QListWidget>
31
32class KActionSelectorPrivate {
33 public:
34 KActionSelectorPrivate(KActionSelector *q): q(q) {}
35
36 KActionSelector *q;
37 QListWidget *availableListWidget, *selectedListWidget;
38 QToolButton *btnAdd, *btnRemove, *btnUp, *btnDown;
39 QLabel *lAvailable, *lSelected;
40 bool moveOnDoubleClick : 1;
41 bool keyboardEnabled : 1;
42 bool showUpDownButtons : 1;
43 QString addIcon, removeIcon, upIcon, downIcon;
44 KActionSelector::InsertionPolicy availableInsertionPolicy, selectedInsertionPolicy;
45
49 void moveItem( QListWidgetItem *item );
50
54 void loadIcons();
55
63 int insertionIndex( QListWidget *lb, KActionSelector::InsertionPolicy policy );
64
69 int selectedRowIndex( QListWidget *lb );
70
71 void buttonAddClicked();
72 void buttonRemoveClicked();
73 void buttonUpClicked();
74 void buttonDownClicked();
75 void itemDoubleClicked( QListWidgetItem *item );
76 void slotCurrentChanged( QListWidgetItem * )
77 { q->setButtonsEnabled(); }
78};
79
80//BEGIN Constructor/destructor
81
82KActionSelector::KActionSelector( QWidget *parent )
83 : QWidget( parent )
84 , d( new KActionSelectorPrivate(this) )
85{
86 d->moveOnDoubleClick = true;
87 d->keyboardEnabled = true;
88 d->addIcon = QApplication::isRightToLeft()? "go-previous" : "go-next";
89 d->removeIcon = QApplication::isRightToLeft()? "go-next" : "go-previous";
90 d->upIcon = "go-up";
91 d->downIcon = "go-down";
92 d->availableInsertionPolicy = Sorted;
93 d->selectedInsertionPolicy = BelowCurrent;
94 d->showUpDownButtons = true;
95
96 QHBoxLayout *lo = new QHBoxLayout( this );
97 lo->setMargin( 0 );
98
99 QVBoxLayout *loAv = new QVBoxLayout();
100 lo->addLayout( loAv );
101 d->lAvailable = new QLabel( i18n("&Available:"), this );
102 loAv->addWidget( d->lAvailable );
103 d->availableListWidget = new QListWidget( this );
104 loAv->addWidget( d->availableListWidget );
105 d->lAvailable->setBuddy( d->availableListWidget );
106
107 QVBoxLayout *loHBtns = new QVBoxLayout();
108 lo->addLayout( loHBtns );
109 loHBtns->addStretch( 1 );
110 d->btnAdd = new QToolButton( this );
111 loHBtns->addWidget( d->btnAdd );
112 d->btnRemove = new QToolButton( this );
113 loHBtns->addWidget( d->btnRemove );
114 loHBtns->addStretch( 1 );
115
116 QVBoxLayout *loS = new QVBoxLayout();
117 lo->addLayout( loS );
118 d->lSelected = new QLabel( i18n("&Selected:"), this );
119 loS->addWidget( d->lSelected );
120 d->selectedListWidget = new QListWidget( this );
121 loS->addWidget( d->selectedListWidget );
122 d->lSelected->setBuddy( d->selectedListWidget );
123
124 QVBoxLayout *loVBtns = new QVBoxLayout();
125 lo->addLayout( loVBtns );
126 loVBtns->addStretch( 1 );
127 d->btnUp = new QToolButton( this );
128 d->btnUp->setAutoRepeat( true );
129 loVBtns->addWidget( d->btnUp );
130 d->btnDown = new QToolButton( this );
131 d->btnDown->setAutoRepeat( true );
132 loVBtns->addWidget( d->btnDown );
133 loVBtns->addStretch( 1 );
134
135 d->loadIcons();
136
137 connect( d->btnAdd, SIGNAL(clicked()), this, SLOT(buttonAddClicked()) );
138 connect( d->btnRemove, SIGNAL(clicked()), this, SLOT(buttonRemoveClicked()) );
139 connect( d->btnUp, SIGNAL(clicked()), this, SLOT(buttonUpClicked()) );
140 connect( d->btnDown, SIGNAL(clicked()), this, SLOT(buttonDownClicked()) );
141 connect( d->availableListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
142 this, SLOT(itemDoubleClicked(QListWidgetItem*)) );
143 connect( d->selectedListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
144 this, SLOT(itemDoubleClicked(QListWidgetItem*)) );
145 connect( d->availableListWidget, SIGNAL(itemSelectionChanged()), this, SLOT(polish()) );
146 connect( d->selectedListWidget, SIGNAL(itemSelectionChanged()), this, SLOT(polish()) );
147
148 d->availableListWidget->installEventFilter( this );
149 d->selectedListWidget->installEventFilter( this );
150 setButtonsEnabled();
151}
152
153KActionSelector::~KActionSelector()
154{
155 delete d;
156}
157
158//END Constructor/destroctor
159
160//BEGIN Public Methods
161
162QListWidget *KActionSelector::availableListWidget() const
163{
164 return d->availableListWidget;
165}
166
167QListWidget *KActionSelector::selectedListWidget() const
168{
169 return d->selectedListWidget;
170}
171
172void KActionSelector::setButtonIcon( const QString &icon, MoveButton button )
173{
174 switch ( button )
175 {
176 case ButtonAdd:
177 d->addIcon = icon;
178 d->btnAdd->setIcon( KIcon( icon ) );
179 break;
180 case ButtonRemove:
181 d->removeIcon = icon;
182 d->btnRemove->setIcon( KIcon( icon ) );
183 break;
184 case ButtonUp:
185 d->upIcon = icon;
186 d->btnUp->setIcon( KIcon( icon ) );
187 break;
188 case ButtonDown:
189 d->downIcon = icon;
190 d->btnDown->setIcon( KIcon( icon ) );
191 break;
192 default:
193 kDebug(13001)<<"KActionSelector::setButtonIcon: DAINBREAD!";
194 }
195}
196
197void KActionSelector::setButtonIconSet( const QIcon &iconset, MoveButton button )
198{
199 switch ( button )
200 {
201 case ButtonAdd:
202 d->btnAdd->setIcon( iconset );
203 break;
204 case ButtonRemove:
205 d->btnRemove->setIcon( iconset );
206 break;
207 case ButtonUp:
208 d->btnUp->setIcon( iconset );
209 break;
210 case ButtonDown:
211 d->btnDown->setIcon( iconset );
212 break;
213 default:
214 kDebug(13001)<<"KActionSelector::setButtonIconSet: DAINBREAD!";
215 }
216}
217
218void KActionSelector::setButtonTooltip( const QString &tip, MoveButton button )
219{
220 switch ( button )
221 {
222 case ButtonAdd:
223 d->btnAdd->setText( tip );
224 d->btnAdd->setToolTip( tip );
225 break;
226 case ButtonRemove:
227 d->btnRemove->setText( tip );
228 d->btnRemove->setToolTip( tip );
229 break;
230 case ButtonUp:
231 d->btnUp->setText( tip );
232 d->btnUp->setToolTip( tip );
233 break;
234 case ButtonDown:
235 d->btnDown->setText( tip );
236 d->btnDown->setToolTip( tip );
237 break;
238 default:
239 kDebug(13001)<<"KActionSelector::setButtonToolTip: DAINBREAD!";
240 }
241}
242
243void KActionSelector::setButtonWhatsThis( const QString &text, MoveButton button )
244{
245 switch ( button )
246 {
247 case ButtonAdd:
248 d->btnAdd->setWhatsThis(text );
249 break;
250 case ButtonRemove:
251 d->btnRemove->setWhatsThis(text );
252 break;
253 case ButtonUp:
254 d->btnUp->setWhatsThis(text );
255 break;
256 case ButtonDown:
257 d->btnDown->setWhatsThis(text );
258 break;
259 default:
260 kDebug(13001)<<"KActionSelector::setButtonWhatsThis: DAINBREAD!";
261 }
262}
263
264void KActionSelector::setButtonsEnabled()
265{
266 d->btnAdd->setEnabled( d->selectedRowIndex(d->availableListWidget) > -1 );
267 d->btnRemove->setEnabled( d->selectedRowIndex(d->selectedListWidget) > -1 );
268 d->btnUp->setEnabled( d->selectedRowIndex(d->selectedListWidget) > 0 );
269 d->btnDown->setEnabled( d->selectedRowIndex(d->selectedListWidget) > -1 &&
270 d->selectedRowIndex(d->selectedListWidget) < d->selectedListWidget->count() - 1 );
271}
272
273//END Public Methods
274
275//BEGIN Properties
276
277bool KActionSelector::moveOnDoubleClick() const
278{
279 return d->moveOnDoubleClick;
280}
281
282void KActionSelector::setMoveOnDoubleClick( bool b )
283{
284 d->moveOnDoubleClick = b;
285}
286
287bool KActionSelector::keyboardEnabled() const
288{
289 return d->keyboardEnabled;
290}
291
292void KActionSelector::setKeyboardEnabled( bool b )
293{
294 d->keyboardEnabled = b;
295}
296
297QString KActionSelector::availableLabel() const
298{
299 return d->lAvailable->text();
300}
301
302void KActionSelector::setAvailableLabel( const QString &text )
303{
304 d->lAvailable->setText( text );
305}
306
307QString KActionSelector::selectedLabel() const
308{
309 return d->lSelected->text();
310}
311
312void KActionSelector::setSelectedLabel( const QString &text )
313{
314 d->lSelected->setText( text );
315}
316
317KActionSelector::InsertionPolicy KActionSelector::availableInsertionPolicy() const
318{
319 return d->availableInsertionPolicy;
320}
321
322void KActionSelector::setAvailableInsertionPolicy( InsertionPolicy p )
323{
324 d->availableInsertionPolicy = p;
325}
326
327KActionSelector::InsertionPolicy KActionSelector::selectedInsertionPolicy() const
328{
329 return d->selectedInsertionPolicy;
330}
331
332void KActionSelector::setSelectedInsertionPolicy( InsertionPolicy p )
333{
334 d->selectedInsertionPolicy = p;
335}
336
337bool KActionSelector::showUpDownButtons() const
338{
339 return d->showUpDownButtons;
340}
341
342void KActionSelector::setShowUpDownButtons( bool show )
343{
344 d->showUpDownButtons = show;
345 if ( show )
346 {
347 d->btnUp->show();
348 d->btnDown->show();
349 }
350 else
351 {
352 d->btnUp->hide();
353 d->btnDown->hide();
354 }
355}
356
357//END Properties
358
359//BEGIN Public Slots
360
361void KActionSelector::polish()
362{
363 setButtonsEnabled();
364}
365
366//END Public Slots
367
368//BEGIN Protected
369void KActionSelector::keyPressEvent( QKeyEvent *e )
370{
371 if ( ! d->keyboardEnabled ) return;
372 if ( (e->modifiers() & Qt::ControlModifier) )
373 {
374 switch ( e->key() )
375 {
376 case Qt::Key_Right:
377 d->buttonAddClicked();
378 break;
379 case Qt::Key_Left:
380 d->buttonRemoveClicked();
381 break;
382 case Qt::Key_Up:
383 d->buttonUpClicked();
384 break;
385 case Qt::Key_Down:
386 d->buttonDownClicked();
387 break;
388 default:
389 e->ignore();
390 return;
391 }
392 }
393}
394
395bool KActionSelector::eventFilter( QObject *o, QEvent *e )
396{
397 if ( d->keyboardEnabled && e->type() == QEvent::KeyPress )
398 {
399 if ( (((QKeyEvent*)e)->modifiers() & Qt::ControlModifier) )
400 {
401 switch ( ((QKeyEvent*)e)->key() )
402 {
403 case Qt::Key_Right:
404 d->buttonAddClicked();
405 break;
406 case Qt::Key_Left:
407 d->buttonRemoveClicked();
408 break;
409 case Qt::Key_Up:
410 d->buttonUpClicked();
411 break;
412 case Qt::Key_Down:
413 d->buttonDownClicked();
414 break;
415 default:
416 return QWidget::eventFilter( o, e );
417 break;
418 }
419 return true;
420 }
421 else if ( QListWidget *lb = qobject_cast<QListWidget*>(o) )
422 {
423 switch ( ((QKeyEvent*)e)->key() )
424 {
425 case Qt::Key_Return:
426 case Qt::Key_Enter:
427 int index = lb->currentRow();
428 if ( index < 0 ) break;
429 d->moveItem( lb->item( index ) );
430 return true;
431 }
432 }
433 }
434 return QWidget::eventFilter( o, e );
435}
436
437//END Protected
438
439//BEGIN Private Slots
440
441void KActionSelectorPrivate::buttonAddClicked()
442{
443 // move all selected items from available to selected listbox
444 QList<QListWidgetItem *> list = availableListWidget->selectedItems();
445 foreach (QListWidgetItem* item, list) {
446 availableListWidget->takeItem( availableListWidget->row( item ) );
447 selectedListWidget->insertItem( insertionIndex( selectedListWidget, selectedInsertionPolicy ), item );
448 selectedListWidget->setCurrentItem( item );
449 emit q->added( item );
450 }
451 if ( selectedInsertionPolicy == KActionSelector::Sorted )
452 selectedListWidget->sortItems();
453 selectedListWidget->setFocus();
454}
455
456void KActionSelectorPrivate::buttonRemoveClicked()
457{
458 // move all selected items from selected to available listbox
459 QList<QListWidgetItem *> list = selectedListWidget->selectedItems();
460 foreach (QListWidgetItem* item, list) {
461 selectedListWidget->takeItem( selectedListWidget->row( item ) );
462 availableListWidget->insertItem( insertionIndex( availableListWidget, availableInsertionPolicy ), item );
463 availableListWidget->setCurrentItem( item );
464 emit q->removed( item );
465 }
466 if ( availableInsertionPolicy == KActionSelector::Sorted )
467 availableListWidget->sortItems();
468 availableListWidget->setFocus();
469}
470
471void KActionSelectorPrivate::buttonUpClicked()
472{
473 int c = selectedRowIndex(selectedListWidget);
474 if ( c < 1 ) return;
475 QListWidgetItem *item = selectedListWidget->item( c );
476 selectedListWidget->takeItem( c );
477 selectedListWidget->insertItem( c-1, item );
478 selectedListWidget->setCurrentItem( item );
479 emit q->movedUp( item );
480}
481
482void KActionSelectorPrivate::buttonDownClicked()
483{
484 int c = selectedRowIndex(selectedListWidget);
485 if ( c < 0 || c == selectedListWidget->count() - 1 ) return;
486 QListWidgetItem *item = selectedListWidget->item( c );
487 selectedListWidget->takeItem( c );
488 selectedListWidget->insertItem( c+1, item );
489 selectedListWidget->setCurrentItem( item );
490 emit q->movedDown( item );
491}
492
493void KActionSelectorPrivate::itemDoubleClicked( QListWidgetItem *item )
494{
495 if ( moveOnDoubleClick )
496 moveItem( item );
497}
498
499//END Private Slots
500
501//BEGIN Private Methods
502
503void KActionSelectorPrivate::loadIcons()
504{
505 btnAdd->setIcon( KIcon( addIcon ) );
506 btnRemove->setIcon( KIcon( removeIcon ) );
507 btnUp->setIcon( KIcon( upIcon ) );
508 btnDown->setIcon( KIcon( downIcon ) );
509}
510
511void KActionSelectorPrivate::moveItem( QListWidgetItem *item )
512{
513 QListWidget *lbFrom = item->listWidget();
514 QListWidget *lbTo;
515 if ( lbFrom == availableListWidget )
516 lbTo = selectedListWidget;
517 else if ( lbFrom == selectedListWidget )
518 lbTo = availableListWidget;
519 else //?! somewhat unlikely...
520 return;
521
522 KActionSelector::InsertionPolicy p = ( lbTo == availableListWidget ) ?
523 availableInsertionPolicy : selectedInsertionPolicy;
524
525 lbFrom->takeItem( lbFrom->row( item ) );
526 lbTo->insertItem( insertionIndex( lbTo, p ), item );
527 lbTo->setFocus();
528 lbTo->setCurrentItem( item );
529
530 if ( p == KActionSelector::Sorted )
531 lbTo->sortItems();
532 if ( lbTo == selectedListWidget )
533 emit q->added( item );
534 else
535 emit q->removed( item );
536}
537
538int KActionSelectorPrivate::insertionIndex( QListWidget *lb, KActionSelector::InsertionPolicy policy )
539{
540 int index;
541 switch ( policy )
542 {
543 case KActionSelector::BelowCurrent:
544 index = lb->currentRow();
545 if ( index > -1 ) index += 1;
546 break;
547 case KActionSelector::AtTop:
548 index = 0;
549 break;
550 default:
551 index = -1;
552 }
553 return index;
554}
555
556int KActionSelectorPrivate::selectedRowIndex( QListWidget *lb )
557{
558 QList<QListWidgetItem *> list = lb->selectedItems();
559 if (list.isEmpty()) {
560 return -1;
561 }
562 return lb->row(list.at(0));
563}
564
565//END Private Methods
566#include "kactionselector.moc"
KActionSelector
A widget for selecting and arranging actions/objects.
Definition: kactionselector.h:80
KActionSelector::selectedLabel
QString selectedLabel
Definition: kactionselector.h:86
KActionSelector::movedUp
void movedUp(QListWidgetItem *item)
Emitted when an item is moved upwards in the "selected" listbox.
KActionSelector::keyPressEvent
void keyPressEvent(QKeyEvent *)
Reimplamented for internal reasons.
Definition: kactionselector.cpp:369
KActionSelector::KActionSelector
KActionSelector(QWidget *parent=0)
Definition: kactionselector.cpp:82
KActionSelector::setShowUpDownButtons
void setShowUpDownButtons(bool show)
Sets whether the Up and Down buttons should be displayed according to show.
Definition: kactionselector.cpp:342
KActionSelector::InsertionPolicy
InsertionPolicy
This enum defines policies for where to insert moved items in a listbox.
Definition: kactionselector.h:127
KActionSelector::Sorted
@ Sorted
Definition: kactionselector.h:129
KActionSelector::AtTop
@ AtTop
Definition: kactionselector.h:130
KActionSelector::BelowCurrent
@ BelowCurrent
Definition: kactionselector.h:128
KActionSelector::MoveButton
MoveButton
This enum indentifies the moving buttons.
Definition: kactionselector.h:108
KActionSelector::ButtonUp
@ ButtonUp
Definition: kactionselector.h:111
KActionSelector::ButtonRemove
@ ButtonRemove
Definition: kactionselector.h:110
KActionSelector::ButtonDown
@ ButtonDown
Definition: kactionselector.h:112
KActionSelector::ButtonAdd
@ ButtonAdd
Definition: kactionselector.h:109
KActionSelector::availableInsertionPolicy
InsertionPolicy availableInsertionPolicy
Definition: kactionselector.h:87
KActionSelector::movedDown
void movedDown(QListWidgetItem *item)
Emitted when an item is moved downwards in the "selected" listbox.
KActionSelector::setSelectedLabel
void setSelectedLabel(const QString &text)
Sets the label for the selected items listbox to text.
Definition: kactionselector.cpp:312
KActionSelector::selectedInsertionPolicy
InsertionPolicy selectedInsertionPolicy
Definition: kactionselector.h:88
KActionSelector::polish
void polish()
Emitted when an item is moved to the "selected" listbox.
Definition: kactionselector.cpp:361
KActionSelector::setSelectedInsertionPolicy
void setSelectedInsertionPolicy(InsertionPolicy policy)
Sets the insertion policy for the selected listbox.
Definition: kactionselector.cpp:332
KActionSelector::~KActionSelector
~KActionSelector()
Definition: kactionselector.cpp:153
KActionSelector::removed
void removed(QListWidgetItem *item)
Emitted when an item is moved out of the "selected" listbox.
KActionSelector::setButtonIconSet
void setButtonIconSet(const QIcon &iconset, MoveButton button)
Sets the iconset for button button to iconset.
Definition: kactionselector.cpp:197
KActionSelector::setMoveOnDoubleClick
void setMoveOnDoubleClick(bool enable)
Sets moveOnDoubleClick to enable.
Definition: kactionselector.cpp:282
KActionSelector::showUpDownButtons
bool showUpDownButtons
Definition: kactionselector.h:89
KActionSelector::setAvailableLabel
void setAvailableLabel(const QString &text)
Sets the label for the available items listbox to text.
Definition: kactionselector.cpp:302
KActionSelector::eventFilter
bool eventFilter(QObject *, QEvent *)
Reimplemented for internal reasons.
Definition: kactionselector.cpp:395
KActionSelector::selectedListWidget
QListWidget * selectedListWidget() const
Definition: kactionselector.cpp:167
KActionSelector::setButtonTooltip
void setButtonTooltip(const QString &tip, MoveButton button)
Sets the tooltip for the button button to tip.
Definition: kactionselector.cpp:218
KActionSelector::setButtonWhatsThis
void setButtonWhatsThis(const QString &text, MoveButton button)
Sets the whatsthis help for button button to text.
Definition: kactionselector.cpp:243
KActionSelector::added
void added(QListWidgetItem *item)
Emitted when an item is moved to the "selected" listbox.
KActionSelector::keyboardEnabled
bool keyboardEnabled
Definition: kactionselector.h:84
KActionSelector::setButtonIcon
void setButtonIcon(const QString &icon, MoveButton button)
Sets the pixmap of the button button to icon.
Definition: kactionselector.cpp:172
KActionSelector::moveOnDoubleClick
bool moveOnDoubleClick
Definition: kactionselector.h:83
KActionSelector::setKeyboardEnabled
void setKeyboardEnabled(bool enable)
Sets the keyboard enabled depending on enable.
Definition: kactionselector.cpp:292
KActionSelector::availableLabel
QString availableLabel
Definition: kactionselector.h:85
KActionSelector::setButtonsEnabled
void setButtonsEnabled()
Sets the enabled state of all moving buttons to reflect the current options.
Definition: kactionselector.cpp:264
KActionSelector::availableListWidget
QListWidget * availableListWidget() const
Definition: kactionselector.cpp:162
KActionSelector::setAvailableInsertionPolicy
void setAvailableInsertionPolicy(InsertionPolicy policy)
Sets the insertion policy for the available listbox.
Definition: kactionselector.cpp:322
KIcon
A wrapper around QIcon that provides KDE icon features.
Definition: kicon.h:41
QLabel
QListWidget
QList
QObject
QToolButton
QWidget
kDebug
#define kDebug
kactionselector.h
kdebug.h
kicon.h
klocale.h
i18n
QString i18n(const char *text)
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KDEUI

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

kdelibs-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal