mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 02:42:48 +00:00
remove all doxygen pages and add top-level config
This commit is contained in:
parent
2a9f7d48de
commit
c88b5ef465
31 changed files with 2331 additions and 3716 deletions
201
Mainpage.dox
201
Mainpage.dox
|
@ -1,201 +0,0 @@
|
|||
/** @mainpage The KDE Library API Reference
|
||||
|
||||
<p><b>
|
||||
Overview |
|
||||
@ref components |
|
||||
@ref development |
|
||||
@ref search
|
||||
</b></p>
|
||||
|
||||
This is the online reference for developing with the KDE libraries
|
||||
(kdelibs).
|
||||
|
||||
The KDE libraries build on the
|
||||
<a href="http://qt-project.org/">Qt</a> framework to
|
||||
provide a powerful framework to make writing applications easier,
|
||||
and provide consistency across the KDE desktop environment.
|
||||
|
||||
Among other things, the KDE libraries provide:
|
||||
- standard user interface elements, on top of those provided by Qt
|
||||
(<a href="kdeui/html/index.html">KDEUI</a>)
|
||||
- a standard configuration format and method of reading and writing
|
||||
configuration data (<a href="kdecore/html/classKConfig.html">KConfig</a>)
|
||||
- site-independent access to standard directories, for finding resources such
|
||||
as icons (<a href="kdecore/html/classKStandardDirs.html">KStandardDirs</a>)
|
||||
- network transparent input and output (<a href="kio/html/index.html">KIO</a>)
|
||||
- a method of embedding application components in other applications
|
||||
(<a href="kparts/html/index.html">KParts</a>)
|
||||
- straightforward multimedia and hardware interaction
|
||||
(<a href="/kdesupport-api/phonon-apidocs/">Phonon</a> and
|
||||
<a href="solid/html/index.html">Solid</a>)
|
||||
- an application scripting framework
|
||||
(<a href="kross/html/index.html">Kross</a>)
|
||||
|
||||
Visit the <a href="http://techbase.kde.org/Development">development section of KDE
|
||||
Techbase</a> for tutorials, architectural overviews and other useful information.
|
||||
|
||||
@authors
|
||||
Far too many to list. See the copyright notices on the individual files,
|
||||
as well as the pages for individual components.
|
||||
|
||||
@maintainers
|
||||
There is no single maintainer for kdelibs. Overall direction is governed by the
|
||||
<a href="https://mail.kde.org/mailman/listinfo/kde-core-devel">kde-core-devel
|
||||
mailing list</a>. Some of the individual components have their own maintainers:
|
||||
see the component pages for more information.
|
||||
|
||||
@licenses
|
||||
Libraries: @lgpl<br>
|
||||
Some helper binaries: @gpl<br>
|
||||
Some code may have more permissive licenses.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/** @page components Components
|
||||
|
||||
<p><b>
|
||||
@ref index "Overview" |
|
||||
Components |
|
||||
@ref development |
|
||||
@ref search
|
||||
</b></p>
|
||||
|
||||
Below is a brief summary of the various libraries you may want to use
|
||||
when developing a KDE application.
|
||||
|
||||
Note that there is more to kdelibs than these libraries: on the left
|
||||
is a complete list of kdelibs components. However, in almost all cases
|
||||
you will only be interested in the ones listed below. The remaining
|
||||
ones are mostly implementation details that you don't need to worry
|
||||
about.
|
||||
|
||||
There are also several components you can use. Interfaces to most of
|
||||
these can be found in the <a href="interfaces/html/index.html">interfaces
|
||||
section</a>, but you should also be aware of KHTMLPart, which
|
||||
provides a full web browser component.
|
||||
|
||||
<dl>
|
||||
<dt>KDECore</dt>
|
||||
<dd>Core KDE classes that are not related to the user interface.<br>
|
||||
[ <a href="kdecore/html/index.html">Documentation</a> |
|
||||
<a href="kdecore/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>KIO</dt>
|
||||
<dd>KDE's network-transparent input/output system: provides
|
||||
just about every file-management function you'll ever need.<br>
|
||||
[ <a href="kio/html/index.html">Documentation</a> |
|
||||
<a href="kio/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>KDEUI</dt>
|
||||
<dd>KDE User Interface classes such as widgets.<br>
|
||||
[ <a href="kdeui/html/index.html">Documentation</a> |
|
||||
<a href="kdeui/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>Phonon</dt>
|
||||
<dd>KDE's multimedia framework.<br>
|
||||
[ <a href="/kdesupport-api/kdesupport-apidocs/phonon/html/index.html">Documentation</a> |
|
||||
<a href="/kdesupport-api/kdesupport-apidocs/phonon/html/group__Frontend.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>Solid</dt>
|
||||
<dd>KDE Hardware Discovery and Management classes.<br>
|
||||
[ <a href="solid/html/index.html">Documentation</a> |
|
||||
<a href="solid/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>KParts</dt>
|
||||
<dd>The KDE component library: provides support for re-usable,
|
||||
embeddable, extendible components for use in applications.<br>
|
||||
[ <a href="kparts/html/index.html">Documentation</a> |
|
||||
<a href="kparts/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>KNewStuff</dt>
|
||||
<dd>Upload and download of application data.<br>
|
||||
[ <a href="knewstuff/html/index.html">Documentation</a> |
|
||||
<a href="knewstuff/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>KDEPrint</dt>
|
||||
<dd>The KDE printing system.<br>
|
||||
[ <a href="kdeprint/html/index.html">Documentation</a> |
|
||||
<a href="kdeprint/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>DNSSD</dt>
|
||||
<dd>Access to the DNSSD (aka Bonjour, Zeroconf) service publishing
|
||||
and discovery protocol.<br>
|
||||
[ <a href="dnssd/html/index.html">Documentation</a> |
|
||||
<a href="dnssd/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>Kross</dt>
|
||||
<dd>Allows scripting to be added to an application in an
|
||||
interpreter-independent way.<br>
|
||||
[ <a href="kross/html/index.html">Documentation</a> |
|
||||
<a href="kross/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>ThreadWeaver</dt>
|
||||
<dd>A job-based multi-threading library<br>
|
||||
[ <a href="threadweaver/html/index.html">Documentation</a> |
|
||||
<a href="threadweaver/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>KDESU</dt>
|
||||
<dd>Run processes remotely or with elevated privileges.<br>
|
||||
[ <a href="kdesu/html/index.html">Documentation</a> |
|
||||
<a href="kdesu/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>KPty</dt>
|
||||
<dd>A library for interfacing with pseudo terminals.<br>
|
||||
[ <a href="kpty/html/index.html">Documentation</a> |
|
||||
<a href="kpty/html/classes.html">Classes</a> ]</dd>
|
||||
</dl>
|
||||
|
||||
*/
|
||||
|
||||
/** @page development Development
|
||||
|
||||
<p><b>
|
||||
@ref index "Overview" |
|
||||
@ref components |
|
||||
Development |
|
||||
@ref search
|
||||
</b></p>
|
||||
|
||||
To follow or get involved with the development of the KDE libraries,
|
||||
join the <a href="https://mail.kde.org/mailman/listinfo/kde-core-devel">kde-core-devel
|
||||
mailing list</a>.
|
||||
|
||||
Instructions for building a development version of KDE can be found in the
|
||||
<a href="http://techbase.kde.org/Getting_Started">getting started</a> section
|
||||
of the <a href="http://techbase.kde.org">KDE Techbase</a>.
|
||||
|
||||
*/
|
||||
|
||||
/** @page search Search
|
||||
|
||||
<p><b>
|
||||
@ref index "Overview" |
|
||||
@ref components |
|
||||
@ref development |
|
||||
Search
|
||||
</b></p>
|
||||
|
||||
You can search for any class in the public API of the KDE libraries
|
||||
here.
|
||||
|
||||
Note: only enter the class name, without any namespace qualifiers.
|
||||
|
||||
@htmlonly
|
||||
<form action="http://api.kde.org/classmapper.php" method="get">
|
||||
<input type="text" name="class" value="[classname]" style="width:100%;" onClick="this.value='';"/>
|
||||
<input type="submit" name="go" value="Go" />
|
||||
<input type=hidden name="module" value="kdelibs">
|
||||
<input type=hidden name="version" value="4.8">
|
||||
</form>
|
||||
@endhtmlonly
|
||||
|
||||
If you want to search for any sort of identifier in kdelibs (and other code
|
||||
in the KDE SVN repository), you can do so using the
|
||||
<a href="http://lxr.kde.org">KDE Source Cross-Reference</a> tool.
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_NAME=kdelibs
|
||||
// DOXYGEN_ENABLE=YES
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,40 +0,0 @@
|
|||
/** @mainpage DNSSD
|
||||
|
||||
<p>DNSSD is a library for handling the DNS-based Service Discovery Protocol (DNS-SD),
|
||||
the layer of <a href="http://www.zeroconf.org">Zeroconf</a> that allows network
|
||||
services, such as printers, to be discovered without any user intervention or
|
||||
centralized infrastructure.</p>
|
||||
|
||||
Apple's implementation of Zeroconf is
|
||||
<a href="http://www.apple.com/macosx/technology/bonjour.html">Bonjour</a>.
|
||||
Apple's developer documentation provides lots of information about Bonjour
|
||||
in its <a href="http://developer.apple.com/documentation/Cocoa/Conceptual/NetServices/Articles/about.html#//apple_ref/doc/uid/TP40002458-SW1">Bonjour overview</a>.
|
||||
|
||||
If you are writing an application that wants to discover services on the network,
|
||||
use DNSSD::ServiceBrowser. You can also find available service types using ServiceTypeBrowser.
|
||||
|
||||
If you want to announce the availability of a service provided by your application,
|
||||
use DNSSD::PublicService.
|
||||
|
||||
DNSSD::DomainBrowser allows you to find domains (other than the local one) recommended
|
||||
for browsing or publishing to.
|
||||
|
||||
Note that DNSSD::ServiceBrowser::isAvailable() provides information about the availability
|
||||
of the services provided by this library generally, not just for browsing services.
|
||||
|
||||
@authors
|
||||
Jakub Stachowski
|
||||
|
||||
@maintainers
|
||||
Jakub Stachowski
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// KDE5: get rid of kdeui reference when settings.kcfgc is changed
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui
|
||||
// DOXYGEN_SET_PROJECT_NAME = DNSSD
|
||||
// DOXYGEN_SET_EXCLUDE_PATTERNS += */dnssd/avahi* */dnssd/mdnsd*
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
2331
doxygen.conf
Normal file
2331
doxygen.conf
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,50 +0,0 @@
|
|||
/** @mainpage Interfaces
|
||||
|
||||
This section collects interfaces that can be implemented
|
||||
by components. The interfaces provide well-defined functionality
|
||||
and make it possible to substitute one component (that implements
|
||||
a given interface) for another.
|
||||
|
||||
Documented interfaces are:
|
||||
|
||||
<dl>
|
||||
<dt>KHexEdit</dt>
|
||||
<dd>API for a byte editor<br>
|
||||
[ <a href="../khexedit/html/index.html">Documentation</a> |
|
||||
<a href="../khexedit/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>%KIMProxy</dt>
|
||||
<dd>API for an instant messaging service<br>
|
||||
[ @ref KIMProxy "Documentation" ]</dd>
|
||||
|
||||
<dt>KMediaPlayer</dt>
|
||||
<dd>API for re-usable media player components<br>
|
||||
[ <a href="../kmediaplayer/html/index.html">Documentation</a> |
|
||||
<a href="../kmediaplayer/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>KRegExpEditor</dt>
|
||||
<dd>API for a regular expression editor<br>
|
||||
[ @ref KRegExpEditorInterface "Documentation" ]</dd>
|
||||
|
||||
<dt>KSpeech</dt>
|
||||
<dd>API for a Text-to-Speech service over D-Bus<br>
|
||||
[ <a href="../kspeech/html/index.html">Documentation</a> |
|
||||
<a href="../kspeech/html/classes.html">Classes</a> ]</dd>
|
||||
|
||||
<dt>Terminal</dt>
|
||||
<dd>API for a console KPart<br>
|
||||
[ @ref TerminalInterface "Documentation" ]</dd>
|
||||
|
||||
<dt>KTextEditor</dt>
|
||||
<dd>API for a plain-text editor<br>
|
||||
[ <a href="../ktexteditor/html/index.html">Documentation</a> |
|
||||
<a href="../ktexteditor/html/classes.html">Classes</a> ]</dd>
|
||||
</dl>
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio kparts
|
||||
// DOXYGEN_EXCLUDE = khexedit kspeech ktexteditor kmediaplayer
|
||||
// DOXYGEN_SET_RECURSIVE = YES
|
||||
// DOXYGEN_SET_PROJECT_NAME = Interfaces
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,117 +0,0 @@
|
|||
/*
|
||||
This file is part of the KDE project
|
||||
|
||||
Copyright 2007 by Friedrich W. H. Kossebau <kossebau@kde.org>
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2
|
||||
or any later version published by the Free Software Foundation;
|
||||
*/
|
||||
|
||||
/** @mainpage KHexEdit
|
||||
|
||||
|
||||
@section khe_intro Introduction
|
||||
|
||||
The KHexEdit interfaces - also called KHE interfaces - are a set of
|
||||
well-defined interfaces which a library can implement to provide
|
||||
byte level editing services. Programs which utilise these interfaces
|
||||
can thus allow the user to choose which implementation of the hex editor component
|
||||
to use. At the time of KDE Platform 4.6 the only implementation known is the
|
||||
<a href="http://utils.kde.org/projects/okteta">Okteta</a> Component
|
||||
(found in
|
||||
<a href="http://websvn.kde.org/trunk/KDE/kdesdk/okteta/parts/kbytesedit/">kdesdk/okteta/parts/kbytesedit</a>).
|
||||
|
||||
|
||||
@section khe_howto How to use the KHexEdit Interfaces
|
||||
|
||||
This HOWTO will explain step by step how to create a KHexEdit component and
|
||||
prepare it for usage.
|
||||
|
||||
@subsection khe_howto_source The code lines
|
||||
|
||||
The following source code tries to create a hexedit component.
|
||||
If the component could not be created, a simple message label is created.
|
||||
Otherwise we set the data and configure it to our needs
|
||||
by using the different interfaces if available.
|
||||
|
||||
|
||||
@code
|
||||
// used interfaces
|
||||
#include <khexedit/byteseditinterface.h>
|
||||
#include <khexedit/valuecolumninterface.h>
|
||||
#include <khexedit/charcolumninterface.h>
|
||||
#include <khexedit/clipboardinterface.h>
|
||||
|
||||
//
|
||||
const char *data = 0;
|
||||
int dataSize = 0;
|
||||
|
||||
// create data field and set dataSize
|
||||
// ...
|
||||
|
||||
QWidget *bytesEditWidget = KHE::createBytesEditWidget( parent );
|
||||
|
||||
// no hexedit component installed?
|
||||
if( !bytesEditWidget )
|
||||
{
|
||||
bytesEditWidget = new QLabel( parent, i18n("Could not find a hexedit component.") );
|
||||
}
|
||||
// component found and widget created
|
||||
else
|
||||
{
|
||||
// fetch the editor interface
|
||||
KHE::BytesEditInterface *bytesEdit = KHE::bytesEditInterface( bytesEditWidget );
|
||||
Q_ASSERT( bytesEdit ); // This should not fail!
|
||||
|
||||
// now use the editor.
|
||||
bytesEdit->setData( data, dataSize, -1 );
|
||||
bytesEdit->setMaxDataSize( dataSize );
|
||||
bytesEdit->setReadOnly( false );
|
||||
bytesEdit->setAutoDelete( true );
|
||||
|
||||
KHE::ValueColumnInterface *valueColumn = KHE::valueColumnInterface( bytesEditWidget );
|
||||
if( valueColumn )
|
||||
{
|
||||
valueColumn->setCoding( KHE::ValueColumnInterface::BinaryCoding );
|
||||
valueColumn->setByteSpacingWidth( 2 );
|
||||
valueColumn->setNoOfGroupedBytes( 4 );
|
||||
valueColumn->setGroupSpacingWidth( 12 );
|
||||
}
|
||||
|
||||
KHE::CharColumnInterface *charColumn = KHE::charColumnInterface( bytesEditWidget );
|
||||
if( charColumn )
|
||||
{
|
||||
charColumn->setShowUnprintable( false );
|
||||
charColumn->setSubstituteChar( '*' );
|
||||
}
|
||||
|
||||
KHE::ClipboardInterface *clipboard = KHE::clipboardInterface( bytesEditWidget );
|
||||
if( clipboard )
|
||||
{
|
||||
// Yes, use bytesEditWidget, not clipboard, because that's the QObject, indeed hacky...
|
||||
connect( bytesEditWidget, SIGNAL(copyAvailable(bool)), this, SLOT(offerCopy(bool)) );
|
||||
}
|
||||
}
|
||||
|
||||
// now you can use bytesEditWidget like any other widget object...
|
||||
@endcode
|
||||
|
||||
@subsection khe_howto_notes Notes
|
||||
As the KHexEdit interfaces are header-only, you don't need to link
|
||||
against any additional libraries.
|
||||
|
||||
@authors
|
||||
Friedrich W. H. Kossebau \<kossebau\@kde.org\>
|
||||
|
||||
@maintainers
|
||||
Friedrich W. H. Kossebau \<kossebau\@kde.org\>
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio kparts
|
||||
// DOXYGEN_SET_PROJECT_NAME = KHexEdit
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,19 +0,0 @@
|
|||
/** @mainpage KMediaPlayer
|
||||
|
||||
%KMediaPlayer provides an API for re-usable media player components.
|
||||
<p>
|
||||
@ref KMediaPlayer::Player "Player" provides all the necessary media
|
||||
player operations, with an optional GUI to control them.
|
||||
|
||||
@authors
|
||||
Neil Stevens \<neil@qualityassistant.com\> (@ref KMediaPlayer::Player "Player", @ref KMediaPlayer::View "View")<br>
|
||||
|
||||
@licenses
|
||||
@x11 (@ref KMediaPlayer::Player "Player", @ref KMediaPlayer::View "View")<br>
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio kparts
|
||||
// DOXYGEN_SET_PROJECT_NAME = KMediaPlayer
|
||||
// DOXYGEN_EXCLUDE += kfileaudiopreview
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
File diff suppressed because it is too large
Load diff
|
@ -1,635 +0,0 @@
|
|||
/*
|
||||
This file is part of the KDE project
|
||||
|
||||
Copyright (c) 2005-2006 by Dominik Haumann <dhdev@gmx.de>
|
||||
Copyright (c) 2005 by Christoph Cullmann <cullmann@kde.org>
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.2
|
||||
or any later version published by the Free Software Foundation;
|
||||
*/
|
||||
|
||||
/** \mainpage KTextEditor
|
||||
|
||||
<p><b>
|
||||
Overview |
|
||||
\ref kte_design "Design" |
|
||||
\ref kte_guidelines "Coding Guidelines" |
|
||||
\ref kte_port_to_kde4 "Porting to KDE 4" |
|
||||
\ref kte_howto "Using"
|
||||
</b></p>
|
||||
|
||||
\section kte_intro Introduction
|
||||
The KTextEditor interfaces - also called KTE interfaces - are a set of
|
||||
well-defined interfaces which an application or library can implement to provide
|
||||
advanced plain text editing services. Applications which utilise this interface
|
||||
can thus allow the user to choose which implementation of the editor component
|
||||
to use. The only implementation right now is the Kate Editor Component
|
||||
(Kate Part).
|
||||
|
||||
\section kte_general General
|
||||
- \ref kte_design
|
||||
- \ref kte_howto
|
||||
- \ref kte_port_to_kde4
|
||||
- <a href="http://www.kate-editor.org/support">Contact/Mailing Lists</a>
|
||||
|
||||
|
||||
\section kte_notes Implementation Notes
|
||||
- \ref kte_guidelines
|
||||
|
||||
\section kte_extensions Extension Interfaces
|
||||
- \ref kte_group_doc_extensions
|
||||
- \ref kte_group_view_extensions
|
||||
- \ref kte_group_editor_extensions
|
||||
- \ref kte_group_plugin_extensions
|
||||
- \ref kte_group_command_extensions
|
||||
- \ref kte_group_ccmodel_extensions
|
||||
|
||||
\section kte_apiref API Reference
|
||||
- <a href="classes.html">All Classes</a>
|
||||
- <a href="annotated.html">Annotated Classes</a>
|
||||
- <a href="hierarchy.html">Inheritance Hierarchy</a>
|
||||
<!-- grouped classes -> TODO Grouping -->
|
||||
|
||||
@authors
|
||||
Dominik Haumann \<dhdev@gmx.de\><br>
|
||||
Christoph Cullmann \<cullmann@kde.org\><br>
|
||||
Hamish Rodda \<rodda@kde.org\><br>
|
||||
Joseph Wenninger \<jowenn@kde.org\><br>
|
||||
Jochen Wilhelmy \<digisnap@cs.tu-berlin.de\><br>
|
||||
Anders Lund \<anders@alweb.dk\><br>
|
||||
Matt Broadstone \<mbroadst@gmail.com\>
|
||||
|
||||
@maintainers
|
||||
Dominik Haumann \<dhdev@gmx.de\><br>
|
||||
Christoph Cullmann \<cullmann@kde.org\><br>
|
||||
Hamish Rodda \<rodda@kde.org\>
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \page kte_design Overview of the Core Interface Design
|
||||
|
||||
<p><b>
|
||||
\ref index "Overview" |
|
||||
Design |
|
||||
\ref kte_guidelines "Coding Guidelines" |
|
||||
\ref kte_port_to_kde4 "Porting to KDE 4" |
|
||||
\ref kte_howto "Using"
|
||||
</b></p>
|
||||
|
||||
The core of the KTextEditor interfaces consists of several main interfaces:
|
||||
- KTextEditor::Factory \n
|
||||
The Factory provides access to the editor object.
|
||||
- KTextEditor::Editor \n
|
||||
The Editor interface allows you to create documents, get a document list,
|
||||
and a be informed when a new document is created.
|
||||
- KTextEditor::Document \n
|
||||
The Document interface represents a single document and enables the creation of
|
||||
views, access to and manipulation of document contents, and access to document
|
||||
extension interfaces.
|
||||
- KTextEditor::View \n
|
||||
The View provides a widget that displays the contents of a Document, and its
|
||||
interface allows for manipulation of text selection, position of the cursor and mouse,
|
||||
text selections, and behaviour of the view. Additionally it provides access to
|
||||
the view extension interfaces.
|
||||
|
||||
The hierarchy can be illustrated as follows:
|
||||
\image html ktexteditorhierarchy.png "Basic KTextEditor Hierarchy"
|
||||
|
||||
\section kte_design_user Notes for KTextEditor Users
|
||||
To use a KTextEditor implementation you first have to get the
|
||||
KTextEditor::Editor object. This can be done in several ways and is described
|
||||
in detail in the following documentation:
|
||||
- KTextEditor::Factory
|
||||
- KTextEditor::EditorChooser
|
||||
|
||||
\section kte_design_developer Notes for KTextEditor Developers
|
||||
The KTextEditor::Factory provides access to its KTextEditor::Editor. The
|
||||
Editor has a list of all opened documents and can create new documents. A
|
||||
Document's content is visualized by a View. A Document can have any number of
|
||||
views (or none). When the contents of the document are changed, the change
|
||||
is reflected in all views.
|
||||
|
||||
The Factory \e should always return the same Editor object, as
|
||||
it does not make sense to load the same editor implementation several times.
|
||||
Further notes about the Editor implementation can be found in the
|
||||
\ref editor_notes.
|
||||
|
||||
As applications can load different editor implementations via different
|
||||
factories (for example the kate-part and the yzis-part) the signal
|
||||
KTextEditor::Editor::documentCreated() contains the responsible Editor as
|
||||
first argument.
|
||||
|
||||
\see KTextEditor::Factory, KTextEditor::Editor, KTextEditor::Document,
|
||||
KTextEditor::View
|
||||
|
||||
\author Dominik Haumann \<dhdev@gmx.de\>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \page kte_guidelines Coding Guidelines and API Conventions
|
||||
|
||||
<p><b>
|
||||
\ref index "Overview" |
|
||||
\ref kte_design "Design" |
|
||||
Coding Guidelines |
|
||||
\ref kte_port_to_kde4 "Porting to KDE 4" |
|
||||
\ref kte_howto "Using"
|
||||
</b></p>
|
||||
|
||||
All KTextEditor interfaces have a consistent design.
|
||||
- naming follows Qt style. Avoid Java style getters like getSomeData()
|
||||
for example,
|
||||
- core interfaces (see \ref kte_design) which inherit QObject declare all
|
||||
signals as real signals,
|
||||
- all other interfaces, which do not subclass QObject, must declare their
|
||||
signals as virtual private member functions. An implementation must
|
||||
reimplement this virtual member function as a real signal.
|
||||
- all signals have the sender object as first parameter, for example
|
||||
all document signals have to look like this:
|
||||
\code
|
||||
void signalFromDocument (KTextEditor::Document *doc, ...);
|
||||
\endcode
|
||||
This allows easy and consistent query which object did send the signal,
|
||||
which is important for most applications, as they listen to multiple
|
||||
documents/views/editors/...
|
||||
- all interface functions should be virtual, to allow subclasses to
|
||||
overwrite them, most members should even be pure virtual, beside
|
||||
additional convenience/helper functions.
|
||||
|
||||
The interface KTextEditor::Cursor represents a cursorposition, i.e. a
|
||||
line/column tuple. The same holds for KTextEditor::Range. As both of this
|
||||
concepts are much cleaner than tuples, please keep the following guidelines:
|
||||
- never use line/column tuples in parameter lists, use KTextEditor::Cursor
|
||||
instead,
|
||||
- never use Cursor/Cursor tuples for ranges, use KTextEditor::Range
|
||||
instead of two Cursors.
|
||||
|
||||
\author Christoph Cullmann \<cullmann@kde.org\>
|
||||
\author Dominik Haumann \<dhdev@gmx.de\>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \defgroup kte_group_doc_extensions Document Extension Interfaces
|
||||
A KTextEditor implementation may implement a Document extension interface, but
|
||||
it does not \e need to. So as a KTextEditor user you have to cast the Document
|
||||
to the desired interface and then check, whether the cast returns NULL or the
|
||||
valid interface.
|
||||
|
||||
Use qobject_cast to cast a Document \e doc into the
|
||||
\e DesiredExtensionInterface, example:
|
||||
\code
|
||||
// doc is of type KTextEditor::Document*
|
||||
KTextEditor::DesiredExtensionInterface *iface =
|
||||
qobject_cast<KTextEditor::DesiredExtensionInterface*>( doc );
|
||||
|
||||
if( iface ) {
|
||||
// the implementation supports the interface
|
||||
// do stuff
|
||||
}
|
||||
else
|
||||
{
|
||||
// the implementation does not support the interface
|
||||
}
|
||||
\endcode
|
||||
|
||||
\see KTextEditor::Document
|
||||
|
||||
The following classes are a list of all available Document extension interfaces.
|
||||
<!-- The classes are defined by the \ingroup doxygen command -->
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \defgroup kte_group_smart_classes Smart Cursors and Ranges
|
||||
\ingroup kte_group_doc_extensions
|
||||
|
||||
If the KTextEditor implementation supports the KTextEditor::SmartInterface,
|
||||
there are several \e smart classes available.
|
||||
|
||||
In general, instances of the \e smart classes are bound to a specific document, and maintain their
|
||||
position in that document regardless of changes to the text. They also provide:
|
||||
- feedback on changes to their position and changes to text related to their position,
|
||||
- support for the other \e smart interfaces, such as arbitrary highlighting, action binding, etc.
|
||||
|
||||
The following is a list of all classes that are available when the document
|
||||
supports the KTextEditor::SmartInterface:
|
||||
|
||||
\warning All Smart interfaces were deprecated and not implemented anymore in
|
||||
KDE >= 4.6. They were replaced by the \ref kte_group_moving_classes
|
||||
|
||||
<!-- The classes are defined by the \ingroup doxygen command -->
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \defgroup kte_group_moving_classes MovingCursors and MovingRanges
|
||||
\ingroup kte_group_doc_extensions
|
||||
|
||||
If the KTextEditor implementation supports the KTextEditor::MovingInterface,
|
||||
there are several \e moving classes available.
|
||||
|
||||
Instances of the \e moving classes are bound to a specific Document, and
|
||||
maintain their position in that document regardless of changes to the text.
|
||||
Changes to MovingRange%s can be caught by using the class MovingRangeFeedback.
|
||||
|
||||
The following is a list of all classes that are available when the document
|
||||
supports the KTextEditor::MovingInterface:
|
||||
|
||||
<!-- The classes are defined by the \ingroup doxygen command -->
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \defgroup kte_group_view_extensions View Extension Interfaces
|
||||
A KTextEditor implementation may implement a View extension interface, but
|
||||
it does not \e need to. So as a KTextEditor user you have to cast the View
|
||||
to the desired interface and then check, whether the cast returns NULL or the
|
||||
valid interface.
|
||||
|
||||
Use qobject_cast to cast a View \e view into the
|
||||
\e DesiredExtensionInterface, example:
|
||||
\code
|
||||
// view is of type KTextEditor::View*
|
||||
KTextEditor::DesiredExtensionInterface *iface =
|
||||
qobject_cast<KTextEditor::DesiredExtensionInterface*>( view );
|
||||
|
||||
if( iface ) {
|
||||
// the implementation supports the interface
|
||||
// do stuff
|
||||
}
|
||||
else
|
||||
{
|
||||
// the implementation does not support the interface
|
||||
}
|
||||
\endcode
|
||||
|
||||
\see KTextEditor::View
|
||||
|
||||
The following classes are a list of all available View extension interfaces.
|
||||
<!-- The classes are defined by the \ingroup doxygen command -->
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \defgroup kte_group_editor_extensions Editor Extension Interfaces
|
||||
A KTextEditor implementation may implement an Editor extension interface, but
|
||||
it does not \e need to. So as a KTextEditor user you have to cast the Editor
|
||||
to the desired interface and then check, whether the cast returns NULL or the
|
||||
valid interface.
|
||||
|
||||
Use qobject_cast to cast a Editor \e editor into the
|
||||
\e DesiredExtensionInterface, example:
|
||||
\code
|
||||
// editor is of type KTextEditor::Editor*
|
||||
KTextEditor::DesiredExtensionInterface *iface =
|
||||
qobject_cast<KTextEditor::DesiredExtensionInterface*>( view );
|
||||
|
||||
if( iface ) {
|
||||
// the implementation supports the interface
|
||||
// do stuff
|
||||
}
|
||||
else
|
||||
{
|
||||
// the implementation does not support the interface
|
||||
}
|
||||
\endcode
|
||||
|
||||
\see KTextEditor::Editor
|
||||
|
||||
The following classes are a list of all available Editor extension interfaces.
|
||||
<!-- The classes are defined by the \ingroup doxygen command -->
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \defgroup kte_group_plugin_extensions Plugin Extension Interfaces
|
||||
A KTextEditor Plugin can use extension interfaces, but it does not \e need
|
||||
to. So as a KTextEditor implementator you have to cast the Plugin to the desired
|
||||
interface and then check, whether the cast returns NULL or the valid interface.
|
||||
|
||||
Use qobject_cast to cast a Plugin \e plugin into the
|
||||
\e DesiredExtensionInterface, example:
|
||||
\code
|
||||
// plugin is of type KTextEditor::Plugin*
|
||||
KTextEditor::DesiredExtensionInterface *iface =
|
||||
qobject_cast<KTextEditor::DesiredExtensionInterface*>( plugin );
|
||||
|
||||
if( iface ) {
|
||||
// the implementation supports the interface
|
||||
// do stuff
|
||||
}
|
||||
else
|
||||
{
|
||||
// the implementation does not support the interface
|
||||
}
|
||||
\endcode
|
||||
|
||||
\see KTextEditor::Plugin
|
||||
|
||||
The following classes are a list of all available Plugin extension interfaces.
|
||||
<!-- The classes are defined by the \ingroup doxygen command -->
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \defgroup kte_group_command_extensions Command Extension Interfaces
|
||||
A KTextEditor command-line Command can use extension interfaces, but it does not
|
||||
\e need to. So as a KTextEditor implementator you have to cast the Command to
|
||||
the desired interface and then check, whether the cast returns NULL or the valid
|
||||
interface.
|
||||
|
||||
Use qobject_cast to cast a Command \e cmd into the
|
||||
\e DesiredExtensionInterface, example:
|
||||
\code
|
||||
// cmd is of type KTextEditor::Command*
|
||||
KTextEditor::DesiredExtensionInterface *iface =
|
||||
qobject_cast<KTextEditor::DesiredExtensionInterface*>( cmd );
|
||||
|
||||
if( iface ) {
|
||||
// the implementation supports the interface
|
||||
// do stuff
|
||||
}
|
||||
else
|
||||
{
|
||||
// the implementation does not support the interface
|
||||
}
|
||||
\endcode
|
||||
|
||||
\see KTextEditor::Command
|
||||
|
||||
The following classes are a list of all available Command extension interfaces.
|
||||
<!-- The classes are defined by the \ingroup doxygen command -->
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/** \defgroup kte_group_ccmodel_extensions CodeCompletionModel Extension Interfaces
|
||||
A CodeCompletionModel implementation may implement a CodeCompletionModel
|
||||
extension interface, but it does not \e need to.
|
||||
|
||||
\see KTextEditor::CodeCompletionModel
|
||||
|
||||
The following classes are a list of all available CodeCompletionModel
|
||||
extension interfaces.
|
||||
<!-- The classes are defined by the \ingroup doxygen command -->
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/** \page kte_port_to_kde4 Porting to KDE 4
|
||||
|
||||
<p><b>
|
||||
\ref index "Overview" |
|
||||
\ref kte_design "Design" |
|
||||
\ref kte_guidelines "Coding Guidelines" |
|
||||
Porting to %KDE 4 |
|
||||
\ref kte_howto "Using"
|
||||
</b></p>
|
||||
|
||||
This document describes porting applications using the KTextEditor interfaces
|
||||
from KDE 3 to KDE 4. This page does not try to be complete; its main goal is
|
||||
to show what interfaces were removed, changed or added to give some impression
|
||||
and orientation of what you have to do to port your application to the KDE 4
|
||||
KTextEditor interfaces.
|
||||
|
||||
\section kte_port_intro Introduction
|
||||
The KTextEditor interfaces changes in KDE 4 are neither binary nor source
|
||||
compatible to the KTextEditor interfaces included in KDE 3, so programs
|
||||
written/compiled for the KDE 3 KTextEditor interfaces will not compile
|
||||
(nor run) under KDE 4. There are no plans to provide a compatibility layer.
|
||||
|
||||
The KDE 4 KTextEditor interfaces undergone a heavy cleanup, i.e. obsolete
|
||||
functions were removed, interfaces were merged and extended. All interface
|
||||
changes like for example parameter changes of a function are not mentioned in
|
||||
detail in this page, look into the particular class API documentation. As
|
||||
already mentioned in the mainpage, all line/column tuples were replaced with a
|
||||
KTextEditor::Cursor, and all Cursor/Cursor tuples with a KTextEditor::Range.
|
||||
|
||||
A KTextEditor::Factory class was introduced to access a specific Editor
|
||||
implementation, read \ref kte_design for detailed information.
|
||||
|
||||
\section kte_port_remove Removed Interfaces
|
||||
Some interfaces were removed mainly because they described user actions which
|
||||
implementation and support is up to the KTextEditor part itself, like
|
||||
printing, copy & paste and word wrapping. Entirely removed interfaces are, in
|
||||
order:
|
||||
- all DCOP interfaces
|
||||
- \p ClipboardInterface
|
||||
- \p CursorInterface
|
||||
- \p DynWordWrapInterface
|
||||
- \p PrintInterface
|
||||
- \p SelectionExtDCOPInterface
|
||||
- \p UndoInterface
|
||||
- \p ViewStatusMsgInterface
|
||||
- \p WordWrapInterface
|
||||
|
||||
\section kte_port_merge Merged Interfaces
|
||||
The following interfaces were merged, in order:
|
||||
- \p BlockSelectionInterface, \p SelectionInterface and
|
||||
\p SelectionInterfaceExt were merged into the KTextEditor::View, so that a
|
||||
KTextEditor::Document itself does not provide any selection methods anymore.
|
||||
- \p ConfigInterface was partly merged into the KTextEditor::Editor and now
|
||||
only contains very basic functions to set/get properties. Session related
|
||||
config options can be configured in a new interface called
|
||||
KTextEditor::SessionConfigInterface
|
||||
- \p DocumentInfoInterface was merged into the KTextEditor::Document
|
||||
- \p EditInterface was merged into the KTextEditor::Document
|
||||
- \p EditInterfaceExt was merged into the KTextEditor::Document
|
||||
- \p EncodingInterface was merged into the KTextEditor::Document
|
||||
- \p HighlightingInterface was merged into the KTextEditor::Document
|
||||
- \p MarkInterfaceExtension was merged into the KTextEditor::MarkInterface
|
||||
- \p PluginViewInterface was merged into the KTextEditor::Plugin
|
||||
- \p PopupMenuInterface was merged into the KTextEditor::View
|
||||
- \p ViewCursorInterface was merged into the KTextEditor::View
|
||||
|
||||
\section kte_port_rename Interface Changes
|
||||
The following interfaces were renamed:
|
||||
- \p KTextEditor::CodeCompletionInterface was changed to support several
|
||||
clients at once. A client registers a so-called
|
||||
KTextEditor::CompletionProvider that provides its own completion and argument
|
||||
hint da.
|
||||
- \p CompletionEntry was renamed to KTextEditor::CompletionItem
|
||||
- signal \p modifiedOnDisc() was renamed to
|
||||
KTextEditor::ModificationInterface::modifiedOnDisk()
|
||||
|
||||
\section kte_port_new New Interfaces
|
||||
The following interfaces are new:
|
||||
- KTextEditor::CommandInterface, support for command-line commands
|
||||
- KTextEditor::ModificationInterface, support for handling external modified
|
||||
files
|
||||
- KTextEditor::SessionConfigInterface, support for session specific settings
|
||||
- KTextEditor::SmartInterface, support for smart cursors + ranges, plus their
|
||||
uses such as arbitrary highlighting and action association
|
||||
|
||||
\section kte_port_enhanced_classes Significantly Enhanced Classes
|
||||
The following classes have been significantly enhanced:
|
||||
- KTextEditor::Cursor \n
|
||||
Has been upgraded for greatly increased convenience, and now forms a
|
||||
cornerstone of the KTextEditor interfaces.
|
||||
|
||||
\section kte_port_new_classes New Classes
|
||||
The following classes are new:
|
||||
- KTextEditor::SmartCursor \n
|
||||
A cursor which is bound to a specific KTextEditor::Document, and maintains
|
||||
its position.
|
||||
- KTextEditor::SmartCursorWatcher and KTextEditor::SmartCursorNotifier \n
|
||||
Classes for providing notifications of changes to a SmartCursor.
|
||||
- KTextEditor::Range \n
|
||||
A tuple of start + end cursors with many convenience methods
|
||||
- KTextEditor::SmartRange \n
|
||||
A KTextEditor::Range which is bound to a specific Document, and maintains its
|
||||
position.
|
||||
- KTextEditor::SmartRangeWatcher and KTextEditor::SmartRangeNotifier \n
|
||||
Classes for providing notifications of changes to a SmartRange.
|
||||
|
||||
\section kte_port_plugins Plugin Architecture Changes
|
||||
The KTextEditor::Plugin interface changed to support more than only one
|
||||
KTextEditor::Document at a time. A plugin in a KDE 4 KTextEditor implementation
|
||||
no longer is bound to a single document (i.e. for \e every document a single
|
||||
instance of the plugin existed). Now, a plugin can handle several documents and
|
||||
views. Also a plugin now is able to load and save session related config
|
||||
settings if desired.
|
||||
|
||||
\see KTextEditor::Plugin
|
||||
|
||||
\author Dominik Haumann \<dhdev@gmx.de\>
|
||||
\author Hamish Rodda \<rodda@kde.org\>
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** \page kte_howto How to use the KTextEditor Interfaces
|
||||
|
||||
<p><b>
|
||||
\ref index "Overview" |
|
||||
\ref kte_design "Design" |
|
||||
\ref kte_guidelines "Coding Guidelines" |
|
||||
\ref kte_port_to_kde4 "Porting to KDE 4" |
|
||||
Using
|
||||
</b></p>
|
||||
|
||||
This HOWTO will explain step by step how to load a KTextEditor component and
|
||||
plug a single View into a KMainWindow.
|
||||
|
||||
Tobics:
|
||||
- \ref kte_howto_header
|
||||
- \ref kte_howto_source
|
||||
- \ref kte_howto_notes
|
||||
|
||||
\section kte_howto_header The Header File
|
||||
|
||||
The following class only contains two pointers to a Document and its View.
|
||||
|
||||
\code
|
||||
#include <kxmlguiwindow.h>
|
||||
|
||||
namespace KTextEditor
|
||||
{
|
||||
class Document;
|
||||
class View;
|
||||
}
|
||||
|
||||
class MainWindow : public KXmlGuiWindow
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainWindow();
|
||||
~MainWindow();
|
||||
|
||||
private:
|
||||
KTextEditor::View *m_view;
|
||||
KTextEditor::Document *m_document;
|
||||
};
|
||||
\endcode
|
||||
|
||||
\section kte_howto_source The Mainwindow Implementation
|
||||
|
||||
The following source code queries for a Editor part by using the EditorChooser.
|
||||
If the returned Editor is invalid, we simply quit, otherwise we create a new
|
||||
document and a view and plug it into the mainwindow.
|
||||
|
||||
\code
|
||||
#include "mainwindow.h"
|
||||
#include <ktexteditor/document.h>
|
||||
#include <ktexteditor/view.h>
|
||||
#include <ktexteditor/editor.h>
|
||||
#include <ktexteditor/editorchooser.h>
|
||||
|
||||
#include <kxmlguifactory.h>
|
||||
#include <kmessagebox.h>
|
||||
|
||||
MainWindow::MainWindow ()
|
||||
: KXmlGuiWindow(),
|
||||
m_view(0),
|
||||
m_document(0)
|
||||
{
|
||||
KTextEditor::Editor *editor = KTextEditor::EditorChooser::editor();
|
||||
|
||||
if (!editor) {
|
||||
KMessageBox::error(this, i18n("A KDE text-editor component could not be found;\n"
|
||||
"please check your KDE installation."));
|
||||
kapp->exit(1);
|
||||
}
|
||||
|
||||
m_document = editor->createDocument(0);
|
||||
m_view = m_document->createView(this);
|
||||
|
||||
setCentralWidget(m_view);
|
||||
|
||||
setXMLFile("mainwindowui.rc");
|
||||
guiFactory()->addClient(m_view);
|
||||
|
||||
show ();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
if (m_document) {
|
||||
guiFactory()->removeClient(m_view);
|
||||
|
||||
// the document deletes its views itself
|
||||
delete m_document;
|
||||
}
|
||||
}
|
||||
\endcode
|
||||
|
||||
\section kte_howto_notes Notes
|
||||
In order to compile link against the following libraries:
|
||||
- ktexteditor
|
||||
- kdeui
|
||||
|
||||
\author Dominik Haumann \<dhdev@gmx.de\>
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio kparts
|
||||
// DOXYGEN_SET_PROJECT_NAME = KTextEditor
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,17 +0,0 @@
|
|||
/** @mainpage KActivities
|
||||
|
||||
@authors
|
||||
See the copyright notices on the individual files.
|
||||
|
||||
@maintainers
|
||||
See the MAINTAINER file
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_SET_PROJECT_NAME = KActivities
|
||||
// DOXYGEN_SET_RECURSIVE = YES
|
||||
// DOXYGEN_EXCLUDE_PATTERNS = *_p.h */private/* */tests/* */ontologies/* */service/* */scripts/* */workspace/*
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,31 +0,0 @@
|
|||
/** @mainpage ./kconf_update
|
||||
|
||||
kconf_update is a tool designed to update config files. Over time applications
|
||||
sometimes need to rearrange the way configuration options are stored. Since
|
||||
such an update shouldn't influence the configuration options that the user
|
||||
has selected, the application must take care that the options stored in the
|
||||
old way will still be honored.
|
||||
|
||||
What used to happen is that the application looks up both the old and the
|
||||
new configuration option and then decides which one to use. This method has
|
||||
several drawbacks:
|
||||
- The application may need to read more configuration files than strictly
|
||||
needed, resulting in a slower startup.
|
||||
- The application becomes bigger with code that will only be used once.
|
||||
|
||||
kconf_update addresses these problems by offering a framework to update
|
||||
configuration files without adding code to the application itself.
|
||||
|
||||
See the <a href="http://websvn.kde.org/trunk/KDE/kdelibs/kconf_update/README.kconf_update?view=markup">README file</a> for more information.
|
||||
|
||||
@authors
|
||||
Waldo Bastian \<bastian@kde.org\>
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,45 +0,0 @@
|
|||
/** \mainpage The KDE Core Library
|
||||
|
||||
All KDE programs use this library to provide basic functionality such
|
||||
as the configuration system, IPC, internationalization and locale
|
||||
support, site-independent access to the filesystem and a large number
|
||||
of other (but no less important) things.
|
||||
<p>
|
||||
All KDE applications should link to the kdecore library. Also, using a
|
||||
KApplication derived class instead of QApplication is almost
|
||||
mandatory if you expect your application to behave nicely within the
|
||||
KDE environment.
|
||||
|
||||
If you are unsure where to start, have a look at the
|
||||
<a href="http://techbase.kde.org/Development/Tutorials">tutorials on
|
||||
TechBase</a> to get you going.
|
||||
|
||||
If you know what you are looking for, you should be able to find it in
|
||||
the <a href="annotated.html">class list</a> or the
|
||||
<a href="modules.html">modules list</a>.
|
||||
|
||||
@authors
|
||||
Various: see copyrights on individual files for more information
|
||||
|
||||
@maintainers
|
||||
See the
|
||||
<a href="http://websvn.kde.org/trunk/KDE/kdelibs/kdecore/MAINTAINERS?view=markup">MAINTAINERS</a>
|
||||
file.
|
||||
|
||||
@licenses
|
||||
Library: @lgpl<br>
|
||||
Some helper utilities: @gpl
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
\defgroup KDEMacros KDE Macros
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_EXCLUDE = malloc kde_file.h
|
||||
// DOXYGEN_SET_INPUT += @topdir@/kdemacros.h.cmake
|
||||
// DOXYGEN_SET_INPUT += @topdir@/kdecore/util/kdeversion.h.cmake
|
||||
// DOXYGEN_SET_PROJECT_NAME = KDECore
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,26 +0,0 @@
|
|||
/** @mainpage The KDE Daemon
|
||||
|
||||
KDED runs in the background and performs a number of small tasks. Some
|
||||
of these tasks are built in, others are started on demand.
|
||||
<p>
|
||||
The chances are you are looking here because you want to write a
|
||||
KDED module. For that, see KDEDModule in kdecore and the
|
||||
<a href="http://websvn.kde.org/trunk/KDE/kdelibs/kded/README.kded?view=markup">KDED
|
||||
README</a>.
|
||||
|
||||
|
||||
@authors
|
||||
David Faure \<dfaure@kde.org\><br>
|
||||
Waldo Bastian \<bastian@kde.org\>
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio
|
||||
// DOXYGEN_SET_PROJECT_NAME = KDED
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,21 +0,0 @@
|
|||
/** @mainpage Console-mode authentication
|
||||
|
||||
libkdesu provides functionality for building GUI front ends for
|
||||
(password asking) console mode programs. For example, kdesu and
|
||||
kdessh use it to interface with su and ssh respectively.
|
||||
|
||||
@authors
|
||||
Geert Jansen \<jansen@kde.org\>
|
||||
|
||||
@maintainers
|
||||
Adriaan de Groot \<groot@kde.org\>
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore
|
||||
// DOXYGEN_SET_PROJECT_NAME = KDEsu
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,65 +0,0 @@
|
|||
/*
|
||||
A dummy source file for documenting the library.
|
||||
Sirtaj Singh Kang <taj@kde.org>
|
||||
Distributed under the LGPL.
|
||||
*/
|
||||
|
||||
/** @mainpage The KDE User Interface Library
|
||||
|
||||
This library provides standard user interface elements for use in
|
||||
%KDE applications. If your %KDE application has a GUI, you will almost
|
||||
certainly link to libkdeui.
|
||||
<p>
|
||||
Most applications with single or multiple toplevel widgets
|
||||
should use the KMainWindow class in this library, which
|
||||
automatically provides features like session management and simplified
|
||||
toolbar/menubar/statusbar creation.
|
||||
|
||||
A spell-checker library is also provided.
|
||||
Sonnet offers easy access to International ISpell or ASpell
|
||||
(at the user's option) as well as a spell-checker GUI
|
||||
("Add", "Replace", etc.).
|
||||
|
||||
You can use Sonnet to
|
||||
automatically spell-check an ASCII file as well as to implement
|
||||
online spell-checking and to spell-check proprietary format and
|
||||
marked up (e.g. HTML, TeX) documents. The relevant methods for
|
||||
these three procedures are check(), checkWord(), and
|
||||
checkList(), respectively.
|
||||
|
||||
SonnetConfig holds configuration information about Sonnet as well
|
||||
as acting as an options-setting dialog.
|
||||
|
||||
Sonnet usually works asynchronously. If you do not need that, you should
|
||||
simply use Sonnet::modalCheck(). It won't return until the
|
||||
passed string is processed or the spell checking canceled.
|
||||
During modal spell checking your GUI is still repainted, but the user may
|
||||
only interact with the Sonnet dialog.
|
||||
|
||||
@see Sonnet, SonnetConfig
|
||||
|
||||
@authors
|
||||
Various: see the copyright headers of the individual files.
|
||||
|
||||
@maintainers
|
||||
See the
|
||||
<a href="http://websvn.kde.org/trunk/KDE/kdelibs/kdeui/MAINTAINERS?view=markup">MAINTAINERS</a>
|
||||
file.
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
|
||||
\defgroup KDEUIMacros KDEUI Macros
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore
|
||||
// DOXYGEN_SET_INTERNAL_DOCS = YES
|
||||
// DOXYGEN_SET_PROJECT_NAME = KDEUI
|
||||
// DOXYGEN_SET_RECURSIVE = YES
|
||||
// DOXYGEN_EXCLUDE_PATTERNS = *_p.h */tests/*
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,27 +0,0 @@
|
|||
/**
|
||||
* @mainpage The KDE WebKit Library
|
||||
*
|
||||
* This library provides KDE integration of the QtWebKit library. If you are
|
||||
* using QtWebKit in your KDE application, you are encouraged to use this layer
|
||||
* instead of using the QtWebKit classes directly.
|
||||
*
|
||||
* In particular, you should use KWebView in place of QWebView, KGraphicsWebView
|
||||
* in place of QGraphicsWebView and KWebPage in place of QWebPage.
|
||||
* See the documentation for those classes for more information.
|
||||
*
|
||||
* @authors
|
||||
* Various: see the copyright headers of the individual files.
|
||||
*
|
||||
* @maintainers
|
||||
* For support please use the webkit@kde.org mailing list.
|
||||
*
|
||||
* @licenses
|
||||
* @lgpl
|
||||
*
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio
|
||||
// DOXYGEN_SET_INTERNAL_DOCS = YES
|
||||
// DOXYGEN_SET_PROJECT_NAME = KDEWebKit
|
||||
// DOXYGEN_SET_RECURSIVE = YES
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,4 +0,0 @@
|
|||
/** @mainpage
|
||||
*
|
||||
* Main Doxygen page for KWebKitPart.
|
||||
*/
|
|
@ -1,39 +0,0 @@
|
|||
/** @mainpage The File Selection Dialog
|
||||
|
||||
@section purpose Purpose
|
||||
|
||||
The kfile library provides the file selection dialog and its components.
|
||||
|
||||
@section desc Description
|
||||
|
||||
The file dialog is available to all kde applications by using the KFileDialog class
|
||||
from the KIO library. This class doesn't contain the actual implementation of the file
|
||||
dialog, however: it dynamically opens the code that contains the implementation.
|
||||
The kfile library provides KFileWidget, which is the main widget in the file dialog, as well as
|
||||
the KDirOperator widget which contains the file views, and other components of the file dialog.
|
||||
Applications only need to link to libkfile if they need direct access to KFileWidget
|
||||
or KDirOperator or to the other widgets used by the file dialog, either in order to
|
||||
modify the behavior of the file dialog, or to reuse its components into the application itself.
|
||||
|
||||
Use ${KDE4_KFILE_LIBS} in the target_link_libraries of your CMakeLists.txt
|
||||
to link to kfile.
|
||||
|
||||
@authors
|
||||
Stephan Kulow<br>
|
||||
Carsten Pfeiffer<br>
|
||||
Peter Penz<br>
|
||||
Aaron J. Seigo<br>
|
||||
and others
|
||||
|
||||
@maintainers
|
||||
David Faure
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio kde3support solid
|
||||
// DOXYGEN_SET_PROJECT_NAME = KFile
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,29 +0,0 @@
|
|||
/** @mainpage ImageFormat Plugins
|
||||
|
||||
Provides imageformat plugins for Qt so that it can read more image file types.
|
||||
|
||||
@authors
|
||||
Sirtaj Singh Kang \<taj@kde.org><br>
|
||||
Dirk Schoenberger<br>
|
||||
Torben Weis \<weis@kde.org><br>
|
||||
Thomas Tanghus \<tanghus@kde.org><br>
|
||||
Antonio Larossa \<larossa@kde.org\><br>
|
||||
Sven Wiegand \<SWiegand@tfh-berlin.de><br>
|
||||
Dominik Seichter \<domseichter@web.de><br>
|
||||
Nadeem Hasan \<nhasan@kde.org><br>
|
||||
Melchior Franz \<mfranz@kde.org><br>
|
||||
Allen Barnett \<allen@lignumcomputing.com><br>
|
||||
Ignacio Castaño \<castano@ludicon.com><br>
|
||||
Christoph Hormann \<chris_hormann@gmx.de><br>
|
||||
Michael Ritzert \<kde@ritzert.de>
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_SET_PROJECT_NAME = KImgIO
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,29 +0,0 @@
|
|||
/** @mainpage KDE Initialization Routines
|
||||
|
||||
kdeinit is a process launcher somewhat similar to the
|
||||
famous init used for booting UNIX.
|
||||
<p>
|
||||
It launches processes by forking and then loading a
|
||||
dynamic library which should contain a 'main(...)'
|
||||
function. This both increases the startup speed and
|
||||
reduces the memory consumption of KDE applications.
|
||||
|
||||
kdeinit4_wrapper, kshell4 and kwrapper4 provide methods
|
||||
of starting programs via kdeinit4.
|
||||
|
||||
@authors
|
||||
Waldo Bastian \<bastian@kde.org\><br>
|
||||
Process title changing code taken from the ProFTPD Project, adapted by Alex Merry
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@gpl<br>
|
||||
Most code is @lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore
|
||||
// DOXYGEN_SET_PROJECT_NAME = KInit
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
127
kio/Mainpage.dox
127
kio/Mainpage.dox
|
@ -1,127 +0,0 @@
|
|||
/** @mainpage KIO: Network-enabled File Management
|
||||
|
||||
<p><b>
|
||||
Overview |
|
||||
@ref filedialog "File Selector"
|
||||
</b></p>
|
||||
|
||||
This library implements almost all the file management functions you
|
||||
will ever need. In fact, the %KDE file manager, Konqueror also uses
|
||||
this to provide its network-enabled file management.
|
||||
|
||||
The easiest way to use this library from a %KDE application is via the
|
||||
KIO::NetAccess class (for easy synchronous access) or via the
|
||||
KIO::Job class (for more complex asynchronous jobs).
|
||||
|
||||
This library also implements the %KDE file selector widget (see
|
||||
@ref filedialog "the page on the file selector widget").
|
||||
|
||||
Use ${KDE4_KIO_LIBS} in the target_link_libraries of your CMakeLists.txt
|
||||
to link to kio.
|
||||
|
||||
@authors
|
||||
Various: see copyright headers in individual files
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
/** @page filedialog KDE File Dialog Widget
|
||||
|
||||
<p><b>
|
||||
@ref index "Overview" |
|
||||
File Selector
|
||||
</b></p>
|
||||
|
||||
This library provides the KDE file selector widget, its building blocks
|
||||
and some other widgets that make use of the file selector.
|
||||
|
||||
The file dialog provides different views: there is a vertically scrolling
|
||||
view based on K3ListView, showing things like filename, file size,
|
||||
permissions etc. in separate columns. And there is a horizontally scrolling
|
||||
view based on K3IconView. Additionally, there are some compound views,
|
||||
like a view using the icon-view for files on the right side and another
|
||||
view for directories on the left. A view, that shows a preview for the
|
||||
currently selected file (using KIO::PreviewJob to generate previews)
|
||||
and any other view to show the files is also available.
|
||||
|
||||
All those views share a common baseclass, named KFileView, which
|
||||
defines the interface for inserting files into a view, removing them,
|
||||
selecting etc.
|
||||
|
||||
The one class encapsulating all those views and adding browsing capabilities
|
||||
to them is KDirOperator. It allows the user to switch between different
|
||||
views.
|
||||
|
||||
KFileTreeView is a K3ListView based widget that displays files and/or
|
||||
directories as a tree. It does not implement the KFileView interface,
|
||||
however, so it can't be used with KDirOperator.
|
||||
|
||||
Besides the filebrowsing widgets, there is the KPropertiesDialog class,
|
||||
implementing a dialog showing the name, permissions, icons, meta
|
||||
information and all kinds of properties of a file, as well as providing a
|
||||
means to modify them.
|
||||
|
||||
The KPropertiesDialog is extensible with plugin-pages via the
|
||||
KPropsDlgPlugin class.
|
||||
|
||||
The KIconDialog class shows a list of icons installed on the system (as
|
||||
accessible via KIconLoader) and allows the user to select one.
|
||||
|
||||
KOpenWithDlg implements a dialog to choose an application from, that is
|
||||
to be run, e.g. to let the user choose an application to open a file/url
|
||||
with.
|
||||
|
||||
|
||||
@see KFileDialog:
|
||||
The class providing the file selector dialog. It combines a KDirOperator,
|
||||
KUrlBar and several other widgets.
|
||||
|
||||
@see KDirOperator:
|
||||
The class encapsulating different KFileViews, offering file browsing and
|
||||
file selection. Asynchronous, network transparent reading of directories
|
||||
is performed via the @ref KIO library.
|
||||
|
||||
@see KUrlRequester:
|
||||
A widget to be used for asking for a filename/path/URL. It consists of a
|
||||
KLineEdit (or KComboBox) and a button. Activating the button
|
||||
will open a KFileDialog. Typing in the lineedit is aided with
|
||||
filename completion.
|
||||
|
||||
@see KUrlRequesterDlg:
|
||||
A dialog to ask for a filename/path/URL, using KUrlRequester.
|
||||
|
||||
@see KFileView:
|
||||
The base class for all views to be used with KDirOperator.
|
||||
|
||||
@see KFileIconView:
|
||||
The KFileView based on K3IconView.
|
||||
|
||||
@see KFileDetailView:
|
||||
The KFileView based on K3ListView.
|
||||
|
||||
@see KFilePreview:
|
||||
The KFileView, combining a widget showing preview for a selected file
|
||||
and another KFileView for browsing.
|
||||
|
||||
@see KUrlBar:
|
||||
A widget offering a number of clickable entries which represent a URL,
|
||||
aligned horizontally or vertically. The entries are customizable by the
|
||||
user both on a per application basis or for all applications (URLs, their
|
||||
icon and the description can be added, removed or edited by the user).
|
||||
This is the widget used as "sidebar" in the KFileDialog.
|
||||
|
||||
@see KFileMetaInfoWidget:
|
||||
A widget that allows viewing and editing of meta data of a file, utilizing
|
||||
KFileMetaInfo.
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kjs kdeui
|
||||
// DOXYGEN_EXCLUDE = kssl/kssl
|
||||
// DOXYGEN_PROJECTNAME = KIO
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,36 +0,0 @@
|
|||
/** @mainpage KIO Slaves
|
||||
|
||||
KIO Slaves are out-of-process worker applications that
|
||||
perform protocol-specific communications.
|
||||
|
||||
See the <a href="../../kio/html/index.html">KIO</a>
|
||||
documentation for more information.
|
||||
|
||||
The following KIO slaves are provided by kdelibs:
|
||||
- Local file system (%file:/)
|
||||
- HTTP (%http:/)
|
||||
- FTP (%ftp:/)
|
||||
- File metadata (%metainfo:/)
|
||||
|
||||
@authors
|
||||
Rolf Magnus \<ramagnus@kde.org\><br>
|
||||
Stephan Kulow \<coolo@kde.org\><br>
|
||||
David Faure \<faure@kde.org\><br>
|
||||
Waldo Bastian \<bastian@kde.org\><br>
|
||||
Allan Sandfeld Jensen \<sandfeld@kde.org\><br>
|
||||
George Staikos \<staikos@kde.org\><br>
|
||||
Dawit Alemayehu \<adawit@kde.org\><br>
|
||||
Hamish Rodda \<rodda@kde.org\>
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kio kdeui
|
||||
// DOXYGEN_SET_RECURSIVE = YES
|
||||
// DOXYGEN_SET_PROJECT_NAME = KIOSlave
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,29 +0,0 @@
|
|||
/** \mainpage Collaborative Data Sharing in KDE Applications
|
||||
|
||||
The \b KNewStuff3 library adds data sharing capabilities to %KDE
|
||||
applications.
|
||||
It uses libattica to access Open Collaboration Services providers.
|
||||
In addition the static xml from <a href="http://ghns.freedesktop.org/">GHNS</a> is supported.
|
||||
|
||||
Application authors should use KNS3::DownloadDialog for downloading with get hot new stuff.
|
||||
For the upload KNS3::UploadDialog is used.
|
||||
|
||||
Related information such as creation of <b>*.knsrc</b> files can be found
|
||||
on techbase: <a href="http://techbase.kde.org/Development/Tutorials#Get_Hot_New_Stuff">Get Hot New Stuff tutorials</a>.
|
||||
|
||||
@authors
|
||||
Josef Spillner \<spillner@kde.org\>
|
||||
Jeremy Whiting \<jpwhiting@kde.org\>
|
||||
Frederik Gladhorn \<gladhorn@kde.org\>
|
||||
|
||||
@maintainers
|
||||
Jeremy Whiting \<jpwhiting@kde.org\>
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio
|
||||
// DOXYGEN_SET_PROJECT_NAME = KNewStuff
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,42 +0,0 @@
|
|||
/** @mainpage Framework for KDE Graphical Components
|
||||
|
||||
This library implements the framework for KDE parts, which are
|
||||
elaborate widgets with a user-interface defined in terms of actions
|
||||
(menu items, toolbar icons). See KParts::Part.
|
||||
|
||||
The library also provides a framework for applications that want to
|
||||
use parts. Such applications need to inherit their main window
|
||||
from KParts::MainWindow and provide a so-called shell GUI,
|
||||
which provides a basic skeleton GUI with part-independent functionality/actions.
|
||||
|
||||
Some KParts applications won't be specific to a given part, but expect
|
||||
to be able to embed, for instance, all types of viewers out there. For this
|
||||
the basic functionality of any viewer has been implemented in
|
||||
KParts::ReadOnlyPart, which viewer-like parts should inherit from.
|
||||
The same applies to KParts::ReadWritePart, which is for editor-like parts.
|
||||
|
||||
You can add actions to an existing KParts app from "outside", defining
|
||||
the code for those actions in a shared library. This mechanism is
|
||||
obviously called plugins, and implemented by KParts::Plugin.
|
||||
|
||||
For a complete, and very simple, example of how to use KParts to display
|
||||
any kind of file (i.e. making a generic viewer), see the documentation for
|
||||
KParts::ComponentFactory::createPartInstanceFromQuery.
|
||||
|
||||
@authors
|
||||
Simon Hausmann \<hausmann@kde.org\><br>
|
||||
David Faure \<faure@kde.org\><br>
|
||||
Kurt Granroth \<granroth@kde.org\><br>
|
||||
Michael Koch \<koch@kde.org\>
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio
|
||||
// DOXYGEN_SET_PROJECT_NAME = KParts
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,26 +0,0 @@
|
|||
/** @mainpage The KDE Pseudo Terminal Library
|
||||
|
||||
This library provides primitives to interface with pseudo terminal devices
|
||||
as well as a KProcess derived class for running child processes and
|
||||
communicating with them using a pty.
|
||||
|
||||
@see KPty, KPtyProcess
|
||||
|
||||
@authors
|
||||
Zack Weinberg \<zack@rabi.phys.columbia.edu\><br>
|
||||
Lars Doelle \<lars.doelle@on-line.de\><br>
|
||||
Waldo Bastian \<bastian@kde.org\><br>
|
||||
Oswald Buddenhagen \<ossi@kde.org\><br>
|
||||
|
||||
@maintainers
|
||||
Oswald Buddenhagen \<ossi@kde.org\><br>
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore
|
||||
// DOXYGEN_SET_INTERNAL_DOCS = YES
|
||||
// DOXYGEN_SET_PROJECT_NAME = KPty
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,131 +0,0 @@
|
|||
/** @mainpage Kross - a Scripting Framework for Applications
|
||||
|
||||
%Kross is a scripting bridge to embed scripting functionality
|
||||
into an application. %Kross provides an abstract API to provide
|
||||
scripting functionality in a interpreter-independent
|
||||
way. The application that uses %Kross should not need to know
|
||||
anything about the scripting language being used.
|
||||
|
||||
The main parts of %Kross:
|
||||
- @ref core "The core of Kross"
|
||||
- @ref modules "The optional Kross modules"
|
||||
- @ref console "The Kross console application"
|
||||
- @ref test "The unit and regression tests"
|
||||
|
||||
The interpreter backends supported by %Kross:
|
||||
- @ref kjs "The KDE JavaScript interpreter backend"
|
||||
- @ref qts "The QtScript interpreter backend"
|
||||
|
||||
Links:
|
||||
- <a href="http://kross.dipe.org">Kross website</a>
|
||||
- <a href="http://techbase.kde.org/Development/Tutorials/Kross-Tutorial">Kross tutorial on TechBase</a>
|
||||
- <a href="http://www.kexi-project.org/wiki/wikiview/index.php?Scripting">Scripting in Kexi</a>
|
||||
- <a href="http://www.koffice.org">KOffice website</a>
|
||||
|
||||
@authors
|
||||
Sebastian Sauer \<mail AT dipe DOT %org\><br>
|
||||
Cyrille Berger \<cberger AT cberger DOT net\>
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
/** @page components Components
|
||||
|
||||
These are the core components of %Kross
|
||||
|
||||
@section core The core of Kross
|
||||
|
||||
The core of %Kross provides the framework to deal transparently
|
||||
with interpreter-backends and offers abstract functionality
|
||||
to deal with scripts.
|
||||
|
||||
The Kross::Manager class is a singleton that provides the
|
||||
main entry point to deal with the %Kross Scripting Framework.
|
||||
|
||||
The Kross::Interpreter class is the base for interpreter
|
||||
implementations. Each scripting backend needs to inheritate
|
||||
its own interpreter and implement it.
|
||||
The Kross::InterpreterInfo class provides abstract information
|
||||
about a Interpreter before the interpreter-backend itself is
|
||||
loaded.
|
||||
|
||||
The Kross::Action class is an abstract container to deal with
|
||||
scripts like a single standalone scriptfile. Each action holds
|
||||
a reference to by the matching Kross::Interpreter created
|
||||
Kross::Script instance.
|
||||
|
||||
The Kross::ActionCollectionProxyModel class implements a
|
||||
QSortFilterProxyModel for a Kross::ActionCollectionModel instance
|
||||
which implements QAbstractItemModel to provide a model for views
|
||||
on a Kross::ActionCollection instance.
|
||||
|
||||
The Kross::ActionCollection class manages collections of
|
||||
Kross::Action instances.
|
||||
|
||||
|
||||
|
||||
|
||||
@section modules The optional Kross modules
|
||||
|
||||
%Kross is able to optional dynamic load modules which provide then
|
||||
additional functionality for scripts.
|
||||
|
||||
@subsection forms The Forms module
|
||||
|
||||
Kross::FormModule provides access to UI functionality like dialogs
|
||||
or widgets.
|
||||
|
||||
@subsection kdetranslation The KDE Translation module
|
||||
|
||||
Kross::TranslationModule provides access to the
|
||||
KDE internationalization and translation facilities.
|
||||
|
||||
|
||||
|
||||
|
||||
@section console The Kross console application
|
||||
|
||||
The %Kross console application provides an executable application
|
||||
to run by %Kross supported scripts from within the commandline:
|
||||
@code
|
||||
kross myscript.js
|
||||
@endcode
|
||||
|
||||
|
||||
|
||||
@section test The unit and regression tests
|
||||
|
||||
Some internal testcases used to prevent regressions. To build
|
||||
and run them compile with;
|
||||
@code
|
||||
cmake -DKDE4_BUILD_TESTS=1 ...
|
||||
@endcode
|
||||
*/
|
||||
|
||||
|
||||
/** @page backends Backends
|
||||
|
||||
These are the interpreter backends provided by %Kross.
|
||||
|
||||
@section kjs The KDE JavaScript interpreter backend
|
||||
|
||||
The KDE JavaScript interpreter backend uses the kjs and kjsembed libraries
|
||||
(part of kdelibs) to provide a JavaScript backend.
|
||||
|
||||
|
||||
@section qts The QtScript interpreter backend
|
||||
|
||||
The QtScript interpreter backend uses the QtScript library
|
||||
(part of Qt) to provide a JavaScript backend.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui
|
||||
// DOXYGEN_SET_PROJECT_NAME = Kross
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,24 +0,0 @@
|
|||
/** @mainpage
|
||||
|
||||
@section purpose Purpose
|
||||
|
||||
Convert units.
|
||||
|
||||
@section desc Description
|
||||
|
||||
todo
|
||||
|
||||
@authors
|
||||
Petri Damstén \<damu@iki.fi\>
|
||||
|
||||
@maintainers
|
||||
Petri Damstén \<damu@iki.fi\>
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_SET_PROJECT_NAME = KUnitConversion
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,27 +0,0 @@
|
|||
/** @mainpage Some random bits and pieces
|
||||
|
||||
Some utility classes for KSettings, KCModule and KPlugin.
|
||||
|
||||
Use ${KDE4_KUTILS_LIBS} in the target_link_libraries of your CMakeLists.txt
|
||||
to link to kutils.
|
||||
|
||||
@authors
|
||||
Matthias Kretz \<kretz@kde.org\><br>
|
||||
Rafael Fernández López \<ereslibre@kde.org\><br>
|
||||
Matthias Elter \<elter@kde.org\><br>
|
||||
Daniel Molkentin \<molkentin@kde.org\><br>
|
||||
Frans Englich \<frans.englich@telia.com\><br>
|
||||
Tobias Koenig \<tokoe@kde.org\><br>
|
||||
Matthias Hoelzer-Kluepfel \<hoelzer@kde.org\>
|
||||
|
||||
@maintainers
|
||||
[Unknown/None]
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui kio
|
||||
// DOXYGEN_SET_PROJECT_NAME = KUtils
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,100 +0,0 @@
|
|||
/** @mainpage Plasma libraries
|
||||
|
||||
libplasma is the core of the Plasma desktop. It provides a framework of graphical
|
||||
widgets (Plasma::Applet) that can be organised into managed groupings
|
||||
(Plasma::Containment), such as a desktop or panel. It also provides a data
|
||||
abstraction layer (Plasma::DataEngine) and a corresponding service interaction
|
||||
layer (Plasma::Service) to make implementing widgets easier and a
|
||||
system of callouts (Plasma::AbstractRunner) that provide responses to queries,
|
||||
from running an application to performing a quick calculation.
|
||||
|
||||
The <a href="http://doc.trolltech.com/latest/graphicsview.html">Qt Graphics View
|
||||
framework</a> and the <a href="http://api.kde.org/4.x-api/kdelibs-apidocs/">KDE
|
||||
libraries</a> provide the underpinning for libplasma. As a result, it should
|
||||
work anywhere that Qt and KDE do.
|
||||
|
||||
Although libplasma is developed for the use of the Plasma desktop shell in
|
||||
KDE 4, it is general enough to be useful in other applications.
|
||||
<a href="http://amarok.kde.org">Amarok</a> is using it for its context
|
||||
view, allowing for pluggable widgets to display and interact with the music
|
||||
collection, such as "current track" and "tag cloud" widgets.
|
||||
|
||||
libplasma itself only provides a framework, and the widgets, containments,
|
||||
data engines and runners are all implemented as plugins. However, the framework
|
||||
is designed to make implementing these plugins as easy as possible, including
|
||||
providing scripting support.
|
||||
|
||||
Other important classes are:
|
||||
|
||||
- Plasma::Corona: the canvas that containments are placed on
|
||||
- Plasma::View: a QWidget for displaying a containment
|
||||
- Plasma::Theme: provides theming support
|
||||
- Plasma::Animator: provides animations for things like elements appearing
|
||||
and disappearing
|
||||
- Plasma::Delegate: provides an item delegate for Qt's
|
||||
<a href="http://doc.trolltech.com/latest/model-view-programming.html">Model /
|
||||
View framework</a> for menu items.
|
||||
- Plasma::ToolTipManager: allows widgets have (themed) tooltips displayed when the
|
||||
mouse is hovered over them
|
||||
- Plasma::Dialog: displays a themed application dialog
|
||||
- Plasma::Extender: provides detachable sections to Plasma::Applet
|
||||
- Plasma::GLApplet: provides an OpenGL-rendered Plasma::Applet
|
||||
- Plasma::PackageStructure: provides descriptions of packages containing plugins
|
||||
for libplasma
|
||||
- Plasma::PopupApplet: provides a simple way of implementing a Plasma::Applet
|
||||
consisting of an icon that shows a popup when clicked
|
||||
- Plasma::Svg and Plasma::FrameSvg: provides themable, cached SVGs
|
||||
- Plasma::Wallpaper: provides pluggable backgrounds for containments
|
||||
- Plasma::AppletScript, Plasma::DataEngineScript, Plasma::RunnerScript and
|
||||
Plasma::ScriptEngine: provide scripting interfaces for plugins
|
||||
- Various themed QGraphicsWidgets for use in creating a Plasma::Applet
|
||||
|
||||
|
||||
The
|
||||
<a href="http://techbase.kde.org/Development/Tutorials/Plasma">Plasma tutorials</a>
|
||||
on TechBase provide a good introduction to writing plugins, such as widgets and
|
||||
data engines, for libplasma-based applications.
|
||||
|
||||
@authors
|
||||
Aaron Seigo \<aseigo@kde.org\><br>
|
||||
Alessandro Diaferia \<alediaferia@gmail.com\><br>
|
||||
Alex Merry \<kde@randomguy3.me.uk\><br>
|
||||
Alexander Wiedenbruch \<wirr01@gmail.com\><br>
|
||||
Alexis Ménard \<darktears31@gmail.com\><br>
|
||||
André Duffeck \<andre@duffeck.de\><br>
|
||||
Andrew Lake \<jamboarder@yahoo.com\><br>
|
||||
Artur de Souza \<asouza@kde.org\><br>
|
||||
Bertjan Broeksema \<b.broeksema@kdemail.net\><br>
|
||||
Chani Armitage \<chanika@gmail.com\><br>
|
||||
Davide Bettio \<davide.bettio@kdemail.net\><br>
|
||||
Dan Meltzer \<hydrogen@notyetimplemented.com\><br>
|
||||
Fredrik Höglund \<fredrik@kde.org\><br>
|
||||
Ivan Cukic \<ivan.cukic+kde@gmail.com\><br>
|
||||
John Tapsell \<tapsell@kde.org\><br>
|
||||
Jordi Polo \<mumismo@gmail.com\><br>
|
||||
Kevin Ottens \<ervin@kde.org\><br>
|
||||
Montel Laurent \<montel@kde.org\><br>
|
||||
Marco Martin \<notmart@gmail.com\><br>
|
||||
Matt Broadstone \<mbroadst@gmail.com\><br>
|
||||
Petri Damsten \<damu@iki.fi\><br>
|
||||
Rafael Fernández López \<ereslibre@kde.org\><br>
|
||||
Riccardo Iaconelli \<riccardo@kde.org\><br>
|
||||
Richard J. Moore \<rich@kde.org\><br>
|
||||
Rob Scheepmaker \<r.scheepmaker@student.utwente.nl\><br>
|
||||
Robert Knight \<robertknight@gmail.com\><br>
|
||||
Sebastian Kuegler \<sebas@kde.org\><br>
|
||||
Siraj Razick \<siraj@kde.net\><br>
|
||||
Zack Rusin \<zack@kde.org\>
|
||||
|
||||
@maintainers
|
||||
Aaron Seigo \<aseigo@kde.org\>
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_SET_PROJECT_NAME = Plasma
|
||||
// DOXYGEN_SET_RECURSIVE = YES
|
||||
// DOXYGEN_EXCLUDE_PATTERNS = *_p.h */private/* */tests/*
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,152 +0,0 @@
|
|||
/** \mainpage Solid
|
||||
|
||||
%Solid is a device integration framework. It provides a way of querying and
|
||||
interacting with hardware independently of the underlying operating system.
|
||||
|
||||
Currently the following backends are implemented on Linux:
|
||||
<ul>
|
||||
<li><a href="http://www.freedesktop.org/wiki/Software/hal">HAL</a></li>
|
||||
<li><a href="http://www.freedesktop.org/wiki/Software/udisks">udisks</a></li>
|
||||
<li><a href="http://upower.freedesktop.org/">upower</a></li>
|
||||
<li><a href="http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html">udev</a></li>
|
||||
</ul>
|
||||
|
||||
See the documentation for the Solid namespace, and the
|
||||
<a href="http://techbase.kde.org/Development/Tutorials/Solid_Tutorials">tutorial
|
||||
on TechBase</a>.
|
||||
|
||||
Examples:
|
||||
- \ref tutorial1
|
||||
- \ref tutorial2
|
||||
- \ref tutorial3
|
||||
- \ref tutorial4
|
||||
- \ref tutorial5
|
||||
|
||||
Just for fun: \ref song
|
||||
|
||||
|
||||
\authors
|
||||
Kevin Ottens \<ervin@kde.org\><br>
|
||||
Lukas Tinkl \<ltinkl@redhat.com\><br>
|
||||
Pino Toscano \<pino@kde.org\><br>
|
||||
Alex Fiestas \<alex@eyeos.org\><br>
|
||||
Rafael Fernández López \<ereslibre@kde.org\><br>
|
||||
Alex Merry \<alex.merry@kdemail.net\><br>
|
||||
Mario Bensi \<mbensi@ipsquad.net\><br>
|
||||
Harald Fernengel \<harry@kdevelop.org\>
|
||||
|
||||
<b>Maintainers</b>:<br>
|
||||
Kevin Ottens \<ervin@kde.org\>
|
||||
|
||||
\licenses
|
||||
\lgpl
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** \page tutorial1 Tutorial 1
|
||||
|
||||
<p><b>
|
||||
\ref index "Back to Overview" |
|
||||
Tutorial 1 |
|
||||
\ref tutorial2 |
|
||||
\ref tutorial3 |
|
||||
\ref tutorial4 |
|
||||
\ref tutorial5
|
||||
</b></p>
|
||||
|
||||
\includelineno tutorial1/tutorial1.cpp
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** \page tutorial2 Tutorial 2
|
||||
|
||||
<p><b>
|
||||
\ref index "Back to Overview" |
|
||||
\ref tutorial1 |
|
||||
Tutorial 2 |
|
||||
\ref tutorial3 |
|
||||
\ref tutorial4 |
|
||||
\ref tutorial5
|
||||
</b></p>
|
||||
|
||||
\includelineno tutorial2/tutorial2.cpp
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** \page tutorial3 Tutorial 3
|
||||
|
||||
<p><b>
|
||||
\ref index "Back to Overview" |
|
||||
\ref tutorial1 |
|
||||
\ref tutorial2 |
|
||||
Tutorial 3 |
|
||||
\ref tutorial4 |
|
||||
\ref tutorial5
|
||||
</b></p>
|
||||
|
||||
\includelineno tutorial3/tutorial3.cpp
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** \page tutorial4 Tutorial 4
|
||||
|
||||
<p><b>
|
||||
\ref index "Back to Overview" |
|
||||
\ref tutorial1 |
|
||||
\ref tutorial2 |
|
||||
\ref tutorial3 |
|
||||
Tutorial 4 |
|
||||
\ref tutorial5
|
||||
</b></p>
|
||||
|
||||
\includelineno tutorial4/tutorial4.cpp
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/** \page tutorial5 Tutorial 5
|
||||
|
||||
<p><b>
|
||||
\ref index "Back to Overview" |
|
||||
\ref tutorial1 |
|
||||
\ref tutorial2 |
|
||||
\ref tutorial3 |
|
||||
\ref tutorial4 |
|
||||
Tutorial 5
|
||||
</b></p>
|
||||
|
||||
\includelineno tutorial5/tutorial5.cpp
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/** \page song A Solid Song
|
||||
|
||||
<p><b>\ref index "Back to Overview"</b></p>
|
||||
|
||||
And for HAL's sake, each mistake, ah, you forgave<br>
|
||||
And soon both of us learned to trust<br>
|
||||
Not run away, it was no time to play;<br>
|
||||
We built it up and built it up and committed it.
|
||||
<p>
|
||||
And now it's solid,<br>
|
||||
%Solid as a rock;<br>
|
||||
That's what this code is,<br>
|
||||
That's what we've got, oh, mmm?
|
||||
|
||||
%Solid (Oh),<br>
|
||||
%Solid as a rock;<br>
|
||||
And nothing's changed it (Ooh),<br>
|
||||
The code is still hot, hot, hot, hot, hot, hot, hot, hot
|
||||
*/
|
||||
|
||||
// DOXYGEN_SET_EXAMPLE_PATH += @topdir@/solid/examples
|
||||
// DOXYGEN_EXCLUDE = solid/backends solid/ifaces tests
|
||||
// DOXYGEN_SET_PROJECT_NAME = Solid
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,30 +0,0 @@
|
|||
/** @mainpage Sonnet
|
||||
|
||||
%Sonnet is the %KDE language processing architecture.
|
||||
<p>
|
||||
This directory only contains plugins. The core functionality of
|
||||
%Sonnet is contained in kdecore, and the user-interface
|
||||
components in kdeui.
|
||||
|
||||
See the Sonnet namespace in kdecore, and Sonnet::ConfigDialog,
|
||||
Sonnet::Dialog and Sonnet::Highlighter in kdeui.
|
||||
|
||||
TechBase has a
|
||||
<a href="http://techbase.kde.org/Development/Tutorials/Sonnet/SonnetTutorial">tutorial
|
||||
on Sonnet</a>.
|
||||
|
||||
@authors
|
||||
Zack Rusin \<zack@kde.org\><br>
|
||||
Jacob R Rideout \<kde@jacobrideout.net\>
|
||||
|
||||
@maintainers
|
||||
Zack Rusin \<zack@kde.org\>
|
||||
|
||||
@licenses
|
||||
@lgpl
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_REFERENCES = kdecore kdeui
|
||||
// DOXYGEN_SET_PROJECT_NAME = Sonnet
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
|
@ -1,269 +0,0 @@
|
|||
/** \mainpage ThreadWeaver
|
||||
|
||||
<p><b>
|
||||
Overview |
|
||||
\ref UseCases |
|
||||
\ref Why |
|
||||
\ref MainComponents "Main Components"
|
||||
</b></p>
|
||||
|
||||
ThreadWeaver is a helper for multithreaded programming. It uses a job-based
|
||||
interface to queue tasks and execute them in an efficient way.
|
||||
|
||||
You simply divide the workload into jobs, state the dependencies between the jobs
|
||||
and ThreadWeaver will work out the most efficient way of dividing the work between
|
||||
threads within a set of resource limits.
|
||||
|
||||
For more information, see \ref UseCases, \ref Why and \ref MainComponents.
|
||||
|
||||
\section Tests Example Code
|
||||
<p>Example code is available in the
|
||||
<a href="http://lxr.kde.org/source/kde/kdelibs/threadweaver/Examples/">Examples</a>
|
||||
directory. The Construction
|
||||
program shows how to use ThreadWeaver in imperative (not event oriented)
|
||||
programs. The Jobs program provides a GUI example and displays the
|
||||
interaction with the weaver state and it's signals. The Simple
|
||||
Multithreaded Image Viewer (SMIV) example shows the use of job
|
||||
dependencies.</p>
|
||||
|
||||
\authors
|
||||
Mirko Boehm
|
||||
|
||||
\maintainers
|
||||
Mirko Boehm
|
||||
|
||||
\licenses
|
||||
\lgpl
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/** \page UseCases Use Cases
|
||||
|
||||
<p><b>
|
||||
\ref index "Overview" |
|
||||
Use Cases |
|
||||
\ref Why |
|
||||
\ref MainComponents "Main Components"
|
||||
</b></p>
|
||||
|
||||
<p>ThreadWeaver provides a solution to a number (but not all)
|
||||
multithreading problems. Let's have a look:</p>
|
||||
|
||||
<ul> <li>How do you implement a single operation that takes a lot of CPU
|
||||
power, but is hard to handle in chunks (Example: scale an image) when
|
||||
you want your GUI to remain responsive? Encapsulate the operation in a
|
||||
class object derived from Job instead of a method and put it in the
|
||||
static instance (Weaver::instance). Connect to the Job's done() signal
|
||||
to receive a notification when it is completed.</li>
|
||||
|
||||
<li>How do you implement a CPU intensive operation while time-critical
|
||||
operations are executed (load and decode an MP3 while another one is fed
|
||||
to the audio device): Implement both the file loading operation and the
|
||||
play operation in a job and queue both at the same time. There is also a
|
||||
synchronous sleep method in the Job class if a job needs to be delayed
|
||||
for a number of milliseconds after it is taken over by a thread.</li>
|
||||
|
||||
<li>How do you implement many small operations where the cost of each
|
||||
individual one is hard to estimate (loading two hundred icons from an
|
||||
NFS drive): Create a common or a number of specialized job
|
||||
classes. Queue all of them. Either connect to the individual done signal
|
||||
to process every item when it has been finished or connect to
|
||||
Weaver::jobsDone() to receive a notification when all of the jobs are
|
||||
done.</li>
|
||||
|
||||
<li>How do you implement an operation with complex control flow and
|
||||
dependencies in the execution order (load, parse and display an HTML
|
||||
document with embedded media): Create jobs for the individual steps you
|
||||
need to perform. Try to split the whole operation in as many
|
||||
independent, parallelizable parts as possible. Now declare the execution
|
||||
dependencies. A job will only be executed when all jobs it depends on
|
||||
are finished. This way every individual operation will be executed as
|
||||
soon as it becomes possible. Connect to the final jobs done() signal to
|
||||
be notified when all parts of the whole operations have been
|
||||
executed. If necessary (if there is more than one final object), create a
|
||||
dummy job object that depends on all of them to have one central end
|
||||
point of execution.</li> </ul>
|
||||
|
||||
<p>As you can see, ThreadWeaver can provide solutions for simple, but
|
||||
also for complex cases. For an example on how job dependencies can be
|
||||
modeled and used to create elegant, streamlined solutions for control
|
||||
flow modeling, see the Simple Multithreaded Image Viewer (SMIV) example
|
||||
in the Tests directory.</p>
|
||||
|
||||
<p>ThreadWeaver focuses on operations that can be implemented in
|
||||
Jobs. To create solutions where a thread is supposed to constantly run
|
||||
to perform an ongoing operation that, for example, spans the whole
|
||||
application live, it has to be verified that it is the right
|
||||
approach. It is possible to add very long or neverending operations to
|
||||
the queue, but it will constantly bind a thread to that operation. It
|
||||
might still make sense to use ThreadWeaver, as the creation, handling
|
||||
and destruction of the threads is already taken care of, but the minimum
|
||||
inventory size (thread count) should be increased accordingly to provide
|
||||
for enough threads to process the other jobs.</p>
|
||||
|
||||
*/
|
||||
|
||||
/** \page Why Why Multithreading?
|
||||
|
||||
<p><b>
|
||||
\ref index "Overview" |
|
||||
\ref UseCases |
|
||||
Why Multithreading? |
|
||||
\ref MainComponents "Main Components"
|
||||
</b></p>
|
||||
|
||||
<p>In the past, multithreading has been considered a powerful tool that
|
||||
is hard to handle (some call it the work of the devil). While there may
|
||||
be some truth to this, newer tools have made the job of the software
|
||||
developer much easier when creating parallel implementations of
|
||||
algorithms. At the same time, the necessity to use multiple threads to
|
||||
create performant applications has become more and more
|
||||
clear. Technologies like Hyperthreading and multiple core processors can
|
||||
only be used if processors have to schedule processing power to
|
||||
multiple, concurrently running processes or threads.</p>
|
||||
|
||||
<p>Event driven programs especially bear the issue of latency, which is
|
||||
more important for the user's impression of application performance than
|
||||
other factors. But the responsiveness of the user interface relies
|
||||
mainly on the ability of the application to process events, an ability
|
||||
that is much limited in case the application is executing processing
|
||||
power expensive, lengthy operations. This leads, for example, to delayed
|
||||
or sluggish processing of necessary paint events. Even if this does not
|
||||
at all influence the total time necessary to perform the operation the
|
||||
user requested, is is annoying and not state of the art. </p>
|
||||
|
||||
<p>There are different approaches to solve this issue. The crudest one
|
||||
may be to process single or multiple events while performing a lengthy
|
||||
operation, which may or may not work sufficiently, but is at least sure
|
||||
to ruin all efforts of Separation of Concerns. Concerns can simply not
|
||||
be separated if the developer has to intermingle instructions with event
|
||||
handling where he does not even know about the kind of events that are
|
||||
processed. </p>
|
||||
|
||||
<p>Another approach is to use event-controlled asynchronous
|
||||
operations. This is sufficient in most cases, but still causes a number
|
||||
of issues. Any operation that carries the possibility of taking a long
|
||||
time or blocking may still stop event processing for a while. Such risks
|
||||
are hard to assess, and especially hard to test in laboratory
|
||||
environments where networks are fast and reliable and the system I/O
|
||||
load is generally low. Network operations may fail. Hard disks may be
|
||||
suspended. The I/O subsystem may be so busy that transfering 2 kByte may
|
||||
take a couple of seconds. </p>
|
||||
|
||||
<p>Processing events in objects that are executed in other threads is
|
||||
another approach. It has it's own issues that come with parallel
|
||||
programming, but it makes sure the main event loop returns as soon as
|
||||
possible. Usually this approach is combined with a state pattern to
|
||||
synchronize the GUI with the threaded event processing. </p>
|
||||
|
||||
<p>Which one of these approaches is suitable for a specific case has to
|
||||
be assessed by the application developers. There is no silver
|
||||
bullet. All have specific strengths, weaknesses and issues. The
|
||||
ThreadWeaver library provides the means to implement multithreaded job
|
||||
oriented solutions. </p>
|
||||
|
||||
<p>To create performant applications, the application designers have to
|
||||
leverage the functionality provided by the hardware platform as good as
|
||||
possible. While code optimizations only lead to so much improvement,
|
||||
application performance is usually determined by network and I/O
|
||||
throughput. The CPU time needed is usually negligible. At the same time,
|
||||
the different hardware subsystems usually are independent in modern
|
||||
architectures. Network, I/O and memory interfaces can transfer data all
|
||||
at the same time, and the CPU is able to process instructions while all
|
||||
these subsystems are busy. The modern computer is not a traditional
|
||||
uniprocessor (think of GPUs, too). This makes it necessary to use all
|
||||
these parallel subsystems at the same time as much as possible to
|
||||
actually use the possibilities modern hardware provides, which is very
|
||||
hard to achieve in a single thread.</p>
|
||||
|
||||
<p>Another very important issue is application processing
|
||||
flow. Especially GUI applications to not follow the traditional
|
||||
imperative programming pattern. Execution flow is more network-like,
|
||||
with chunks of code that depend on others to finish processing before
|
||||
they can touch their data. Tools to represent those
|
||||
networks to set up your applications order of execution are rare, and
|
||||
usually leave it to the developers to code the execution order of the
|
||||
instructions. This solutions are usually not flexible and do not adapt
|
||||
to the actual usage of the CPU nodes and computer
|
||||
subsystems. ThreadWeaver provides means to represent code execution
|
||||
dependencies and relies on the operating systems scheduler to actually
|
||||
distribute the work load. The result is an implementation that is very
|
||||
close to the original application semantics, and usually improved
|
||||
performance and scalability in different real-life scenarios. </p>
|
||||
|
||||
<p>The more tasks are handled in parallel, the more memory is
|
||||
necessary. There is a permanent CPU - memory tradeoff which limits the
|
||||
number of parallel operations to the extend where memory that needs to
|
||||
be swapped in and out slows down the operations. Therefore memory usage
|
||||
needs to be equalized to allow the processors to operate without being
|
||||
slowed down. This means parallel operations need to be scheduled to a
|
||||
limit to balance CPU and memory usage. ThreadWeaver provides the means
|
||||
for that. </p>
|
||||
|
||||
<p>In general, ThreadWeaver tries to make to task of creating
|
||||
multithreaded, performant applications as simple as
|
||||
possible. Programmers should be relieved of synchronization, execution
|
||||
dependendancy and load balancing issues as much as possible. The API
|
||||
tends to be clean, extensible and easy to understand. </p>
|
||||
|
||||
*/
|
||||
|
||||
/** \page MainComponents Main Components of ThreadWeaver
|
||||
|
||||
<p><b>
|
||||
\ref index "Overview" |
|
||||
\ref UseCases |
|
||||
\ref Why |
|
||||
Main Components
|
||||
</b></p>
|
||||
|
||||
<p>ThreadWeaver is a Job queue. It executes jobs in threads it
|
||||
internally manages. The minimum and maximum number of threads provided
|
||||
by a Weaver is set by the user. Jobs are regular QObjects, which allows
|
||||
users to connect to the done() signal to be notified when the Job has
|
||||
been executed. The Weaver class provides objects that handle a number of
|
||||
threads called the inventory. Users usually acquire a reference to a
|
||||
WeaverInterface object. </p>
|
||||
|
||||
<p>Jobs may depend on other jobs. A job will only execute if all jobs it
|
||||
depends on are already finished. In this, dependencies reorder job
|
||||
execution. If no dependencies are declared, jobs are executed in
|
||||
queueing order. Multiple dependencies are possible, which allows the
|
||||
creation of complex flow graphs that are automatically executed by the
|
||||
Weaver. It is important, though, to avoid circular dependencies. Two
|
||||
jobs that depend on each other in both directions will simply never be
|
||||
executed, since the dependencies will never resolve.</p>
|
||||
|
||||
<p>Threads are created on demand and do not exit until the containing
|
||||
weaver is deleted. Threads have an eager policy in trying to execute
|
||||
jobs out of the queue. The managing Weaver blocks them if no jobs are
|
||||
availabe.</p>
|
||||
|
||||
<p>WeaverObservers are used to receive more informative events about the
|
||||
thread states and job execution. They can be used to provide progress or
|
||||
debugging information or to implement GUIs to show the thread
|
||||
activity. Observers can be attached to Weavers and will disconnect
|
||||
automatically when they are deleted.</p>
|
||||
|
||||
\section Job Execution
|
||||
|
||||
<p>In general, jobs are executed in the order they are queued, if they
|
||||
have no unresolved dependencies. This behaviour can be used to balance
|
||||
I/O, network and CPU load. The SMIV example shows how this can be done.
|
||||
</p>
|
||||
|
||||
\section Emitting Signals from Jobs
|
||||
<p>To notify the application's GUI of progress or other events, it may
|
||||
be desirable to emit signals from the Job objects that can be connected
|
||||
to the main thread. Since the job will be executed in another thread,
|
||||
such signals are delivered asynchronously.</p>
|
||||
|
||||
<p>The Job class in the ThreadWeaver library itself contains such a
|
||||
helper class that can be used as a reference for this approach.</p>
|
||||
|
||||
*/
|
||||
|
||||
// DOXYGEN_SET_PROJECT_NAME = ThreadWeaver
|
||||
// DOXYGEN_EXCLUDE = Examples Experimental Tests Docs Scripts WeaverGui
|
||||
// vim:ts=4:sw=4:expandtab:filetype=doxygen
|
Loading…
Add table
Reference in a new issue