diff options
author | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-03-06 19:27:22 +0100 |
---|---|---|
committer | Gabriel de Dietrich <gabriel.dedietrich@theqtcompany.com> | 2015-03-22 16:20:29 +0000 |
commit | 0271609d5136fa681306c2647973a26dadc7acb3 (patch) | |
tree | 4889a233a919266fbf38551a056cf8b49d7f2bd4 /src | |
parent | ae1c3eba3e7e11a9b1ab4d18792c82c9bb6e62de (diff) |
Remove QItemSelection value-type, use Array instead
We implement this by adding QItemSelection to the
set of sequence types.
Change-Id: Ia3db376c806d8f062639e22c7f4bf392f114c266
Reviewed-by: Stephen Kelly <steveire@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsruntime/qv4sequenceobject.cpp | 26 | ||||
-rw-r--r-- | src/qml/qml/qqmlvaluetype.cpp | 3 | ||||
-rw-r--r-- | src/qml/types/qqmlitemmodels.qdoc | 24 | ||||
-rw-r--r-- | src/qml/types/qqmlmodelindexvaluetype_p.h | 44 |
4 files changed, 29 insertions, 68 deletions
diff --git a/src/qml/jsruntime/qv4sequenceobject.cpp b/src/qml/jsruntime/qv4sequenceobject.cpp index f7adf6eb18..f1f546bece 100644 --- a/src/qml/jsruntime/qv4sequenceobject.cpp +++ b/src/qml/jsruntime/qv4sequenceobject.cpp @@ -75,7 +75,8 @@ static void generateWarning(QV4::ExecutionEngine *v4, const QString& description F(QString, String, QList<QString>, QString()) \ F(QString, QString, QStringList, QString()) \ F(QUrl, Url, QList<QUrl>, QUrl()) \ - F(QModelIndex, QModelIndex, QModelIndexList, QModelIndex()) + F(QModelIndex, QModelIndex, QModelIndexList, QModelIndex()) \ + F(QItemSelectionRange, QItemSelectionRange, QItemSelection, QItemSelectionRange()) static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *engine, const QString &element) { @@ -98,6 +99,13 @@ static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *engine, co return QV4::QQmlValueTypeWrapper::create(engine, QVariant(element), vtmo, QMetaType::QModelIndex); } +static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *engine, const QItemSelectionRange &element) +{ + int metaTypeId = qMetaTypeId<QItemSelectionRange>(); + const QMetaObject *vtmo = QQmlValueTypeFactory::metaObjectForMetaType(metaTypeId); + return QV4::QQmlValueTypeWrapper::create(engine, QVariant::fromValue(element), vtmo, metaTypeId); +} + static QV4::ReturnedValue convertElementToValue(QV4::ExecutionEngine *, qreal element) { return QV4::Encode(element); @@ -128,6 +136,11 @@ static QString convertElementToString(const QModelIndex &element) return reinterpret_cast<const QQmlModelIndexValueType *>(&element)->toString(); } +static QString convertElementToString(const QItemSelectionRange &element) +{ + return reinterpret_cast<const QQmlItemSelectionRangeValueType *>(&element)->toString(); +} + static QString convertElementToString(qreal element) { QString qstr; @@ -168,6 +181,14 @@ template <> QModelIndex convertValueToElement(const Value &value) return QModelIndex(); } +template <> QItemSelectionRange convertValueToElement(const Value &value) +{ + const QQmlValueTypeWrapper *v = value_cast<QQmlValueTypeWrapper>(value); + if (v) + return v->toVariant().value<QItemSelectionRange>(); + return QItemSelectionRange(); +} + template <> qreal convertValueToElement(const Value &value) { return value.toNumber(); @@ -567,6 +588,9 @@ DEFINE_OBJECT_VTABLE(QQmlUrlList); typedef QQmlSequence<QModelIndexList> QQmlQModelIndexList; template<> DEFINE_OBJECT_VTABLE(QQmlQModelIndexList); +typedef QQmlSequence<QItemSelection> QQmlQItemSelectionRangeList; +template<> +DEFINE_OBJECT_VTABLE(QQmlQItemSelectionRangeList); typedef QQmlSequence<QList<bool> > QQmlBoolList; template<> DEFINE_OBJECT_VTABLE(QQmlBoolList); diff --git a/src/qml/qml/qqmlvaluetype.cpp b/src/qml/qml/qqmlvaluetype.cpp index 6711ad2de9..490ac66f1f 100644 --- a/src/qml/qml/qqmlvaluetype.cpp +++ b/src/qml/qml/qqmlvaluetype.cpp @@ -65,7 +65,6 @@ QQmlValueTypeFactoryImpl::QQmlValueTypeFactoryImpl() // See types wrapped in qqmlmodelindexvaluetype_p.h qRegisterMetaType<QItemSelectionRange>(); - qRegisterMetaType<QItemSelection>(); } QQmlValueTypeFactoryImpl::~QQmlValueTypeFactoryImpl() @@ -113,8 +112,6 @@ const QMetaObject *QQmlValueTypeFactoryImpl::metaObjectForMetaType(int t) default: if (t == qMetaTypeId<QItemSelectionRange>()) return &QQmlItemSelectionRangeValueType::staticMetaObject; - if (t == qMetaTypeId<QItemSelection>()) - return &QQmlItemSelectionValueType::staticMetaObject; if (const QMetaObject *mo = QQml_valueTypeProvider()->metaObjectForMetaType(t)) return mo; diff --git a/src/qml/types/qqmlitemmodels.qdoc b/src/qml/types/qqmlitemmodels.qdoc index 70059b07c6..4e64aaa338 100644 --- a/src/qml/types/qqmlitemmodels.qdoc +++ b/src/qml/types/qqmlitemmodels.qdoc @@ -100,27 +100,11 @@ \section1 QItemSelection - \l QItemSelection exposes the following properties and functions as part of - its \l QList API: + Similarly to QModelIndexList, \l QItemSelection is exposed in QML as a JavaScript + array of QItemSelectionRanges. Conversions are automatically made from and to C++. + In fact, any JavaScript array can be converted back to QItemSelection, with + non-QItemSelectionRange objects replaced by empty QItemSelectionRanges. - \list - \li \b length : int - \li object \b{at}(int i) - \li void \b{append}(object o) - \li void \b{prepend}(o) - \li void \b{insert}(int i, object o) - \li void \b{removeFirst}() - \li void \b{removeLast}() - \li void \b{removeAt}(int i) - \endlist - - In addition, \l QItemSelection also exposes the following functions: - - \list - \li void \b{select}(QModelIndex topLeft, QModelIndex bottomRight) - \li bool \b{contains}(QModelIndex index) - \li void \b{merge}(QItemSelection other, QItemSelectionModel::SelectionFlags command) - \endlist \sa ItemSelectionModel */ diff --git a/src/qml/types/qqmlmodelindexvaluetype_p.h b/src/qml/types/qqmlmodelindexvaluetype_p.h index e36f7a0d1e..371335c9f3 100644 --- a/src/qml/types/qqmlmodelindexvaluetype_p.h +++ b/src/qml/types/qqmlmodelindexvaluetype_p.h @@ -150,50 +150,6 @@ public: inline bool isEmpty() const { return v.isEmpty(); } }; -template<typename V, typename T> -QString q_listToString(const QList<T> &list, const QLatin1String &typeName) -{ - QString result = typeName; - result.append(QLatin1Char('(')); - for (typename QList<T>::size_type i = 0; i < list.count(); ++i) { - if (i) - result.append(QLatin1String(", ")); - result.append(reinterpret_cast<const V *>(&list.at(i))->toString()); - } - return result.append(QLatin1Char(')')); -} - -// Invokable QList<T> API forwarding for value types -#define QLISTVALUETYPE_QML_API(T) \ - Q_PROPERTY(int length READ length FINAL) \ - Q_INVOKABLE T at(int i) { return v.at(i); } \ - Q_INVOKABLE void append(const T &o) { v.append(o); } \ - Q_INVOKABLE void prepend(const T &o) { v.prepend(o); } \ - Q_INVOKABLE void insert(int i, const T &o) { v.insert(i, o); } \ - Q_INVOKABLE void removeFirst() { v.removeFirst(); } \ - Q_INVOKABLE void removeLast() { v.removeLast(); } \ - Q_INVOKABLE void removeAt(int i) { v.removeAt(i); } \ - int length() const { return v.length(); } - -struct QQmlItemSelectionValueType -{ - QItemSelection v; - - Q_GADGET - -public: - Q_INVOKABLE QString toString() - { return q_listToString<QQmlItemSelectionRangeValueType>(v, QLatin1String("QItemSelection")); } - Q_INVOKABLE void select(const QModelIndex &topLeft, const QModelIndex &bottomRight) - { v.select(topLeft, bottomRight); } - Q_INVOKABLE bool contains(const QModelIndex &index) const - { return v.contains(index); } - Q_INVOKABLE void merge(const QItemSelection &other, int command) - { v.merge(other, QItemSelectionModel::SelectionFlags(command)); } - - QLISTVALUETYPE_QML_API(QItemSelectionRange) -}; - #undef QLISTVALUETYPE_INVOKABLE_API QT_END_NAMESPACE |