diff options
Diffstat (limited to 'tools/designer/src/lib/shared/widgetfactory_p.h')
-rw-r--r-- | tools/designer/src/lib/shared/widgetfactory_p.h | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/tools/designer/src/lib/shared/widgetfactory_p.h b/tools/designer/src/lib/shared/widgetfactory_p.h new file mode 100644 index 0000000000..1a053ed7a7 --- /dev/null +++ b/tools/designer/src/lib/shared/widgetfactory_p.h @@ -0,0 +1,191 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the Qt Designer 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 qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of Qt Designer. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + + +#ifndef WIDGETFACTORY_H +#define WIDGETFACTORY_H + +#include "shared_global_p.h" +#include "pluginmanager_p.h" + +#include <QtDesigner/QDesignerWidgetFactoryInterface> + +#include <QtCore/QMap> +#include <QtCore/QHash> +#include <QtCore/QVariant> +#include <QtCore/QPointer> + +QT_BEGIN_NAMESPACE + +class QObject; +class QWidget; +class QLayout; +class QDesignerFormEditorInterface; +class QDesignerCustomWidgetInterface; +class QDesignerFormWindowInterface; +class QStyle; + +namespace qdesigner_internal { + +class QDESIGNER_SHARED_EXPORT WidgetFactory: public QDesignerWidgetFactoryInterface +{ + Q_OBJECT +public: + explicit WidgetFactory(QDesignerFormEditorInterface *core, QObject *parent = 0); + ~WidgetFactory(); + + virtual QWidget* containerOfWidget(QWidget *widget) const; + virtual QWidget* widgetOfContainer(QWidget *widget) const; + + QObject* createObject(const QString &className, QObject* parent) const; + + virtual QWidget *createWidget(const QString &className, QWidget *parentWidget) const; + virtual QLayout *createLayout(QWidget *widget, QLayout *layout, int type) const; + + virtual bool isPassiveInteractor(QWidget *widget); + virtual void initialize(QObject *object) const; + void initializeCommon(QWidget *object) const; + void initializePreview(QWidget *object) const; + + + virtual QDesignerFormEditorInterface *core() const; + + static QString classNameOf(QDesignerFormEditorInterface *core, const QObject* o); + + QDesignerFormWindowInterface *currentFormWindow(QDesignerFormWindowInterface *fw); + + static QLayout *createUnmanagedLayout(QWidget *parentWidget, int type); + + // The widget factory maintains a cache of styles which it owns. + QString styleName() const; + void setStyleName(const QString &styleName); + + /* Return a cached style matching the name or QApplication's style if + * it is the default. */ + QStyle *getStyle(const QString &styleName); + // Return the current style used by the factory. This either a cached one + // or QApplication's style */ + QStyle *style() const; + + // Apply one of the cached styles or QApplication's style to a toplevel widget. + void applyStyleTopLevel(const QString &styleName, QWidget *w); + static void applyStyleToTopLevel(QStyle *style, QWidget *widget); + + // Return whether object was created by the factory for the form editor. + static bool isFormEditorObject(const QObject *o); + + // Boolean dynamic property to set on widgets to prevent custom + // styles from interfering + static const char *disableStyleCustomPaintingPropertyC; + +public slots: + void loadPlugins(); + +private slots: + void activeFormWindowChanged(QDesignerFormWindowInterface *formWindow); + void formWindowAdded(QDesignerFormWindowInterface *formWindow); + +private: + struct Strings { // Reduce string allocations by storing predefined strings + Strings(); + const QString m_alignment; + const QString m_bottomMargin; + const QString m_geometry; + const QString m_leftMargin; + const QString m_line; + const QString m_objectName; + const QString m_spacerName; + const QString m_orientation; + const QString m_q3WidgetStack; + const QString m_qAction; + const QString m_qButtonGroup; + const QString m_qAxWidget; + const QString m_qDialog; + const QString m_qDockWidget; + const QString m_qLayoutWidget; + const QString m_qMenu; + const QString m_qMenuBar; + const QString m_qWidget; + const QString m_rightMargin; + const QString m_sizeHint; + const QString m_spacer; + const QString m_text; + const QString m_title; + const QString m_topMargin; + const QString m_windowIcon; + const QString m_windowTitle; + }; + + QWidget* createCustomWidget(const QString &className, QWidget *parentWidget, bool *creationError) const; + QDesignerFormWindowInterface *findFormWindow(QWidget *parentWidget) const; + void setFormWindowStyle(QDesignerFormWindowInterface *formWindow); + + const Strings m_strings; + QDesignerFormEditorInterface *m_core; + typedef QMap<QString, QDesignerCustomWidgetInterface*> CustomWidgetFactoryMap; + CustomWidgetFactoryMap m_customFactory; + QDesignerFormWindowInterface *m_formWindow; + + // Points to the cached style or 0 if the default (qApp) is active + QStyle *m_currentStyle; + typedef QHash<QString, QStyle *> StyleCache; + StyleCache m_styleCache; + + static QPointer<QWidget> *m_lastPassiveInteractor; + static bool m_lastWasAPassiveInteractor; +}; + +} // namespace qdesigner_internal + +QT_END_NAMESPACE + +#endif // WIDGETFACTORY_H |