/*!
@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
- GammaRay QtIvi support plugin: https://codereview.qt-project.org/gitweb?p=qt-apps/gammaray-plugin-qtivi.git

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::ProbeInterface and GammaRay::Probe provide 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 (C) 2010-2017 Klarälvdalens Datakonsult AB (KDAB),
and is available under the terms of the GPL version 2 (or any later version,
at your option).  See LICENSE.GPL.txt for license details.

Commercial use is also permitted as described in ReadMe-commercial.txt.

@section about-KDAB About KDAB

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

KDAB, the Qt experts, provide 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.

Please visit https://www.kdab.com to meet the people who write code like this.

@namespace GammaRay \brief All GammaRay classes.

*/
