diff options
Diffstat (limited to 'src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h')
-rw-r--r-- | src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h | 162 |
1 files changed, 102 insertions, 60 deletions
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h index 4c4e00d136..22a1beef7a 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h @@ -1,91 +1,133 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** Commercial Usage -** -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** 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. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** -**************************************************************************/ - #ifndef ITEMLIBRARYMODEL_H #define ITEMLIBRARYMODEL_H -#include <QtGui/QStandardItemModel> -#include <QtGui/QTreeView> -#include <QDrag> -#include <QDebug> -#include <QTimeLine> +#include <QMap> +#include <QIcon> +#include <QVariant> +#include <QScriptEngine> +#include <private/qmllistmodel_p.h> -QT_BEGIN_NAMESPACE -class QLabel; -QT_END_NAMESPACE +class QMimeData; namespace QmlDesigner { +class MetaInfo; class ItemLibraryInfo; namespace Internal { -// QStandardItemModel-based model for the widget box. -class ItemLibraryModel : public QStandardItemModel -{ - Q_OBJECT +template <class T> +class ItemLibrarySortedModel: public QmlListModel { +public: + ItemLibrarySortedModel(QObject *parent = 0); + ~ItemLibrarySortedModel(); + + void clearElements(); + + void addElement(T *element, int libId); + void removeElement(int libId); + + bool elementVisible(int libId) const; + void setElementVisible(int libId, bool visible); + + const QMap<int, T *> &elements() const; + + T *elementModel(int libId); + int findElement(int libId) const; + +private: + struct order_struct { + int libId; + bool visible; + }; + + QMap<int, T *> m_elementModels; + QList<struct order_struct> m_elementOrder; +}; + + +class ItemLibraryItemModel: public QScriptValue { +public: + ItemLibraryItemModel(QScriptEngine *scriptEngine, int itemLibId, const QString &itemName); + ~ItemLibraryItemModel(); + + int itemLibId() const; + QString itemName() const; + + void setItemIcon(const QIcon &itemIcon); + void setItemIconSize(const QSize &itemIconSize); + + bool operator<(const ItemLibraryItemModel &other) const; + +private: + QWeakPointer<QScriptEngine> m_scriptEngine; + int m_libId; + QString m_name; + QIcon m_icon; + QSize m_iconSize; +}; + + +class ItemLibrarySectionModel: public QScriptValue { public: - explicit ItemLibraryModel(QObject *parent = 0); - void addItemLibraryInfo(const ItemLibraryInfo &ItemLibraryInfo); + ItemLibrarySectionModel(QScriptEngine *scriptEngine, int sectionLibId, const QString §ionName, QObject *parent = 0); + + QString sectionName() const; + void addSectionEntry(ItemLibraryItemModel *sectionEntry); + void removeSectionEntry(int itemLibId); - QStandardItem *findCategoryItem(const QString &category); + bool updateSectionVisibility(const QString &searchText); + void updateItemIconSize(const QSize &itemIconSize); - virtual Qt::DropActions supportedDragActions() const; - virtual Qt::DropActions supportedDropActions() const; + bool operator<(const ItemLibrarySectionModel &other) const; - virtual QStringList mimeTypes() const; - virtual QMimeData *mimeData(const QModelIndexList &indexes) const; +private: + QString m_name; + ItemLibrarySortedModel<ItemLibraryItemModel> m_sectionEntries; }; -// ItemLibraryTreeView with Drag implementation -class ItemLibraryTreeView : public QTreeView { + +class ItemLibraryModel: public ItemLibrarySortedModel<ItemLibrarySectionModel> { Q_OBJECT - public: - explicit ItemLibraryTreeView(QWidget *parent = 0); + Q_PROPERTY(QString searchText READ searchText WRITE setSearchText NOTIFY searchTextChanged) - virtual void startDrag(Qt::DropActions supportedActions); +public: + ItemLibraryModel(QScriptEngine *scriptEngine, QObject *parent = 0); + ~ItemLibraryModel(); + + QString searchText() const; + + void update(const MetaInfo &metaInfo); + + QString getTypeName(int libId); + QMimeData *getMimeData(int libId); + QIcon getIcon(int libId); - void setRealModel(QStandardItemModel *model) { m_model = model; } +public slots: + void setSearchText(const QString &searchText); + void setItemIconSize(const QSize &itemIconSize); signals: - void itemActivated(const QString &itemName); -private slots: - void activateItem( const QModelIndex & index); + void qmlModelChanged(); + void searchTextChanged(); + void visibilityUpdated(); private: - QPixmap m_smallImage, m_bigImage; - QStandardItemModel *m_model; -}; + void updateVisibility(); + QList<ItemLibraryInfo> itemLibraryRepresentations(const QString &type); + QWeakPointer<QScriptEngine> m_scriptEngine; + MetaInfo *m_metaInfo; + QMap<int, ItemLibraryInfo> m_itemInfos; + QString m_searchText; + QSize m_itemIconSize; + int m_nextLibId; +}; } // namespace Internal } // namespace QmlDesigner + #endif // ITEMLIBRARYMODEL_H + |