# class KListView | This Widget extends the functionality of QListView to honor the system wide settings for Single Click/Double Click mode, AutoSelection and ChangeCursorOverLink (TM). More...
Definition | `#include <klistview.h>`
Inherits | QListView (qt) [public ]
List of all Methods
Annotated List
Files
Globals
Hierarchy
Index

#### Public Types

- enum SelectionModeExt { Single = QListView::Single, Multi = QListView::Multi, Extended = QListView::Extended, NoSelection = QListView::NoSelection, Konqueror }

#### Public Methods

- KListView (QWidget *parent = 0, const char *name = 0)
- virtual ~KListView ()
- virtual void setAcceptDrops (bool)
- virtual bool isExecuteArea ( const QPoint& point )
- bool isExecuteArea ( int x )
- QList<QListViewItem> selectedItems () const
- void moveItem (QListViewItem *item, QListViewItem *parent, QListViewItem *after)
- QListViewItem * lastItem () const
- QListViewItem* lastChild () const
- bool itemsMovable () const
- bool itemsRenameable () const
- bool dragEnabled () const
- bool autoOpen () const
- bool isRenameable (int column) const
- bool dropVisualizer () const
- int tooltipColumn () const
- bool createChildren () const
- bool dropHighlighter () const
- int dropVisualizerWidth () const
- SelectionModeExt selectionModeExt () const
- int itemIndex ( const QListViewItem *item ) const
- QListViewItem* itemAtIndex (int index)

#### Public Slots

- virtual void rename (QListViewItem *item, int c)
- void setRenameable (int column, bool yesno=true)
- virtual void setItemsMovable (bool b)
- virtual void setItemsRenameable (bool b)
- virtual void setDragEnabled (bool b)
- virtual void setAutoOpen (bool b)
- virtual void setDropVisualizer (bool b)
- void setDropVisualizerWidth (int w)
- virtual void setTooltipColumn (int column)
- virtual void setDropHighlighter (bool b)
- virtual void setCreateChildren (bool b)
- void setSelectionModeExt (SelectionModeExt mode)

#### Signals

- void executed ( QListViewItem *item )
- void executed ( QListViewItem *item, const QPoint &pos, int c )
- void doubleClicked ( QListViewItem *item, const QPoint &pos, int c )
- void dropped (QDropEvent * e, QListViewItem *after)
- void dropped (KListView* list, QDropEvent* e, QListViewItem* after)
- void dropped (KListView* list, QDropEvent* e, QListViewItem* parent, QListViewItem* after)
- void dropped (QDropEvent* e, QListViewItem* parent, QListViewItem* after)
- void moved ()
- void moved (QListViewItem *item, QListViewItem *afterFirst, QListViewItem *afterNow)
- void moved (QList<QListViewItem> &items, QList<QListViewItem> &afterFirst, QList<QListViewItem> &afterNow)
- void itemRenamed (QListViewItem* item, const QString &str, int col)
- void itemRenamed (QListViewItem* item)
- void menuShortCutPressed (KListView* list, QListViewItem* item)
- void contextMenu (KListView* l, QListViewItem* i, const QPoint& p)

#### Protected Methods

