summaryrefslogtreecommitdiff
path: root/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h')
-rw-r--r--src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.h162
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 &sectionName, 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
+