/**************************************************************************** ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the Qt Designer of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** 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.1, 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. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** $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 OBJECTINSPECTORMODEL_H #define OBJECTINSPECTORMODEL_H #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QDesignerFormWindowInterface; namespace qdesigner_internal { // Data structure containing the fixed item type icons struct ObjectInspectorIcons { QIcon layoutIcons[LayoutInfo::UnknownLayout + 1]; }; struct ModelRecursionContext; // Data structure representing one item of the object inspector. class ObjectData { public: enum Type { Object, Action, SeparatorAction, ChildWidget, // A child widget LayoutableContainer, // A container that can be laid out LayoutWidget, // A QLayoutWidget ExtensionContainer // QTabWidget and the like, container extension }; typedef QList StandardItemList; explicit ObjectData(QObject *parent, QObject *object, const ModelRecursionContext &ctx); ObjectData(); inline Type type() const { return m_type; } inline QObject *object() const { return m_object; } inline QObject *parent() const { return m_parent; } inline QString objectName() const { return m_objectName; } bool equals(const ObjectData & me) const; enum ChangedMask { ClassNameChanged = 1, ObjectNameChanged = 2, ClassIconChanged = 4, TypeChanged = 8, LayoutTypeChanged = 16}; unsigned compare(const ObjectData & me) const; // Initially set up a row void setItems(const StandardItemList &row, const ObjectInspectorIcons &icons) const; // Update row data according to change mask void setItemsDisplayData(const StandardItemList &row, const ObjectInspectorIcons &icons, unsigned mask) const; private: void initObject(const ModelRecursionContext &ctx); void initWidget(QWidget *w, const ModelRecursionContext &ctx); QObject *m_parent; QObject *m_object; Type m_type; QString m_className; QString m_objectName; QIcon m_classIcon; LayoutInfo::Type m_managedLayoutType; }; inline bool operator==(const ObjectData &e1, const ObjectData &e2) { return e1.equals(e2); } inline bool operator!=(const ObjectData &e1, const ObjectData &e2) { return !e1.equals(e2); } typedef QList ObjectModel; // QStandardItemModel for ObjectInspector. Uses ObjectData/ObjectModel // internally for its updates. class ObjectInspectorModel : public QStandardItemModel { public: typedef QList StandardItemList; enum { ObjectNameColumn, ClassNameColumn, NumColumns }; explicit ObjectInspectorModel(QObject *parent); enum UpdateResult { NoForm, Rebuilt, Updated }; UpdateResult update(QDesignerFormWindowInterface *fw); const QModelIndexList indexesOf(QObject *o) const { return m_objectIndexMultiMap.values(o); } QObject *objectAt(const QModelIndex &index) const; virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); private: typedef QMultiMap ObjectIndexMultiMap; void rebuild(const ObjectModel &newModel); void updateItemContents(ObjectModel &oldModel, const ObjectModel &newModel); void clearItems(); StandardItemList rowAt(QModelIndex index) const; ObjectInspectorIcons m_icons; ObjectIndexMultiMap m_objectIndexMultiMap; ObjectModel m_model; QPointer m_formWindow; }; } // namespace qdesigner_internal #endif // OBJECTINSPECTORMODEL_H QT_END_NAMESPACE