/*!
@mainpage GammaRay - Qt-application inspection and manipulation tool.

@section about Overview

GammaRay is a tool to poke around in a Qt-application and also
to manipulate the application to some extent. GammaRay uses various DLL
injection techniques to hook into an application at runtime and provide
access to a lot of interesting information.

GammaRay provides API for two use-cases, plugins to extend GammaRay in order
to support additional frameworks, and integration of the GammaRay client and/or
launcher in an IDE. Both use-cases are described below.

@section plugins Plugins

Plugins enable you to extend GammaRay to support inspection of additional frameworks.
Typically there are two plugins per framework, one for the probe containing the
logic to extract the relevant information from the target application, and one for
the client containing the graphical user interface.

GammaRay ships with a large set of plugins for various Qt frameworks that
can serve as examples for all the features described below. Additional external
plugins can be found here:

- GammaRay plugin examples: https://github.com/KDAB/GammaRay-plugin-examples

For best practices on plugin development, also see the \ref gammaray-plugin-design-guide "Plugin Design Guide".

@subsection plugins-entry Entry Points

Probe plugins inherit GammaRay::ToolFactory, client plugins inherit GammaRay::ToolUiFactory.

@subsection plugins-type-support Type Support

Probe plugins have a number of options to make their specific data types known
to the existing GammaRay infrastructure (like the object browser or the property
editor):

- GammaRay::MetaObject / GammaRay::MetaObjectRepository - property access to non-QObject properties.
- GammaRay::VariantHandler - string conversion of custom data types.
- GammaRay::ObjectDataProvider - object identification and code location information from
  custom runtime systems (such as scripting systems, like QML).

@subsection plugins-property-extensions Property Editor

A pair of probe and client plugins can also extend the property view that many
existing tools use by additional tabs. Similarly, it is possible to use the
unified property editor in own tools. This is done by GammaRay::PropertyController
on the probe side and GammaRay::PropertyWidget on the client side.

@subsection plugins-data-access Data Access

On the probe side, plugins have various ways of accessing target information.

- GammaRay::Probe provides access to object models
  and notifications about created/destroyed objects.
- GammaRay::SignalSpyCallbackSet allows to monitor all QObject signal/slot
  communication.

@section ide-integration IDE Integration

GammaRay ships with a stand-alone launcher and client, but you can also integrate
those two components into an IDE.

@subsection ide-integration-launcher Launcher

The launcher is the component of GammaRay that takes care of starting a target
application or attaching to a running one, and injecting a suitable GammaRay probe
into it. The following classes provide essential functionality for this:

- GammaRay::ProbeFinder and GammaRay::ProbeABIDetector - used for identifying a
  suitable probe for a given target.
- GammaRay::NetworkDiscoveryModel - finds existing running GammaRay probes on the network.
- GammaRay::Launcher - the actual launcher.

@subsection ide-integration-client Client

The client is the main user interface of GammaRay when connected to a target application.
The key elements for embedding the client UI are:

- GammaRay::ClientConnectionManager - establish a connection to a GammaRay probe.
- GammaRay::ClientToolModel - access to the active tools and their UI.
- GammaRay::ProbeController - control interface for the probe running in the target
  application.
- GammaRay::ObjectBroker - low-level access to remote objects from the target.

@section license License

The GammaRay Software is © Klarälvdalens Datakonsult AB (KDAB), and is
available under the terms of the GPL version 2 (or any later version,
at your option).
See <a href="LICENSES/GPL-2.0-or-later.txt">GPL-2.0-or-later.txt</a> for
license details.

Contact KDAB at <info@kdab.com> to inquire about commercial licensing.

For terms of redistribution, refer to the corresponding license agreement.

Note that this software relies on 3rd party MIT-licensed projects
and various other freely distributable files some of which are
unused only for testing and not part of the application itself.

@section about-KDAB About KDAB

GammaRay is supported and maintained by Klarälvdalens Datakonsult AB (KDAB)

The KDAB Group is the global No.1 software consultancy for Qt, C++ and
OpenGL applications across desktop, embedded and mobile platforms.

The KDAB Group provides consulting and mentoring for developing Qt applications
from scratch and in porting from all popular and legacy frameworks to Qt.
We continue to help develop parts of Qt and are one of the major contributors
to the Qt Project. We can give advanced or standard trainings anywhere
around the globe on Qt as well as C++, OpenGL, 3D and more.

Get in touch with KDAB at https://www.kdab.com/contact.

@namespace GammaRay \brief All GammaRay classes.

*/
