Start on Creating Plugins documentation.

Change-Id: Ic75775473cfb405cee5c53b2dc24144dba51a25c
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@nokia.com>
This commit is contained in:
Eike Ziller
2011-10-10 08:32:07 +02:00
parent b042661686
commit d0c0c0628d
21 changed files with 734 additions and 8 deletions
@@ -0,0 +1,17 @@
//! [1]
<plugin name=\"Example\" version=\"0.0.1\" compatVersion=\"0.0.1\">
//! [1]
//! [2]
<vendor>MyCompany</vendor>
<copyright>(C) MyCompany</copyright>
<license>BSD</license>
<description>Minimal plugin example</description>
<url>http://www.mycompany.com</url>
//! [2]
//! [3]
<dependencyList>
<dependency name=\"Core\" version=\"$$QTCREATOR_VERSION\"/>
</dependencyList>
//! [3]
</plugin>
@@ -0,0 +1,50 @@
#! [1]
TARGET = Example
TEMPLATE = lib
DEFINES += EXAMPLE_LIBRARY
#! [1]
# Example files
#! [2]
SOURCES += exampleplugin.cpp
HEADERS += exampleplugin.h\
example_global.h\
exampleconstants.h
#! [2]
# Qt Creator linking
#! [3]
## set the QTC_SOURCE environment variable to override the setting here
QTCREATOR_SOURCES = $$(QTC_SOURCE)
isEmpty(QTCREATOR_SOURCES):QTCREATOR_SOURCES=/Users/example/qtcreator-src
## set the QTC_BUILD environment variable to override the setting here
IDE_BUILD_TREE = $$(QTC_BUILD)
isEmpty(IDE_BUILD_TREE):IDE_BUILD_TREE=/Users/example/qtcreator-build
#! [3]
#! [4]
## uncomment to build plugin into user config directory
## <localappdata>/plugins/<ideversion>
## where <localappdata> is e.g.
## "%LOCALAPPDATA%\Nokia\qtcreator" on Windows Vista and later
## "$XDG_DATA_HOME/Nokia/qtcreator" or "~/.local/share/Nokia/qtcreator" on Linux
## "~/Library/Application Support/Nokia/Qt Creator" on Mac
# USE_USER_DESTDIR = yes
#! [4]
#![5]
PROVIDER = MyCompany
#![5]
#![6]
include($$QTCREATOR_SOURCES/src/qtcreatorplugin.pri)
include($$QTCREATOR_SOURCES/src/plugins/coreplugin/coreplugin.pri)
LIBS += -L$$IDE_PLUGIN_PATH/Nokia
#![6]
@@ -0,0 +1,13 @@
#ifndef EXAMPLE_GLOBAL_H
#define EXAMPLE_GLOBAL_H
#include <QtCore/QtGlobal>
#if defined(EXAMPLE_LIBRARY)
# define EXAMPLESHARED_EXPORT Q_DECL_EXPORT
#else
# define EXAMPLESHARED_EXPORT Q_DECL_IMPORT
#endif
#endif // EXAMPLE_GLOBAL_H
@@ -0,0 +1,14 @@
#ifndef EXAMPLECONSTANTS_H
#define EXAMPLECONSTANTS_H
namespace Example {
namespace Constants {
const char ACTION_ID[] = "Example.Action";
const char MENU_ID[] = "Example.Menu";
} // namespace Example
} // namespace Constants
#endif // EXAMPLECONSTANTS_H
@@ -0,0 +1,88 @@
#include "exampleplugin.h"
#include "exampleconstants.h"
#include <coreplugin/icore.h>
#include <coreplugin/icontext.h>
#include <coreplugin/actionmanager/actionmanager.h>
#include <coreplugin/actionmanager/command.h>
#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/coreconstants.h>
#include <QtGui/QAction>
#include <QtGui/QMessageBox>
#include <QtGui/QMainWindow>
#include <QtGui/QMenu>
#include <QtCore/QtPlugin>
using namespace Example::Internal;
ExamplePlugin::ExamplePlugin()
{
// Create your members
}
ExamplePlugin::~ExamplePlugin()
{
// Unregister objects from the plugin manager's object pool
// Delete members
}
bool ExamplePlugin::initialize(const QStringList &arguments, QString *errorString)
{
// Register objects in the plugin manager's object pool
// Load settings
// Add actions to menus
// Connect to other plugins' signals
// In the initialize method, a plugin can be sure that the plugins it
// depends on have initialized their members.
Q_UNUSED(arguments)
Q_UNUSED(errorString)
//! [add action]
Core::ActionManager *am = Core::ICore::instance()->actionManager();
QAction *action = new QAction(tr("Example action"), this);
Core::Command *cmd = am->registerAction(action, Constants::ACTION_ID,
Core::Context(Core::Constants::C_GLOBAL));
cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+Alt+Meta+A")));
connect(action, SIGNAL(triggered()), this, SLOT(triggerAction()));
//! [add action]
//! [add menu]
Core::ActionContainer *menu = am->createMenu(Constants::MENU_ID);
menu->menu()->setTitle(tr("Example"));
menu->addAction(cmd);
am->actionContainer(Core::Constants::M_TOOLS)->addMenu(menu);
//! [add menu]
return true;
}
void ExamplePlugin::extensionsInitialized()
{
// Retrieve objects from the plugin manager's object pool
// In the extensionsInitialized method, a plugin can be sure that all
// plugins that depend on it are completely initialized.
}
ExtensionSystem::IPlugin::ShutdownFlag ExamplePlugin::aboutToShutdown()
{
// Save settings
// Disconnect from signals that are not needed during shutdown
// Hide UI (if you add UI that is not in the main window directly)
return SynchronousShutdown;
}
//! [slot implementation]
void ExamplePlugin::triggerAction()
{
QMessageBox::information(Core::ICore::instance()->mainWindow(),
tr("Action triggered"),
tr("This is an action from Example."));
}
//! [slot implementation]
//! [export plugin]
Q_EXPORT_PLUGIN2(Example, ExamplePlugin)
//! [export plugin]
@@ -0,0 +1,39 @@
#ifndef EXAMPLE_H
#define EXAMPLE_H
#include "example_global.h"
#include <extensionsystem/iplugin.h>
//! [namespaces]
namespace Example {
namespace Internal {
//! [namespaces]
//! [base class]
class ExamplePlugin : public ExtensionSystem::IPlugin
{
Q_OBJECT
//! [base class]
public:
ExamplePlugin();
~ExamplePlugin();
//! [plugin methods]
bool initialize(const QStringList &arguments, QString *errorString);
void extensionsInitialized();
ShutdownFlag aboutToShutdown();
//! [plugin methods]
//! [slot]
private slots:
void triggerAction();
//! [slot]
};
} // namespace Internal
} // namespace Example
#endif // EXAMPLE_H