/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the documentation of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the either Technology Preview License Agreement or the ** Beta Release License Agreement. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at http://qt.nokia.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ /*! \class QDesignerContainerExtension \brief The QDesignerContainerExtension class allows you to add pages to a custom multi-page container in Qt Designer's workspace. \inmodule QtDesigner QDesignerContainerExtension provide an interface for creating custom container extensions. A container extension consists of a collection of functions that \QD needs to manage a multi-page container plugin, and a list of the container's pages. \image containerextension-example.png \warning This is \e not an extension for container plugins in general, only custom \e multi-page containers. To create a container extension, your extension class must inherit from both QObject and QDesignerContainerExtension. For example: \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 6 Since we are implementing an interface, we must ensure that it's made known to the meta object system using the Q_INTERFACES() macro. This enables \QD to use the qobject_cast() function to query for supported interfaces using nothing but a QObject pointer. You must reimplement several functions to enable \QD to manage a custom multi-page container widget: \QD uses count() to keep track of the number pages in your container, widget() to return the page at a given index in the list of the container's pages, and currentIndex() to return the list index of the selected page. \QD uses the addWidget() function to add a given page to the container, expecting it to be appended to the list of pages, while it expects the insertWidget() function to add a given page to the container by inserting it at a given index. In \QD the extensions are not created until they are required. For that reason you must also create a QExtensionFactory, i.e a class that is able to make an instance of your extension, and register it using \QD's \l {QExtensionManager}{extension manager}. When a container extension is required, \QD's \l {QExtensionManager}{extension manager} will run through all its registered factories calling QExtensionFactory::createExtension() for each until the first one that is able to create a container extension, is found. This factory will then create the extension for the plugin. There are four available types of extensions in \QD: QDesignerContainerExtension , QDesignerMemberSheetExtension, QDesignerPropertySheetExtension and QDesignerTaskMenuExtension. \QD's behavior is the same whether the requested extension is associated with a multi page container, a member sheet, a property sheet or a task menu. The QExtensionFactory class provides a standard extension factory, and can also be used as an interface for custom extension factories. You can either create a new QExtensionFactory and reimplement the QExtensionFactory::createExtension() function. For example: \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 7 Or you can use an existing factory, expanding the QExtensionFactory::createExtension() function to make the factory able to create a container extension as well. For example: \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 8 For a complete example using the QDesignerContainerExtension class, see the \l {designer/containerextension}{Container Extension example}. The example shows how to create a custom multi-page plugin for \QD. \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget Extensions} */ /*! \fn QDesignerContainerExtension::~QDesignerContainerExtension() Destroys the extension. */ /*! \fn int QDesignerContainerExtension::count() const Returns the number of pages in the container. */ /*! \fn QWidget *QDesignerContainerExtension::widget(int index) const Returns the page at the given \a index in the extension's list of pages. \sa addWidget(), insertWidget() */ /*! \fn int QDesignerContainerExtension::currentIndex() const Returns the index of the currently selected page in the container. \sa setCurrentIndex() */ /*! \fn void QDesignerContainerExtension::setCurrentIndex(int index) Sets the currently selected page in the container to be the page at the given \a index in the extension's list of pages. \sa currentIndex() */ /*! \fn void QDesignerContainerExtension::addWidget(QWidget *page) Adds the given \a page to the container by appending it to the extension's list of pages. \sa insertWidget(), remove(), widget() */ /*! \fn void QDesignerContainerExtension::insertWidget(int index, QWidget *page) Adds the given \a page to the container by inserting it at the given \a index in the extension's list of pages. \sa addWidget(), remove(), widget() */ /*! \fn void QDesignerContainerExtension::remove(int index) Removes the page at the given \a index from the extension's list of pages. \sa addWidget(), insertWidget() */