- inline bool below (const QRect& rect, const QPoint& p)
- inline bool below (QListViewItem* i, const QPoint& p)
- void emitExecute ( QListViewItem *item, const QPoint &pos, int c )
- virtual void focusInEvent (QFocusEvent* fe)
- virtual void focusOutEvent ( QFocusEvent *fe )
- virtual void leaveEvent ( QEvent *e )
- virtual QString tooltip (QListViewItem* item, int column) const
- virtual bool showTooltip (QListViewItem *item, const QPoint &pos, int column) const
- virtual void contentsDragMoveEvent (QDragMoveEvent *event)
- virtual void contentsMousePressEvent ( QMouseEvent *e )
- virtual void contentsMouseMoveEvent ( QMouseEvent *e )
- virtual void contentsMouseDoubleClickEvent ( QMouseEvent *e )
- virtual void contentsDragLeaveEvent (QDragLeaveEvent *event)
- virtual void contentsMouseReleaseEvent (QMouseEvent*)
- virtual void contentsDropEvent (QDropEvent*)
- virtual void contentsDragEnterEvent (QDragEnterEvent *)
- virtual QDragObject * dragObject () const
- virtual bool acceptDrag (QDropEvent* event) const
- virtual QRect drawDropVisualizer (QPainter *p, QListViewItem *parent, QListViewItem *after)
- virtual QRect drawItemHighlighter (QPainter *painter, QListViewItem *item)
- virtual void startDrag ()
- virtual void keyPressEvent (QKeyEvent*)
- virtual void viewportPaintEvent (QPaintEvent*)
- void selectCurrentItemAndEnableSelectedBySimpleMoveMode ()
- void movableDropEvent (QListViewItem* parent, QListViewItem* afterme)
- void findDrop (const QPoint &pos, QListViewItem *&parent, QListViewItem *&after)
- void konquerorKeyPressEvent (QKeyEvent*)
- int depthToPixels ( int depth )

#### Protected Slots

- void slotSettingsChanged (int)
- void slotMouseButtonClicked ( int btn, QListViewItem *item, const QPoint &pos, int c )
- void doneEditing (QListViewItem *item, int row)
- void cleanDropVisualizer ()
- void cleanItemHighlighter ()
- void emitContextMenu (QListViewItem*, const QPoint&, int)
- void emitContextMenu (KListView*, QListViewItem*)
- void slotOnItem ( QListViewItem *item )
- void slotOnViewport ()
- void slotAutoSelect ()

## Detailed Description

This Widget extends the functionality of QListView to honor the system wide settings for Single Click/Double Click mode, AutoSelection and ChangeCursorOverLink (TM).

There is a new signal executed(). It gets connected to either QListView::clicked() or QListView::doubleClicked() depending on the KDE wide Single Click/Double Click settings. It is strongly recommended that you use this signal instead of the above mentioned. This way you donīt need to care about the current settings. If you want to get informed when the user selects something connect to the QListView::selectionChanged() signal.

Drag-and-Drop is supported with the signal dropped(), just setAcceptDrops(true) and connect it to a suitable slot. To see where you are dropping, setDropVisualizer(true). And also you'll need acceptDrag(QDropEvent*)

KListView is drag-enabled, too: to benefit from that you've got derive from it. Reimplement dragObject() and (possibly) startDrag(), and setDragEnabled(true).

enum SelectionModeExt { Single = QListView::Single, Multi = QListView::Multi, Extended = QListView::Extended, NoSelection = QListView::NoSelection, Konqueror } | ### SelectionModeExt

Possible selection modes.

The first four correspond directly to QListView::SelectionMode, while the Konqueror selection mode is defined as follows:

- home: move to the first
- end: move to the last
- PgUp/PgDn: move one page up/down
- up/down: move one item up/down
- insert: toggle selection of current and move to the next
- space: toggle selection of the current
- CTRL+up: move to the previous item and toggle selection of this one
- CTRL+down: toggle selection of the current item and move to the next
- CTRL+end: toggle selection from (including) the current item to (including) the last item
- CTRL+home: toggle selection from (including) the current item to the (including) the first item
- CTRL+PgDn: toggle selection from (including) the current item to (excluding) the item one page down
- CTRL+PgUp: toggle selection from (excluding) the current item to (including) the item one page up

The combinations work the same with SHIFT instead of CTRL, except that if you start selecting something using SHIFT everything selected before will be deselected first.

This way e.g. SHIFT+up/PgUp then SHIFT+down/PgDn leaves no item selected

KListView (QWidget *parent = 0, const char *name = 0) | ### KListView

Constructor.

The parameters `parent` and `name` are handled by QListView, as usual.

~KListView () | ### ~KListView

[virtual]

Destructor.

void setAcceptDrops (bool) | ### setAcceptDrops

[virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

bool isExecuteArea ( const QPoint& point ) | ### isExecuteArea

[virtual]

This function determines whether the given coordinates are within the execute area. The execute area is the part of a QListViewItem where mouse clicks or double clicks respectively generate a executed() signal. Depending on QListView::allColumnsShowFocus() this is either the whole item or only the first column.

Returns: true if point is inside execute area of an item, false in all other cases including the case that it is over the viewport.

bool isExecuteArea ( int x ) | ### isExecuteArea

Same thing, but from an x coordinate only. This only checks if x is in the first column (if all columns don't show focus), without testing if the y coordinate is over an item or not.

QList<QListViewItem> selectedItems () | ### selectedItems

[const]

Returns: a list containing the currently selected items.

void moveItem (QListViewItem *item, QListViewItem *parent, QListViewItem *after) | ### moveItem

Arbitrarily move `item` to `parent`, positioned immediately after item `after`.

QListViewItem * lastItem () | ### lastItem

[const]

Returns: the last item (not child!) of this listview.

See also: lastChild()

QListViewItem* lastChild () | ### lastChild

[const]

Returns: the last child of this listview.

bool itemsMovable () | ### itemsMovable

[const]

Returns: if it is legal to move items in the list view

bool itemsRenameable () | ### itemsRenameable

[const]

Returns: whether inplace-renaming has been enabled.

See also: setItemsRenameable()

bool dragEnabled () | ### dragEnabled

[const]

Returns: whether dragging is enabled.

bool autoOpen () | ### autoOpen

[const]

Returns: true if AutoOpen is enabled (not implemented currently).

See also: setAutoOpen()

bool isRenameable (int column) | ### isRenameable

[const]

Returns: true if `column` is renamable.

bool dropVisualizer () | ### dropVisualizer

[const]

Returns: true if drawing of the drop-visualizer has been enabled.

int tooltipColumn () | ### tooltipColumn

[const]

Returns: the column for which tooltips are displayed (or -1 if none set).

bool createChildren () | ### createChildren

[const]

For future expansions.

Do not use.

bool dropHighlighter () | ### dropHighlighter

[const]

For future expansions.

Do not use.

int dropVisualizerWidth () | ### dropVisualizerWidth

[const]

The dropVisualizerWidth defaults to 4.

Returns: the current width of the drop-visualizer.

SelectionModeExt selectionModeExt () | ### selectionModeExt

[const]

Returns: the "extended" selection mode of this listview.

See also: SelectionModeExt, setSelectionModeExt

int itemIndex ( const QListViewItem *item ) | ### itemIndex

[const]

Returns the index of `item` within the item tree or -1 if `item` doesn't exist in this list view. This function takes all items into account not only the visible ones.

QListViewItem* itemAtIndex (int index) | ### itemAtIndex

Returns the item of `index` within the item tree or 0 if `index` doesn't exist in this list view. This function takes all items into account not only the visible ones.

void executed ( QListViewItem *item ) | ### executed

[signal]

This signal is emitted whenever the user executes an listview item. That means depending on the KDE wide Single Click/Double Click setting the user clicked or double clicked on that item.

Note that you may not delete any QListViewItem objects in slots connected to this signal.

Parameters:

item | is the pointer to the executed listview item.

void executed ( QListViewItem *item, const QPoint &pos, int c ) | ### executed

[signal]

This signal is emitted whenever the user executes an listview item. That means depending on the KDE wide Single Click/Double Click setting the user clicked or double clicked on that item.

Note that you may not delete any QListViewItem objects in slots connected to this signal.

Parameters:

item | is the pointer to the executed listview item.
pos | is the position where the user has clicked
c | is the column into which the user clicked.

void doubleClicked ( QListViewItem *item, const QPoint &pos, int c ) | ### doubleClicked

[signal]

This signal gets emitted whenever the user double clicks into the listview.

Note that you may not delete any QListViewItem objects in slots connected to this signal.

This signal is more or less here for the sake of completeness. You should normally not need to use this. In most cases itīs better to use executed() instead.

Parameters:

item | is the pointer to the clicked listview item.
pos | is the position where the user has clicked, and
c | is the column into which the user clicked.

Reimplemented from QListView.

void dropped (QDropEvent * e, QListViewItem *after) | ### dropped

[signal]

This signal gets emitted whenever something acceptable is dropped onto the listview.

Parameters:

e | is the drop event itself (it has already been accepted)
after | is the item after which the drop occured (or 0L, if the drop was above all items)

See also: acceptDrop()

void dropped (KListView* list, QDropEvent* e, QListViewItem* after) | ### dropped

[signal]

This signal gets emitted whenever something acceptable is dropped onto the listview.

This is an overloaded version of the above (provided to simplify processing drops outside of the class).

Parameters:

list | is the listview
e | is the drop event itself (it has already been accepted)
after | is the item after which the drop occured (or 0L, if the drop was above all items

void dropped (KListView* list, QDropEvent* e, QListViewItem* parent, QListViewItem* after) | ### dropped

[signal]

This signal gets emitted whenever something acceptable is dropped onto the listview.

This function also provides a parent, in the event that your listview is a tree

Parameters:

list | is the listview
e | is the drop event itself (it has already been accepted)
parent | the item that is to be the parent of the new item
after | is the item after which the drop occured (or 0L, if the drop was above all items

void dropped (QDropEvent* e, QListViewItem* parent, QListViewItem* after) | ### dropped

[signal]

This signal gets emitted whenever something acceptable is dropped onto the listview.

This function also provides a parent, in the event that your listview is a tree

Parameters:

e | is the drop event itself (it has already been accepted)
parent | the item that is to be the parent of the new item
after | is the item after which the drop occured (or 0L, if the drop was above all items

void moved () | ### moved

[signal]

This signal is emitted when ever the user moves an item in the list via DnD. If more than one item is moved at the same time, this signal is only emitted once.

void moved (QListViewItem *item, QListViewItem *afterFirst, QListViewItem *afterNow) | ### moved

[signal]

This signal is emitted when ever the user moves an item in the list via DnD. If more than one item is moved at the same time, `afterFirst` and `afterNow` will reflect what was true before the move. This differs from moved(), so be careful. All the items will have been moved before moved() is emitted, which is not true in this method. // FIXME

Parameters:

item | the item that was moved
afterFirst | the item that parameter item was in before the move, in the list
afterNow | the item it's currently after.

void moved (QList<QListViewItem> &items, QList<QListViewItem> &afterFirst, QList<QListViewItem> &afterNow) | ### moved

[signal]

This signal is emitted after all the items have been moved. It reports info for each and every item moved, in order. The first element in `items` associates with the first of afterFirst and afterNow.

void itemRenamed (QListViewItem* item, const QString &str, int col) | ### itemRenamed

[signal]

This signal gets emitted when an item is renamed via in-place renaming.

Parameters:

item | is the renamed item.
str | is the new value of column `col`.
col | is the renamed column.

void itemRenamed (QListViewItem* item) | ### itemRenamed

[signal]

Same as above, but without the extra information.

void menuShortCutPressed (KListView* list, QListViewItem* item) | ### menuShortCutPressed

[signal]

This signal is emitted when the shortcut key for popup-menus is pressed.

Normally you should not use this, just connect a slot to signal contextMenu (KListView*, QListViewItem*, const QPoint&) to correctly handle showing context menus regardless of settings.

Parameters:

list | is this listview.
item | is the currentItem() at the time the key was pressed. May be 0L.

void contextMenu (KListView* l, QListViewItem* i, const QPoint& p) | ### contextMenu

[signal]

This signal is emitted whenever a context-menu should be shown for item `i`. It automatically adjusts for all settings involved (Menu key, showMenuOnPress/Click).

Parameters:

l | is this listview.
i | is the item for which the menu should be shown. May be 0L.
p | is the point at which the menu should be shown.

void rename (QListViewItem *item, int c) | ### rename

[virtual slot]

Rename column `c` of `item`.

void setRenameable (int column, bool yesno=true) | ### setRenameable

[slot]

By default, if you called setItemsRenameable(true), only the first column is renameable. Use this function to enable the feature on other columns.

If you want more intelligent (dynamic) selection, you'll have to derive from KListView, and override rename() and call only call it if you want the item to be renamed.

void setItemsMovable (bool b) | ### setItemsMovable

[virtual slot]

Set whether items in the list view can be moved. It is enabled by default.

See also: itemsMovable()

void setItemsRenameable (bool b) | ### setItemsRenameable

[virtual slot]

Enables inplace-renaming of items. It is disabled by default.

See also: itemsRenameable(), setRenameable()

void setDragEnabled (bool b) | ### setDragEnabled

[virtual slot]

Enable/Disable the dragging of items. It is disabled by default.

void setAutoOpen (bool b) | ### setAutoOpen

[virtual slot]

Enable/Disable AutoOpen (not implemented currently).

void setDropVisualizer (bool b) | ### setDropVisualizer

[virtual slot]

Enable/Disable the drawing of a drop-visualizer (a bar that shows where a dropped item would be inserted). It is enabled by default, if dragging is enabled

void setDropVisualizerWidth (int w) | ### setDropVisualizerWidth

[slot]

Set the width of the (default) drop-visualizer. If you don't call this method, the width is set to 4.

void setTooltipColumn (int column) | ### setTooltipColumn

[virtual slot]

Set which column should be used for automatic tooltips.

Parameters:

column | is the column for which tooltips will be shown. Set -1 to disable this feature.

void setDropHighlighter (bool b) | ### setDropHighlighter

[virtual slot]

For future expansion.

Do not use.

void setCreateChildren (bool b) | ### setCreateChildren

[virtual slot]

For future expansions.

Do not use.

void setSelectionModeExt (SelectionModeExt mode) | ### setSelectionModeExt

[slot]

Set the selection mode.

A different name was chosen to avoid API-clashes with QListView::setSelectionMode().

inline bool below (const QRect& rect, const QPoint& p) | ### below

[protected]

Determine whether a drop on position `p` would count as being above or below the QRect `rect`.

Parameters:

rect | is the rectangle we examine.
p | is the point located in the rectangle, p is assumed to be in viewport coordinates.

inline bool below (QListViewItem* i, const QPoint& p) | ### below

[protected]

An overloaded version of below(const QRect&, const QPoint&).

It differs from the above only in what arguments it takes.

Parameters:

i | the item whose rect() is passed to the above function.
p | is translated from contents coordinates to viewport coordinates before being passed to the above function.

void emitExecute ( QListViewItem *item, const QPoint &pos, int c ) | ### emitExecute

[protected]

Emit signal execute.

void focusInEvent (QFocusEvent* fe) | ### focusInEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

Reimplemented from QListView.

void focusOutEvent ( QFocusEvent *fe ) | ### focusOutEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

Reimplemented from QListView.

void leaveEvent ( QEvent *e ) | ### leaveEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

QString tooltip (QListViewItem* item, int column) | ### tooltip

[protected const virtual]

Returns: the tooltip for `column` of `item`.

bool showTooltip (QListViewItem *item, const QPoint &pos, int column) | ### showTooltip

[protected const virtual]

Returns: whether the tooltip for `column` of `item` shall be shown at point `pos`.

void contentsDragMoveEvent (QDragMoveEvent *event) | ### contentsDragMoveEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

void contentsMousePressEvent ( QMouseEvent *e ) | ### contentsMousePressEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

Reimplemented from QListView.

void contentsMouseMoveEvent ( QMouseEvent *e ) | ### contentsMouseMoveEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

Reimplemented from QListView.

void contentsMouseDoubleClickEvent ( QMouseEvent *e ) | ### contentsMouseDoubleClickEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

Reimplemented from QListView.

void contentsDragLeaveEvent (QDragLeaveEvent *event) | ### contentsDragLeaveEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

void contentsMouseReleaseEvent (QMouseEvent*) | ### contentsMouseReleaseEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

Reimplemented from QListView.

void contentsDropEvent (QDropEvent*) | ### contentsDropEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

void contentsDragEnterEvent (QDragEnterEvent *) | ### contentsDragEnterEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

QDragObject * dragObject () | ### dragObject

[protected const virtual]

Returns: a dragobject encoding the current selection.

See also: setDragEnabled()

bool acceptDrag (QDropEvent* event) | ### acceptDrag

[protected const virtual]

Returns: true if the `event` provides some acceptable format.

QRect drawDropVisualizer (QPainter *p, QListViewItem *parent, QListViewItem *after) | ### drawDropVisualizer

[protected virtual]

Paint the drag line. If painter is null, don't try to :)

If after == 0 then the marker should be drawn at the top.

Returns: the rectangle that you painted to.

QRect drawItemHighlighter (QPainter *painter, QListViewItem *item) | ### drawItemHighlighter

[protected virtual]

For future expansion.

Do not use.

Highlight `item`. painter may be null return the rect drawn to

void startDrag () | ### startDrag

[protected virtual]

This method calls dragObject() and starts the drag.

Reimplement it to do fancy stuff like setting a pixmap or using a non-default DragMode

void keyPressEvent (QKeyEvent*) | ### keyPressEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

Reimplemented from QListView.

void viewportPaintEvent (QPaintEvent*) | ### viewportPaintEvent

[protected virtual]

Reimplemented for internal reasons. Further reimplementations should call this function or else some features may not work correctly.

The API is unaffected.

void selectCurrentItemAndEnableSelectedBySimpleMoveMode () | ### selectCurrentItemAndEnableSelectedBySimpleMoveMode

[protected]

Only called by konq_listviewwidget to select the current item after listing. For more information look in konquerorKeyPressEvent().

void slotSettingsChanged (int) | ### slotSettingsChanged

[protected slots slot]

Update internal settings whenever the global ones change.

void slotMouseButtonClicked ( int btn, QListViewItem *item, const QPoint &pos, int c ) | ### slotMouseButtonClicked

[protected slots slot]

void doneEditing (QListViewItem *item, int row) | ### doneEditing

[protected slots slot]

void cleanDropVisualizer () | ### cleanDropVisualizer

[protected slots slot]

Repaint the rect where I was drawing the drop line.

void cleanItemHighlighter () | ### cleanItemHighlighter

[protected slots slot]

For future expansion.

Do not use.

void emitContextMenu (QListViewItem*, const QPoint&, int) | ### emitContextMenu

[protected slots slot]

Emit the contextMenu signal. This slot is for mouse actions.

void emitContextMenu (KListView*, QListViewItem*) | ### emitContextMenu

[protected slots slot]

Emit the contextMenu signal. This slot is for key presses.

void slotOnItem ( QListViewItem *item ) | ### slotOnItem

[protected slots slot]

Accessory slot for AutoSelect

void slotOnViewport () | ### slotOnViewport

[protected slots slot]

Accessory slot for AutoSelect/ChangeCursorOverItem

void slotAutoSelect () | ### slotAutoSelect

[protected slots slot]

Process AutoSelection.

void movableDropEvent (QListViewItem* parent, QListViewItem* afterme) | ### movableDropEvent

[protected]

Handle dropEvent when itemsMovable() is set to true. ### for 3.0 : make this virtual

void findDrop (const QPoint &pos, QListViewItem *&parent, QListViewItem *&after) | ### findDrop

[protected]

Where is the nearest QListViewItem that I'm going to drop? ### for 3.0 : make this virtual

void konquerorKeyPressEvent (QKeyEvent*) | ### konquerorKeyPressEvent

[protected]

A special keyPressEvent (for Konqueror-style selection).

int depthToPixels ( int depth ) | ### depthToPixels

[protected]

Convert the depth of an item into its indentation in pixels

- Version: $Id: klistview.h,v 1.68 2001/02/16 23:54:27 pfeiffer Exp $
- Generated: root@i386.ports.openbsd.org on Wed Apr 25 13:58:24 2001, using kdoc 2.0a53.