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

KDEUI

  • sources
  • kde-4.12
  • kdelibs
  • 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 
32 class 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 
82 KActionSelector::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 
153 KActionSelector::~KActionSelector()
154 {
155  delete d;
156 }
157 
158 //END Constructor/destroctor
159 
160 //BEGIN Public Methods
161 
162 QListWidget *KActionSelector::availableListWidget() const
163 {
164  return d->availableListWidget;
165 }
166 
167 QListWidget *KActionSelector::selectedListWidget() const
168 {
169  return d->selectedListWidget;
170 }
171 
172 void 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 
197 void 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 
218 void 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 
243 void 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 
264 void 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 
277 bool KActionSelector::moveOnDoubleClick() const
278 {
279  return d->moveOnDoubleClick;
280 }
281 
282 void KActionSelector::setMoveOnDoubleClick( bool b )
283 {
284  d->moveOnDoubleClick = b;
285 }
286 
287 bool KActionSelector::keyboardEnabled() const
288 {
289  return d->keyboardEnabled;
290 }
291 
292 void KActionSelector::setKeyboardEnabled( bool b )
293 {
294  d->keyboardEnabled = b;
295 }
296 
297 QString KActionSelector::availableLabel() const
298 {
299  return d->lAvailable->text();
300 }
301 
302 void KActionSelector::setAvailableLabel( const QString &text )
303 {
304  d->lAvailable->setText( text );
305 }
306 
307 QString KActionSelector::selectedLabel() const
308 {
309  return d->lSelected->text();
310 }
311 
312 void KActionSelector::setSelectedLabel( const QString &text )
313 {
314  d->lSelected->setText( text );
315 }
316 
317 KActionSelector::InsertionPolicy KActionSelector::availableInsertionPolicy() const
318 {
319  return d->availableInsertionPolicy;
320 }
321 
322 void KActionSelector::setAvailableInsertionPolicy( InsertionPolicy p )
323 {
324  d->availableInsertionPolicy = p;
325 }
326 
327 KActionSelector::InsertionPolicy KActionSelector::selectedInsertionPolicy() const
328 {
329  return d->selectedInsertionPolicy;
330 }
331 
332 void KActionSelector::setSelectedInsertionPolicy( InsertionPolicy p )
333 {
334  d->selectedInsertionPolicy = p;
335 }
336 
337 bool KActionSelector::showUpDownButtons() const
338 {
339  return d->showUpDownButtons;
340 }
341 
342 void 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 
361 void KActionSelector::polish()
362 {
363  setButtonsEnabled();
364 }
365 
366 //END Public Slots
367 
368 //BEGIN Protected
369 void 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 
395 bool 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 
441 void 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 
456 void 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 
471 void 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 
482 void 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 
493 void KActionSelectorPrivate::itemDoubleClicked( QListWidgetItem *item )
494 {
495  if ( moveOnDoubleClick )
496  moveItem( item );
497 }
498 
499 //END Private Slots
500 
501 //BEGIN Private Methods
502 
503 void 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 
511 void 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 
538 int 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 
556 int 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"
i18n
QString i18n(const char *text)
KActionSelector::setButtonWhatsThis
void setButtonWhatsThis(const QString &text, MoveButton button)
Sets the whatsthis help for button button to text.
Definition: kactionselector.cpp:243
KActionSelector::setButtonsEnabled
void setButtonsEnabled()
Sets the enabled state of all moving buttons to reflect the current options.
Definition: kactionselector.cpp:264
KActionSelector::BelowCurrent
Definition: kactionselector.h:128
KActionSelector::keyPressEvent
void keyPressEvent(QKeyEvent *)
Reimplamented for internal reasons.
Definition: kactionselector.cpp:369
KActionSelector::KActionSelector
KActionSelector(QWidget *parent=0)
Definition: kactionselector.cpp:82
kdebug.h
KActionSelector::setAvailableInsertionPolicy
void setAvailableInsertionPolicy(InsertionPolicy policy)
Sets the insertion policy for the available listbox.
Definition: kactionselector.cpp:322
KActionSelector::InsertionPolicy
InsertionPolicy
This enum defines policies for where to insert moved items in a listbox.
Definition: kactionselector.h:127
QWidget
QListWidget
KActionSelector::polish
void polish()
Emitted when an item is moved to the "selected" listbox.
Definition: kactionselector.cpp:361
QString
KActionSelector::moveOnDoubleClick
bool moveOnDoubleClick() const
QObject
kDebug
static QDebug kDebug(bool cond, int area=KDE_DEFAULT_DEBUG_AREA)
klocale.h
KActionSelector::setButtonIconSet
void setButtonIconSet(const QIcon &iconset, MoveButton button)
Sets the iconset for button button to iconset.
Definition: kactionselector.cpp:197
KActionSelector::ButtonDown
Definition: kactionselector.h:112
kactionselector.h
KActionSelector::setAvailableLabel
void setAvailableLabel(const QString &text)
Sets the label for the available items listbox to text.
Definition: kactionselector.cpp:302
KActionSelector::availableListWidget
QListWidget * availableListWidget() const
Definition: kactionselector.cpp:162
KActionSelector::setMoveOnDoubleClick
void setMoveOnDoubleClick(bool enable)
Sets moveOnDoubleClick to enable.
Definition: kactionselector.cpp:282
KActionSelector::setKeyboardEnabled
void setKeyboardEnabled(bool enable)
Sets the keyboard enabled depending on enable.
Definition: kactionselector.cpp:292
KActionSelector::ButtonUp
Definition: kactionselector.h:111
KActionSelector::setSelectedInsertionPolicy
void setSelectedInsertionPolicy(InsertionPolicy policy)
Sets the insertion policy for the selected listbox.
Definition: kactionselector.cpp:332
KActionSelector::setButtonIcon
void setButtonIcon(const QString &icon, MoveButton button)
Sets the pixmap of the button button to icon.
Definition: kactionselector.cpp:172
KActionSelector::setShowUpDownButtons
void setShowUpDownButtons(bool show)
Sets whether the Up and Down buttons should be displayed according to show.
Definition: kactionselector.cpp:342
KIcon
A wrapper around QIcon that provides KDE icon features.
Definition: kicon.h:40
KActionSelector::ButtonRemove
Definition: kactionselector.h:110
KActionSelector::selectedInsertionPolicy
InsertionPolicy selectedInsertionPolicy() const
KActionSelector::setButtonTooltip
void setButtonTooltip(const QString &tip, MoveButton button)
Sets the tooltip for the button button to tip.
Definition: kactionselector.cpp:218
KActionSelector::availableInsertionPolicy
InsertionPolicy availableInsertionPolicy() const
KActionSelector::Sorted
Definition: kactionselector.h:129
KActionSelector::selectedLabel
QString selectedLabel() const
KActionSelector::keyboardEnabled
bool keyboardEnabled() const
KActionSelector::selectedListWidget
QListWidget * selectedListWidget() const
Definition: kactionselector.cpp:167
KActionSelector::AtTop
Definition: kactionselector.h:130
KActionSelector::eventFilter
bool eventFilter(QObject *, QEvent *)
Reimplemented for internal reasons.
Definition: kactionselector.cpp:395
QLabel
KActionSelector::showUpDownButtons
bool showUpDownButtons() const
KActionSelector::availableLabel
QString availableLabel() const
QToolButton
KActionSelector::~KActionSelector
~KActionSelector()
Definition: kactionselector.cpp:153
kicon.h
KActionSelector
A widget for selecting and arranging actions/objects.
Definition: kactionselector.h:80
KActionSelector::setSelectedLabel
void setSelectedLabel(const QString &text)
Sets the label for the selected items listbox to text.
Definition: kactionselector.cpp:312
KActionSelector::ButtonAdd
Definition: kactionselector.h:109
KActionSelector::MoveButton
MoveButton
This enum indentifies the moving buttons.
Definition: kactionselector.h:108
QList
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:49:13 by doxygen 1.8.7 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 API Reference

Skip menu "kdelibs 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
  • kjsembed
  •   WTF
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Nepomuk-Core
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



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