aboutsummaryrefslogtreecommitdiffstats
path: root/src/qtquick1/graphicsitems
diff options
context:
space:
mode:
Diffstat (limited to 'src/qtquick1/graphicsitems')
-rw-r--r--src/qtquick1/graphicsitems/graphicsitems.pri96
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeaccessibleattached.cpp76
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeaccessibleattached_p.h147
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeanchors.cpp1169
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeanchors_p.h205
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeanchors_p_p.h171
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeanimatedimage.cpp402
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeanimatedimage_p.h116
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeanimatedimage_p_p.h87
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeborderimage.cpp624
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeborderimage_p.h110
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeborderimage_p_p.h107
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeevents.cpp243
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeevents_p_p.h141
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeflickable.cpp1812
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeflickable_p.h228
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeflickable_p_p.h239
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeflipable.cpp259
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeflipable_p.h99
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativefocuspanel.cpp94
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativefocuspanel_p.h77
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativefocusscope.cpp78
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativefocusscope_p.h68
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativegraphicswidget.cpp129
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativegraphicswidget_p.h89
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativegridview.cpp3174
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativegridview_p.h287
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimage.cpp604
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimage_p.h99
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimage_p_p.h79
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimagebase.cpp288
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimagebase_p.h116
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimagebase_p_p.h94
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem.cpp96
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem_p.h100
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem_p_p.h90
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeitem.cpp3843
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeitem.h238
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeitem_p.h635
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeitemchangelistener_p.h76
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeitemsmodule.cpp269
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeitemsmodule_p.h63
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativelayoutitem.cpp117
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativelayoutitem_p.h93
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativelistview.cpp3645
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativelistview_p.h370
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeloader.cpp602
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeloader_p.h107
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativeloader_p_p.h91
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativemousearea.cpp1014
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativemousearea_p.h217
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativemousearea_p_p.h128
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepainteditem.cpp501
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepainteditem_p.h117
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepainteditem_p_p.h90
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepath.cpp933
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepath_p.h285
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepath_p_p.h83
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepathview.cpp1750
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepathview_p.h252
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepathview_p_p.h192
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepincharea.cpp613
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepincharea_p.h312
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepincharea_p_p.h115
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepositioners.cpp1400
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepositioners_p.h238
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativepositioners_p_p.h174
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativerectangle.cpp597
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativerectangle_p.h187
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativerectangle_p_p.h112
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativerepeater.cpp450
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativerepeater_p.h109
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativerepeater_p_p.h82
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativescalegrid.cpp219
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativescalegrid_p_p.h133
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetext.cpp1647
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetext_p.h212
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetext_p_p.h143
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextedit.cpp1885
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextedit_p.h306
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextedit_p_p.h133
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextinput.cpp2015
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextinput_p.h305
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextinput_p_p.h151
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextlayout.cpp395
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetextlayout_p.h74
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetranslate.cpp129
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativetranslate_p.h88
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativevisualitemmodel.cpp1432
-rw-r--r--src/qtquick1/graphicsitems/qdeclarativevisualitemmodel_p.h256
90 files changed, 0 insertions, 41516 deletions
diff --git a/src/qtquick1/graphicsitems/graphicsitems.pri b/src/qtquick1/graphicsitems/graphicsitems.pri
deleted file mode 100644
index d3125d0b66..0000000000
--- a/src/qtquick1/graphicsitems/graphicsitems.pri
+++ /dev/null
@@ -1,96 +0,0 @@
-INCLUDEPATH += $$PWD
-
-HEADERS += \
- $$PWD/qdeclarativeitemsmodule_p.h \
- $$PWD/qdeclarativeaccessibleattached_p.h \
- $$PWD/qdeclarativeanchors_p.h \
- $$PWD/qdeclarativeanchors_p_p.h \
- $$PWD/qdeclarativeevents_p_p.h \
- $$PWD/qdeclarativeflickable_p.h \
- $$PWD/qdeclarativeflickable_p_p.h \
- $$PWD/qdeclarativeflipable_p.h \
- $$PWD/qdeclarativegridview_p.h \
- $$PWD/qdeclarativeimage_p.h \
- $$PWD/qdeclarativeimagebase_p.h \
- $$PWD/qdeclarativeborderimage_p.h \
- $$PWD/qdeclarativepainteditem_p.h \
- $$PWD/qdeclarativepainteditem_p_p.h \
- $$PWD/qdeclarativeimage_p_p.h \
- $$PWD/qdeclarativeborderimage_p_p.h \
- $$PWD/qdeclarativeimagebase_p_p.h \
- $$PWD/qdeclarativeanimatedimage_p.h \
- $$PWD/qdeclarativeanimatedimage_p_p.h \
- $$PWD/qdeclarativeitem.h \
- $$PWD/qdeclarativeitem_p.h \
- $$PWD/qdeclarativefocuspanel_p.h \
- $$PWD/qdeclarativefocusscope_p.h \
- $$PWD/qdeclarativepositioners_p.h \
- $$PWD/qdeclarativepositioners_p_p.h \
- $$PWD/qdeclarativeloader_p.h \
- $$PWD/qdeclarativeloader_p_p.h \
- $$PWD/qdeclarativemousearea_p.h \
- $$PWD/qdeclarativemousearea_p_p.h \
- $$PWD/qdeclarativepath_p.h \
- $$PWD/qdeclarativepath_p_p.h \
- $$PWD/qdeclarativepathview_p.h \
- $$PWD/qdeclarativepathview_p_p.h \
- $$PWD/qdeclarativerectangle_p.h \
- $$PWD/qdeclarativerectangle_p_p.h \
- $$PWD/qdeclarativerepeater_p.h \
- $$PWD/qdeclarativerepeater_p_p.h \
- $$PWD/qdeclarativescalegrid_p_p.h \
- $$PWD/qdeclarativetranslate_p.h \
- $$PWD/qdeclarativetextinput_p.h \
- $$PWD/qdeclarativetextinput_p_p.h \
- $$PWD/qdeclarativetextedit_p.h \
- $$PWD/qdeclarativetextedit_p_p.h \
- $$PWD/qdeclarativetext_p.h \
- $$PWD/qdeclarativetext_p_p.h \
- $$PWD/qdeclarativevisualitemmodel_p.h \
- $$PWD/qdeclarativelistview_p.h \
- $$PWD/qdeclarativelayoutitem_p.h \
- $$PWD/qdeclarativeitemchangelistener_p.h \
- $$PWD/qdeclarativegraphicswidget_p.h \
- $$PWD/qdeclarativetextlayout_p.h \
- $$PWD/qdeclarativepincharea_p.h \
- $$PWD/qdeclarativepincharea_p_p.h \
- $$PWD/qdeclarativeimplicitsizeitem_p.h \
- $$PWD/qdeclarativeimplicitsizeitem_p_p.h
-
-
-SOURCES += \
- $$PWD/qdeclarativeitemsmodule.cpp \
- $$PWD/qdeclarativeaccessibleattached.cpp \
- $$PWD/qdeclarativeanchors.cpp \
- $$PWD/qdeclarativeevents.cpp \
- $$PWD/qdeclarativeflickable.cpp \
- $$PWD/qdeclarativeflipable.cpp \
- $$PWD/qdeclarativegridview.cpp \
- $$PWD/qdeclarativeimage.cpp \
- $$PWD/qdeclarativeborderimage.cpp \
- $$PWD/qdeclarativeimagebase.cpp \
- $$PWD/qdeclarativeanimatedimage.cpp \
- $$PWD/qdeclarativepainteditem.cpp \
- $$PWD/qdeclarativeitem.cpp \
- $$PWD/qdeclarativefocuspanel.cpp \
- $$PWD/qdeclarativefocusscope.cpp \
- $$PWD/qdeclarativepositioners.cpp \
- $$PWD/qdeclarativeloader.cpp \
- $$PWD/qdeclarativemousearea.cpp \
- $$PWD/qdeclarativepath.cpp \
- $$PWD/qdeclarativepathview.cpp \
- $$PWD/qdeclarativerectangle.cpp \
- $$PWD/qdeclarativerepeater.cpp \
- $$PWD/qdeclarativescalegrid.cpp \
- $$PWD/qdeclarativetranslate.cpp \
- $$PWD/qdeclarativetextinput.cpp \
- $$PWD/qdeclarativetext.cpp \
- $$PWD/qdeclarativetextedit.cpp \
- $$PWD/qdeclarativevisualitemmodel.cpp \
- $$PWD/qdeclarativelistview.cpp \
- $$PWD/qdeclarativelayoutitem.cpp \
- $$PWD/qdeclarativegraphicswidget.cpp \
- $$PWD/qdeclarativetextlayout.cpp \
- $$PWD/qdeclarativepincharea.cpp \
- $$PWD/qdeclarativeimplicitsizeitem.cpp
-
diff --git a/src/qtquick1/graphicsitems/qdeclarativeaccessibleattached.cpp b/src/qtquick1/graphicsitems/qdeclarativeaccessibleattached.cpp
deleted file mode 100644
index 3a5d09b92f..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeaccessibleattached.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "qdeclarativeaccessibleattached_p.h"
-
-#ifndef QT_NO_ACCESSIBILITY
-
-#include "private/qdeclarativeitem_p.h"
-
-QT_BEGIN_NAMESPACE
-
-
-QDeclarativeAccessibleAttached::QDeclarativeAccessibleAttached(QObject *parent)
- : QObject(parent)
-{
- Q_ASSERT(parent);
- QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(parent);
- if (!item)
- return;
-
- // Enable accessibility for items with accessible content. This also
- // enables accessibility for the ancestors of such items.
- item->d_func()->setAccessibleFlagAndListener();
- QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::ObjectCreated, item, 0));
-}
-
-QDeclarativeAccessibleAttached::~QDeclarativeAccessibleAttached()
-{
-}
-
-QDeclarativeAccessibleAttached *QDeclarativeAccessibleAttached::qmlAttachedProperties(QObject *obj)
-{
- return new QDeclarativeAccessibleAttached(obj);
-}
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeaccessibleattached_p.h b/src/qtquick1/graphicsitems/qdeclarativeaccessibleattached_p.h
deleted file mode 100644
index 6fccb7948f..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeaccessibleattached_p.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QQUICK1ACCESSIBLEATTACHED_H
-#define QQUICK1ACCESSIBLEATTACHED_H
-
-#include <qdeclarativeitem.h>
-
-#include <QtCore/qobject.h>
-#include <QtCore/qstring.h>
-
-#ifndef QT_NO_ACCESSIBILITY
-
-#include <private/qdeclarativeglobal_p.h>
-#include <QtGui/qaccessible.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class Q_QTQUICK1_EXPORT QDeclarativeAccessibleAttached : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QAccessible::Role role READ role WRITE setRole NOTIFY roleChanged)
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged)
-
-public:
- Q_ENUMS(QAccessible::Role QAccessible::Event QAccessible::State)
-
- QDeclarativeAccessibleAttached(QObject *parent);
- ~QDeclarativeAccessibleAttached();
-
- QAccessible::Role role() const { return m_role; }
- void setRole(QAccessible::Role role)
- {
- m_role = role;
- emit roleChanged();
- // There is no way to signify role changes at the moment.
- // QAccessible::updateAccessibility(parent(), 0, QAccessible::);
- }
- QString name() const { return m_name; }
- void setName(const QString &name)
- {
- m_name = name;
- emit nameChanged();
- QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::NameChanged, parent(), 0));
- }
-
- QString description() const { return m_description; }
- void setDescription(const QString &description)
- {
- m_description = description;
- emit descriptionChanged();
- QAccessible::updateAccessibility(QAccessibleEvent(QAccessible::DescriptionChanged, parent(), 0));
- }
-
- // Factory function
- static QDeclarativeAccessibleAttached *qmlAttachedProperties(QObject *);
-
- // Property getter
- static QObject *attachedProperties(const QObject *obj)
- {
- return qmlAttachedPropertiesObject<QDeclarativeAccessibleAttached>(obj, false);
- }
-
- static QVariant property(const QObject *object, const char *propertyName)
- {
- if (QObject *attachedObject = QDeclarativeAccessibleAttached::attachedProperties(object))
- return attachedObject->property(propertyName);
- return QVariant();
- }
-
- static bool setProperty(QObject *object, const char *propertyName, const QVariant &value)
- {
- QObject *obj = qmlAttachedPropertiesObject<QDeclarativeAccessibleAttached>(object, true);
- if (!obj) {
- qWarning("cannot set property Accessible.%s of QObject %s", propertyName, object->metaObject()->className());
- return false;
- }
- return obj->setProperty(propertyName, value);
- }
-
-
-Q_SIGNALS:
- void roleChanged();
- void nameChanged();
- void descriptionChanged();
-private:
- QAccessible::Role m_role;
- QString m_name;
- QString m_description;
-public:
- using QObject::property;
-};
-
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeAccessibleAttached)
-QML_DECLARE_TYPEINFO(QDeclarativeAccessibleAttached, QML_HAS_ATTACHED_PROPERTIES)
-
-QT_END_HEADER
-
-#endif // QT_NO_ACCESSIBILITY
-
-#endif
-
diff --git a/src/qtquick1/graphicsitems/qdeclarativeanchors.cpp b/src/qtquick1/graphicsitems/qdeclarativeanchors.cpp
deleted file mode 100644
index 821abe1c15..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeanchors.cpp
+++ /dev/null
@@ -1,1169 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeanchors_p_p.h"
-
-#include "QtQuick1/qdeclarativeitem.h"
-#include "QtQuick1/private/qdeclarativeitem_p.h"
-
-#include <QtDeclarative/qdeclarativeinfo.h>
-
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-
-
-//TODO: should we cache relationships, so we don't have to check each time (parent-child or sibling)?
-//TODO: support non-parent, non-sibling (need to find lowest common ancestor)
-
-static qreal hcenter(QGraphicsItem *i)
-{
- QGraphicsItemPrivate *item = QGraphicsItemPrivate::get(i);
-
- qreal width = item->width();
- int iw = width;
- if (iw % 2)
- return (width + 1) / 2;
- else
- return width / 2;
-}
-
-static qreal vcenter(QGraphicsItem *i)
-{
- QGraphicsItemPrivate *item = QGraphicsItemPrivate::get(i);
-
- qreal height = item->height();
- int ih = height;
- if (ih % 2)
- return (height + 1) / 2;
- else
- return height / 2;
-}
-
-//### const item?
-//local position
-static qreal position(QGraphicsObject *item, QDeclarative1AnchorLine::AnchorLine anchorLine)
-{
- qreal ret = 0.0;
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(item);
- switch(anchorLine) {
- case QDeclarative1AnchorLine::Left:
- ret = item->x();
- break;
- case QDeclarative1AnchorLine::Right:
- ret = item->x() + d->width();
- break;
- case QDeclarative1AnchorLine::Top:
- ret = item->y();
- break;
- case QDeclarative1AnchorLine::Bottom:
- ret = item->y() + d->height();
- break;
- case QDeclarative1AnchorLine::HCenter:
- ret = item->x() + hcenter(item);
- break;
- case QDeclarative1AnchorLine::VCenter:
- ret = item->y() + vcenter(item);
- break;
- case QDeclarative1AnchorLine::Baseline:
- if (d->isDeclarativeItem)
- ret = item->y() + static_cast<QDeclarativeItem*>(item)->baselineOffset();
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-//position when origin is 0,0
-static qreal adjustedPosition(QGraphicsObject *item, QDeclarative1AnchorLine::AnchorLine anchorLine)
-{
- qreal ret = 0.0;
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(item);
- switch(anchorLine) {
- case QDeclarative1AnchorLine::Left:
- ret = 0.0;
- break;
- case QDeclarative1AnchorLine::Right:
- ret = d->width();
- break;
- case QDeclarative1AnchorLine::Top:
- ret = 0.0;
- break;
- case QDeclarative1AnchorLine::Bottom:
- ret = d->height();
- break;
- case QDeclarative1AnchorLine::HCenter:
- ret = hcenter(item);
- break;
- case QDeclarative1AnchorLine::VCenter:
- ret = vcenter(item);
- break;
- case QDeclarative1AnchorLine::Baseline:
- if (d->isDeclarativeItem)
- ret = static_cast<QDeclarativeItem*>(item)->baselineOffset();
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-QDeclarative1Anchors::QDeclarative1Anchors(QObject *parent)
- : QObject(*new QDeclarative1AnchorsPrivate(0), parent)
-{
- qFatal("QDeclarative1Anchors::QDeclarative1Anchors(QObject*) called");
-}
-
-QDeclarative1Anchors::QDeclarative1Anchors(QGraphicsObject *item, QObject *parent)
- : QObject(*new QDeclarative1AnchorsPrivate(item), parent)
-{
-}
-
-QDeclarative1Anchors::~QDeclarative1Anchors()
-{
- Q_D(QDeclarative1Anchors);
- d->remDepend(d->fill);
- d->remDepend(d->centerIn);
- d->remDepend(d->left.item);
- d->remDepend(d->right.item);
- d->remDepend(d->top.item);
- d->remDepend(d->bottom.item);
- d->remDepend(d->vCenter.item);
- d->remDepend(d->hCenter.item);
- d->remDepend(d->baseline.item);
-}
-
-void QDeclarative1AnchorsPrivate::fillChanged()
-{
- Q_Q(QDeclarative1Anchors);
- if (!fill || !isItemComplete())
- return;
-
- if (updatingFill < 2) {
- ++updatingFill;
-
- qreal horizontalMargin = q->mirrored() ? rightMargin : leftMargin;
-
- if (fill == item->parentItem()) { //child-parent
- setItemPos(QPointF(horizontalMargin, topMargin));
- } else if (fill->parentItem() == item->parentItem()) { //siblings
- setItemPos(QPointF(fill->x()+horizontalMargin, fill->y()+topMargin));
- }
- QGraphicsItemPrivate *fillPrivate = QGraphicsItemPrivate::get(fill);
- setItemSize(QSizeF(fillPrivate->width()-leftMargin-rightMargin, fillPrivate->height()-topMargin-bottomMargin));
-
- --updatingFill;
- } else {
- // ### Make this certain :)
- qmlInfo(item) << QDeclarative1Anchors::tr("Possible anchor loop detected on fill.");
- }
-
-}
-
-void QDeclarative1AnchorsPrivate::centerInChanged()
-{
- Q_Q(QDeclarative1Anchors);
- if (!centerIn || fill || !isItemComplete())
- return;
-
- if (updatingCenterIn < 2) {
- ++updatingCenterIn;
-
- qreal effectiveHCenterOffset = q->mirrored() ? -hCenterOffset : hCenterOffset;
- if (centerIn == item->parentItem()) {
- QPointF p(hcenter(item->parentItem()) - hcenter(item) + effectiveHCenterOffset,
- vcenter(item->parentItem()) - vcenter(item) + vCenterOffset);
- setItemPos(p);
-
- } else if (centerIn->parentItem() == item->parentItem()) {
- QPointF p(centerIn->x() + hcenter(centerIn) - hcenter(item) + effectiveHCenterOffset,
- centerIn->y() + vcenter(centerIn) - vcenter(item) + vCenterOffset);
- setItemPos(p);
- }
-
- --updatingCenterIn;
- } else {
- // ### Make this certain :)
- qmlInfo(item) << QDeclarative1Anchors::tr("Possible anchor loop detected on centerIn.");
- }
-}
-
-void QDeclarative1AnchorsPrivate::clearItem(QGraphicsObject *item)
-{
- if (!item)
- return;
- if (fill == item)
- fill = 0;
- if (centerIn == item)
- centerIn = 0;
- if (left.item == item) {
- left.item = 0;
- usedAnchors &= ~QDeclarative1Anchors::LeftAnchor;
- }
- if (right.item == item) {
- right.item = 0;
- usedAnchors &= ~QDeclarative1Anchors::RightAnchor;
- }
- if (top.item == item) {
- top.item = 0;
- usedAnchors &= ~QDeclarative1Anchors::TopAnchor;
- }
- if (bottom.item == item) {
- bottom.item = 0;
- usedAnchors &= ~QDeclarative1Anchors::BottomAnchor;
- }
- if (vCenter.item == item) {
- vCenter.item = 0;
- usedAnchors &= ~QDeclarative1Anchors::VCenterAnchor;
- }
- if (hCenter.item == item) {
- hCenter.item = 0;
- usedAnchors &= ~QDeclarative1Anchors::HCenterAnchor;
- }
- if (baseline.item == item) {
- baseline.item = 0;
- usedAnchors &= ~QDeclarative1Anchors::BaselineAnchor;
- }
-}
-
-void QDeclarative1AnchorsPrivate::addDepend(QGraphicsObject *item)
-{
- if (!item)
- return;
- QGraphicsItemPrivate * itemPrivate = QGraphicsItemPrivate::get(item);
- if (itemPrivate->isDeclarativeItem) {
- QDeclarativeItemPrivate *p =
- static_cast<QDeclarativeItemPrivate *>(QGraphicsItemPrivate::get(item));
- p->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- } else if(itemPrivate->isWidget) {
- Q_Q(QDeclarative1Anchors);
- QGraphicsWidget *widget = static_cast<QGraphicsWidget *>(item);
- QObject::connect(widget, SIGNAL(destroyed(QObject*)), q, SLOT(_q_widgetDestroyed(QObject*)));
- QObject::connect(widget, SIGNAL(geometryChanged()), q, SLOT(_q_widgetGeometryChanged()));
- }
-}
-
-void QDeclarative1AnchorsPrivate::remDepend(QGraphicsObject *item)
-{
- if (!item)
- return;
- QGraphicsItemPrivate * itemPrivate = QGraphicsItemPrivate::get(item);
- if (itemPrivate->isDeclarativeItem) {
- QDeclarativeItemPrivate *p =
- static_cast<QDeclarativeItemPrivate *>(itemPrivate);
- p->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- } else if(itemPrivate->isWidget) {
- Q_Q(QDeclarative1Anchors);
- QGraphicsWidget *widget = static_cast<QGraphicsWidget *>(item);
- QObject::disconnect(widget, SIGNAL(destroyed(QObject*)), q, SLOT(_q_widgetDestroyed(QObject*)));
- QObject::disconnect(widget, SIGNAL(geometryChanged()), q, SLOT(_q_widgetGeometryChanged()));
- }
-}
-
-bool QDeclarative1AnchorsPrivate::isItemComplete() const
-{
- return componentComplete;
-}
-
-void QDeclarative1Anchors::classBegin()
-{
- Q_D(QDeclarative1Anchors);
- d->componentComplete = false;
-}
-
-void QDeclarative1Anchors::componentComplete()
-{
- Q_D(QDeclarative1Anchors);
- d->componentComplete = true;
-}
-
-bool QDeclarative1Anchors::mirrored()
-{
- Q_D(QDeclarative1Anchors);
- QGraphicsItemPrivate * itemPrivate = QGraphicsItemPrivate::get(d->item);
- return itemPrivate->isDeclarativeItem ? static_cast<QDeclarativeItemPrivate *>(itemPrivate)->effectiveLayoutMirror : false;
-}
-
-void QDeclarative1AnchorsPrivate::setItemHeight(qreal v)
-{
- updatingMe = true;
- QGraphicsItemPrivate::get(item)->setHeight(v);
- updatingMe = false;
-}
-
-void QDeclarative1AnchorsPrivate::setItemWidth(qreal v)
-{
- updatingMe = true;
- QGraphicsItemPrivate::get(item)->setWidth(v);
- updatingMe = false;
-}
-
-void QDeclarative1AnchorsPrivate::setItemX(qreal v)
-{
- updatingMe = true;
- item->setX(v);
- updatingMe = false;
-}
-
-void QDeclarative1AnchorsPrivate::setItemY(qreal v)
-{
- updatingMe = true;
- item->setY(v);
- updatingMe = false;
-}
-
-void QDeclarative1AnchorsPrivate::setItemPos(const QPointF &v)
-{
- updatingMe = true;
- item->setPos(v);
- updatingMe = false;
-}
-
-void QDeclarative1AnchorsPrivate::setItemSize(const QSizeF &v)
-{
- updatingMe = true;
- if(QGraphicsItemPrivate::get(item)->isWidget)
- static_cast<QGraphicsWidget *>(item)->resize(v);
- else if (QGraphicsItemPrivate::get(item)->isDeclarativeItem)
- static_cast<QDeclarativeItem *>(item)->setSize(v);
- updatingMe = false;
-}
-
-void QDeclarative1AnchorsPrivate::updateMe()
-{
- if (updatingMe) {
- updatingMe = false;
- return;
- }
-
- fillChanged();
- centerInChanged();
- updateHorizontalAnchors();
- updateVerticalAnchors();
-}
-
-void QDeclarative1AnchorsPrivate::updateOnComplete()
-{
- fillChanged();
- centerInChanged();
- updateHorizontalAnchors();
- updateVerticalAnchors();
-}
-
-void QDeclarative1AnchorsPrivate::_q_widgetDestroyed(QObject *obj)
-{
- clearItem(qobject_cast<QGraphicsObject*>(obj));
-}
-
-void QDeclarative1AnchorsPrivate::_q_widgetGeometryChanged()
-{
- fillChanged();
- centerInChanged();
- updateHorizontalAnchors();
- updateVerticalAnchors();
-}
-
-void QDeclarative1AnchorsPrivate::itemGeometryChanged(QDeclarativeItem *, const QRectF &newG, const QRectF &oldG)
-{
- fillChanged();
- centerInChanged();
- if (newG.x() != oldG.x() || newG.width() != oldG.width())
- updateHorizontalAnchors();
- if (newG.y() != oldG.y() || newG.height() != oldG.height())
- updateVerticalAnchors();
-}
-
-QGraphicsObject *QDeclarative1Anchors::fill() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->fill;
-}
-
-void QDeclarative1Anchors::setFill(QGraphicsObject *f)
-{
- Q_D(QDeclarative1Anchors);
- if (d->fill == f)
- return;
-
- if (!f) {
- d->remDepend(d->fill);
- d->fill = f;
- emit fillChanged();
- return;
- }
- if (f != d->item->parentItem() && f->parentItem() != d->item->parentItem()){
- qmlInfo(d->item) << tr("Cannot anchor to an item that isn't a parent or sibling.");
- return;
- }
- d->remDepend(d->fill);
- d->fill = f;
- d->addDepend(d->fill);
- emit fillChanged();
- d->fillChanged();
-}
-
-void QDeclarative1Anchors::resetFill()
-{
- setFill(0);
-}
-
-QGraphicsObject *QDeclarative1Anchors::centerIn() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->centerIn;
-}
-
-void QDeclarative1Anchors::setCenterIn(QGraphicsObject* c)
-{
- Q_D(QDeclarative1Anchors);
- if (d->centerIn == c)
- return;
-
- if (!c) {
- d->remDepend(d->centerIn);
- d->centerIn = c;
- emit centerInChanged();
- return;
- }
- if (c != d->item->parentItem() && c->parentItem() != d->item->parentItem()){
- qmlInfo(d->item) << tr("Cannot anchor to an item that isn't a parent or sibling.");
- return;
- }
-
- d->remDepend(d->centerIn);
- d->centerIn = c;
- d->addDepend(d->centerIn);
- emit centerInChanged();
- d->centerInChanged();
-}
-
-void QDeclarative1Anchors::resetCenterIn()
-{
- setCenterIn(0);
-}
-
-bool QDeclarative1AnchorsPrivate::calcStretch(const QDeclarative1AnchorLine &edge1,
- const QDeclarative1AnchorLine &edge2,
- qreal offset1,
- qreal offset2,
- QDeclarative1AnchorLine::AnchorLine line,
- qreal &stretch)
-{
- bool edge1IsParent = (edge1.item == item->parentItem());
- bool edge2IsParent = (edge2.item == item->parentItem());
- bool edge1IsSibling = (edge1.item->parentItem() == item->parentItem());
- bool edge2IsSibling = (edge2.item->parentItem() == item->parentItem());
-
- bool invalid = false;
- if ((edge2IsParent && edge1IsParent) || (edge2IsSibling && edge1IsSibling)) {
- stretch = (position(edge2.item, edge2.anchorLine) + offset2)
- - (position(edge1.item, edge1.anchorLine) + offset1);
- } else if (edge2IsParent && edge1IsSibling) {
- stretch = (position(edge2.item, edge2.anchorLine) + offset2)
- - (position(item->parentObject(), line)
- + position(edge1.item, edge1.anchorLine) + offset1);
- } else if (edge2IsSibling && edge1IsParent) {
- stretch = (position(item->parentObject(), line) + position(edge2.item, edge2.anchorLine) + offset2)
- - (position(edge1.item, edge1.anchorLine) + offset1);
- } else
- invalid = true;
-
- return invalid;
-}
-
-void QDeclarative1AnchorsPrivate::updateVerticalAnchors()
-{
- if (fill || centerIn || !isItemComplete())
- return;
-
- if (updatingVerticalAnchor < 2) {
- ++updatingVerticalAnchor;
- QGraphicsItemPrivate *itemPrivate = QGraphicsItemPrivate::get(item);
- if (usedAnchors & QDeclarative1Anchors::TopAnchor) {
- //Handle stretching
- bool invalid = true;
- qreal height = 0.0;
- if (usedAnchors & QDeclarative1Anchors::BottomAnchor) {
- invalid = calcStretch(top, bottom, topMargin, -bottomMargin, QDeclarative1AnchorLine::Top, height);
- } else if (usedAnchors & QDeclarative1Anchors::VCenterAnchor) {
- invalid = calcStretch(top, vCenter, topMargin, vCenterOffset, QDeclarative1AnchorLine::Top, height);
- height *= 2;
- }
- if (!invalid)
- setItemHeight(height);
-
- //Handle top
- if (top.item == item->parentItem()) {
- setItemY(adjustedPosition(top.item, top.anchorLine) + topMargin);
- } else if (top.item->parentItem() == item->parentItem()) {
- setItemY(position(top.item, top.anchorLine) + topMargin);
- }
- } else if (usedAnchors & QDeclarative1Anchors::BottomAnchor) {
- //Handle stretching (top + bottom case is handled above)
- if (usedAnchors & QDeclarative1Anchors::VCenterAnchor) {
- qreal height = 0.0;
- bool invalid = calcStretch(vCenter, bottom, vCenterOffset, -bottomMargin,
- QDeclarative1AnchorLine::Top, height);
- if (!invalid)
- setItemHeight(height*2);
- }
-
- //Handle bottom
- if (bottom.item == item->parentItem()) {
- setItemY(adjustedPosition(bottom.item, bottom.anchorLine) - itemPrivate->height() - bottomMargin);
- } else if (bottom.item->parentItem() == item->parentItem()) {
- setItemY(position(bottom.item, bottom.anchorLine) - itemPrivate->height() - bottomMargin);
- }
- } else if (usedAnchors & QDeclarative1Anchors::VCenterAnchor) {
- //(stetching handled above)
-
- //Handle vCenter
- if (vCenter.item == item->parentItem()) {
- setItemY(adjustedPosition(vCenter.item, vCenter.anchorLine)
- - vcenter(item) + vCenterOffset);
- } else if (vCenter.item->parentItem() == item->parentItem()) {
- setItemY(position(vCenter.item, vCenter.anchorLine) - vcenter(item) + vCenterOffset);
- }
- } else if (usedAnchors & QDeclarative1Anchors::BaselineAnchor) {
- //Handle baseline
- if (baseline.item == item->parentItem()) {
- if (itemPrivate->isDeclarativeItem)
- setItemY(adjustedPosition(baseline.item, baseline.anchorLine)
- - static_cast<QDeclarativeItem *>(item)->baselineOffset() + baselineOffset);
- } else if (baseline.item->parentItem() == item->parentItem()) {
- if (itemPrivate->isDeclarativeItem)
- setItemY(position(baseline.item, baseline.anchorLine)
- - static_cast<QDeclarativeItem *>(item)->baselineOffset() + baselineOffset);
- }
- }
- --updatingVerticalAnchor;
- } else {
- // ### Make this certain :)
- qmlInfo(item) << QDeclarative1Anchors::tr("Possible anchor loop detected on vertical anchor.");
- }
-}
-
-inline QDeclarative1AnchorLine::AnchorLine reverseAnchorLine(QDeclarative1AnchorLine::AnchorLine anchorLine) {
- if (anchorLine == QDeclarative1AnchorLine::Left) {
- return QDeclarative1AnchorLine::Right;
- } else if (anchorLine == QDeclarative1AnchorLine::Right) {
- return QDeclarative1AnchorLine::Left;
- } else {
- return anchorLine;
- }
-}
-
-void QDeclarative1AnchorsPrivate::updateHorizontalAnchors()
-{
- Q_Q(QDeclarative1Anchors);
- if (fill || centerIn || !isItemComplete())
- return;
-
- if (updatingHorizontalAnchor < 3) {
- ++updatingHorizontalAnchor;
- qreal effectiveRightMargin, effectiveLeftMargin, effectiveHorizontalCenterOffset;
- QDeclarative1AnchorLine effectiveLeft, effectiveRight, effectiveHorizontalCenter;
- QDeclarative1Anchors::Anchor effectiveLeftAnchor, effectiveRightAnchor;
- if (q->mirrored()) {
- effectiveLeftAnchor = QDeclarative1Anchors::RightAnchor;
- effectiveRightAnchor = QDeclarative1Anchors::LeftAnchor;
- effectiveLeft.item = right.item;
- effectiveLeft.anchorLine = reverseAnchorLine(right.anchorLine);
- effectiveRight.item = left.item;
- effectiveRight.anchorLine = reverseAnchorLine(left.anchorLine);
- effectiveHorizontalCenter.item = hCenter.item;
- effectiveHorizontalCenter.anchorLine = reverseAnchorLine(hCenter.anchorLine);
- effectiveLeftMargin = rightMargin;
- effectiveRightMargin = leftMargin;
- effectiveHorizontalCenterOffset = -hCenterOffset;
- } else {
- effectiveLeftAnchor = QDeclarative1Anchors::LeftAnchor;
- effectiveRightAnchor = QDeclarative1Anchors::RightAnchor;
- effectiveLeft = left;
- effectiveRight = right;
- effectiveHorizontalCenter = hCenter;
- effectiveLeftMargin = leftMargin;
- effectiveRightMargin = rightMargin;
- effectiveHorizontalCenterOffset = hCenterOffset;
- }
-
- QGraphicsItemPrivate *itemPrivate = QGraphicsItemPrivate::get(item);
- if (usedAnchors & effectiveLeftAnchor) {
- //Handle stretching
- bool invalid = true;
- qreal width = 0.0;
- if (usedAnchors & effectiveRightAnchor) {
- invalid = calcStretch(effectiveLeft, effectiveRight, effectiveLeftMargin, -effectiveRightMargin, QDeclarative1AnchorLine::Left, width);
- } else if (usedAnchors & QDeclarative1Anchors::HCenterAnchor) {
- invalid = calcStretch(effectiveLeft, effectiveHorizontalCenter, effectiveLeftMargin, effectiveHorizontalCenterOffset, QDeclarative1AnchorLine::Left, width);
- width *= 2;
- }
- if (!invalid)
- setItemWidth(width);
-
- //Handle left
- if (effectiveLeft.item == item->parentItem()) {
- setItemX(adjustedPosition(effectiveLeft.item, effectiveLeft.anchorLine) + effectiveLeftMargin);
- } else if (effectiveLeft.item->parentItem() == item->parentItem()) {
- setItemX(position(effectiveLeft.item, effectiveLeft.anchorLine) + effectiveLeftMargin);
- }
- } else if (usedAnchors & effectiveRightAnchor) {
- //Handle stretching (left + right case is handled in updateLeftAnchor)
- if (usedAnchors & QDeclarative1Anchors::HCenterAnchor) {
- qreal width = 0.0;
- bool invalid = calcStretch(effectiveHorizontalCenter, effectiveRight, effectiveHorizontalCenterOffset, -effectiveRightMargin,
- QDeclarative1AnchorLine::Left, width);
- if (!invalid)
- setItemWidth(width*2);
- }
-
- //Handle right
- if (effectiveRight.item == item->parentItem()) {
- setItemX(adjustedPosition(effectiveRight.item, effectiveRight.anchorLine) - itemPrivate->width() - effectiveRightMargin);
- } else if (effectiveRight.item->parentItem() == item->parentItem()) {
- setItemX(position(effectiveRight.item, effectiveRight.anchorLine) - itemPrivate->width() - effectiveRightMargin);
- }
- } else if (usedAnchors & QDeclarative1Anchors::HCenterAnchor) {
- //Handle hCenter
- if (effectiveHorizontalCenter.item == item->parentItem()) {
- setItemX(adjustedPosition(effectiveHorizontalCenter.item, effectiveHorizontalCenter.anchorLine) - hcenter(item) + effectiveHorizontalCenterOffset);
- } else if (effectiveHorizontalCenter.item->parentItem() == item->parentItem()) {
- setItemX(position(effectiveHorizontalCenter.item, effectiveHorizontalCenter.anchorLine) - hcenter(item) + effectiveHorizontalCenterOffset);
- }
- }
- --updatingHorizontalAnchor;
- } else {
- // ### Make this certain :)
- qmlInfo(item) << QDeclarative1Anchors::tr("Possible anchor loop detected on horizontal anchor.");
- }
-}
-
-QDeclarative1AnchorLine QDeclarative1Anchors::top() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->top;
-}
-
-void QDeclarative1Anchors::setTop(const QDeclarative1AnchorLine &edge)
-{
- Q_D(QDeclarative1Anchors);
- if (!d->checkVAnchorValid(edge) || d->top == edge)
- return;
-
- d->usedAnchors |= TopAnchor;
-
- if (!d->checkVValid()) {
- d->usedAnchors &= ~TopAnchor;
- return;
- }
-
- d->remDepend(d->top.item);
- d->top = edge;
- d->addDepend(d->top.item);
- emit topChanged();
- d->updateVerticalAnchors();
-}
-
-void QDeclarative1Anchors::resetTop()
-{
- Q_D(QDeclarative1Anchors);
- d->usedAnchors &= ~TopAnchor;
- d->remDepend(d->top.item);
- d->top = QDeclarative1AnchorLine();
- emit topChanged();
- d->updateVerticalAnchors();
-}
-
-QDeclarative1AnchorLine QDeclarative1Anchors::bottom() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->bottom;
-}
-
-void QDeclarative1Anchors::setBottom(const QDeclarative1AnchorLine &edge)
-{
- Q_D(QDeclarative1Anchors);
- if (!d->checkVAnchorValid(edge) || d->bottom == edge)
- return;
-
- d->usedAnchors |= BottomAnchor;
-
- if (!d->checkVValid()) {
- d->usedAnchors &= ~BottomAnchor;
- return;
- }
-
- d->remDepend(d->bottom.item);
- d->bottom = edge;
- d->addDepend(d->bottom.item);
- emit bottomChanged();
- d->updateVerticalAnchors();
-}
-
-void QDeclarative1Anchors::resetBottom()
-{
- Q_D(QDeclarative1Anchors);
- d->usedAnchors &= ~BottomAnchor;
- d->remDepend(d->bottom.item);
- d->bottom = QDeclarative1AnchorLine();
- emit bottomChanged();
- d->updateVerticalAnchors();
-}
-
-QDeclarative1AnchorLine QDeclarative1Anchors::verticalCenter() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->vCenter;
-}
-
-void QDeclarative1Anchors::setVerticalCenter(const QDeclarative1AnchorLine &edge)
-{
- Q_D(QDeclarative1Anchors);
- if (!d->checkVAnchorValid(edge) || d->vCenter == edge)
- return;
-
- d->usedAnchors |= VCenterAnchor;
-
- if (!d->checkVValid()) {
- d->usedAnchors &= ~VCenterAnchor;
- return;
- }
-
- d->remDepend(d->vCenter.item);
- d->vCenter = edge;
- d->addDepend(d->vCenter.item);
- emit verticalCenterChanged();
- d->updateVerticalAnchors();
-}
-
-void QDeclarative1Anchors::resetVerticalCenter()
-{
- Q_D(QDeclarative1Anchors);
- d->usedAnchors &= ~VCenterAnchor;
- d->remDepend(d->vCenter.item);
- d->vCenter = QDeclarative1AnchorLine();
- emit verticalCenterChanged();
- d->updateVerticalAnchors();
-}
-
-QDeclarative1AnchorLine QDeclarative1Anchors::baseline() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->baseline;
-}
-
-void QDeclarative1Anchors::setBaseline(const QDeclarative1AnchorLine &edge)
-{
- Q_D(QDeclarative1Anchors);
- if (!d->checkVAnchorValid(edge) || d->baseline == edge)
- return;
-
- d->usedAnchors |= BaselineAnchor;
-
- if (!d->checkVValid()) {
- d->usedAnchors &= ~BaselineAnchor;
- return;
- }
-
- d->remDepend(d->baseline.item);
- d->baseline = edge;
- d->addDepend(d->baseline.item);
- emit baselineChanged();
- d->updateVerticalAnchors();
-}
-
-void QDeclarative1Anchors::resetBaseline()
-{
- Q_D(QDeclarative1Anchors);
- d->usedAnchors &= ~BaselineAnchor;
- d->remDepend(d->baseline.item);
- d->baseline = QDeclarative1AnchorLine();
- emit baselineChanged();
- d->updateVerticalAnchors();
-}
-
-QDeclarative1AnchorLine QDeclarative1Anchors::left() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->left;
-}
-
-void QDeclarative1Anchors::setLeft(const QDeclarative1AnchorLine &edge)
-{
- Q_D(QDeclarative1Anchors);
- if (!d->checkHAnchorValid(edge) || d->left == edge)
- return;
-
- d->usedAnchors |= LeftAnchor;
-
- if (!d->checkHValid()) {
- d->usedAnchors &= ~LeftAnchor;
- return;
- }
-
- d->remDepend(d->left.item);
- d->left = edge;
- d->addDepend(d->left.item);
- emit leftChanged();
- d->updateHorizontalAnchors();
-}
-
-void QDeclarative1Anchors::resetLeft()
-{
- Q_D(QDeclarative1Anchors);
- d->usedAnchors &= ~LeftAnchor;
- d->remDepend(d->left.item);
- d->left = QDeclarative1AnchorLine();
- emit leftChanged();
- d->updateHorizontalAnchors();
-}
-
-QDeclarative1AnchorLine QDeclarative1Anchors::right() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->right;
-}
-
-void QDeclarative1Anchors::setRight(const QDeclarative1AnchorLine &edge)
-{
- Q_D(QDeclarative1Anchors);
- if (!d->checkHAnchorValid(edge) || d->right == edge)
- return;
-
- d->usedAnchors |= RightAnchor;
-
- if (!d->checkHValid()) {
- d->usedAnchors &= ~RightAnchor;
- return;
- }
-
- d->remDepend(d->right.item);
- d->right = edge;
- d->addDepend(d->right.item);
- emit rightChanged();
- d->updateHorizontalAnchors();
-}
-
-void QDeclarative1Anchors::resetRight()
-{
- Q_D(QDeclarative1Anchors);
- d->usedAnchors &= ~RightAnchor;
- d->remDepend(d->right.item);
- d->right = QDeclarative1AnchorLine();
- emit rightChanged();
- d->updateHorizontalAnchors();
-}
-
-QDeclarative1AnchorLine QDeclarative1Anchors::horizontalCenter() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->hCenter;
-}
-
-void QDeclarative1Anchors::setHorizontalCenter(const QDeclarative1AnchorLine &edge)
-{
- Q_D(QDeclarative1Anchors);
- if (!d->checkHAnchorValid(edge) || d->hCenter == edge)
- return;
-
- d->usedAnchors |= HCenterAnchor;
-
- if (!d->checkHValid()) {
- d->usedAnchors &= ~HCenterAnchor;
- return;
- }
-
- d->remDepend(d->hCenter.item);
- d->hCenter = edge;
- d->addDepend(d->hCenter.item);
- emit horizontalCenterChanged();
- d->updateHorizontalAnchors();
-}
-
-void QDeclarative1Anchors::resetHorizontalCenter()
-{
- Q_D(QDeclarative1Anchors);
- d->usedAnchors &= ~HCenterAnchor;
- d->remDepend(d->hCenter.item);
- d->hCenter = QDeclarative1AnchorLine();
- emit horizontalCenterChanged();
- d->updateHorizontalAnchors();
-}
-
-qreal QDeclarative1Anchors::leftMargin() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->leftMargin;
-}
-
-void QDeclarative1Anchors::setLeftMargin(qreal offset)
-{
- Q_D(QDeclarative1Anchors);
- if (d->leftMargin == offset)
- return;
- d->leftMargin = offset;
- if(d->fill)
- d->fillChanged();
- else
- d->updateHorizontalAnchors();
- emit leftMarginChanged();
-}
-
-qreal QDeclarative1Anchors::rightMargin() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->rightMargin;
-}
-
-void QDeclarative1Anchors::setRightMargin(qreal offset)
-{
- Q_D(QDeclarative1Anchors);
- if (d->rightMargin == offset)
- return;
- d->rightMargin = offset;
- if(d->fill)
- d->fillChanged();
- else
- d->updateHorizontalAnchors();
- emit rightMarginChanged();
-}
-
-qreal QDeclarative1Anchors::margins() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->margins;
-}
-
-void QDeclarative1Anchors::setMargins(qreal offset)
-{
- Q_D(QDeclarative1Anchors);
- if (d->margins == offset)
- return;
- //###Is it significantly faster to set them directly so we can call fillChanged only once?
- if(!d->rightMargin || d->rightMargin == d->margins)
- setRightMargin(offset);
- if(!d->leftMargin || d->leftMargin == d->margins)
- setLeftMargin(offset);
- if(!d->topMargin || d->topMargin == d->margins)
- setTopMargin(offset);
- if(!d->bottomMargin || d->bottomMargin == d->margins)
- setBottomMargin(offset);
- d->margins = offset;
- emit marginsChanged();
-
-}
-
-qreal QDeclarative1Anchors::horizontalCenterOffset() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->hCenterOffset;
-}
-
-void QDeclarative1Anchors::setHorizontalCenterOffset(qreal offset)
-{
- Q_D(QDeclarative1Anchors);
- if (d->hCenterOffset == offset)
- return;
- d->hCenterOffset = offset;
- if(d->centerIn)
- d->centerInChanged();
- else
- d->updateHorizontalAnchors();
- emit horizontalCenterOffsetChanged();
-}
-
-qreal QDeclarative1Anchors::topMargin() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->topMargin;
-}
-
-void QDeclarative1Anchors::setTopMargin(qreal offset)
-{
- Q_D(QDeclarative1Anchors);
- if (d->topMargin == offset)
- return;
- d->topMargin = offset;
- if(d->fill)
- d->fillChanged();
- else
- d->updateVerticalAnchors();
- emit topMarginChanged();
-}
-
-qreal QDeclarative1Anchors::bottomMargin() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->bottomMargin;
-}
-
-void QDeclarative1Anchors::setBottomMargin(qreal offset)
-{
- Q_D(QDeclarative1Anchors);
- if (d->bottomMargin == offset)
- return;
- d->bottomMargin = offset;
- if(d->fill)
- d->fillChanged();
- else
- d->updateVerticalAnchors();
- emit bottomMarginChanged();
-}
-
-qreal QDeclarative1Anchors::verticalCenterOffset() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->vCenterOffset;
-}
-
-void QDeclarative1Anchors::setVerticalCenterOffset(qreal offset)
-{
- Q_D(QDeclarative1Anchors);
- if (d->vCenterOffset == offset)
- return;
- d->vCenterOffset = offset;
- if(d->centerIn)
- d->centerInChanged();
- else
- d->updateVerticalAnchors();
- emit verticalCenterOffsetChanged();
-}
-
-qreal QDeclarative1Anchors::baselineOffset() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->baselineOffset;
-}
-
-void QDeclarative1Anchors::setBaselineOffset(qreal offset)
-{
- Q_D(QDeclarative1Anchors);
- if (d->baselineOffset == offset)
- return;
- d->baselineOffset = offset;
- d->updateVerticalAnchors();
- emit baselineOffsetChanged();
-}
-
-QDeclarative1Anchors::Anchors QDeclarative1Anchors::usedAnchors() const
-{
- Q_D(const QDeclarative1Anchors);
- return d->usedAnchors;
-}
-
-bool QDeclarative1AnchorsPrivate::checkHValid() const
-{
- if (usedAnchors & QDeclarative1Anchors::LeftAnchor &&
- usedAnchors & QDeclarative1Anchors::RightAnchor &&
- usedAnchors & QDeclarative1Anchors::HCenterAnchor) {
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot specify left, right, and hcenter anchors.");
- return false;
- }
-
- return true;
-}
-
-bool QDeclarative1AnchorsPrivate::checkHAnchorValid(QDeclarative1AnchorLine anchor) const
-{
- if (!anchor.item) {
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot anchor to a null item.");
- return false;
- } else if (anchor.anchorLine & QDeclarative1AnchorLine::Vertical_Mask) {
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot anchor a horizontal edge to a vertical edge.");
- return false;
- } else if (anchor.item != item->parentItem() && anchor.item->parentItem() != item->parentItem()){
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot anchor to an item that isn't a parent or sibling.");
- return false;
- } else if (anchor.item == item) {
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot anchor item to self.");
- return false;
- }
-
- return true;
-}
-
-bool QDeclarative1AnchorsPrivate::checkVValid() const
-{
- if (usedAnchors & QDeclarative1Anchors::TopAnchor &&
- usedAnchors & QDeclarative1Anchors::BottomAnchor &&
- usedAnchors & QDeclarative1Anchors::VCenterAnchor) {
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot specify top, bottom, and vcenter anchors.");
- return false;
- } else if (usedAnchors & QDeclarative1Anchors::BaselineAnchor &&
- (usedAnchors & QDeclarative1Anchors::TopAnchor ||
- usedAnchors & QDeclarative1Anchors::BottomAnchor ||
- usedAnchors & QDeclarative1Anchors::VCenterAnchor)) {
- qmlInfo(item) << QDeclarative1Anchors::tr("Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors.");
- return false;
- }
-
- return true;
-}
-
-bool QDeclarative1AnchorsPrivate::checkVAnchorValid(QDeclarative1AnchorLine anchor) const
-{
- if (!anchor.item) {
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot anchor to a null item.");
- return false;
- } else if (anchor.anchorLine & QDeclarative1AnchorLine::Horizontal_Mask) {
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot anchor a vertical edge to a horizontal edge.");
- return false;
- } else if (anchor.item != item->parentItem() && anchor.item->parentItem() != item->parentItem()){
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot anchor to an item that isn't a parent or sibling.");
- return false;
- } else if (anchor.item == item){
- qmlInfo(item) << QDeclarative1Anchors::tr("Cannot anchor item to self.");
- return false;
- }
-
- return true;
-}
-
-
-
-QT_END_NAMESPACE
-
-#include <moc_qdeclarativeanchors_p.cpp>
-
diff --git a/src/qtquick1/graphicsitems/qdeclarativeanchors_p.h b/src/qtquick1/graphicsitems/qdeclarativeanchors_p.h
deleted file mode 100644
index 4218fd2a67..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeanchors_p.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEANCHORS_H
-#define QDECLARATIVEANCHORS_H
-
-#include "qdeclarativeitem.h"
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QtCore/QObject>
-
-#include <QtDeclarative/private/qdeclarativeglobal_p.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1AnchorsPrivate;
-class QDeclarative1AnchorLine;
-class Q_QTQUICK1_EXPORT QDeclarative1Anchors : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarative1AnchorLine left READ left WRITE setLeft RESET resetLeft NOTIFY leftChanged)
- Q_PROPERTY(QDeclarative1AnchorLine right READ right WRITE setRight RESET resetRight NOTIFY rightChanged)
- Q_PROPERTY(QDeclarative1AnchorLine horizontalCenter READ horizontalCenter WRITE setHorizontalCenter RESET resetHorizontalCenter NOTIFY horizontalCenterChanged)
- Q_PROPERTY(QDeclarative1AnchorLine top READ top WRITE setTop RESET resetTop NOTIFY topChanged)
- Q_PROPERTY(QDeclarative1AnchorLine bottom READ bottom WRITE setBottom RESET resetBottom NOTIFY bottomChanged)
- Q_PROPERTY(QDeclarative1AnchorLine verticalCenter READ verticalCenter WRITE setVerticalCenter RESET resetVerticalCenter NOTIFY verticalCenterChanged)
- Q_PROPERTY(QDeclarative1AnchorLine baseline READ baseline WRITE setBaseline RESET resetBaseline NOTIFY baselineChanged)
- Q_PROPERTY(qreal margins READ margins WRITE setMargins NOTIFY marginsChanged)
- Q_PROPERTY(qreal leftMargin READ leftMargin WRITE setLeftMargin NOTIFY leftMarginChanged)
- Q_PROPERTY(qreal rightMargin READ rightMargin WRITE setRightMargin NOTIFY rightMarginChanged)
- Q_PROPERTY(qreal horizontalCenterOffset READ horizontalCenterOffset WRITE setHorizontalCenterOffset NOTIFY horizontalCenterOffsetChanged)
- Q_PROPERTY(qreal topMargin READ topMargin WRITE setTopMargin NOTIFY topMarginChanged)
- Q_PROPERTY(qreal bottomMargin READ bottomMargin WRITE setBottomMargin NOTIFY bottomMarginChanged)
- Q_PROPERTY(qreal verticalCenterOffset READ verticalCenterOffset WRITE setVerticalCenterOffset NOTIFY verticalCenterOffsetChanged)
- Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged)
- Q_PROPERTY(QGraphicsObject *fill READ fill WRITE setFill RESET resetFill NOTIFY fillChanged)
- Q_PROPERTY(QGraphicsObject *centerIn READ centerIn WRITE setCenterIn RESET resetCenterIn NOTIFY centerInChanged)
- Q_PROPERTY(bool mirrored READ mirrored NOTIFY mirroredChanged REVISION 1)
-
-public:
- QDeclarative1Anchors(QObject *parent=0);
- QDeclarative1Anchors(QGraphicsObject *item, QObject *parent=0);
- virtual ~QDeclarative1Anchors();
-
- enum Anchor {
- LeftAnchor = 0x01,
- RightAnchor = 0x02,
- TopAnchor = 0x04,
- BottomAnchor = 0x08,
- HCenterAnchor = 0x10,
- VCenterAnchor = 0x20,
- BaselineAnchor = 0x40,
- Horizontal_Mask = LeftAnchor | RightAnchor | HCenterAnchor,
- Vertical_Mask = TopAnchor | BottomAnchor | VCenterAnchor | BaselineAnchor
- };
- Q_DECLARE_FLAGS(Anchors, Anchor)
-
- QDeclarative1AnchorLine left() const;
- void setLeft(const QDeclarative1AnchorLine &edge);
- void resetLeft();
-
- QDeclarative1AnchorLine right() const;
- void setRight(const QDeclarative1AnchorLine &edge);
- void resetRight();
-
- QDeclarative1AnchorLine horizontalCenter() const;
- void setHorizontalCenter(const QDeclarative1AnchorLine &edge);
- void resetHorizontalCenter();
-
- QDeclarative1AnchorLine top() const;
- void setTop(const QDeclarative1AnchorLine &edge);
- void resetTop();
-
- QDeclarative1AnchorLine bottom() const;
- void setBottom(const QDeclarative1AnchorLine &edge);
- void resetBottom();
-
- QDeclarative1AnchorLine verticalCenter() const;
- void setVerticalCenter(const QDeclarative1AnchorLine &edge);
- void resetVerticalCenter();
-
- QDeclarative1AnchorLine baseline() const;
- void setBaseline(const QDeclarative1AnchorLine &edge);
- void resetBaseline();
-
- qreal leftMargin() const;
- void setLeftMargin(qreal);
-
- qreal rightMargin() const;
- void setRightMargin(qreal);
-
- qreal horizontalCenterOffset() const;
- void setHorizontalCenterOffset(qreal);
-
- qreal topMargin() const;
- void setTopMargin(qreal);
-
- qreal bottomMargin() const;
- void setBottomMargin(qreal);
-
- qreal margins() const;
- void setMargins(qreal);
-
- qreal verticalCenterOffset() const;
- void setVerticalCenterOffset(qreal);
-
- qreal baselineOffset() const;
- void setBaselineOffset(qreal);
-
- QGraphicsObject *fill() const;
- void setFill(QGraphicsObject *);
- void resetFill();
-
- QGraphicsObject *centerIn() const;
- void setCenterIn(QGraphicsObject *);
- void resetCenterIn();
-
- Anchors usedAnchors() const;
-
- void classBegin();
- void componentComplete();
-
- bool mirrored();
-
-Q_SIGNALS:
- void leftChanged();
- void rightChanged();
- void topChanged();
- void bottomChanged();
- void verticalCenterChanged();
- void horizontalCenterChanged();
- void baselineChanged();
- void fillChanged();
- void centerInChanged();
- void leftMarginChanged();
- void rightMarginChanged();
- void topMarginChanged();
- void bottomMarginChanged();
- void marginsChanged();
- void verticalCenterOffsetChanged();
- void horizontalCenterOffsetChanged();
- void baselineOffsetChanged();
- Q_REVISION(1) void mirroredChanged();
-
-private:
- friend class QDeclarativeItem;
- friend class QDeclarativeItemPrivate;
- friend class QDeclarative1GraphicsWidget;
- Q_DISABLE_COPY(QDeclarative1Anchors)
- Q_DECLARE_PRIVATE(QDeclarative1Anchors)
- Q_PRIVATE_SLOT(d_func(), void _q_widgetGeometryChanged())
- Q_PRIVATE_SLOT(d_func(), void _q_widgetDestroyed(QObject *obj))
-};
-Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarative1Anchors::Anchors)
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Anchors)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeanchors_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeanchors_p_p.h
deleted file mode 100644
index a7d769d917..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeanchors_p_p.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEANCHORS_P_H
-#define QDECLARATIVEANCHORS_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "QtQuick1/private/qdeclarativeanchors_p.h"
-#include "QtQuick1/private/qdeclarativeitemchangelistener_p.h"
-#include <private/qobject_p.h>
-
-QT_BEGIN_NAMESPACE
-
-// NOTE: if you change this then also update the copy in qdeclarativev4compiler_p_p.h
-class QDeclarative1AnchorLine
-{
-public:
- QDeclarative1AnchorLine() : item(0), anchorLine(Invalid) {}
-
- enum AnchorLine {
- Invalid = 0x0,
- Left = 0x01,
- Right = 0x02,
- Top = 0x04,
- Bottom = 0x08,
- HCenter = 0x10,
- VCenter = 0x20,
- Baseline = 0x40,
- Horizontal_Mask = Left | Right | HCenter,
- Vertical_Mask = Top | Bottom | VCenter | Baseline
- };
-
- QGraphicsObject *item;
- AnchorLine anchorLine;
-};
-
-inline bool operator==(const QDeclarative1AnchorLine& a, const QDeclarative1AnchorLine& b)
-{
- return a.item == b.item && a.anchorLine == b.anchorLine;
-}
-
-class QDeclarative1AnchorsPrivate : public QObjectPrivate, public QDeclarativeItemChangeListener
-{
- Q_DECLARE_PUBLIC(QDeclarative1Anchors)
-public:
- QDeclarative1AnchorsPrivate(QGraphicsObject *i)
- : componentComplete(true), updatingMe(false), updatingHorizontalAnchor(0),
- updatingVerticalAnchor(0), updatingFill(0), updatingCenterIn(0), item(i), usedAnchors(0), fill(0),
- centerIn(0), leftMargin(0), rightMargin(0), topMargin(0), bottomMargin(0),
- margins(0), vCenterOffset(0), hCenterOffset(0), baselineOffset(0)
- {
- }
-
- void clearItem(QGraphicsObject *);
-
- void addDepend(QGraphicsObject *);
- void remDepend(QGraphicsObject *);
- bool isItemComplete() const;
-
- bool componentComplete:1;
- bool updatingMe:1;
- uint updatingHorizontalAnchor:2;
- uint updatingVerticalAnchor:2;
- uint updatingFill:2;
- uint updatingCenterIn:2;
-
- void setItemHeight(qreal);
- void setItemWidth(qreal);
- void setItemX(qreal);
- void setItemY(qreal);
- void setItemPos(const QPointF &);
- void setItemSize(const QSizeF &);
-
- void updateOnComplete();
- void updateMe();
-
- // QDeclarativeItemGeometryListener interface
- void itemGeometryChanged(QDeclarativeItem *, const QRectF &, const QRectF &);
- void _q_widgetDestroyed(QObject *);
- void _q_widgetGeometryChanged();
- QDeclarative1AnchorsPrivate *anchorPrivate() { return this; }
-
- bool checkHValid() const;
- bool checkVValid() const;
- bool checkHAnchorValid(QDeclarative1AnchorLine anchor) const;
- bool checkVAnchorValid(QDeclarative1AnchorLine anchor) const;
- bool calcStretch(const QDeclarative1AnchorLine &edge1, const QDeclarative1AnchorLine &edge2, qreal offset1, qreal offset2, QDeclarative1AnchorLine::AnchorLine line, qreal &stretch);
-
- bool isMirrored() const;
- void updateHorizontalAnchors();
- void updateVerticalAnchors();
- void fillChanged();
- void centerInChanged();
-
- QGraphicsObject *item;
- QDeclarative1Anchors::Anchors usedAnchors;
-
- QGraphicsObject *fill;
- QGraphicsObject *centerIn;
-
- QDeclarative1AnchorLine left;
- QDeclarative1AnchorLine right;
- QDeclarative1AnchorLine top;
- QDeclarative1AnchorLine bottom;
- QDeclarative1AnchorLine vCenter;
- QDeclarative1AnchorLine hCenter;
- QDeclarative1AnchorLine baseline;
-
- qreal leftMargin;
- qreal rightMargin;
- qreal topMargin;
- qreal bottomMargin;
- qreal margins;
- qreal vCenterOffset;
- qreal hCenterOffset;
- qreal baselineOffset;
-};
-
-QT_END_NAMESPACE
-
-Q_DECLARE_METATYPE(QDeclarative1AnchorLine)
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeanimatedimage.cpp b/src/qtquick1/graphicsitems/qdeclarativeanimatedimage.cpp
deleted file mode 100644
index 72bbf13dad..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeanimatedimage.cpp
+++ /dev/null
@@ -1,402 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeanimatedimage_p.h"
-#include "QtQuick1/private/qdeclarativeanimatedimage_p_p.h"
-
-#ifndef QT_NO_MOVIE
-
-#include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtDeclarative/private/qdeclarativeengine_p.h>
-
-#include <QMovie>
-#include <QNetworkRequest>
-#include <QNetworkReply>
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \qmlclass AnimatedImage QDeclarative1AnimatedImage
- \inqmlmodule QtQuick 1
- \inherits Image
- \since QtQuick 1.0
- \ingroup basic-visual-elements
-
- The AnimatedImage element extends the features of the \l Image element, providing
- a way to play animations stored as images containing a series of frames,
- such as those stored in GIF files.
-
- Information about the current frame and totla length of the animation can be
- obtained using the \l currentFrame and \l frameCount properties. You can
- start, pause and stop the animation by changing the values of the \l playing
- and \l paused properties.
-
- The full list of supported formats can be determined with QMovie::supportedFormats().
-
- \section1 Example Usage
-
- \beginfloatleft
- \image animatedimageitem.gif
- \endfloat
-
- The following QML shows how to display an animated image and obtain information
- about its state, such as the current frame and total number of frames.
- The result is an animated image with a simple progress indicator underneath it.
-
- \bold Note: Unlike images, animated images are not cached or shared internally.
-
- \clearfloat
- \snippet doc/src/snippets/qtquick1/animatedimage.qml document
-
- \sa BorderImage, Image
-*/
-
-/*!
- \qmlproperty url QtQuick1::AnimatedImage::source
-
- This property holds the URL that refers to the source image.
-
- AnimatedImage can handle any image format supported by Qt, loaded from any
- URL scheme supported by Qt.
-
- \sa QDeclarativeImageProvider
-*/
-
-/*!
- \qmlproperty bool QtQuick1::AnimatedImage::asynchronous
-
- Specifies that images on the local filesystem should be loaded
- asynchronously in a separate thread. The default value is
- false, causing the user interface thread to block while the
- image is loaded. Setting \a asynchronous to true is useful where
- maintaining a responsive user interface is more desirable
- than having images immediately visible.
-
- Note that this property is only valid for images read from the
- local filesystem. Images loaded via a network resource (e.g. HTTP)
- are always loaded asynchonously.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::AnimatedImage::mirror
- \since Quick 1.1
-
- This property holds whether the image should be horizontally inverted
- (effectively displaying a mirrored image).
-
- The default value is false.
-*/
-
-QDeclarative1AnimatedImage::QDeclarative1AnimatedImage(QDeclarativeItem *parent)
- : QDeclarative1Image(*(new QDeclarative1AnimatedImagePrivate), parent)
-{
-}
-
-QDeclarative1AnimatedImage::~QDeclarative1AnimatedImage()
-{
- Q_D(QDeclarative1AnimatedImage);
- delete d->_movie;
-}
-
-/*!
- \qmlproperty bool QtQuick1::AnimatedImage::paused
- This property holds whether the animated image is paused.
-
- By default, this property is false. Set it to true when you want to pause
- the animation.
-*/
-bool QDeclarative1AnimatedImage::isPaused() const
-{
- Q_D(const QDeclarative1AnimatedImage);
- if(!d->_movie)
- return false;
- return d->_movie->state()==QMovie::Paused;
-}
-
-void QDeclarative1AnimatedImage::setPaused(bool pause)
-{
- Q_D(QDeclarative1AnimatedImage);
- if(pause == d->paused)
- return;
- d->paused = pause;
- if(!d->_movie)
- return;
- d->_movie->setPaused(pause);
-}
-/*!
- \qmlproperty bool QtQuick1::AnimatedImage::playing
- This property holds whether the animated image is playing.
-
- By default, this property is true, meaning that the animation
- will start playing immediately.
-*/
-bool QDeclarative1AnimatedImage::isPlaying() const
-{
- Q_D(const QDeclarative1AnimatedImage);
- if (!d->_movie)
- return false;
- return d->_movie->state()!=QMovie::NotRunning;
-}
-
-void QDeclarative1AnimatedImage::setPlaying(bool play)
-{
- Q_D(QDeclarative1AnimatedImage);
- if(play == d->playing)
- return;
- d->playing = play;
- if (!d->_movie)
- return;
- if (play)
- d->_movie->start();
- else
- d->_movie->stop();
-}
-
-/*!
- \qmlproperty int QtQuick1::AnimatedImage::currentFrame
- \qmlproperty int QtQuick1::AnimatedImage::frameCount
-
- currentFrame is the frame that is currently visible. By monitoring this property
- for changes, you can animate other items at the same time as the image.
-
- frameCount is the number of frames in the animation. For some animation formats,
- frameCount is unknown and has a value of zero.
-*/
-int QDeclarative1AnimatedImage::currentFrame() const
-{
- Q_D(const QDeclarative1AnimatedImage);
- if (!d->_movie)
- return d->preset_currentframe;
- return d->_movie->currentFrameNumber();
-}
-
-void QDeclarative1AnimatedImage::setCurrentFrame(int frame)
-{
- Q_D(QDeclarative1AnimatedImage);
- if (!d->_movie) {
- d->preset_currentframe = frame;
- return;
- }
- d->_movie->jumpToFrame(frame);
-}
-
-int QDeclarative1AnimatedImage::frameCount() const
-{
- Q_D(const QDeclarative1AnimatedImage);
- if (!d->_movie)
- return 0;
- return d->_movie->frameCount();
-}
-
-void QDeclarative1AnimatedImage::setSource(const QUrl &url)
-{
- Q_D(QDeclarative1AnimatedImage);
- if (url == d->url)
- return;
-
- delete d->_movie;
- d->_movie = 0;
-
- if (d->reply) {
- d->reply->deleteLater();
- d->reply = 0;
- }
-
- d->url = url;
- emit sourceChanged(d->url);
-
- if (isComponentComplete())
- load();
-}
-
-void QDeclarative1AnimatedImage::load()
-{
- Q_D(QDeclarative1AnimatedImage);
-
- QDeclarative1ImageBase::Status oldStatus = d->status;
- qreal oldProgress = d->progress;
-
- if (d->url.isEmpty()) {
- delete d->_movie;
- d->setPixmap(QPixmap());
- d->progress = 0;
- d->status = Null;
- if (d->status != oldStatus)
- emit statusChanged(d->status);
- if (d->progress != oldProgress)
- emit progressChanged(d->progress);
- } else {
-#ifndef QT_NO_LOCALFILE_OPTIMIZED_QML
- QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(d->url);
- if (!lf.isEmpty()) {
- //### should be unified with movieRequestFinished
- d->_movie = new QMovie(lf);
- if (!d->_movie->isValid()){
- qmlInfo(this) << "Error Reading Animated Image File " << d->url.toString();
- delete d->_movie;
- d->_movie = 0;
- d->status = Error;
- if (d->status != oldStatus)
- emit statusChanged(d->status);
- return;
- }
- connect(d->_movie, SIGNAL(stateChanged(QMovie::MovieState)),
- this, SLOT(playingStatusChanged()));
- connect(d->_movie, SIGNAL(frameChanged(int)),
- this, SLOT(movieUpdate()));
- d->_movie->setCacheMode(QMovie::CacheAll);
- if(d->playing)
- d->_movie->start();
- else
- d->_movie->jumpToFrame(0);
- if(d->paused)
- d->_movie->setPaused(true);
- d->setPixmap(d->_movie->currentPixmap());
- d->status = Ready;
- d->progress = 1.0;
- if (d->status != oldStatus)
- emit statusChanged(d->status);
- if (d->progress != oldProgress)
- emit progressChanged(d->progress);
- return;
- }
-#endif
- d->status = Loading;
- d->progress = 0;
- emit statusChanged(d->status);
- emit progressChanged(d->progress);
- QNetworkRequest req(d->url);
- req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
- d->reply = qmlEngine(this)->networkAccessManager()->get(req);
- QObject::connect(d->reply, SIGNAL(finished()),
- this, SLOT(movieRequestFinished()));
- QObject::connect(d->reply, SIGNAL(downloadProgress(qint64,qint64)),
- this, SLOT(requestProgress(qint64,qint64)));
- }
-}
-
-#define ANIMATEDIMAGE_MAXIMUM_REDIRECT_RECURSION 16
-
-void QDeclarative1AnimatedImage::movieRequestFinished()
-{
- Q_D(QDeclarative1AnimatedImage);
-
- d->redirectCount++;
- if (d->redirectCount < ANIMATEDIMAGE_MAXIMUM_REDIRECT_RECURSION) {
- QVariant redirect = d->reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
- if (redirect.isValid()) {
- QUrl url = d->reply->url().resolved(redirect.toUrl());
- d->reply->deleteLater();
- d->reply = 0;
- setSource(url);
- return;
- }
- }
- d->redirectCount=0;
-
- d->_movie = new QMovie(d->reply);
- if (!d->_movie->isValid()){
-#ifndef QT_NO_DEBUG_STREAM
- qmlInfo(this) << "Error Reading Animated Image File " << d->url;
-#endif
- delete d->_movie;
- d->_movie = 0;
- d->status = Error;
- emit statusChanged(d->status);
- return;
- }
- connect(d->_movie, SIGNAL(stateChanged(QMovie::MovieState)),
- this, SLOT(playingStatusChanged()));
- connect(d->_movie, SIGNAL(frameChanged(int)),
- this, SLOT(movieUpdate()));
- d->_movie->setCacheMode(QMovie::CacheAll);
- if(d->playing)
- d->_movie->start();
- if (d->paused || !d->playing) {
- d->_movie->jumpToFrame(d->preset_currentframe);
- d->preset_currentframe = 0;
- }
- if(d->paused)
- d->_movie->setPaused(true);
- d->setPixmap(d->_movie->currentPixmap());
- d->status = Ready;
- emit statusChanged(d->status);
-}
-
-void QDeclarative1AnimatedImage::movieUpdate()
-{
- Q_D(QDeclarative1AnimatedImage);
- d->setPixmap(d->_movie->currentPixmap());
- emit frameChanged();
-}
-
-void QDeclarative1AnimatedImage::playingStatusChanged()
-{
- Q_D(QDeclarative1AnimatedImage);
- if((d->_movie->state() != QMovie::NotRunning) != d->playing){
- d->playing = (d->_movie->state() != QMovie::NotRunning);
- emit playingChanged();
- }
- if((d->_movie->state() == QMovie::Paused) != d->paused){
- d->playing = (d->_movie->state() == QMovie::Paused);
- emit pausedChanged();
- }
-}
-
-void QDeclarative1AnimatedImage::componentComplete()
-{
- Q_D(QDeclarative1AnimatedImage);
- QDeclarativeItem::componentComplete(); // NOT QDeclarative1Image
- if (d->url.isValid())
- load();
- if (!d->reply) {
- setCurrentFrame(d->preset_currentframe);
- d->preset_currentframe = 0;
- }
-}
-
-
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_MOVIE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeanimatedimage_p.h b/src/qtquick1/graphicsitems/qdeclarativeanimatedimage_p.h
deleted file mode 100644
index 373af3cc69..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeanimatedimage_p.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEANIMATEDIMAGE_H
-#define QDECLARATIVEANIMATEDIMAGE_H
-
-#include "private/qdeclarativeimage_p.h"
-
-#ifndef QT_NO_MOVIE
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QMovie;
-
-
-class QDeclarative1AnimatedImagePrivate;
-
-class Q_AUTOTEST_EXPORT QDeclarative1AnimatedImage : public QDeclarative1Image
-{
- Q_OBJECT
-
- Q_PROPERTY(bool playing READ isPlaying WRITE setPlaying NOTIFY playingChanged)
- Q_PROPERTY(bool paused READ isPaused WRITE setPaused NOTIFY pausedChanged)
- Q_PROPERTY(int currentFrame READ currentFrame WRITE setCurrentFrame NOTIFY frameChanged)
- Q_PROPERTY(int frameCount READ frameCount)
-
- // read-only for AnimatedImage
- Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
-
-public:
- QDeclarative1AnimatedImage(QDeclarativeItem *parent=0);
- ~QDeclarative1AnimatedImage();
-
- bool isPlaying() const;
- void setPlaying(bool play);
-
- bool isPaused() const;
- void setPaused(bool pause);
-
- int currentFrame() const;
- void setCurrentFrame(int frame);
-
- int frameCount() const;
-
- // Extends QDeclarative1Image's src property*/
- virtual void setSource(const QUrl&);
-
-Q_SIGNALS:
- void playingChanged();
- void pausedChanged();
- void frameChanged();
- void sourceSizeChanged();
-
-private Q_SLOTS:
- void movieUpdate();
- void movieRequestFinished();
- void playingStatusChanged();
-
-protected:
- virtual void load();
- void componentComplete();
-
-private:
- Q_DISABLE_COPY(QDeclarative1AnimatedImage)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1AnimatedImage)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1AnimatedImage)
-
-QT_END_HEADER
-
-#endif // QT_NO_MOVIE
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeanimatedimage_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeanimatedimage_p_p.h
deleted file mode 100644
index 8fe6502d99..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeanimatedimage_p_p.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEANIMATEDIMAGE_P_H
-#define QDECLARATIVEANIMATEDIMAGE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeimage_p_p.h"
-
-#ifndef QT_NO_MOVIE
-
-QT_BEGIN_NAMESPACE
-
-class QMovie;
-class QNetworkReply;
-
-class QDeclarative1AnimatedImagePrivate : public QDeclarative1ImagePrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1AnimatedImage)
-
-public:
- QDeclarative1AnimatedImagePrivate()
- : playing(true), paused(false), preset_currentframe(0), _movie(0), reply(0), redirectCount(0)
- {
- }
-
- bool playing;
- bool paused;
- int preset_currentframe;
- QMovie *_movie;
- QNetworkReply *reply;
- int redirectCount;
-};
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_MOVIE
-
-#endif // QDECLARATIVEANIMATEDIMAGE_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeborderimage.cpp b/src/qtquick1/graphicsitems/qdeclarativeborderimage.cpp
deleted file mode 100644
index 7ef77eabe9..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeborderimage.cpp
+++ /dev/null
@@ -1,624 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeborderimage_p.h"
-#include "QtQuick1/private/qdeclarativeborderimage_p_p.h"
-
-#include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtDeclarative/private/qdeclarativeengine_p.h>
-
-#include <QNetworkRequest>
-#include <QNetworkReply>
-#include <QFile>
-
-#include <QtWidgets/qdrawutil.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \qmlclass BorderImage QDeclarative1BorderImage
- \inqmlmodule QtQuick 1
- \brief The BorderImage element provides an image that can be used as a border.
- \inherits Item
- \since QtQuick 1.0
- \ingroup qml-basic-visual-elements
-
- The BorderImage element is used to create borders out of images by scaling or tiling
- parts of each image.
-
- A BorderImage element breaks a source image, specified using the \l url property,
- into 9 regions, as shown below:
-
- \image declarative-scalegrid.png
-
- When the image is scaled, regions of the source image are scaled or tiled to
- create the displayed border image in the following way:
-
- \list
- \i The corners (regions 1, 3, 7, and 9) are not scaled at all.
- \i Regions 2 and 8 are scaled according to
- \l{BorderImage::horizontalTileMode}{horizontalTileMode}.
- \i Regions 4 and 6 are scaled according to
- \l{BorderImage::verticalTileMode}{verticalTileMode}.
- \i The middle (region 5) is scaled according to both
- \l{BorderImage::horizontalTileMode}{horizontalTileMode} and
- \l{BorderImage::verticalTileMode}{verticalTileMode}.
- \endlist
-
- The regions of the image are defined using the \l border property group, which
- describes the distance from each edge of the source image to use as a border.
-
- \section1 Example Usage
-
- The following examples show the effects of the different modes on an image.
- Guide lines are overlaid onto the image to show the different regions of the
- image as described above.
-
- \beginfloatleft
- \image qml-borderimage-normal-image.png
- \endfloat
-
- An unscaled image is displayed using an Image element. The \l border property is
- used to determine the parts of the image that will lie inside the unscaled corner
- areas and the parts that will be stretched horizontally and vertically.
-
- \snippet doc/src/snippets/qtquick1/borderimage/normal-image.qml normal image
-
- \clearfloat
- \beginfloatleft
- \image qml-borderimage-scaled.png
- \endfloat
-
- A BorderImage element is used to display the image, and it is given a size that is
- larger than the original image. Since the \l horizontalTileMode property is set to
- \l{BorderImage::horizontalTileMode}{BorderImage.Stretch}, the parts of image in
- regions 2 and 8 are stretched horizontally. Since the \l verticalTileMode property
- is set to \l{BorderImage::verticalTileMode}{BorderImage.Stretch}, the parts of image
- in regions 4 and 6 are stretched vertically.
-
- \snippet doc/src/snippets/qtquick1/borderimage/borderimage-scaled.qml scaled border image
-
- \clearfloat
- \beginfloatleft
- \image qml-borderimage-tiled.png
- \endfloat
-
- Again, a large BorderImage element is used to display the image. With the
- \l horizontalTileMode property set to \l{BorderImage::horizontalTileMode}{BorderImage.Repeat},
- the parts of image in regions 2 and 8 are tiled so that they fill the space at the
- top and bottom of the element. Similarly, the \l verticalTileMode property is set to
- \l{BorderImage::verticalTileMode}{BorderImage.Repeat}, the parts of image in regions
- 4 and 6 are tiled so that they fill the space at the left and right of the element.
-
- \snippet doc/src/snippets/qtquick1/borderimage/borderimage-tiled.qml tiled border image
-
- \clearfloat
- In some situations, the width of regions 2 and 8 may not be an exact multiple of the width
- of the corresponding regions in the source image. Similarly, the height of regions 4 and 6
- may not be an exact multiple of the height of the corresponding regions. It can be useful
- to use \l{BorderImage::horizontalTileMode}{BorderImage.Round} instead of
- \l{BorderImage::horizontalTileMode}{BorderImage.Repeat} in cases like these.
-
- The \l{declarative/imageelements/borderimage}{BorderImage example} shows how a BorderImage
- can be used to simulate a shadow effect on a rectangular item.
-
- \section1 Quality and Performance
-
- By default, any scaled regions of the image are rendered without smoothing to improve
- rendering speed. Setting the \l smooth property improves rendering quality of scaled
- regions, but may slow down rendering.
-
- The source image may not be loaded instantaneously, depending on its original location.
- Loading progress can be monitored with the \l progress property.
-
- \sa Image, AnimatedImage
- */
-
-/*!
- \qmlproperty bool QtQuick1::BorderImage::asynchronous
-
- Specifies that images on the local filesystem should be loaded
- asynchronously in a separate thread. The default value is
- false, causing the user interface thread to block while the
- image is loaded. Setting \a asynchronous to true is useful where
- maintaining a responsive user interface is more desirable
- than having images immediately visible.
-
- Note that this property is only valid for images read from the
- local filesystem. Images loaded via a network resource (e.g. HTTP)
- are always loaded asynchonously.
-*/
-QDeclarative1BorderImage::QDeclarative1BorderImage(QDeclarativeItem *parent)
- : QDeclarative1ImageBase(*(new QDeclarative1BorderImagePrivate), parent)
-{
-}
-
-QDeclarative1BorderImage::~QDeclarative1BorderImage()
-{
- Q_D(QDeclarative1BorderImage);
- if (d->sciReply)
- d->sciReply->deleteLater();
-}
-/*!
- \qmlproperty enumeration QtQuick1::BorderImage::status
-
- This property describes the status of image loading. It can be one of:
-
- \list
- \o BorderImage.Null - no image has been set
- \o BorderImage.Ready - the image has been loaded
- \o BorderImage.Loading - the image is currently being loaded
- \o BorderImage.Error - an error occurred while loading the image
- \endlist
-
- \sa progress
-*/
-
-/*!
- \qmlproperty real QtQuick1::BorderImage::progress
-
- This property holds the progress of image loading, from 0.0 (nothing loaded)
- to 1.0 (finished).
-
- \sa status
-*/
-
-/*!
- \qmlproperty bool QtQuick1::BorderImage::smooth
-
- Set this property if you want the image to be smoothly filtered when scaled or
- transformed. Smooth filtering gives better visual quality, but is slower. If
- the image is displayed at its natural size, this property has no visual or
- performance effect.
-
- By default, this property is set to false.
-
- \note Generally scaling artifacts are only visible if the image is stationary on
- the screen. A common pattern when animating an image is to disable smooth
- filtering at the beginning of the animation and enable it at the conclusion.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::BorderImage::cache
- \since Quick 1.1
-
- Specifies whether the image should be cached. The default value is
- true. Setting \a cache to false is useful when dealing with large images,
- to make sure that they aren't cached at the expense of small 'ui element' images.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::BorderImage::mirror
- \since Quick 1.1
-
- This property holds whether the image should be horizontally inverted
- (effectively displaying a mirrored image).
-
- The default value is false.
-*/
-
-/*!
- \qmlproperty url QtQuick1::BorderImage::source
-
- This property holds the URL that refers to the source image.
-
- BorderImage can handle any image format supported by Qt, loaded from any
- URL scheme supported by Qt.
-
- This property can also be used to refer to .sci files, which are
- written in a QML-specific, text-based format that specifies the
- borders, the image file and the tile rules for a given border image.
-
- The following .sci file sets the borders to 10 on each side for the
- image \c picture.png:
-
- \code
- border.left: 10
- border.top: 10
- border.bottom: 10
- border.right: 10
- source: "picture.png"
- \endcode
-
- The URL may be absolute, or relative to the URL of the component.
-
- \sa QDeclarativeImageProvider
-*/
-
-/*!
- \qmlproperty QSize QtQuick1::BorderImage::sourceSize
-
- This property holds the actual width and height of the loaded image.
-
- In BorderImage, this property is read-only.
-
- \sa Image::sourceSize
-*/
-void QDeclarative1BorderImage::setSource(const QUrl &url)
-{
- Q_D(QDeclarative1BorderImage);
- //equality is fairly expensive, so we bypass for simple, common case
- if ((d->url.isEmpty() == url.isEmpty()) && url == d->url)
- return;
-
- if (d->sciReply) {
- d->sciReply->deleteLater();
- d->sciReply = 0;
- }
-
- d->url = url;
- d->sciurl = QUrl();
- emit sourceChanged(d->url);
-
- if (isComponentComplete())
- load();
-}
-
-void QDeclarative1BorderImage::load()
-{
- Q_D(QDeclarative1BorderImage);
- if (d->progress != 0.0) {
- d->progress = 0.0;
- emit progressChanged(d->progress);
- }
-
- if (d->url.isEmpty()) {
- d->pix.clear(this);
- d->status = Null;
- setImplicitWidth(0);
- setImplicitHeight(0);
- emit statusChanged(d->status);
- update();
- } else {
- d->status = Loading;
- if (d->url.path().endsWith(QLatin1String("sci"))) {
-#ifndef QT_NO_LOCALFILE_OPTIMIZED_QML
- QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(d->url);
- if (!lf.isEmpty()) {
- QFile file(lf);
- file.open(QIODevice::ReadOnly);
- setGridScaledImage(QDeclarative1GridScaledImage(&file));
- } else
-#endif
- {
- QNetworkRequest req(d->url);
- d->sciReply = qmlEngine(this)->networkAccessManager()->get(req);
-
- static int sciReplyFinished = -1;
- static int thisSciRequestFinished = -1;
- if (sciReplyFinished == -1) {
- sciReplyFinished =
- QNetworkReply::staticMetaObject.indexOfSignal("finished()");
- thisSciRequestFinished =
- QDeclarative1BorderImage::staticMetaObject.indexOfSlot("sciRequestFinished()");
- }
-
- QMetaObject::connect(d->sciReply, sciReplyFinished, this,
- thisSciRequestFinished, Qt::DirectConnection);
- }
- } else {
-
- QDeclarative1Pixmap::Options options;
- if (d->async)
- options |= QDeclarative1Pixmap::Asynchronous;
- if (d->cache)
- options |= QDeclarative1Pixmap::Cache;
- d->pix.clear(this);
- d->pix.load(qmlEngine(this), d->url, options);
-
- if (d->pix.isLoading()) {
- d->pix.connectFinished(this, SLOT(requestFinished()));
- d->pix.connectDownloadProgress(this, SLOT(requestProgress(qint64,qint64)));
- } else {
- QSize impsize = d->pix.implicitSize();
- setImplicitWidth(impsize.width());
- setImplicitHeight(impsize.height());
-
- if (d->pix.isReady()) {
- d->status = Ready;
- } else {
- d->status = Error;
- qmlInfo(this) << d->pix.error();
- }
-
- d->progress = 1.0;
- emit statusChanged(d->status);
- emit progressChanged(d->progress);
- requestFinished();
- update();
- }
- }
- }
-
- emit statusChanged(d->status);
-}
-
-/*!
- \qmlproperty int QtQuick1::BorderImage::border.left
- \qmlproperty int QtQuick1::BorderImage::border.right
- \qmlproperty int QtQuick1::BorderImage::border.top
- \qmlproperty int QtQuick1::BorderImage::border.bottom
-
- The 4 border lines (2 horizontal and 2 vertical) break the image into 9 sections,
- as shown below:
-
- \image declarative-scalegrid.png
-
- Each border line (left, right, top, and bottom) specifies an offset in pixels
- from the respective edge of the source image. By default, each border line has
- a value of 0.
-
- For example, the following definition sets the bottom line 10 pixels up from
- the bottom of the image:
-
- \qml
- BorderImage {
- border.bottom: 10
- // ...
- }
- \endqml
-
- The border lines can also be specified using a
- \l {BorderImage::source}{.sci file}.
-*/
-
-QDeclarative1ScaleGrid *QDeclarative1BorderImage::border()
-{
- Q_D(QDeclarative1BorderImage);
- return d->getScaleGrid();
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::BorderImage::horizontalTileMode
- \qmlproperty enumeration QtQuick1::BorderImage::verticalTileMode
-
- This property describes how to repeat or stretch the middle parts of the border image.
-
- \list
- \o BorderImage.Stretch - Scales the image to fit to the available area.
- \o BorderImage.Repeat - Tile the image until there is no more space. May crop the last image.
- \o BorderImage.Round - Like Repeat, but scales the images down to ensure that the last image is not cropped.
- \endlist
-
- The default tile mode for each property is BorderImage.Stretch.
-*/
-QDeclarative1BorderImage::TileMode QDeclarative1BorderImage::horizontalTileMode() const
-{
- Q_D(const QDeclarative1BorderImage);
- return d->horizontalTileMode;
-}
-
-void QDeclarative1BorderImage::setHorizontalTileMode(TileMode t)
-{
- Q_D(QDeclarative1BorderImage);
- if (t != d->horizontalTileMode) {
- d->horizontalTileMode = t;
- emit horizontalTileModeChanged();
- update();
- }
-}
-
-QDeclarative1BorderImage::TileMode QDeclarative1BorderImage::verticalTileMode() const
-{
- Q_D(const QDeclarative1BorderImage);
- return d->verticalTileMode;
-}
-
-void QDeclarative1BorderImage::setVerticalTileMode(TileMode t)
-{
- Q_D(QDeclarative1BorderImage);
- if (t != d->verticalTileMode) {
- d->verticalTileMode = t;
- emit verticalTileModeChanged();
- update();
- }
-}
-
-void QDeclarative1BorderImage::setGridScaledImage(const QDeclarative1GridScaledImage& sci)
-{
- Q_D(QDeclarative1BorderImage);
- if (!sci.isValid()) {
- d->status = Error;
- emit statusChanged(d->status);
- } else {
- QDeclarative1ScaleGrid *sg = border();
- sg->setTop(sci.gridTop());
- sg->setBottom(sci.gridBottom());
- sg->setLeft(sci.gridLeft());
- sg->setRight(sci.gridRight());
- d->horizontalTileMode = sci.horizontalTileRule();
- d->verticalTileMode = sci.verticalTileRule();
-
- d->sciurl = d->url.resolved(QUrl(sci.pixmapUrl()));
-
- QDeclarative1Pixmap::Options options;
- if (d->async)
- options |= QDeclarative1Pixmap::Asynchronous;
- if (d->cache)
- options |= QDeclarative1Pixmap::Cache;
- d->pix.clear(this);
- d->pix.load(qmlEngine(this), d->sciurl, options);
-
- if (d->pix.isLoading()) {
- static int thisRequestProgress = -1;
- static int thisRequestFinished = -1;
- if (thisRequestProgress == -1) {
- thisRequestProgress =
- QDeclarative1BorderImage::staticMetaObject.indexOfSlot("requestProgress(qint64,qint64)");
- thisRequestFinished =
- QDeclarative1BorderImage::staticMetaObject.indexOfSlot("requestFinished()");
- }
-
- d->pix.connectFinished(this, thisRequestFinished);
- d->pix.connectDownloadProgress(this, thisRequestProgress);
-
- } else {
-
- QSize impsize = d->pix.implicitSize();
- setImplicitWidth(impsize.width());
- setImplicitHeight(impsize.height());
-
- if (d->pix.isReady()) {
- d->status = Ready;
- } else {
- d->status = Error;
- qmlInfo(this) << d->pix.error();
- }
-
- d->progress = 1.0;
- emit statusChanged(d->status);
- emit progressChanged(1.0);
- update();
-
- }
- }
-}
-
-void QDeclarative1BorderImage::requestFinished()
-{
- Q_D(QDeclarative1BorderImage);
-
- QSize impsize = d->pix.implicitSize();
- if (d->pix.isError()) {
- d->status = Error;
- qmlInfo(this) << d->pix.error();
- } else {
- d->status = Ready;
- }
-
- setImplicitWidth(impsize.width());
- setImplicitHeight(impsize.height());
-
- if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height())
- emit sourceSizeChanged();
-
- d->progress = 1.0;
- emit statusChanged(d->status);
- emit progressChanged(1.0);
- update();
-}
-
-#define BORDERIMAGE_MAX_REDIRECT 16
-
-void QDeclarative1BorderImage::sciRequestFinished()
-{
- Q_D(QDeclarative1BorderImage);
-
- d->redirectCount++;
- if (d->redirectCount < BORDERIMAGE_MAX_REDIRECT) {
- QVariant redirect = d->sciReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
- if (redirect.isValid()) {
- QUrl url = d->sciReply->url().resolved(redirect.toUrl());
- setSource(url);
- return;
- }
- }
- d->redirectCount=0;
-
- if (d->sciReply->error() != QNetworkReply::NoError) {
- d->status = Error;
- d->sciReply->deleteLater();
- d->sciReply = 0;
- emit statusChanged(d->status);
- } else {
- QDeclarative1GridScaledImage sci(d->sciReply);
- d->sciReply->deleteLater();
- d->sciReply = 0;
- setGridScaledImage(sci);
- }
-}
-
-void QDeclarative1BorderImage::doUpdate()
-{
- update();
-}
-
-void QDeclarative1BorderImage::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
-{
- Q_D(QDeclarative1BorderImage);
- if (d->pix.isNull() || d->width() <= 0.0 || d->height() <= 0.0)
- return;
-
- bool oldAA = p->testRenderHint(QPainter::Antialiasing);
- bool oldSmooth = p->testRenderHint(QPainter::SmoothPixmapTransform);
- QTransform oldTransform;
- if (d->smooth)
- p->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth);
- if (d->mirror) {
- oldTransform = p->transform();
- QTransform mirror;
- mirror.translate(d->width(), 0).scale(-1, 1.0);
- p->setWorldTransform(mirror * oldTransform);
- }
-
- const QDeclarative1ScaleGrid *border = d->getScaleGrid();
- int left = border->left();
- int right = border->right();
- qreal borderWidth = left + right;
- if (borderWidth > 0.0 && d->width() < borderWidth) {
- qreal diff = borderWidth - d->width() - 1;
- left -= qRound(diff * qreal(left) / borderWidth);
- right -= qRound(diff * qreal(right) / borderWidth);
- }
- int top = border->top();
- int bottom = border->bottom();
- qreal borderHeight = top + bottom;
- if (borderHeight > 0.0 && d->height() < borderHeight) {
- qreal diff = borderHeight - d->height() - 1;
- top -= qRound(diff * qreal(top) / borderHeight);
- bottom -= qRound(diff * qreal(bottom) / borderHeight);
- }
- QMargins margins(left, top, right, bottom);
- QTileRules rules((Qt::TileRule)d->horizontalTileMode, (Qt::TileRule)d->verticalTileMode);
- qDrawBorderPixmap(p, QRect(0, 0, (int)d->width(), (int)d->height()), margins, d->pix, d->pix.rect(), margins, rules);
- if (d->smooth) {
- p->setRenderHint(QPainter::Antialiasing, oldAA);
- p->setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth);
- }
- if (d->mirror)
- p->setWorldTransform(oldTransform);
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeborderimage_p.h b/src/qtquick1/graphicsitems/qdeclarativeborderimage_p.h
deleted file mode 100644
index 4f5cd7e109..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeborderimage_p.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEBORDERIMAGE_H
-#define QDECLARATIVEBORDERIMAGE_H
-
-#include "private/qdeclarativeimagebase_p.h"
-
-#include <QtNetwork/qnetworkreply.h>
-
-QT_BEGIN_HEADER
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1ScaleGrid;
-class QDeclarative1GridScaledImage;
-class QDeclarative1BorderImagePrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1BorderImage : public QDeclarative1ImageBase
-{
- Q_OBJECT
- Q_ENUMS(TileMode)
-
- Q_PROPERTY(QDeclarative1ScaleGrid *border READ border CONSTANT)
- Q_PROPERTY(TileMode horizontalTileMode READ horizontalTileMode WRITE setHorizontalTileMode NOTIFY horizontalTileModeChanged)
- Q_PROPERTY(TileMode verticalTileMode READ verticalTileMode WRITE setVerticalTileMode NOTIFY verticalTileModeChanged)
-
- // read-only for BorderImage
- Q_PROPERTY(QSize sourceSize READ sourceSize NOTIFY sourceSizeChanged)
-
-public:
- QDeclarative1BorderImage(QDeclarativeItem *parent=0);
- ~QDeclarative1BorderImage();
-
- QDeclarative1ScaleGrid *border();
-
- enum TileMode { Stretch = Qt::StretchTile, Repeat = Qt::RepeatTile, Round = Qt::RoundTile };
-
- TileMode horizontalTileMode() const;
- void setHorizontalTileMode(TileMode);
-
- TileMode verticalTileMode() const;
- void setVerticalTileMode(TileMode);
-
- void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
- void setSource(const QUrl &url);
-
-Q_SIGNALS:
- void horizontalTileModeChanged();
- void verticalTileModeChanged();
- void sourceSizeChanged();
-
-protected:
- virtual void load();
-
-private:
- void setGridScaledImage(const QDeclarative1GridScaledImage& sci);
-
-private Q_SLOTS:
- void doUpdate();
- void requestFinished();
- void sciRequestFinished();
-
-private:
- Q_DISABLE_COPY(QDeclarative1BorderImage)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1BorderImage)
-};
-
-QT_END_NAMESPACE
-QML_DECLARE_TYPE(QDeclarative1BorderImage)
-QT_END_HEADER
-
-#endif // QDECLARATIVEBORDERIMAGE_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeborderimage_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeborderimage_p_p.h
deleted file mode 100644
index 4515e62db6..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeborderimage_p_p.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEBORDERIMAGE_P_H
-#define QDECLARATIVEBORDERIMAGE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeimagebase_p_p.h"
-#include "private/qdeclarativescalegrid_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QNetworkReply;
-
-class QDeclarative1BorderImagePrivate : public QDeclarative1ImageBasePrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1BorderImage)
-
-public:
- QDeclarative1BorderImagePrivate()
- : border(0), sciReply(0),
- horizontalTileMode(QDeclarative1BorderImage::Stretch),
- verticalTileMode(QDeclarative1BorderImage::Stretch),
- redirectCount(0)
- {
- }
-
- ~QDeclarative1BorderImagePrivate()
- {
- }
-
-
- QDeclarative1ScaleGrid *getScaleGrid()
- {
- Q_Q(QDeclarative1BorderImage);
- if (!border) {
- border = new QDeclarative1ScaleGrid(q);
- static int borderChangedSignalIdx = -1;
- static int doUpdateSlotIdx = -1;
- if (borderChangedSignalIdx < 0)
- borderChangedSignalIdx = QDeclarative1ScaleGrid::staticMetaObject.indexOfSignal("borderChanged()");
- if (doUpdateSlotIdx < 0)
- doUpdateSlotIdx = QDeclarative1BorderImage::staticMetaObject.indexOfSlot("doUpdate()");
- QMetaObject::connect(border, borderChangedSignalIdx, q, doUpdateSlotIdx);
- }
- return border;
- }
-
- QDeclarative1ScaleGrid *border;
- QUrl sciurl;
- QNetworkReply *sciReply;
- QDeclarative1BorderImage::TileMode horizontalTileMode;
- QDeclarative1BorderImage::TileMode verticalTileMode;
- int redirectCount;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEBORDERIMAGE_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeevents.cpp b/src/qtquick1/graphicsitems/qdeclarativeevents.cpp
deleted file mode 100644
index 5217aed092..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeevents.cpp
+++ /dev/null
@@ -1,243 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeevents_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-
-/*!
- \qmlclass KeyEvent QDeclarative1KeyEvent
- \inqmlmodule QtQuick 1
- \since QtQuick 1.0
- \ingroup qml-event-elements
-
- \brief The KeyEvent object provides information about a key event.
-
- For example, the following changes the Item's state property when the Enter
- key is pressed:
- \qml
-Item {
- focus: true
- Keys.onPressed: { if (event.key == Qt.Key_Enter) state = 'ShowDetails'; }
-}
- \endqml
-*/
-
-/*!
- \qmlproperty int QtQuick1::KeyEvent::key
-
- This property holds the code of the key that was pressed or released.
-
- See \l {Qt::Key}{Qt.Key} for the list of keyboard codes. These codes are
- independent of the underlying window system. Note that this
- function does not distinguish between capital and non-capital
- letters, use the text() function (returning the Unicode text the
- key generated) for this purpose.
-
- A value of either 0 or \l {Qt::Key_unknown}{Qt.Key_Unknown} means that the event is not
- the result of a known key; for example, it may be the result of
- a compose sequence, a keyboard macro, or due to key event
- compression.
-*/
-
-/*!
- \qmlproperty string QtQuick1::KeyEvent::text
-
- This property holds the Unicode text that the key generated.
- The text returned can be an empty string in cases where modifier keys,
- such as Shift, Control, Alt, and Meta, are being pressed or released.
- In such cases \c key will contain a valid value
-*/
-
-/*!
- \qmlproperty bool QtQuick1::KeyEvent::isAutoRepeat
-
- This property holds whether this event comes from an auto-repeating key.
-*/
-
-/*!
- \qmlproperty int QtQuick1::KeyEvent::count
-
- This property holds the number of keys involved in this event. If \l KeyEvent::text
- is not empty, this is simply the length of the string.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::KeyEvent::accepted
-
- Setting \a accepted to true prevents the key event from being
- propagated to the item's parent.
-
- Generally, if the item acts on the key event then it should be accepted
- so that ancestor items do not also respond to the same event.
-*/
-
-/*!
- \qmlproperty int QtQuick1::KeyEvent::modifiers
-
- This property holds the keyboard modifier flags that existed immediately
- before the event occurred.
-
- It contains a bitwise combination of:
- \list
- \o Qt.NoModifier - No modifier key is pressed.
- \o Qt.ShiftModifier - A Shift key on the keyboard is pressed.
- \o Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
- \o Qt.AltModifier - An Alt key on the keyboard is pressed.
- \o Qt.MetaModifier - A Meta key on the keyboard is pressed.
- \o Qt.KeypadModifier - A keypad button is pressed.
- \endlist
-
- For example, to react to a Shift key + Enter key combination:
- \qml
- Item {
- focus: true
- Keys.onPressed: {
- if ((event.key == Qt.Key_Enter) && (event.modifiers & Qt.ShiftModifier))
- doSomething();
- }
- }
- \endqml
-*/
-
-
-/*!
- \qmlclass MouseEvent QDeclarative1MouseEvent
- \inqmlmodule QtQuick 1
- \since QtQuick 1.0
- \ingroup qml-event-elements
-
- \brief The MouseEvent object provides information about a mouse event.
-
- The position of the mouse can be found via the \l x and \l y properties.
- The button that caused the event is available via the \l button property.
-
- \sa MouseArea
-*/
-
-/*!
- \internal
- \class QDeclarative1MouseEvent
-*/
-
-/*!
- \qmlproperty int QtQuick1::MouseEvent::x
- \qmlproperty int QtQuick1::MouseEvent::y
-
- These properties hold the coordinates of the position supplied by the mouse event.
-*/
-
-
-/*!
- \qmlproperty bool QtQuick1::MouseEvent::accepted
-
- Setting \a accepted to true prevents the mouse event from being
- propagated to items below this item.
-
- Generally, if the item acts on the mouse event then it should be accepted
- so that items lower in the stacking order do not also respond to the same event.
-*/
-
-/*!
- \qmlproperty enumeration QtQuick1::MouseEvent::button
-
- This property holds the button that caused the event. It can be one of:
- \list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
- \endlist
-*/
-
-/*!
- \qmlproperty bool QtQuick1::MouseEvent::wasHeld
-
- This property is true if the mouse button has been held pressed longer the
- threshold (800ms).
-*/
-
-/*!
- \qmlproperty int QtQuick1::MouseEvent::buttons
-
- This property holds the mouse buttons pressed when the event was generated.
- For mouse move events, this is all buttons that are pressed down. For mouse
- press and double click events this includes the button that caused the event.
- For mouse release events this excludes the button that caused the event.
-
- It contains a bitwise combination of:
- \list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
- \endlist
-*/
-
-/*!
- \qmlproperty int QtQuick1::MouseEvent::modifiers
-
- This property holds the keyboard modifier flags that existed immediately
- before the event occurred.
-
- It contains a bitwise combination of:
- \list
- \o Qt.NoModifier - No modifier key is pressed.
- \o Qt.ShiftModifier - A Shift key on the keyboard is pressed.
- \o Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
- \o Qt.AltModifier - An Alt key on the keyboard is pressed.
- \o Qt.MetaModifier - A Meta key on the keyboard is pressed.
- \o Qt.KeypadModifier - A keypad button is pressed.
- \endlist
-
- For example, to react to a Shift key + Left mouse button click:
- \qml
- MouseArea {
- onClicked: {
- if ((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ShiftModifier))
- doSomething();
- }
- }
- \endqml
-*/
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeevents_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeevents_p_p.h
deleted file mode 100644
index 754579b766..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeevents_p_p.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEEVENTS_P_H
-#define QDECLARATIVEEVENTS_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QtCore/qobject.h>
-#include <QtGui/qevent.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1KeyEvent : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int key READ key)
- Q_PROPERTY(QString text READ text)
- Q_PROPERTY(int modifiers READ modifiers)
- Q_PROPERTY(bool isAutoRepeat READ isAutoRepeat)
- Q_PROPERTY(int count READ count)
- Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted)
-
-public:
- QDeclarative1KeyEvent(QEvent::Type type, int key, Qt::KeyboardModifiers modifiers, const QString &text=QString(), bool autorep=false, ushort count=1)
- : event(type, key, modifiers, text, autorep, count) { event.setAccepted(false); }
- QDeclarative1KeyEvent(const QKeyEvent &ke)
- : event(ke) { event.setAccepted(false); }
-
- int key() const { return event.key(); }
- QString text() const { return event.text(); }
- int modifiers() const { return event.modifiers(); }
- bool isAutoRepeat() const { return event.isAutoRepeat(); }
- int count() const { return event.count(); }
-
- bool isAccepted() { return event.isAccepted(); }
- void setAccepted(bool accepted) { event.setAccepted(accepted); }
-
-private:
- QKeyEvent event;
-};
-
-class QDeclarative1MouseEvent : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(int x READ x)
- Q_PROPERTY(int y READ y)
- Q_PROPERTY(int button READ button)
- Q_PROPERTY(int buttons READ buttons)
- Q_PROPERTY(int modifiers READ modifiers)
- Q_PROPERTY(bool wasHeld READ wasHeld)
- Q_PROPERTY(bool isClick READ isClick)
- Q_PROPERTY(bool accepted READ isAccepted WRITE setAccepted)
-
-public:
- QDeclarative1MouseEvent(int x, int y, Qt::MouseButton button, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers
- , bool isClick=false, bool wasHeld=false)
- : _x(x), _y(y), _button(button), _buttons(buttons), _modifiers(modifiers)
- , _wasHeld(wasHeld), _isClick(isClick), _accepted(true) {}
-
- int x() const { return _x; }
- int y() const { return _y; }
- int button() const { return _button; }
- int buttons() const { return _buttons; }
- int modifiers() const { return _modifiers; }
- bool wasHeld() const { return _wasHeld; }
- bool isClick() const { return _isClick; }
-
- // only for internal usage
- void setX(int x) { _x = x; }
- void setY(int y) { _y = y; }
-
- bool isAccepted() { return _accepted; }
- void setAccepted(bool accepted) { _accepted = accepted; }
-
-private:
- int _x;
- int _y;
- Qt::MouseButton _button;
- Qt::MouseButtons _buttons;
- Qt::KeyboardModifiers _modifiers;
- bool _wasHeld;
- bool _isClick;
- bool _accepted;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1KeyEvent)
-QML_DECLARE_TYPE(QDeclarative1MouseEvent)
-
-#endif // QDECLARATIVEEVENTS_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeflickable.cpp b/src/qtquick1/graphicsitems/qdeclarativeflickable.cpp
deleted file mode 100644
index 39efc3b213..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeflickable.cpp
+++ /dev/null
@@ -1,1812 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeflickable_p.h"
-#include "QtQuick1/private/qdeclarativeflickable_p_p.h"
-#include <QtDeclarative/qdeclarativeinfo.h>
-#include <QGraphicsSceneMouseEvent>
-#include <QPointer>
-#include <QTimer>
-#include "qplatformdefs.h"
-
-QT_BEGIN_NAMESPACE
-
-
-
-// The maximum number of pixels a flick can overshoot
-#ifndef QML_FLICK_OVERSHOOT
-#define QML_FLICK_OVERSHOOT 200
-#endif
-
-// The number of samples to use in calculating the velocity of a flick
-#ifndef QML_FLICK_SAMPLEBUFFER
-#define QML_FLICK_SAMPLEBUFFER 3
-#endif
-
-// The number of samples to discard when calculating the flick velocity.
-// Touch panels often produce inaccurate results as the finger is lifted.
-#ifndef QML_FLICK_DISCARDSAMPLES
-#define QML_FLICK_DISCARDSAMPLES 1
-#endif
-
-// The default maximum velocity of a flick.
-#ifndef QML_FLICK_DEFAULTMAXVELOCITY
-#define QML_FLICK_DEFAULTMAXVELOCITY 2500
-#endif
-
-// The default deceleration of a flick.
-#ifndef QML_FLICK_DEFAULTDECELERATION
-#define QML_FLICK_DEFAULTDECELERATION 1750
-#endif
-
-// How much faster to decelerate when overshooting
-#ifndef QML_FLICK_OVERSHOOTFRICTION
-#define QML_FLICK_OVERSHOOTFRICTION 8
-#endif
-
-// FlickThreshold determines how far the "mouse" must have moved
-// before we perform a flick.
-static const int FlickThreshold = 20;
-
-// RetainGrabVelocity is the maxmimum instantaneous velocity that
-// will ensure the Flickable retains the grab on consecutive flicks.
-static const int RetainGrabVelocity = 15;
-
-QDeclarative1FlickableVisibleArea::QDeclarative1FlickableVisibleArea(QDeclarative1Flickable *parent)
- : QObject(parent), flickable(parent), m_xPosition(0.), m_widthRatio(0.)
- , m_yPosition(0.), m_heightRatio(0.)
-{
-}
-
-qreal QDeclarative1FlickableVisibleArea::widthRatio() const
-{
- return m_widthRatio;
-}
-
-qreal QDeclarative1FlickableVisibleArea::xPosition() const
-{
- return m_xPosition;
-}
-
-qreal QDeclarative1FlickableVisibleArea::heightRatio() const
-{
- return m_heightRatio;
-}
-
-qreal QDeclarative1FlickableVisibleArea::yPosition() const
-{
- return m_yPosition;
-}
-
-void QDeclarative1FlickableVisibleArea::updateVisible()
-{
- QDeclarative1FlickablePrivate *p = static_cast<QDeclarative1FlickablePrivate *>(QGraphicsItemPrivate::get(flickable));
-
- bool changeX = false;
- bool changeY = false;
- bool changeWidth = false;
- bool changeHeight = false;
-
- // Vertical
- const qreal viewheight = flickable->height();
- const qreal maxyextent = -flickable->maxYExtent() + flickable->minYExtent();
- qreal pagePos = (-p->vData.move.value() + flickable->minYExtent()) / (maxyextent + viewheight);
- qreal pageSize = viewheight / (maxyextent + viewheight);
-
- if (pageSize != m_heightRatio) {
- m_heightRatio = pageSize;
- changeHeight = true;
- }
- if (pagePos != m_yPosition) {
- m_yPosition = pagePos;
- changeY = true;
- }
-
- // Horizontal
- const qreal viewwidth = flickable->width();
- const qreal maxxextent = -flickable->maxXExtent() + flickable->minXExtent();
- pagePos = (-p->hData.move.value() + flickable->minXExtent()) / (maxxextent + viewwidth);
- pageSize = viewwidth / (maxxextent + viewwidth);
-
- if (pageSize != m_widthRatio) {
- m_widthRatio = pageSize;
- changeWidth = true;
- }
- if (pagePos != m_xPosition) {
- m_xPosition = pagePos;
- changeX = true;
- }
-
- if (changeX)
- emit xPositionChanged(m_xPosition);
- if (changeY)
- emit yPositionChanged(m_yPosition);
- if (changeWidth)
- emit widthRatioChanged(m_widthRatio);
- if (changeHeight)
- emit heightRatioChanged(m_heightRatio);
-}
-
-
-QDeclarative1FlickablePrivate::QDeclarative1FlickablePrivate()
- : contentItem(new QDeclarativeItem)
- , hData(this, &QDeclarative1FlickablePrivate::setRoundedViewportX)
- , vData(this, &QDeclarative1FlickablePrivate::setRoundedViewportY)
- , hMoved(false), vMoved(false)
- , stealMouse(false), pressed(false), interactive(true), calcVelocity(false)
- , deceleration(QML_FLICK_DEFAULTDECELERATION)
- , maxVelocity(QML_FLICK_DEFAULTMAXVELOCITY), reportedVelocitySmoothing(100)
- , delayedPressEvent(0), delayedPressTarget(0), pressDelay(0), fixupDuration(400)
- , fixupMode(Normal), vTime(0), visibleArea(0)
- , flickableDirection(QDeclarative1Flickable::AutoFlickDirection)
- , boundsBehavior(QDeclarative1Flickable::DragAndOvershootBounds)
-{
-}
-
-void QDeclarative1FlickablePrivate::init()
-{
- Q_Q(QDeclarative1Flickable);
- QDeclarative_setParent_noEvent(contentItem, q);
- contentItem->setParentItem(q);
- static int timelineUpdatedIdx = -1;
- static int timelineCompletedIdx = -1;
- static int flickableTickedIdx = -1;
- static int flickableMovementEndingIdx = -1;
- if (timelineUpdatedIdx == -1) {
- timelineUpdatedIdx = QDeclarative1TimeLine::staticMetaObject.indexOfSignal("updated()");
- timelineCompletedIdx = QDeclarative1TimeLine::staticMetaObject.indexOfSignal("completed()");
- flickableTickedIdx = QDeclarative1Flickable::staticMetaObject.indexOfSlot("ticked()");
- flickableMovementEndingIdx = QDeclarative1Flickable::staticMetaObject.indexOfSlot("movementEnding()");
- }
- QMetaObject::connect(&timeline, timelineUpdatedIdx,
- q, flickableTickedIdx, Qt::DirectConnection);
- QMetaObject::connect(&timeline, timelineCompletedIdx,
- q, flickableMovementEndingIdx, Qt::DirectConnection);
- q->setAcceptedMouseButtons(Qt::LeftButton);
- q->setFiltersChildEvents(true);
- QDeclarativeItemPrivate *viewportPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(contentItem));
- viewportPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- lastPosTime.invalidate();
-}
-
-/*
- Returns the amount to overshoot by given a view size.
- Will be up to the lesser of 1/3 of the view size or QML_FLICK_OVERSHOOT
-*/
-qreal QDeclarative1FlickablePrivate::overShootDistance(qreal size)
-{
- if (maxVelocity <= 0)
- return 0.0;
-
- return qMin(qreal(QML_FLICK_OVERSHOOT), size/3);
-}
-
-void QDeclarative1FlickablePrivate::AxisData::addVelocitySample(qreal v, qreal maxVelocity)
-{
- if (v > maxVelocity)
- v = maxVelocity;
- else if (v < -maxVelocity)
- v = -maxVelocity;
- velocityBuffer.append(v);
- if (velocityBuffer.count() > QML_FLICK_SAMPLEBUFFER)
- velocityBuffer.remove(0);
-}
-
-void QDeclarative1FlickablePrivate::AxisData::updateVelocity()
-{
- if (velocityBuffer.count() > QML_FLICK_DISCARDSAMPLES) {
- velocity = 0;
- int count = velocityBuffer.count()-QML_FLICK_DISCARDSAMPLES;
- for (int i = 0; i < count; ++i) {
- qreal v = velocityBuffer.at(i);
- velocity += v;
- }
- velocity /= count;
- }
-}
-
-void QDeclarative1FlickablePrivate::itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeom, const QRectF &oldGeom)
-{
- Q_Q(QDeclarative1Flickable);
- if (item == contentItem) {
- if (newGeom.x() != oldGeom.x())
- emit q->contentXChanged();
- if (newGeom.y() != oldGeom.y())
- emit q->contentYChanged();
- }
-}
-
-void QDeclarative1FlickablePrivate::flickX(qreal velocity)
-{
- Q_Q(QDeclarative1Flickable);
- flick(hData, q->minXExtent(), q->maxXExtent(), q->width(), fixupX_callback, velocity);
-}
-
-void QDeclarative1FlickablePrivate::flickY(qreal velocity)
-{
- Q_Q(QDeclarative1Flickable);
- flick(vData, q->minYExtent(), q->maxYExtent(), q->height(), fixupY_callback, velocity);
-}
-
-void QDeclarative1FlickablePrivate::flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal,
- QDeclarative1TimeLineCallback::Callback fixupCallback, qreal velocity)
-{
- Q_Q(QDeclarative1Flickable);
- qreal maxDistance = -1;
- data.fixingUp = false;
- // -ve velocity means list is moving up
- if (velocity > 0) {
- maxDistance = qAbs(minExtent - data.move.value());
- data.flickTarget = minExtent;
- } else {
- maxDistance = qAbs(maxExtent - data.move.value());
- data.flickTarget = maxExtent;
- }
- if (maxDistance > 0) {
- qreal v = velocity;
- if (maxVelocity != -1 && maxVelocity < qAbs(v)) {
- if (v < 0)
- v = -maxVelocity;
- else
- v = maxVelocity;
- }
- timeline.reset(data.move);
- if (boundsBehavior == QDeclarative1Flickable::DragAndOvershootBounds)
- timeline.accel(data.move, v, deceleration);
- else
- timeline.accel(data.move, v, deceleration, maxDistance);
- timeline.callback(QDeclarative1TimeLineCallback(&data.move, fixupCallback, this));
- if (!hData.flicking && q->xflick()) {
- hData.flicking = true;
- emit q->flickingChanged();
- emit q->flickingHorizontallyChanged();
- if (!vData.flicking)
- emit q->flickStarted();
- }
- if (!vData.flicking && q->yflick()) {
- vData.flicking = true;
- emit q->flickingChanged();
- emit q->flickingVerticallyChanged();
- if (!hData.flicking)
- emit q->flickStarted();
- }
- } else {
- timeline.reset(data.move);
- fixup(data, minExtent, maxExtent);
- }
-}
-
-void QDeclarative1FlickablePrivate::fixupY_callback(void *data)
-{
- ((QDeclarative1FlickablePrivate *)data)->fixupY();
-}
-
-void QDeclarative1FlickablePrivate::fixupX_callback(void *data)
-{
- ((QDeclarative1FlickablePrivate *)data)->fixupX();
-}
-
-void QDeclarative1FlickablePrivate::fixupX()
-{
- Q_Q(QDeclarative1Flickable);
- fixup(hData, q->minXExtent(), q->maxXExtent());
-}
-
-void QDeclarative1FlickablePrivate::fixupY()
-{
- Q_Q(QDeclarative1Flickable);
- fixup(vData, q->minYExtent(), q->maxYExtent());
-}
-
-void QDeclarative1FlickablePrivate::fixup(AxisData &data, qreal minExtent, qreal maxExtent)
-{
- if (data.move.value() > minExtent || maxExtent > minExtent) {
- timeline.reset(data.move);
- if (data.move.value() != minExtent) {
- switch (fixupMode) {
- case Immediate:
- timeline.set(data.move, minExtent);
- break;
- case ExtentChanged:
- // The target has changed. Don't start from the beginning; just complete the
- // second half of the animation using the new extent.
- timeline.move(data.move, minExtent, QEasingCurve(QEasingCurve::OutExpo), 3*fixupDuration/4);
- data.fixingUp = true;
- break;
- default: {
- qreal dist = minExtent - data.move;
- timeline.move(data.move, minExtent - dist/2, QEasingCurve(QEasingCurve::InQuad), fixupDuration/4);
- timeline.move(data.move, minExtent, QEasingCurve(QEasingCurve::OutExpo), 3*fixupDuration/4);
- data.fixingUp = true;
- }
- }
- }
- } else if (data.move.value() < maxExtent) {
- timeline.reset(data.move);
- switch (fixupMode) {
- case Immediate:
- timeline.set(data.move, maxExtent);
- break;
- case ExtentChanged:
- // The target has changed. Don't start from the beginning; just complete the
- // second half of the animation using the new extent.
- timeline.move(data.move, maxExtent, QEasingCurve(QEasingCurve::OutExpo), 3*fixupDuration/4);
- data.fixingUp = true;
- break;
- default: {
- qreal dist = maxExtent - data.move;
- timeline.move(data.move, maxExtent - dist/2, QEasingCurve(QEasingCurve::InQuad), fixupDuration/4);
- timeline.move(data.move, maxExtent, QEasingCurve(QEasingCurve::OutExpo), 3*fixupDuration/4);
- data.fixingUp = true;
- }
- }
- }
- data.inOvershoot = false;
- fixupMode = Normal;
- vTime = timeline.time();
-}
-
-void QDeclarative1FlickablePrivate::updateBeginningEnd()
-{
- Q_Q(QDeclarative1Flickable);
- bool atBoundaryChange = false;
-
- // Vertical
- const int maxyextent = int(-q->maxYExtent());
- const qreal ypos = -vData.move.value();
- bool atBeginning = (ypos <= -q->minYExtent());
- bool atEnd = (maxyextent <= ypos);
-
- if (atBeginning != vData.atBeginning) {
- vData.atBeginning = atBeginning;
- atBoundaryChange = true;
- }
- if (atEnd != vData.atEnd) {
- vData.atEnd = atEnd;
- atBoundaryChange = true;
- }
-
- // Horizontal
- const int maxxextent = int(-q->maxXExtent());
- const qreal xpos = -hData.move.value();
- atBeginning = (xpos <= -q->minXExtent());
- atEnd = (maxxextent <= xpos);
-
- if (atBeginning != hData.atBeginning) {
- hData.atBeginning = atBeginning;
- atBoundaryChange = true;
- }
- if (atEnd != hData.atEnd) {
- hData.atEnd = atEnd;
- atBoundaryChange = true;
- }
-
- if (atBoundaryChange)
- emit q->isAtBoundaryChanged();
-
- if (visibleArea)
- visibleArea->updateVisible();
-}
-
-/*!
- \qmlclass Flickable QDeclarative1Flickable
- \inqmlmodule QtQuick 1
- \since QtQuick 1.0
- \ingroup qml-basic-interaction-elements
-
- \brief The Flickable item provides a surface that can be "flicked".
- \inherits Item
-
- The Flickable item places its children on a surface that can be dragged
- and flicked, causing the view onto the child items to scroll. This
- behavior forms the basis of Items that are designed to show large numbers
- of child items, such as \l ListView and \l GridView.
-
- In traditional user interfaces, views can be scrolled using standard
- controls, such as scroll bars and arrow buttons. In some situations, it
- is also possible to drag the view directly by pressing and holding a
- mouse button while moving the cursor. In touch-based user interfaces,
- this dragging action is often complemented with a flicking action, where
- scrolling continues after the user has stopped touching the view.
-
- Flickable does not automatically clip its contents. If it is not used as
- a full-screen item, you should consider setting the \l{Item::}{clip} property
- to true.
-
- \section1 Example Usage
-
- \div {class="float-right"}
- \inlineimage flickable.gif
- \enddiv
-
- The following example shows a small view onto a large image in which the
- user can drag or flick the image in order to view different parts of it.
-
- \snippet doc/src/snippets/qtquick1/flickable.qml document
-
- \clearfloat
-
- Items declared as children of a Flickable are automatically parented to the
- Flickable's \l contentItem. This should be taken into account when
- operating on the children of the Flickable; it is usually the children of
- \c contentItem that are relevant. For example, the bound of Items added
- to the Flickable will be available by \c contentItem.childrenRect
-
- \section1 Limitations
-
- \note Due to an implementation detail, items placed inside a Flickable cannot anchor to it by
- \c id. Use \c parent instead.
-*/
-
-/*!
- \qmlsignal QtQuick1::Flickable::onMovementStarted()
-
- This handler is called when the view begins moving due to user
- interaction.
-*/
-
-/*!
- \qmlsignal QtQuick1::Flickable::onMovementEnded()
-
- This handler is called when the view stops moving due to user
- interaction. If a flick was generated, this handler will
- be triggered once the flick stops. If a flick was not
- generated, the handler will be triggered when the
- user stops dragging - i.e. a mouse or touch release.
-*/
-
-/*!
- \qmlsignal QtQuick1::Flickable::onFlickStarted()
-
- This handler is called when the view is flicked. A flick
- starts from the point that the mouse or touch is released,
- while still in motion.
-*/
-
-/*!
- \qmlsignal QtQuick1::Flickable::onFlickEnded()
-
- This handler is called when the view stops moving due to a flick.
-*/
-
-/*!
- \qmlproperty real QtQuick1::Flickable::visibleArea.xPosition
- \qmlproperty real QtQuick1::Flickable::visibleArea.widthRatio
- \qmlproperty real QtQuick1::Flickable::visibleArea.yPosition
- \qmlproperty real QtQuick1::Flickable::visibleArea.heightRatio
-
- These properties describe the position and size of the currently viewed area.
- The size is defined as the percentage of the full view currently visible,
- scaled to 0.0 - 1.0. The page position is usually in the range 0.0 (beginning) to
- 1.0 minus size ratio (end), i.e. \c yPosition is in the range 0.0 to 1.0-\c heightRatio.
- However, it is possible for the contents to be dragged outside of the normal
- range, resulting in the page positions also being outside the normal range.
-
- These properties are typically used to draw a scrollbar. For example:
-
- \snippet doc/src/snippets/qtquick1/flickableScrollbar.qml 0
- \dots 8
- \snippet doc/src/snippets/qtquick1/flickableScrollbar.qml 1
-
- \sa {declarative/ui-components/scrollbar}{scrollbar example}
-*/
-
-QDeclarative1Flickable::QDeclarative1Flickable(QDeclarativeItem *parent)
- : QDeclarativeItem(*(new QDeclarative1FlickablePrivate), parent)
-{
- Q_D(QDeclarative1Flickable);
- d->init();
-}
-
-QDeclarative1Flickable::QDeclarative1Flickable(QDeclarative1FlickablePrivate &dd, QDeclarativeItem *parent)
- : QDeclarativeItem(dd, parent)
-{
- Q_D(QDeclarative1Flickable);
- d->init();
-}
-
-QDeclarative1Flickable::~QDeclarative1Flickable()
-{
-}
-
-/*!
- \qmlproperty real QtQuick1::Flickable::contentX
- \qmlproperty real QtQuick1::Flickable::contentY
-
- These properties hold the surface coordinate currently at the top-left
- corner of the Flickable. For example, if you flick an image up 100 pixels,
- \c contentY will be 100.
-*/
-qreal QDeclarative1Flickable::contentX() const
-{
- Q_D(const QDeclarative1Flickable);
- return -d->contentItem->x();
-}
-
-void QDeclarative1Flickable::setContentX(qreal pos)
-{
- Q_D(QDeclarative1Flickable);
- d->timeline.reset(d->hData.move);
- d->vTime = d->timeline.time();
- movementXEnding();
- if (-pos != d->hData.move.value()) {
- d->hData.move.setValue(-pos);
- viewportMoved();
- }
-}
-
-qreal QDeclarative1Flickable::contentY() const
-{
- Q_D(const QDeclarative1Flickable);
- return -d->contentItem->y();
-}
-
-void QDeclarative1Flickable::setContentY(qreal pos)
-{
- Q_D(QDeclarative1Flickable);
- d->timeline.reset(d->vData.move);
- d->vTime = d->timeline.time();
- movementYEnding();
- if (-pos != d->vData.move.value()) {
- d->vData.move.setValue(-pos);
- viewportMoved();
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::Flickable::interactive
-
- This property describes whether the user can interact with the Flickable.
- A user cannot drag or flick a Flickable that is not interactive.
-
- By default, this property is true.
-
- This property is useful for temporarily disabling flicking. This allows
- special interaction with Flickable's children; for example, you might want
- to freeze a flickable map while scrolling through a pop-up dialog that
- is a child of the Flickable.
-*/
-bool QDeclarative1Flickable::isInteractive() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->interactive;
-}
-
-void QDeclarative1Flickable::setInteractive(bool interactive)
-{
- Q_D(QDeclarative1Flickable);
- if (interactive != d->interactive) {
- d->interactive = interactive;
- if (!interactive && (d->hData.flicking || d->vData.flicking)) {
- d->timeline.clear();
- d->vTime = d->timeline.time();
- d->hData.flicking = false;
- d->vData.flicking = false;
- emit flickingChanged();
- emit flickingHorizontallyChanged();
- emit flickingVerticallyChanged();
- emit flickEnded();
- }
- emit interactiveChanged();
- }
-}
-
-/*!
- \qmlproperty real QtQuick1::Flickable::horizontalVelocity
- \qmlproperty real QtQuick1::Flickable::verticalVelocity
-
- The instantaneous velocity of movement along the x and y axes, in pixels/sec.
-
- The reported velocity is smoothed to avoid erratic output.
-*/
-qreal QDeclarative1Flickable::horizontalVelocity() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->hData.smoothVelocity.value();
-}
-
-qreal QDeclarative1Flickable::verticalVelocity() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->vData.smoothVelocity.value();
-}
-
-/*!
- \qmlproperty bool QtQuick1::Flickable::atXBeginning
- \qmlproperty bool QtQuick1::Flickable::atXEnd
- \qmlproperty bool QtQuick1::Flickable::atYBeginning
- \qmlproperty bool QtQuick1::Flickable::atYEnd
-
- These properties are true if the flickable view is positioned at the beginning,
- or end respecively.
-*/
-bool QDeclarative1Flickable::isAtXEnd() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->hData.atEnd;
-}
-
-bool QDeclarative1Flickable::isAtXBeginning() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->hData.atBeginning;
-}
-
-bool QDeclarative1Flickable::isAtYEnd() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->vData.atEnd;
-}
-
-bool QDeclarative1Flickable::isAtYBeginning() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->vData.atBeginning;
-}
-
-void QDeclarative1Flickable::ticked()
-{
- viewportMoved();
-}
-
-/*!
- \qmlproperty Item QtQuick1::Flickable::contentItem
-
- The internal item that contains the Items to be moved in the Flickable.
-
- Items declared as children of a Flickable are automatically parented to the Flickable's contentItem.
-
- Items created dynamically need to be explicitly parented to the \e contentItem:
- \code
- Flickable {
- id: myFlickable
- function addItem(file) {
- var component = Qt.createComponent(file)
- component.createObject(myFlickable.contentItem);
- }
- }
- \endcode
-*/
-QDeclarativeItem *QDeclarative1Flickable::contentItem()
-{
- Q_D(QDeclarative1Flickable);
- return d->contentItem;
-}
-
-QDeclarative1FlickableVisibleArea *QDeclarative1Flickable::visibleArea()
-{
- Q_D(QDeclarative1Flickable);
- if (!d->visibleArea)
- d->visibleArea = new QDeclarative1FlickableVisibleArea(this);
- return d->visibleArea;
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Flickable::flickableDirection
-
- This property determines which directions the view can be flicked.
-
- \list
- \o Flickable.AutoFlickDirection (default) - allows flicking vertically if the
- \e contentHeight is not equal to the \e height of the Flickable.
- Allows flicking horizontally if the \e contentWidth is not equal
- to the \e width of the Flickable.
- \o Flickable.HorizontalFlick - allows flicking horizontally.
- \o Flickable.VerticalFlick - allows flicking vertically.
- \o Flickable.HorizontalAndVerticalFlick - allows flicking in both directions.
- \endlist
-*/
-QDeclarative1Flickable::FlickableDirection QDeclarative1Flickable::flickableDirection() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->flickableDirection;
-}
-
-void QDeclarative1Flickable::setFlickableDirection(FlickableDirection direction)
-{
- Q_D(QDeclarative1Flickable);
- if (direction != d->flickableDirection) {
- d->flickableDirection = direction;
- emit flickableDirectionChanged();
- }
-}
-
-void QDeclarative1FlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_Q(QDeclarative1Flickable);
- if (interactive && timeline.isActive()
- && (qAbs(hData.smoothVelocity.value()) > RetainGrabVelocity || qAbs(vData.smoothVelocity.value()) > RetainGrabVelocity))
- stealMouse = true; // If we've been flicked then steal the click.
- else
- stealMouse = false;
- q->setKeepMouseGrab(stealMouse);
- pressed = true;
- timeline.clear();
- hData.reset();
- vData.reset();
- hData.dragMinBound = q->minXExtent();
- vData.dragMinBound = q->minYExtent();
- hData.dragMaxBound = q->maxXExtent();
- vData.dragMaxBound = q->maxYExtent();
- fixupMode = Normal;
- lastPos = QPoint();
- QDeclarativeItemPrivate::start(lastPosTime);
- pressPos = event->pos();
- hData.pressPos = hData.move.value();
- vData.pressPos = vData.move.value();
- hData.flicking = false;
- vData.flicking = false;
- QDeclarativeItemPrivate::start(pressTime);
- QDeclarativeItemPrivate::start(velocityTime);
-}
-
-void QDeclarative1FlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_Q(QDeclarative1Flickable);
- if (!interactive || !lastPosTime.isValid())
- return;
- bool rejectY = false;
- bool rejectX = false;
-
- bool stealY = stealMouse;
- bool stealX = stealMouse;
-
- if (q->yflick()) {
- int dy = int(event->pos().y() - pressPos.y());
- if (qAbs(dy) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) {
- if (!vMoved)
- vData.dragStartOffset = dy;
- qreal newY = dy + vData.pressPos - vData.dragStartOffset;
- const qreal minY = vData.dragMinBound;
- const qreal maxY = vData.dragMaxBound;
- if (newY > minY)
- newY = minY + (newY - minY) / 2;
- if (newY < maxY && maxY - minY <= 0)
- newY = maxY + (newY - maxY) / 2;
- if (boundsBehavior == QDeclarative1Flickable::StopAtBounds && (newY > minY || newY < maxY)) {
- rejectY = true;
- if (newY < maxY) {
- newY = maxY;
- rejectY = false;
- }
- if (newY > minY) {
- newY = minY;
- rejectY = false;
- }
- }
- if (!rejectY && stealMouse) {
- vData.move.setValue(qRound(newY));
- vMoved = true;
- }
- if (qAbs(dy) > QApplication::startDragDistance())
- stealY = true;
- }
- }
-
- if (q->xflick()) {
- int dx = int(event->pos().x() - pressPos.x());
- if (qAbs(dx) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) {
- if (!hMoved)
- hData.dragStartOffset = dx;
- qreal newX = dx + hData.pressPos - hData.dragStartOffset;
- const qreal minX = hData.dragMinBound;
- const qreal maxX = hData.dragMaxBound;
- if (newX > minX)
- newX = minX + (newX - minX) / 2;
- if (newX < maxX && maxX - minX <= 0)
- newX = maxX + (newX - maxX) / 2;
- if (boundsBehavior == QDeclarative1Flickable::StopAtBounds && (newX > minX || newX < maxX)) {
- rejectX = true;
- if (newX < maxX) {
- newX = maxX;
- rejectX = false;
- }
- if (newX > minX) {
- newX = minX;
- rejectX = false;
- }
- }
- if (!rejectX && stealMouse) {
- hData.move.setValue(qRound(newX));
- hMoved = true;
- }
-
- if (qAbs(dx) > QApplication::startDragDistance())
- stealX = true;
- }
- }
-
- stealMouse = stealX || stealY;
- if (stealMouse)
- q->setKeepMouseGrab(true);
-
- if (rejectY) {
- vData.velocityBuffer.clear();
- vData.velocity = 0;
- }
- if (rejectX) {
- hData.velocityBuffer.clear();
- hData.velocity = 0;
- }
-
- if (hMoved || vMoved) {
- q->movementStarting();
- q->viewportMoved();
- }
-
- if (!lastPos.isNull()) {
- qreal elapsed = qreal(QDeclarativeItemPrivate::elapsed(lastPosTime)) / 1000.;
- if (elapsed <= 0)
- return;
- QDeclarativeItemPrivate::restart(lastPosTime);
- qreal dy = event->pos().y()-lastPos.y();
- if (q->yflick() && !rejectY)
- vData.addVelocitySample(dy/elapsed, maxVelocity);
- qreal dx = event->pos().x()-lastPos.x();
- if (q->xflick() && !rejectX)
- hData.addVelocitySample(dx/elapsed, maxVelocity);
- }
-
- lastPos = event->pos();
-}
-
-void QDeclarative1FlickablePrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_Q(QDeclarative1Flickable);
- stealMouse = false;
- q->setKeepMouseGrab(false);
- pressed = false;
- if (!lastPosTime.isValid())
- return;
-
- // if we drag then pause before release we should not cause a flick.
- qint64 elapsed = QDeclarativeItemPrivate::elapsed(lastPosTime);
-
- vData.updateVelocity();
- hData.updateVelocity();
-
- vTime = timeline.time();
-
- qreal velocity = elapsed < 100 ? vData.velocity : 0;
- if (vData.atBeginning || vData.atEnd)
- velocity /= 2;
- if (q->yflick() && qAbs(velocity) > MinimumFlickVelocity && qAbs(event->pos().y() - pressPos.y()) > FlickThreshold) {
- velocityTimeline.reset(vData.smoothVelocity);
- vData.smoothVelocity.setValue(-velocity);
- flickY(velocity);
- } else {
- fixupY();
- }
-
- velocity = elapsed < 100 ? hData.velocity : 0;
- if (hData.atBeginning || hData.atEnd)
- velocity /= 2;
- if (q->xflick() && qAbs(velocity) > MinimumFlickVelocity && qAbs(event->pos().x() - pressPos.x()) > FlickThreshold) {
- velocityTimeline.reset(hData.smoothVelocity);
- hData.smoothVelocity.setValue(-velocity);
- flickX(velocity);
- } else {
- fixupX();
- }
-
- if (!timeline.isActive())
- q->movementEnding();
-}
-
-void QDeclarative1Flickable::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1Flickable);
- if (d->interactive) {
- if (!d->pressed)
- d->handleMousePressEvent(event);
- event->accept();
- } else {
- QDeclarativeItem::mousePressEvent(event);
- }
-}
-
-void QDeclarative1Flickable::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1Flickable);
- if (d->interactive) {
- d->handleMouseMoveEvent(event);
- event->accept();
- } else {
- QDeclarativeItem::mouseMoveEvent(event);
- }
-}
-
-void QDeclarative1Flickable::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1Flickable);
- if (d->interactive) {
- d->clearDelayedPress();
- d->handleMouseReleaseEvent(event);
- event->accept();
- ungrabMouse();
- } else {
- QDeclarativeItem::mouseReleaseEvent(event);
- }
-}
-
-void QDeclarative1Flickable::wheelEvent(QGraphicsSceneWheelEvent *event)
-{
- Q_D(QDeclarative1Flickable);
- if (!d->interactive) {
- QDeclarativeItem::wheelEvent(event);
- } else if (yflick() && event->orientation() == Qt::Vertical) {
- bool valid = false;
- if (event->delta() > 0 && contentY() > -minYExtent()) {
- d->vData.velocity = qMax(event->delta()*2 - d->vData.smoothVelocity.value(), qreal(d->maxVelocity/4));
- valid = true;
- } else if (event->delta() < 0 && contentY() < -maxYExtent()) {
- d->vData.velocity = qMin(event->delta()*2 - d->vData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
- valid = true;
- }
- if (valid) {
- d->vData.flicking = false;
- d->flickY(d->vData.velocity);
- if (d->vData.flicking) {
- d->vMoved = true;
- movementStarting();
- }
- event->accept();
- }
- } else if (xflick() && event->orientation() == Qt::Horizontal) {
- bool valid = false;
- if (event->delta() > 0 && contentX() > -minXExtent()) {
- d->hData.velocity = qMax(event->delta()*2 - d->hData.smoothVelocity.value(), qreal(d->maxVelocity/4));
- valid = true;
- } else if (event->delta() < 0 && contentX() < -maxXExtent()) {
- d->hData.velocity = qMin(event->delta()*2 - d->hData.smoothVelocity.value(), qreal(-d->maxVelocity/4));
- valid = true;
- }
- if (valid) {
- d->hData.flicking = false;
- d->flickX(d->hData.velocity);
- if (d->hData.flicking) {
- d->hMoved = true;
- movementStarting();
- }
- event->accept();
- }
- } else {
- QDeclarativeItem::wheelEvent(event);
- }
-}
-
-bool QDeclarative1FlickablePrivate::isOutermostPressDelay() const
-{
- Q_Q(const QDeclarative1Flickable);
- QDeclarativeItem *item = q->parentItem();
- while (item) {
- QDeclarative1Flickable *flick = qobject_cast<QDeclarative1Flickable*>(item);
- if (flick && flick->pressDelay() > 0 && flick->isInteractive())
- return false;
- item = item->parentItem();
- }
-
- return true;
-}
-
-void QDeclarative1FlickablePrivate::captureDelayedPress(QGraphicsSceneMouseEvent *event)
-{
- Q_Q(QDeclarative1Flickable);
- if (!q->scene() || pressDelay <= 0)
- return;
- if (!isOutermostPressDelay())
- return;
- delayedPressTarget = q->scene()->mouseGrabberItem();
- delayedPressEvent = new QGraphicsSceneMouseEvent(event->type());
- delayedPressEvent->setAccepted(false);
- for (int i = 0x1; i <= 0x10; i <<= 1) {
- if (event->buttons() & i) {
- Qt::MouseButton button = Qt::MouseButton(i);
- delayedPressEvent->setButtonDownPos(button, event->buttonDownPos(button));
- delayedPressEvent->setButtonDownScenePos(button, event->buttonDownScenePos(button));
- delayedPressEvent->setButtonDownScreenPos(button, event->buttonDownScreenPos(button));
- }
- }
- delayedPressEvent->setButtons(event->buttons());
- delayedPressEvent->setButton(event->button());
- delayedPressEvent->setPos(event->pos());
- delayedPressEvent->setScenePos(event->scenePos());
- delayedPressEvent->setScreenPos(event->screenPos());
- delayedPressEvent->setLastPos(event->lastPos());
- delayedPressEvent->setLastScenePos(event->lastScenePos());
- delayedPressEvent->setLastScreenPos(event->lastScreenPos());
- delayedPressEvent->setModifiers(event->modifiers());
- delayedPressTimer.start(pressDelay, q);
-}
-
-void QDeclarative1FlickablePrivate::clearDelayedPress()
-{
- if (delayedPressEvent) {
- delayedPressTimer.stop();
- delete delayedPressEvent;
- delayedPressEvent = 0;
- }
-}
-
-void QDeclarative1FlickablePrivate::setRoundedViewportX(qreal x)
-{
- contentItem->setX(qRound(x));
-}
-
-void QDeclarative1FlickablePrivate::setRoundedViewportY(qreal y)
-{
- contentItem->setY(qRound(y));
-}
-
-void QDeclarative1Flickable::timerEvent(QTimerEvent *event)
-{
- Q_D(QDeclarative1Flickable);
- if (event->timerId() == d->delayedPressTimer.timerId()) {
- d->delayedPressTimer.stop();
- if (d->delayedPressEvent) {
- QDeclarativeItem *grabber = scene() ? qobject_cast<QDeclarativeItem*>(scene()->mouseGrabberItem()) : 0;
- if (!grabber || grabber != this) {
- // We replay the mouse press but the grabber we had might not be interessted by the event (e.g. overlay)
- // so we reset the grabber
- if (scene()->mouseGrabberItem() == d->delayedPressTarget)
- d->delayedPressTarget->ungrabMouse();
- //Use the event handler that will take care of finding the proper item to propagate the event
- QApplication::postEvent(scene(), d->delayedPressEvent);
- } else {
- delete d->delayedPressEvent;
- }
- d->delayedPressEvent = 0;
- }
- }
-}
-
-qreal QDeclarative1Flickable::minYExtent() const
-{
- return 0.0;
-}
-
-qreal QDeclarative1Flickable::minXExtent() const
-{
- return 0.0;
-}
-
-/* returns -ve */
-qreal QDeclarative1Flickable::maxXExtent() const
-{
- return width() - vWidth();
-}
-/* returns -ve */
-qreal QDeclarative1Flickable::maxYExtent() const
-{
- return height() - vHeight();
-}
-
-void QDeclarative1Flickable::viewportMoved()
-{
- Q_D(QDeclarative1Flickable);
-
- qreal prevX = d->lastFlickablePosition.x();
- qreal prevY = d->lastFlickablePosition.y();
- if (d->pressed || d->calcVelocity) {
- int elapsed = QDeclarativeItemPrivate::restart(d->velocityTime);
- if (elapsed > 0) {
- qreal horizontalVelocity = (prevX - d->hData.move.value()) * 1000 / elapsed;
- if (qAbs(horizontalVelocity) > 0) {
- d->velocityTimeline.reset(d->hData.smoothVelocity);
- d->velocityTimeline.move(d->hData.smoothVelocity, horizontalVelocity, d->reportedVelocitySmoothing);
- d->velocityTimeline.move(d->hData.smoothVelocity, 0, d->reportedVelocitySmoothing);
- }
- qreal verticalVelocity = (prevY - d->vData.move.value()) * 1000 / elapsed;
- if (qAbs(verticalVelocity) > 0) {
- d->velocityTimeline.reset(d->vData.smoothVelocity);
- d->velocityTimeline.move(d->vData.smoothVelocity, verticalVelocity, d->reportedVelocitySmoothing);
- d->velocityTimeline.move(d->vData.smoothVelocity, 0, d->reportedVelocitySmoothing);
- }
- }
- } else {
- if (d->timeline.time() > d->vTime) {
- d->velocityTimeline.clear();
- qreal horizontalVelocity = (prevX - d->hData.move.value()) * 1000 / (d->timeline.time() - d->vTime);
- qreal verticalVelocity = (prevY - d->vData.move.value()) * 1000 / (d->timeline.time() - d->vTime);
- d->hData.smoothVelocity.setValue(horizontalVelocity);
- d->vData.smoothVelocity.setValue(verticalVelocity);
- }
- }
-
- if (!d->vData.inOvershoot && !d->vData.fixingUp && d->vData.flicking
- && (d->vData.move.value() > minYExtent() || d->vData.move.value() < maxYExtent())
- && qAbs(d->vData.smoothVelocity.value()) > 100) {
- // Increase deceleration if we've passed a bound
- d->vData.inOvershoot = true;
- qreal maxDistance = d->overShootDistance(height());
- d->timeline.reset(d->vData.move);
- d->timeline.accel(d->vData.move, -d->vData.smoothVelocity.value(), d->deceleration*QML_FLICK_OVERSHOOTFRICTION, maxDistance);
- d->timeline.callback(QDeclarative1TimeLineCallback(&d->vData.move, d->fixupY_callback, d));
- }
- if (!d->hData.inOvershoot && !d->hData.fixingUp && d->hData.flicking
- && (d->hData.move.value() > minXExtent() || d->hData.move.value() < maxXExtent())
- && qAbs(d->hData.smoothVelocity.value()) > 100) {
- // Increase deceleration if we've passed a bound
- d->hData.inOvershoot = true;
- qreal maxDistance = d->overShootDistance(width());
- d->timeline.reset(d->hData.move);
- d->timeline.accel(d->hData.move, -d->hData.smoothVelocity.value(), d->deceleration*QML_FLICK_OVERSHOOTFRICTION, maxDistance);
- d->timeline.callback(QDeclarative1TimeLineCallback(&d->hData.move, d->fixupX_callback, d));
- }
-
- d->lastFlickablePosition = QPointF(d->hData.move.value(), d->vData.move.value());
-
- d->vTime = d->timeline.time();
- d->updateBeginningEnd();
-}
-
-void QDeclarative1Flickable::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- Q_D(QDeclarative1Flickable);
- QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-
- bool changed = false;
- if (newGeometry.width() != oldGeometry.width()) {
- if (xflick())
- changed = true;
- if (d->hData.viewSize < 0) {
- d->contentItem->setWidth(width());
- emit contentWidthChanged();
- }
- // Make sure that we're entirely in view.
- if (!d->pressed && !d->hData.moving && !d->vData.moving) {
- d->fixupMode = QDeclarative1FlickablePrivate::Immediate;
- d->fixupX();
- }
- }
- if (newGeometry.height() != oldGeometry.height()) {
- if (yflick())
- changed = true;
- if (d->vData.viewSize < 0) {
- d->contentItem->setHeight(height());
- emit contentHeightChanged();
- }
- // Make sure that we're entirely in view.
- if (!d->pressed && !d->hData.moving && !d->vData.moving) {
- d->fixupMode = QDeclarative1FlickablePrivate::Immediate;
- d->fixupY();
- }
- }
-
- if (changed)
- d->updateBeginningEnd();
-}
-
-void QDeclarative1Flickable::cancelFlick()
-{
- Q_D(QDeclarative1Flickable);
- d->timeline.reset(d->hData.move);
- d->timeline.reset(d->vData.move);
- movementEnding();
-}
-
-void QDeclarative1FlickablePrivate::data_append(QDeclarativeListProperty<QObject> *prop, QObject *o)
-{
- QGraphicsObject *i = qobject_cast<QGraphicsObject *>(o);
- if (i) {
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(i);
- if (static_cast<QDeclarativeItemPrivate*>(d)->componentComplete) {
- i->setParentItem(static_cast<QDeclarative1FlickablePrivate*>(prop->data)->contentItem);
- } else {
- d->setParentItemHelper(static_cast<QDeclarative1FlickablePrivate*>(prop->data)->contentItem, 0, 0);
- }
- } else {
- o->setParent(prop->object);
- }
-}
-
-int QDeclarative1FlickablePrivate::data_count(QDeclarativeListProperty<QObject> *property)
-{
- QDeclarativeItem *contentItem= static_cast<QDeclarative1FlickablePrivate*>(property->data)->contentItem;
- return contentItem->childItems().count() + contentItem->children().count();
-}
-
-QObject *QDeclarative1FlickablePrivate::data_at(QDeclarativeListProperty<QObject> *property, int index)
-{
- QDeclarativeItem *contentItem = static_cast<QDeclarative1FlickablePrivate*>(property->data)->contentItem;
-
- int childItemCount = contentItem->childItems().count();
-
- if (index < 0)
- return 0;
-
- if (index < childItemCount) {
- return contentItem->childItems().at(index)->toGraphicsObject();
- } else {
- return contentItem->children().at(index - childItemCount);
- }
-
- return 0;
-}
-
-void QDeclarative1FlickablePrivate::data_clear(QDeclarativeListProperty<QObject> *property)
-{
- QDeclarativeItem *contentItem = static_cast<QDeclarative1FlickablePrivate*>(property->data)->contentItem;
-
- const QList<QGraphicsItem*> graphicsItems = contentItem->childItems();
- for (int i = 0; i < graphicsItems.count(); i++)
- contentItem->scene()->removeItem(graphicsItems[i]);
-
- const QList<QObject*> objects = contentItem->children();
- for (int i = 0; i < objects.count(); i++)
- objects[i]->setParent(0);
-}
-
-QDeclarativeListProperty<QObject> QDeclarative1Flickable::flickableData()
-{
- Q_D(QDeclarative1Flickable);
- return QDeclarativeListProperty<QObject>(this, (void *)d, QDeclarative1FlickablePrivate::data_append,
- QDeclarative1FlickablePrivate::data_count,
- QDeclarative1FlickablePrivate::data_at,
- QDeclarative1FlickablePrivate::data_clear);
-}
-
-QDeclarativeListProperty<QGraphicsObject> QDeclarative1Flickable::flickableChildren()
-{
- Q_D(QDeclarative1Flickable);
- return QGraphicsItemPrivate::get(d->contentItem)->childrenList();
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Flickable::boundsBehavior
- This property holds whether the surface may be dragged
- beyond the Fickable's boundaries, or overshoot the
- Flickable's boundaries when flicked.
-
- This enables the feeling that the edges of the view are soft,
- rather than a hard physical boundary.
-
- The \c boundsBehavior can be one of:
-
- \list
- \o Flickable.StopAtBounds - the contents can not be dragged beyond the boundary
- of the flickable, and flicks will not overshoot.
- \o Flickable.DragOverBounds - the contents can be dragged beyond the boundary
- of the Flickable, but flicks will not overshoot.
- \o Flickable.DragAndOvershootBounds (default) - the contents can be dragged
- beyond the boundary of the Flickable, and can overshoot the
- boundary when flicked.
- \endlist
-*/
-QDeclarative1Flickable::BoundsBehavior QDeclarative1Flickable::boundsBehavior() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->boundsBehavior;
-}
-
-void QDeclarative1Flickable::setBoundsBehavior(BoundsBehavior b)
-{
- Q_D(QDeclarative1Flickable);
- if (b == d->boundsBehavior)
- return;
- d->boundsBehavior = b;
- emit boundsBehaviorChanged();
-}
-
-/*!
- \qmlproperty real QtQuick1::Flickable::contentWidth
- \qmlproperty real QtQuick1::Flickable::contentHeight
-
- The dimensions of the content (the surface controlled by Flickable).
- This should typically be set to the combined size of the items placed in the
- Flickable.
-
- The following snippet shows how these properties are used to display
- an image that is larger than the Flickable item itself:
-
- \snippet doc/src/snippets/qtquick1/flickable.qml document
-
- In some cases, the the content dimensions can be automatically set
- using the \l {Item::childrenRect.width}{childrenRect.width}
- and \l {Item::childrenRect.height}{childrenRect.height} properties.
-*/
-qreal QDeclarative1Flickable::contentWidth() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->hData.viewSize;
-}
-
-void QDeclarative1Flickable::setContentWidth(qreal w)
-{
- Q_D(QDeclarative1Flickable);
- if (d->hData.viewSize == w)
- return;
- d->hData.viewSize = w;
- if (w < 0)
- d->contentItem->setWidth(width());
- else
- d->contentItem->setWidth(w);
- // Make sure that we're entirely in view.
- if (!d->pressed && !d->hData.moving && !d->vData.moving) {
- d->fixupMode = QDeclarative1FlickablePrivate::Immediate;
- d->fixupX();
- } else if (!d->pressed && d->hData.fixingUp) {
- d->fixupMode = QDeclarative1FlickablePrivate::ExtentChanged;
- d->fixupX();
- }
- emit contentWidthChanged();
- d->updateBeginningEnd();
-}
-
-qreal QDeclarative1Flickable::contentHeight() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->vData.viewSize;
-}
-
-void QDeclarative1Flickable::setContentHeight(qreal h)
-{
- Q_D(QDeclarative1Flickable);
- if (d->vData.viewSize == h)
- return;
- d->vData.viewSize = h;
- if (h < 0)
- d->contentItem->setHeight(height());
- else
- d->contentItem->setHeight(h);
- // Make sure that we're entirely in view.
- if (!d->pressed && !d->hData.moving && !d->vData.moving) {
- d->fixupMode = QDeclarative1FlickablePrivate::Immediate;
- d->fixupY();
- } else if (!d->pressed && d->vData.fixingUp) {
- d->fixupMode = QDeclarative1FlickablePrivate::ExtentChanged;
- d->fixupY();
- }
- emit contentHeightChanged();
- d->updateBeginningEnd();
-}
-
-/*!
- \qmlmethod QtQuick1::Flickable::resizeContent(real width, real height, QPointF center)
- \preliminary
- \since Quick 1.1
-
- Resizes the content to \a width x \a height about \a center.
-
- This does not scale the contents of the Flickable - it only resizes the \l contentWidth
- and \l contentHeight.
-
- Resizing the content may result in the content being positioned outside
- the bounds of the Flickable. Calling \l returnToBounds() will
- move the content back within legal bounds.
-*/
-void QDeclarative1Flickable::resizeContent(qreal w, qreal h, QPointF center)
-{
- Q_D(QDeclarative1Flickable);
- if (w != d->hData.viewSize) {
- qreal oldSize = d->hData.viewSize;
- d->hData.viewSize = w;
- d->contentItem->setWidth(w);
- emit contentWidthChanged();
- if (center.x() != 0) {
- qreal pos = center.x() * w / oldSize;
- setContentX(contentX() + pos - center.x());
- }
- }
- if (h != d->vData.viewSize) {
- qreal oldSize = d->vData.viewSize;
- d->vData.viewSize = h;
- d->contentItem->setHeight(h);
- emit contentHeightChanged();
- if (center.y() != 0) {
- qreal pos = center.y() * h / oldSize;
- setContentY(contentY() + pos - center.y());
- }
- }
- d->updateBeginningEnd();
-}
-
-/*!
- \qmlmethod QtQuick1::Flickable::returnToBounds()
- \preliminary
- \since Quick 1.1
-
- Ensures the content is within legal bounds.
-
- This may be called to ensure that the content is within legal bounds
- after manually positioning the content.
-*/
-void QDeclarative1Flickable::returnToBounds()
-{
- Q_D(QDeclarative1Flickable);
- d->fixupX();
- d->fixupY();
-}
-
-qreal QDeclarative1Flickable::vWidth() const
-{
- Q_D(const QDeclarative1Flickable);
- if (d->hData.viewSize < 0)
- return width();
- else
- return d->hData.viewSize;
-}
-
-qreal QDeclarative1Flickable::vHeight() const
-{
- Q_D(const QDeclarative1Flickable);
- if (d->vData.viewSize < 0)
- return height();
- else
- return d->vData.viewSize;
-}
-
-bool QDeclarative1Flickable::xflick() const
-{
- Q_D(const QDeclarative1Flickable);
- if (d->flickableDirection == QDeclarative1Flickable::AutoFlickDirection)
- return vWidth() != width();
- return d->flickableDirection & QDeclarative1Flickable::HorizontalFlick;
-}
-
-bool QDeclarative1Flickable::yflick() const
-{
- Q_D(const QDeclarative1Flickable);
- if (d->flickableDirection == QDeclarative1Flickable::AutoFlickDirection)
- return vHeight() != height();
- return d->flickableDirection & QDeclarative1Flickable::VerticalFlick;
-}
-
-bool QDeclarative1Flickable::sceneEvent(QEvent *event)
-{
- bool rv = QDeclarativeItem::sceneEvent(event);
- if (event->type() == QEvent::UngrabMouse) {
- Q_D(QDeclarative1Flickable);
- if (d->pressed) {
- // if our mouse grab has been removed (probably by another Flickable),
- // fix our state
- d->pressed = false;
- d->stealMouse = false;
- setKeepMouseGrab(false);
- }
- }
- return rv;
-}
-
-bool QDeclarative1Flickable::sendMouseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1Flickable);
- QGraphicsSceneMouseEvent mouseEvent(event->type());
- QRectF myRect = mapToScene(QRectF(0, 0, width(), height())).boundingRect();
-
- QGraphicsScene *s = scene();
- QDeclarativeItem *grabber = s ? qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()) : 0;
- QGraphicsItem *grabberItem = s ? s->mouseGrabberItem() : 0;
- bool disabledItem = grabberItem && !grabberItem->isEnabled();
- bool stealThisEvent = d->stealMouse;
- if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab() || disabledItem)) {
- mouseEvent.setAccepted(false);
- for (int i = 0x1; i <= 0x10; i <<= 1) {
- if (event->buttons() & i) {
- Qt::MouseButton button = Qt::MouseButton(i);
- mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button)));
- }
- }
- mouseEvent.setScenePos(event->scenePos());
- mouseEvent.setLastScenePos(event->lastScenePos());
- mouseEvent.setPos(mapFromScene(event->scenePos()));
- mouseEvent.setLastPos(mapFromScene(event->lastScenePos()));
-
- switch(mouseEvent.type()) {
- case QEvent::GraphicsSceneMouseMove:
- d->handleMouseMoveEvent(&mouseEvent);
- break;
- case QEvent::GraphicsSceneMousePress:
- if (d->pressed) // we are already pressed - this is a delayed replay
- return false;
-
- d->handleMousePressEvent(&mouseEvent);
- d->captureDelayedPress(event);
- stealThisEvent = d->stealMouse; // Update stealThisEvent in case changed by function call above
- break;
- case QEvent::GraphicsSceneMouseRelease:
- if (d->delayedPressEvent) {
- // We replay the mouse press but the grabber we had might not be interessted by the event (e.g. overlay)
- // so we reset the grabber
- if (s->mouseGrabberItem() == d->delayedPressTarget)
- d->delayedPressTarget->ungrabMouse();
- //Use the event handler that will take care of finding the proper item to propagate the event
- QApplication::sendEvent(scene(), d->delayedPressEvent);
- d->clearDelayedPress();
- // We send the release
- scene()->sendEvent(s->mouseGrabberItem(), event);
- // And the event has been consumed
- d->stealMouse = false;
- d->pressed = false;
- return true;
- }
- d->handleMouseReleaseEvent(&mouseEvent);
- break;
- default:
- break;
- }
- grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem());
- if ((grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this) || disabledItem) {
- d->clearDelayedPress();
- grabMouse();
- }
-
- return stealThisEvent || d->delayedPressEvent || disabledItem;
- } else if (d->lastPosTime.isValid()) {
- d->lastPosTime.invalidate();
- returnToBounds();
- }
- if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease) {
- d->clearDelayedPress();
- d->stealMouse = false;
- d->pressed = false;
- }
-
- return false;
-}
-
-bool QDeclarative1Flickable::sceneEventFilter(QGraphicsItem *i, QEvent *e)
-{
- Q_D(QDeclarative1Flickable);
- if (!isVisible() || !d->interactive || !isEnabled())
- return QDeclarativeItem::sceneEventFilter(i, e);
- switch (e->type()) {
- case QEvent::GraphicsSceneMousePress:
- case QEvent::GraphicsSceneMouseMove:
- case QEvent::GraphicsSceneMouseRelease:
- return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
- default:
- break;
- }
-
- return QDeclarativeItem::sceneEventFilter(i, e);
-}
-
-/*!
- \qmlproperty real QtQuick1::Flickable::maximumFlickVelocity
- This property holds the maximum velocity that the user can flick the view in pixels/second.
-
- The default value is platform dependent.
-*/
-qreal QDeclarative1Flickable::maximumFlickVelocity() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->maxVelocity;
-}
-
-void QDeclarative1Flickable::setMaximumFlickVelocity(qreal v)
-{
- Q_D(QDeclarative1Flickable);
- if (v == d->maxVelocity)
- return;
- d->maxVelocity = v;
- emit maximumFlickVelocityChanged();
-}
-
-/*!
- \qmlproperty real QtQuick1::Flickable::flickDeceleration
- This property holds the rate at which a flick will decelerate.
-
- The default value is platform dependent.
-*/
-qreal QDeclarative1Flickable::flickDeceleration() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->deceleration;
-}
-
-void QDeclarative1Flickable::setFlickDeceleration(qreal deceleration)
-{
- Q_D(QDeclarative1Flickable);
- if (deceleration == d->deceleration)
- return;
- d->deceleration = deceleration;
- emit flickDecelerationChanged();
-}
-
-bool QDeclarative1Flickable::isFlicking() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->hData.flicking || d->vData.flicking;
-}
-
-/*!
- \qmlproperty bool QtQuick1::Flickable::flicking
- \qmlproperty bool QtQuick1::Flickable::flickingHorizontally
- \qmlproperty bool QtQuick1::Flickable::flickingVertically
-
- These properties describe whether the view is currently moving horizontally,
- vertically or in either direction, due to the user flicking the view.
-*/
-bool QDeclarative1Flickable::isFlickingHorizontally() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->hData.flicking;
-}
-
-bool QDeclarative1Flickable::isFlickingVertically() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->vData.flicking;
-}
-
-/*!
- \qmlproperty int QtQuick1::Flickable::pressDelay
-
- This property holds the time to delay (ms) delivering a press to
- children of the Flickable. This can be useful where reacting
- to a press before a flicking action has undesirable effects.
-
- If the flickable is dragged/flicked before the delay times out
- the press event will not be delivered. If the button is released
- within the timeout, both the press and release will be delivered.
-
- Note that for nested Flickables with pressDelay set, the pressDelay of
- inner Flickables is overridden by the outermost Flickable.
-*/
-int QDeclarative1Flickable::pressDelay() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->pressDelay;
-}
-
-void QDeclarative1Flickable::setPressDelay(int delay)
-{
- Q_D(QDeclarative1Flickable);
- if (d->pressDelay == delay)
- return;
- d->pressDelay = delay;
- emit pressDelayChanged();
-}
-
-
-bool QDeclarative1Flickable::isMoving() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->hData.moving || d->vData.moving;
-}
-
-/*!
- \qmlproperty bool QtQuick1::Flickable::moving
- \qmlproperty bool QtQuick1::Flickable::movingHorizontally
- \qmlproperty bool QtQuick1::Flickable::movingVertically
-
- These properties describe whether the view is currently moving horizontally,
- vertically or in either direction, due to the user either dragging or
- flicking the view.
-*/
-bool QDeclarative1Flickable::isMovingHorizontally() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->hData.moving;
-}
-
-bool QDeclarative1Flickable::isMovingVertically() const
-{
- Q_D(const QDeclarative1Flickable);
- return d->vData.moving;
-}
-
-void QDeclarative1Flickable::movementStarting()
-{
- Q_D(QDeclarative1Flickable);
- if (d->hMoved && !d->hData.moving) {
- d->hData.moving = true;
- emit movingChanged();
- emit movingHorizontallyChanged();
- if (!d->vData.moving)
- emit movementStarted();
- }
- else if (d->vMoved && !d->vData.moving) {
- d->vData.moving = true;
- emit movingChanged();
- emit movingVerticallyChanged();
- if (!d->hData.moving)
- emit movementStarted();
- }
-}
-
-void QDeclarative1Flickable::movementEnding()
-{
- Q_D(QDeclarative1Flickable);
- movementXEnding();
- movementYEnding();
- d->hData.smoothVelocity.setValue(0);
- d->vData.smoothVelocity.setValue(0);
-}
-
-void QDeclarative1Flickable::movementXEnding()
-{
- Q_D(QDeclarative1Flickable);
- if (d->hData.flicking) {
- d->hData.flicking = false;
- emit flickingChanged();
- emit flickingHorizontallyChanged();
- if (!d->vData.flicking)
- emit flickEnded();
- }
- if (!d->pressed && !d->stealMouse) {
- if (d->hData.moving) {
- d->hData.moving = false;
- d->hMoved = false;
- emit movingChanged();
- emit movingHorizontallyChanged();
- if (!d->vData.moving)
- emit movementEnded();
- }
- }
- d->hData.fixingUp = false;
-}
-
-void QDeclarative1Flickable::movementYEnding()
-{
- Q_D(QDeclarative1Flickable);
- if (d->vData.flicking) {
- d->vData.flicking = false;
- emit flickingChanged();
- emit flickingVerticallyChanged();
- if (!d->hData.flicking)
- emit flickEnded();
- }
- if (!d->pressed && !d->stealMouse) {
- if (d->vData.moving) {
- d->vData.moving = false;
- d->vMoved = false;
- emit movingChanged();
- emit movingVerticallyChanged();
- if (!d->hData.moving)
- emit movementEnded();
- }
- }
- d->vData.fixingUp = false;
-}
-
-void QDeclarative1FlickablePrivate::updateVelocity()
-{
- Q_Q(QDeclarative1Flickable);
- emit q->horizontalVelocityChanged();
- emit q->verticalVelocityChanged();
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeflickable_p.h b/src/qtquick1/graphicsitems/qdeclarativeflickable_p.h
deleted file mode 100644
index 1ac08a6a11..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeflickable_p.h
+++ /dev/null
@@ -1,228 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEFLICKABLE_H
-#define QDECLARATIVEFLICKABLE_H
-
-#include "qdeclarativeitem.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1FlickablePrivate;
-class QDeclarative1FlickableVisibleArea;
-class Q_AUTOTEST_EXPORT QDeclarative1Flickable : public QDeclarativeItem
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged)
- Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged)
- Q_PROPERTY(qreal contentX READ contentX WRITE setContentX NOTIFY contentXChanged)
- Q_PROPERTY(qreal contentY READ contentY WRITE setContentY NOTIFY contentYChanged)
- Q_PROPERTY(QDeclarativeItem *contentItem READ contentItem CONSTANT)
-
- Q_PROPERTY(qreal horizontalVelocity READ horizontalVelocity NOTIFY horizontalVelocityChanged)
- Q_PROPERTY(qreal verticalVelocity READ verticalVelocity NOTIFY verticalVelocityChanged)
-
- Q_PROPERTY(BoundsBehavior boundsBehavior READ boundsBehavior WRITE setBoundsBehavior NOTIFY boundsBehaviorChanged)
- Q_PROPERTY(qreal maximumFlickVelocity READ maximumFlickVelocity WRITE setMaximumFlickVelocity NOTIFY maximumFlickVelocityChanged)
- Q_PROPERTY(qreal flickDeceleration READ flickDeceleration WRITE setFlickDeceleration NOTIFY flickDecelerationChanged)
- Q_PROPERTY(bool moving READ isMoving NOTIFY movingChanged)
- Q_PROPERTY(bool movingHorizontally READ isMovingHorizontally NOTIFY movingHorizontallyChanged)
- Q_PROPERTY(bool movingVertically READ isMovingVertically NOTIFY movingVerticallyChanged)
- Q_PROPERTY(bool flicking READ isFlicking NOTIFY flickingChanged)
- Q_PROPERTY(bool flickingHorizontally READ isFlickingHorizontally NOTIFY flickingHorizontallyChanged)
- Q_PROPERTY(bool flickingVertically READ isFlickingVertically NOTIFY flickingVerticallyChanged)
- Q_PROPERTY(FlickableDirection flickableDirection READ flickableDirection WRITE setFlickableDirection NOTIFY flickableDirectionChanged)
-
- Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged)
- Q_PROPERTY(int pressDelay READ pressDelay WRITE setPressDelay NOTIFY pressDelayChanged)
-
- Q_PROPERTY(bool atXEnd READ isAtXEnd NOTIFY isAtBoundaryChanged)
- Q_PROPERTY(bool atYEnd READ isAtYEnd NOTIFY isAtBoundaryChanged)
- Q_PROPERTY(bool atXBeginning READ isAtXBeginning NOTIFY isAtBoundaryChanged)
- Q_PROPERTY(bool atYBeginning READ isAtYBeginning NOTIFY isAtBoundaryChanged)
-
- Q_PROPERTY(QDeclarative1FlickableVisibleArea *visibleArea READ visibleArea CONSTANT)
-
- Q_PROPERTY(QDeclarativeListProperty<QObject> flickableData READ flickableData)
- Q_PROPERTY(QDeclarativeListProperty<QGraphicsObject> flickableChildren READ flickableChildren)
- Q_CLASSINFO("DefaultProperty", "flickableData")
-
- Q_ENUMS(FlickableDirection)
- Q_ENUMS(BoundsBehavior)
-
-public:
- QDeclarative1Flickable(QDeclarativeItem *parent=0);
- ~QDeclarative1Flickable();
-
- QDeclarativeListProperty<QObject> flickableData();
- QDeclarativeListProperty<QGraphicsObject> flickableChildren();
-
- enum BoundsBehavior { StopAtBounds, DragOverBounds, DragAndOvershootBounds };
- BoundsBehavior boundsBehavior() const;
- void setBoundsBehavior(BoundsBehavior);
-
- qreal contentWidth() const;
- void setContentWidth(qreal);
-
- qreal contentHeight() const;
- void setContentHeight(qreal);
-
- qreal contentX() const;
- virtual void setContentX(qreal pos);
-
- qreal contentY() const;
- virtual void setContentY(qreal pos);
-
- bool isMoving() const;
- bool isMovingHorizontally() const;
- bool isMovingVertically() const;
- bool isFlicking() const;
- bool isFlickingHorizontally() const;
- bool isFlickingVertically() const;
-
- int pressDelay() const;
- void setPressDelay(int delay);
-
- qreal maximumFlickVelocity() const;
- void setMaximumFlickVelocity(qreal);
-
- qreal flickDeceleration() const;
- void setFlickDeceleration(qreal);
-
- bool isInteractive() const;
- void setInteractive(bool);
-
- qreal horizontalVelocity() const;
- qreal verticalVelocity() const;
-
- bool isAtXEnd() const;
- bool isAtXBeginning() const;
- bool isAtYEnd() const;
- bool isAtYBeginning() const;
-
- QDeclarativeItem *contentItem();
-
- enum FlickableDirection { AutoFlickDirection=0x00, HorizontalFlick=0x01, VerticalFlick=0x02, HorizontalAndVerticalFlick=0x03 };
- FlickableDirection flickableDirection() const;
- void setFlickableDirection(FlickableDirection);
-
- Q_INVOKABLE Q_REVISION(1) void resizeContent(qreal w, qreal h, QPointF center);
- Q_INVOKABLE Q_REVISION(1) void returnToBounds();
-
-Q_SIGNALS:
- void contentWidthChanged();
- void contentHeightChanged();
- void contentXChanged();
- void contentYChanged();
- void movingChanged();
- void movingHorizontallyChanged();
- void movingVerticallyChanged();
- void flickingChanged();
- void flickingHorizontallyChanged();
- void flickingVerticallyChanged();
- void horizontalVelocityChanged();
- void verticalVelocityChanged();
- void isAtBoundaryChanged();
- void flickableDirectionChanged();
- void interactiveChanged();
- void boundsBehaviorChanged();
- void maximumFlickVelocityChanged();
- void flickDecelerationChanged();
- void pressDelayChanged();
- void movementStarted();
- void movementEnded();
- void flickStarted();
- void flickEnded();
-
-protected:
- virtual bool sceneEventFilter(QGraphicsItem *, QEvent *);
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void wheelEvent(QGraphicsSceneWheelEvent *event);
- void timerEvent(QTimerEvent *event);
-
- QDeclarative1FlickableVisibleArea *visibleArea();
-
-protected Q_SLOTS:
- virtual void ticked();
- void movementStarting();
- void movementEnding();
-
-protected:
- void movementXEnding();
- void movementYEnding();
- virtual qreal minXExtent() const;
- virtual qreal minYExtent() const;
- virtual qreal maxXExtent() const;
- virtual qreal maxYExtent() const;
- qreal vWidth() const;
- qreal vHeight() const;
- virtual void viewportMoved();
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
- bool sceneEvent(QEvent *event);
- bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
-
- bool xflick() const;
- bool yflick() const;
- void cancelFlick();
-
-protected:
- QDeclarative1Flickable(QDeclarative1FlickablePrivate &dd, QDeclarativeItem *parent);
-
-private:
- Q_DISABLE_COPY(QDeclarative1Flickable)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1Flickable)
- friend class QDeclarative1FlickableVisibleArea;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Flickable)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeflickable_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeflickable_p_p.h
deleted file mode 100644
index e6489db70e..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeflickable_p_p.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEFLICKABLE_P_H
-#define QDECLARATIVEFLICKABLE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeflickable_p.h"
-
-#include "private/qdeclarativeitem_p.h"
-#include "private/qdeclarativeitemchangelistener_p.h"
-
-#include <QtDeclarative/qdeclarative.h>
-#include <QtQuick1/private/qdeclarativetimeline_p_p.h>
-#include <QtQuick1/private/qdeclarativeanimation_p_p.h>
-
-#include <qdatetime.h>
-
-QT_BEGIN_NAMESPACE
-
-// Really slow flicks can be annoying.
-const qreal MinimumFlickVelocity = 75.0;
-
-class QDeclarative1FlickableVisibleArea;
-class QDeclarative1FlickablePrivate : public QDeclarativeItemPrivate, public QDeclarativeItemChangeListener
-{
- Q_DECLARE_PUBLIC(QDeclarative1Flickable)
-
-public:
- QDeclarative1FlickablePrivate();
- void init();
-
- struct Velocity : public QDeclarative1TimeLineValue
- {
- Velocity(QDeclarative1FlickablePrivate *p)
- : parent(p) {}
- virtual void setValue(qreal v) {
- if (v != value()) {
- QDeclarative1TimeLineValue::setValue(v);
- parent->updateVelocity();
- }
- }
- QDeclarative1FlickablePrivate *parent;
- };
-
- struct AxisData {
- AxisData(QDeclarative1FlickablePrivate *fp, void (QDeclarative1FlickablePrivate::*func)(qreal))
- : move(fp, func), viewSize(-1), smoothVelocity(fp), atEnd(false), atBeginning(true)
- , fixingUp(false), inOvershoot(false), moving(false), flicking(false)
- {}
-
- void reset() {
- velocityBuffer.clear();
- dragStartOffset = 0;
- fixingUp = false;
- inOvershoot = false;
- }
-
- void addVelocitySample(qreal v, qreal maxVelocity);
- void updateVelocity();
-
- QDeclarative1TimeLineValueProxy<QDeclarative1FlickablePrivate> move;
- qreal viewSize;
- qreal pressPos;
- qreal dragStartOffset;
- qreal dragMinBound;
- qreal dragMaxBound;
- qreal velocity;
- qreal flickTarget;
- QDeclarative1FlickablePrivate::Velocity smoothVelocity;
- QPODVector<qreal,10> velocityBuffer;
- bool atEnd : 1;
- bool atBeginning : 1;
- bool fixingUp : 1;
- bool inOvershoot : 1;
- bool moving : 1;
- bool flicking : 1;
- };
-
- void flickX(qreal velocity);
- void flickY(qreal velocity);
- virtual void flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
- QDeclarative1TimeLineCallback::Callback fixupCallback, qreal velocity);
-
- void fixupX();
- void fixupY();
- virtual void fixup(AxisData &data, qreal minExtent, qreal maxExtent);
-
- void updateBeginningEnd();
-
- bool isOutermostPressDelay() const;
- void captureDelayedPress(QGraphicsSceneMouseEvent *event);
- void clearDelayedPress();
-
- void setRoundedViewportX(qreal x);
- void setRoundedViewportY(qreal y);
-
- qreal overShootDistance(qreal size);
-
- void itemGeometryChanged(QDeclarativeItem *, const QRectF &, const QRectF &);
-
-public:
- QDeclarativeItem *contentItem;
-
- AxisData hData;
- AxisData vData;
-
- QDeclarative1TimeLine timeline;
- bool hMoved : 1;
- bool vMoved : 1;
- bool stealMouse : 1;
- bool pressed : 1;
- bool interactive : 1;
- bool calcVelocity : 1;
- QElapsedTimer lastPosTime;
- QPointF lastPos;
- QPointF pressPos;
- QElapsedTimer pressTime;
- qreal deceleration;
- qreal maxVelocity;
- QElapsedTimer velocityTime;
- QPointF lastFlickablePosition;
- qreal reportedVelocitySmoothing;
- QGraphicsSceneMouseEvent *delayedPressEvent;
- QGraphicsItem *delayedPressTarget;
- QBasicTimer delayedPressTimer;
- int pressDelay;
- int fixupDuration;
-
- enum FixupMode { Normal, Immediate, ExtentChanged };
- FixupMode fixupMode;
-
- static void fixupY_callback(void *);
- static void fixupX_callback(void *);
-
- void updateVelocity();
- int vTime;
- QDeclarative1TimeLine velocityTimeline;
- QDeclarative1FlickableVisibleArea *visibleArea;
- QDeclarative1Flickable::FlickableDirection flickableDirection;
- QDeclarative1Flickable::BoundsBehavior boundsBehavior;
-
- void handleMousePressEvent(QGraphicsSceneMouseEvent *);
- void handleMouseMoveEvent(QGraphicsSceneMouseEvent *);
- void handleMouseReleaseEvent(QGraphicsSceneMouseEvent *);
-
- // flickableData property
- static void data_append(QDeclarativeListProperty<QObject> *, QObject *);
- static int data_count(QDeclarativeListProperty<QObject> *);
- static QObject *data_at(QDeclarativeListProperty<QObject> *, int);
- static void data_clear(QDeclarativeListProperty<QObject> *);
-};
-
-class QDeclarative1FlickableVisibleArea : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal xPosition READ xPosition NOTIFY xPositionChanged)
- Q_PROPERTY(qreal yPosition READ yPosition NOTIFY yPositionChanged)
- Q_PROPERTY(qreal widthRatio READ widthRatio NOTIFY widthRatioChanged)
- Q_PROPERTY(qreal heightRatio READ heightRatio NOTIFY heightRatioChanged)
-
-public:
- QDeclarative1FlickableVisibleArea(QDeclarative1Flickable *parent=0);
-
- qreal xPosition() const;
- qreal widthRatio() const;
- qreal yPosition() const;
- qreal heightRatio() const;
-
- void updateVisible();
-
-signals:
- void xPositionChanged(qreal xPosition);
- void yPositionChanged(qreal yPosition);
- void widthRatioChanged(qreal widthRatio);
- void heightRatioChanged(qreal heightRatio);
-
-private:
- QDeclarative1Flickable *flickable;
- qreal m_xPosition;
- qreal m_widthRatio;
- qreal m_yPosition;
- qreal m_heightRatio;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1FlickableVisibleArea)
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeflipable.cpp b/src/qtquick1/graphicsitems/qdeclarativeflipable.cpp
deleted file mode 100644
index c36555e1de..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeflipable.cpp
+++ /dev/null
@@ -1,259 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeflipable_p.h"
-
-#include "QtQuick1/private/qdeclarativeitem_p.h"
-#include "QtDeclarative/private/qdeclarativeguard_p.h"
-
-#include <QtDeclarative/qdeclarativeinfo.h>
-
-#include <QtWidgets/qgraphicstransform.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-class QDeclarative1FlipablePrivate : public QDeclarativeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1Flipable)
-public:
- QDeclarative1FlipablePrivate() : current(QDeclarative1Flipable::Front), front(0), back(0) {}
-
- void updateSceneTransformFromParent();
- void setBackTransform();
-
- QDeclarative1Flipable::Side current;
- QDeclarativeGuard<QGraphicsObject> front;
- QDeclarativeGuard<QGraphicsObject> back;
-
- bool wantBackXFlipped;
- bool wantBackYFlipped;
-};
-
-/*!
- \qmlclass Flipable QDeclarative1Flipable
- \inqmlmodule QtQuick 1
- \since QtQuick 1.0
- \ingroup qml-basic-interaction-elements
- \brief The Flipable item provides a surface that can be flipped.
- \inherits Item
-
- Flipable is an item that can be visibly "flipped" between its front and
- back sides, like a card. It is used together with \l Rotation, \l State
- and \l Transition elements to produce a flipping effect.
-
- The \l front and \l back properties are used to hold the items that are
- shown respectively on the front and back sides of the flipable item.
-
- \section1 Example Usage
-
- The following example shows a Flipable item that flips whenever it is
- clicked, rotating about the y-axis.
-
- This flipable item has a \c flipped boolean property that is toggled
- whenever the MouseArea within the flipable is clicked. When
- \c flipped is true, the item changes to the "back" state; in this
- state, the \c angle of the \l Rotation item is changed to 180
- degrees to produce the flipping effect. When \c flipped is false, the
- item reverts to the default state, in which the \c angle value is 0.
-
- \snippet doc/src/snippets/qtquick1/flipable/flipable.qml 0
-
- \image flipable.gif
-
- The \l Transition creates the animation that changes the angle over
- four seconds. When the item changes between its "back" and
- default states, the NumberAnimation animates the angle between
- its old and new values.
-
- See \l {QML States} for details on state changes and the default
- state, and \l {QML Animation and Transitions} for more information on how
- animations work within transitions.
-
- \sa {declarative/ui-components/flipable}{Flipable example}
-*/
-
-QDeclarative1Flipable::QDeclarative1Flipable(QDeclarativeItem *parent)
-: QDeclarativeItem(*(new QDeclarative1FlipablePrivate), parent)
-{
-}
-
-QDeclarative1Flipable::~QDeclarative1Flipable()
-{
-}
-
-/*!
- \qmlproperty Item QtQuick1::Flipable::front
- \qmlproperty Item QtQuick1::Flipable::back
-
- The front and back sides of the flipable.
-*/
-
-QGraphicsObject *QDeclarative1Flipable::front()
-{
- Q_D(const QDeclarative1Flipable);
- return d->front;
-}
-
-void QDeclarative1Flipable::setFront(QGraphicsObject *front)
-{
- Q_D(QDeclarative1Flipable);
- if (d->front) {
- qmlInfo(this) << tr("front is a write-once property");
- return;
- }
- d->front = front;
- d->front->setParentItem(this);
- if (Back == d->current)
- d->front->setOpacity(0.);
- emit frontChanged();
-}
-
-QGraphicsObject *QDeclarative1Flipable::back()
-{
- Q_D(const QDeclarative1Flipable);
- return d->back;
-}
-
-void QDeclarative1Flipable::setBack(QGraphicsObject *back)
-{
- Q_D(QDeclarative1Flipable);
- if (d->back) {
- qmlInfo(this) << tr("back is a write-once property");
- return;
- }
- d->back = back;
- d->back->setParentItem(this);
- if (Front == d->current)
- d->back->setOpacity(0.);
- connect(back, SIGNAL(widthChanged()),
- this, SLOT(retransformBack()));
- connect(back, SIGNAL(heightChanged()),
- this, SLOT(retransformBack()));
- emit backChanged();
-}
-
-void QDeclarative1Flipable::retransformBack()
-{
- Q_D(QDeclarative1Flipable);
- if (d->current == QDeclarative1Flipable::Back && d->back)
- d->setBackTransform();
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Flipable::side
-
- The side of the Flipable currently visible. Possible values are \c
- Flipable.Front and \c Flipable.Back.
-*/
-QDeclarative1Flipable::Side QDeclarative1Flipable::side() const
-{
- Q_D(const QDeclarative1Flipable);
- if (d->dirtySceneTransform)
- const_cast<QDeclarative1FlipablePrivate *>(d)->ensureSceneTransform();
-
- return d->current;
-}
-
-// determination on the currently visible side of the flipable
-// has to be done on the complete scene transform to give
-// correct results.
-void QDeclarative1FlipablePrivate::updateSceneTransformFromParent()
-{
- Q_Q(QDeclarative1Flipable);
-
- QDeclarativeItemPrivate::updateSceneTransformFromParent();
- QPointF p1(0, 0);
- QPointF p2(1, 0);
- QPointF p3(1, 1);
-
- QPointF scenep1 = sceneTransform.map(p1);
- QPointF scenep2 = sceneTransform.map(p2);
- QPointF scenep3 = sceneTransform.map(p3);
- p1 = q->mapToParent(p1);
- p2 = q->mapToParent(p2);
- p3 = q->mapToParent(p3);
-
- qreal cross = (scenep1.x() - scenep2.x()) * (scenep3.y() - scenep2.y()) -
- (scenep1.y() - scenep2.y()) * (scenep3.x() - scenep2.x());
-
- wantBackYFlipped = p1.x() >= p2.x();
- wantBackXFlipped = p2.y() >= p3.y();
-
- QDeclarative1Flipable::Side newSide;
- if (cross > 0) {
- newSide = QDeclarative1Flipable::Back;
- } else {
- newSide = QDeclarative1Flipable::Front;
- }
-
- if (newSide != current) {
- current = newSide;
- if (current == QDeclarative1Flipable::Back && back)
- setBackTransform();
- if (front)
- front->setOpacity((current==QDeclarative1Flipable::Front)?1.:0.);
- if (back)
- back->setOpacity((current==QDeclarative1Flipable::Back)?1.:0.);
- emit q->sideChanged();
- }
-}
-
-/* Depends on the width/height of the back item, and so needs reevaulating
- if those change.
-*/
-void QDeclarative1FlipablePrivate::setBackTransform()
-{
- QTransform mat;
- QGraphicsItemPrivate *dBack = QGraphicsItemPrivate::get(back);
- mat.translate(dBack->width()/2,dBack->height()/2);
- if (dBack->width() && wantBackYFlipped)
- mat.rotate(180, Qt::YAxis);
- if (dBack->height() && wantBackXFlipped)
- mat.rotate(180, Qt::XAxis);
- mat.translate(-dBack->width()/2,-dBack->height()/2);
- back->setTransform(mat);
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeflipable_p.h b/src/qtquick1/graphicsitems/qdeclarativeflipable_p.h
deleted file mode 100644
index 3d9f69be84..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeflipable_p.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEFLIPABLE_H
-#define QDECLARATIVEFLIPABLE_H
-
-#include "qdeclarativeitem.h"
-
-#include <QtCore/QObject>
-#include <QtGui/QTransform>
-#include <QtGui/qvector3d.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1FlipablePrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1Flipable : public QDeclarativeItem
-{
- Q_OBJECT
-
- Q_ENUMS(Side)
- Q_PROPERTY(QGraphicsObject *front READ front WRITE setFront NOTIFY frontChanged)
- Q_PROPERTY(QGraphicsObject *back READ back WRITE setBack NOTIFY backChanged)
- Q_PROPERTY(Side side READ side NOTIFY sideChanged)
- //### flipAxis
- //### flipRotation
-public:
- QDeclarative1Flipable(QDeclarativeItem *parent=0);
- ~QDeclarative1Flipable();
-
- QGraphicsObject *front();
- void setFront(QGraphicsObject *);
-
- QGraphicsObject *back();
- void setBack(QGraphicsObject *);
-
- enum Side { Front, Back };
- Side side() const;
-
-Q_SIGNALS:
- void frontChanged();
- void backChanged();
- void sideChanged();
-
-private Q_SLOTS:
- void retransformBack();
-
-private:
- Q_DISABLE_COPY(QDeclarative1Flipable)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1Flipable)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Flipable)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEFLIPABLE_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativefocuspanel.cpp b/src/qtquick1/graphicsitems/qdeclarativefocuspanel.cpp
deleted file mode 100644
index 940f7c6f09..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativefocuspanel.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativefocuspanel_p.h"
-
-#include "QtQuick1/private/qdeclarativeitem_p.h"
-
-#include <QtWidgets/qgraphicsscene.h>
-#include <QEvent>
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \qmlclass FocusPanel QDeclarative1FocusPanel
- \inqmlmodule QtQuick 1
- \since QtQuick 1.0
- \ingroup qml-basic-interaction-elements
-
- \brief The FocusPanel item explicitly creates a focus panel.
- \inherits Item
-
- Focus panels assist in keyboard focus handling when building QML
- applications. All the details are covered in the
- \l {qmlfocus}{keyboard focus documentation}.
-*/
-
-QDeclarative1FocusPanel::QDeclarative1FocusPanel(QDeclarativeItem *parent) :
- QDeclarativeItem(parent)
-{
- Q_D(QDeclarativeItem);
- d->flags |= QGraphicsItem::ItemIsPanel;
-}
-
-QDeclarative1FocusPanel::~QDeclarative1FocusPanel()
-{
-}
-
-/*!
- \qmlproperty bool QtQuick1::FocusPanel::active
-
- Sets whether the item is the active focus panel.
-*/
-
-bool QDeclarative1FocusPanel::sceneEvent(QEvent *event)
-{
- if (event->type() == QEvent::WindowActivate ||
- event->type() == QEvent::WindowDeactivate)
- emit activeChanged();
- return QDeclarativeItem::sceneEvent(event);
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativefocuspanel_p.h b/src/qtquick1/graphicsitems/qdeclarativefocuspanel_p.h
deleted file mode 100644
index 75a7f43173..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativefocuspanel_p.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEFOCUSPANEL_H
-#define QDECLARATIVEFOCUSPANEL_H
-
-#include "qdeclarativeitem.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class Q_AUTOTEST_EXPORT QDeclarative1FocusPanel : public QDeclarativeItem
-{
- Q_OBJECT
- Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
-public:
- QDeclarative1FocusPanel(QDeclarativeItem *parent=0);
- virtual ~QDeclarative1FocusPanel();
-
-Q_SIGNALS:
- void activeChanged();
-
-protected:
- bool sceneEvent(QEvent *event);
-
-private:
- Q_DISABLE_COPY(QDeclarative1FocusPanel)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarativeItem)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1FocusPanel)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEFOCUSPANEL_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativefocusscope.cpp b/src/qtquick1/graphicsitems/qdeclarativefocusscope.cpp
deleted file mode 100644
index 97eee708d6..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativefocusscope.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativefocusscope_p.h"
-
-#include "QtQuick1/private/qdeclarativeitem_p.h"
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \qmlclass FocusScope QDeclarative1FocusScope
- \inqmlmodule QtQuick 1
- \since QtQuick 1.0
- \ingroup qml-basic-interaction-elements
-
- \brief The FocusScope object explicitly creates a focus scope.
- \inherits Item
-
- Focus scopes assist in keyboard focus handling when building reusable QML
- components. All the details are covered in the
- \l {qmlfocus}{keyboard focus documentation}.
-
- \sa {declarative/keyinteraction/focus}{Keyboard focus example}
-*/
-
-QDeclarative1FocusScope::QDeclarative1FocusScope(QDeclarativeItem *parent) :
- QDeclarativeItem(parent)
-{
- Q_D(QDeclarativeItem);
- d->flags |= QGraphicsItem::ItemIsFocusScope;
-}
-
-QDeclarative1FocusScope::~QDeclarative1FocusScope()
-{
-}
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativefocusscope_p.h b/src/qtquick1/graphicsitems/qdeclarativefocusscope_p.h
deleted file mode 100644
index b61aed4b36..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativefocusscope_p.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEFOCUSSCOPE_H
-#define QDECLARATIVEFOCUSSCOPE_H
-
-#include "qdeclarativeitem.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-//### set component root as focusscope
-class Q_AUTOTEST_EXPORT QDeclarative1FocusScope : public QDeclarativeItem
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarativeItem)
-public:
- QDeclarative1FocusScope(QDeclarativeItem *parent=0);
- virtual ~QDeclarative1FocusScope();
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1FocusScope)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEFOCUSSCOPE_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativegraphicswidget.cpp b/src/qtquick1/graphicsitems/qdeclarativegraphicswidget.cpp
deleted file mode 100644
index c6a3c4f08b..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativegraphicswidget.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativegraphicswidget_p.h"
-#include "QtQuick1/private/qdeclarativeanchors_p.h"
-#include "QtQuick1/private/qdeclarativeitem_p.h"
-#include "QtQuick1/private/qdeclarativeanchors_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-
-
-class QDeclarative1GraphicsWidgetPrivate : public QObjectPrivate {
- Q_DECLARE_PUBLIC(QDeclarative1GraphicsWidget)
-public :
- QDeclarative1GraphicsWidgetPrivate() :
- _anchors(0), _anchorLines(0)
- {}
- QDeclarativeItemPrivate::AnchorLines *anchorLines() const;
- QDeclarative1Anchors *_anchors;
- mutable QDeclarativeItemPrivate::AnchorLines *_anchorLines;
-};
-
-QDeclarative1GraphicsWidget::QDeclarative1GraphicsWidget(QObject *parent) :
- QObject(*new QDeclarative1GraphicsWidgetPrivate, parent)
-{
-}
-QDeclarative1GraphicsWidget::~QDeclarative1GraphicsWidget()
-{
- Q_D(QDeclarative1GraphicsWidget);
- delete d->_anchorLines; d->_anchorLines = 0;
- delete d->_anchors; d->_anchors = 0;
-}
-
-QDeclarative1Anchors *QDeclarative1GraphicsWidget::anchors()
-{
- Q_D(QDeclarative1GraphicsWidget);
- if (!d->_anchors)
- d->_anchors = new QDeclarative1Anchors(static_cast<QGraphicsObject *>(parent()));
- return d->_anchors;
-}
-
-QDeclarativeItemPrivate::AnchorLines *QDeclarative1GraphicsWidgetPrivate::anchorLines() const
-{
- Q_Q(const QDeclarative1GraphicsWidget);
- if (!_anchorLines)
- _anchorLines = new QDeclarativeItemPrivate::AnchorLines(static_cast<QGraphicsObject *>(q->parent()));
- return _anchorLines;
-}
-
-QDeclarative1AnchorLine QDeclarative1GraphicsWidget::left() const
-{
- Q_D(const QDeclarative1GraphicsWidget);
- return d->anchorLines()->left;
-}
-
-QDeclarative1AnchorLine QDeclarative1GraphicsWidget::right() const
-{
- Q_D(const QDeclarative1GraphicsWidget);
- return d->anchorLines()->right;
-}
-
-QDeclarative1AnchorLine QDeclarative1GraphicsWidget::horizontalCenter() const
-{
- Q_D(const QDeclarative1GraphicsWidget);
- return d->anchorLines()->hCenter;
-}
-
-QDeclarative1AnchorLine QDeclarative1GraphicsWidget::top() const
-{
- Q_D(const QDeclarative1GraphicsWidget);
- return d->anchorLines()->top;
-}
-
-QDeclarative1AnchorLine QDeclarative1GraphicsWidget::bottom() const
-{
- Q_D(const QDeclarative1GraphicsWidget);
- return d->anchorLines()->bottom;
-}
-
-QDeclarative1AnchorLine QDeclarative1GraphicsWidget::verticalCenter() const
-{
- Q_D(const QDeclarative1GraphicsWidget);
- return d->anchorLines()->vCenter;
-}
-
-
-
-QT_END_NAMESPACE
-
-#include <moc_qdeclarativegraphicswidget_p.cpp>
diff --git a/src/qtquick1/graphicsitems/qdeclarativegraphicswidget_p.h b/src/qtquick1/graphicsitems/qdeclarativegraphicswidget_p.h
deleted file mode 100644
index da1c629d9d..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativegraphicswidget_p.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGRAPHICSWIDGET_P_H
-#define QDECLARATIVEGRAPHICSWIDGET_P_H
-
-#include <QObject>
-#include <QtDeclarative/qdeclarativecomponent.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QGraphicsObject;
-class QDeclarative1AnchorLine;
-class QDeclarative1Anchors;
-class QDeclarative1GraphicsWidgetPrivate;
-
-// ### TODO can the extension object be the anchor directly? We save one allocation -> awesome.
-class QDeclarative1GraphicsWidget : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QDeclarative1Anchors * anchors READ anchors DESIGNABLE false CONSTANT FINAL)
- Q_PROPERTY(QDeclarative1AnchorLine left READ left CONSTANT FINAL)
- Q_PROPERTY(QDeclarative1AnchorLine right READ right CONSTANT FINAL)
- Q_PROPERTY(QDeclarative1AnchorLine horizontalCenter READ horizontalCenter CONSTANT FINAL)
- Q_PROPERTY(QDeclarative1AnchorLine top READ top CONSTANT FINAL)
- Q_PROPERTY(QDeclarative1AnchorLine bottom READ bottom CONSTANT FINAL)
- Q_PROPERTY(QDeclarative1AnchorLine verticalCenter READ verticalCenter CONSTANT FINAL)
- // ### TODO : QGraphicsWidget don't have a baseline concept yet.
- //Q_PROPERTY(QDeclarative1AnchorLine baseline READ baseline CONSTANT FINAL)
-public:
- QDeclarative1GraphicsWidget(QObject *parent = 0);
- ~QDeclarative1GraphicsWidget();
- QDeclarative1Anchors *anchors();
- QDeclarative1AnchorLine left() const;
- QDeclarative1AnchorLine right() const;
- QDeclarative1AnchorLine horizontalCenter() const;
- QDeclarative1AnchorLine top() const;
- QDeclarative1AnchorLine bottom() const;
- QDeclarative1AnchorLine verticalCenter() const;
- Q_DISABLE_COPY(QDeclarative1GraphicsWidget)
- Q_DECLARE_PRIVATE(QDeclarative1GraphicsWidget)
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEGRAPHICSWIDGET_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativegridview.cpp b/src/qtquick1/graphicsitems/qdeclarativegridview.cpp
deleted file mode 100644
index dd002e5b6c..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativegridview.cpp
+++ /dev/null
@@ -1,3174 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativegridview_p.h"
-
-#include "QtQuick1/private/qdeclarativevisualitemmodel_p.h"
-#include "QtQuick1/private/qdeclarativeflickable_p_p.h"
-
-#include "QtQuick1/private/qdeclarativesmoothedanimation_p_p.h"
-#include <QtDeclarative/private/qdeclarativeguard_p.h>
-
-#include <QKeyEvent>
-
-#include <qmath.h>
-#include <math.h>
-#include "qplatformdefs.h"
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QML_FLICK_SNAPONETHRESHOLD
-#define QML_FLICK_SNAPONETHRESHOLD 30
-#endif
-
-//----------------------------------------------------------------------------
-
-class FxGridItem1
-{
-public:
- FxGridItem1(QDeclarativeItem *i, QDeclarative1GridView *v) : item(i), view(v) {
- attached = static_cast<QDeclarative1GridViewAttached*>(qmlAttachedPropertiesObject<QDeclarative1GridView>(item));
- if (attached)
- attached->setView(view);
- }
- ~FxGridItem1() {}
-
- qreal rowPos() const {
- qreal rowPos = 0;
- if (view->flow() == QDeclarative1GridView::LeftToRight) {
- rowPos = item->y();
- } else {
- if (view->effectiveLayoutDirection() == Qt::RightToLeft)
- rowPos = -view->cellWidth()-item->x();
- else
- rowPos = item->x();
- }
- return rowPos;
- }
- qreal colPos() const {
- qreal colPos = 0;
- if (view->flow() == QDeclarative1GridView::LeftToRight) {
- if (view->effectiveLayoutDirection() == Qt::RightToLeft) {
- int colSize = view->cellWidth();
- int columns = view->width()/colSize;
- colPos = colSize * (columns-1) - item->x();
- } else {
- colPos = item->x();
- }
- } else {
- colPos = item->y();
- }
-
- return colPos;
- }
-
- qreal endRowPos() const {
- if (view->flow() == QDeclarative1GridView::LeftToRight) {
- return item->y() + view->cellHeight() - 1;
- } else {
- if (view->effectiveLayoutDirection() == Qt::RightToLeft)
- return -item->x() - 1;
- else
- return item->x() + view->cellWidth() - 1;
- }
- }
- void setPosition(qreal col, qreal row) {
- if (view->effectiveLayoutDirection() == Qt::RightToLeft) {
- if (view->flow() == QDeclarative1GridView::LeftToRight) {
- int columns = view->width()/view->cellWidth();
- item->setPos(QPointF((view->cellWidth() * (columns-1) - col), row));
- } else {
- item->setPos(QPointF(-view->cellWidth()-row, col));
- }
- } else {
- if (view->flow() == QDeclarative1GridView::LeftToRight)
- item->setPos(QPointF(col, row));
- else
- item->setPos(QPointF(row, col));
- }
-
- }
- bool contains(qreal x, qreal y) const {
- return (x >= item->x() && x < item->x() + view->cellWidth() &&
- y >= item->y() && y < item->y() + view->cellHeight());
- }
-
- QDeclarativeItem *item;
- QDeclarative1GridView *view;
- QDeclarative1GridViewAttached *attached;
- int index;
-};
-
-//----------------------------------------------------------------------------
-
-class QDeclarative1GridViewPrivate : public QDeclarative1FlickablePrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1GridView)
-
-public:
- QDeclarative1GridViewPrivate()
- : currentItem(0), layoutDirection(Qt::LeftToRight), flow(QDeclarative1GridView::LeftToRight)
- , visibleIndex(0) , currentIndex(-1)
- , cellWidth(100), cellHeight(100), columns(1), requestedIndex(-1), itemCount(0)
- , highlightRangeStart(0), highlightRangeEnd(0)
- , highlightRangeStartValid(false), highlightRangeEndValid(false)
- , highlightRange(QDeclarative1GridView::NoHighlightRange)
- , highlightComponent(0), highlight(0), trackedItem(0)
- , moveReason(Other), buffer(0), highlightXAnimator(0), highlightYAnimator(0)
- , highlightMoveDuration(150)
- , footerComponent(0), footer(0), headerComponent(0), header(0)
- , bufferMode(BufferBefore | BufferAfter), snapMode(QDeclarative1GridView::NoSnap)
- , ownModel(false), wrap(false), autoHighlight(true)
- , fixCurrentVisibility(false), lazyRelease(false), layoutScheduled(false)
- , deferredRelease(false), haveHighlightRange(false), currentIndexCleared(false) {}
-
- void init();
- void clear();
- FxGridItem1 *createItem(int modelIndex);
- void releaseItem(FxGridItem1 *item);
- void refill(qreal from, qreal to, bool doBuffer=false);
-
- void updateGrid();
- void scheduleLayout();
- void layout();
- void updateUnrequestedIndexes();
- void updateUnrequestedPositions();
- void updateTrackedItem();
- void createHighlight();
- void updateHighlight();
- void updateCurrent(int modelIndex);
- void updateHeader();
- void updateFooter();
- void fixupPosition();
-
- FxGridItem1 *visibleItem(int modelIndex) const {
- if (modelIndex >= visibleIndex && modelIndex < visibleIndex + visibleItems.count()) {
- for (int i = modelIndex - visibleIndex; i < visibleItems.count(); ++i) {
- FxGridItem1 *item = visibleItems.at(i);
- if (item->index == modelIndex)
- return item;
- }
- }
- return 0;
- }
-
- bool isRightToLeftTopToBottom() const {
- Q_Q(const QDeclarative1GridView);
- return flow == QDeclarative1GridView::TopToBottom && q->effectiveLayoutDirection() == Qt::RightToLeft;
- }
-
- void regenerate() {
- Q_Q(QDeclarative1GridView);
- if (q->isComponentComplete()) {
- clear();
- updateGrid();
- setPosition(0);
- q->refill();
- updateCurrent(currentIndex);
- }
- }
-
- void mirrorChange() {
- Q_Q(QDeclarative1GridView);
- regenerate();
- emit q->effectiveLayoutDirectionChanged();
- }
-
- qreal position() const {
- Q_Q(const QDeclarative1GridView);
- return flow == QDeclarative1GridView::LeftToRight ? q->contentY() : q->contentX();
- }
- void setPosition(qreal pos) {
- Q_Q(QDeclarative1GridView);
- if (flow == QDeclarative1GridView::LeftToRight) {
- q->QDeclarative1Flickable::setContentY(pos);
- q->QDeclarative1Flickable::setContentX(0);
- } else {
- if (q->effectiveLayoutDirection() == Qt::LeftToRight)
- q->QDeclarative1Flickable::setContentX(pos);
- else
- q->QDeclarative1Flickable::setContentX(-pos-size());
- q->QDeclarative1Flickable::setContentY(0);
- }
- }
- int size() const {
- Q_Q(const QDeclarative1GridView);
- return flow == QDeclarative1GridView::LeftToRight ? q->height() : q->width();
- }
- qreal originPosition() const {
- qreal pos = 0;
- if (!visibleItems.isEmpty())
- pos = visibleItems.first()->rowPos() - visibleIndex / columns * rowSize();
- return pos;
- }
-
- qreal lastPosition() const {
- qreal pos = 0;
- if (model && model->count())
- pos = rowPosAt(model->count() - 1) + rowSize();
- return pos;
- }
-
- qreal startPosition() const {
- return isRightToLeftTopToBottom() ? -lastPosition()+1 : originPosition();
- }
-
- qreal endPosition() const {
- return isRightToLeftTopToBottom() ? -originPosition()+1 : lastPosition();
-
- }
-
- bool isValid() const {
- return model && model->count() && model->isValid();
- }
-
- int rowSize() const {
- return flow == QDeclarative1GridView::LeftToRight ? cellHeight : cellWidth;
- }
- int colSize() const {
- return flow == QDeclarative1GridView::LeftToRight ? cellWidth : cellHeight;
- }
-
- qreal colPosAt(int modelIndex) const {
- if (FxGridItem1 *item = visibleItem(modelIndex))
- return item->colPos();
- if (!visibleItems.isEmpty()) {
- if (modelIndex < visibleIndex) {
- int count = (visibleIndex - modelIndex) % columns;
- int col = visibleItems.first()->colPos() / colSize();
- col = (columns - count + col) % columns;
- return col * colSize();
- } else {
- int count = columns - 1 - (modelIndex - visibleItems.last()->index - 1) % columns;
- return visibleItems.last()->colPos() - count * colSize();
- }
- } else {
- return (modelIndex % columns) * colSize();
- }
- return 0;
- }
- qreal rowPosAt(int modelIndex) const {
- if (FxGridItem1 *item = visibleItem(modelIndex))
- return item->rowPos();
- if (!visibleItems.isEmpty()) {
- if (modelIndex < visibleIndex) {
- int firstCol = visibleItems.first()->colPos() / colSize();
- int col = visibleIndex - modelIndex + (columns - firstCol - 1);
- int rows = col / columns;
- return visibleItems.first()->rowPos() - rows * rowSize();
- } else {
- int count = modelIndex - visibleItems.last()->index;
- int col = visibleItems.last()->colPos() + count * colSize();
- int rows = col / (columns * colSize());
- return visibleItems.last()->rowPos() + rows * rowSize();
- }
- } else {
- qreal pos = (modelIndex / columns) * rowSize();
- if (header)
- pos += headerSize();
- return pos;
- }
- return 0;
- }
-
- FxGridItem1 *firstVisibleItem() const {
- const qreal pos = isRightToLeftTopToBottom() ? -position()-size() : position();
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxGridItem1 *item = visibleItems.at(i);
- if (item->index != -1 && item->endRowPos() > pos)
- return item;
- }
- return visibleItems.count() ? visibleItems.first() : 0;
- }
-
- int lastVisibleIndex() const {
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxGridItem1 *item = visibleItems.at(i);
- if (item->index != -1)
- return item->index;
- }
- return -1;
- }
-
- // Map a model index to visibleItems list index.
- // These may differ if removed items are still present in the visible list,
- // e.g. doing a removal animation
- int mapFromModel(int modelIndex) const {
- if (modelIndex < visibleIndex || modelIndex >= visibleIndex + visibleItems.count())
- return -1;
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxGridItem1 *listItem = visibleItems.at(i);
- if (listItem->index == modelIndex)
- return i + visibleIndex;
- if (listItem->index > modelIndex)
- return -1;
- }
- return -1; // Not in visibleList
- }
-
- qreal snapPosAt(qreal pos) const {
- Q_Q(const QDeclarative1GridView);
- qreal snapPos = 0;
- if (!visibleItems.isEmpty()) {
- qreal highlightStart = isRightToLeftTopToBottom() && highlightRangeStartValid ? size()-highlightRangeEnd : highlightRangeStart;
- pos += highlightStart;
- pos += rowSize()/2;
- snapPos = visibleItems.first()->rowPos() - visibleIndex / columns * rowSize();
- snapPos = pos - fmodf(pos - snapPos, qreal(rowSize()));
- snapPos -= highlightStart;
- qreal maxExtent;
- qreal minExtent;
- if (isRightToLeftTopToBottom()) {
- maxExtent = q->minXExtent();
- minExtent = q->maxXExtent();
- } else {
- maxExtent = flow == QDeclarative1GridView::LeftToRight ? -q->maxYExtent() : -q->maxXExtent();
- minExtent = flow == QDeclarative1GridView::LeftToRight ? -q->minYExtent() : -q->minXExtent();
- }
- if (snapPos > maxExtent)
- snapPos = maxExtent;
- if (snapPos < minExtent)
- snapPos = minExtent;
- }
- return snapPos;
- }
-
- FxGridItem1 *snapItemAt(qreal pos) {
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxGridItem1 *item = visibleItems[i];
- if (item->index == -1)
- continue;
- qreal itemTop = item->rowPos();
- if (itemTop+rowSize()/2 >= pos && itemTop - rowSize()/2 <= pos)
- return item;
- }
- return 0;
- }
-
- int snapIndex() {
- int index = currentIndex;
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxGridItem1 *item = visibleItems[i];
- if (item->index == -1)
- continue;
- qreal itemTop = item->rowPos();
- if (itemTop >= highlight->rowPos()-rowSize()/2 && itemTop < highlight->rowPos()+rowSize()/2) {
- index = item->index;
- if (item->colPos() >= highlight->colPos()-colSize()/2 && item->colPos() < highlight->colPos()+colSize()/2)
- return item->index;
- }
- }
- return index;
- }
-
- qreal headerSize() const {
- if (!header)
- return 0.0;
-
- return flow == QDeclarative1GridView::LeftToRight
- ? header->item->height()
- : header->item->width();
- }
-
-
- virtual void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) {
- Q_Q(const QDeclarative1GridView);
- QDeclarative1FlickablePrivate::itemGeometryChanged(item, newGeometry, oldGeometry);
- if (item == q) {
- if (newGeometry.height() != oldGeometry.height()
- || newGeometry.width() != oldGeometry.width()) {
- if (q->isComponentComplete()) {
- updateGrid();
- scheduleLayout();
- }
- }
- } else if ((header && header->item == item) || (footer && footer->item == item)) {
- if (header)
- updateHeader();
- if (footer)
- updateFooter();
- }
- }
-
- void positionViewAtIndex(int index, int mode);
- virtual void fixup(AxisData &data, qreal minExtent, qreal maxExtent);
- virtual void flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
- QDeclarative1TimeLineCallback::Callback fixupCallback, qreal velocity);
-
- // for debugging only
- void checkVisible() const {
- int skip = 0;
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxGridItem1 *listItem = visibleItems.at(i);
- if (listItem->index == -1) {
- ++skip;
- } else if (listItem->index != visibleIndex + i - skip) {
- for (int j = 0; j < visibleItems.count(); j++)
- qDebug() << " index" << j << "item index" << visibleItems.at(j)->index;
- qFatal("index %d %d %d", visibleIndex, i, listItem->index);
- }
- }
- }
-
- QDeclarativeGuard<QDeclarative1VisualModel> model;
- QVariant modelVariant;
- QList<FxGridItem1*> visibleItems;
- QHash<QDeclarativeItem*,int> unrequestedItems;
- FxGridItem1 *currentItem;
- Qt::LayoutDirection layoutDirection;
- QDeclarative1GridView::Flow flow;
- int visibleIndex;
- int currentIndex;
- int cellWidth;
- int cellHeight;
- int columns;
- int requestedIndex;
- int itemCount;
- qreal highlightRangeStart;
- qreal highlightRangeEnd;
- bool highlightRangeStartValid;
- bool highlightRangeEndValid;
- QDeclarative1GridView::HighlightRangeMode highlightRange;
- QDeclarativeComponent *highlightComponent;
- FxGridItem1 *highlight;
- FxGridItem1 *trackedItem;
- enum MovementReason { Other, SetIndex, Mouse };
- MovementReason moveReason;
- int buffer;
- QSmoothedAnimation_1 *highlightXAnimator;
- QSmoothedAnimation_1 *highlightYAnimator;
- int highlightMoveDuration;
- QDeclarativeComponent *footerComponent;
- FxGridItem1 *footer;
- QDeclarativeComponent *headerComponent;
- FxGridItem1 *header;
- enum BufferMode { NoBuffer = 0x00, BufferBefore = 0x01, BufferAfter = 0x02 };
- int bufferMode;
- QDeclarative1GridView::SnapMode snapMode;
-
- bool ownModel : 1;
- bool wrap : 1;
- bool autoHighlight : 1;
- bool fixCurrentVisibility : 1;
- bool lazyRelease : 1;
- bool layoutScheduled : 1;
- bool deferredRelease : 1;
- bool haveHighlightRange : 1;
- bool currentIndexCleared : 1;
-};
-
-void QDeclarative1GridViewPrivate::init()
-{
- Q_Q(QDeclarative1GridView);
- QObject::connect(q, SIGNAL(movementEnded()), q, SLOT(animStopped()));
- q->setFlag(QGraphicsItem::ItemIsFocusScope);
- q->setFlickableDirection(QDeclarative1Flickable::VerticalFlick);
- addItemChangeListener(this, Geometry);
-}
-
-void QDeclarative1GridViewPrivate::clear()
-{
- for (int i = 0; i < visibleItems.count(); ++i)
- releaseItem(visibleItems.at(i));
- visibleItems.clear();
- visibleIndex = 0;
- releaseItem(currentItem);
- currentItem = 0;
- createHighlight();
- trackedItem = 0;
- itemCount = 0;
-}
-
-FxGridItem1 *QDeclarative1GridViewPrivate::createItem(int modelIndex)
-{
- Q_Q(QDeclarative1GridView);
- // create object
- requestedIndex = modelIndex;
- FxGridItem1 *listItem = 0;
- if (QDeclarativeItem *item = model->item(modelIndex, false)) {
- listItem = new FxGridItem1(item, q);
- listItem->index = modelIndex;
- if (model->completePending()) {
- // complete
- listItem->item->setZValue(1);
- listItem->item->setParentItem(q->contentItem());
- model->completeItem();
- } else {
- listItem->item->setParentItem(q->contentItem());
- }
- unrequestedItems.remove(listItem->item);
- }
- requestedIndex = -1;
- return listItem;
-}
-
-
-void QDeclarative1GridViewPrivate::releaseItem(FxGridItem1 *item)
-{
- Q_Q(QDeclarative1GridView);
- if (!item || !model)
- return;
- if (trackedItem == item) {
- QObject::disconnect(trackedItem->item, SIGNAL(yChanged()), q, SLOT(trackedPositionChanged()));
- QObject::disconnect(trackedItem->item, SIGNAL(xChanged()), q, SLOT(trackedPositionChanged()));
- trackedItem = 0;
- }
- if (model->release(item->item) == 0) {
- // item was not destroyed, and we no longer reference it.
- unrequestedItems.insert(item->item, model->indexOf(item->item, q));
- }
- delete item;
-}
-
-void QDeclarative1GridViewPrivate::refill(qreal from, qreal to, bool doBuffer)
-{
- Q_Q(QDeclarative1GridView);
- if (!isValid() || !q->isComponentComplete())
- return;
- itemCount = model->count();
- qreal bufferFrom = from - buffer;
- qreal bufferTo = to + buffer;
- qreal fillFrom = from;
- qreal fillTo = to;
- if (doBuffer && (bufferMode & BufferAfter))
- fillTo = bufferTo;
- if (doBuffer && (bufferMode & BufferBefore))
- fillFrom = bufferFrom;
-
- bool changed = false;
-
- int colPos = colPosAt(visibleIndex);
- int rowPos = rowPosAt(visibleIndex);
- int modelIndex = visibleIndex;
- if (visibleItems.count()) {
- rowPos = visibleItems.last()->rowPos();
- colPos = visibleItems.last()->colPos() + colSize();
- if (colPos > colSize() * (columns-1)) {
- colPos = 0;
- rowPos += rowSize();
- }
- int i = visibleItems.count() - 1;
- while (i > 0 && visibleItems.at(i)->index == -1)
- --i;
- modelIndex = visibleItems.at(i)->index + 1;
- }
-
- if (visibleItems.count() && (fillFrom > rowPos + rowSize()*2
- || fillTo < rowPosAt(visibleIndex) - rowSize())) {
- // We've jumped more than a page. Estimate which items are now
- // visible and fill from there.
- int count = (fillFrom - (rowPos + rowSize())) / (rowSize()) * columns;
- for (int i = 0; i < visibleItems.count(); ++i)
- releaseItem(visibleItems.at(i));
- visibleItems.clear();
- modelIndex += count;
- if (modelIndex >= model->count())
- modelIndex = model->count() - 1;
- else if (modelIndex < 0)
- modelIndex = 0;
- modelIndex = modelIndex / columns * columns;
- visibleIndex = modelIndex;
- colPos = colPosAt(visibleIndex);
- rowPos = rowPosAt(visibleIndex);
- }
-
- int colNum = colPos / colSize();
-
- FxGridItem1 *item = 0;
-
- // Item creation and release is staggered in order to avoid
- // creating/releasing multiple items in one frame
- // while flicking (as much as possible).
- while (modelIndex < model->count() && rowPos <= fillTo + rowSize()*(columns - colNum)/(columns+1)) {
-// qDebug() << "refill: append item" << modelIndex;
- if (!(item = createItem(modelIndex)))
- break;
- item->setPosition(colPos, rowPos);
- visibleItems.append(item);
- colPos += colSize();
- colNum++;
- if (colPos > colSize() * (columns-1)) {
- colPos = 0;
- colNum = 0;
- rowPos += rowSize();
- }
- ++modelIndex;
- changed = true;
- if (doBuffer) // never buffer more than one item per frame
- break;
- }
-
- if (visibleItems.count()) {
- rowPos = visibleItems.first()->rowPos();
- colPos = visibleItems.first()->colPos() - colSize();
- if (colPos < 0) {
- colPos = colSize() * (columns - 1);
- rowPos -= rowSize();
- }
- }
- colNum = colPos / colSize();
- while (visibleIndex > 0 && rowPos + rowSize() - 1 >= fillFrom - rowSize()*(colNum+1)/(columns+1)){
-// qDebug() << "refill: prepend item" << visibleIndex-1 << "top pos" << rowPos << colPos;
- if (!(item = createItem(visibleIndex-1)))
- break;
- --visibleIndex;
- item->setPosition(colPos, rowPos);
- visibleItems.prepend(item);
- colPos -= colSize();
- colNum--;
- if (colPos < 0) {
- colPos = colSize() * (columns - 1);
- colNum = columns-1;
- rowPos -= rowSize();
- }
- changed = true;
- if (doBuffer) // never buffer more than one item per frame
- break;
- }
-
- if (!lazyRelease || !changed || deferredRelease) { // avoid destroying items in the same frame that we create
- while (visibleItems.count() > 1
- && (item = visibleItems.first())
- && item->rowPos()+rowSize()-1 < bufferFrom - rowSize()*(item->colPos()/colSize()+1)/(columns+1)) {
- if (item->attached->delayRemove())
- break;
-// qDebug() << "refill: remove first" << visibleIndex << "top end pos" << item->endRowPos();
- if (item->index != -1)
- visibleIndex++;
- visibleItems.removeFirst();
- releaseItem(item);
- changed = true;
- }
- while (visibleItems.count() > 1
- && (item = visibleItems.last())
- && item->rowPos() > bufferTo + rowSize()*(columns - item->colPos()/colSize())/(columns+1)) {
- if (item->attached->delayRemove())
- break;
-// qDebug() << "refill: remove last" << visibleIndex+visibleItems.count()-1;
- visibleItems.removeLast();
- releaseItem(item);
- changed = true;
- }
- deferredRelease = false;
- } else {
- deferredRelease = true;
- }
- if (changed) {
- if (header)
- updateHeader();
- if (footer)
- updateFooter();
- if (flow == QDeclarative1GridView::LeftToRight)
- q->setContentHeight(endPosition() - startPosition());
- else
- q->setContentWidth(endPosition() - startPosition());
- } else if (!doBuffer && buffer && bufferMode != NoBuffer) {
- refill(from, to, true);
- }
- lazyRelease = false;
-}
-
-void QDeclarative1GridViewPrivate::updateGrid()
-{
- Q_Q(QDeclarative1GridView);
-
- columns = (int)qMax((flow == QDeclarative1GridView::LeftToRight ? q->width() : q->height()) / colSize(), qreal(1.));
- if (isValid()) {
- if (flow == QDeclarative1GridView::LeftToRight)
- q->setContentHeight(endPosition() - startPosition());
- else
- q->setContentWidth(lastPosition() - originPosition());
- }
-}
-
-void QDeclarative1GridViewPrivate::scheduleLayout()
-{
- Q_Q(QDeclarative1GridView);
- if (!layoutScheduled) {
- layoutScheduled = true;
- QCoreApplication::postEvent(q, new QEvent(QEvent::User), Qt::HighEventPriority);
- }
-}
-
-void QDeclarative1GridViewPrivate::layout()
-{
- Q_Q(QDeclarative1GridView);
- layoutScheduled = false;
- if (!isValid() && !visibleItems.count()) {
- clear();
- return;
- }
- if (visibleItems.count()) {
- qreal rowPos = visibleItems.first()->rowPos();
- qreal colPos = visibleItems.first()->colPos();
- int col = visibleIndex % columns;
- if (colPos != col * colSize()) {
- colPos = col * colSize();
- visibleItems.first()->setPosition(colPos, rowPos);
- }
- for (int i = 1; i < visibleItems.count(); ++i) {
- FxGridItem1 *item = visibleItems.at(i);
- colPos += colSize();
- if (colPos > colSize() * (columns-1)) {
- colPos = 0;
- rowPos += rowSize();
- }
- item->setPosition(colPos, rowPos);
- }
- }
- if (header)
- updateHeader();
- if (footer)
- updateFooter();
- q->refill();
- updateHighlight();
- moveReason = Other;
- if (flow == QDeclarative1GridView::LeftToRight) {
- q->setContentHeight(endPosition() - startPosition());
- fixupY();
- } else {
- q->setContentWidth(endPosition() - startPosition());
- fixupX();
- }
- updateUnrequestedPositions();
-}
-
-void QDeclarative1GridViewPrivate::updateUnrequestedIndexes()
-{
- Q_Q(QDeclarative1GridView);
- QHash<QDeclarativeItem*,int>::iterator it;
- for (it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it)
- *it = model->indexOf(it.key(), q);
-}
-
-void QDeclarative1GridViewPrivate::updateUnrequestedPositions()
-{
- QHash<QDeclarativeItem*,int>::const_iterator it;
- for (it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it) {
- QDeclarativeItem *item = it.key();
- if (flow == QDeclarative1GridView::LeftToRight) {
- item->setPos(QPointF(colPosAt(*it), rowPosAt(*it)));
- } else {
- if (isRightToLeftTopToBottom())
- item->setPos(QPointF(-rowPosAt(*it)-item->width(), colPosAt(*it)));
- else
- item->setPos(QPointF(rowPosAt(*it), colPosAt(*it)));
- }
- }
-}
-
-void QDeclarative1GridViewPrivate::updateTrackedItem()
-{
- Q_Q(QDeclarative1GridView);
- FxGridItem1 *item = currentItem;
- if (highlight)
- item = highlight;
-
- if (trackedItem && item != trackedItem) {
- QObject::disconnect(trackedItem->item, SIGNAL(yChanged()), q, SLOT(trackedPositionChanged()));
- QObject::disconnect(trackedItem->item, SIGNAL(xChanged()), q, SLOT(trackedPositionChanged()));
- trackedItem = 0;
- }
-
- if (!trackedItem && item) {
- trackedItem = item;
- QObject::connect(trackedItem->item, SIGNAL(yChanged()), q, SLOT(trackedPositionChanged()));
- QObject::connect(trackedItem->item, SIGNAL(xChanged()), q, SLOT(trackedPositionChanged()));
- }
- if (trackedItem)
- q->trackedPositionChanged();
-}
-
-void QDeclarative1GridViewPrivate::createHighlight()
-{
- Q_Q(QDeclarative1GridView);
- bool changed = false;
- if (highlight) {
- if (trackedItem == highlight)
- trackedItem = 0;
- if (highlight->item->scene())
- highlight->item->scene()->removeItem(highlight->item);
- highlight->item->deleteLater();
- delete highlight;
- highlight = 0;
- delete highlightXAnimator;
- delete highlightYAnimator;
- highlightXAnimator = 0;
- highlightYAnimator = 0;
- changed = true;
- }
-
- if (currentItem) {
- QDeclarativeItem *item = 0;
- if (highlightComponent) {
- QDeclarativeContext *highlightContext = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = highlightComponent->create(highlightContext);
- if (nobj) {
- QDeclarative_setParent_noEvent(highlightContext, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete highlightContext;
- }
- } else {
- item = new QDeclarativeItem;
- QDeclarative_setParent_noEvent(item, q->contentItem());
- item->setParentItem(q->contentItem());
- }
- if (item) {
- QDeclarative_setParent_noEvent(item, q->contentItem());
- item->setParentItem(q->contentItem());
- highlight = new FxGridItem1(item, q);
- if (currentItem && autoHighlight)
- highlight->setPosition(currentItem->colPos(), currentItem->rowPos());
- highlightXAnimator = new QSmoothedAnimation_1(q);
- highlightXAnimator->target = QDeclarativeProperty(highlight->item, QLatin1String("x"));
- highlightXAnimator->userDuration = highlightMoveDuration;
- highlightYAnimator = new QSmoothedAnimation_1(q);
- highlightYAnimator->target = QDeclarativeProperty(highlight->item, QLatin1String("y"));
- highlightYAnimator->userDuration = highlightMoveDuration;
- if (autoHighlight) {
- highlightXAnimator->restart();
- highlightYAnimator->restart();
- }
- changed = true;
- }
- }
- if (changed)
- emit q->highlightItemChanged();
-}
-
-void QDeclarative1GridViewPrivate::updateHighlight()
-{
- if ((!currentItem && highlight) || (currentItem && !highlight))
- createHighlight();
- if (currentItem && autoHighlight && highlight && !hData.moving && !vData.moving) {
- // auto-update highlight
- highlightXAnimator->to = currentItem->item->x();
- highlightYAnimator->to = currentItem->item->y();
- highlight->item->setWidth(currentItem->item->width());
- highlight->item->setHeight(currentItem->item->height());
- highlightXAnimator->restart();
- highlightYAnimator->restart();
- }
- updateTrackedItem();
-}
-
-void QDeclarative1GridViewPrivate::updateCurrent(int modelIndex)
-{
- Q_Q(QDeclarative1GridView);
- if (!q->isComponentComplete() || !isValid() || modelIndex < 0 || modelIndex >= model->count()) {
- if (currentItem) {
- currentItem->attached->setIsCurrentItem(false);
- releaseItem(currentItem);
- currentItem = 0;
- currentIndex = modelIndex;
- emit q->currentIndexChanged();
- updateHighlight();
- } else if (currentIndex != modelIndex) {
- currentIndex = modelIndex;
- emit q->currentIndexChanged();
- }
- return;
- }
-
- if (currentItem && currentIndex == modelIndex) {
- updateHighlight();
- return;
- }
-
- FxGridItem1 *oldCurrentItem = currentItem;
- currentIndex = modelIndex;
- currentItem = createItem(modelIndex);
- fixCurrentVisibility = true;
- if (oldCurrentItem && (!currentItem || oldCurrentItem->item != currentItem->item))
- oldCurrentItem->attached->setIsCurrentItem(false);
- if (currentItem) {
- currentItem->setPosition(colPosAt(modelIndex), rowPosAt(modelIndex));
- currentItem->item->setFocus(true);
- currentItem->attached->setIsCurrentItem(true);
- }
- updateHighlight();
- emit q->currentIndexChanged();
- releaseItem(oldCurrentItem);
-}
-
-void QDeclarative1GridViewPrivate::updateFooter()
-{
- Q_Q(QDeclarative1GridView);
- if (!footer && footerComponent) {
- QDeclarativeItem *item = 0;
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = footerComponent->create(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete context;
- }
- if (item) {
- QDeclarative_setParent_noEvent(item, q->contentItem());
- item->setParentItem(q->contentItem());
- item->setZValue(1);
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
- itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- footer = new FxGridItem1(item, q);
- }
- }
- if (footer) {
- qreal colOffset = 0;
- qreal rowOffset;
- if (isRightToLeftTopToBottom()) {
- rowOffset = footer->item->width()-cellWidth;
- } else {
- rowOffset = 0;
- if (q->effectiveLayoutDirection() == Qt::RightToLeft)
- colOffset = footer->item->width()-cellWidth;
- }
- if (visibleItems.count()) {
- qreal endPos = lastPosition();
- if (lastVisibleIndex() == model->count()-1) {
- footer->setPosition(colOffset, endPos + rowOffset);
- } else {
- qreal visiblePos = isRightToLeftTopToBottom() ? -position() : position() + size();
- if (endPos <= visiblePos || footer->endRowPos() < endPos + rowOffset)
- footer->setPosition(colOffset, endPos + rowOffset);
- }
- } else {
- qreal endPos = 0;
- if (header) {
- endPos += flow == QDeclarative1GridView::LeftToRight ? header->item->height() : header->item->width();
- }
- footer->setPosition(colOffset, endPos);
- }
- }
-}
-
-void QDeclarative1GridViewPrivate::updateHeader()
-{
- Q_Q(QDeclarative1GridView);
- if (!header && headerComponent) {
- QDeclarativeItem *item = 0;
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = headerComponent->create(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete context;
- }
- if (item) {
- QDeclarative_setParent_noEvent(item, q->contentItem());
- item->setParentItem(q->contentItem());
- item->setZValue(1);
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
- itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- header = new FxGridItem1(item, q);
- }
- }
- if (header) {
- qreal colOffset = 0;
- qreal rowOffset;
- if (isRightToLeftTopToBottom()) {
- rowOffset = -cellWidth;
- } else {
- rowOffset = -headerSize();
- if (q->effectiveLayoutDirection() == Qt::RightToLeft)
- colOffset = header->item->width()-cellWidth;
- }
- if (visibleItems.count()) {
- qreal startPos = originPosition();
- if (visibleIndex == 0) {
- header->setPosition(colOffset, startPos + rowOffset);
- } else {
- qreal tempPos = isRightToLeftTopToBottom() ? -position()-size() : position();
- qreal headerPos = isRightToLeftTopToBottom() ? header->rowPos() + cellWidth - headerSize() : header->rowPos();
- if (tempPos <= startPos || headerPos > startPos + rowOffset)
- header->setPosition(colOffset, startPos + rowOffset);
- }
- } else {
- header->setPosition(colOffset, 0);
- }
- }
-}
-
-void QDeclarative1GridViewPrivate::fixupPosition()
-{
- moveReason = Other;
- if (flow == QDeclarative1GridView::LeftToRight)
- fixupY();
- else
- fixupX();
-}
-
-void QDeclarative1GridViewPrivate::fixup(AxisData &data, qreal minExtent, qreal maxExtent)
-{
- if ((flow == QDeclarative1GridView::TopToBottom && &data == &vData)
- || (flow == QDeclarative1GridView::LeftToRight && &data == &hData))
- return;
-
- fixupMode = moveReason == Mouse ? fixupMode : Immediate;
-
- qreal highlightStart;
- qreal highlightEnd;
- qreal viewPos;
- if (isRightToLeftTopToBottom()) {
- // Handle Right-To-Left exceptions
- viewPos = -position()-size();
- highlightStart = highlightRangeStartValid ? size()-highlightRangeEnd : highlightRangeStart;
- highlightEnd = highlightRangeEndValid ? size()-highlightRangeStart : highlightRangeEnd;
- } else {
- viewPos = position();
- highlightStart = highlightRangeStart;
- highlightEnd = highlightRangeEnd;
- }
-
- bool strictHighlightRange = haveHighlightRange && highlightRange == QDeclarative1GridView::StrictlyEnforceRange;
-
- if (snapMode != QDeclarative1GridView::NoSnap) {
- qreal tempPosition = isRightToLeftTopToBottom() ? -position()-size() : position();
- if (snapMode == QDeclarative1GridView::SnapOneRow && moveReason == Mouse) {
- // if we've been dragged < rowSize()/2 then bias towards the next row
- qreal dist = data.move.value() - (data.pressPos - data.dragStartOffset);
- qreal bias = 0;
- if (data.velocity > 0 && dist > QML_FLICK_SNAPONETHRESHOLD && dist < rowSize()/2)
- bias = rowSize()/2;
- else if (data.velocity < 0 && dist < -QML_FLICK_SNAPONETHRESHOLD && dist > -rowSize()/2)
- bias = -rowSize()/2;
- if (isRightToLeftTopToBottom())
- bias = -bias;
- tempPosition -= bias;
- }
- FxGridItem1 *topItem = snapItemAt(tempPosition+highlightStart);
- if (!topItem && strictHighlightRange && currentItem) {
- // StrictlyEnforceRange always keeps an item in range
- updateHighlight();
- topItem = currentItem;
- }
- FxGridItem1 *bottomItem = snapItemAt(tempPosition+highlightEnd);
- if (!bottomItem && strictHighlightRange && currentItem) {
- // StrictlyEnforceRange always keeps an item in range
- updateHighlight();
- bottomItem = currentItem;
- }
- qreal pos;
- bool isInBounds = -position() > maxExtent && -position() <= minExtent;
- if (topItem && (isInBounds || strictHighlightRange)) {
- if (topItem->index == 0 && header && tempPosition+highlightStart < header->rowPos()+headerSize()/2 && !strictHighlightRange) {
- pos = isRightToLeftTopToBottom() ? - header->rowPos() + highlightStart - size() : header->rowPos() - highlightStart;
- } else {
- if (isRightToLeftTopToBottom())
- pos = qMax(qMin(-topItem->rowPos() + highlightStart - size(), -maxExtent), -minExtent);
- else
- pos = qMax(qMin(topItem->rowPos() - highlightStart, -maxExtent), -minExtent);
- }
- } else if (bottomItem && isInBounds) {
- if (isRightToLeftTopToBottom())
- pos = qMax(qMin(-bottomItem->rowPos() + highlightEnd - size(), -maxExtent), -minExtent);
- else
- pos = qMax(qMin(bottomItem->rowPos() - highlightEnd, -maxExtent), -minExtent);
- } else {
- QDeclarative1FlickablePrivate::fixup(data, minExtent, maxExtent);
- return;
- }
- qreal dist = qAbs(data.move + pos);
- if (dist > 0) {
- timeline.reset(data.move);
- if (fixupMode != Immediate) {
- timeline.move(data.move, -pos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
- data.fixingUp = true;
- } else {
- timeline.set(data.move, -pos);
- }
- vTime = timeline.time();
- }
- } else if (haveHighlightRange && highlightRange == QDeclarative1GridView::StrictlyEnforceRange) {
- if (currentItem) {
- updateHighlight();
- qreal pos = currentItem->rowPos();
- if (viewPos < pos + rowSize() - highlightEnd)
- viewPos = pos + rowSize() - highlightEnd;
- if (viewPos > pos - highlightStart)
- viewPos = pos - highlightStart;
- if (isRightToLeftTopToBottom())
- viewPos = -viewPos-size();
- timeline.reset(data.move);
- if (viewPos != position()) {
- if (fixupMode != Immediate) {
- timeline.move(data.move, -viewPos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
- data.fixingUp = true;
- } else {
- timeline.set(data.move, -viewPos);
- }
- }
- vTime = timeline.time();
- }
- } else {
- QDeclarative1FlickablePrivate::fixup(data, minExtent, maxExtent);
- }
- data.inOvershoot = false;
- fixupMode = Normal;
-}
-
-void QDeclarative1GridViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
- QDeclarative1TimeLineCallback::Callback fixupCallback, qreal velocity)
-{
- Q_Q(QDeclarative1GridView);
- data.fixingUp = false;
- moveReason = Mouse;
- if ((!haveHighlightRange || highlightRange != QDeclarative1GridView::StrictlyEnforceRange)
- && snapMode == QDeclarative1GridView::NoSnap) {
- QDeclarative1FlickablePrivate::flick(data, minExtent, maxExtent, vSize, fixupCallback, velocity);
- return;
- }
- qreal maxDistance = 0;
- qreal dataValue = isRightToLeftTopToBottom() ? -data.move.value()+size() : data.move.value();
- // -ve velocity means list is moving up/left
- if (velocity > 0) {
- if (data.move.value() < minExtent) {
- if (snapMode == QDeclarative1GridView::SnapOneRow) {
- // if we've been dragged < averageSize/2 then bias towards the next item
- qreal dist = data.move.value() - (data.pressPos - data.dragStartOffset);
- qreal bias = dist < rowSize()/2 ? rowSize()/2 : 0;
- if (isRightToLeftTopToBottom())
- bias = -bias;
- data.flickTarget = -snapPosAt(-dataValue - bias);
- maxDistance = qAbs(data.flickTarget - data.move.value());
- velocity = maxVelocity;
- } else {
- maxDistance = qAbs(minExtent - data.move.value());
- }
- }
- if (snapMode == QDeclarative1GridView::NoSnap && highlightRange != QDeclarative1GridView::StrictlyEnforceRange)
- data.flickTarget = minExtent;
- } else {
- if (data.move.value() > maxExtent) {
- if (snapMode == QDeclarative1GridView::SnapOneRow) {
- // if we've been dragged < averageSize/2 then bias towards the next item
- qreal dist = data.move.value() - (data.pressPos - data.dragStartOffset);
- qreal bias = -dist < rowSize()/2 ? rowSize()/2 : 0;
- if (isRightToLeftTopToBottom())
- bias = -bias;
- data.flickTarget = -snapPosAt(-dataValue + bias);
- maxDistance = qAbs(data.flickTarget - data.move.value());
- velocity = -maxVelocity;
- } else {
- maxDistance = qAbs(maxExtent - data.move.value());
- }
- }
- if (snapMode == QDeclarative1GridView::NoSnap && highlightRange != QDeclarative1GridView::StrictlyEnforceRange)
- data.flickTarget = maxExtent;
- }
-
- bool overShoot = boundsBehavior == QDeclarative1Flickable::DragAndOvershootBounds;
-
- if (maxDistance > 0 || overShoot) {
- // This mode requires the grid to stop exactly on a row boundary.
- qreal v = velocity;
- if (maxVelocity != -1 && maxVelocity < qAbs(v)) {
- if (v < 0)
- v = -maxVelocity;
- else
- v = maxVelocity;
- }
- qreal accel = deceleration;
- qreal v2 = v * v;
- qreal overshootDist = 0.0;
- if ((maxDistance > 0.0 && v2 / (2.0f * maxDistance) < accel) || snapMode == QDeclarative1GridView::SnapOneRow) {
- // + rowSize()/4 to encourage moving at least one item in the flick direction
- qreal dist = v2 / (accel * 2.0) + rowSize()/4;
- dist = qMin(dist, maxDistance);
- if (v > 0)
- dist = -dist;
- if (snapMode != QDeclarative1GridView::SnapOneRow) {
- qreal distTemp = isRightToLeftTopToBottom() ? -dist : dist;
- data.flickTarget = -snapPosAt(-dataValue + distTemp);
- }
- data.flickTarget = isRightToLeftTopToBottom() ? -data.flickTarget+size() : data.flickTarget;
- if (overShoot) {
- if (data.flickTarget >= minExtent) {
- overshootDist = overShootDistance(vSize);
- data.flickTarget += overshootDist;
- } else if (data.flickTarget <= maxExtent) {
- overshootDist = overShootDistance(vSize);
- data.flickTarget -= overshootDist;
- }
- }
- qreal adjDist = -data.flickTarget + data.move.value();
- if (qAbs(adjDist) > qAbs(dist)) {
- // Prevent painfully slow flicking - adjust velocity to suit flickDeceleration
- qreal adjv2 = accel * 2.0f * qAbs(adjDist);
- if (adjv2 > v2) {
- v2 = adjv2;
- v = qSqrt(v2);
- if (dist > 0)
- v = -v;
- }
- }
- dist = adjDist;
- accel = v2 / (2.0f * qAbs(dist));
- } else {
- data.flickTarget = velocity > 0 ? minExtent : maxExtent;
- overshootDist = overShoot ? overShootDistance(vSize) : 0;
- }
- timeline.reset(data.move);
- timeline.accel(data.move, v, accel, maxDistance + overshootDist);
- timeline.callback(QDeclarative1TimeLineCallback(&data.move, fixupCallback, this));
- if (!hData.flicking && q->xflick()) {
- hData.flicking = true;
- emit q->flickingChanged();
- emit q->flickingHorizontallyChanged();
- emit q->flickStarted();
- }
- if (!vData.flicking && q->yflick()) {
- vData.flicking = true;
- emit q->flickingChanged();
- emit q->flickingVerticallyChanged();
- emit q->flickStarted();
- }
- } else {
- timeline.reset(data.move);
- fixup(data, minExtent, maxExtent);
- }
-}
-
-
-//----------------------------------------------------------------------------
-
-/*!
- \qmlclass GridView QDeclarative1GridView
- \inqmlmodule QtQuick 1
- \since QtQuick 1.0
- \ingroup qml-view-elements
-
- \inherits Flickable
- \brief The GridView item provides a grid view of items provided by a model.
-
- A GridView displays data from models created from built-in QML elements like ListModel
- and XmlListModel, or custom model classes defined in C++ that inherit from
- QAbstractListModel.
-
- A GridView has a \l model, which defines the data to be displayed, and
- a \l delegate, which defines how the data should be displayed. Items in a
- GridView are laid out horizontally or vertically. Grid views are inherently flickable
- as GridView inherits from \l Flickable.
-
- \section1 Example Usage
-
- The following example shows the definition of a simple list model defined
- in a file called \c ContactModel.qml:
-
- \snippet doc/src/snippets/qtquick1/gridview/ContactModel.qml 0
-
- \div {class="float-right"}
- \inlineimage gridview-simple.png
- \enddiv
-
- This model can be referenced as \c ContactModel in other QML files. See \l{QML Modules}
- for more information about creating reusable components like this.
-
- Another component can display this model data in a GridView, as in the following
- example, which creates a \c ContactModel component for its model, and a \l Column element
- (containing \l Image and \l Text elements) for its delegate.
-
- \clearfloat
- \snippet doc/src/snippets/qtquick1/gridview/gridview.qml import
- \codeline
- \snippet doc/src/snippets/qtquick1/gridview/gridview.qml classdocs simple
-
- \div {class="float-right"}
- \inlineimage gridview-highlight.png
- \enddiv
-
- The view will create a new delegate for each item in the model. Note that the delegate
- is able to access the model's \c name and \c portrait data directly.
-
- An improved grid view is shown below. The delegate is visually improved and is moved
- into a separate \c contactDelegate component.
-
- \clearfloat
- \snippet doc/src/snippets/qtquick1/gridview/gridview.qml classdocs advanced
-
- The currently selected item is highlighted with a blue \l Rectangle using the \l highlight property,
- and \c focus is set to \c true to enable keyboard navigation for the grid view.
- The grid view itself is a focus scope (see \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page} for more details).
-
- Delegates are instantiated as needed and may be destroyed at any time.
- State should \e never be stored in a delegate.
-
- GridView attaches a number of properties to the root item of the delegate, for example
- \c {GridView.isCurrentItem}. In the following example, the root delegate item can access
- this attached property directly as \c GridView.isCurrentItem, while the child
- \c contactInfo object must refer to this property as \c wrapper.GridView.isCurrentItem.
-
- \snippet doc/src/snippets/qtquick1/gridview/gridview.qml isCurrentItem
-
- \note Views do not set the \l{Item::}{clip} property automatically.
- If the view is not clipped by another item or the screen, it will be necessary
- to set this property to true in order to clip the items that are partially or
- fully outside the view.
-
- \sa {declarative/modelviews/gridview}{GridView example}
-*/
-QDeclarative1GridView::QDeclarative1GridView(QDeclarativeItem *parent)
- : QDeclarative1Flickable(*(new QDeclarative1GridViewPrivate), parent)
-{
- Q_D(QDeclarative1GridView);
- d->init();
-}
-
-QDeclarative1GridView::~QDeclarative1GridView()
-{
- Q_D(QDeclarative1GridView);
- d->clear();
- if (d->ownModel)
- delete d->model;
- delete d->header;
- delete d->footer;
-}
-
-/*!
- \qmlattachedproperty bool GridView::isCurrentItem
- This attached property is true if this delegate is the current item; otherwise false.
-
- It is attached to each instance of the delegate.
-*/
-
-/*!
- \qmlattachedproperty GridView GridView::view
- This attached property holds the view that manages this delegate instance.
-
- It is attached to each instance of the delegate.
-
- \snippet doc/src/snippets/qtquick1/gridview/gridview.qml isCurrentItem
-*/
-
-/*!
- \qmlattachedproperty bool GridView::delayRemove
- This attached property holds whether the delegate may be destroyed.
-
- It is attached to each instance of the delegate.
-
- It is sometimes necessary to delay the destruction of an item
- until an animation completes.
-
- The example below ensures that the animation completes before
- the item is removed from the grid.
-
- \snippet doc/src/snippets/qtquick1/gridview/gridview.qml delayRemove
-*/
-
-/*!
- \qmlattachedsignal QtQuick1::GridView::onAdd()
- This attached handler is called immediately after an item is added to the view.
-*/
-
-/*!
- \qmlattachedsignal QtQuick1::GridView::onRemove()
- This attached handler is called immediately before an item is removed from the view.
-*/
-
-
-/*!
- \qmlproperty model QtQuick1::GridView::model
- This property holds the model providing data for the grid.
-
- The model provides the set of data that is used to create the items
- in the view. Models can be created directly in QML using \l ListModel, \l XmlListModel
- or \l VisualItemModel, or provided by C++ model classes. If a C++ model class is
- used, it must be a subclass of \l QAbstractItemModel or a simple list.
-
- \sa {qmlmodels}{Data Models}
-*/
-QVariant QDeclarative1GridView::model() const
-{
- Q_D(const QDeclarative1GridView);
- return d->modelVariant;
-}
-
-// For internal use
-int QDeclarative1GridView::modelCount() const
-{
- Q_D(const QDeclarative1GridView);
- return d->model->count();
-}
-
-void QDeclarative1GridView::setModel(const QVariant &model)
-{
- Q_D(QDeclarative1GridView);
- if (d->modelVariant == model)
- return;
- if (d->model) {
- disconnect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
- disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
- disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
- disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- disconnect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
- disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
- }
- d->clear();
- d->modelVariant = model;
- QObject *object = qvariant_cast<QObject*>(model);
- QDeclarative1VisualModel *vim = 0;
- if (object && (vim = qobject_cast<QDeclarative1VisualModel *>(object))) {
- if (d->ownModel) {
- delete d->model;
- d->ownModel = false;
- }
- d->model = vim;
- } else {
- if (!d->ownModel) {
- d->model = new QDeclarative1VisualDataModel(qmlContext(this), this);
- d->ownModel = true;
- }
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- dataModel->setModel(model);
- }
- if (d->model) {
- d->bufferMode = QDeclarative1GridViewPrivate::BufferBefore | QDeclarative1GridViewPrivate::BufferAfter;
- if (isComponentComplete()) {
- refill();
- if ((d->currentIndex >= d->model->count() || d->currentIndex < 0) && !d->currentIndexCleared) {
- setCurrentIndex(0);
- } else {
- d->moveReason = QDeclarative1GridViewPrivate::SetIndex;
- d->updateCurrent(d->currentIndex);
- if (d->highlight && d->currentItem) {
- if (d->autoHighlight)
- d->highlight->setPosition(d->currentItem->colPos(), d->currentItem->rowPos());
- d->updateTrackedItem();
- }
- d->moveReason = QDeclarative1GridViewPrivate::Other;
- }
- }
- connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
- connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
- connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
- connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- connect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
- connect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
- emit countChanged();
- }
- emit modelChanged();
-}
-
-/*!
- \qmlproperty Component QtQuick1::GridView::delegate
-
- The delegate provides a template defining each item instantiated by the view.
- The index is exposed as an accessible \c index property. Properties of the
- model are also available depending upon the type of \l {qmlmodels}{Data Model}.
-
- The number of elements in the delegate has a direct effect on the
- flicking performance of the view. If at all possible, place functionality
- that is not needed for the normal display of the delegate in a \l Loader which
- can load additional elements when needed.
-
- The GridView will layout the items based on the size of the root item
- in the delegate.
-
- \note Delegates are instantiated as needed and may be destroyed at any time.
- State should \e never be stored in a delegate.
-*/
-QDeclarativeComponent *QDeclarative1GridView::delegate() const
-{
- Q_D(const QDeclarative1GridView);
- if (d->model) {
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- return dataModel->delegate();
- }
-
- return 0;
-}
-
-void QDeclarative1GridView::setDelegate(QDeclarativeComponent *delegate)
-{
- Q_D(QDeclarative1GridView);
- if (delegate == this->delegate())
- return;
-
- if (!d->ownModel) {
- d->model = new QDeclarative1VisualDataModel(qmlContext(this));
- d->ownModel = true;
- }
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model)) {
- int oldCount = dataModel->count();
- dataModel->setDelegate(delegate);
- if (isComponentComplete()) {
- for (int i = 0; i < d->visibleItems.count(); ++i)
- d->releaseItem(d->visibleItems.at(i));
- d->visibleItems.clear();
- d->releaseItem(d->currentItem);
- d->currentItem = 0;
- refill();
- d->moveReason = QDeclarative1GridViewPrivate::SetIndex;
- d->updateCurrent(d->currentIndex);
- if (d->highlight && d->currentItem) {
- if (d->autoHighlight)
- d->highlight->setPosition(d->currentItem->colPos(), d->currentItem->rowPos());
- d->updateTrackedItem();
- }
- d->moveReason = QDeclarative1GridViewPrivate::Other;
- }
- if (oldCount != dataModel->count())
- emit countChanged();
- emit delegateChanged();
- }
-}
-
-/*!
- \qmlproperty int QtQuick1::GridView::currentIndex
- \qmlproperty Item QtQuick1::GridView::currentItem
-
- The \c currentIndex property holds the index of the current item, and
- \c currentItem holds the current item. Setting the currentIndex to -1
- will clear the highlight and set currentItem to null.
-
- If highlightFollowsCurrentItem is \c true, setting either of these
- properties will smoothly scroll the GridView so that the current
- item becomes visible.
-
- Note that the position of the current item
- may only be approximate until it becomes visible in the view.
-*/
-int QDeclarative1GridView::currentIndex() const
-{
- Q_D(const QDeclarative1GridView);
- return d->currentIndex;
-}
-
-void QDeclarative1GridView::setCurrentIndex(int index)
-{
- Q_D(QDeclarative1GridView);
- if (d->requestedIndex >= 0) // currently creating item
- return;
- d->currentIndexCleared = (index == -1);
- if (index == d->currentIndex)
- return;
- if (isComponentComplete() && d->isValid()) {
- if (d->layoutScheduled)
- d->layout();
- d->moveReason = QDeclarative1GridViewPrivate::SetIndex;
- d->updateCurrent(index);
- } else {
- d->currentIndex = index;
- emit currentIndexChanged();
- }
-}
-
-QDeclarativeItem *QDeclarative1GridView::currentItem()
-{
- Q_D(QDeclarative1GridView);
- if (!d->currentItem)
- return 0;
- return d->currentItem->item;
-}
-
-/*!
- \qmlproperty Item QtQuick1::GridView::highlightItem
-
- This holds the highlight item created from the \l highlight component.
-
- The highlightItem is managed by the view unless
- \l highlightFollowsCurrentItem is set to false.
-
- \sa highlight, highlightFollowsCurrentItem
-*/
-QDeclarativeItem *QDeclarative1GridView::highlightItem()
-{
- Q_D(QDeclarative1GridView);
- if (!d->highlight)
- return 0;
- return d->highlight->item;
-}
-
-/*!
- \qmlproperty int QtQuick1::GridView::count
- This property holds the number of items in the view.
-*/
-int QDeclarative1GridView::count() const
-{
- Q_D(const QDeclarative1GridView);
- if (d->model)
- return d->model->count();
- return 0;
-}
-
-/*!
- \qmlproperty Component QtQuick1::GridView::highlight
- This property holds the component to use as the highlight.
-
- An instance of the highlight component is created for each view.
- The geometry of the resulting component instance will be managed by the view
- so as to stay with the current item, unless the highlightFollowsCurrentItem property is false.
-
- \sa highlightItem, highlightFollowsCurrentItem
-*/
-QDeclarativeComponent *QDeclarative1GridView::highlight() const
-{
- Q_D(const QDeclarative1GridView);
- return d->highlightComponent;
-}
-
-void QDeclarative1GridView::setHighlight(QDeclarativeComponent *highlight)
-{
- Q_D(QDeclarative1GridView);
- if (highlight != d->highlightComponent) {
- d->highlightComponent = highlight;
- d->updateCurrent(d->currentIndex);
- emit highlightChanged();
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::GridView::highlightFollowsCurrentItem
- This property sets whether the highlight is managed by the view.
-
- If this property is true (the default value), the highlight is moved smoothly
- to follow the current item. Otherwise, the
- highlight is not moved by the view, and any movement must be implemented
- by the highlight.
-
- Here is a highlight with its motion defined by a \l {SpringAnimation} item:
-
- \snippet doc/src/snippets/qtquick1/gridview/gridview.qml highlightFollowsCurrentItem
-*/
-bool QDeclarative1GridView::highlightFollowsCurrentItem() const
-{
- Q_D(const QDeclarative1GridView);
- return d->autoHighlight;
-}
-
-void QDeclarative1GridView::setHighlightFollowsCurrentItem(bool autoHighlight)
-{
- Q_D(QDeclarative1GridView);
- if (d->autoHighlight != autoHighlight) {
- d->autoHighlight = autoHighlight;
- if (autoHighlight) {
- d->updateHighlight();
- } else if (d->highlightXAnimator) {
- d->highlightXAnimator->stop();
- d->highlightYAnimator->stop();
- }
- }
-}
-
-/*!
- \qmlproperty int QtQuick1::GridView::highlightMoveDuration
- This property holds the move animation duration of the highlight delegate.
-
- highlightFollowsCurrentItem must be true for this property
- to have effect.
-
- The default value for the duration is 150ms.
-
- \sa highlightFollowsCurrentItem
-*/
-int QDeclarative1GridView::highlightMoveDuration() const
-{
- Q_D(const QDeclarative1GridView);
- return d->highlightMoveDuration;
-}
-
-void QDeclarative1GridView::setHighlightMoveDuration(int duration)
-{
- Q_D(QDeclarative1GridView);
- if (d->highlightMoveDuration != duration) {
- d->highlightMoveDuration = duration;
- if (d->highlightYAnimator) {
- d->highlightXAnimator->userDuration = d->highlightMoveDuration;
- d->highlightYAnimator->userDuration = d->highlightMoveDuration;
- }
- emit highlightMoveDurationChanged();
- }
-}
-
-
-/*!
- \qmlproperty real QtQuick1::GridView::preferredHighlightBegin
- \qmlproperty real QtQuick1::GridView::preferredHighlightEnd
- \qmlproperty enumeration QtQuick1::GridView::highlightRangeMode
-
- These properties define the preferred range of the highlight (for the current item)
- within the view. The \c preferredHighlightBegin value must be less than the
- \c preferredHighlightEnd value.
-
- These properties affect the position of the current item when the view is scrolled.
- For example, if the currently selected item should stay in the middle of the
- view when it is scrolled, set the \c preferredHighlightBegin and
- \c preferredHighlightEnd values to the top and bottom coordinates of where the middle
- item would be. If the \c currentItem is changed programmatically, the view will
- automatically scroll so that the current item is in the middle of the view.
- Furthermore, the behavior of the current item index will occur whether or not a
- highlight exists.
-
- Valid values for \c highlightRangeMode are:
-
- \list
- \o GridView.ApplyRange - the view attempts to maintain the highlight within the range.
- However, the highlight can move outside of the range at the ends of the view or due
- to mouse interaction.
- \o GridView.StrictlyEnforceRange - the highlight never moves outside of the range.
- The current item changes if a keyboard or mouse action would cause the highlight to move
- outside of the range.
- \o GridView.NoHighlightRange - this is the default value.
- \endlist
-*/
-qreal QDeclarative1GridView::preferredHighlightBegin() const
-{
- Q_D(const QDeclarative1GridView);
- return d->highlightRangeStart;
-}
-
-void QDeclarative1GridView::setPreferredHighlightBegin(qreal start)
-{
- Q_D(QDeclarative1GridView);
- d->highlightRangeStartValid = true;
- if (d->highlightRangeStart == start)
- return;
- d->highlightRangeStart = start;
- d->haveHighlightRange = d->highlightRange != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- emit preferredHighlightBeginChanged();
-}
-
-void QDeclarative1GridView::resetPreferredHighlightBegin()
-{
- Q_D(QDeclarative1GridView);
- d->highlightRangeStartValid = false;
- if (d->highlightRangeStart == 0)
- return;
- d->highlightRangeStart = 0;
- emit preferredHighlightBeginChanged();
-}
-
-qreal QDeclarative1GridView::preferredHighlightEnd() const
-{
- Q_D(const QDeclarative1GridView);
- return d->highlightRangeEnd;
-}
-
-void QDeclarative1GridView::setPreferredHighlightEnd(qreal end)
-{
- Q_D(QDeclarative1GridView);
- d->highlightRangeEndValid = true;
- if (d->highlightRangeEnd == end)
- return;
- d->highlightRangeEnd = end;
- d->haveHighlightRange = d->highlightRange != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- emit preferredHighlightEndChanged();
-}
-
-void QDeclarative1GridView::resetPreferredHighlightEnd()
-{
- Q_D(QDeclarative1GridView);
- d->highlightRangeEndValid = false;
- if (d->highlightRangeEnd == 0)
- return;
- d->highlightRangeEnd = 0;
- emit preferredHighlightEndChanged();
-}
-
-QDeclarative1GridView::HighlightRangeMode QDeclarative1GridView::highlightRangeMode() const
-{
- Q_D(const QDeclarative1GridView);
- return d->highlightRange;
-}
-
-void QDeclarative1GridView::setHighlightRangeMode(HighlightRangeMode mode)
-{
- Q_D(QDeclarative1GridView);
- if (d->highlightRange == mode)
- return;
- d->highlightRange = mode;
- d->haveHighlightRange = d->highlightRange != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- emit highlightRangeModeChanged();
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::GridView::layoutDirection
- This property holds the layout direction of the grid.
-
- Possible values:
-
- \list
- \o Qt.LeftToRight (default) - Items will be laid out starting in the top, left corner. The flow is
- dependent on the \l GridView::flow property.
- \o Qt.RightToLeft - Items will be laid out starting in the top, right corner. The flow is dependent
- on the \l GridView::flow property.
- \endlist
-
- \bold Note: If GridView::flow is set to GridView.LeftToRight, this is not to be confused if
- GridView::layoutDirection is set to Qt.RightToLeft. The GridView.LeftToRight flow value simply
- indicates that the flow is horizontal.
-*/
-
-Qt::LayoutDirection QDeclarative1GridView::layoutDirection() const
-{
- Q_D(const QDeclarative1GridView);
- return d->layoutDirection;
-}
-
-void QDeclarative1GridView::setLayoutDirection(Qt::LayoutDirection layoutDirection)
-{
- Q_D(QDeclarative1GridView);
- if (d->layoutDirection != layoutDirection) {
- d->layoutDirection = layoutDirection;
- d->regenerate();
- emit layoutDirectionChanged();
- emit effectiveLayoutDirectionChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::GridView::effectiveLayoutDirection
- This property holds the effective layout direction of the grid.
-
- When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts,
- the visual layout direction of the grid will be mirrored. However, the
- property \l {GridView::layoutDirection}{layoutDirection} will remain unchanged.
-
- \sa GridView::layoutDirection, {LayoutMirroring}{LayoutMirroring}
-*/
-
-Qt::LayoutDirection QDeclarative1GridView::effectiveLayoutDirection() const
-{
- Q_D(const QDeclarative1GridView);
- if (d->effectiveLayoutMirror)
- return d->layoutDirection == Qt::RightToLeft ? Qt::LeftToRight : Qt::RightToLeft;
- else
- return d->layoutDirection;
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::GridView::flow
- This property holds the flow of the grid.
-
- Possible values:
-
- \list
- \o GridView.LeftToRight (default) - Items are laid out from left to right, and the view scrolls vertically
- \o GridView.TopToBottom - Items are laid out from top to bottom, and the view scrolls horizontally
- \endlist
-*/
-QDeclarative1GridView::Flow QDeclarative1GridView::flow() const
-{
- Q_D(const QDeclarative1GridView);
- return d->flow;
-}
-
-void QDeclarative1GridView::setFlow(Flow flow)
-{
- Q_D(QDeclarative1GridView);
- if (d->flow != flow) {
- d->flow = flow;
- if (d->flow == LeftToRight) {
- setContentWidth(-1);
- setFlickableDirection(QDeclarative1Flickable::VerticalFlick);
- } else {
- setContentHeight(-1);
- setFlickableDirection(QDeclarative1Flickable::HorizontalFlick);
- }
- setContentX(0);
- setContentY(0);
- d->regenerate();
- emit flowChanged();
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::GridView::keyNavigationWraps
- This property holds whether the grid wraps key navigation
-
- If this is true, key navigation that would move the current item selection
- past one end of the view instead wraps around and moves the selection to
- the other end of the view.
-
- By default, key navigation is not wrapped.
-*/
-bool QDeclarative1GridView::isWrapEnabled() const
-{
- Q_D(const QDeclarative1GridView);
- return d->wrap;
-}
-
-void QDeclarative1GridView::setWrapEnabled(bool wrap)
-{
- Q_D(QDeclarative1GridView);
- if (d->wrap == wrap)
- return;
- d->wrap = wrap;
- emit keyNavigationWrapsChanged();
-}
-
-/*!
- \qmlproperty int QtQuick1::GridView::cacheBuffer
- This property determines whether delegates are retained outside the
- visible area of the view.
-
- If non-zero the view will keep as many delegates
- instantiated as will fit within the buffer specified. For example,
- if in a vertical view the delegate is 20 pixels high and \c cacheBuffer is
- set to 40, then up to 2 delegates above and 2 delegates below the visible
- area may be retained.
-
- Note that cacheBuffer is not a pixel buffer - it only maintains additional
- instantiated delegates.
-
- Setting this value can make scrolling the list smoother at the expense
- of additional memory usage. It is not a substitute for creating efficient
- delegates; the fewer elements in a delegate, the faster a view may be
- scrolled.
-*/
-int QDeclarative1GridView::cacheBuffer() const
-{
- Q_D(const QDeclarative1GridView);
- return d->buffer;
-}
-
-void QDeclarative1GridView::setCacheBuffer(int buffer)
-{
- Q_D(QDeclarative1GridView);
- if (d->buffer != buffer) {
- d->buffer = buffer;
- if (isComponentComplete())
- refill();
- emit cacheBufferChanged();
- }
-}
-
-/*!
- \qmlproperty int QtQuick1::GridView::cellWidth
- \qmlproperty int QtQuick1::GridView::cellHeight
-
- These properties holds the width and height of each cell in the grid.
-
- The default cell size is 100x100.
-*/
-int QDeclarative1GridView::cellWidth() const
-{
- Q_D(const QDeclarative1GridView);
- return d->cellWidth;
-}
-
-void QDeclarative1GridView::setCellWidth(int cellWidth)
-{
- Q_D(QDeclarative1GridView);
- if (cellWidth != d->cellWidth && cellWidth > 0) {
- d->cellWidth = qMax(1, cellWidth);
- d->updateGrid();
- emit cellWidthChanged();
- d->layout();
- }
-}
-
-int QDeclarative1GridView::cellHeight() const
-{
- Q_D(const QDeclarative1GridView);
- return d->cellHeight;
-}
-
-void QDeclarative1GridView::setCellHeight(int cellHeight)
-{
- Q_D(QDeclarative1GridView);
- if (cellHeight != d->cellHeight && cellHeight > 0) {
- d->cellHeight = qMax(1, cellHeight);
- d->updateGrid();
- emit cellHeightChanged();
- d->layout();
- }
-}
-/*!
- \qmlproperty enumeration QtQuick1::GridView::snapMode
-
- This property determines how the view scrolling will settle following a drag or flick.
- The possible values are:
-
- \list
- \o GridView.NoSnap (default) - the view stops anywhere within the visible area.
- \o GridView.SnapToRow - the view settles with a row (or column for \c GridView.TopToBottom flow)
- aligned with the start of the view.
- \o GridView.SnapOneRow - the view will settle no more than one row (or column for \c GridView.TopToBottom flow)
- away from the first visible row at the time the mouse button is released.
- This mode is particularly useful for moving one page at a time.
- \endlist
-
-*/
-QDeclarative1GridView::SnapMode QDeclarative1GridView::snapMode() const
-{
- Q_D(const QDeclarative1GridView);
- return d->snapMode;
-}
-
-void QDeclarative1GridView::setSnapMode(SnapMode mode)
-{
- Q_D(QDeclarative1GridView);
- if (d->snapMode != mode) {
- d->snapMode = mode;
- emit snapModeChanged();
- }
-}
-
-/*!
- \qmlproperty Component QtQuick1::GridView::footer
- This property holds the component to use as the footer.
-
- An instance of the footer component is created for each view. The
- footer is positioned at the end of the view, after any items.
-
- \sa header
-*/
-QDeclarativeComponent *QDeclarative1GridView::footer() const
-{
- Q_D(const QDeclarative1GridView);
- return d->footerComponent;
-}
-
-void QDeclarative1GridView::setFooter(QDeclarativeComponent *footer)
-{
- Q_D(QDeclarative1GridView);
- if (d->footerComponent != footer) {
- if (d->footer) {
- if (scene())
- scene()->removeItem(d->footer->item);
- d->footer->item->deleteLater();
- delete d->footer;
- d->footer = 0;
- }
- d->footerComponent = footer;
- if (isComponentComplete()) {
- d->updateFooter();
- d->updateGrid();
- d->fixupPosition();
- }
- emit footerChanged();
- }
-}
-
-/*!
- \qmlproperty Component QtQuick1::GridView::header
- This property holds the component to use as the header.
-
- An instance of the header component is created for each view. The
- header is positioned at the beginning of the view, before any items.
-
- \sa footer
-*/
-QDeclarativeComponent *QDeclarative1GridView::header() const
-{
- Q_D(const QDeclarative1GridView);
- return d->headerComponent;
-}
-
-void QDeclarative1GridView::setHeader(QDeclarativeComponent *header)
-{
- Q_D(QDeclarative1GridView);
- if (d->headerComponent != header) {
- if (d->header) {
- if (scene())
- scene()->removeItem(d->header->item);
- d->header->item->deleteLater();
- delete d->header;
- d->header = 0;
- }
- d->headerComponent = header;
- if (isComponentComplete()) {
- d->updateHeader();
- d->updateFooter();
- d->updateGrid();
- d->fixupPosition();
- }
- emit headerChanged();
- }
-}
-
-void QDeclarative1GridView::setContentX(qreal pos)
-{
- Q_D(QDeclarative1GridView);
- // Positioning the view manually should override any current movement state
- d->moveReason = QDeclarative1GridViewPrivate::Other;
- QDeclarative1Flickable::setContentX(pos);
-}
-
-void QDeclarative1GridView::setContentY(qreal pos)
-{
- Q_D(QDeclarative1GridView);
- // Positioning the view manually should override any current movement state
- d->moveReason = QDeclarative1GridViewPrivate::Other;
- QDeclarative1Flickable::setContentY(pos);
-}
-
-bool QDeclarative1GridView::event(QEvent *event)
-{
- Q_D(QDeclarative1GridView);
- if (event->type() == QEvent::User) {
- if (d->layoutScheduled)
- d->layout();
- return true;
- }
-
- return QDeclarative1Flickable::event(event);
-}
-
-void QDeclarative1GridView::viewportMoved()
-{
- Q_D(QDeclarative1GridView);
- QDeclarative1Flickable::viewportMoved();
- if (!d->itemCount)
- return;
- d->lazyRelease = true;
- if (d->hData.flicking || d->vData.flicking) {
- if (yflick()) {
- if (d->vData.velocity > 0)
- d->bufferMode = QDeclarative1GridViewPrivate::BufferBefore;
- else if (d->vData.velocity < 0)
- d->bufferMode = QDeclarative1GridViewPrivate::BufferAfter;
- }
-
- if (xflick()) {
- if (d->hData.velocity > 0)
- d->bufferMode = QDeclarative1GridViewPrivate::BufferBefore;
- else if (d->hData.velocity < 0)
- d->bufferMode = QDeclarative1GridViewPrivate::BufferAfter;
- }
- }
- refill();
- if (d->hData.flicking || d->vData.flicking || d->hData.moving || d->vData.moving)
- d->moveReason = QDeclarative1GridViewPrivate::Mouse;
- if (d->moveReason != QDeclarative1GridViewPrivate::SetIndex) {
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange && d->highlight) {
- // reposition highlight
- qreal pos = d->highlight->rowPos();
- qreal viewPos;
- qreal highlightStart;
- qreal highlightEnd;
- if (d->isRightToLeftTopToBottom()) {
- highlightStart = d->highlightRangeStartValid ? d->size()-d->highlightRangeEnd : d->highlightRangeStart;
- highlightEnd = d->highlightRangeEndValid ? d->size()-d->highlightRangeStart : d->highlightRangeEnd;
- viewPos = -d->position()-d->size();
- } else {
- highlightStart = d->highlightRangeStart;
- highlightEnd = d->highlightRangeEnd;
- viewPos = d->position();
- }
- if (pos > viewPos + highlightEnd - d->rowSize())
- pos = viewPos + highlightEnd - d->rowSize();
- if (pos < viewPos + highlightStart)
- pos = viewPos + highlightStart;
-
- d->highlight->setPosition(d->highlight->colPos(), qRound(pos));
-
- // update current index
- int idx = d->snapIndex();
- if (idx >= 0 && idx != d->currentIndex) {
- d->updateCurrent(idx);
- if (d->currentItem && d->currentItem->colPos() != d->highlight->colPos() && d->autoHighlight) {
- if (d->flow == LeftToRight)
- d->highlightXAnimator->to = d->currentItem->item->x();
- else
- d->highlightYAnimator->to = d->currentItem->item->y();
- }
- }
- }
- }
-}
-
-qreal QDeclarative1GridView::minYExtent() const
-{
- Q_D(const QDeclarative1GridView);
- if (d->flow == QDeclarative1GridView::TopToBottom)
- return QDeclarative1Flickable::minYExtent();
- qreal extent = -d->startPosition();
- if (d->header && d->visibleItems.count())
- extent += d->header->item->height();
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- extent += d->highlightRangeStart;
- extent = qMax(extent, -(d->rowPosAt(0) + d->rowSize() - d->highlightRangeEnd));
- }
- return extent;
-}
-
-qreal QDeclarative1GridView::maxYExtent() const
-{
- Q_D(const QDeclarative1GridView);
- if (d->flow == QDeclarative1GridView::TopToBottom)
- return QDeclarative1Flickable::maxYExtent();
- qreal extent;
- if (!d->model || !d->model->count()) {
- extent = 0;
- } else if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- extent = -(d->rowPosAt(d->model->count()-1) - d->highlightRangeStart);
- if (d->highlightRangeEnd != d->highlightRangeStart)
- extent = qMin(extent, -(d->endPosition() - d->highlightRangeEnd + 1));
- } else {
- extent = -(d->endPosition() - height());
- }
- if (d->footer)
- extent -= d->footer->item->height();
- const qreal minY = minYExtent();
- if (extent > minY)
- extent = minY;
- return extent;
-}
-
-qreal QDeclarative1GridView::minXExtent() const
-{
- Q_D(const QDeclarative1GridView);
- if (d->flow == QDeclarative1GridView::LeftToRight)
- return QDeclarative1Flickable::minXExtent();
- qreal extent = -d->startPosition();
- qreal highlightStart;
- qreal highlightEnd;
- qreal endPositionFirstItem = 0;
- if (d->isRightToLeftTopToBottom()) {
- if (d->model && d->model->count())
- endPositionFirstItem = d->rowPosAt(d->model->count()-1);
- highlightStart = d->highlightRangeStartValid
- ? d->highlightRangeStart - (d->lastPosition()-endPositionFirstItem)
- : d->size() - (d->lastPosition()-endPositionFirstItem);
- highlightEnd = d->highlightRangeEndValid ? d->highlightRangeEnd : d->size();
- if (d->footer && d->visibleItems.count())
- extent += d->footer->item->width();
- } else {
- endPositionFirstItem = d->rowPosAt(0)+d->rowSize();
- highlightStart = d->highlightRangeStart;
- highlightEnd = d->highlightRangeEnd;
- if (d->header && d->visibleItems.count())
- extent += d->header->item->width();
- }
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- extent += d->isRightToLeftTopToBottom() ? -highlightStart : highlightStart;
- extent = qMax(extent, -(endPositionFirstItem - highlightEnd));
- }
- return extent;
-}
-
-qreal QDeclarative1GridView::maxXExtent() const
-{
- Q_D(const QDeclarative1GridView);
- if (d->flow == QDeclarative1GridView::LeftToRight)
- return QDeclarative1Flickable::maxXExtent();
- qreal extent;
- qreal highlightStart;
- qreal highlightEnd;
- qreal lastItemPosition = 0;
- if (d->isRightToLeftTopToBottom()){
- highlightStart = d->highlightRangeStartValid ? d->highlightRangeEnd : d->size();
- highlightEnd = d->highlightRangeEndValid ? d->highlightRangeStart : d->size();
- lastItemPosition = d->endPosition();
- } else {
- highlightStart = d->highlightRangeStart;
- highlightEnd = d->highlightRangeEnd;
- lastItemPosition = 0;
- if (d->model && d->model->count())
- lastItemPosition = d->rowPosAt(d->model->count()-1);
- }
- if (!d->model || !d->model->count()) {
- extent = 0;
- } else if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- extent = -(lastItemPosition - highlightStart);
- if (highlightEnd != highlightStart)
- extent = d->isRightToLeftTopToBottom()
- ? qMax(extent, -(d->endPosition() - highlightEnd + 1))
- : qMin(extent, -(d->endPosition() - highlightEnd + 1));
- } else {
- extent = -(d->endPosition() - width());
- }
- if (d->isRightToLeftTopToBottom()) {
- if (d->header)
- extent -= d->header->item->width();
- } else {
- if (d->footer)
- extent -= d->footer->item->width();
- }
-
- const qreal minX = minXExtent();
- if (extent > minX)
- extent = minX;
- return extent;
-}
-
-void QDeclarative1GridView::keyPressEvent(QKeyEvent *event)
-{
- Q_D(QDeclarative1GridView);
- keyPressPreHandler(event);
- if (event->isAccepted())
- return;
- if (d->model && d->model->count() && d->interactive) {
- d->moveReason = QDeclarative1GridViewPrivate::SetIndex;
- int oldCurrent = currentIndex();
- switch (event->key()) {
- case Qt::Key_Up:
- moveCurrentIndexUp();
- break;
- case Qt::Key_Down:
- moveCurrentIndexDown();
- break;
- case Qt::Key_Left:
- moveCurrentIndexLeft();
- break;
- case Qt::Key_Right:
- moveCurrentIndexRight();
- break;
- default:
- break;
- }
- if (oldCurrent != currentIndex()) {
- event->accept();
- return;
- }
- }
- d->moveReason = QDeclarative1GridViewPrivate::Other;
- event->ignore();
- QDeclarative1Flickable::keyPressEvent(event);
-}
-
-/*!
- \qmlmethod QtQuick1::GridView::moveCurrentIndexUp()
-
- Move the currentIndex up one item in the view.
- The current index will wrap if keyNavigationWraps is true and it
- is currently at the end. This method has no effect if the \l count is zero.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-void QDeclarative1GridView::moveCurrentIndexUp()
-{
- Q_D(QDeclarative1GridView);
- const int count = d->model ? d->model->count() : 0;
- if (!count)
- return;
- if (d->flow == QDeclarative1GridView::LeftToRight) {
- if (currentIndex() >= d->columns || d->wrap) {
- int index = currentIndex() - d->columns;
- setCurrentIndex((index >= 0 && index < count) ? index : count-1);
- }
- } else {
- if (currentIndex() > 0 || d->wrap) {
- int index = currentIndex() - 1;
- setCurrentIndex((index >= 0 && index < count) ? index : count-1);
- }
- }
-}
-
-/*!
- \qmlmethod QtQuick1::GridView::moveCurrentIndexDown()
-
- Move the currentIndex down one item in the view.
- The current index will wrap if keyNavigationWraps is true and it
- is currently at the end. This method has no effect if the \l count is zero.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-void QDeclarative1GridView::moveCurrentIndexDown()
-{
- Q_D(QDeclarative1GridView);
- const int count = d->model ? d->model->count() : 0;
- if (!count)
- return;
- if (d->flow == QDeclarative1GridView::LeftToRight) {
- if (currentIndex() < count - d->columns || d->wrap) {
- int index = currentIndex()+d->columns;
- setCurrentIndex((index >= 0 && index < count) ? index : 0);
- }
- } else {
- if (currentIndex() < count - 1 || d->wrap) {
- int index = currentIndex() + 1;
- setCurrentIndex((index >= 0 && index < count) ? index : 0);
- }
- }
-}
-
-/*!
- \qmlmethod QtQuick1::GridView::moveCurrentIndexLeft()
-
- Move the currentIndex left one item in the view.
- The current index will wrap if keyNavigationWraps is true and it
- is currently at the end. This method has no effect if the \l count is zero.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-void QDeclarative1GridView::moveCurrentIndexLeft()
-{
- Q_D(QDeclarative1GridView);
- const int count = d->model ? d->model->count() : 0;
- if (!count)
- return;
-
- if (effectiveLayoutDirection() == Qt::LeftToRight) {
- if (d->flow == QDeclarative1GridView::LeftToRight) {
- if (currentIndex() > 0 || d->wrap) {
- int index = currentIndex() - 1;
- setCurrentIndex((index >= 0 && index < count) ? index : count-1);
- }
- } else {
- if (currentIndex() >= d->columns || d->wrap) {
- int index = currentIndex() - d->columns;
- setCurrentIndex((index >= 0 && index < count) ? index : count-1);
- }
- }
- } else {
- if (d->flow == QDeclarative1GridView::LeftToRight) {
- if (currentIndex() < count - 1 || d->wrap) {
- int index = currentIndex() + 1;
- setCurrentIndex((index >= 0 && index < count) ? index : 0);
- }
- } else {
- if (currentIndex() < count - d->columns || d->wrap) {
- int index = currentIndex() + d->columns;
- setCurrentIndex((index >= 0 && index < count) ? index : 0);
- }
- }
- }
-}
-
-/*!
- \qmlmethod QtQuick1::GridView::moveCurrentIndexRight()
-
- Move the currentIndex right one item in the view.
- The current index will wrap if keyNavigationWraps is true and it
- is currently at the end. This method has no effect if the \l count is zero.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-void QDeclarative1GridView::moveCurrentIndexRight()
-{
- Q_D(QDeclarative1GridView);
- const int count = d->model ? d->model->count() : 0;
- if (!count)
- return;
-
- if (effectiveLayoutDirection() == Qt::LeftToRight) {
- if (d->flow == QDeclarative1GridView::LeftToRight) {
- if (currentIndex() < count - 1 || d->wrap) {
- int index = currentIndex() + 1;
- setCurrentIndex((index >= 0 && index < count) ? index : 0);
- }
- } else {
- if (currentIndex() < count - d->columns || d->wrap) {
- int index = currentIndex()+d->columns;
- setCurrentIndex((index >= 0 && index < count) ? index : 0);
- }
- }
- } else {
- if (d->flow == QDeclarative1GridView::LeftToRight) {
- if (currentIndex() > 0 || d->wrap) {
- int index = currentIndex() - 1;
- setCurrentIndex((index >= 0 && index < count) ? index : count-1);
- }
- } else {
- if (currentIndex() >= d->columns || d->wrap) {
- int index = currentIndex() - d->columns;
- setCurrentIndex((index >= 0 && index < count) ? index : count-1);
- }
- }
- }
-}
-
-void QDeclarative1GridViewPrivate::positionViewAtIndex(int index, int mode)
-{
- Q_Q(QDeclarative1GridView);
- if (!isValid())
- return;
- if (mode < QDeclarative1GridView::Beginning || mode > QDeclarative1GridView::Contain)
- return;
-
- int idx = qMax(qMin(index, model->count()-1), 0);
-
- if (layoutScheduled)
- layout();
- qreal pos = isRightToLeftTopToBottom() ? -position() - size() : position();
- FxGridItem1 *item = visibleItem(idx);
- qreal maxExtent;
- if (flow == QDeclarative1GridView::LeftToRight)
- maxExtent = -q->maxYExtent();
- else
- maxExtent = isRightToLeftTopToBottom() ? q->minXExtent()-size() : -q->maxXExtent();
-
- if (!item) {
- int itemPos = rowPosAt(idx);
- // save the currently visible items in case any of them end up visible again
- QList<FxGridItem1*> oldVisible = visibleItems;
- visibleItems.clear();
- visibleIndex = idx - idx % columns;
- if (flow == QDeclarative1GridView::LeftToRight)
- maxExtent = -q->maxYExtent();
- else
- maxExtent = isRightToLeftTopToBottom() ? q->minXExtent()-size() : -q->maxXExtent();
- setPosition(qMin(qreal(itemPos), maxExtent));
- // now release the reference to all the old visible items.
- for (int i = 0; i < oldVisible.count(); ++i)
- releaseItem(oldVisible.at(i));
- item = visibleItem(idx);
- }
- if (item) {
- qreal itemPos = item->rowPos();
- switch (mode) {
- case QDeclarative1GridView::Beginning:
- pos = itemPos;
- if (index < 0 && header) {
- pos -= flow == QDeclarative1GridView::LeftToRight
- ? header->item->height()
- : header->item->width();
- }
- break;
- case QDeclarative1GridView::Center:
- pos = itemPos - (size() - rowSize())/2;
- break;
- case QDeclarative1GridView::End:
- pos = itemPos - size() + rowSize();
- if (index >= model->count() && footer) {
- pos += flow == QDeclarative1GridView::LeftToRight
- ? footer->item->height()
- : footer->item->width();
- }
- break;
- case QDeclarative1GridView::Visible:
- if (itemPos > pos + size())
- pos = itemPos - size() + rowSize();
- else if (item->endRowPos() < pos)
- pos = itemPos;
- break;
- case QDeclarative1GridView::Contain:
- if (item->endRowPos() > pos + size())
- pos = itemPos - size() + rowSize();
- if (itemPos < pos)
- pos = itemPos;
- }
-
- pos = qMin(pos, maxExtent);
- qreal minExtent;
- if (flow == QDeclarative1GridView::LeftToRight)
- minExtent = -q->minYExtent();
- else
- minExtent = isRightToLeftTopToBottom() ? q->maxXExtent()-size() : -q->minXExtent();
- pos = qMax(pos, minExtent);
- moveReason = QDeclarative1GridViewPrivate::Other;
- q->cancelFlick();
- setPosition(pos);
- }
- fixupPosition();
-}
-
-/*!
- \qmlmethod QtQuick1::GridView::positionViewAtIndex(int index, PositionMode mode)
-
- Positions the view such that the \a index is at the position specified by
- \a mode:
-
- \list
- \o GridView.Beginning - position item at the top (or left for \c GridView.TopToBottom flow) of the view.
- \o GridView.Center - position item in the center of the view.
- \o GridView.End - position item at bottom (or right for horizontal orientation) of the view.
- \o GridView.Visible - if any part of the item is visible then take no action, otherwise
- bring the item into view.
- \o GridView.Contain - ensure the entire item is visible. If the item is larger than
- the view the item is positioned at the top (or left for \c GridView.TopToBottom flow) of the view.
- \endlist
-
- If positioning the view at the index would cause empty space to be displayed at
- the beginning or end of the view, the view will be positioned at the boundary.
-
- It is not recommended to use \l {Flickable::}{contentX} or \l {Flickable::}{contentY} to position the view
- at a particular index. This is unreliable since removing items from the start
- of the view does not cause all other items to be repositioned.
- The correct way to bring an item into view is with \c positionViewAtIndex.
-
- \bold Note: methods should only be called after the Component has completed. To position
- the view at startup, this method should be called by Component.onCompleted. For
- example, to position the view at the end:
-
- \code
- Component.onCompleted: positionViewAtIndex(count - 1, GridView.Beginning)
- \endcode
-*/
-void QDeclarative1GridView::positionViewAtIndex(int index, int mode)
-{
- Q_D(QDeclarative1GridView);
- if (!d->isValid() || index < 0 || index >= d->model->count())
- return;
- d->positionViewAtIndex(index, mode);
-}
-
-/*!
- \qmlmethod QtQuick1::GridView::positionViewAtBeginning()
- \qmlmethod QtQuick1::GridView::positionViewAtEnd()
- \since Quick 1.1
-
- Positions the view at the beginning or end, taking into account any header or footer.
-
- It is not recommended to use \l {Flickable::}{contentX} or \l {Flickable::}{contentY} to position the view
- at a particular index. This is unreliable since removing items from the start
- of the list does not cause all other items to be repositioned, and because
- the actual start of the view can vary based on the size of the delegates.
-
- \bold Note: methods should only be called after the Component has completed. To position
- the view at startup, this method should be called by Component.onCompleted. For
- example, to position the view at the end on startup:
-
- \code
- Component.onCompleted: positionViewAtEnd()
- \endcode
-*/
-void QDeclarative1GridView::positionViewAtBeginning()
-{
- Q_D(QDeclarative1GridView);
- if (!d->isValid())
- return;
- d->positionViewAtIndex(-1, Beginning);
-}
-
-void QDeclarative1GridView::positionViewAtEnd()
-{
- Q_D(QDeclarative1GridView);
- if (!d->isValid())
- return;
- d->positionViewAtIndex(d->model->count(), End);
-}
-
-/*!
- \qmlmethod int QtQuick1::GridView::indexAt(int x, int y)
-
- Returns the index of the visible item containing the point \a x, \a y in content
- coordinates. If there is no item at the point specified, or the item is
- not visible -1 is returned.
-
- If the item is outside the visible area, -1 is returned, regardless of
- whether an item will exist at that point when scrolled into view.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-int QDeclarative1GridView::indexAt(qreal x, qreal y) const
-{
- Q_D(const QDeclarative1GridView);
- for (int i = 0; i < d->visibleItems.count(); ++i) {
- const FxGridItem1 *listItem = d->visibleItems.at(i);
- if(listItem->contains(x, y))
- return listItem->index;
- }
-
- return -1;
-}
-
-void QDeclarative1GridView::componentComplete()
-{
- Q_D(QDeclarative1GridView);
- QDeclarative1Flickable::componentComplete();
- d->updateHeader();
- d->updateFooter();
- d->updateGrid();
- if (d->isValid()) {
- refill();
- d->moveReason = QDeclarative1GridViewPrivate::SetIndex;
- if (d->currentIndex < 0 && !d->currentIndexCleared)
- d->updateCurrent(0);
- else
- d->updateCurrent(d->currentIndex);
- if (d->highlight && d->currentItem) {
- if (d->autoHighlight)
- d->highlight->setPosition(d->currentItem->colPos(), d->currentItem->rowPos());
- d->updateTrackedItem();
- }
- d->moveReason = QDeclarative1GridViewPrivate::Other;
- d->fixupPosition();
- }
-}
-
-void QDeclarative1GridView::trackedPositionChanged()
-{
- Q_D(QDeclarative1GridView);
- if (!d->trackedItem || !d->currentItem)
- return;
- if (d->moveReason == QDeclarative1GridViewPrivate::SetIndex) {
- const qreal trackedPos = d->trackedItem->rowPos();
- qreal viewPos;
- qreal highlightStart;
- qreal highlightEnd;
- if (d->isRightToLeftTopToBottom()) {
- viewPos = -d->position()-d->size();
- highlightStart = d->highlightRangeStartValid ? d->size()-d->highlightRangeEnd : d->highlightRangeStart;
- highlightEnd = d->highlightRangeEndValid ? d->size()-d->highlightRangeStart : d->highlightRangeEnd;
- } else {
- viewPos = d->position();
- highlightStart = d->highlightRangeStart;
- highlightEnd = d->highlightRangeEnd;
- }
- qreal pos = viewPos;
- if (d->haveHighlightRange) {
- if (d->highlightRange == StrictlyEnforceRange) {
- if (trackedPos > pos + highlightEnd - d->rowSize())
- pos = trackedPos - highlightEnd + d->rowSize();
- if (trackedPos < pos + highlightStart)
- pos = trackedPos - highlightStart;
- } else {
- if (trackedPos < d->startPosition() + highlightStart) {
- pos = d->startPosition();
- } else if (d->trackedItem->endRowPos() > d->endPosition() - d->size() + highlightEnd) {
- pos = d->endPosition() - d->size() + 1;
- if (pos < d->startPosition())
- pos = d->startPosition();
- } else {
- if (trackedPos > pos + highlightEnd - d->rowSize())
- pos = trackedPos - highlightEnd + d->rowSize();
- if (trackedPos < pos + highlightStart)
- pos = trackedPos - highlightStart;
- }
- }
- } else {
- if (trackedPos < viewPos && d->currentItem->rowPos() < viewPos) {
- pos = qMax(trackedPos, d->currentItem->rowPos());
- } else if (d->trackedItem->endRowPos() >= viewPos + d->size()
- && d->currentItem->endRowPos() >= viewPos + d->size()) {
- if (d->trackedItem->endRowPos() <= d->currentItem->endRowPos()) {
- pos = d->trackedItem->endRowPos() - d->size() + 1;
- if (d->rowSize() > d->size())
- pos = trackedPos;
- } else {
- pos = d->currentItem->endRowPos() - d->size() + 1;
- if (d->rowSize() > d->size())
- pos = d->currentItem->rowPos();
- }
- }
- }
- if (viewPos != pos) {
- cancelFlick();
- d->calcVelocity = true;
- d->setPosition(pos);
- d->calcVelocity = false;
- }
- }
-}
-
-void QDeclarative1GridView::itemsInserted(int modelIndex, int count)
-{
- Q_D(QDeclarative1GridView);
- if (!isComponentComplete() || !d->model || !d->model->isValid())
- return;
-
- int index = d->visibleItems.count() ? d->mapFromModel(modelIndex) : 0;
- if (index < 0) {
- int i = d->visibleItems.count() - 1;
- while (i > 0 && d->visibleItems.at(i)->index == -1)
- --i;
- if (d->visibleItems.at(i)->index + 1 == modelIndex) {
- // Special case of appending an item to the model.
- index = d->visibleIndex + d->visibleItems.count();
- } else {
- if (modelIndex <= d->visibleIndex) {
- // Insert before visible items
- d->visibleIndex += count;
- for (int i = 0; i < d->visibleItems.count(); ++i) {
- FxGridItem1 *listItem = d->visibleItems.at(i);
- if (listItem->index != -1 && listItem->index >= modelIndex)
- listItem->index += count;
- }
- }
- if (d->currentIndex >= modelIndex) {
- // adjust current item index
- d->currentIndex += count;
- if (d->currentItem)
- d->currentItem->index = d->currentIndex;
- emit currentIndexChanged();
- }
- d->scheduleLayout();
- d->itemCount += count;
- emit countChanged();
- return;
- }
- }
-
- int insertCount = count;
- if (index < d->visibleIndex && d->visibleItems.count()) {
- insertCount -= d->visibleIndex - index;
- index = d->visibleIndex;
- modelIndex = d->visibleIndex;
- }
-
- qreal tempPos = d->isRightToLeftTopToBottom() ? -d->position()-d->size()+d->width()+1 : d->position();
- int to = d->buffer+tempPos+d->size()-1;
- int colPos = 0;
- int rowPos = 0;
- if (d->visibleItems.count()) {
- index -= d->visibleIndex;
- if (index < d->visibleItems.count()) {
- colPos = d->visibleItems.at(index)->colPos();
- rowPos = d->visibleItems.at(index)->rowPos();
- } else {
- // appending items to visible list
- colPos = d->visibleItems.at(index-1)->colPos() + d->colSize();
- rowPos = d->visibleItems.at(index-1)->rowPos();
- if (colPos > d->colSize() * (d->columns-1)) {
- colPos = 0;
- rowPos += d->rowSize();
- }
- }
- } else if (d->itemCount == 0 && d->header) {
- rowPos = d->headerSize();
- }
-
- // Update the indexes of the following visible items.
- for (int i = 0; i < d->visibleItems.count(); ++i) {
- FxGridItem1 *listItem = d->visibleItems.at(i);
- if (listItem->index != -1 && listItem->index >= modelIndex)
- listItem->index += count;
- }
-
- bool addedVisible = false;
- QList<FxGridItem1*> added;
- int i = 0;
- while (i < insertCount && rowPos <= to + d->rowSize()*(d->columns - (colPos/d->colSize()))/qreal(d->columns)) {
- if (!addedVisible) {
- d->scheduleLayout();
- addedVisible = true;
- }
- FxGridItem1 *item = d->createItem(modelIndex + i);
- d->visibleItems.insert(index, item);
- item->setPosition(colPos, rowPos);
- added.append(item);
- colPos += d->colSize();
- if (colPos > d->colSize() * (d->columns-1)) {
- colPos = 0;
- rowPos += d->rowSize();
- }
- ++index;
- ++i;
- }
- if (i < insertCount) {
- // We didn't insert all our new items, which means anything
- // beyond the current index is not visible - remove it.
- while (d->visibleItems.count() > index) {
- d->releaseItem(d->visibleItems.takeLast());
- }
- }
-
- // update visibleIndex
- d->visibleIndex = 0;
- for (QList<FxGridItem1*>::Iterator it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) {
- if ((*it)->index != -1) {
- d->visibleIndex = (*it)->index;
- break;
- }
- }
-
- if (d->itemCount && d->currentIndex >= modelIndex) {
- // adjust current item index
- d->currentIndex += count;
- if (d->currentItem) {
- d->currentItem->index = d->currentIndex;
- d->currentItem->setPosition(d->colPosAt(d->currentIndex), d->rowPosAt(d->currentIndex));
- }
- emit currentIndexChanged();
- } else if (d->itemCount == 0 && (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared))) {
- setCurrentIndex(0);
- }
-
- // everything is in order now - emit add() signal
- for (int j = 0; j < added.count(); ++j)
- added.at(j)->attached->emitAdd();
-
- d->itemCount += count;
- emit countChanged();
-}
-
-void QDeclarative1GridView::itemsRemoved(int modelIndex, int count)
-{
- Q_D(QDeclarative1GridView);
- if (!isComponentComplete() || !d->model || !d->model->isValid())
- return;
-
- d->itemCount -= count;
- bool currentRemoved = d->currentIndex >= modelIndex && d->currentIndex < modelIndex + count;
- bool removedVisible = false;
-
- // Remove the items from the visible list, skipping anything already marked for removal
- QList<FxGridItem1*>::Iterator it = d->visibleItems.begin();
- while (it != d->visibleItems.end()) {
- FxGridItem1 *item = *it;
- if (item->index == -1 || item->index < modelIndex) {
- // already removed, or before removed items
- if (item->index < modelIndex && !removedVisible) {
- d->scheduleLayout();
- removedVisible = true;
- }
- ++it;
- } else if (item->index >= modelIndex + count) {
- // after removed items
- item->index -= count;
- ++it;
- } else {
- // removed item
- if (!removedVisible) {
- d->scheduleLayout();
- removedVisible = true;
- }
- item->attached->emitRemove();
- if (item->attached->delayRemove()) {
- item->index = -1;
- connect(item->attached, SIGNAL(delayRemoveChanged()), this, SLOT(destroyRemoved()), Qt::QueuedConnection);
- ++it;
- } else {
- it = d->visibleItems.erase(it);
- d->releaseItem(item);
- }
- }
- }
-
- // update visibleIndex
- d->visibleIndex = 0;
- for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) {
- if ((*it)->index != -1) {
- d->visibleIndex = (*it)->index;
- break;
- }
- }
-
- // If we removed items before visible items a layout may be
- // required to ensure item 0 is in the first column.
- if (!removedVisible && modelIndex < d->visibleIndex)
- d->scheduleLayout();
-
- // fix current
- if (d->currentIndex >= modelIndex + count) {
- d->currentIndex -= count;
- if (d->currentItem)
- d->currentItem->index -= count;
- emit currentIndexChanged();
- } else if (currentRemoved) {
- // current item has been removed.
- d->releaseItem(d->currentItem);
- d->currentItem = 0;
- d->currentIndex = -1;
- if (d->itemCount)
- d->updateCurrent(qMin(modelIndex, d->itemCount-1));
- else
- emit currentIndexChanged();
- }
-
- if (removedVisible && d->visibleItems.isEmpty()) {
- d->timeline.clear();
- if (d->itemCount == 0) {
- d->setPosition(0);
- d->updateHeader();
- d->updateFooter();
- update();
- }
- }
-
- emit countChanged();
-}
-
-void QDeclarative1GridView::destroyRemoved()
-{
- Q_D(QDeclarative1GridView);
- for (QList<FxGridItem1*>::Iterator it = d->visibleItems.begin();
- it != d->visibleItems.end();) {
- FxGridItem1 *listItem = *it;
- if (listItem->index == -1 && listItem->attached->delayRemove() == false) {
- d->releaseItem(listItem);
- it = d->visibleItems.erase(it);
- } else {
- ++it;
- }
- }
-
- // Correct the positioning of the items
- d->layout();
-}
-
-void QDeclarative1GridView::itemsMoved(int from, int to, int count)
-{
- Q_D(QDeclarative1GridView);
- if (!isComponentComplete() || !d->isValid())
- return;
- QHash<int,FxGridItem1*> moved;
-
- FxGridItem1 *firstItem = d->firstVisibleItem();
-
- QList<FxGridItem1*>::Iterator it = d->visibleItems.begin();
- while (it != d->visibleItems.end()) {
- FxGridItem1 *item = *it;
- if (item->index >= from && item->index < from + count) {
- // take the items that are moving
- item->index += (to-from);
- moved.insert(item->index, item);
- it = d->visibleItems.erase(it);
- } else {
- if (item->index > from && item->index != -1) {
- // move everything after the moved items.
- item->index -= count;
- if (item->index < d->visibleIndex)
- d->visibleIndex = item->index;
- }
- ++it;
- }
- }
-
- int remaining = count;
- int endIndex = d->visibleIndex;
- it = d->visibleItems.begin();
- while (it != d->visibleItems.end()) {
- FxGridItem1 *item = *it;
- if (remaining && item->index >= to && item->index < to + count) {
- // place items in the target position, reusing any existing items
- FxGridItem1 *movedItem = moved.take(item->index);
- if (!movedItem)
- movedItem = d->createItem(item->index);
- it = d->visibleItems.insert(it, movedItem);
- if (it == d->visibleItems.begin() && firstItem)
- movedItem->setPosition(firstItem->colPos(), firstItem->rowPos());
- ++it;
- --remaining;
- } else {
- if (item->index != -1) {
- if (item->index >= to) {
- // update everything after the moved items.
- item->index += count;
- }
- endIndex = item->index;
- }
- ++it;
- }
- }
-
- // If we have moved items to the end of the visible items
- // then add any existing moved items that we have
- while (FxGridItem1 *item = moved.take(endIndex+1)) {
- d->visibleItems.append(item);
- ++endIndex;
- }
-
- // update visibleIndex
- for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) {
- if ((*it)->index != -1) {
- d->visibleIndex = (*it)->index;
- break;
- }
- }
-
- // Fix current index
- if (d->currentIndex >= 0 && d->currentItem) {
- int oldCurrent = d->currentIndex;
- d->currentIndex = d->model->indexOf(d->currentItem->item, this);
- if (oldCurrent != d->currentIndex) {
- d->currentItem->index = d->currentIndex;
- emit currentIndexChanged();
- }
- }
-
- // Whatever moved items remain are no longer visible items.
- while (moved.count()) {
- int idx = moved.begin().key();
- FxGridItem1 *item = moved.take(idx);
- if (d->currentItem && item->item == d->currentItem->item)
- item->setPosition(d->colPosAt(idx), d->rowPosAt(idx));
- d->releaseItem(item);
- }
-
- d->layout();
-}
-
-void QDeclarative1GridView::modelReset()
-{
- Q_D(QDeclarative1GridView);
- d->clear();
- refill();
- d->moveReason = QDeclarative1GridViewPrivate::SetIndex;
- d->updateCurrent(d->currentIndex);
- if (d->highlight && d->currentItem) {
- if (d->autoHighlight)
- d->highlight->setPosition(d->currentItem->colPos(), d->currentItem->rowPos());
- d->updateTrackedItem();
- }
- d->moveReason = QDeclarative1GridViewPrivate::Other;
-
- emit countChanged();
-}
-
-void QDeclarative1GridView::createdItem(int index, QDeclarativeItem *item)
-{
- Q_D(QDeclarative1GridView);
- if (d->requestedIndex != index) {
- item->setParentItem(this);
- d->unrequestedItems.insert(item, index);
- if (d->flow == QDeclarative1GridView::LeftToRight) {
- item->setPos(QPointF(d->colPosAt(index), d->rowPosAt(index)));
- } else {
- item->setPos(QPointF(d->rowPosAt(index), d->colPosAt(index)));
- }
- }
-}
-
-void QDeclarative1GridView::destroyingItem(QDeclarativeItem *item)
-{
- Q_D(QDeclarative1GridView);
- d->unrequestedItems.remove(item);
-}
-
-void QDeclarative1GridView::animStopped()
-{
- Q_D(QDeclarative1GridView);
- d->bufferMode = QDeclarative1GridViewPrivate::NoBuffer;
- if (d->haveHighlightRange && d->highlightRange == QDeclarative1GridView::StrictlyEnforceRange)
- d->updateHighlight();
-}
-
-void QDeclarative1GridView::refill()
-{
- Q_D(QDeclarative1GridView);
- if (d->isRightToLeftTopToBottom())
- d->refill(-d->position()-d->size()+1, -d->position());
- else
- d->refill(d->position(), d->position()+d->size()-1);
-}
-
-
-QDeclarative1GridViewAttached *QDeclarative1GridView::qmlAttachedProperties(QObject *obj)
-{
- return new QDeclarative1GridViewAttached(obj);
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativegridview_p.h b/src/qtquick1/graphicsitems/qdeclarativegridview_p.h
deleted file mode 100644
index e8767219f8..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativegridview_p.h
+++ /dev/null
@@ -1,287 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGRIDVIEW_H
-#define QDECLARATIVEGRIDVIEW_H
-
-#include "private/qdeclarativeflickable_p.h"
-#include "QtDeclarative/private/qdeclarativeguard_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1VisualModel;
-class QDeclarative1GridViewAttached;
-class QDeclarative1GridViewPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1GridView : public QDeclarative1Flickable
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1GridView)
-
- Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged)
- Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
- Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
- Q_PROPERTY(QDeclarativeItem *currentItem READ currentItem NOTIFY currentIndexChanged)
- Q_PROPERTY(int count READ count NOTIFY countChanged)
-
- Q_PROPERTY(QDeclarativeComponent *highlight READ highlight WRITE setHighlight NOTIFY highlightChanged)
- Q_PROPERTY(QDeclarativeItem *highlightItem READ highlightItem NOTIFY highlightItemChanged)
- Q_PROPERTY(bool highlightFollowsCurrentItem READ highlightFollowsCurrentItem WRITE setHighlightFollowsCurrentItem)
- Q_PROPERTY(int highlightMoveDuration READ highlightMoveDuration WRITE setHighlightMoveDuration NOTIFY highlightMoveDurationChanged)
-
- Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin NOTIFY preferredHighlightBeginChanged RESET resetPreferredHighlightBegin)
- Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd NOTIFY preferredHighlightEndChanged RESET resetPreferredHighlightEnd)
- Q_PROPERTY(HighlightRangeMode highlightRangeMode READ highlightRangeMode WRITE setHighlightRangeMode NOTIFY highlightRangeModeChanged)
-
- Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged)
- Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1)
- Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1)
- Q_PROPERTY(bool keyNavigationWraps READ isWrapEnabled WRITE setWrapEnabled NOTIFY keyNavigationWrapsChanged)
- Q_PROPERTY(int cacheBuffer READ cacheBuffer WRITE setCacheBuffer NOTIFY cacheBufferChanged)
- Q_PROPERTY(int cellWidth READ cellWidth WRITE setCellWidth NOTIFY cellWidthChanged)
- Q_PROPERTY(int cellHeight READ cellHeight WRITE setCellHeight NOTIFY cellHeightChanged)
-
- Q_PROPERTY(SnapMode snapMode READ snapMode WRITE setSnapMode NOTIFY snapModeChanged)
-
- Q_PROPERTY(QDeclarativeComponent *header READ header WRITE setHeader NOTIFY headerChanged)
- Q_PROPERTY(QDeclarativeComponent *footer READ footer WRITE setFooter NOTIFY footerChanged)
-
- Q_ENUMS(HighlightRangeMode)
- Q_ENUMS(SnapMode)
- Q_ENUMS(Flow)
- Q_ENUMS(PositionMode)
- Q_CLASSINFO("DefaultProperty", "data")
-
-public:
- QDeclarative1GridView(QDeclarativeItem *parent=0);
- ~QDeclarative1GridView();
-
- QVariant model() const;
- int modelCount() const;
- void setModel(const QVariant &);
-
- QDeclarativeComponent *delegate() const;
- void setDelegate(QDeclarativeComponent *);
-
- int currentIndex() const;
- void setCurrentIndex(int idx);
-
- QDeclarativeItem *currentItem();
- QDeclarativeItem *highlightItem();
- int count() const;
-
- QDeclarativeComponent *highlight() const;
- void setHighlight(QDeclarativeComponent *highlight);
-
- bool highlightFollowsCurrentItem() const;
- void setHighlightFollowsCurrentItem(bool);
-
- int highlightMoveDuration() const;
- void setHighlightMoveDuration(int);
-
- enum HighlightRangeMode { NoHighlightRange, ApplyRange, StrictlyEnforceRange };
- HighlightRangeMode highlightRangeMode() const;
- void setHighlightRangeMode(HighlightRangeMode mode);
-
- qreal preferredHighlightBegin() const;
- void setPreferredHighlightBegin(qreal);
- void resetPreferredHighlightBegin();
-
- qreal preferredHighlightEnd() const;
- void setPreferredHighlightEnd(qreal);
- void resetPreferredHighlightEnd();
-
- Qt::LayoutDirection layoutDirection() const;
- void setLayoutDirection(Qt::LayoutDirection);
- Qt::LayoutDirection effectiveLayoutDirection() const;
-
- enum Flow { LeftToRight, TopToBottom };
- Flow flow() const;
- void setFlow(Flow);
-
- bool isWrapEnabled() const;
- void setWrapEnabled(bool);
-
- int cacheBuffer() const;
- void setCacheBuffer(int);
-
- int cellWidth() const;
- void setCellWidth(int);
-
- int cellHeight() const;
- void setCellHeight(int);
-
- enum SnapMode { NoSnap, SnapToRow, SnapOneRow };
- SnapMode snapMode() const;
- void setSnapMode(SnapMode mode);
-
- QDeclarativeComponent *footer() const;
- void setFooter(QDeclarativeComponent *);
-
- QDeclarativeComponent *header() const;
- void setHeader(QDeclarativeComponent *);
-
- virtual void setContentX(qreal pos);
- virtual void setContentY(qreal pos);
-
- enum PositionMode { Beginning, Center, End, Visible, Contain };
-
- Q_INVOKABLE void positionViewAtIndex(int index, int mode);
- Q_INVOKABLE int indexAt(qreal x, qreal y) const;
- Q_INVOKABLE Q_REVISION(1) void positionViewAtBeginning();
- Q_INVOKABLE Q_REVISION(1) void positionViewAtEnd();
-
- static QDeclarative1GridViewAttached *qmlAttachedProperties(QObject *);
-
-public Q_SLOTS:
- void moveCurrentIndexUp();
- void moveCurrentIndexDown();
- void moveCurrentIndexLeft();
- void moveCurrentIndexRight();
-
-Q_SIGNALS:
- void countChanged();
- void currentIndexChanged();
- void cellWidthChanged();
- void cellHeightChanged();
- void highlightChanged();
- void highlightItemChanged();
- void preferredHighlightBeginChanged();
- void preferredHighlightEndChanged();
- void highlightRangeModeChanged();
- void highlightMoveDurationChanged();
- void modelChanged();
- void delegateChanged();
- void flowChanged();
- Q_REVISION(1) void layoutDirectionChanged();
- Q_REVISION(1) void effectiveLayoutDirectionChanged();
- void keyNavigationWrapsChanged();
- void cacheBufferChanged();
- void snapModeChanged();
- void headerChanged();
- void footerChanged();
-
-protected:
- virtual bool event(QEvent *event);
- virtual void viewportMoved();
- virtual qreal minYExtent() const;
- virtual qreal maxYExtent() const;
- virtual qreal minXExtent() const;
- virtual qreal maxXExtent() const;
- virtual void keyPressEvent(QKeyEvent *);
- virtual void componentComplete();
-
-private Q_SLOTS:
- void trackedPositionChanged();
- void itemsInserted(int index, int count);
- void itemsRemoved(int index, int count);
- void itemsMoved(int from, int to, int count);
- void modelReset();
- void destroyRemoved();
- void createdItem(int index, QDeclarativeItem *item);
- void destroyingItem(QDeclarativeItem *item);
- void animStopped();
-
-private:
- void refill();
-};
-
-class QDeclarative1GridViewAttached : public QObject
-{
- Q_OBJECT
-public:
- QDeclarative1GridViewAttached(QObject *parent)
- : QObject(parent), m_view(0), m_isCurrent(false), m_delayRemove(false) {}
- ~QDeclarative1GridViewAttached() {}
-
- Q_PROPERTY(QDeclarative1GridView *view READ view NOTIFY viewChanged)
- QDeclarative1GridView *view() { return m_view; }
- void setView(QDeclarative1GridView *view) {
- if (view != m_view) {
- m_view = view;
- emit viewChanged();
- }
- }
-
- Q_PROPERTY(bool isCurrentItem READ isCurrentItem NOTIFY currentItemChanged)
- bool isCurrentItem() const { return m_isCurrent; }
- void setIsCurrentItem(bool c) {
- if (m_isCurrent != c) {
- m_isCurrent = c;
- emit currentItemChanged();
- }
- }
-
- Q_PROPERTY(bool delayRemove READ delayRemove WRITE setDelayRemove NOTIFY delayRemoveChanged)
- bool delayRemove() const { return m_delayRemove; }
- void setDelayRemove(bool delay) {
- if (m_delayRemove != delay) {
- m_delayRemove = delay;
- emit delayRemoveChanged();
- }
- }
-
- void emitAdd() { emit add(); }
- void emitRemove() { emit remove(); }
-
-Q_SIGNALS:
- void currentItemChanged();
- void delayRemoveChanged();
- void add();
- void remove();
- void viewChanged();
-
-public:
- QDeclarativeGuard<QDeclarative1GridView> m_view;
- bool m_isCurrent : 1;
- bool m_delayRemove : 1;
-};
-
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1GridView)
-QML_DECLARE_TYPEINFO(QDeclarative1GridView, QML_HAS_ATTACHED_PROPERTIES)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimage.cpp b/src/qtquick1/graphicsitems/qdeclarativeimage.cpp
deleted file mode 100644
index 96bd6dd666..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimage.cpp
+++ /dev/null
@@ -1,604 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeimage_p.h"
-#include "QtQuick1/private/qdeclarativeimage_p_p.h"
-
-#include <QKeyEvent>
-#include <QPainter>
-
-QT_BEGIN_NAMESPACE
-
-
-
-
-/*!
- \qmlclass Image QDeclarative1Image
- \inqmlmodule QtQuick 1
- \since QtQuick 1.0
- \ingroup qml-basic-visual-elements
- \brief The Image element displays an image in a declarative user interface
- \inherits Item
-
- The Image element is used to display images in a declarative user interface.
-
- The source of the image is specified as a URL using the \l source property.
- Images can be supplied in any of the standard image formats supported by Qt,
- including bitmap formats such as PNG and JPEG, and vector graphics formats
- such as SVG. If you need to display animated images, use the \l AnimatedImage
- element.
-
- If the \l{Item::width}{width} and \l{Item::height}{height} properties are not
- specified, the Image element automatically uses the size of the loaded image.
- By default, specifying the width and height of the element causes the image
- to be scaled to that size. This behavior can be changed by setting the
- \l fillMode property, allowing the image to be stretched and tiled instead.
-
- \section1 Example Usage
-
- The following example shows the simplest usage of the Image element.
-
- \snippet doc/src/snippets/qtquick1/image.qml document
-
- \beginfloatleft
- \image declarative-qtlogo.png
- \endfloat
-
- \clearfloat
-
- \section1 Performance
-
- By default, locally available images are loaded immediately, and the user interface
- is blocked until loading is complete. If a large image is to be loaded, it may be
- preferable to load the image in a low priority thread, by enabling the \l asynchronous
- property.
-
- If the image is obtained from a network rather than a local resource, it is
- automatically loaded asynchronously, and the \l progress and \l status properties
- are updated as appropriate.
-
- Images are cached and shared internally, so if several Image elements have the same \l source,
- only one copy of the image will be loaded.
-
- \bold Note: Images are often the greatest user of memory in QML user interfaces. It is recommended
- that images which do not form part of the user interface have their
- size bounded via the \l sourceSize property. This is especially important for content
- that is loaded from external sources or provided by the user.
-
- \sa {declarative/imageelements/image}{Image example}, QDeclarativeImageProvider
-*/
-
-QDeclarative1Image::QDeclarative1Image(QDeclarativeItem *parent)
- : QDeclarative1ImageBase(*(new QDeclarative1ImagePrivate), parent)
-{
-}
-
-QDeclarative1Image::QDeclarative1Image(QDeclarative1ImagePrivate &dd, QDeclarativeItem *parent)
- : QDeclarative1ImageBase(dd, parent)
-{
-}
-
-QDeclarative1Image::~QDeclarative1Image()
-{
-}
-
-QPixmap QDeclarative1Image::pixmap() const
-{
- Q_D(const QDeclarative1Image);
- return d->pix.pixmap();
-}
-
-void QDeclarative1Image::setPixmap(const QPixmap &pix)
-{
- Q_D(QDeclarative1Image);
- if (!d->url.isEmpty())
- return;
- d->setPixmap(pix);
-}
-
-void QDeclarative1ImagePrivate::setPixmap(const QPixmap &pixmap)
-{
- Q_Q(QDeclarative1Image);
- pix.setPixmap(pixmap);
-
- q->pixmapChange();
- status = pix.isNull() ? QDeclarative1ImageBase::Null : QDeclarative1ImageBase::Ready;
-
- q->update();
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Image::fillMode
-
- Set this property to define what happens when the source image has a different size
- than the item.
-
- \list
- \o Image.Stretch - the image is scaled to fit
- \o Image.PreserveAspectFit - the image is scaled uniformly to fit without cropping
- \o Image.PreserveAspectCrop - the image is scaled uniformly to fill, cropping if necessary
- \o Image.Tile - the image is duplicated horizontally and vertically
- \o Image.TileVertically - the image is stretched horizontally and tiled vertically
- \o Image.TileHorizontally - the image is stretched vertically and tiled horizontally
- \endlist
-
- \table
-
- \row
- \o \image declarative-qtlogo-stretch.png
- \o Stretch (default)
- \qml
- Image {
- width: 130; height: 100
- smooth: true
- source: "qtlogo.png"
- }
- \endqml
-
- \row
- \o \image declarative-qtlogo-preserveaspectfit.png
- \o PreserveAspectFit
- \qml
- Image {
- width: 130; height: 100
- fillMode: Image.PreserveAspectFit
- smooth: true
- source: "qtlogo.png"
- }
- \endqml
-
- \row
- \o \image declarative-qtlogo-preserveaspectcrop.png
- \o PreserveAspectCrop
- \qml
- Image {
- width: 130; height: 100
- fillMode: Image.PreserveAspectCrop
- smooth: true
- source: "qtlogo.png"
- clip: true
- }
- \endqml
-
- \row
- \o \image declarative-qtlogo-tile.png
- \o Tile
- \qml
- Image {
- width: 120; height: 120
- fillMode: Image.Tile
- source: "qtlogo.png"
- }
- \endqml
-
- \row
- \o \image declarative-qtlogo-tilevertically.png
- \o TileVertically
- \qml
- Image {
- width: 120; height: 120
- fillMode: Image.TileVertically
- smooth: true
- source: "qtlogo.png"
- }
- \endqml
-
- \row
- \o \image declarative-qtlogo-tilehorizontally.png
- \o TileHorizontally
- \qml
- Image {
- width: 120; height: 120
- fillMode: Image.TileHorizontally
- smooth: true
- source: "qtlogo.png"
- }
- \endqml
-
- \endtable
-
- Note that \c clip is \c false by default which means that the element might
- paint outside its bounding rectangle even if the fillMode is set to \c PreserveAspectCrop.
-
- \sa {declarative/imageelements/image}{Image example}
-*/
-QDeclarative1Image::FillMode QDeclarative1Image::fillMode() const
-{
- Q_D(const QDeclarative1Image);
- return d->fillMode;
-}
-
-void QDeclarative1Image::setFillMode(FillMode mode)
-{
- Q_D(QDeclarative1Image);
- if (d->fillMode == mode)
- return;
- d->fillMode = mode;
- update();
- updatePaintedGeometry();
- emit fillModeChanged();
-}
-
-/*!
-
- \qmlproperty real QtQuick1::Image::paintedWidth
- \qmlproperty real QtQuick1::Image::paintedHeight
-
- These properties hold the size of the image that is actually painted.
- In most cases it is the same as \c width and \c height, but when using a
- \c fillMode \c PreserveAspectFit or \c fillMode \c PreserveAspectCrop
- \c paintedWidth or \c paintedHeight can be smaller or larger than
- \c width and \c height of the Image element.
-*/
-qreal QDeclarative1Image::paintedWidth() const
-{
- Q_D(const QDeclarative1Image);
- return d->paintedWidth;
-}
-
-qreal QDeclarative1Image::paintedHeight() const
-{
- Q_D(const QDeclarative1Image);
- return d->paintedHeight;
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Image::status
-
- This property holds the status of image loading. It can be one of:
- \list
- \o Image.Null - no image has been set
- \o Image.Ready - the image has been loaded
- \o Image.Loading - the image is currently being loaded
- \o Image.Error - an error occurred while loading the image
- \endlist
-
- Use this status to provide an update or respond to the status change in some way.
- For example, you could:
-
- \list
- \o Trigger a state change:
- \qml
- State { name: 'loaded'; when: image.status == Image.Ready }
- \endqml
-
- \o Implement an \c onStatusChanged signal handler:
- \qml
- Image {
- id: image
- onStatusChanged: if (image.status == Image.Ready) console.log('Loaded')
- }
- \endqml
-
- \o Bind to the status value:
- \qml
- Text { text: image.status == Image.Ready ? 'Loaded' : 'Not loaded' }
- \endqml
- \endlist
-
- \sa progress
-*/
-
-/*!
- \qmlproperty real QtQuick1::Image::progress
-
- This property holds the progress of image loading, from 0.0 (nothing loaded)
- to 1.0 (finished).
-
- \sa status
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Image::smooth
-
- Set this property if you want the image to be smoothly filtered when scaled or
- transformed. Smooth filtering gives better visual quality, but is slower. If
- the image is displayed at its natural size, this property has no visual or
- performance effect.
-
- \note Generally scaling artifacts are only visible if the image is stationary on
- the screen. A common pattern when animating an image is to disable smooth
- filtering at the beginning of the animation and reenable it at the conclusion.
-*/
-
-/*!
- \qmlproperty QSize QtQuick1::Image::sourceSize
-
- This property holds the actual width and height of the loaded image.
-
- Unlike the \l {Item::}{width} and \l {Item::}{height} properties, which scale
- the painting of the image, this property sets the actual number of pixels
- stored for the loaded image so that large images do not use more
- memory than necessary. For example, this ensures the image in memory is no
- larger than 1024x1024 pixels, regardless of the Image's \l {Item::}{width} and
- \l {Item::}{height} values:
-
- \code
- Rectangle {
- width: ...
- height: ...
-
- Image {
- anchors.fill: parent
- source: "reallyBigImage.jpg"
- sourceSize.width: 1024
- sourceSize.height: 1024
- }
- }
- \endcode
-
- If the image's actual size is larger than the sourceSize, the image is scaled down.
- If only one dimension of the size is set to greater than 0, the
- other dimension is set in proportion to preserve the source image's aspect ratio.
- (The \l fillMode is independent of this.)
-
- If the source is an instrinsically scalable image (eg. SVG), this property
- determines the size of the loaded image regardless of intrinsic size.
- Avoid changing this property dynamically; rendering an SVG is \e slow compared
- to an image.
-
- If the source is a non-scalable image (eg. JPEG), the loaded image will
- be no greater than this property specifies. For some formats (currently only JPEG),
- the whole image will never actually be loaded into memory.
-
- Since QtQuick 1.1 the sourceSize can be cleared to the natural size of the image
- by setting sourceSize to \c undefined.
-
- \note \e {Changing this property dynamically causes the image source to be reloaded,
- potentially even from the network, if it is not in the disk cache.}
-*/
-
-void QDeclarative1Image::updatePaintedGeometry()
-{
- Q_D(QDeclarative1Image);
-
- if (d->fillMode == PreserveAspectFit) {
- if (!d->pix.width() || !d->pix.height()) {
- setImplicitWidth(0);
- setImplicitHeight(0);
- return;
- }
- qreal w = widthValid() ? width() : d->pix.width();
- qreal widthScale = w / qreal(d->pix.width());
- qreal h = heightValid() ? height() : d->pix.height();
- qreal heightScale = h / qreal(d->pix.height());
- if (widthScale <= heightScale) {
- d->paintedWidth = w;
- d->paintedHeight = widthScale * qreal(d->pix.height());
- } else if(heightScale < widthScale) {
- d->paintedWidth = heightScale * qreal(d->pix.width());
- d->paintedHeight = h;
- }
- if (widthValid() && !heightValid()) {
- setImplicitHeight(d->paintedHeight);
- } else {
- setImplicitHeight(d->pix.height());
- }
- if (heightValid() && !widthValid()) {
- setImplicitWidth(d->paintedWidth);
- } else {
- setImplicitWidth(d->pix.width());
- }
- } else if (d->fillMode == PreserveAspectCrop) {
- if (!d->pix.width() || !d->pix.height())
- return;
- qreal widthScale = width() / qreal(d->pix.width());
- qreal heightScale = height() / qreal(d->pix.height());
- if (widthScale < heightScale) {
- widthScale = heightScale;
- } else if(heightScale < widthScale) {
- heightScale = widthScale;
- }
-
- d->paintedHeight = heightScale * qreal(d->pix.height());
- d->paintedWidth = widthScale * qreal(d->pix.width());
- } else {
- d->paintedWidth = width();
- d->paintedHeight = height();
- }
- emit paintedGeometryChanged();
-}
-
-void QDeclarative1Image::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- QDeclarative1ImageBase::geometryChanged(newGeometry, oldGeometry);
- updatePaintedGeometry();
-}
-
-QRectF QDeclarative1Image::boundingRect() const
-{
- Q_D(const QDeclarative1Image);
- QRectF boundingRect(0, 0, qMax(d->mWidth, d->paintedWidth), qMax(d->mHeight, d->paintedHeight));
-
- if (d->fillMode == PreserveAspectCrop) {
- if (!d->pix.width() || !d->pix.height())
- return boundingRect;
- qreal widthScale = width() / qreal(d->pix.width());
- qreal heightScale = height() / qreal(d->pix.height());
- if (widthScale < heightScale) {
- widthScale = heightScale;
- boundingRect.moveTo((width() - widthScale * d->pix.width()) / 2, 0);
- } else if (heightScale < widthScale) {
- heightScale = widthScale;
- boundingRect.moveTo(0, (height() - heightScale * d->pix.height()) / 2);
- }
- }
- return boundingRect;
-}
-
-/*!
- \qmlproperty url QtQuick1::Image::source
-
- Image can handle any image format supported by Qt, loaded from any URL scheme supported by Qt.
-
- The URL may be absolute, or relative to the URL of the component.
-
- \sa QDeclarativeImageProvider
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Image::asynchronous
-
- Specifies that images on the local filesystem should be loaded
- asynchronously in a separate thread. The default value is
- false, causing the user interface thread to block while the
- image is loaded. Setting \a asynchronous to true is useful where
- maintaining a responsive user interface is more desirable
- than having images immediately visible.
-
- Note that this property is only valid for images read from the
- local filesystem. Images loaded via a network resource (e.g. HTTP)
- are always loaded asynchonously.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Image::cache
- \since Quick 1.1
-
- Specifies whether the image should be cached. The default value is
- true. Setting \a cache to false is useful when dealing with large images,
- to make sure that they aren't cached at the expense of small 'ui element' images.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Image::mirror
- \since Quick 1.1
-
- This property holds whether the image should be horizontally inverted
- (effectively displaying a mirrored image).
-
- The default value is false.
-*/
-
-
-void QDeclarative1Image::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
-{
- Q_D(QDeclarative1Image);
- if (d->pix.pixmap().isNull() )
- return;
-
- int drawWidth = width();
- int drawHeight = height();
- bool doClip = false;
- QTransform transform;
- qreal widthScale = width() / qreal(d->pix.width());
- qreal heightScale = height() / qreal(d->pix.height());
-
- if (width() != d->pix.width() || height() != d->pix.height()) {
- if (d->fillMode >= Tile) {
- if (d->fillMode == TileVertically) {
- transform.scale(widthScale, 1.0);
- drawWidth = d->pix.width();
- } else if (d->fillMode == TileHorizontally) {
- transform.scale(1.0, heightScale);
- drawHeight = d->pix.height();
- }
- } else {
- if (d->fillMode == PreserveAspectFit) {
- if (widthScale <= heightScale) {
- heightScale = widthScale;
- transform.translate(0, (height() - heightScale * d->pix.height()) / 2);
- } else if(heightScale < widthScale) {
- widthScale = heightScale;
- transform.translate((width() - widthScale * d->pix.width()) / 2, 0);
- }
- } else if (d->fillMode == PreserveAspectCrop) {
- if (widthScale < heightScale) {
- widthScale = heightScale;
- transform.translate((width() - widthScale * d->pix.width()) / 2, 0);
- } else if(heightScale < widthScale) {
- heightScale = widthScale;
- transform.translate(0, (height() - heightScale * d->pix.height()) / 2);
- }
- }
- transform.scale(widthScale, heightScale);
- drawWidth = d->pix.width();
- drawHeight = d->pix.height();
- doClip = clip();
- }
- }
-
- QTransform oldTransform;
- bool oldAA = p->testRenderHint(QPainter::Antialiasing);
- bool oldSmooth = p->testRenderHint(QPainter::SmoothPixmapTransform);
- if (d->smooth)
- p->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth);
- if (doClip) {
- p->save();
- p->setClipRect(QRectF(0, 0, d->mWidth, d->mHeight), Qt::IntersectClip);
- }
- if (d->mirror)
- transform.translate(drawWidth, 0).scale(-1.0, 1.0);
- if (!transform.isIdentity()) {
- oldTransform = p->transform();
- p->setWorldTransform(transform * oldTransform);
- }
-
- if (d->fillMode >= Tile)
- p->drawTiledPixmap(QRectF(0, 0, drawWidth, drawHeight), d->pix);
- else
- p->drawPixmap(QRectF(0, 0, drawWidth, drawHeight), d->pix, QRectF(0, 0, drawWidth, drawHeight));
-
- if (d->smooth) {
- p->setRenderHint(QPainter::Antialiasing, oldAA);
- p->setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth);
- }
- if (doClip)
- p->restore();
- if (!transform.isIdentity())
- p->setWorldTransform(oldTransform);
-}
-
-void QDeclarative1Image::pixmapChange()
-{
- Q_D(QDeclarative1Image);
- // PreserveAspectFit calculates the implicit size differently so we
- // don't call our superclass pixmapChange(), since that would
- // result in the implicit size being set incorrectly, then updated
- // in updatePaintedGeometry()
- if (d->fillMode != PreserveAspectFit)
- QDeclarative1ImageBase::pixmapChange();
- updatePaintedGeometry();
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimage_p.h b/src/qtquick1/graphicsitems/qdeclarativeimage_p.h
deleted file mode 100644
index 4ed69d856e..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimage_p.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEIMAGE_H
-#define QDECLARATIVEIMAGE_H
-
-#include "private/qdeclarativeimagebase_p.h"
-
-#include <QtNetwork/qnetworkreply.h>
-
-QT_BEGIN_HEADER
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1ImagePrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1Image : public QDeclarative1ImageBase
-{
- Q_OBJECT
- Q_ENUMS(FillMode)
-
- Q_PROPERTY(FillMode fillMode READ fillMode WRITE setFillMode NOTIFY fillModeChanged)
- Q_PROPERTY(qreal paintedWidth READ paintedWidth NOTIFY paintedGeometryChanged)
- Q_PROPERTY(qreal paintedHeight READ paintedHeight NOTIFY paintedGeometryChanged)
-
-public:
- QDeclarative1Image(QDeclarativeItem *parent=0);
- ~QDeclarative1Image();
-
- enum FillMode { Stretch, PreserveAspectFit, PreserveAspectCrop, Tile, TileVertically, TileHorizontally };
- FillMode fillMode() const;
- void setFillMode(FillMode);
-
- QPixmap pixmap() const;
- void setPixmap(const QPixmap &);
-
- qreal paintedWidth() const;
- qreal paintedHeight() const;
-
- void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
- QRectF boundingRect() const;
-
-Q_SIGNALS:
- void fillModeChanged();
- void paintedGeometryChanged();
-
-protected:
- QDeclarative1Image(QDeclarative1ImagePrivate &dd, QDeclarativeItem *parent);
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
- void pixmapChange();
- void updatePaintedGeometry();
-
-private:
- Q_DISABLE_COPY(QDeclarative1Image)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1Image)
-};
-
-QT_END_NAMESPACE
-QML_DECLARE_TYPE(QDeclarative1Image)
-QT_END_HEADER
-
-#endif // QDECLARATIVEIMAGE_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimage_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeimage_p_p.h
deleted file mode 100644
index b649a9f1ac..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimage_p_p.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEIMAGE_P_H
-#define QDECLARATIVEIMAGE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeitem_p.h"
-#include "private/qdeclarativeimagebase_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1ImagePrivate : public QDeclarative1ImageBasePrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1Image)
-
-public:
- QDeclarative1ImagePrivate()
- : fillMode(QDeclarative1Image::Stretch), paintedWidth(0), paintedHeight(0)
- {
- }
-
- QDeclarative1Image::FillMode fillMode;
- qreal paintedWidth;
- qreal paintedHeight;
- void setPixmap(const QPixmap &pix);
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEIMAGE_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimagebase.cpp b/src/qtquick1/graphicsitems/qdeclarativeimagebase.cpp
deleted file mode 100644
index a6f455fe81..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimagebase.cpp
+++ /dev/null
@@ -1,288 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeimagebase_p.h"
-#include "QtQuick1/private/qdeclarativeimagebase_p_p.h"
-
-#include <QtDeclarative/qdeclarativeengine.h>
-#include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtQuick1/private/qdeclarativepixmapcache_p.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-QDeclarative1ImageBase::QDeclarative1ImageBase(QDeclarativeItem *parent)
- : QDeclarative1ImplicitSizeItem(*(new QDeclarative1ImageBasePrivate), parent)
-{
-}
-
-QDeclarative1ImageBase::QDeclarative1ImageBase(QDeclarative1ImageBasePrivate &dd, QDeclarativeItem *parent)
- : QDeclarative1ImplicitSizeItem(dd, parent)
-{
-}
-
-QDeclarative1ImageBase::~QDeclarative1ImageBase()
-{
-}
-
-QDeclarative1ImageBase::Status QDeclarative1ImageBase::status() const
-{
- Q_D(const QDeclarative1ImageBase);
- return d->status;
-}
-
-
-qreal QDeclarative1ImageBase::progress() const
-{
- Q_D(const QDeclarative1ImageBase);
- return d->progress;
-}
-
-
-bool QDeclarative1ImageBase::asynchronous() const
-{
- Q_D(const QDeclarative1ImageBase);
- return d->async;
-}
-
-void QDeclarative1ImageBase::setAsynchronous(bool async)
-{
- Q_D(QDeclarative1ImageBase);
- if (d->async != async) {
- d->async = async;
- emit asynchronousChanged();
- }
-}
-
-QUrl QDeclarative1ImageBase::source() const
-{
- Q_D(const QDeclarative1ImageBase);
- return d->url;
-}
-
-void QDeclarative1ImageBase::setSource(const QUrl &url)
-{
- Q_D(QDeclarative1ImageBase);
- //equality is fairly expensive, so we bypass for simple, common case
- if ((d->url.isEmpty() == url.isEmpty()) && url == d->url)
- return;
-
- d->url = url;
- emit sourceChanged(d->url);
-
- if (isComponentComplete())
- load();
-}
-
-void QDeclarative1ImageBase::setSourceSize(const QSize& size)
-{
- Q_D(QDeclarative1ImageBase);
- if (d->sourcesize == size)
- return;
-
- d->sourcesize = size;
- d->explicitSourceSize = true;
- emit sourceSizeChanged();
- if (isComponentComplete())
- load();
-}
-
-QSize QDeclarative1ImageBase::sourceSize() const
-{
- Q_D(const QDeclarative1ImageBase);
-
- int width = d->sourcesize.width();
- int height = d->sourcesize.height();
- return QSize(width != -1 ? width : d->pix.width(), height != -1 ? height : d->pix.height());
-}
-
-void QDeclarative1ImageBase::resetSourceSize()
-{
- Q_D(QDeclarative1ImageBase);
- if (!d->explicitSourceSize)
- return;
- d->explicitSourceSize = false;
- d->sourcesize = QSize();
- emit sourceSizeChanged();
- if (isComponentComplete())
- load();
-}
-
-bool QDeclarative1ImageBase::cache() const
-{
- Q_D(const QDeclarative1ImageBase);
- return d->cache;
-}
-
-void QDeclarative1ImageBase::setCache(bool cache)
-{
- Q_D(QDeclarative1ImageBase);
- if (d->cache == cache)
- return;
-
- d->cache = cache;
- emit cacheChanged();
- if (isComponentComplete())
- load();
-}
-
-void QDeclarative1ImageBase::setMirror(bool mirror)
-{
- Q_D(QDeclarative1ImageBase);
- if (mirror == d->mirror)
- return;
-
- d->mirror = mirror;
-
- if (isComponentComplete())
- update();
-
- emit mirrorChanged();
-}
-
-bool QDeclarative1ImageBase::mirror() const
-{
- Q_D(const QDeclarative1ImageBase);
- return d->mirror;
-}
-
-void QDeclarative1ImageBase::load()
-{
- Q_D(QDeclarative1ImageBase);
-
- if (d->url.isEmpty()) {
- d->pix.clear(this);
- d->status = Null;
- d->progress = 0.0;
- pixmapChange();
- emit progressChanged(d->progress);
- emit statusChanged(d->status);
- update();
- } else {
- QDeclarative1Pixmap::Options options;
- if (d->async)
- options |= QDeclarative1Pixmap::Asynchronous;
- if (d->cache)
- options |= QDeclarative1Pixmap::Cache;
- d->pix.clear(this);
- d->pix.load(qmlEngine(this), d->url, d->explicitSourceSize ? sourceSize() : QSize(), options);
-
- if (d->pix.isLoading()) {
- d->progress = 0.0;
- d->status = Loading;
- emit progressChanged(d->progress);
- emit statusChanged(d->status);
-
- static int thisRequestProgress = -1;
- static int thisRequestFinished = -1;
- if (thisRequestProgress == -1) {
- thisRequestProgress =
- QDeclarative1ImageBase::staticMetaObject.indexOfSlot("requestProgress(qint64,qint64)");
- thisRequestFinished =
- QDeclarative1ImageBase::staticMetaObject.indexOfSlot("requestFinished()");
- }
-
- d->pix.connectFinished(this, thisRequestFinished);
- d->pix.connectDownloadProgress(this, thisRequestProgress);
-
- } else {
- requestFinished();
- }
- }
-}
-
-void QDeclarative1ImageBase::requestFinished()
-{
- Q_D(QDeclarative1ImageBase);
-
- QDeclarative1ImageBase::Status oldStatus = d->status;
- qreal oldProgress = d->progress;
-
- if (d->pix.isError()) {
- d->status = Error;
- qmlInfo(this) << d->pix.error();
- } else {
- d->status = Ready;
- }
-
- d->progress = 1.0;
-
- pixmapChange();
-
- if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height())
- emit sourceSizeChanged();
-
- if (d->status != oldStatus)
- emit statusChanged(d->status);
- if (d->progress != oldProgress)
- emit progressChanged(d->progress);
-
- update();
-}
-
-void QDeclarative1ImageBase::requestProgress(qint64 received, qint64 total)
-{
- Q_D(QDeclarative1ImageBase);
- if (d->status == Loading && total > 0) {
- d->progress = qreal(received)/total;
- emit progressChanged(d->progress);
- }
-}
-
-void QDeclarative1ImageBase::componentComplete()
-{
- Q_D(QDeclarative1ImageBase);
- QDeclarativeItem::componentComplete();
- if (d->url.isValid())
- load();
-}
-
-void QDeclarative1ImageBase::pixmapChange()
-{
- Q_D(QDeclarative1ImageBase);
- setImplicitWidth(d->pix.width());
- setImplicitHeight(d->pix.height());
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimagebase_p.h b/src/qtquick1/graphicsitems/qdeclarativeimagebase_p.h
deleted file mode 100644
index 364acf7a10..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimagebase_p.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEIMAGEBASE_H
-#define QDECLARATIVEIMAGEBASE_H
-
-#include "qdeclarativeimplicitsizeitem_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1ImageBasePrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1ImageBase : public QDeclarative1ImplicitSizeItem
-{
- Q_OBJECT
- Q_ENUMS(Status)
-
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
- Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
- Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged)
- Q_PROPERTY(bool asynchronous READ asynchronous WRITE setAsynchronous NOTIFY asynchronousChanged)
- Q_PROPERTY(bool cache READ cache WRITE setCache NOTIFY cacheChanged REVISION 1)
- Q_PROPERTY(QSize sourceSize READ sourceSize WRITE setSourceSize RESET resetSourceSize NOTIFY sourceSizeChanged)
- Q_PROPERTY(bool mirror READ mirror WRITE setMirror NOTIFY mirrorChanged REVISION 1)
-
-public:
- QDeclarative1ImageBase(QDeclarativeItem *parent=0);
- ~QDeclarative1ImageBase();
- enum Status { Null, Ready, Loading, Error };
- Status status() const;
- qreal progress() const;
-
- QUrl source() const;
- virtual void setSource(const QUrl &url);
-
- bool asynchronous() const;
- void setAsynchronous(bool);
-
- bool cache() const;
- void setCache(bool);
-
- virtual void setSourceSize(const QSize&);
- QSize sourceSize() const;
- void resetSourceSize();
-
- virtual void setMirror(bool mirror);
- bool mirror() const;
-
-Q_SIGNALS:
- void sourceChanged(const QUrl &);
- void sourceSizeChanged();
- void statusChanged(QDeclarative1ImageBase::Status);
- void progressChanged(qreal progress);
- void asynchronousChanged();
- Q_REVISION(1) void cacheChanged();
- Q_REVISION(1) void mirrorChanged();
-
-protected:
- virtual void load();
- virtual void componentComplete();
- virtual void pixmapChange();
- QDeclarative1ImageBase(QDeclarative1ImageBasePrivate &dd, QDeclarativeItem *parent);
-
-private Q_SLOTS:
- virtual void requestFinished();
- void requestProgress(qint64,qint64);
-
-private:
- Q_DISABLE_COPY(QDeclarative1ImageBase)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1ImageBase)
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEIMAGEBASE_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimagebase_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeimagebase_p_p.h
deleted file mode 100644
index 45fc8c4af7..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimagebase_p_p.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEIMAGEBASE_P_H
-#define QDECLARATIVEIMAGEBASE_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeimplicitsizeitem_p_p.h"
-#include "QtQuick1/private/qdeclarativepixmapcache_p.h"
-
-#include <QtCore/QPointer>
-
-QT_BEGIN_NAMESPACE
-
-class QNetworkReply;
-
-class QDeclarative1ImageBasePrivate : public QDeclarative1ImplicitSizeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1ImageBase)
-
-public:
- QDeclarative1ImageBasePrivate()
- : status(QDeclarative1ImageBase::Null),
- progress(0.0),
- explicitSourceSize(false),
- async(false),
- cache(true),
- mirror(false)
- {
- QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents;
- }
-
- QDeclarative1Pixmap pix;
- QDeclarative1ImageBase::Status status;
- QUrl url;
- qreal progress;
- QSize sourcesize;
- bool explicitSourceSize : 1;
- bool async : 1;
- bool cache : 1;
- bool mirror: 1;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem.cpp b/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem.cpp
deleted file mode 100644
index 3df40e8369..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeimplicitsizeitem_p.h"
-#include "QtQuick1/private/qdeclarativeimplicitsizeitem_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-
-
-void QDeclarative1ImplicitSizeItemPrivate::implicitWidthChanged()
-{
- Q_Q(QDeclarative1ImplicitSizeItem);
- emit q->implicitWidthChanged();
-}
-
-void QDeclarative1ImplicitSizeItemPrivate::implicitHeightChanged()
-{
- Q_Q(QDeclarative1ImplicitSizeItem);
- emit q->implicitHeightChanged();
-}
-
-QDeclarative1ImplicitSizeItem::QDeclarative1ImplicitSizeItem(QDeclarativeItem *parent)
- : QDeclarativeItem(*(new QDeclarative1ImplicitSizeItemPrivate), parent)
-{
-}
-
-QDeclarative1ImplicitSizeItem::QDeclarative1ImplicitSizeItem(QDeclarative1ImplicitSizeItemPrivate &dd, QDeclarativeItem *parent)
- : QDeclarativeItem(dd, parent)
-{
-}
-
-
-void QDeclarative1ImplicitSizePaintedItemPrivate::implicitWidthChanged()
-{
- Q_Q(QDeclarative1ImplicitSizePaintedItem);
- emit q->implicitWidthChanged();
-}
-
-void QDeclarative1ImplicitSizePaintedItemPrivate::implicitHeightChanged()
-{
- Q_Q(QDeclarative1ImplicitSizePaintedItem);
- emit q->implicitHeightChanged();
-}
-
-QDeclarative1ImplicitSizePaintedItem::QDeclarative1ImplicitSizePaintedItem(QDeclarativeItem *parent)
- : QDeclarative1PaintedItem(*(new QDeclarative1ImplicitSizePaintedItemPrivate), parent)
-{
-}
-
-QDeclarative1ImplicitSizePaintedItem::QDeclarative1ImplicitSizePaintedItem(QDeclarative1ImplicitSizePaintedItemPrivate &dd, QDeclarativeItem *parent)
- : QDeclarative1PaintedItem(dd, parent)
-{
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem_p.h b/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem_p.h
deleted file mode 100644
index 5318058897..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem_p.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEIMPLICITSIZEITEM_H
-#define QDECLARATIVEIMPLICITSIZEITEM_H
-
-#include "qdeclarativepainteditem_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1ImplicitSizeItemPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1ImplicitSizeItem : public QDeclarativeItem
-{
- Q_OBJECT
- Q_PROPERTY(qreal implicitWidth READ implicitWidth NOTIFY implicitWidthChanged REVISION 1)
- Q_PROPERTY(qreal implicitHeight READ implicitHeight NOTIFY implicitHeightChanged REVISION 1)
-
-public:
- QDeclarative1ImplicitSizeItem(QDeclarativeItem *parent = 0);
-
-protected:
- QDeclarative1ImplicitSizeItem(QDeclarative1ImplicitSizeItemPrivate &dd, QDeclarativeItem *parent);
-
-Q_SIGNALS:
- Q_REVISION(1) void implicitWidthChanged();
- Q_REVISION(1) void implicitHeightChanged();
-
-private:
- Q_DISABLE_COPY(QDeclarative1ImplicitSizeItem)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1ImplicitSizeItem)
-};
-
-class QDeclarative1ImplicitSizePaintedItemPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1ImplicitSizePaintedItem : public QDeclarative1PaintedItem
-{
- Q_OBJECT
- Q_PROPERTY(qreal implicitWidth READ implicitWidth NOTIFY implicitWidthChanged REVISION 1)
- Q_PROPERTY(qreal implicitHeight READ implicitHeight NOTIFY implicitHeightChanged REVISION 1)
-
-public:
- QDeclarative1ImplicitSizePaintedItem(QDeclarativeItem *parent = 0);
-
-protected:
- QDeclarative1ImplicitSizePaintedItem(QDeclarative1ImplicitSizePaintedItemPrivate &dd, QDeclarativeItem *parent);
- virtual void drawContents(QPainter *, const QRect &) {};
-
-Q_SIGNALS:
- Q_REVISION(1) void implicitWidthChanged();
- Q_REVISION(1) void implicitHeightChanged();
-
-private:
- Q_DISABLE_COPY(QDeclarative1ImplicitSizePaintedItem)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1ImplicitSizePaintedItem)
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEIMPLICITSIZEITEM_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem_p_p.h
deleted file mode 100644
index dc4a848e52..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeimplicitsizeitem_p_p.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEIMPLICITSIZEITEM_P_H
-#define QDECLARATIVEIMPLICITSIZEITEM_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeitem_p.h"
-#include "private/qdeclarativepainteditem_p_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1ImplicitSizeItemPrivate : public QDeclarativeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1ImplicitSizeItem)
-
-public:
- QDeclarative1ImplicitSizeItemPrivate()
- {
- }
-
- virtual void implicitWidthChanged();
- virtual void implicitHeightChanged();
-};
-
-
-class QDeclarative1ImplicitSizePaintedItemPrivate : public QDeclarative1PaintedItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1ImplicitSizePaintedItem)
-
-public:
- QDeclarative1ImplicitSizePaintedItemPrivate()
- {
- }
-
- virtual void implicitWidthChanged();
- virtual void implicitHeightChanged();
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEIMPLICITSIZEITEM_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeitem.cpp b/src/qtquick1/graphicsitems/qdeclarativeitem.cpp
deleted file mode 100644
index 018fe6a52d..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeitem.cpp
+++ /dev/null
@@ -1,3843 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/qdeclarativeitem.h"
-
-#include "QtQuick1/private/qdeclarativeevents_p_p.h"
-#include <QtDeclarative/private/qdeclarativeengine_p.h>
-#include <private/qgraphicsitem_p.h>
-#include <QtQuick1/private/qdeclarativeitem_p.h>
-
-#include <QtDeclarative/qdeclarativeengine.h>
-#include <QtQuick1/private/qdeclarativeopenmetaobject_p.h>
-#include <QtQuick1/private/qdeclarativestate_p.h>
-#include <QtQuick1/qdeclarativeview.h>
-#include <QtQuick1/private/qdeclarativestategroup_p.h>
-#include <QtDeclarative/qdeclarativecomponent.h>
-#include <QtDeclarative/qdeclarativeinfo.h>
-// ### Due to the workaround mentioned in accessibleRole()
-#include <QtQuick1/private/qdeclarativetext_p.h>
-
-#include <QDebug>
-#include <QPen>
-#include <QEvent>
-#include <QGraphicsSceneMouseEvent>
-#include <QtCore/qnumeric.h>
-#include <QtDeclarative/qjsengine.h>
-
-#include <private/qv8engine_p.h>
-#include <QtWidgets/qgraphicstransform.h>
-#include <private/qlistmodelinterface_p.h>
-#include <QAccessible>
-#include <QtQuick1/private/qdeclarativeaccessibleattached_p.h>
-
-#include <float.h>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmlclass Transform QGraphicsTransform
- \inqmlmodule QtQuick 1
- \ingroup qml-transform-elements
- \since QtQuick 1.0
- \brief The Transform elements provide a way of building advanced transformations on Items.
-
- The Transform element is a base type which cannot be instantiated directly.
- The following concrete Transform types are available:
-
- \list
- \o \l Rotation
- \o \l Scale
- \o \l Translate
- \endlist
-
- The Transform elements let you create and control advanced transformations that can be configured
- independently using specialized properties.
-
- You can assign any number of Transform elements to an \l Item. Each Transform is applied in order,
- one at a time.
-*/
-
-/*!
- \qmlclass Translate QDeclarative1Translate
- \inqmlmodule QtQuick 1
- \ingroup qml-transform-elements
- \since QtQuick 1.0
- \brief The Translate object provides a way to move an Item without changing its x or y properties.
-
- The Translate object provides independent control over position in addition to the Item's x and y properties.
-
- The following example moves the Y axis of the \l Rectangle elements while still allowing the \l Row element
- to lay the items out as if they had not been transformed:
- \qml
- import QtQuick 1.0
-
- Row {
- Rectangle {
- width: 100; height: 100
- color: "blue"
- transform: Translate { y: 20 }
- }
- Rectangle {
- width: 100; height: 100
- color: "red"
- transform: Translate { y: -20 }
- }
- }
- \endqml
-
- \image translate.png
-*/
-
-/*!
- \qmlproperty real QtQuick1::Translate::x
-
- The translation along the X axis.
-*/
-
-/*!
- \qmlproperty real QtQuick1::Translate::y
-
- The translation along the Y axis.
-*/
-
-/*!
- \qmlclass Scale QGraphicsScale
- \inqmlmodule QtQuick 1
- \ingroup qml-transform-elements
- \since QtQuick 1.0
- \brief The Scale element provides a way to scale an Item.
-
- The Scale element gives more control over scaling than using \l Item's \l{Item::scale}{scale} property. Specifically,
- it allows a different scale for the x and y axes, and allows the scale to be relative to an
- arbitrary point.
-
- The following example scales the X axis of the Rectangle, relative to its interior point 25, 25:
- \qml
- Rectangle {
- width: 100; height: 100
- color: "blue"
- transform: Scale { origin.x: 25; origin.y: 25; xScale: 3}
- }
- \endqml
-
- \sa Rotation, Translate
-*/
-
-/*!
- \qmlproperty real QtQuick1::Scale::origin.x
- \qmlproperty real QtQuick1::Scale::origin.y
-
- The point that the item is scaled from (i.e., the point that stays fixed relative to the parent as
- the rest of the item grows). By default the origin is 0, 0.
-*/
-
-/*!
- \qmlproperty real QtQuick1::Scale::xScale
-
- The scaling factor for the X axis.
-*/
-
-/*!
- \qmlproperty real QtQuick1::Scale::yScale
-
- The scaling factor for the Y axis.
-*/
-
-/*!
- \qmlclass Rotation QGraphicsRotation
- \inqmlmodule QtQuick 1
- \ingroup qml-transform-elements
- \since QtQuick 1.0
- \brief The Rotation object provides a way to rotate an Item.
-
- The Rotation object gives more control over rotation than using \l Item's \l{Item::rotation}{rotation} property.
- Specifically, it allows (z axis) rotation to be relative to an arbitrary point.
-
- The following example rotates a Rectangle around its interior point 25, 25:
- \qml
- Rectangle {
- width: 100; height: 100
- color: "blue"
- transform: Rotation { origin.x: 25; origin.y: 25; angle: 45}
- }
- \endqml
-
- Rotation also provides a way to specify 3D-like rotations for Items. For these types of
- rotations you must specify the axis to rotate around in addition to the origin point.
-
- The following example shows various 3D-like rotations applied to an \l Image.
- \snippet doc/src/snippets/qtquick1/rotation.qml 0
-
- \image axisrotation.png
-
- \sa {declarative/ui-components/dialcontrol}{Dial Control example}, {declarative/toys/clocks}{Clocks example}
-*/
-
-/*!
- \qmlproperty real QtQuick1::Rotation::origin.x
- \qmlproperty real QtQuick1::Rotation::origin.y
-
- The origin point of the rotation (i.e., the point that stays fixed relative to the parent as
- the rest of the item rotates). By default the origin is 0, 0.
-*/
-
-/*!
- \qmlproperty real QtQuick1::Rotation::axis.x
- \qmlproperty real QtQuick1::Rotation::axis.y
- \qmlproperty real QtQuick1::Rotation::axis.z
-
- The axis to rotate around. For simple (2D) rotation around a point, you do not need to specify an axis,
- as the default axis is the z axis (\c{ axis { x: 0; y: 0; z: 1 } }).
-
- For a typical 3D-like rotation you will usually specify both the origin and the axis.
-
- \image 3d-rotation-axis.png
-*/
-
-/*!
- \qmlproperty real QtQuick1::Rotation::angle
-
- The angle to rotate, in degrees clockwise.
-*/
-
-QDeclarative1Contents::QDeclarative1Contents(QDeclarativeItem *item) : m_item(item), m_x(0), m_y(0), m_width(0), m_height(0)
-{
- //### optimize
- connect(this, SIGNAL(rectChanged(QRectF)), m_item, SIGNAL(childrenRectChanged(QRectF)));
-}
-
-QDeclarative1Contents::~QDeclarative1Contents()
-{
- QList<QGraphicsItem *> children = m_item->childItems();
- for (int i = 0; i < children.count(); ++i) {
- QDeclarativeItem *child = qobject_cast<QDeclarativeItem *>(children.at(i));
- if(!child)//### Should this be ignoring non-QDeclarativeItem graphicsobjects?
- continue;
- QDeclarativeItemPrivate::get(child)->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry | QDeclarativeItemPrivate::Destroyed);
- }
-}
-
-QRectF QDeclarative1Contents::rectF() const
-{
- return QRectF(m_x, m_y, m_width, m_height);
-}
-
-void QDeclarative1Contents::calcHeight(QDeclarativeItem *changed)
-{
- qreal oldy = m_y;
- qreal oldheight = m_height;
-
- if (changed) {
- qreal top = oldy;
- qreal bottom = oldy + oldheight;
- qreal y = changed->y();
- if (y + changed->height() > bottom)
- bottom = y + changed->height();
- if (y < top)
- top = y;
- m_y = top;
- m_height = bottom - top;
- } else {
- qreal top = FLT_MAX;
- qreal bottom = 0;
- QList<QGraphicsItem *> children = m_item->childItems();
- for (int i = 0; i < children.count(); ++i) {
- QDeclarativeItem *child = qobject_cast<QDeclarativeItem *>(children.at(i));
- if(!child)//### Should this be ignoring non-QDeclarativeItem graphicsobjects?
- continue;
- qreal y = child->y();
- if (y + child->height() > bottom)
- bottom = y + child->height();
- if (y < top)
- top = y;
- }
- if (!children.isEmpty())
- m_y = top;
- m_height = qMax(bottom - top, qreal(0.0));
- }
-
- if (m_height != oldheight || m_y != oldy)
- emit rectChanged(rectF());
-}
-
-void QDeclarative1Contents::calcWidth(QDeclarativeItem *changed)
-{
- qreal oldx = m_x;
- qreal oldwidth = m_width;
-
- if (changed) {
- qreal left = oldx;
- qreal right = oldx + oldwidth;
- qreal x = changed->x();
- if (x + changed->width() > right)
- right = x + changed->width();
- if (x < left)
- left = x;
- m_x = left;
- m_width = right - left;
- } else {
- qreal left = FLT_MAX;
- qreal right = 0;
- QList<QGraphicsItem *> children = m_item->childItems();
- for (int i = 0; i < children.count(); ++i) {
- QDeclarativeItem *child = qobject_cast<QDeclarativeItem *>(children.at(i));
- if(!child)//### Should this be ignoring non-QDeclarativeItem graphicsobjects?
- continue;
- qreal x = child->x();
- if (x + child->width() > right)
- right = x + child->width();
- if (x < left)
- left = x;
- }
- if (!children.isEmpty())
- m_x = left;
- m_width = qMax(right - left, qreal(0.0));
- }
-
- if (m_width != oldwidth || m_x != oldx)
- emit rectChanged(rectF());
-}
-
-void QDeclarative1Contents::complete()
-{
- QList<QGraphicsItem *> children = m_item->childItems();
- for (int i = 0; i < children.count(); ++i) {
- QDeclarativeItem *child = qobject_cast<QDeclarativeItem *>(children.at(i));
- if(!child)//### Should this be ignoring non-QDeclarativeItem graphicsobjects?
- continue;
- QDeclarativeItemPrivate::get(child)->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry | QDeclarativeItemPrivate::Destroyed);
- //###what about changes to visibility?
- }
-
- calcGeometry();
-}
-
-void QDeclarative1Contents::itemGeometryChanged(QDeclarativeItem *changed, const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- Q_UNUSED(changed)
- //### we can only pass changed if the left edge has moved left, or the right edge has moved right
- if (newGeometry.width() != oldGeometry.width() || newGeometry.x() != oldGeometry.x())
- calcWidth(/*changed*/);
- if (newGeometry.height() != oldGeometry.height() || newGeometry.y() != oldGeometry.y())
- calcHeight(/*changed*/);
-}
-
-void QDeclarative1Contents::itemDestroyed(QDeclarativeItem *item)
-{
- if (item)
- QDeclarativeItemPrivate::get(item)->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry | QDeclarativeItemPrivate::Destroyed);
- calcGeometry();
-}
-
-void QDeclarative1Contents::childRemoved(QDeclarativeItem *item)
-{
- if (item)
- QDeclarativeItemPrivate::get(item)->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry | QDeclarativeItemPrivate::Destroyed);
- calcGeometry();
-}
-
-void QDeclarative1Contents::childAdded(QDeclarativeItem *item)
-{
- if (item)
- QDeclarativeItemPrivate::get(item)->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry | QDeclarativeItemPrivate::Destroyed);
- calcWidth(item);
- calcHeight(item);
-}
-
-QDeclarativeItemKeyFilter::QDeclarativeItemKeyFilter(QDeclarativeItem *item)
-: m_processPost(false), m_next(0)
-{
- QDeclarativeItemPrivate *p =
- item?static_cast<QDeclarativeItemPrivate *>(QGraphicsItemPrivate::get(item)):0;
- if (p) {
- m_next = p->keyHandler;
- p->keyHandler = this;
- }
-}
-
-QDeclarativeItemKeyFilter::~QDeclarativeItemKeyFilter()
-{
-}
-
-void QDeclarativeItemKeyFilter::keyPressed(QKeyEvent *event, bool post)
-{
- if (m_next) m_next->keyPressed(event, post);
-}
-
-void QDeclarativeItemKeyFilter::keyReleased(QKeyEvent *event, bool post)
-{
- if (m_next) m_next->keyReleased(event, post);
-}
-
-void QDeclarativeItemKeyFilter::inputMethodEvent(QInputMethodEvent *event, bool post)
-{
- if (m_next) m_next->inputMethodEvent(event, post);
-}
-
-QVariant QDeclarativeItemKeyFilter::inputMethodQuery(Qt::InputMethodQuery query) const
-{
- if (m_next) return m_next->inputMethodQuery(query);
- return QVariant();
-}
-
-void QDeclarativeItemKeyFilter::componentComplete()
-{
- if (m_next) m_next->componentComplete();
-}
-
-
-/*!
- \qmlclass KeyNavigation QDeclarative1KeyNavigationAttached
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-interaction-elements
- \since QtQuick 1.0
- \brief The KeyNavigation attached property supports key navigation by arrow keys.
-
- Key-based user interfaces commonly allow the use of arrow keys to navigate between
- focusable items. The KeyNavigation attached property enables this behavior by providing a
- convenient way to specify the item that should gain focus when an arrow or tab key is pressed.
-
- The following example provides key navigation for a 2x2 grid of items:
-
- \snippet doc/src/snippets/qtquick1/keynavigation.qml 0
-
- The top-left item initially receives focus by setting \l {Item::}{focus} to
- \c true. When an arrow key is pressed, the focus will move to the
- appropriate item, as defined by the value that has been set for
- the KeyNavigation \l left, \l right, \l up or \l down properties.
-
- Note that if a KeyNavigation attached property receives the key press and release
- events for a requested arrow or tab key, the event is accepted and does not
- propagate any further.
-
- By default, KeyNavigation receives key events after the item to which it is attached.
- If the item accepts the key event, the KeyNavigation attached property will not
- receive an event for that key. Setting the \l priority property to
- \c KeyNavigation.BeforeItem allows the event to be used for key navigation
- before the item, rather than after.
-
- If item to which the focus is switching is not enabled or visible, an attempt will
- be made to skip this item and focus on the next. This is possible if there are
- a chain of items with the same KeyNavigation handler. If multiple items in a row are not enabled
- or visible, they will also be skipped.
-
- KeyNavigation will implicitly set the other direction to return focus to this item. So if you set
- \l left to another item, \l right will be set on that item's KeyNavigation to set focus back to this
- item. However, if that item's KeyNavigation has had right explicitly set then no change will occur.
- This means that the above example could have been written, with the same behaviour, without specifing
- KeyNavigation.right or KeyNavigation.down for any of the items.
-
- \sa {Keys}{Keys attached property}
-*/
-
-/*!
- \qmlproperty Item QtQuick1::KeyNavigation::left
- \qmlproperty Item QtQuick1::KeyNavigation::right
- \qmlproperty Item QtQuick1::KeyNavigation::up
- \qmlproperty Item QtQuick1::KeyNavigation::down
- \qmlproperty Item QtQuick1::KeyNavigation::tab
- \qmlproperty Item QtQuick1::KeyNavigation::backtab
-
- These properties hold the item to assign focus to
- when the left, right, up or down cursor keys, or the
- tab key are pressed.
-*/
-
-/*!
- \qmlproperty Item QtQuick1::KeyNavigation::tab
- \qmlproperty Item QtQuick1::KeyNavigation::backtab
-
- These properties hold the item to assign focus to
- when the Tab key or Shift+Tab key combination (Backtab) are pressed.
-*/
-
-QDeclarative1KeyNavigationAttached::QDeclarative1KeyNavigationAttached(QObject *parent)
-: QObject(*(new QDeclarative1KeyNavigationAttachedPrivate), parent),
- QDeclarativeItemKeyFilter(qobject_cast<QDeclarativeItem*>(parent))
-{
- m_processPost = true;
-}
-
-QDeclarative1KeyNavigationAttached *
-QDeclarative1KeyNavigationAttached::qmlAttachedProperties(QObject *obj)
-{
- return new QDeclarative1KeyNavigationAttached(obj);
-}
-
-QDeclarativeItem *QDeclarative1KeyNavigationAttached::left() const
-{
- Q_D(const QDeclarative1KeyNavigationAttached);
- return d->left;
-}
-
-void QDeclarative1KeyNavigationAttached::setLeft(QDeclarativeItem *i)
-{
- Q_D(QDeclarative1KeyNavigationAttached);
- if (d->left == i)
- return;
- d->left = i;
- d->leftSet = true;
- QDeclarative1KeyNavigationAttached* other =
- qobject_cast<QDeclarative1KeyNavigationAttached*>(qmlAttachedPropertiesObject<QDeclarative1KeyNavigationAttached>(i));
- if(other && !other->d_func()->rightSet){
- other->d_func()->right = qobject_cast<QDeclarativeItem*>(parent());
- emit other->rightChanged();
- }
- emit leftChanged();
-}
-
-QDeclarativeItem *QDeclarative1KeyNavigationAttached::right() const
-{
- Q_D(const QDeclarative1KeyNavigationAttached);
- return d->right;
-}
-
-void QDeclarative1KeyNavigationAttached::setRight(QDeclarativeItem *i)
-{
- Q_D(QDeclarative1KeyNavigationAttached);
- if (d->right == i)
- return;
- d->right = i;
- d->rightSet = true;
- QDeclarative1KeyNavigationAttached* other =
- qobject_cast<QDeclarative1KeyNavigationAttached*>(qmlAttachedPropertiesObject<QDeclarative1KeyNavigationAttached>(i));
- if(other && !other->d_func()->leftSet){
- other->d_func()->left = qobject_cast<QDeclarativeItem*>(parent());
- emit other->leftChanged();
- }
- emit rightChanged();
-}
-
-QDeclarativeItem *QDeclarative1KeyNavigationAttached::up() const
-{
- Q_D(const QDeclarative1KeyNavigationAttached);
- return d->up;
-}
-
-void QDeclarative1KeyNavigationAttached::setUp(QDeclarativeItem *i)
-{
- Q_D(QDeclarative1KeyNavigationAttached);
- if (d->up == i)
- return;
- d->up = i;
- d->upSet = true;
- QDeclarative1KeyNavigationAttached* other =
- qobject_cast<QDeclarative1KeyNavigationAttached*>(qmlAttachedPropertiesObject<QDeclarative1KeyNavigationAttached>(i));
- if(other && !other->d_func()->downSet){
- other->d_func()->down = qobject_cast<QDeclarativeItem*>(parent());
- emit other->downChanged();
- }
- emit upChanged();
-}
-
-QDeclarativeItem *QDeclarative1KeyNavigationAttached::down() const
-{
- Q_D(const QDeclarative1KeyNavigationAttached);
- return d->down;
-}
-
-void QDeclarative1KeyNavigationAttached::setDown(QDeclarativeItem *i)
-{
- Q_D(QDeclarative1KeyNavigationAttached);
- if (d->down == i)
- return;
- d->down = i;
- d->downSet = true;
- QDeclarative1KeyNavigationAttached* other =
- qobject_cast<QDeclarative1KeyNavigationAttached*>(qmlAttachedPropertiesObject<QDeclarative1KeyNavigationAttached>(i));
- if(other && !other->d_func()->upSet){
- other->d_func()->up = qobject_cast<QDeclarativeItem*>(parent());
- emit other->upChanged();
- }
- emit downChanged();
-}
-
-QDeclarativeItem *QDeclarative1KeyNavigationAttached::tab() const
-{
- Q_D(const QDeclarative1KeyNavigationAttached);
- return d->tab;
-}
-
-void QDeclarative1KeyNavigationAttached::setTab(QDeclarativeItem *i)
-{
- Q_D(QDeclarative1KeyNavigationAttached);
- if (d->tab == i)
- return;
- d->tab = i;
- d->tabSet = true;
- QDeclarative1KeyNavigationAttached* other =
- qobject_cast<QDeclarative1KeyNavigationAttached*>(qmlAttachedPropertiesObject<QDeclarative1KeyNavigationAttached>(i));
- if(other && !other->d_func()->backtabSet){
- other->d_func()->backtab = qobject_cast<QDeclarativeItem*>(parent());
- emit other->backtabChanged();
- }
- emit tabChanged();
-}
-
-QDeclarativeItem *QDeclarative1KeyNavigationAttached::backtab() const
-{
- Q_D(const QDeclarative1KeyNavigationAttached);
- return d->backtab;
-}
-
-void QDeclarative1KeyNavigationAttached::setBacktab(QDeclarativeItem *i)
-{
- Q_D(QDeclarative1KeyNavigationAttached);
- if (d->backtab == i)
- return;
- d->backtab = i;
- d->backtabSet = true;
- QDeclarative1KeyNavigationAttached* other =
- qobject_cast<QDeclarative1KeyNavigationAttached*>(qmlAttachedPropertiesObject<QDeclarative1KeyNavigationAttached>(i));
- if(other && !other->d_func()->tabSet){
- other->d_func()->tab = qobject_cast<QDeclarativeItem*>(parent());
- emit other->tabChanged();
- }
- emit backtabChanged();
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::KeyNavigation::priority
-
- This property determines whether the keys are processed before
- or after the attached item's own key handling.
-
- \list
- \o KeyNavigation.BeforeItem - process the key events before normal
- item key processing. If the event is used for key navigation, it will be accepted and will not
- be passed on to the item.
- \o KeyNavigation.AfterItem (default) - process the key events after normal item key
- handling. If the item accepts the key event it will not be
- handled by the KeyNavigation attached property handler.
- \endlist
-*/
-QDeclarative1KeyNavigationAttached::Priority QDeclarative1KeyNavigationAttached::priority() const
-{
- return m_processPost ? AfterItem : BeforeItem;
-}
-
-void QDeclarative1KeyNavigationAttached::setPriority(Priority order)
-{
- bool processPost = order == AfterItem;
- if (processPost != m_processPost) {
- m_processPost = processPost;
- emit priorityChanged();
- }
-}
-
-void QDeclarative1KeyNavigationAttached::keyPressed(QKeyEvent *event, bool post)
-{
- Q_D(QDeclarative1KeyNavigationAttached);
- event->ignore();
-
- if (post != m_processPost) {
- QDeclarativeItemKeyFilter::keyPressed(event, post);
- return;
- }
-
- bool mirror = false;
- switch(event->key()) {
- case Qt::Key_Left: {
- if (QDeclarativeItem *parentItem = qobject_cast<QDeclarativeItem*>(parent()))
- mirror = QDeclarativeItemPrivate::get(parentItem)->effectiveLayoutMirror;
- QDeclarativeItem* leftItem = mirror ? d->right : d->left;
- if (leftItem) {
- setFocusNavigation(leftItem, mirror ? "right" : "left");
- event->accept();
- }
- break;
- }
- case Qt::Key_Right: {
- if (QDeclarativeItem *parentItem = qobject_cast<QDeclarativeItem*>(parent()))
- mirror = QDeclarativeItemPrivate::get(parentItem)->effectiveLayoutMirror;
- QDeclarativeItem* rightItem = mirror ? d->left : d->right;
- if (rightItem) {
- setFocusNavigation(rightItem, mirror ? "left" : "right");
- event->accept();
- }
- break;
- }
- case Qt::Key_Up:
- if (d->up) {
- setFocusNavigation(d->up, "up");
- event->accept();
- }
- break;
- case Qt::Key_Down:
- if (d->down) {
- setFocusNavigation(d->down, "down");
- event->accept();
- }
- break;
- case Qt::Key_Tab:
- if (d->tab) {
- setFocusNavigation(d->tab, "tab");
- event->accept();
- }
- break;
- case Qt::Key_Backtab:
- if (d->backtab) {
- setFocusNavigation(d->backtab, "backtab");
- event->accept();
- }
- break;
- default:
- break;
- }
-
- if (!event->isAccepted()) QDeclarativeItemKeyFilter::keyPressed(event, post);
-}
-
-void QDeclarative1KeyNavigationAttached::keyReleased(QKeyEvent *event, bool post)
-{
- Q_D(QDeclarative1KeyNavigationAttached);
- event->ignore();
-
- if (post != m_processPost) {
- QDeclarativeItemKeyFilter::keyReleased(event, post);
- return;
- }
-
- bool mirror = false;
- switch(event->key()) {
- case Qt::Key_Left:
- if (QDeclarativeItem *parentItem = qobject_cast<QDeclarativeItem*>(parent()))
- mirror = QDeclarativeItemPrivate::get(parentItem)->effectiveLayoutMirror;
- if (mirror ? d->right : d->left)
- event->accept();
- break;
- case Qt::Key_Right:
- if (QDeclarativeItem *parentItem = qobject_cast<QDeclarativeItem*>(parent()))
- mirror = QDeclarativeItemPrivate::get(parentItem)->effectiveLayoutMirror;
- if (mirror ? d->left : d->right)
- event->accept();
- break;
- case Qt::Key_Up:
- if (d->up) {
- event->accept();
- }
- break;
- case Qt::Key_Down:
- if (d->down) {
- event->accept();
- }
- break;
- case Qt::Key_Tab:
- if (d->tab) {
- event->accept();
- }
- break;
- case Qt::Key_Backtab:
- if (d->backtab) {
- event->accept();
- }
- break;
- default:
- break;
- }
-
- if (!event->isAccepted()) QDeclarativeItemKeyFilter::keyReleased(event, post);
-}
-
-void QDeclarative1KeyNavigationAttached::setFocusNavigation(QDeclarativeItem *currentItem, const char *dir)
-{
- QDeclarativeItem *initialItem = currentItem;
- bool isNextItem = false;
- do {
- isNextItem = false;
- if (currentItem->isVisible() && currentItem->isEnabled()) {
- currentItem->setFocus(true);
- } else {
- QObject *attached =
- qmlAttachedPropertiesObject<QDeclarative1KeyNavigationAttached>(currentItem, false);
- if (attached) {
- QDeclarativeItem *tempItem = qvariant_cast<QDeclarativeItem*>(attached->property(dir));
- if (tempItem) {
- currentItem = tempItem;
- isNextItem = true;
- }
- }
- }
- }
- while (currentItem != initialItem && isNextItem);
-}
-
-/*!
- \qmlclass LayoutMirroring QDeclarative1LayoutMirroringAttached
- \inqmlmodule QtQuick 1
- \since QtQuick 1.1
- \ingroup qml-utility-elements
- \brief The LayoutMirroring attached property is used to mirror layout behavior.
-
- The LayoutMirroring attached property is used to horizontally mirror \l {anchor-layout}{Item anchors},
- \l{Using QML Positioner and Repeater Items}{positioner} elements (such as \l Row and \l Grid)
- and views (such as \l GridView and horizontal \l ListView). Mirroring is a visual change: left
- anchors become right anchors, and positioner elements like \l Grid and \l Row reverse the
- horizontal layout of child items.
-
- Mirroring is enabled for an item by setting the \l enabled property to true. By default, this
- only affects the item itself; setting the \l childrenInherit property to true propagates the mirroring
- behavior to all child elements as well. If the \c LayoutMirroring attached property has not been defined
- for an item, mirroring is not enabled.
-
- The following example shows mirroring in action. The \l Row below is specified as being anchored
- to the left of its parent. However, since mirroring has been enabled, the anchor is horizontally
- reversed and it is now anchored to the right. Also, since items in a \l Row are positioned
- from left to right by default, they are now positioned from right to left instead, as demonstrated
- by the numbering and opacity of the items:
-
- \snippet doc/src/snippets/qtquick1/layoutmirroring.qml 0
-
- \image layoutmirroring.png
-
- Layout mirroring is useful when it is necessary to support both left-to-right and right-to-left
- layout versions of an application to target different language areas. The \l childrenInherit
- property allows layout mirroring to be applied without manually setting layout configurations
- for every item in an application. Keep in mind, however, that mirroring does not affect any
- positioning that is defined by the \l Item \l {Item::}{x} coordinate value, so even with
- mirroring enabled, it will often be necessary to apply some layout fixes to support the
- desired layout direction. Also, it may be necessary to disable the mirroring of individual
- child items (by setting \l {enabled}{LayoutMirroring.enabled} to false for such items) if
- mirroring is not the desired behavior, or if the child item already implements mirroring in
- some custom way.
-
- See \l {QML Right-to-left User Interfaces} for further details on using \c LayoutMirroring and
- other related features to implement right-to-left support for an application.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::LayoutMirroring::enabled
-
- This property holds whether the item's layout is mirrored horizontally. Setting this to true
- horizontally reverses \l {anchor-layout}{anchor} settings such that left anchors become right,
- and right anchors become left. For \l{Using QML Positioner and Repeater Items}{positioner} elements
- (such as \l Row and \l Grid) and view elements (such as \l {GridView}{GridView} and \l {ListView}{ListView})
- this also mirrors the horizontal layout direction of the item.
-
- The default value is false.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::LayoutMirroring::childrenInherit
-
- This property holds whether the \l {enabled}{LayoutMirroring.enabled} value for this item
- is inherited by its children.
-
- The default value is false.
-*/
-
-QDeclarative1LayoutMirroringAttached::QDeclarative1LayoutMirroringAttached(QObject *parent) : QObject(parent), itemPrivate(0)
-{
- if (QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(parent)) {
- itemPrivate = QDeclarativeItemPrivate::get(item);
- itemPrivate->attachedLayoutDirection = this;
- } else
- qmlInfo(parent) << tr("LayoutDirection attached property only works with Items");
-}
-
-QDeclarative1LayoutMirroringAttached * QDeclarative1LayoutMirroringAttached::qmlAttachedProperties(QObject *object)
-{
- return new QDeclarative1LayoutMirroringAttached(object);
-}
-
-bool QDeclarative1LayoutMirroringAttached::enabled() const
-{
- return itemPrivate ? itemPrivate->effectiveLayoutMirror : false;
-}
-
-void QDeclarative1LayoutMirroringAttached::setEnabled(bool enabled)
-{
- if (!itemPrivate)
- return;
-
- itemPrivate->isMirrorImplicit = false;
- if (enabled != itemPrivate->effectiveLayoutMirror) {
- itemPrivate->setLayoutMirror(enabled);
- if (itemPrivate->inheritMirrorFromItem)
- itemPrivate->resolveLayoutMirror();
- }
-}
-
-void QDeclarative1LayoutMirroringAttached::resetEnabled()
-{
- if (itemPrivate && !itemPrivate->isMirrorImplicit) {
- itemPrivate->isMirrorImplicit = true;
- itemPrivate->resolveLayoutMirror();
- }
-}
-
-bool QDeclarative1LayoutMirroringAttached::childrenInherit() const
-{
- return itemPrivate ? itemPrivate->inheritMirrorFromItem : false;
-}
-
-void QDeclarative1LayoutMirroringAttached::setChildrenInherit(bool childrenInherit) {
- if (itemPrivate && childrenInherit != itemPrivate->inheritMirrorFromItem) {
- itemPrivate->inheritMirrorFromItem = childrenInherit;
- itemPrivate->resolveLayoutMirror();
- childrenInheritChanged();
- }
-}
-
-void QDeclarativeItemPrivate::resolveLayoutMirror()
-{
- Q_Q(QDeclarativeItem);
- if (QDeclarativeItem *parentItem = q->parentItem()) {
- QDeclarativeItemPrivate *parentPrivate = QDeclarativeItemPrivate::get(parentItem);
- setImplicitLayoutMirror(parentPrivate->inheritedLayoutMirror, parentPrivate->inheritMirrorFromParent);
- } else {
- setImplicitLayoutMirror(isMirrorImplicit ? false : effectiveLayoutMirror, inheritMirrorFromItem);
- }
-}
-
-void QDeclarativeItemPrivate::setImplicitLayoutMirror(bool mirror, bool inherit)
-{
- inherit = inherit || inheritMirrorFromItem;
- if (!isMirrorImplicit && inheritMirrorFromItem)
- mirror = effectiveLayoutMirror;
- if (mirror == inheritedLayoutMirror && inherit == inheritMirrorFromParent)
- return;
-
- inheritMirrorFromParent = inherit;
- inheritedLayoutMirror = inheritMirrorFromParent ? mirror : false;
-
- if (isMirrorImplicit)
- setLayoutMirror(inherit ? inheritedLayoutMirror : false);
- for (int i = 0; i < children.count(); ++i) {
- if (QDeclarativeItem *child = qobject_cast<QDeclarativeItem *>(children.at(i))) {
- QDeclarativeItemPrivate *childPrivate = QDeclarativeItemPrivate::get(child);
- childPrivate->setImplicitLayoutMirror(inheritedLayoutMirror, inheritMirrorFromParent);
- }
- }
-}
-
-void QDeclarativeItemPrivate::setLayoutMirror(bool mirror)
-{
- if (mirror != effectiveLayoutMirror) {
- effectiveLayoutMirror = mirror;
- if (_anchors) {
- _anchors->d_func()->fillChanged();
- _anchors->d_func()->centerInChanged();
- _anchors->d_func()->updateHorizontalAnchors();
- emit _anchors->mirroredChanged();
- }
- mirrorChange();
- if (attachedLayoutDirection) {
- emit attachedLayoutDirection->enabledChanged();
- }
- }
-}
-
-/*!
- \qmlclass Keys QDeclarative1KeysAttached
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-interaction-elements
- \since QtQuick 1.0
- \brief The Keys attached property provides key handling to Items.
-
- All visual primitives support key handling via the Keys
- attached property. Keys can be handled via the onPressed
- and onReleased signal properties.
-
- The signal properties have a \l KeyEvent parameter, named
- \e event which contains details of the event. If a key is
- handled \e event.accepted should be set to true to prevent the
- event from propagating up the item hierarchy.
-
- \section1 Example Usage
-
- The following example shows how the general onPressed handler can
- be used to test for a certain key; in this case, the left cursor
- key:
-
- \snippet doc/src/snippets/qtquick1/keys/keys-pressed.qml key item
-
- Some keys may alternatively be handled via specific signal properties,
- for example \e onSelectPressed. These handlers automatically set
- \e event.accepted to true.
-
- \snippet doc/src/snippets/qtquick1/keys/keys-handler.qml key item
-
- See \l{Qt::Key}{Qt.Key} for the list of keyboard codes.
-
- \section1 Key Handling Priorities
-
- The Keys attached property can be configured to handle key events
- before or after the item it is attached to. This makes it possible
- to intercept events in order to override an item's default behavior,
- or act as a fallback for keys not handled by the item.
-
- If \l priority is Keys.BeforeItem (default) the order of key event processing is:
-
- \list 1
- \o Items specified in \c forwardTo
- \o specific key handlers, e.g. onReturnPressed
- \o onKeyPress, onKeyRelease handlers
- \o Item specific key handling, e.g. TextInput key handling
- \o parent item
- \endlist
-
- If priority is Keys.AfterItem the order of key event processing is:
-
- \list 1
- \o Item specific key handling, e.g. TextInput key handling
- \o Items specified in \c forwardTo
- \o specific key handlers, e.g. onReturnPressed
- \o onKeyPress, onKeyRelease handlers
- \o parent item
- \endlist
-
- If the event is accepted during any of the above steps, key
- propagation stops.
-
- \sa KeyEvent, {KeyNavigation}{KeyNavigation attached property}
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Keys::enabled
-
- This flags enables key handling if true (default); otherwise
- no key handlers will be called.
-*/
-
-/*!
- \qmlproperty enumeration QtQuick1::Keys::priority
-
- This property determines whether the keys are processed before
- or after the attached item's own key handling.
-
- \list
- \o Keys.BeforeItem (default) - process the key events before normal
- item key processing. If the event is accepted it will not
- be passed on to the item.
- \o Keys.AfterItem - process the key events after normal item key
- handling. If the item accepts the key event it will not be
- handled by the Keys attached property handler.
- \endlist
-*/
-
-/*!
- \qmlproperty list<Object> QtQuick1::Keys::forwardTo
-
- This property provides a way to forward key presses, key releases, and keyboard input
- coming from input methods to other items. This can be useful when you want
- one item to handle some keys (e.g. the up and down arrow keys), and another item to
- handle other keys (e.g. the left and right arrow keys). Once an item that has been
- forwarded keys accepts the event it is no longer forwarded to items later in the
- list.
-
- This example forwards key events to two lists:
- \qml
- Item {
- ListView {
- id: list1
- // ...
- }
- ListView {
- id: list2
- // ...
- }
- Keys.forwardTo: [list1, list2]
- focus: true
- }
- \endqml
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onPressed(KeyEvent event)
-
- This handler is called when a key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onReleased(KeyEvent event)
-
- This handler is called when a key has been released. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit0Pressed(KeyEvent event)
-
- This handler is called when the digit '0' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit1Pressed(KeyEvent event)
-
- This handler is called when the digit '1' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit2Pressed(KeyEvent event)
-
- This handler is called when the digit '2' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit3Pressed(KeyEvent event)
-
- This handler is called when the digit '3' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit4Pressed(KeyEvent event)
-
- This handler is called when the digit '4' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit5Pressed(KeyEvent event)
-
- This handler is called when the digit '5' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit6Pressed(KeyEvent event)
-
- This handler is called when the digit '6' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit7Pressed(KeyEvent event)
-
- This handler is called when the digit '7' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit8Pressed(KeyEvent event)
-
- This handler is called when the digit '8' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDigit9Pressed(KeyEvent event)
-
- This handler is called when the digit '9' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onLeftPressed(KeyEvent event)
-
- This handler is called when the Left arrow has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onRightPressed(KeyEvent event)
-
- This handler is called when the Right arrow has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onUpPressed(KeyEvent event)
-
- This handler is called when the Up arrow has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDownPressed(KeyEvent event)
-
- This handler is called when the Down arrow has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onTabPressed(KeyEvent event)
-
- This handler is called when the Tab key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onBacktabPressed(KeyEvent event)
-
- This handler is called when the Shift+Tab key combination (Backtab) has
- been pressed. The \a event parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onAsteriskPressed(KeyEvent event)
-
- This handler is called when the Asterisk '*' has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onEscapePressed(KeyEvent event)
-
- This handler is called when the Escape key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onReturnPressed(KeyEvent event)
-
- This handler is called when the Return key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onEnterPressed(KeyEvent event)
-
- This handler is called when the Enter key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onDeletePressed(KeyEvent event)
-
- This handler is called when the Delete key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onSpacePressed(KeyEvent event)
-
- This handler is called when the Space key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onBackPressed(KeyEvent event)
-
- This handler is called when the Back key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onCancelPressed(KeyEvent event)
-
- This handler is called when the Cancel key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onSelectPressed(KeyEvent event)
-
- This handler is called when the Select key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onYesPressed(KeyEvent event)
-
- This handler is called when the Yes key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onNoPressed(KeyEvent event)
-
- This handler is called when the No key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onContext1Pressed(KeyEvent event)
-
- This handler is called when the Context1 key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onContext2Pressed(KeyEvent event)
-
- This handler is called when the Context2 key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onContext3Pressed(KeyEvent event)
-
- This handler is called when the Context3 key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onContext4Pressed(KeyEvent event)
-
- This handler is called when the Context4 key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onCallPressed(KeyEvent event)
-
- This handler is called when the Call key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onHangupPressed(KeyEvent event)
-
- This handler is called when the Hangup key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onFlipPressed(KeyEvent event)
-
- This handler is called when the Flip key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onMenuPressed(KeyEvent event)
-
- This handler is called when the Menu key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onVolumeUpPressed(KeyEvent event)
-
- This handler is called when the VolumeUp key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-/*!
- \qmlsignal QtQuick1::Keys::onVolumeDownPressed(KeyEvent event)
-
- This handler is called when the VolumeDown key has been pressed. The \a event
- parameter provides information about the event.
-*/
-
-const QDeclarative1KeysAttached::SigMap QDeclarative1KeysAttached::sigMap[] = {
- { Qt::Key_Left, "leftPressed" },
- { Qt::Key_Right, "rightPressed" },
- { Qt::Key_Up, "upPressed" },
- { Qt::Key_Down, "downPressed" },
- { Qt::Key_Tab, "tabPressed" },
- { Qt::Key_Backtab, "backtabPressed" },
- { Qt::Key_Asterisk, "asteriskPressed" },
- { Qt::Key_NumberSign, "numberSignPressed" },
- { Qt::Key_Escape, "escapePressed" },
- { Qt::Key_Return, "returnPressed" },
- { Qt::Key_Enter, "enterPressed" },
- { Qt::Key_Delete, "deletePressed" },
- { Qt::Key_Space, "spacePressed" },
- { Qt::Key_Back, "backPressed" },
- { Qt::Key_Cancel, "cancelPressed" },
- { Qt::Key_Select, "selectPressed" },
- { Qt::Key_Yes, "yesPressed" },
- { Qt::Key_No, "noPressed" },
- { Qt::Key_Context1, "context1Pressed" },
- { Qt::Key_Context2, "context2Pressed" },
- { Qt::Key_Context3, "context3Pressed" },
- { Qt::Key_Context4, "context4Pressed" },
- { Qt::Key_Call, "callPressed" },
- { Qt::Key_Hangup, "hangupPressed" },
- { Qt::Key_Flip, "flipPressed" },
- { Qt::Key_Menu, "menuPressed" },
- { Qt::Key_VolumeUp, "volumeUpPressed" },
- { Qt::Key_VolumeDown, "volumeDownPressed" },
- { 0, 0 }
-};
-
-bool QDeclarative1KeysAttachedPrivate::isConnected(const char *signalName)
-{
- return isSignalConnected(signalIndex(signalName));
-}
-
-QDeclarative1KeysAttached::QDeclarative1KeysAttached(QObject *parent)
-: QObject(*(new QDeclarative1KeysAttachedPrivate), parent),
- QDeclarativeItemKeyFilter(qobject_cast<QDeclarativeItem*>(parent))
-{
- Q_D(QDeclarative1KeysAttached);
- m_processPost = false;
- d->item = qobject_cast<QDeclarativeItem*>(parent);
-}
-
-QDeclarative1KeysAttached::~QDeclarative1KeysAttached()
-{
-}
-
-QDeclarative1KeysAttached::Priority QDeclarative1KeysAttached::priority() const
-{
- return m_processPost ? AfterItem : BeforeItem;
-}
-
-void QDeclarative1KeysAttached::setPriority(Priority order)
-{
- bool processPost = order == AfterItem;
- if (processPost != m_processPost) {
- m_processPost = processPost;
- emit priorityChanged();
- }
-}
-
-void QDeclarative1KeysAttached::componentComplete()
-{
- Q_D(QDeclarative1KeysAttached);
- if (d->item) {
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *targetItem = d->finalFocusProxy(d->targets.at(ii));
- if (targetItem && (targetItem->flags() & QGraphicsItem::ItemAcceptsInputMethod)) {
- d->item->setFlag(QGraphicsItem::ItemAcceptsInputMethod);
- break;
- }
- }
- }
-}
-
-void QDeclarative1KeysAttached::keyPressed(QKeyEvent *event, bool post)
-{
- Q_D(QDeclarative1KeysAttached);
- if (post != m_processPost || !d->enabled || d->inPress) {
- event->ignore();
- QDeclarativeItemKeyFilter::keyPressed(event, post);
- return;
- }
-
- // first process forwards
- if (d->item && d->item->scene()) {
- d->inPress = true;
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && i->isVisible()) {
- d->item->scene()->sendEvent(i, event);
- if (event->isAccepted()) {
- d->inPress = false;
- return;
- }
- }
- }
- d->inPress = false;
- }
-
- QDeclarative1KeyEvent ke(*event);
- QByteArray keySignal = keyToSignal(event->key());
- if (!keySignal.isEmpty()) {
- keySignal += "(QDeclarative1KeyEvent*)";
- if (d->isConnected(keySignal)) {
- // If we specifically handle a key then default to accepted
- ke.setAccepted(true);
- int idx = QDeclarative1KeysAttached::staticMetaObject.indexOfSignal(keySignal);
- metaObject()->method(idx).invoke(this, Qt::DirectConnection, Q_ARG(QDeclarative1KeyEvent*, &ke));
- }
- }
- if (!ke.isAccepted())
- emit pressed(&ke);
- event->setAccepted(ke.isAccepted());
-
- if (!event->isAccepted()) QDeclarativeItemKeyFilter::keyPressed(event, post);
-}
-
-void QDeclarative1KeysAttached::keyReleased(QKeyEvent *event, bool post)
-{
- Q_D(QDeclarative1KeysAttached);
- if (post != m_processPost || !d->enabled || d->inRelease) {
- event->ignore();
- QDeclarativeItemKeyFilter::keyReleased(event, post);
- return;
- }
-
- if (d->item && d->item->scene()) {
- d->inRelease = true;
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && i->isVisible()) {
- d->item->scene()->sendEvent(i, event);
- if (event->isAccepted()) {
- d->inRelease = false;
- return;
- }
- }
- }
- d->inRelease = false;
- }
-
- QDeclarative1KeyEvent ke(*event);
- emit released(&ke);
- event->setAccepted(ke.isAccepted());
-
- if (!event->isAccepted()) QDeclarativeItemKeyFilter::keyReleased(event, post);
-}
-
-void QDeclarative1KeysAttached::inputMethodEvent(QInputMethodEvent *event, bool post)
-{
- Q_D(QDeclarative1KeysAttached);
- if (post == m_processPost && d->item && !d->inIM && d->item->scene()) {
- d->inIM = true;
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && i->isVisible() && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod)) {
- d->item->scene()->sendEvent(i, event);
- if (event->isAccepted()) {
- d->imeItem = i;
- d->inIM = false;
- return;
- }
- }
- }
- d->inIM = false;
- }
- if (!event->isAccepted()) QDeclarativeItemKeyFilter::inputMethodEvent(event, post);
-}
-
-class QDeclarativeItemAccessor : public QGraphicsItem
-{
-public:
- QVariant doInputMethodQuery(Qt::InputMethodQuery query) const {
- return QGraphicsItem::inputMethodQuery(query);
- }
-};
-
-QVariant QDeclarative1KeysAttached::inputMethodQuery(Qt::InputMethodQuery query) const
-{
- Q_D(const QDeclarative1KeysAttached);
- if (d->item) {
- for (int ii = 0; ii < d->targets.count(); ++ii) {
- QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && i->isVisible() && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod) && i == d->imeItem) { //### how robust is i == d->imeItem check?
- QVariant v = static_cast<QDeclarativeItemAccessor *>(i)->doInputMethodQuery(query);
- if (v.userType() == QVariant::RectF)
- v = d->item->mapRectFromItem(i, v.toRectF()); //### cost?
- return v;
- }
- }
- }
- return QDeclarativeItemKeyFilter::inputMethodQuery(query);
-}
-
-QDeclarative1KeysAttached *QDeclarative1KeysAttached::qmlAttachedProperties(QObject *obj)
-{
- return new QDeclarative1KeysAttached(obj);
-}
-
-/*!
- \class QDeclarativeItem
- \since QtQuick 1.0
- \brief The QDeclarativeItem class provides the most basic of all visual items in QML.
-
- All visual items in Qt Declarative inherit from QDeclarativeItem. Although QDeclarativeItem
- has no visual appearance, it defines all the properties that are
- common across visual items - such as the x and y position, the
- width and height, \l {anchor-layout}{anchoring} and key handling.
-
- You can subclass QDeclarativeItem to provide your own custom visual item that inherits
- these features. Note that, because it does not draw anything, QDeclarativeItem sets the
- QGraphicsItem::ItemHasNoContents flag. If you subclass QDeclarativeItem to create a visual
- item, you will need to unset this flag.
-
-*/
-
-/*!
- \qmlclass Item QDeclarativeItem
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
- \since QtQuick 1.0
- \brief The Item is the most basic of all visual items in QML.
-
- All visual items in Qt Declarative inherit from Item. Although Item
- has no visual appearance, it defines all the properties that are
- common across visual items - such as the x and y position, the
- width and height, \l {anchor-layout}{anchoring} and key handling.
-
- Item is also useful for grouping items together.
-
- \qml
- Item {
- Image {
- source: "tile.png"
- }
- Image {
- x: 80
- width: 100
- height: 100
- source: "tile.png"
- }
- Image {
- x: 190
- width: 100
- height: 100
- fillMode: Image.Tile
- source: "tile.png"
- }
- }
- \endqml
-
-
- \section1 Key Handling
-
- Key handling is available to all Item-based visual elements via the \l {Keys}{Keys}
- attached property. The \e Keys attached property provides basic handlers such
- as \l {Keys::onPressed}{onPressed} and \l {Keys::onReleased}{onReleased},
- as well as handlers for specific keys, such as
- \l {Keys::onCancelPressed}{onCancelPressed}. The example below
- assigns \l {qmlfocus}{focus} to the item and handles
- the Left key via the general \e onPressed handler and the Select key via the
- onSelectPressed handler:
-
- \qml
- Item {
- focus: true
- Keys.onPressed: {
- if (event.key == Qt.Key_Left) {
- console.log("move left");
- event.accepted = true;
- }
- }
- Keys.onSelectPressed: console.log("Selected");
- }
- \endqml
-
- See the \l {Keys}{Keys} attached property for detailed documentation.
-
- \section1 Layout Mirroring
-
- Item layouts can be mirrored using the \l {LayoutMirroring}{LayoutMirroring} attached property.
-
-*/
-
-/*!
- \fn void QDeclarativeItem::childrenRectChanged(const QRectF &)
- \internal
-*/
-
-/*!
- \fn void QDeclarativeItem::baselineOffsetChanged(qreal)
- \internal
-*/
-
-/*!
- \fn void QDeclarativeItem::stateChanged(const QString &state)
- \internal
-*/
-
-/*!
- \fn void QDeclarativeItem::parentChanged(QDeclarativeItem *)
- \internal
-*/
-
-/*!
- \fn void QDeclarativeItem::smoothChanged(bool)
- \internal
-*/
-
-/*!
- \fn void QDeclarativeItem::clipChanged(bool)
- \internal
-*/
-
-/*! \fn void QDeclarativeItem::transformOriginChanged(TransformOrigin)
- \internal
-*/
-
-/*!
- \fn void QDeclarativeItem::focusChanged(bool)
- \internal
-*/
-
-/*!
- \fn void QDeclarativeItem::activeFocusChanged(bool)
- \internal
-*/
-
-// ### Must fix
-namespace {
-struct RegisterAnchorLineAtStartup {
- RegisterAnchorLineAtStartup() {
- qRegisterMetaType<QDeclarative1AnchorLine>("QDeclarative1AnchorLine");
- }
-};
-static RegisterAnchorLineAtStartup registerAnchorLineAtStartup;
-}
-
-
-/*!
- \fn QDeclarativeItem::QDeclarativeItem(QDeclarativeItem *parent)
-
- Constructs a QDeclarativeItem with the given \a parent.
-*/
-QDeclarativeItem::QDeclarativeItem(QDeclarativeItem* parent)
- : QGraphicsObject(*(new QDeclarativeItemPrivate), parent, 0)
-{
- Q_D(QDeclarativeItem);
- d->init(parent);
-}
-
-/*! \internal
-*/
-QDeclarativeItem::QDeclarativeItem(QDeclarativeItemPrivate &dd, QDeclarativeItem *parent)
- : QGraphicsObject(dd, parent, 0)
-{
- Q_D(QDeclarativeItem);
- d->init(parent);
-}
-
-/*!
- Destroys the QDeclarativeItem.
-*/
-QDeclarativeItem::~QDeclarativeItem()
-{
- Q_D(QDeclarativeItem);
- for (int ii = 0; ii < d->changeListeners.count(); ++ii) {
- QDeclarative1AnchorsPrivate *anchor = d->changeListeners.at(ii).listener->anchorPrivate();
- if (anchor)
- anchor->clearItem(this);
- }
- if (!d->parent || (parentItem() && !parentItem()->QGraphicsItem::d_ptr->inDestructor)) {
- for (int ii = 0; ii < d->changeListeners.count(); ++ii) {
- QDeclarative1AnchorsPrivate *anchor = d->changeListeners.at(ii).listener->anchorPrivate();
- if (anchor && anchor->item && anchor->item->parentItem() != this) //child will be deleted anyway
- anchor->updateOnComplete();
- }
- }
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QDeclarativeItemPrivate::Destroyed)
- change.listener->itemDestroyed(this);
- }
- d->changeListeners.clear();
- delete d->_anchorLines; d->_anchorLines = 0;
- delete d->_anchors; d->_anchors = 0;
- delete d->_stateGroup; d->_stateGroup = 0;
- delete d->_contents; d->_contents = 0;
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Item::transformOrigin
- This property holds the origin point around which scale and rotation transform.
-
- Nine transform origins are available, as shown in the image below.
-
- \image declarative-transformorigin.png
-
- This example rotates an image around its bottom-right corner.
- \qml
- Image {
- source: "myimage.png"
- transformOrigin: Item.BottomRight
- rotation: 45
- }
- \endqml
-
- The default transform origin is \c Item.Center.
-
- To set an arbitrary transform origin point use the \l Scale or \l Rotation
- transform elements.
-*/
-
-/*!
- \qmlproperty Item QtQuick1::Item::parent
- This property holds the parent of the item.
-*/
-
-/*!
- \property QDeclarativeItem::parent
- This property holds the parent of the item.
-*/
-void QDeclarativeItem::setParentItem(QDeclarativeItem *parent)
-{
- Q_D(QDeclarativeItem);
- QGraphicsObject::setParentItem(parent);
- if (d->isAccessible && parentItem()) {
- parentItem()->d_func()->setAccessibleFlagAndListener();
- }
-}
-
-/*!
- Returns the QDeclarativeItem parent of this item.
-*/
-QDeclarativeItem *QDeclarativeItem::parentItem() const
-{
- return qobject_cast<QDeclarativeItem *>(QGraphicsObject::parentItem());
-}
-
-/*!
- \qmlproperty real QtQuick1::Item::childrenRect.x
- \qmlproperty real QtQuick1::Item::childrenRect.y
- \qmlproperty real QtQuick1::Item::childrenRect.width
- \qmlproperty real QtQuick1::Item::childrenRect.height
-
- The childrenRect properties allow an item access to the geometry of its
- children. This property is useful if you have an item that needs to be
- sized to fit its children.
-*/
-
-
-/*!
- \qmlproperty list<Item> QtQuick1::Item::children
- \qmlproperty list<Object> QtQuick1::Item::resources
-
- The children property contains the list of visual children of this item.
- The resources property contains non-visual resources that you want to
- reference by name.
-
- Generally you can rely on Item's default property to handle all this for
- you, but it can come in handy in some cases.
-
- \qml
- Item {
- children: [
- Text {},
- Rectangle {}
- ]
- resources: [
- Component {
- id: myComponent
- Text {}
- }
- ]
- }
- \endqml
-*/
-
-/*!
- Returns true if construction of the QML component is complete; otherwise
- returns false.
-
- It is often desirable to delay some processing until the component is
- completed.
-
- \sa componentComplete()
-*/
-bool QDeclarativeItem::isComponentComplete() const
-{
- Q_D(const QDeclarativeItem);
- return d->componentComplete;
-}
-
-void QDeclarativeItemPrivate::data_append(QDeclarativeListProperty<QObject> *prop, QObject *o)
-{
- if (!o)
- return;
-
- QDeclarativeItem *that = static_cast<QDeclarativeItem *>(prop->object);
-
- // This test is measurably (albeit only slightly) faster than qobject_cast<>()
- const QMetaObject *mo = o->metaObject();
- while (mo && mo != &QGraphicsObject::staticMetaObject) mo = mo->d.superdata;
-
- if (mo) {
- QGraphicsObject *graphicsObject = static_cast<QGraphicsObject *>(o);
- QDeclarativeItemPrivate *contentItemPrivate = static_cast<QDeclarativeItemPrivate *>(QGraphicsItemPrivate::get(graphicsObject));
- if (contentItemPrivate->componentComplete) {
- graphicsObject->setParentItem(that);
- } else {
- contentItemPrivate->setParentItemHelper(that, /*newParentVariant=*/0, /*thisPointerVariant=*/0);
- }
- } else {
- o->setParent(that);
- }
-}
-
-static inline int children_count_helper(QDeclarativeListProperty<QObject> *prop)
-{
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(prop->object));
- return d->children.count();
-}
-
-static inline QObject *children_at_helper(QDeclarativeListProperty<QObject> *prop, int index)
-{
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(prop->object));
- if (index >= 0 && index < d->children.count())
- return d->children.at(index)->toGraphicsObject();
- else
- return 0;
-}
-
-static inline void children_clear_helper(QDeclarativeListProperty<QObject> *prop)
-{
- QDeclarativeItemPrivate *d = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(static_cast<QGraphicsObject *>(prop->object)));
- int childCount = d->children.count();
- if (d->componentComplete) {
- for (int index = 0 ;index < childCount; index++)
- d->children.at(0)->setParentItem(0);
- } else {
- for (int index = 0 ;index < childCount; index++)
- QGraphicsItemPrivate::get(d->children.at(0))->setParentItemHelper(0, /*newParentVariant=*/0, /*thisPointerVariant=*/0);
- }
-}
-
-int QDeclarativeItemPrivate::data_count(QDeclarativeListProperty<QObject> *prop)
-{
- return resources_count(prop) + children_count_helper(prop);
-}
-
-QObject *QDeclarativeItemPrivate::data_at(QDeclarativeListProperty<QObject> *prop, int i)
-{
- int resourcesCount = resources_count(prop);
- if (i < resourcesCount)
- return resources_at(prop, i);
- const int j = i - resourcesCount;
- if (j < children_count_helper(prop))
- return children_at_helper(prop, j);
- return 0;
-}
-
-void QDeclarativeItemPrivate::data_clear(QDeclarativeListProperty<QObject> *prop)
-{
- resources_clear(prop);
- children_clear_helper(prop);
-}
-
-QObject *QDeclarativeItemPrivate::resources_at(QDeclarativeListProperty<QObject> *prop, int index)
-{
- const QObjectList children = prop->object->children();
- if (index < children.count())
- return children.at(index);
- else
- return 0;
-}
-
-void QDeclarativeItemPrivate::resources_append(QDeclarativeListProperty<QObject> *prop, QObject *o)
-{
- o->setParent(prop->object);
-}
-
-int QDeclarativeItemPrivate::resources_count(QDeclarativeListProperty<QObject> *prop)
-{
- return prop->object->children().count();
-}
-
-void QDeclarativeItemPrivate::resources_clear(QDeclarativeListProperty<QObject> *prop)
-{
- const QObjectList children = prop->object->children();
- for (int index = 0; index < children.count(); index++)
- children.at(index)->setParent(0);
-}
-
-int QDeclarativeItemPrivate::transform_count(QDeclarativeListProperty<QGraphicsTransform> *list)
-{
- QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object) {
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(object);
- return d->transformData ? d->transformData->graphicsTransforms.size() : 0;
- } else {
- return 0;
- }
-}
-
-void QDeclarativeItemPrivate::transform_append(QDeclarativeListProperty<QGraphicsTransform> *list, QGraphicsTransform *item)
-{
- QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object && item) // QGraphicsItem applies the list in the wrong order, so we prepend.
- QGraphicsItemPrivate::get(object)->prependGraphicsTransform(item);
-}
-
-QGraphicsTransform *QDeclarativeItemPrivate::transform_at(QDeclarativeListProperty<QGraphicsTransform> *list, int idx)
-{
- QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object) {
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(object);
- if (!d->transformData)
- return 0;
- return d->transformData->graphicsTransforms.at(idx);
- } else {
- return 0;
- }
-}
-
-void QDeclarativeItemPrivate::transform_clear(QDeclarativeListProperty<QGraphicsTransform> *list)
-{
- QGraphicsObject *object = qobject_cast<QGraphicsObject *>(list->object);
- if (object) {
- QGraphicsItemPrivate *d = QGraphicsItemPrivate::get(object);
- if (!d->transformData)
- return;
- object->setTransformations(QList<QGraphicsTransform *>());
- }
-}
-
-/*!
- \qmlproperty list<Object> QtQuick1::Item::data
- \default
-
- The data property allows you to freely mix visual children and resources
- in an item. If you assign a visual item to the data list it becomes
- a child and if you assign any other object type, it is added as a resource.
-
- So you can write:
- \qml
- Item {
- Text {}
- Rectangle {}
- Timer {}
- }
- \endqml
-
- instead of:
- \qml
- Item {
- children: [
- Text {},
- Rectangle {}
- ]
- resources: [
- Timer {}
- ]
- }
- \endqml
-
- data is a behind-the-scenes property: you should never need to explicitly
- specify it.
- */
-
-QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::data()
-{
- return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::data_append,
- QDeclarativeItemPrivate::data_count,
- QDeclarativeItemPrivate::data_at,
- QDeclarativeItemPrivate::data_clear
- );
-}
-
-/*!
- \property QDeclarativeItem::childrenRect
- \brief The geometry of an item's children.
-
- This property holds the (collective) position and size of the item's children.
-*/
-QRectF QDeclarativeItem::childrenRect()
-{
- Q_D(QDeclarativeItem);
- if (!d->_contents) {
- d->_contents = new QDeclarative1Contents(this);
- if (d->componentComplete)
- d->_contents->complete();
- }
- return d->_contents->rectF();
-}
-
-bool QDeclarativeItem::clip() const
-{
- return flags() & ItemClipsChildrenToShape;
-}
-
-void QDeclarativeItem::setClip(bool c)
-{
- if (clip() == c)
- return;
- setFlag(ItemClipsChildrenToShape, c);
- emit clipChanged(c);
-}
-
-/*!
- \qmlproperty real QtQuick1::Item::x
- \qmlproperty real QtQuick1::Item::y
- \qmlproperty real QtQuick1::Item::width
- \qmlproperty real QtQuick1::Item::height
-
- Defines the item's position and size relative to its parent.
-
- \qml
- Item { x: 100; y: 100; width: 100; height: 100 }
- \endqml
- */
-
-/*!
- \qmlproperty real QtQuick1::Item::z
-
- Sets the stacking order of sibling items. By default the stacking order is 0.
-
- Items with a higher stacking value are drawn on top of siblings with a
- lower stacking order. Items with the same stacking value are drawn
- bottom up in the order they appear. Items with a negative stacking
- value are drawn under their parent's content.
-
- The following example shows the various effects of stacking order.
-
- \table
- \row
- \o \image declarative-item_stacking1.png
- \o Same \c z - later children above earlier children:
- \qml
- Item {
- Rectangle {
- color: "red"
- width: 100; height: 100
- }
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- \endqml
- \row
- \o \image declarative-item_stacking2.png
- \o Higher \c z on top:
- \qml
- Item {
- Rectangle {
- z: 1
- color: "red"
- width: 100; height: 100
- }
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- \endqml
- \row
- \o \image declarative-item_stacking3.png
- \o Same \c z - children above parents:
- \qml
- Item {
- Rectangle {
- color: "red"
- width: 100; height: 100
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- }
- \endqml
- \row
- \o \image declarative-item_stacking4.png
- \o Lower \c z below:
- \qml
- Item {
- Rectangle {
- color: "red"
- width: 100; height: 100
- Rectangle {
- z: -1
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- }
- \endqml
- \endtable
- */
-
-/*!
- \qmlproperty bool QtQuick1::Item::visible
-
- This property holds whether the item is visible. By default this is true.
-
- Setting this property directly affects the \c visible value of child
- items. When set to \c false, the \c visible values of all child items also
- become \c false. When set to \c true, the \c visible values of child items
- are returned to \c true, unless they have explicitly been set to \c false.
-
- (Because of this flow-on behavior, using the \c visible property may not
- have the intended effect if a property binding should only respond to
- explicit property changes. In such cases it may be better to use the
- \l opacity property instead.)
-
- Setting this property to \c false automatically causes \l focus to be set
- to \c false, and this item will longer receive mouse and keyboard events.
- (In contrast, setting the \l opacity to 0 does not affect the \l focus
- property and the receiving of key events.)
-
- \note This property's value is only affected by changes to this property or
- the parent's \c visible property. It does not change, for example, if this
- item moves off-screen, or if the \l opacity changes to 0.
-*/
-
-
-/*!
- This function is called to handle this item's changes in
- geometry from \a oldGeometry to \a newGeometry. If the two
- geometries are the same, it doesn't do anything.
- */
-void QDeclarativeItem::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- Q_D(QDeclarativeItem);
-
- if (d->_anchors)
- d->_anchors->d_func()->updateMe();
-
- if (transformOrigin() != QDeclarativeItem::TopLeft
- && (newGeometry.width() != oldGeometry.width() || newGeometry.height() != oldGeometry.height())) {
- if (d->transformData) {
- QPointF origin = d->computeTransformOrigin();
- if (transformOriginPoint() != origin)
- setTransformOriginPoint(origin);
- } else {
- d->transformOriginDirty = true;
- }
- }
-
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QDeclarativeItemPrivate::Geometry)
- change.listener->itemGeometryChanged(this, newGeometry, oldGeometry);
- }
-
- if (newGeometry.width() != oldGeometry.width())
- emit widthChanged();
- if (newGeometry.height() != oldGeometry.height())
- emit heightChanged();
-}
-
-void QDeclarativeItemPrivate::removeItemChangeListener(QDeclarativeItemChangeListener *listener, ChangeTypes types)
-{
- ChangeListener change(listener, types);
- changeListeners.removeOne(change);
-}
-
-/*! \internal */
-void QDeclarativeItem::keyPressEvent(QKeyEvent *event)
-{
- Q_D(QDeclarativeItem);
- keyPressPreHandler(event);
- if (event->isAccepted())
- return;
- if (d->keyHandler)
- d->keyHandler->keyPressed(event, true);
- else
- event->ignore();
-}
-
-/*! \internal */
-void QDeclarativeItem::keyReleaseEvent(QKeyEvent *event)
-{
- Q_D(QDeclarativeItem);
- keyReleasePreHandler(event);
- if (event->isAccepted())
- return;
- if (d->keyHandler)
- d->keyHandler->keyReleased(event, true);
- else
- event->ignore();
-}
-
-/*! \internal */
-void QDeclarativeItem::inputMethodEvent(QInputMethodEvent *event)
-{
- Q_D(QDeclarativeItem);
- inputMethodPreHandler(event);
- if (event->isAccepted())
- return;
- if (d->keyHandler)
- d->keyHandler->inputMethodEvent(event, true);
- else
- event->ignore();
-}
-
-/*! \internal */
-QVariant QDeclarativeItem::inputMethodQuery(Qt::InputMethodQuery query) const
-{
- Q_D(const QDeclarativeItem);
- QVariant v;
- if (d->keyHandler)
- v = d->keyHandler->inputMethodQuery(query);
-
- if (!v.isValid())
- v = QGraphicsObject::inputMethodQuery(query);
-
- return v;
-}
-
-/*!
- \internal
- */
-void QDeclarativeItem::keyPressPreHandler(QKeyEvent *event)
-{
- Q_D(QDeclarativeItem);
- if (d->keyHandler && !d->doneEventPreHandler)
- d->keyHandler->keyPressed(event, false);
- else
- event->ignore();
- d->doneEventPreHandler = true;
-}
-
-/*!
- \internal
- */
-void QDeclarativeItem::keyReleasePreHandler(QKeyEvent *event)
-{
- Q_D(QDeclarativeItem);
- if (d->keyHandler && !d->doneEventPreHandler)
- d->keyHandler->keyReleased(event, false);
- else
- event->ignore();
- d->doneEventPreHandler = true;
-}
-
-/*!
- \internal
- */
-void QDeclarativeItem::inputMethodPreHandler(QInputMethodEvent *event)
-{
- Q_D(QDeclarativeItem);
- if (d->keyHandler && !d->doneEventPreHandler)
- d->keyHandler->inputMethodEvent(event, false);
- else
- event->ignore();
- d->doneEventPreHandler = true;
-}
-
-/*!
- \internal
-*/
-QDeclarative1AnchorLine QDeclarativeItemPrivate::left() const
-{
- return anchorLines()->left;
-}
-
-/*!
- \internal
-*/
-QDeclarative1AnchorLine QDeclarativeItemPrivate::right() const
-{
- return anchorLines()->right;
-}
-
-/*!
- \internal
-*/
-QDeclarative1AnchorLine QDeclarativeItemPrivate::horizontalCenter() const
-{
- return anchorLines()->hCenter;
-}
-
-/*!
- \internal
-*/
-QDeclarative1AnchorLine QDeclarativeItemPrivate::top() const
-{
- return anchorLines()->top;
-}
-
-/*!
- \internal
-*/
-QDeclarative1AnchorLine QDeclarativeItemPrivate::bottom() const
-{
- return anchorLines()->bottom;
-}
-
-/*!
- \internal
-*/
-QDeclarative1AnchorLine QDeclarativeItemPrivate::verticalCenter() const
-{
- return anchorLines()->vCenter;
-}
-
-
-/*!
- \internal
-*/
-QDeclarative1AnchorLine QDeclarativeItemPrivate::baseline() const
-{
- return anchorLines()->baseline;
-}
-
-/*!
- \qmlproperty AnchorLine QtQuick1::Item::anchors.top
- \qmlproperty AnchorLine QtQuick1::Item::anchors.bottom
- \qmlproperty AnchorLine QtQuick1::Item::anchors.left
- \qmlproperty AnchorLine QtQuick1::Item::anchors.right
- \qmlproperty AnchorLine QtQuick1::Item::anchors.horizontalCenter
- \qmlproperty AnchorLine QtQuick1::Item::anchors.verticalCenter
- \qmlproperty AnchorLine QtQuick1::Item::anchors.baseline
-
- \qmlproperty Item QtQuick1::Item::anchors.fill
- \qmlproperty Item QtQuick1::Item::anchors.centerIn
-
- \qmlproperty real QtQuick1::Item::anchors.margins
- \qmlproperty real QtQuick1::Item::anchors.topMargin
- \qmlproperty real QtQuick1::Item::anchors.bottomMargin
- \qmlproperty real QtQuick1::Item::anchors.leftMargin
- \qmlproperty real QtQuick1::Item::anchors.rightMargin
- \qmlproperty real QtQuick1::Item::anchors.horizontalCenterOffset
- \qmlproperty real QtQuick1::Item::anchors.verticalCenterOffset
- \qmlproperty real QtQuick1::Item::anchors.baselineOffset
-
- \qmlproperty bool QtQuick1::Item::anchors.mirrored
-
- Anchors provide a way to position an item by specifying its
- relationship with other items.
-
- Margins apply to top, bottom, left, right, and fill anchors.
- The \c anchors.margins property can be used to set all of the various margins at once, to the same value.
- Note that margins are anchor-specific and are not applied if an item does not
- use anchors.
-
- Offsets apply for horizontal center, vertical center, and baseline anchors.
-
- \table
- \row
- \o \image declarative-anchors_example.png
- \o Text anchored to Image, horizontally centered and vertically below, with a margin.
- \qml
- Item {
- Image {
- id: pic
- // ...
- }
- Text {
- id: label
- anchors.horizontalCenter: pic.horizontalCenter
- anchors.top: pic.bottom
- anchors.topMargin: 5
- // ...
- }
- }
- \endqml
- \row
- \o \image declarative-anchors_example2.png
- \o
- Left of Text anchored to right of Image, with a margin. The y
- property of both defaults to 0.
-
- \qml
- Item {
- Image {
- id: pic
- // ...
- }
- Text {
- id: label
- anchors.left: pic.right
- anchors.leftMargin: 5
- // ...
- }
- }
- \endqml
- \endtable
-
- \c anchors.fill provides a convenient way for one item to have the
- same geometry as another item, and is equivalent to connecting all
- four directional anchors.
-
- To clear an anchor value, set it to \c undefined.
-
- \c anchors.mirrored returns true it the layout has been \l {LayoutMirroring}{mirrored}.
-
- \note You can only anchor an item to siblings or a parent.
-
- For more information see \l {anchor-layout}{Anchor Layouts}.
-*/
-
-/*!
- \property QDeclarativeItem::baselineOffset
- \brief The position of the item's baseline in local coordinates.
-
- The baseline of a \l Text item is the imaginary line on which the text
- sits. Controls containing text usually set their baseline to the
- baseline of their text.
-
- For non-text items, a default baseline offset of 0 is used.
-*/
-qreal QDeclarativeItem::baselineOffset() const
-{
- Q_D(const QDeclarativeItem);
- if (!d->baselineOffset.isValid()) {
- return 0.0;
- } else
- return d->baselineOffset;
-}
-
-void QDeclarativeItem::setBaselineOffset(qreal offset)
-{
- Q_D(QDeclarativeItem);
- if (offset == d->baselineOffset)
- return;
-
- d->baselineOffset = offset;
-
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QDeclarativeItemPrivate::Geometry) {
- QDeclarative1AnchorsPrivate *anchor = change.listener->anchorPrivate();
- if (anchor)
- anchor->updateVerticalAnchors();
- }
- }
- emit baselineOffsetChanged(offset);
-}
-
-/*!
- \qmlproperty real QtQuick1::Item::rotation
- This property holds the rotation of the item in degrees clockwise.
-
- This specifies how many degrees to rotate the item around its transformOrigin.
- The default rotation is 0 degrees (i.e. not rotated at all).
-
- \table
- \row
- \o \image declarative-rotation.png
- \o
- \qml
- Rectangle {
- color: "blue"
- width: 100; height: 100
- Rectangle {
- color: "red"
- x: 25; y: 25; width: 50; height: 50
- rotation: 30
- }
- }
- \endqml
- \endtable
-
- \sa transform, Rotation
-*/
-
-/*!
- \qmlproperty real QtQuick1::Item::scale
- This property holds the scale of the item.
-
- A scale of less than 1 means the item will be displayed smaller than
- normal, and a scale of greater than 1 means the item will be
- displayed larger than normal. A negative scale means the item will
- be mirrored.
-
- By default, items are displayed at a scale of 1 (i.e. at their
- normal size).
-
- Scaling is from the item's transformOrigin.
-
- \table
- \row
- \o \image declarative-scale.png
- \o
- \qml
- Rectangle {
- color: "blue"
- width: 100; height: 100
- Rectangle {
- color: "green"
- width: 25; height: 25
- }
- Rectangle {
- color: "red"
- x: 25; y: 25; width: 50; height: 50
- scale: 1.4
- }
- }
- \endqml
- \endtable
-
- \sa transform, Scale
-*/
-
-/*!
- \qmlproperty real QtQuick1::Item::opacity
-
- This property holds the opacity of the item. Opacity is specified as a
- number between 0 (fully transparent) and 1 (fully opaque). The default is 1.
-
- When this property is set, the specified opacity is also applied
- individually to child items. In almost all cases this is what you want,
- but in some cases it may produce undesired results. For example in the
- second set of rectangles below, the red rectangle has specified an opacity
- of 0.5, which affects the opacity of its blue child rectangle even though
- the child has not specified an opacity.
-
- \table
- \row
- \o \image declarative-item_opacity1.png
- \o
- \qml
- Item {
- Rectangle {
- color: "red"
- width: 100; height: 100
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- }
- \endqml
- \row
- \o \image declarative-item_opacity2.png
- \o
- \qml
- Item {
- Rectangle {
- opacity: 0.5
- color: "red"
- width: 100; height: 100
- Rectangle {
- color: "blue"
- x: 50; y: 50; width: 100; height: 100
- }
- }
- }
- \endqml
- \endtable
-
- If an item's opacity is set to 0, the item will no longer receive mouse
- events, but will continue to receive key events and will retain the keyboard
- \l focus if it has been set. (In contrast, setting the \l visible property
- to \c false stops both mouse and keyboard events, and also removes focus
- from the item.)
-*/
-
-/*!
- Returns a value indicating whether mouse input should
- remain with this item exclusively.
-
- \sa setKeepMouseGrab()
- */
-bool QDeclarativeItem::keepMouseGrab() const
-{
- Q_D(const QDeclarativeItem);
- return d->keepMouse;
-}
-
-/*!
- The flag indicating whether the mouse should remain
- with this item is set to \a keep.
-
- This is useful for items that wish to grab and keep mouse
- interaction following a predefined gesture. For example,
- an item that is interested in horizontal mouse movement
- may set keepMouseGrab to true once a threshold has been
- exceeded. Once keepMouseGrab has been set to true, filtering
- items will not react to mouse events.
-
- If the item does not indicate that it wishes to retain mouse grab,
- a filtering item may steal the grab. For example, Flickable may attempt
- to steal a mouse grab if it detects that the user has begun to
- move the viewport.
-
- \sa keepMouseGrab()
- */
-void QDeclarativeItem::setKeepMouseGrab(bool keep)
-{
- Q_D(QDeclarativeItem);
- d->keepMouse = keep;
-}
-
-/*!
- \qmlmethod object QtQuick1::Item::mapFromItem(Item item, real x, real y)
-
- Maps the point (\a x, \a y), which is in \a item's coordinate system, to
- this item's coordinate system, and returns an object with \c x and \c y
- properties matching the mapped cooordinate.
-
- If \a item is a \c null value, this maps the point from the coordinate
- system of the root QML view.
-*/
-void QDeclarativeItem::mapFromItem(QDeclarativeV8Function *args) const
-{
- if (args->Length() != 0) {
- v8::Local<v8::Value> item = (*args)[0];
- QV8Engine *engine = args->engine();
-
- QDeclarativeItem *itemObj = 0;
- if (!item->IsNull())
- itemObj = qobject_cast<QDeclarativeItem*>(engine->toQObject(item));
-
- if (!itemObj && !item->IsNull()) {
- qmlInfo(this) << "mapFromItem() given argument \"" << engine->toString(item->ToString())
- << "\" which is neither null nor an Item";
- return;
- }
-
- v8::Local<v8::Object> rv = v8::Object::New();
- args->returnValue(rv);
-
- qreal x = (args->Length() > 1)?(*args)[1]->NumberValue():0;
- qreal y = (args->Length() > 2)?(*args)[2]->NumberValue():0;
-
- QPointF p = QGraphicsItem::mapFromItem(itemObj, x, y);
-
- rv->Set(v8::String::New("x"), v8::Number::New(p.x()));
- rv->Set(v8::String::New("y"), v8::Number::New(p.y()));
- }
-}
-
-/*!
- \qmlmethod object QtQuick1::Item::mapToItem(Item item, real x, real y)
-
- Maps the point (\a x, \a y), which is in this item's coordinate system, to
- \a item's coordinate system, and returns an object with \c x and \c y
- properties matching the mapped cooordinate.
-
- If \a item is a \c null value, this maps \a x and \a y to the coordinate
- system of the root QML view.
-*/
-void QDeclarativeItem::mapToItem(QDeclarativeV8Function *args) const
-{
- if (args->Length() != 0) {
- v8::Local<v8::Value> item = (*args)[0];
- QV8Engine *engine = args->engine();
-
- QDeclarativeItem *itemObj = 0;
- if (!item->IsNull())
- itemObj = qobject_cast<QDeclarativeItem*>(engine->toQObject(item));
-
- if (!itemObj && !item->IsNull()) {
- qmlInfo(this) << "mapToItem() given argument \"" << engine->toString(item->ToString())
- << "\" which is neither null nor an Item";
- return;
- }
-
- v8::Local<v8::Object> rv = v8::Object::New();
- args->returnValue(rv);
-
- qreal x = (args->Length() > 1)?(*args)[1]->NumberValue():0;
- qreal y = (args->Length() > 2)?(*args)[2]->NumberValue():0;
-
- QPointF p = QGraphicsItem::mapToItem(itemObj, x, y);
-
- rv->Set(v8::String::New("x"), v8::Number::New(p.x()));
- rv->Set(v8::String::New("y"), v8::Number::New(p.y()));
- }
-}
-
-/*!
- \qmlmethod QtQuick1::Item::forceActiveFocus()
-
- Forces active focus on the item.
-
- This method sets focus on the item and makes sure that all the focus scopes
- higher in the object hierarchy are also given the focus.
-*/
-
-/*!
- Forces active focus on the item.
-
- This method sets focus on the item and makes sure that all the focus scopes
- higher in the object hierarchy are also given the focus.
-*/
-void QDeclarativeItem::forceActiveFocus()
-{
- setFocus(true);
- QGraphicsItem *parent = parentItem();
- while (parent) {
- if (parent->flags() & QGraphicsItem::ItemIsFocusScope)
- parent->setFocus(Qt::OtherFocusReason);
- parent = parent->parentItem();
- }
-}
-
-
-/*!
- \qmlmethod QtQuick1::Item::childAt(real x, real y)
-
- Returns the visible child item at point (\a x, \a y), which is in this
- item's coordinate system, or \c null if there is no such item.
-*/
-
-/*!
- Returns the visible child item at point (\a x, \a y), which is in this
- item's coordinate system, or 0 if there is no such item.
-*/
-QDeclarativeItem *QDeclarativeItem::childAt(qreal x, qreal y) const
-{
- const QList<QGraphicsItem *> children = childItems();
- for (int i = children.count()-1; i >= 0; --i) {
- if (QDeclarativeItem *child = qobject_cast<QDeclarativeItem *>(children.at(i))) {
- if (child->isVisible() && child->x() <= x
- && child->x() + child->width() >= x
- && child->y() <= y
- && child->y() + child->height() >= y)
- return child;
- }
- }
- return 0;
-}
-
-void QDeclarativeItemPrivate::focusChanged(bool flag)
-{
- Q_Q(QDeclarativeItem);
- if (!(flags & QGraphicsItem::ItemIsFocusScope) && parent)
- emit q->activeFocusChanged(flag); //see also QDeclarativeItemPrivate::subFocusItemChange()
- emit q->focusChanged(flag);
-}
-
-QDeclarativeListProperty<QObject> QDeclarativeItemPrivate::resources()
-{
- return QDeclarativeListProperty<QObject>(q_func(), 0, QDeclarativeItemPrivate::resources_append,
- QDeclarativeItemPrivate::resources_count,
- QDeclarativeItemPrivate::resources_at,
- QDeclarativeItemPrivate::resources_clear
- );
-}
-
-/*!
- \qmlproperty list<State> QtQuick1::Item::states
- This property holds a list of states defined by the item.
-
- \qml
- Item {
- states: [
- State {
- // ...
- },
- State {
- // ...
- }
- // ...
- ]
- }
- \endqml
-
- \sa {qmlstate}{States}
-*/
-
-QDeclarativeListProperty<QDeclarative1State> QDeclarativeItemPrivate::states()
-{
- return _states()->statesProperty();
-}
-
-/*!
- \qmlproperty list<Transition> QtQuick1::Item::transitions
- This property holds a list of transitions defined by the item.
-
- \qml
- Item {
- transitions: [
- Transition {
- // ...
- },
- Transition {
- // ...
- }
- // ...
- ]
- }
- \endqml
-
- \sa {QML Animation and Transitions}{Transitions}
-*/
-
-
-QDeclarativeListProperty<QDeclarative1Transition> QDeclarativeItemPrivate::transitions()
-{
- return _states()->transitionsProperty();
-}
-
-/*
- \qmlproperty list<Filter> QtQuick1::Item::filter
- This property holds a list of graphical filters to be applied to the item.
-
- \l {Filter}{Filters} include things like \l {Blur}{blurring}
- the item, or giving it a \l Reflection. Some
- filters may not be available on all canvases; if a filter is not
- available on a certain canvas, it will simply not be applied for
- that canvas (but the QML will still be considered valid).
-
- \qml
- Item {
- filter: [
- Blur {
- // ...
- },
- Reflection {
- // ...
- }
- // ...
- ]
- }
- \endqml
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Item::clip
- This property holds whether clipping is enabled. The default clip value is \c false.
-
- If clipping is enabled, an item will clip its own painting, as well
- as the painting of its children, to its bounding rectangle.
-
- Non-rectangular clipping regions are not supported for performance reasons.
-*/
-
-/*!
- \property QDeclarativeItem::clip
- This property holds whether clipping is enabled. The default clip value is \c false.
-
- If clipping is enabled, an item will clip its own painting, as well
- as the painting of its children, to its bounding rectangle. If you set
- clipping during an item's paint operation, remember to re-set it to
- prevent clipping the rest of your scene.
-
- Non-rectangular clipping regions are not supported for performance reasons.
-*/
-
-/*!
- \qmlproperty string QtQuick1::Item::state
-
- This property holds the name of the current state of the item.
-
- This property is often used in scripts to change between states. For
- example:
-
- \js
- function toggle() {
- if (button.state == 'On')
- button.state = 'Off';
- else
- button.state = 'On';
- }
- \endjs
-
- If the item is in its base state (i.e. no explicit state has been
- set), \c state will be a blank string. Likewise, you can return an
- item to its base state by setting its current state to \c ''.
-
- \sa {qmlstates}{States}
-*/
-
-QString QDeclarativeItemPrivate::state() const
-{
- if (!_stateGroup)
- return QString();
- else
- return _stateGroup->state();
-}
-
-void QDeclarativeItemPrivate::setState(const QString &state)
-{
- _states()->setState(state);
-}
-
-/*!
- \qmlproperty list<Transform> QtQuick1::Item::transform
- This property holds the list of transformations to apply.
-
- For more information see \l Transform.
-*/
-
-/*! \internal */
-QDeclarativeListProperty<QGraphicsTransform> QDeclarativeItem::transform()
-{
- return QDeclarativeListProperty<QGraphicsTransform>(this, 0, QDeclarativeItemPrivate::transform_append,
- QDeclarativeItemPrivate::transform_count,
- QDeclarativeItemPrivate::transform_at,
- QDeclarativeItemPrivate::transform_clear);
-}
-
-/*!
- \internal
-
- classBegin() is called when the item is constructed, but its
- properties have not yet been set.
-
- \sa componentComplete(), isComponentComplete()
-*/
-void QDeclarativeItem::classBegin()
-{
- Q_D(QDeclarativeItem);
- d->componentComplete = false;
- if (d->_stateGroup)
- d->_stateGroup->classBegin();
- if (d->_anchors)
- d->_anchors->classBegin();
-}
-
-/*!
- \internal
-
- componentComplete() is called when all items in the component
- have been constructed. It is often desirable to delay some
- processing until the component is complete an all bindings in the
- component have been resolved.
-*/
-void QDeclarativeItem::componentComplete()
-{
- Q_D(QDeclarativeItem);
- d->componentComplete = true;
- if (d->_stateGroup)
- d->_stateGroup->componentComplete();
- if (d->_anchors) {
- d->_anchors->componentComplete();
- d->_anchors->d_func()->updateOnComplete();
- }
- if (d->keyHandler)
- d->keyHandler->componentComplete();
- if (d->_contents)
- d->_contents->complete();
-}
-
-QDeclarative1StateGroup *QDeclarativeItemPrivate::_states()
-{
- Q_Q(QDeclarativeItem);
- if (!_stateGroup) {
- _stateGroup = new QDeclarative1StateGroup;
- if (!componentComplete)
- _stateGroup->classBegin();
- QObject::connect(_stateGroup, SIGNAL(stateChanged(QString)),
- q, SIGNAL(stateChanged(QString)));
- }
-
- return _stateGroup;
-}
-
-QDeclarativeItemPrivate::AnchorLines::AnchorLines(QGraphicsObject *q)
-{
- left.item = q;
- left.anchorLine = QDeclarative1AnchorLine::Left;
- right.item = q;
- right.anchorLine = QDeclarative1AnchorLine::Right;
- hCenter.item = q;
- hCenter.anchorLine = QDeclarative1AnchorLine::HCenter;
- top.item = q;
- top.anchorLine = QDeclarative1AnchorLine::Top;
- bottom.item = q;
- bottom.anchorLine = QDeclarative1AnchorLine::Bottom;
- vCenter.item = q;
- vCenter.anchorLine = QDeclarative1AnchorLine::VCenter;
- baseline.item = q;
- baseline.anchorLine = QDeclarative1AnchorLine::Baseline;
-}
-
-void QDeclarativeItemPrivate::setAccessibleFlagAndListener()
-{
- Q_Q(QDeclarativeItem);
- QDeclarativeItem *item = q;
- while (item) {
- if (item->d_func()->isAccessible)
- break; // already set - grandparents should have the flag set as well.
-
-// if (qmlEngine(item) != 0) {
-// item->d_func()->addItemChangeListener(QDeclarativeEnginePrivate::getAccessibilityUpdateManager(qmlEngine(item)),
-// QDeclarativeItemPrivate::Geometry | QDeclarativeItemPrivate::Visibility |
-// QDeclarativeItemPrivate::Opacity | QDeclarativeItemPrivate::Destroyed);
-// }
-
- item->d_func()->isAccessible = true;
- item = item->parentItem();
- }
-}
-
-QPointF QDeclarativeItemPrivate::computeTransformOrigin() const
-{
- Q_Q(const QDeclarativeItem);
-
- QRectF br = q->boundingRect();
-
- switch(origin) {
- default:
- case QDeclarativeItem::TopLeft:
- return QPointF(0, 0);
- case QDeclarativeItem::Top:
- return QPointF(br.width() / 2., 0);
- case QDeclarativeItem::TopRight:
- return QPointF(br.width(), 0);
- case QDeclarativeItem::Left:
- return QPointF(0, br.height() / 2.);
- case QDeclarativeItem::Center:
- return QPointF(br.width() / 2., br.height() / 2.);
- case QDeclarativeItem::Right:
- return QPointF(br.width(), br.height() / 2.);
- case QDeclarativeItem::BottomLeft:
- return QPointF(0, br.height());
- case QDeclarativeItem::Bottom:
- return QPointF(br.width() / 2., br.height());
- case QDeclarativeItem::BottomRight:
- return QPointF(br.width(), br.height());
- }
-}
-
-/*! \internal */
-bool QDeclarativeItem::sceneEvent(QEvent *event)
-{
- Q_D(QDeclarativeItem);
- if (event->type() == QEvent::KeyPress) {
- QKeyEvent *k = static_cast<QKeyEvent *>(event);
- if ((k->key() == Qt::Key_Tab || k->key() == Qt::Key_Backtab) &&
- !(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier))) {
- keyPressEvent(static_cast<QKeyEvent *>(event));
- if (!event->isAccepted())
- return QGraphicsItem::sceneEvent(event);
- else
- return true;
- } else {
- return QGraphicsItem::sceneEvent(event);
- }
- } else {
- bool rv = QGraphicsItem::sceneEvent(event);
-
- if (event->type() == QEvent::FocusIn ||
- event->type() == QEvent::FocusOut) {
- d->focusChanged(hasActiveFocus());
- }
- return rv;
- }
-}
-
-/*!
- \internal
-
- Note that unlike QGraphicsItems, QDeclarativeItem::itemChange() is \e not called
- during initial widget polishing. Items wishing to optimize start-up construction
- should instead consider using componentComplete().
-*/
-QVariant QDeclarativeItem::itemChange(GraphicsItemChange change,
- const QVariant &value)
-{
- Q_D(QDeclarativeItem);
- switch (change) {
- case ItemParentHasChanged:
- d->resolveLayoutMirror();
- emit parentChanged(parentItem());
- break;
- case ItemVisibleHasChanged: {
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QDeclarativeItemPrivate::Visibility) {
- change.listener->itemVisibilityChanged(this);
- }
- }
- }
- break;
- case ItemOpacityHasChanged: {
- for(int ii = 0; ii < d->changeListeners.count(); ++ii) {
- const QDeclarativeItemPrivate::ChangeListener &change = d->changeListeners.at(ii);
- if (change.types & QDeclarativeItemPrivate::Opacity) {
- change.listener->itemOpacityChanged(this);
- }
- }
- }
- break;
- case ItemChildAddedChange:
- if (d->_contents && d->componentComplete)
- d->_contents->childAdded(qobject_cast<QDeclarativeItem*>(
- value.value<QGraphicsItem*>()));
- break;
- case ItemChildRemovedChange:
- if (d->_contents && d->componentComplete)
- d->_contents->childRemoved(qobject_cast<QDeclarativeItem*>(
- value.value<QGraphicsItem*>()));
- break;
- default:
- break;
- }
-
- return QGraphicsItem::itemChange(change, value);
-}
-
-/*! \internal */
-QRectF QDeclarativeItem::boundingRect() const
-{
- Q_D(const QDeclarativeItem);
- return QRectF(0, 0, d->mWidth, d->mHeight);
-}
-
-/*!
- \enum QDeclarativeItem::TransformOrigin
-
- Controls the point about which simple transforms like scale apply.
-
- \value TopLeft The top-left corner of the item.
- \value Top The center point of the top of the item.
- \value TopRight The top-right corner of the item.
- \value Left The left most point of the vertical middle.
- \value Center The center of the item.
- \value Right The right most point of the vertical middle.
- \value BottomLeft The bottom-left corner of the item.
- \value Bottom The center point of the bottom of the item.
- \value BottomRight The bottom-right corner of the item.
-*/
-
-/*!
- Returns the current transform origin.
-*/
-QDeclarativeItem::TransformOrigin QDeclarativeItem::transformOrigin() const
-{
- Q_D(const QDeclarativeItem);
- return d->origin;
-}
-
-/*!
- Set the transform \a origin.
-*/
-void QDeclarativeItem::setTransformOrigin(TransformOrigin origin)
-{
- Q_D(QDeclarativeItem);
- if (origin != d->origin) {
- d->origin = origin;
- if (d->transformData)
- QGraphicsItem::setTransformOriginPoint(d->computeTransformOrigin());
- else
- d->transformOriginDirty = true;
- emit transformOriginChanged(d->origin);
- }
-}
-
-void QDeclarativeItemPrivate::transformChanged()
-{
- Q_Q(QDeclarativeItem);
- if (transformOriginDirty) {
- q->QGraphicsItem::setTransformOriginPoint(computeTransformOrigin());
- transformOriginDirty = false;
- }
-}
-
-/*!
- \property QDeclarativeItem::smooth
- \brief whether the item is smoothly transformed.
-
- This property is provided purely for the purpose of optimization. Turning
- smooth transforms off is faster, but looks worse; turning smooth
- transformations on is slower, but looks better.
-
- By default smooth transformations are off.
-*/
-
-/*!
- Returns true if the item should be drawn with antialiasing and
- smooth pixmap filtering, false otherwise.
-
- The default is false.
-
- \sa setSmooth()
-*/
-bool QDeclarativeItem::smooth() const
-{
- Q_D(const QDeclarativeItem);
- return d->smooth;
-}
-
-/*!
- Sets whether the item should be drawn with antialiasing and
- smooth pixmap filtering to \a smooth.
-
- \sa smooth()
-*/
-void QDeclarativeItem::setSmooth(bool smooth)
-{
- Q_D(QDeclarativeItem);
- if (d->smooth == smooth)
- return;
- d->smooth = smooth;
- emit smoothChanged(smooth);
- update();
-}
-
-/*!
- \property QDeclarativeItem::anchors
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::left
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::right
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::horizontalCenter
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::top
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::bottom
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::verticalCenter
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::focus
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::transform
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::transformOrigin
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::activeFocus
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::baseline
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::data
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::resources
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::state
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::states
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::transformOriginPoint
- \internal
-*/
-
-/*!
- \property QDeclarativeItem::transitions
- \internal
-*/
-
-/*!
- \internal
- Return the width of the item
-*/
-qreal QDeclarativeItem::width() const
-{
- Q_D(const QDeclarativeItem);
- return d->width();
-}
-
-/*!
- \internal
- Set the width of the item
-*/
-void QDeclarativeItem::setWidth(qreal w)
-{
- Q_D(QDeclarativeItem);
- d->setWidth(w);
-}
-
-/*!
- \internal
- Reset the width of the item
-*/
-void QDeclarativeItem::resetWidth()
-{
- Q_D(QDeclarativeItem);
- d->resetWidth();
-}
-
-/*!
- \internal
- Return the width of the item
-*/
-qreal QDeclarativeItemPrivate::width() const
-{
- return mWidth;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeItemPrivate::setWidth(qreal w)
-{
- Q_Q(QDeclarativeItem);
- if (qIsNaN(w))
- return;
-
- widthValid = true;
- if (mWidth == w)
- return;
-
- qreal oldWidth = mWidth;
-
- q->prepareGeometryChange();
- mWidth = w;
-
- q->geometryChanged(QRectF(q->x(), q->y(), width(), height()),
- QRectF(q->x(), q->y(), oldWidth, height()));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeItemPrivate::resetWidth()
-{
- Q_Q(QDeclarativeItem);
- widthValid = false;
- q->setImplicitWidth(q->implicitWidth());
-}
-
-void QDeclarativeItemPrivate::implicitWidthChanged()
-{
- Q_Q(QDeclarativeItem);
- emit q->implicitWidthChanged();
-}
-
-qreal QDeclarativeItemPrivate::implicitWidth() const
-{
- return mImplicitWidth;
-}
-
-/*!
- Returns the width of the item that is implied by other properties that determine the content.
-*/
-qreal QDeclarativeItem::implicitWidth() const
-{
- Q_D(const QDeclarativeItem);
- return d->implicitWidth();
-}
-
-/*!
- Sets the implied width of the item to \a w.
- This is the width implied by other properties that determine the content.
-*/
-void QDeclarativeItem::setImplicitWidth(qreal w)
-{
- Q_D(QDeclarativeItem);
- bool changed = w != d->mImplicitWidth;
- d->mImplicitWidth = w;
- if (d->mWidth == w || widthValid()) {
- if (changed)
- d->implicitWidthChanged();
- return;
- }
-
- qreal oldWidth = d->mWidth;
-
- prepareGeometryChange();
- d->mWidth = w;
-
- geometryChanged(QRectF(x(), y(), width(), height()),
- QRectF(x(), y(), oldWidth, height()));
-
- if (changed)
- d->implicitWidthChanged();
-}
-
-/*!
- Returns whether the width property has been set explicitly.
-*/
-bool QDeclarativeItem::widthValid() const
-{
- Q_D(const QDeclarativeItem);
- return d->widthValid;
-}
-
-/*!
- \internal
- Return the height of the item
-*/
-qreal QDeclarativeItem::height() const
-{
- Q_D(const QDeclarativeItem);
- return d->height();
-}
-
-/*!
- \internal
- Set the height of the item
-*/
-void QDeclarativeItem::setHeight(qreal h)
-{
- Q_D(QDeclarativeItem);
- d->setHeight(h);
-}
-
-/*!
- \internal
- Reset the height of the item
-*/
-void QDeclarativeItem::resetHeight()
-{
- Q_D(QDeclarativeItem);
- d->resetHeight();
-}
-
-/*!
- \internal
-*/
-qreal QDeclarativeItemPrivate::height() const
-{
- return mHeight;
-}
-
-/*!
- \internal
-*/
-void QDeclarativeItemPrivate::setHeight(qreal h)
-{
- Q_Q(QDeclarativeItem);
- if (qIsNaN(h))
- return;
-
- heightValid = true;
- if (mHeight == h)
- return;
-
- qreal oldHeight = mHeight;
-
- q->prepareGeometryChange();
- mHeight = h;
-
- q->geometryChanged(QRectF(q->x(), q->y(), width(), height()),
- QRectF(q->x(), q->y(), width(), oldHeight));
-}
-
-/*!
- \internal
-*/
-void QDeclarativeItemPrivate::resetHeight()
-{
- Q_Q(QDeclarativeItem);
- heightValid = false;
- q->setImplicitHeight(q->implicitHeight());
-}
-
-void QDeclarativeItemPrivate::implicitHeightChanged()
-{
- Q_Q(QDeclarativeItem);
- emit q->implicitHeightChanged();
-}
-
-qreal QDeclarativeItemPrivate::implicitHeight() const
-{
- return mImplicitHeight;
-}
-
-/*!
- Returns the height of the item that is implied by other properties that determine the content.
-*/
-qreal QDeclarativeItem::implicitHeight() const
-{
- Q_D(const QDeclarativeItem);
- return d->implicitHeight();
-}
-
-/*!
- \qmlproperty real QtQuick1::Item::implicitWidth
- \qmlproperty real QtQuick1::Item::implicitHeight
- \since Quick 1.1
-
- Defines the natural width or height of the Item if no \l width or \l height is specified.
-
- The default implicit size for most items is 0x0, however some elements have an inherent
- implicit size which cannot be overridden, e.g. Image, Text.
-
- Setting the implicit size is useful for defining components that have a preferred size
- based on their content, for example:
-
- \qml
- // Label.qml
- import QtQuick 1.1
-
- Item {
- property alias icon: image.source
- property alias label: text.text
- implicitWidth: text.implicitWidth + image.implicitWidth
- implicitHeight: Math.max(text.implicitHeight, image.implicitHeight)
- Image { id: image }
- Text {
- id: text
- wrapMode: Text.Wrap
- anchors.left: image.right; anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- }
- }
- \endqml
-
- \bold Note: using implicitWidth of Text or TextEdit and setting the width explicitly
- incurs a performance penalty as the text must be laid out twice.
-*/
-
-
-/*!
- Sets the implied height of the item to \a h.
- This is the height implied by other properties that determine the content.
-*/
-void QDeclarativeItem::setImplicitHeight(qreal h)
-{
- Q_D(QDeclarativeItem);
- bool changed = h != d->mImplicitHeight;
- d->mImplicitHeight = h;
- if (d->mHeight == h || heightValid()) {
- if (changed)
- d->implicitHeightChanged();
- return;
- }
-
- qreal oldHeight = d->mHeight;
-
- prepareGeometryChange();
- d->mHeight = h;
-
- geometryChanged(QRectF(x(), y(), width(), height()),
- QRectF(x(), y(), width(), oldHeight));
-
- if (changed)
- d->implicitHeightChanged();
-}
-
-/*!
- Returns whether the height property has been set explicitly.
-*/
-bool QDeclarativeItem::heightValid() const
-{
- Q_D(const QDeclarativeItem);
- return d->heightValid;
-}
-
-/*! \internal */
-void QDeclarativeItem::setSize(const QSizeF &size)
-{
- Q_D(QDeclarativeItem);
- d->heightValid = true;
- d->widthValid = true;
-
- if (d->height() == size.height() && d->width() == size.width())
- return;
-
- qreal oldHeight = d->height();
- qreal oldWidth = d->width();
-
- prepareGeometryChange();
- d->setHeight(size.height());
- d->setWidth(size.width());
-
- geometryChanged(QRectF(x(), y(), width(), height()),
- QRectF(x(), y(), oldWidth, oldHeight));
-}
-
-/*!
- \qmlproperty bool QtQuick1::Item::activeFocus
-
- This property indicates whether the item has active focus.
-
- An item with active focus will receive keyboard input,
- or is a FocusScope ancestor of the item that will receive keyboard input.
-
- Usually, activeFocus is gained by setting focus on an item and its enclosing
- FocusScopes. In the following example \c input will have activeFocus.
- \qml
- Rectangle {
- FocusScope {
- focus: true
- TextInput {
- id: input
- focus: true
- }
- }
- }
- \endqml
-
- \sa focus, {qmlfocus}{Keyboard Focus}
-*/
-
-/*! \internal */
-bool QDeclarativeItem::hasActiveFocus() const
-{
- Q_D(const QDeclarativeItem);
- return (focusItem() && focusItem()->isVisible()) && (focusItem() == this ||
- (d->flags & QGraphicsItem::ItemIsFocusScope && focusItem() != 0));
-}
-
-/*!
- \qmlproperty bool QtQuick1::Item::focus
- This property indicates whether the item has focus within the enclosing focus scope. If true, this item
- will gain active focus when the enclosing focus scope gains active focus.
- In the following example, \c input will be given active focus when \c scope gains active focus.
- \qml
- Rectangle {
- FocusScope {
- id: scope
- TextInput {
- id: input
- focus: true
- }
- }
- }
- \endqml
-
- For the purposes of this property, the scene as a whole is assumed to act like a focus scope.
- On a practical level, that means the following QML will give active focus to \c input on startup.
-
- \qml
- Rectangle {
- TextInput {
- id: input
- focus: true
- }
- }
- \endqml
-
- \sa activeFocus, {qmlfocus}{Keyboard Focus}
-*/
-
-/*! \internal */
-bool QDeclarativeItem::hasFocus() const
-{
- Q_D(const QDeclarativeItem);
- QGraphicsItem *p = d->parent;
- while (p) {
- if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
- return p->focusScopeItem() == this;
- }
- p = p->parentItem();
- }
-
- return hasActiveFocus();
-}
-
-/*! \internal */
-void QDeclarativeItem::setFocus(bool focus)
-{
- if (focus)
- QGraphicsItem::setFocus(Qt::OtherFocusReason);
- else
- QGraphicsItem::clearFocus();
-}
-
-/*!
- \internal
-*/
-void QDeclarativeItem::paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
-{
-}
-
-/*!
- \internal
-*/
-bool QDeclarativeItem::event(QEvent *ev)
-{
- Q_D(QDeclarativeItem);
- switch (ev->type()) {
- case QEvent::KeyPress:
- case QEvent::KeyRelease:
- case QEvent::InputMethod:
- d->doneEventPreHandler = false;
- break;
- default:
- break;
- }
-
- return QGraphicsObject::event(ev);
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-QDebug operator<<(QDebug debug, QDeclarativeItem *item)
-{
- if (!item) {
- debug << "QDeclarativeItem(0)";
- return debug;
- }
-
- debug << item->metaObject()->className() << "(this =" << ((void*)item)
- << ", parent =" << ((void*)item->parentItem())
- << ", geometry =" << QRectF(item->pos(), QSizeF(item->width(), item->height()))
- << ", z =" << item->zValue() << ')';
- return debug;
-}
-#endif
-
-qint64 QDeclarativeItemPrivate::consistentTime = -1;
-void QDeclarativeItemPrivate::setConsistentTime(qint64 t)
-{
- consistentTime = t;
-}
-
-class QElapsedTimerConsistentTimeHack_1
-{
-public:
- void start() {
- t1 = QDeclarativeItemPrivate::consistentTime;
- t2 = 0;
- }
- qint64 elapsed() {
- return QDeclarativeItemPrivate::consistentTime - t1;
- }
- qint64 restart() {
- qint64 val = QDeclarativeItemPrivate::consistentTime - t1;
- t1 = QDeclarativeItemPrivate::consistentTime;
- t2 = 0;
- return val;
- }
-
-private:
- qint64 t1;
- qint64 t2;
-};
-
-void QDeclarativeItemPrivate::start(QElapsedTimer &t)
-{
- if (QDeclarativeItemPrivate::consistentTime == -1)
- t.start();
- else
- ((QElapsedTimerConsistentTimeHack_1*)&t)->start();
-}
-
-qint64 QDeclarativeItemPrivate::elapsed(QElapsedTimer &t)
-{
- if (QDeclarativeItemPrivate::consistentTime == -1)
- return t.elapsed();
- else
- return ((QElapsedTimerConsistentTimeHack_1*)&t)->elapsed();
-}
-
-qint64 QDeclarativeItemPrivate::restart(QElapsedTimer &t)
-{
- if (QDeclarativeItemPrivate::consistentTime == -1)
- return t.restart();
- else
- return ((QElapsedTimerConsistentTimeHack_1*)&t)->restart();
-}
-
-QT_END_NAMESPACE
-
-#include <moc_qdeclarativeitem.cpp>
diff --git a/src/qtquick1/graphicsitems/qdeclarativeitem.h b/src/qtquick1/graphicsitems/qdeclarativeitem.h
deleted file mode 100644
index 0eea30c2f2..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeitem.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEITEM_H
-#define QDECLARATIVEITEM_H
-
-#include <QtDeclarative/qdeclarative.h>
-#include <QtDeclarative/qdeclarativecomponent.h>
-
-#include <QtCore/QObject>
-#include <QtCore/QList>
-#include <QtGui/qfont.h>
-#include <QtWidgets/qgraphicsitem.h>
-#include <QtWidgets/qgraphicswidget.h>
-#include <QtWidgets/qgraphicstransform.h>
-#include <QtGui/qaccessible.h>
-#include <QtWidgets/qaction.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1State;
-class QDeclarative1AnchorLine;
-class QDeclarative1Transition;
-class QDeclarative1KeyEvent;
-class QDeclarative1Anchors;
-class QDeclarativeItemPrivate;
-class QDeclarativeV8Function;
-class Q_QTQUICK1_EXPORT QDeclarativeItem : public QGraphicsObject, public QDeclarativeParserStatus
-{
- Q_OBJECT
- Q_INTERFACES(QDeclarativeParserStatus)
-
- Q_PROPERTY(QDeclarativeItem * parent READ parentItem WRITE setParentItem NOTIFY parentChanged DESIGNABLE false FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarativeListProperty<QObject> resources READ resources DESIGNABLE false)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarativeListProperty<QDeclarative1State> states READ states DESIGNABLE false)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarativeListProperty<QDeclarative1Transition> transitions READ transitions DESIGNABLE false)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QString state READ state WRITE setState NOTIFY stateChanged)
- Q_PROPERTY(QRectF childrenRect READ childrenRect NOTIFY childrenRectChanged DESIGNABLE false FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1Anchors * anchors READ anchors DESIGNABLE false CONSTANT FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine left READ left CONSTANT FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine right READ right CONSTANT FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine horizontalCenter READ horizontalCenter CONSTANT FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine top READ top CONSTANT FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine bottom READ bottom CONSTANT FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine verticalCenter READ verticalCenter CONSTANT FINAL)
- Q_PRIVATE_PROPERTY(QDeclarativeItem::d_func(), QDeclarative1AnchorLine baseline READ baseline CONSTANT FINAL)
- Q_PROPERTY(qreal baselineOffset READ baselineOffset WRITE setBaselineOffset NOTIFY baselineOffsetChanged)
- Q_PROPERTY(bool clip READ clip WRITE setClip NOTIFY clipChanged) // ### move to QGI/QGO, NOTIFY
- Q_PROPERTY(bool focus READ hasFocus WRITE setFocus NOTIFY focusChanged FINAL)
- Q_PROPERTY(bool activeFocus READ hasActiveFocus NOTIFY activeFocusChanged)
- Q_PROPERTY(QDeclarativeListProperty<QGraphicsTransform> transform READ transform DESIGNABLE false FINAL)
- Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin NOTIFY transformOriginChanged)
- Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint) // transformOriginPoint is read-only for Item
- Q_PROPERTY(bool smooth READ smooth WRITE setSmooth NOTIFY smoothChanged)
- Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged REVISION 1)
- Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged REVISION 1)
-
- Q_ENUMS(TransformOrigin)
- Q_CLASSINFO("DefaultProperty", "data")
-
-public:
- enum TransformOrigin {
- TopLeft, Top, TopRight,
- Left, Center, Right,
- BottomLeft, Bottom, BottomRight
- };
-
- QDeclarativeItem(QDeclarativeItem *parent = 0);
- virtual ~QDeclarativeItem();
-
- QDeclarativeItem *parentItem() const;
- void setParentItem(QDeclarativeItem *parent);
-
- QRectF childrenRect();
-
- bool clip() const;
- void setClip(bool);
-
- qreal baselineOffset() const;
- void setBaselineOffset(qreal);
-
- QDeclarativeListProperty<QGraphicsTransform> transform();
-
- qreal width() const;
- void setWidth(qreal);
- void resetWidth();
- qreal implicitWidth() const;
-
- qreal height() const;
- void setHeight(qreal);
- void resetHeight();
- qreal implicitHeight() const;
-
- void setSize(const QSizeF &size);
-
- TransformOrigin transformOrigin() const;
- void setTransformOrigin(TransformOrigin);
-
- bool smooth() const;
- void setSmooth(bool);
-
- QRectF boundingRect() const;
- virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
-
- bool hasActiveFocus() const;
- bool hasFocus() const;
- void setFocus(bool);
-
- bool keepMouseGrab() const;
- void setKeepMouseGrab(bool);
-
- Q_INVOKABLE void mapFromItem(QDeclarativeV8Function*) const;
- Q_INVOKABLE void mapToItem(QDeclarativeV8Function*) const;
- Q_INVOKABLE void forceActiveFocus();
- Q_INVOKABLE QDeclarativeItem *childAt(qreal x, qreal y) const;
-
-Q_SIGNALS:
- void childrenRectChanged(const QRectF &);
- void baselineOffsetChanged(qreal);
- void stateChanged(const QString &);
- void focusChanged(bool);
- void activeFocusChanged(bool);
- void parentChanged(QDeclarativeItem *);
- void transformOriginChanged(TransformOrigin);
- void smoothChanged(bool);
- void clipChanged(bool);
- Q_REVISION(1) void implicitWidthChanged();
- Q_REVISION(1) void implicitHeightChanged();
-
-protected:
- bool isComponentComplete() const;
- virtual bool sceneEvent(QEvent *);
- virtual bool event(QEvent *);
- virtual QVariant itemChange(GraphicsItemChange, const QVariant &);
-
- void setImplicitWidth(qreal);
- bool widthValid() const; // ### better name?
- void setImplicitHeight(qreal);
- bool heightValid() const; // ### better name?
-
- virtual void classBegin();
- virtual void componentComplete();
- virtual void keyPressEvent(QKeyEvent *event);
- virtual void keyReleaseEvent(QKeyEvent *event);
- virtual void inputMethodEvent(QInputMethodEvent *);
- virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
- void keyPressPreHandler(QKeyEvent *);
- void keyReleasePreHandler(QKeyEvent *);
- void inputMethodPreHandler(QInputMethodEvent *);
-
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
-
-protected:
- QDeclarativeItem(QDeclarativeItemPrivate &dd, QDeclarativeItem *parent = 0);
-
-private:
- Q_DISABLE_COPY(QDeclarativeItem)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarativeItem)
-
- friend class QDeclarativeAccessibleAttached;
-};
-
-template<typename T>
- T qobject_cast(QGraphicsObject *o)
-{
- QObject *obj = o;
- return qobject_cast<T>(obj);
-}
-
-// ### move to QGO
-template<typename T>
-T qobject_cast(QGraphicsItem *item)
-{
- if (!item) return 0;
- QObject *o = item->toGraphicsObject();
- return qobject_cast<T>(o);
-}
-
-#ifndef QT_NO_DEBUG_STREAM
-QDebug Q_QTQUICK1_EXPORT operator<<(QDebug debug, QDeclarativeItem *item);
-#endif
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarativeItem)
-QML_DECLARE_TYPE(QGraphicsObject)
-QML_DECLARE_TYPE(QGraphicsTransform)
-QML_DECLARE_TYPE(QGraphicsScale)
-QML_DECLARE_TYPE(QGraphicsRotation)
-QML_DECLARE_TYPE(QGraphicsWidget)
-QML_DECLARE_TYPE(QAction)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEITEM_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeitem_p.h b/src/qtquick1/graphicsitems/qdeclarativeitem_p.h
deleted file mode 100644
index 75d1339dd4..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeitem_p.h
+++ /dev/null
@@ -1,635 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEITEM_P_H
-#define QDECLARATIVEITEM_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "QtQuick1/qdeclarativeitem.h"
-
-#include "QtQuick1/private/qdeclarativeanchors_p.h"
-#include "QtQuick1/private/qdeclarativeanchors_p_p.h"
-#include "QtQuick1/private/qdeclarativeitemchangelistener_p.h"
-#include <QtDeclarative/private/qpodvector_p.h>
-
-#include <QtQuick1/private/qdeclarativestate_p.h>
-#include <QtDeclarative/private/qdeclarativenullablevalue_p_p.h>
-#include <QtDeclarative/private/qdeclarativenotifier_p.h>
-#include <QtDeclarative/private/qdeclarativeglobal_p.h>
-
-#include <QtDeclarative/qdeclarative.h>
-#include <QtDeclarative/qdeclarativecontext.h>
-
-#include <QtCore/qlist.h>
-#include <QtCore/qrect.h>
-#include <QtCore/qdebug.h>
-#include <QtGui/qaccessible.h>
-
-#include <QtWidgets/private/qgraphicsitem_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class QNetworkReply;
-
-class QDeclarativeItemKeyFilter;
-class QDeclarative1LayoutMirroringAttached;
-
-//### merge into private?
-class QDeclarative1Contents : public QObject, public QDeclarativeItemChangeListener
-{
- Q_OBJECT
-public:
- QDeclarative1Contents(QDeclarativeItem *item);
- ~QDeclarative1Contents();
-
- QRectF rectF() const;
-
- void childRemoved(QDeclarativeItem *item);
- void childAdded(QDeclarativeItem *item);
-
- void calcGeometry() { calcWidth(); calcHeight(); }
- void complete();
-
-Q_SIGNALS:
- void rectChanged(QRectF);
-
-protected:
- void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry);
- void itemDestroyed(QDeclarativeItem *item);
- //void itemVisibilityChanged(QDeclarativeItem *item)
-
-private:
- void calcHeight(QDeclarativeItem *changed = 0);
- void calcWidth(QDeclarativeItem *changed = 0);
-
- QDeclarativeItem *m_item;
- qreal m_x;
- qreal m_y;
- qreal m_width;
- qreal m_height;
-};
-
-class Q_QTQUICK1_EXPORT QDeclarativeItemPrivate : public QGraphicsItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarativeItem)
-
-public:
- QDeclarativeItemPrivate()
- : _anchors(0), _contents(0),
- baselineOffset(0),
- _anchorLines(0),
- _stateGroup(0), origin(QDeclarativeItem::Center),
- widthValid(false), heightValid(false),
- componentComplete(true), keepMouse(false),
- smooth(false), transformOriginDirty(true), doneEventPreHandler(false),
- inheritedLayoutMirror(false), effectiveLayoutMirror(false), isMirrorImplicit(true),
- inheritMirrorFromParent(false), inheritMirrorFromItem(false), isAccessible(0), keyHandler(0),
- mWidth(0), mHeight(0), mImplicitWidth(0), mImplicitHeight(0), attachedLayoutDirection(0), hadSubFocusItem(false)
- {
- QGraphicsItemPrivate::acceptedMouseButtons = 0;
- isDeclarativeItem = 1;
- QGraphicsItemPrivate::flags = QGraphicsItem::GraphicsItemFlags(
- QGraphicsItem::ItemHasNoContents
- | QGraphicsItem::ItemIsFocusable
- | QGraphicsItem::ItemNegativeZStacksBehindParent);
- }
-
- void init(QDeclarativeItem *parent)
- {
- Q_Q(QDeclarativeItem);
- if (parent) {
- QDeclarative_setParent_noEvent(q, parent);
- q->setParentItem(parent);
- QDeclarativeItemPrivate *parentPrivate = QDeclarativeItemPrivate::get(parent);
- setImplicitLayoutMirror(parentPrivate->inheritedLayoutMirror, parentPrivate->inheritMirrorFromParent);
- }
- baselineOffset.invalidate();
- mouseSetsFocus = false;
- }
-
- bool isMirrored() const {
- return effectiveLayoutMirror;
- }
-
- // Private Properties
- qreal width() const;
- void setWidth(qreal);
- void resetWidth();
-
- qreal height() const;
- void setHeight(qreal);
- void resetHeight();
-
- virtual qreal implicitWidth() const;
- virtual qreal implicitHeight() const;
- virtual void implicitWidthChanged();
- virtual void implicitHeightChanged();
-
- void resolveLayoutMirror();
- void setImplicitLayoutMirror(bool mirror, bool inherit);
- void setLayoutMirror(bool mirror);
-
- QDeclarativeListProperty<QObject> data();
- QDeclarativeListProperty<QObject> resources();
-
- QDeclarativeListProperty<QDeclarative1State> states();
- QDeclarativeListProperty<QDeclarative1Transition> transitions();
-
- QString state() const;
- void setState(const QString &);
-
- QDeclarative1AnchorLine left() const;
- QDeclarative1AnchorLine right() const;
- QDeclarative1AnchorLine horizontalCenter() const;
- QDeclarative1AnchorLine top() const;
- QDeclarative1AnchorLine bottom() const;
- QDeclarative1AnchorLine verticalCenter() const;
- QDeclarative1AnchorLine baseline() const;
-
- // data property
- static void data_append(QDeclarativeListProperty<QObject> *, QObject *);
- static int data_count(QDeclarativeListProperty<QObject> *);
- static QObject *data_at(QDeclarativeListProperty<QObject> *, int);
- static void data_clear(QDeclarativeListProperty<QObject> *);
-
- // resources property
- static QObject *resources_at(QDeclarativeListProperty<QObject> *, int);
- static void resources_append(QDeclarativeListProperty<QObject> *, QObject *);
- static int resources_count(QDeclarativeListProperty<QObject> *);
- static void resources_clear(QDeclarativeListProperty<QObject> *);
-
- // transform property
- static int transform_count(QDeclarativeListProperty<QGraphicsTransform> *list);
- static void transform_append(QDeclarativeListProperty<QGraphicsTransform> *list, QGraphicsTransform *);
- static QGraphicsTransform *transform_at(QDeclarativeListProperty<QGraphicsTransform> *list, int);
- static void transform_clear(QDeclarativeListProperty<QGraphicsTransform> *list);
-
- static QDeclarativeItemPrivate* get(QDeclarativeItem *item)
- {
- return item->d_func();
- }
-
- QDeclarative1Anchors *anchors() {
- if (!_anchors) {
- Q_Q(QDeclarativeItem);
- _anchors = new QDeclarative1Anchors(q);
- if (!componentComplete)
- _anchors->classBegin();
- }
- return _anchors;
- }
- QDeclarative1Anchors *_anchors;
- QDeclarative1Contents *_contents;
-
- QDeclarativeNullableValue<qreal> baselineOffset;
-
- struct AnchorLines {
- AnchorLines(QGraphicsObject *);
- QDeclarative1AnchorLine left;
- QDeclarative1AnchorLine right;
- QDeclarative1AnchorLine hCenter;
- QDeclarative1AnchorLine top;
- QDeclarative1AnchorLine bottom;
- QDeclarative1AnchorLine vCenter;
- QDeclarative1AnchorLine baseline;
- };
- mutable AnchorLines *_anchorLines;
- AnchorLines *anchorLines() const {
- Q_Q(const QDeclarativeItem);
- if (!_anchorLines) _anchorLines =
- new AnchorLines(const_cast<QDeclarativeItem *>(q));
- return _anchorLines;
- }
-
- enum ChangeType {
- Geometry = 0x01,
- SiblingOrder = 0x02,
- Visibility = 0x04,
- Opacity = 0x08,
- Destroyed = 0x10
- };
-
- Q_DECLARE_FLAGS(ChangeTypes, ChangeType)
-
- struct ChangeListener {
- ChangeListener(QDeclarativeItemChangeListener *l, QDeclarativeItemPrivate::ChangeTypes t) : listener(l), types(t) {}
- QDeclarativeItemChangeListener *listener;
- QDeclarativeItemPrivate::ChangeTypes types;
- bool operator==(const ChangeListener &other) const { return listener == other.listener && types == other.types; }
- };
-
- void addItemChangeListener(QDeclarativeItemChangeListener *listener, ChangeTypes types) {
- changeListeners.append(ChangeListener(listener, types));
- }
- void removeItemChangeListener(QDeclarativeItemChangeListener *, ChangeTypes types);
- QPODVector<ChangeListener,4> changeListeners;
-
- QDeclarative1StateGroup *_states();
- QDeclarative1StateGroup *_stateGroup;
-
- QDeclarativeItem::TransformOrigin origin:5;
- bool widthValid:1;
- bool heightValid:1;
- bool componentComplete:1;
- bool keepMouse:1;
- bool smooth:1;
- bool transformOriginDirty : 1;
- bool doneEventPreHandler : 1;
- bool inheritedLayoutMirror:1;
- bool effectiveLayoutMirror:1;
- bool isMirrorImplicit:1;
- bool inheritMirrorFromParent:1;
- bool inheritMirrorFromItem:1;
- bool isAccessible:1;
-
- QDeclarativeItemKeyFilter *keyHandler;
-
- qreal mWidth;
- qreal mHeight;
- qreal mImplicitWidth;
- qreal mImplicitHeight;
-
- QDeclarative1LayoutMirroringAttached* attachedLayoutDirection;
-
- bool hadSubFocusItem;
- void setAccessibleFlagAndListener();
-
- QPointF computeTransformOrigin() const;
-
- virtual void setPosHelper(const QPointF &pos)
- {
- Q_Q(QDeclarativeItem);
- QRectF oldGeometry(this->pos.x(), this->pos.y(), mWidth, mHeight);
- QGraphicsItemPrivate::setPosHelper(pos);
- q->geometryChanged(QRectF(this->pos.x(), this->pos.y(), mWidth, mHeight), oldGeometry);
- }
-
- // Reimplemented from QGraphicsItemPrivate
- virtual void subFocusItemChange()
- {
- bool hasSubFocusItem = subFocusItem != 0;
- if (((flags & QGraphicsItem::ItemIsFocusScope) || !parent) && hasSubFocusItem != hadSubFocusItem)
- emit q_func()->activeFocusChanged(hasSubFocusItem);
- //see also QDeclarativeItemPrivate::focusChanged
- hadSubFocusItem = hasSubFocusItem;
- }
-
- // Reimplemented from QGraphicsItemPrivate
- virtual void focusScopeItemChange(bool isSubFocusItem)
- {
- emit q_func()->focusChanged(isSubFocusItem);
- }
-
-
- // Reimplemented from QGraphicsItemPrivate
- virtual void siblingOrderChange()
- {
- Q_Q(QDeclarativeItem);
- for(int ii = 0; ii < changeListeners.count(); ++ii) {
- const QDeclarativeItemPrivate::ChangeListener &change = changeListeners.at(ii);
- if (change.types & QDeclarativeItemPrivate::SiblingOrder) {
- change.listener->itemSiblingOrderChanged(q);
- }
- }
- }
-
- // Reimplemented from QGraphicsItemPrivate
- virtual void transformChanged();
-
- virtual void focusChanged(bool);
-
- virtual void mirrorChange() {};
-
- static qint64 consistentTime;
- static void setConsistentTime(qint64 t);
- static void start(QElapsedTimer &);
- static qint64 elapsed(QElapsedTimer &);
- static qint64 restart(QElapsedTimer &);
-};
-
-/*
- Key filters can be installed on a QDeclarativeItem, but not removed. Currently they
- are only used by attached objects (which are only destroyed on Item
- destruction), so this isn't a problem. If in future this becomes any form
- of public API, they will have to support removal too.
-*/
-class QDeclarativeItemKeyFilter
-{
-public:
- QDeclarativeItemKeyFilter(QDeclarativeItem * = 0);
- virtual ~QDeclarativeItemKeyFilter();
-
- virtual void keyPressed(QKeyEvent *event, bool post);
- virtual void keyReleased(QKeyEvent *event, bool post);
- virtual void inputMethodEvent(QInputMethodEvent *event, bool post);
- virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
- virtual void componentComplete();
-
- bool m_processPost;
-
-private:
- QDeclarativeItemKeyFilter *m_next;
-};
-
-class QDeclarative1KeyNavigationAttachedPrivate : public QObjectPrivate
-{
-public:
- QDeclarative1KeyNavigationAttachedPrivate()
- : QObjectPrivate(),
- left(0), right(0), up(0), down(0), tab(0), backtab(0),
- leftSet(false), rightSet(false), upSet(false), downSet(false),
- tabSet(false), backtabSet(false) {}
-
- QDeclarativeItem *left;
- QDeclarativeItem *right;
- QDeclarativeItem *up;
- QDeclarativeItem *down;
- QDeclarativeItem *tab;
- QDeclarativeItem *backtab;
- bool leftSet : 1;
- bool rightSet : 1;
- bool upSet : 1;
- bool downSet : 1;
- bool tabSet : 1;
- bool backtabSet : 1;
-};
-
-class QDeclarative1KeyNavigationAttached : public QObject, public QDeclarativeItemKeyFilter
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QDeclarative1KeyNavigationAttached)
-
- Q_PROPERTY(QDeclarativeItem *left READ left WRITE setLeft NOTIFY leftChanged)
- Q_PROPERTY(QDeclarativeItem *right READ right WRITE setRight NOTIFY rightChanged)
- Q_PROPERTY(QDeclarativeItem *up READ up WRITE setUp NOTIFY upChanged)
- Q_PROPERTY(QDeclarativeItem *down READ down WRITE setDown NOTIFY downChanged)
- Q_PROPERTY(QDeclarativeItem *tab READ tab WRITE setTab NOTIFY tabChanged)
- Q_PROPERTY(QDeclarativeItem *backtab READ backtab WRITE setBacktab NOTIFY backtabChanged)
- Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
-
- Q_ENUMS(Priority)
-
-public:
- QDeclarative1KeyNavigationAttached(QObject * = 0);
-
- QDeclarativeItem *left() const;
- void setLeft(QDeclarativeItem *);
- QDeclarativeItem *right() const;
- void setRight(QDeclarativeItem *);
- QDeclarativeItem *up() const;
- void setUp(QDeclarativeItem *);
- QDeclarativeItem *down() const;
- void setDown(QDeclarativeItem *);
- QDeclarativeItem *tab() const;
- void setTab(QDeclarativeItem *);
- QDeclarativeItem *backtab() const;
- void setBacktab(QDeclarativeItem *);
-
- enum Priority { BeforeItem, AfterItem };
- Priority priority() const;
- void setPriority(Priority);
-
- static QDeclarative1KeyNavigationAttached *qmlAttachedProperties(QObject *);
-
-Q_SIGNALS:
- void leftChanged();
- void rightChanged();
- void upChanged();
- void downChanged();
- void tabChanged();
- void backtabChanged();
- void priorityChanged();
-
-private:
- virtual void keyPressed(QKeyEvent *event, bool post);
- virtual void keyReleased(QKeyEvent *event, bool post);
- void setFocusNavigation(QDeclarativeItem *currentItem, const char *dir);
-};
-
-class QDeclarative1LayoutMirroringAttached : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(bool enabled READ enabled WRITE setEnabled RESET resetEnabled NOTIFY enabledChanged)
- Q_PROPERTY(bool childrenInherit READ childrenInherit WRITE setChildrenInherit NOTIFY childrenInheritChanged)
-
-public:
- explicit QDeclarative1LayoutMirroringAttached(QObject *parent = 0);
-
- bool enabled() const;
- void setEnabled(bool);
- void resetEnabled();
-
- bool childrenInherit() const;
- void setChildrenInherit(bool);
-
- static QDeclarative1LayoutMirroringAttached *qmlAttachedProperties(QObject *);
-Q_SIGNALS:
- void enabledChanged();
- void childrenInheritChanged();
-private:
- friend class QDeclarativeItemPrivate;
- QDeclarativeItemPrivate *itemPrivate;
-};
-
-class QDeclarative1KeysAttachedPrivate : public QObjectPrivate
-{
-public:
- QDeclarative1KeysAttachedPrivate()
- : QObjectPrivate(), inPress(false), inRelease(false)
- , inIM(false), enabled(true), imeItem(0), item(0)
- {}
-
- bool isConnected(const char *signalName);
-
- QGraphicsItem *finalFocusProxy(QGraphicsItem *item) const
- {
- QGraphicsItem *fp;
- while ((fp = item->focusProxy()))
- item = fp;
- return item;
- }
-
- //loop detection
- bool inPress:1;
- bool inRelease:1;
- bool inIM:1;
-
- bool enabled : 1;
-
- QGraphicsItem *imeItem;
- QList<QDeclarativeItem *> targets;
- QDeclarativeItem *item;
-};
-
-class QDeclarative1KeysAttached : public QObject, public QDeclarativeItemKeyFilter
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QDeclarative1KeysAttached)
-
- Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged)
- Q_PROPERTY(QDeclarativeListProperty<QDeclarativeItem> forwardTo READ forwardTo)
- Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
-
- Q_ENUMS(Priority)
-
-public:
- QDeclarative1KeysAttached(QObject *parent=0);
- ~QDeclarative1KeysAttached();
-
- bool enabled() const { Q_D(const QDeclarative1KeysAttached); return d->enabled; }
- void setEnabled(bool enabled) {
- Q_D(QDeclarative1KeysAttached);
- if (enabled != d->enabled) {
- d->enabled = enabled;
- emit enabledChanged();
- }
- }
-
- enum Priority { BeforeItem, AfterItem};
- Priority priority() const;
- void setPriority(Priority);
-
- QDeclarativeListProperty<QDeclarativeItem> forwardTo() {
- Q_D(QDeclarative1KeysAttached);
- return QDeclarativeListProperty<QDeclarativeItem>(this, d->targets);
- }
-
- virtual void componentComplete();
-
- static QDeclarative1KeysAttached *qmlAttachedProperties(QObject *);
-
-Q_SIGNALS:
- void enabledChanged();
- void priorityChanged();
- void pressed(QDeclarative1KeyEvent *event);
- void released(QDeclarative1KeyEvent *event);
- void digit0Pressed(QDeclarative1KeyEvent *event);
- void digit1Pressed(QDeclarative1KeyEvent *event);
- void digit2Pressed(QDeclarative1KeyEvent *event);
- void digit3Pressed(QDeclarative1KeyEvent *event);
- void digit4Pressed(QDeclarative1KeyEvent *event);
- void digit5Pressed(QDeclarative1KeyEvent *event);
- void digit6Pressed(QDeclarative1KeyEvent *event);
- void digit7Pressed(QDeclarative1KeyEvent *event);
- void digit8Pressed(QDeclarative1KeyEvent *event);
- void digit9Pressed(QDeclarative1KeyEvent *event);
-
- void leftPressed(QDeclarative1KeyEvent *event);
- void rightPressed(QDeclarative1KeyEvent *event);
- void upPressed(QDeclarative1KeyEvent *event);
- void downPressed(QDeclarative1KeyEvent *event);
- void tabPressed(QDeclarative1KeyEvent *event);
- void backtabPressed(QDeclarative1KeyEvent *event);
-
- void asteriskPressed(QDeclarative1KeyEvent *event);
- void numberSignPressed(QDeclarative1KeyEvent *event);
- void escapePressed(QDeclarative1KeyEvent *event);
- void returnPressed(QDeclarative1KeyEvent *event);
- void enterPressed(QDeclarative1KeyEvent *event);
- void deletePressed(QDeclarative1KeyEvent *event);
- void spacePressed(QDeclarative1KeyEvent *event);
- void backPressed(QDeclarative1KeyEvent *event);
- void cancelPressed(QDeclarative1KeyEvent *event);
- void selectPressed(QDeclarative1KeyEvent *event);
- void yesPressed(QDeclarative1KeyEvent *event);
- void noPressed(QDeclarative1KeyEvent *event);
- void context1Pressed(QDeclarative1KeyEvent *event);
- void context2Pressed(QDeclarative1KeyEvent *event);
- void context3Pressed(QDeclarative1KeyEvent *event);
- void context4Pressed(QDeclarative1KeyEvent *event);
- void callPressed(QDeclarative1KeyEvent *event);
- void hangupPressed(QDeclarative1KeyEvent *event);
- void flipPressed(QDeclarative1KeyEvent *event);
- void menuPressed(QDeclarative1KeyEvent *event);
- void volumeUpPressed(QDeclarative1KeyEvent *event);
- void volumeDownPressed(QDeclarative1KeyEvent *event);
-
-private:
- virtual void keyPressed(QKeyEvent *event, bool post);
- virtual void keyReleased(QKeyEvent *event, bool post);
- virtual void inputMethodEvent(QInputMethodEvent *, bool post);
- virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
-
- const QByteArray keyToSignal(int key) {
- QByteArray keySignal;
- if (key >= Qt::Key_0 && key <= Qt::Key_9) {
- keySignal = "digit0Pressed";
- keySignal[5] = '0' + (key - Qt::Key_0);
- } else {
- int i = 0;
- while (sigMap[i].key && sigMap[i].key != key)
- ++i;
- keySignal = sigMap[i].sig;
- }
- return keySignal;
- }
-
- struct SigMap {
- int key;
- const char *sig;
- };
-
- static const SigMap sigMap[];
-};
-
-
-Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativeItemPrivate::ChangeTypes);
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1KeysAttached)
-QML_DECLARE_TYPEINFO(QDeclarative1KeysAttached, QML_HAS_ATTACHED_PROPERTIES)
-QML_DECLARE_TYPE(QDeclarative1KeyNavigationAttached)
-QML_DECLARE_TYPEINFO(QDeclarative1KeyNavigationAttached, QML_HAS_ATTACHED_PROPERTIES)
-QML_DECLARE_TYPE(QDeclarative1LayoutMirroringAttached)
-QML_DECLARE_TYPEINFO(QDeclarative1LayoutMirroringAttached, QML_HAS_ATTACHED_PROPERTIES)
-
-#endif // QDECLARATIVEITEM_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeitemchangelistener_p.h b/src/qtquick1/graphicsitems/qdeclarativeitemchangelistener_p.h
deleted file mode 100644
index ebffed6759..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeitemchangelistener_p.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEITEMCHANGELISTENER
-#define QDECLARATIVEITEMCHANGELISTENER
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <QtCore/qglobal.h>
-
-QT_BEGIN_NAMESPACE
-
-class QRectF;
-class QDeclarativeItem;
-class QDeclarative1AnchorsPrivate;
-class QDeclarativeItemChangeListener
-{
-public:
- virtual void itemGeometryChanged(QDeclarativeItem *, const QRectF &, const QRectF &) {}
- virtual void itemSiblingOrderChanged(QDeclarativeItem *) {}
- virtual void itemVisibilityChanged(QDeclarativeItem *) {}
- virtual void itemOpacityChanged(QDeclarativeItem *) {}
- virtual void itemDestroyed(QDeclarativeItem *) {}
- virtual QDeclarative1AnchorsPrivate *anchorPrivate() { return 0; }
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEITEMCHANGELISTENER
diff --git a/src/qtquick1/graphicsitems/qdeclarativeitemsmodule.cpp b/src/qtquick1/graphicsitems/qdeclarativeitemsmodule.cpp
deleted file mode 100644
index 697fe6b638..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeitemsmodule.cpp
+++ /dev/null
@@ -1,269 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeitemsmodule_p.h"
-
-#include <QtWidgets/qaction.h>
-#include <QtGui/qvalidator.h>
-#include <QtWidgets/qgraphicseffect.h>
-#include <QtWidgets/qgraphicsitem.h>
-
-#include "QtQuick1/private/qdeclarativeevents_p_p.h"
-#include "QtQuick1/private/qdeclarativescalegrid_p_p.h"
-#include "QtQuick1/private/qdeclarativeanimatedimage_p.h"
-#include "QtQuick1/private/qdeclarativeborderimage_p.h"
-#include "QtQuick1/private/qdeclarativepositioners_p.h"
-#include "QtQuick1/private/qdeclarativemousearea_p.h"
-#include "QtQuick1/private/qdeclarativeflickable_p.h"
-#include "QtQuick1/private/qdeclarativeflickable_p_p.h"
-#include "QtQuick1/private/qdeclarativeflipable_p.h"
-#include "QtQuick1/private/qdeclarativefocuspanel_p.h"
-#include "QtQuick1/private/qdeclarativefocusscope_p.h"
-#include "QtQuick1/private/qdeclarativegridview_p.h"
-#include "QtQuick1/private/qdeclarativeimage_p.h"
-#include "QtQuick1/private/qdeclarativeitem_p.h"
-#include "QtQuick1/private/qdeclarativelayoutitem_p.h"
-#include "QtQuick1/private/qdeclarativelistview_p.h"
-#include "QtQuick1/private/qdeclarativeloader_p.h"
-#include "QtQuick1/private/qdeclarativemousearea_p.h"
-#include "QtQuick1/private/qdeclarativepath_p.h"
-#include "QtQuick1/private/qdeclarativepathview_p.h"
-#include "QtQuick1/private/qdeclarativerectangle_p.h"
-#include "QtQuick1/private/qdeclarativerepeater_p.h"
-#include "QtQuick1/private/qdeclarativetranslate_p.h"
-#include "QtQuick1/private/qdeclarativetext_p.h"
-#include "QtQuick1/private/qdeclarativetextedit_p.h"
-#include "QtQuick1/private/qdeclarativetextinput_p.h"
-#include "QtQuick1/private/qdeclarativevisualitemmodel_p.h"
-#include "QtQuick1/private/qdeclarativegraphicswidget_p.h"
-#include "QtQuick1/private/qdeclarativeanchors_p.h"
-#include "QtQuick1/private/qdeclarativepincharea_p.h"
-#include "QtQuick1/private/qdeclarativeaccessibleattached_p.h"
-
-static QDeclarativePrivate::AutoParentResult qgraphicsobject_autoParent(QObject *obj, QObject *parent)
-{
- QGraphicsObject* gobj = qobject_cast<QGraphicsObject*>(obj);
- if (!gobj)
- return QDeclarativePrivate::IncompatibleObject;
-
- QGraphicsObject* gparent = qobject_cast<QGraphicsObject*>(parent);
- if (!gparent)
- return QDeclarativePrivate::IncompatibleParent;
-
- gobj->setParentItem(gparent);
- return QDeclarativePrivate::Parented;
-}
-
-void QDeclarative1ItemModule::defineModule(QDeclarativeQtQuick1Module::Module module)
-{
- QDeclarativePrivate::RegisterAutoParent autoparent = { 0, &qgraphicsobject_autoParent };
- QDeclarativePrivate::qmlregister(QDeclarativePrivate::AutoParentRegistration, &autoparent);
-
- qmlRegisterType<QDeclarative1Anchors>();
- qmlRegisterType<QDeclarative1KeyEvent>();
- qmlRegisterType<QDeclarative1MouseEvent>();
- qmlRegisterType<QGraphicsObject>();
- qmlRegisterType<QGraphicsTransform>();
- qmlRegisterType<QDeclarative1PathElement>();
- qmlRegisterType<QDeclarative1Curve>();
- qmlRegisterType<QDeclarative1ScaleGrid>();
-#ifndef QT_NO_VALIDATOR
- qmlRegisterType<QValidator>();
-#endif
- qmlRegisterType<QDeclarative1VisualModel>();
-#ifndef QT_NO_ACTION
- qmlRegisterType<QAction>();
-#endif
- qmlRegisterType<QDeclarative1Pen>();
- qmlRegisterType<QDeclarative1FlickableVisibleArea>();
-#ifndef QT_NO_GRAPHICSEFFECT
- qmlRegisterType<QGraphicsEffect>();
-#endif
-
- if (module == QDeclarativeQtQuick1Module::QtQuick1) {
-#ifdef QT_NO_MOVIE
- qmlRegisterTypeNotAvailable("QtQuick",1,0,"AnimatedImage",
- qApp->translate("QDeclarative1AnimatedImage","Qt was built without support for QMovie"));
-#else
- qmlRegisterType<QDeclarative1AnimatedImage>("QtQuick",1,0,"AnimatedImage");
-#endif
- qmlRegisterType<QDeclarative1BorderImage>("QtQuick",1,0,"BorderImage");
- qmlRegisterType<QDeclarative1Column>("QtQuick",1,0,"Column");
- qmlRegisterType<QDeclarative1Drag>("QtQuick",1,0,"Drag");
- qmlRegisterType<QDeclarative1Flickable>("QtQuick",1,0,"Flickable");
- qmlRegisterType<QDeclarative1Flipable>("QtQuick",1,0,"Flipable");
- qmlRegisterType<QDeclarative1Flow>("QtQuick",1,0,"Flow");
- qmlRegisterType<QDeclarative1FocusPanel>("QtQuick",1,0,"FocusPanel");
- qmlRegisterType<QDeclarative1FocusScope>("QtQuick",1,0,"FocusScope");
- qmlRegisterType<QDeclarative1Gradient>("QtQuick",1,0,"Gradient");
- qmlRegisterType<QDeclarative1GradientStop>("QtQuick",1,0,"GradientStop");
- qmlRegisterType<QDeclarative1Grid>("QtQuick",1,0,"Grid");
- qmlRegisterType<QDeclarative1GridView>("QtQuick",1,0,"GridView");
- qmlRegisterType<QDeclarative1Image>("QtQuick",1,0,"Image");
- qmlRegisterType<QDeclarativeItem>("QtQuick",1,0,"Item");
- qmlRegisterType<QDeclarative1LayoutItem>("QtQuick",1,0,"LayoutItem");
- qmlRegisterType<QDeclarative1ListView>("QtQuick",1,0,"ListView");
- qmlRegisterType<QDeclarative1Loader>("QtQuick",1,0,"Loader");
- qmlRegisterType<QDeclarative1MouseArea>("QtQuick",1,0,"MouseArea");
- qmlRegisterType<QDeclarative1Path>("QtQuick",1,0,"Path");
- qmlRegisterType<QDeclarative1PathAttribute>("QtQuick",1,0,"PathAttribute");
- qmlRegisterType<QDeclarative1PathCubic>("QtQuick",1,0,"PathCubic");
- qmlRegisterType<QDeclarative1PathLine>("QtQuick",1,0,"PathLine");
- qmlRegisterType<QDeclarative1PathPercent>("QtQuick",1,0,"PathPercent");
- qmlRegisterType<QDeclarative1PathQuad>("QtQuick",1,0,"PathQuad");
- qmlRegisterType<QDeclarative1PathView>("QtQuick",1,0,"PathView");
-#ifndef QT_NO_VALIDATOR
- qmlRegisterType<QIntValidator>("QtQuick",1,0,"IntValidator");
- qmlRegisterType<QDoubleValidator>("QtQuick",1,0,"DoubleValidator");
- qmlRegisterType<QRegExpValidator>("QtQuick",1,0,"RegExpValidator");
-#endif
- qmlRegisterType<QDeclarative1Rectangle>("QtQuick",1,0,"Rectangle");
- qmlRegisterType<QDeclarative1Repeater>("QtQuick",1,0,"Repeater");
- qmlRegisterType<QGraphicsRotation>("QtQuick",1,0,"Rotation");
- qmlRegisterType<QDeclarative1Row>("QtQuick",1,0,"Row");
- qmlRegisterType<QDeclarative1Translate>("QtQuick",1,0,"Translate");
- qmlRegisterType<QGraphicsScale>("QtQuick",1,0,"Scale");
- qmlRegisterType<QDeclarative1Text>("QtQuick",1,0,"Text");
- qmlRegisterType<QDeclarative1TextEdit>("QtQuick",1,0,"TextEdit");
-#ifndef QT_NO_LINEEDIT
- qmlRegisterType<QDeclarative1TextInput>("QtQuick",1,0,"TextInput");
-#endif
- qmlRegisterType<QDeclarative1ViewSection>("QtQuick",1,0,"ViewSection");
- qmlRegisterType<QDeclarative1VisualDataModel>("QtQuick",1,0,"VisualDataModel");
- qmlRegisterType<QDeclarative1VisualItemModel>("QtQuick",1,0,"VisualItemModel");
-
- qmlRegisterType<QGraphicsWidget>("QtQuick",1,0,"QGraphicsWidget");
- qmlRegisterExtendedType<QGraphicsWidget,QDeclarative1GraphicsWidget>("QtQuick",1,0,"QGraphicsWidget");
-
- qmlRegisterUncreatableType<QDeclarative1KeyNavigationAttached>("QtQuick",1,0,"KeyNavigation",QDeclarative1KeyNavigationAttached::tr("KeyNavigation is only available via attached properties"));
- qmlRegisterUncreatableType<QDeclarative1KeysAttached>("QtQuick",1,0,"Keys",QDeclarative1KeysAttached::tr("Keys is only available via attached properties"));
-
- // QtQuick 1.1 items
- qmlRegisterType<QDeclarative1PinchArea>("QtQuick",1,1,"PinchArea");
- qmlRegisterType<QDeclarative1Pinch>("QtQuick",1,1,"Pinch");
- qmlRegisterType<QDeclarative1PinchEvent>();
- qmlRegisterType<QDeclarativeItem,1>("QtQuick",1,1,"Item");
- qmlRegisterType<QDeclarative1MouseArea,1>("QtQuick",1,1,"MouseArea");
- qmlRegisterType<QDeclarative1Flickable,1>("QtQuick",1,1,"Flickable");
- qmlRegisterType<QDeclarative1ListView,1>("QtQuick",1,1,"ListView");
- qmlRegisterType<QDeclarative1GridView,1>("QtQuick",1,1,"GridView");
- qmlRegisterType<QDeclarative1Row,1>("QtQuick",1,1,"Row");
- qmlRegisterType<QDeclarative1Grid,1>("QtQuick",1,1,"Grid");
- qmlRegisterType<QDeclarative1Flow,1>("QtQuick",1,1,"Flow");
- qmlRegisterType<QDeclarative1Repeater,1>("QtQuick",1,1,"Repeater");
- qmlRegisterType<QDeclarative1Text,1>("QtQuick",1,1,"Text");
- qmlRegisterType<QDeclarative1TextEdit,1>("QtQuick",1,1,"TextEdit");
-#ifndef QT_NO_LINEEDIT
- qmlRegisterType<QDeclarative1TextInput,1>("QtQuick",1,1,"TextInput");
-#endif
- qmlRegisterRevision<QDeclarative1ImageBase,1>("QtQuick",1,1);
- qmlRegisterRevision<QDeclarative1ImplicitSizeItem,0>("QtQuick",1,0);
- qmlRegisterRevision<QDeclarative1ImplicitSizeItem,1>("QtQuick",1,1);
- qmlRegisterRevision<QDeclarative1ImplicitSizePaintedItem,0>("QtQuick",1,0);
- qmlRegisterRevision<QDeclarative1ImplicitSizePaintedItem,1>("QtQuick",1,1);
- qmlRegisterUncreatableType<QDeclarative1LayoutMirroringAttached>("QtQuick",1,1,"LayoutMirroring", QDeclarative1LayoutMirroringAttached::tr("LayoutMirroring is only available via attached properties"));
-#ifndef QT_NO_ACCESSIBILITY
- qmlRegisterUncreatableType<QDeclarativeAccessibleAttached>("QtQuick",1,0,"Accessible",QDeclarativeAccessibleAttached::tr("Accessible is only available via attached properties"));
- qmlRegisterUncreatableType<QDeclarativeAccessibleAttached>("QtQuick",1,1,"Accessible",QDeclarativeAccessibleAttached::tr("Accessible is only available via attached properties"));
-#endif
-
- } else if (module == QDeclarativeQtQuick1Module::Qt47) {
-#ifdef QT_NO_MOVIE
- qmlRegisterTypeNotAvailable("Qt",4,7,"AnimatedImage",
- qApp->translate("QDeclarative1AnimatedImage","Qt was built without support for QMovie"));
-#else
- qmlRegisterType<QDeclarative1AnimatedImage>("Qt",4,7,"AnimatedImage");
-#endif
- qmlRegisterType<QDeclarative1BorderImage>("Qt",4,7,"BorderImage");
- qmlRegisterType<QDeclarative1Column>("Qt",4,7,"Column");
- qmlRegisterType<QDeclarative1Drag>("Qt",4,7,"Drag");
- qmlRegisterType<QDeclarative1Flickable>("Qt",4,7,"Flickable");
- qmlRegisterType<QDeclarative1Flipable>("Qt",4,7,"Flipable");
- qmlRegisterType<QDeclarative1Flow>("Qt",4,7,"Flow");
- qmlRegisterType<QDeclarative1FocusPanel>("Qt",4,7,"FocusPanel");
- qmlRegisterType<QDeclarative1FocusScope>("Qt",4,7,"FocusScope");
- qmlRegisterType<QDeclarative1Gradient>("Qt",4,7,"Gradient");
- qmlRegisterType<QDeclarative1GradientStop>("Qt",4,7,"GradientStop");
- qmlRegisterType<QDeclarative1Grid>("Qt",4,7,"Grid");
- qmlRegisterType<QDeclarative1GridView>("Qt",4,7,"GridView");
- qmlRegisterType<QDeclarative1Image>("Qt",4,7,"Image");
- qmlRegisterType<QDeclarativeItem>("Qt",4,7,"Item");
- qmlRegisterType<QDeclarative1LayoutItem>("Qt",4,7,"LayoutItem");
- qmlRegisterType<QDeclarative1ListView>("Qt",4,7,"ListView");
- qmlRegisterType<QDeclarative1Loader>("Qt",4,7,"Loader");
- qmlRegisterType<QDeclarative1MouseArea>("Qt",4,7,"MouseArea");
- qmlRegisterType<QDeclarative1Path>("Qt",4,7,"Path");
- qmlRegisterType<QDeclarative1PathAttribute>("Qt",4,7,"PathAttribute");
- qmlRegisterType<QDeclarative1PathCubic>("Qt",4,7,"PathCubic");
- qmlRegisterType<QDeclarative1PathLine>("Qt",4,7,"PathLine");
- qmlRegisterType<QDeclarative1PathPercent>("Qt",4,7,"PathPercent");
- qmlRegisterType<QDeclarative1PathQuad>("Qt",4,7,"PathQuad");
- qmlRegisterType<QDeclarative1PathView>("Qt",4,7,"PathView");
-#ifndef QT_NO_VALIDATOR
- qmlRegisterType<QIntValidator>("Qt",4,7,"IntValidator");
- qmlRegisterType<QDoubleValidator>("Qt",4,7,"DoubleValidator");
- qmlRegisterType<QRegExpValidator>("Qt",4,7,"RegExpValidator");
-#endif
- qmlRegisterType<QDeclarative1Rectangle>("Qt",4,7,"Rectangle");
- qmlRegisterType<QDeclarative1Repeater>("Qt",4,7,"Repeater");
- qmlRegisterType<QGraphicsRotation>("Qt",4,7,"Rotation");
- qmlRegisterType<QDeclarative1Row>("Qt",4,7,"Row");
- qmlRegisterType<QDeclarative1Translate>("Qt",4,7,"Translate");
- qmlRegisterType<QGraphicsScale>("Qt",4,7,"Scale");
- qmlRegisterType<QDeclarative1Text>("Qt",4,7,"Text");
- qmlRegisterType<QDeclarative1TextEdit>("Qt",4,7,"TextEdit");
-#ifndef QT_NO_LINEEDIT
- qmlRegisterType<QDeclarative1TextInput>("Qt",4,7,"TextInput");
-#endif
- qmlRegisterType<QDeclarative1ViewSection>("Qt",4,7,"ViewSection");
- qmlRegisterType<QDeclarative1VisualDataModel>("Qt",4,7,"VisualDataModel");
- qmlRegisterType<QDeclarative1VisualItemModel>("Qt",4,7,"VisualItemModel");
-
- qmlRegisterType<QGraphicsWidget>("Qt",4,7,"QGraphicsWidget");
- qmlRegisterExtendedType<QGraphicsWidget,QDeclarative1GraphicsWidget>("Qt",4,7,"QGraphicsWidget");
-
- qmlRegisterUncreatableType<QDeclarative1KeyNavigationAttached>("Qt",4,7,"KeyNavigation",QDeclarative1KeyNavigationAttached::tr("KeyNavigation is only available via attached properties"));
- qmlRegisterUncreatableType<QDeclarative1KeysAttached>("Qt",4,7,"Keys",QDeclarative1KeysAttached::tr("Keys is only available via attached properties"));
- }
-}
-
-
-
diff --git a/src/qtquick1/graphicsitems/qdeclarativeitemsmodule_p.h b/src/qtquick1/graphicsitems/qdeclarativeitemsmodule_p.h
deleted file mode 100644
index 1155a38758..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeitemsmodule_p.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEITEMMODULE_H
-#define QDECLARATIVEITEMMODULE_H
-
-#include <QtDeclarative/qdeclarative.h>
-#include "../qtquick1_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1ItemModule
-{
-public:
- static void defineModule(QDeclarativeQtQuick1Module::Module module);
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEITEMMODULE_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativelayoutitem.cpp b/src/qtquick1/graphicsitems/qdeclarativelayoutitem.cpp
deleted file mode 100644
index d55aaa7c5c..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativelayoutitem.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "private/qdeclarativelayoutitem_p.h"
-
-#include <QDebug>
-
-#include <limits.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \qmlclass LayoutItem QDeclarative1LayoutItem
- \inqmlmodule QtQuick 1
- \ingroup qml-utility-elements
- \since QtQuick 1.0
- \brief The LayoutItem element allows declarative UI elements to be placed inside Qt's Graphics View layouts.
-
- LayoutItem is a variant of \l Item with additional size hint properties. These properties provide the size hints
- necessary for items to work in conjunction with Qt \l{Graphics View Framework}{Graphics View} layout classes
- such as QGraphicsLinearLayout and QGraphicsGridLayout. The Qt layout mechanisms will resize the LayoutItem as appropriate,
- taking its size hints into account, and you can propagate this to the other elements in your UI via anchors and bindings.
-
- This is a QGraphicsLayoutItem subclass, and its properties merely expose the QGraphicsLayoutItem functionality to QML.
-
- The \l{declarative/cppextensions/qgraphicslayouts/layoutitem}{LayoutItem example}
- demonstrates how a LayoutItem can be used within a \l{Graphics View Framework}{Graphics View}
- scene.
-*/
-
-/*!
- \qmlproperty QSizeF QtQuick1::LayoutItem::maximumSize
-
- The maximumSize property can be set to specify the maximum desired size of this LayoutItem
-*/
-
-/*!
- \qmlproperty QSizeF QtQuick1::LayoutItem::minimumSize
-
- The minimumSize property can be set to specify the minimum desired size of this LayoutItem
-*/
-
-/*!
- \qmlproperty QSizeF QtQuick1::LayoutItem::preferredSize
-
- The preferredSize property can be set to specify the preferred size of this LayoutItem
-*/
-
-QDeclarative1LayoutItem::QDeclarative1LayoutItem(QDeclarativeItem* parent)
- : QDeclarativeItem(parent), m_maximumSize(INT_MAX,INT_MAX), m_minimumSize(0,0), m_preferredSize(0,0)
-{
- setGraphicsItem(this);
-}
-
-void QDeclarative1LayoutItem::setGeometry(const QRectF & rect)
-{
- setX(rect.x());
- setY(rect.y());
- setWidth(rect.width());
- setHeight(rect.height());
-}
-
-QSizeF QDeclarative1LayoutItem::sizeHint(Qt::SizeHint w, const QSizeF &constraint) const
-{
- Q_UNUSED(constraint);
- if(w == Qt::MinimumSize){
- return m_minimumSize;
- }else if(w == Qt::MaximumSize){
- return m_maximumSize;
- }else{
- return m_preferredSize;
- }
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativelayoutitem_p.h b/src/qtquick1/graphicsitems/qdeclarativelayoutitem_p.h
deleted file mode 100644
index f0823d50de..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativelayoutitem_p.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEGRAPHICSLAYOUTITEM_H
-#define QDECLARATIVEGRAPHICSLAYOUTITEM_H
-#include "qdeclarativeitem.h"
-
-#include <QGraphicsLayoutItem>
-#include <QSizeF>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1LayoutItem : public QDeclarativeItem, public QGraphicsLayoutItem
-{
- Q_OBJECT
- Q_INTERFACES(QGraphicsLayoutItem)
- Q_PROPERTY(QSizeF maximumSize READ maximumSize WRITE setMaximumSize NOTIFY maximumSizeChanged)
- Q_PROPERTY(QSizeF minimumSize READ minimumSize WRITE setMinimumSize NOTIFY minimumSizeChanged)
- Q_PROPERTY(QSizeF preferredSize READ preferredSize WRITE setPreferredSize NOTIFY preferredSizeChanged)
-public:
- QDeclarative1LayoutItem(QDeclarativeItem* parent=0);
-
- QSizeF maximumSize() const { return m_maximumSize; }
- void setMaximumSize(const QSizeF &s) { if(s==m_maximumSize) return; m_maximumSize = s; emit maximumSizeChanged(); }
-
- QSizeF minimumSize() const { return m_minimumSize; }
- void setMinimumSize(const QSizeF &s) { if(s==m_minimumSize) return; m_minimumSize = s; emit minimumSizeChanged(); }
-
- QSizeF preferredSize() const { return m_preferredSize; }
- void setPreferredSize(const QSizeF &s) { if(s==m_preferredSize) return; m_preferredSize = s; emit preferredSizeChanged(); }
-
- virtual void setGeometry(const QRectF & rect);
-protected:
- virtual QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
-
-Q_SIGNALS:
- void maximumSizeChanged();
- void minimumSizeChanged();
- void preferredSizeChanged();
-
-private:
- QSizeF m_maximumSize;
- QSizeF m_minimumSize;
- QSizeF m_preferredSize;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1LayoutItem)
-
-QT_END_HEADER
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativelistview.cpp b/src/qtquick1/graphicsitems/qdeclarativelistview.cpp
deleted file mode 100644
index c625fbd965..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativelistview.cpp
+++ /dev/null
@@ -1,3645 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativelistview_p.h"
-
-#include "QtQuick1/private/qdeclarativeflickable_p_p.h"
-#include "QtQuick1/private/qdeclarativevisualitemmodel_p.h"
-
-#include "QtQuick1/private/qdeclarativesmoothedanimation_p_p.h"
-#include <QtDeclarative/qdeclarativeexpression.h>
-#include <QtDeclarative/qdeclarativeengine.h>
-#include <QtDeclarative/private/qdeclarativeguard_p.h>
-#include <QtDeclarative/qdeclarativeinfo.h>
-
-#include <qmath.h>
-#include <QKeyEvent>
-#include "qplatformdefs.h"
-
-QT_BEGIN_NAMESPACE
-
-#ifndef QML_FLICK_SNAPONETHRESHOLD
-#define QML_FLICK_SNAPONETHRESHOLD 30
-#endif
-
-void QDeclarative1ViewSection::setProperty(const QString &property)
-{
- if (property != m_property) {
- m_property = property;
- emit propertyChanged();
- }
-}
-
-void QDeclarative1ViewSection::setCriteria(QDeclarative1ViewSection::SectionCriteria criteria)
-{
- if (criteria != m_criteria) {
- m_criteria = criteria;
- emit criteriaChanged();
- }
-}
-
-void QDeclarative1ViewSection::setDelegate(QDeclarativeComponent *delegate)
-{
- if (delegate != m_delegate) {
- m_delegate = delegate;
- emit delegateChanged();
- }
-}
-
-QString QDeclarative1ViewSection::sectionString(const QString &value)
-{
- if (m_criteria == FirstCharacter)
- return value.isEmpty() ? QString() : value.at(0);
- else
- return value;
-}
-
-//----------------------------------------------------------------------------
-
-class FxListItem1
-{
-public:
- FxListItem1(QDeclarativeItem *i, QDeclarative1ListView *v) : item(i), section(0), view(v) {
- attached = static_cast<QDeclarative1ListViewAttached*>(qmlAttachedPropertiesObject<QDeclarative1ListView>(item));
- if (attached)
- attached->setView(view);
- }
- ~FxListItem1() {}
- qreal position() const {
- if (section) {
- if (view->orientation() == QDeclarative1ListView::Vertical)
- return section->y();
- else
- return (view->effectiveLayoutDirection() == Qt::RightToLeft ? -section->width()-section->x() : section->x());
- } else {
- return itemPosition();
- }
- }
-
- qreal itemPosition() const {
- if (view->orientation() == QDeclarative1ListView::Vertical)
- return item->y();
- else
- return (view->effectiveLayoutDirection() == Qt::RightToLeft ? -item->width()-item->x() : item->x());
- }
- qreal size() const {
- if (section)
- return (view->orientation() == QDeclarative1ListView::Vertical ? item->height()+section->height() : item->width()+section->width());
- else
- return (view->orientation() == QDeclarative1ListView::Vertical ? item->height() : item->width());
- }
- qreal itemSize() const {
- return (view->orientation() == QDeclarative1ListView::Vertical ? item->height() : item->width());
- }
- qreal sectionSize() const {
- if (section)
- return (view->orientation() == QDeclarative1ListView::Vertical ? section->height() : section->width());
- return 0.0;
- }
- qreal endPosition() const {
- if (view->orientation() == QDeclarative1ListView::Vertical) {
- return item->y() + (item->height() >= 1.0 ? item->height() : 1) - 1;
- } else {
- return (view->effectiveLayoutDirection() == Qt::RightToLeft
- ? -item->width()-item->x() + (item->width() >= 1.0 ? item->width() : 1)
- : item->x() + (item->width() >= 1.0 ? item->width() : 1)) - 1;
- }
- }
- void setPosition(qreal pos) {
- if (view->orientation() == QDeclarative1ListView::Vertical) {
- if (section) {
- section->setY(pos);
- pos += section->height();
- }
- item->setY(pos);
- } else {
- if (view->effectiveLayoutDirection() == Qt::RightToLeft) {
- if (section) {
- section->setX(-section->width()-pos);
- pos += section->width();
- }
- item->setX(-item->width()-pos);
- } else {
- if (section) {
- section->setX(pos);
- pos += section->width();
- }
- item->setX(pos);
- }
- }
- }
- void setSize(qreal size) {
- if (view->orientation() == QDeclarative1ListView::Vertical)
- item->setHeight(size);
- else
- item->setWidth(size);
- }
- bool contains(qreal x, qreal y) const {
- return (x >= item->x() && x < item->x() + item->width() &&
- y >= item->y() && y < item->y() + item->height());
- }
-
- QDeclarativeItem *item;
- QDeclarativeItem *section;
- QDeclarative1ListView *view;
- QDeclarative1ListViewAttached *attached;
- int index;
-};
-
-//----------------------------------------------------------------------------
-
-class QDeclarative1ListViewPrivate : public QDeclarative1FlickablePrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1ListView)
-
-public:
- QDeclarative1ListViewPrivate()
- : currentItem(0), orient(QDeclarative1ListView::Vertical), layoutDirection(Qt::LeftToRight)
- , visiblePos(0), visibleIndex(0)
- , averageSize(100.0), currentIndex(-1), requestedIndex(-1)
- , itemCount(0), highlightRangeStart(0), highlightRangeEnd(0)
- , highlightRangeStartValid(false), highlightRangeEndValid(false)
- , highlightComponent(0), highlight(0), trackedItem(0)
- , moveReason(Other), buffer(0), highlightPosAnimator(0), highlightSizeAnimator(0)
- , sectionCriteria(0), spacing(0.0)
- , highlightMoveSpeed(400), highlightMoveDuration(-1)
- , highlightResizeSpeed(400), highlightResizeDuration(-1), highlightRange(QDeclarative1ListView::NoHighlightRange)
- , snapMode(QDeclarative1ListView::NoSnap), overshootDist(0.0)
- , footerComponent(0), footer(0), headerComponent(0), header(0)
- , bufferMode(BufferBefore | BufferAfter)
- , ownModel(false), wrap(false), autoHighlight(true), haveHighlightRange(false)
- , correctFlick(false), inFlickCorrection(false), lazyRelease(false)
- , deferredRelease(false), layoutScheduled(false), currentIndexCleared(false)
- , inViewportMoved(false)
- , minExtentDirty(true), maxExtentDirty(true)
- {}
-
- void init();
- void clear();
- FxListItem1 *createItem(int modelIndex);
- void releaseItem(FxListItem1 *item);
-
- FxListItem1 *visibleItem(int modelIndex) const {
- if (modelIndex >= visibleIndex && modelIndex < visibleIndex + visibleItems.count()) {
- for (int i = modelIndex - visibleIndex; i < visibleItems.count(); ++i) {
- FxListItem1 *item = visibleItems.at(i);
- if (item->index == modelIndex)
- return item;
- }
- }
- return 0;
- }
-
- FxListItem1 *firstVisibleItem() const {
- const qreal pos = isRightToLeft() ? -position()-size() : position();
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxListItem1 *item = visibleItems.at(i);
- if (item->index != -1 && item->endPosition() > pos)
- return item;
- }
- return visibleItems.count() ? visibleItems.first() : 0;
- }
-
- // Returns the item before modelIndex, if created.
- // May return an item marked for removal.
- FxListItem1 *itemBefore(int modelIndex) const {
- if (modelIndex < visibleIndex)
- return 0;
- int idx = 1;
- int lastIndex = -1;
- while (idx < visibleItems.count()) {
- FxListItem1 *item = visibleItems.at(idx);
- if (item->index != -1)
- lastIndex = item->index;
- if (item->index == modelIndex)
- return visibleItems.at(idx-1);
- ++idx;
- }
- if (lastIndex == modelIndex-1)
- return visibleItems.last();
- return 0;
- }
-
- void regenerate() {
- Q_Q(QDeclarative1ListView);
- if (q->isComponentComplete()) {
- if (header) {
- if (q->scene())
- q->scene()->removeItem(header->item);
- header->item->deleteLater();
- delete header;
- header = 0;
- }
- if (footer) {
- if (q->scene())
- q->scene()->removeItem(footer->item);
- footer->item->deleteLater();
- delete footer;
- footer = 0;
- }
- updateHeader();
- updateFooter();
- clear();
- setPosition(0);
- q->refill();
- updateCurrent(currentIndex);
- }
- }
-
- void mirrorChange() {
- Q_Q(QDeclarative1ListView);
- regenerate();
- emit q->effectiveLayoutDirectionChanged();
- }
-
- bool isRightToLeft() const {
- Q_Q(const QDeclarative1ListView);
- return orient == QDeclarative1ListView::Horizontal && q->effectiveLayoutDirection() == Qt::RightToLeft;
- }
-
- qreal position() const {
- Q_Q(const QDeclarative1ListView);
- return orient == QDeclarative1ListView::Vertical ? q->contentY() : q->contentX();
- }
-
- void setPosition(qreal pos) {
- Q_Q(QDeclarative1ListView);
- if (orient == QDeclarative1ListView::Vertical) {
- q->QDeclarative1Flickable::setContentY(pos);
- } else {
- if (isRightToLeft())
- q->QDeclarative1Flickable::setContentX(-pos-size());
- else
- q->QDeclarative1Flickable::setContentX(pos);
- }
- }
- qreal size() const {
- Q_Q(const QDeclarative1ListView);
- return orient == QDeclarative1ListView::Vertical ? q->height() : q->width();
- }
-
- qreal originPosition() const {
- qreal pos = 0;
- if (!visibleItems.isEmpty()) {
- pos = (*visibleItems.constBegin())->position();
- if (visibleIndex > 0)
- pos -= visibleIndex * (averageSize + spacing);
- }
- return pos;
- }
-
- qreal lastPosition() const {
- qreal pos = 0;
- if (!visibleItems.isEmpty()) {
- int invisibleCount = visibleItems.count() - visibleIndex;
- for (int i = visibleItems.count()-1; i >= 0; --i) {
- if (visibleItems.at(i)->index != -1) {
- invisibleCount = model->count() - visibleItems.at(i)->index - 1;
- break;
- }
- }
- pos = (*(--visibleItems.constEnd()))->endPosition() + invisibleCount * (averageSize + spacing);
- } else if (model && model->count()) {
- pos = model->count() * averageSize + (model->count()-1) * spacing;
- }
- return pos;
- }
-
- qreal startPosition() const {
- return isRightToLeft() ? -lastPosition()-1 : originPosition();
- }
-
- qreal endPosition() const {
- return isRightToLeft() ? -originPosition()-1 : lastPosition();
- }
-
- qreal positionAt(int modelIndex) const {
- if (FxListItem1 *item = visibleItem(modelIndex))
- return item->position();
- if (!visibleItems.isEmpty()) {
- if (modelIndex < visibleIndex) {
- int count = visibleIndex - modelIndex;
- qreal cs = 0;
- if (modelIndex == currentIndex && currentItem) {
- cs = currentItem->size() + spacing;
- --count;
- }
- return (*visibleItems.constBegin())->position() - count * (averageSize + spacing) - cs;
- } else {
- int idx = visibleItems.count() - 1;
- while (idx >= 0 && visibleItems.at(idx)->index == -1)
- --idx;
- if (idx < 0)
- idx = visibleIndex;
- else
- idx = visibleItems.at(idx)->index;
- int count = modelIndex - idx - 1;
-
- return (*(--visibleItems.constEnd()))->endPosition() + spacing + count * (averageSize + spacing) + 1;
- }
- }
- return 0;
- }
-
- qreal endPositionAt(int modelIndex) const {
- if (FxListItem1 *item = visibleItem(modelIndex))
- return item->endPosition();
- if (!visibleItems.isEmpty()) {
- if (modelIndex < visibleIndex) {
- int count = visibleIndex - modelIndex;
- return (*visibleItems.constBegin())->position() - (count - 1) * (averageSize + spacing) - spacing - 1;
- } else {
- int idx = visibleItems.count() - 1;
- while (idx >= 0 && visibleItems.at(idx)->index == -1)
- --idx;
- if (idx < 0)
- idx = visibleIndex;
- else
- idx = visibleItems.at(idx)->index;
- int count = modelIndex - idx - 1;
- return (*(--visibleItems.constEnd()))->endPosition() + count * (averageSize + spacing);
- }
- }
- return 0;
- }
-
- QString sectionAt(int modelIndex) {
- if (FxListItem1 *item = visibleItem(modelIndex))
- return item->attached->section();
-
- QString section;
- if (sectionCriteria) {
- QString propValue = model->stringValue(modelIndex, sectionCriteria->property());
- section = sectionCriteria->sectionString(propValue);
- }
-
- return section;
- }
-
- bool isValid() const {
- return model && model->count() && model->isValid();
- }
-
- qreal snapPosAt(qreal pos) {
- if (FxListItem1 *snapItem = snapItemAt(pos))
- return snapItem->position();
- if (visibleItems.count()) {
- qreal firstPos = visibleItems.first()->position();
- qreal endPos = visibleItems.last()->position();
- if (pos < firstPos) {
- return firstPos - qRound((firstPos - pos) / averageSize) * averageSize;
- } else if (pos > endPos)
- return endPos + qRound((pos - endPos) / averageSize) * averageSize;
- }
- return qRound((pos - originPosition()) / averageSize) * averageSize + originPosition();
- }
-
- FxListItem1 *snapItemAt(qreal pos) {
- FxListItem1 *snapItem = 0;
- qreal prevItemSize = 0;
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxListItem1 *item = visibleItems[i];
- if (item->index == -1)
- continue;
- qreal itemTop = item->position();
- if (highlight && itemTop >= pos && item->endPosition() <= pos + highlight->size() - 1)
- return item;
- if (itemTop+item->size()/2 >= pos && itemTop-prevItemSize/2 < pos)
- snapItem = item;
- prevItemSize = item->size();
- }
- return snapItem;
- }
-
- int lastVisibleIndex() const {
- int lastIndex = -1;
- for (int i = visibleItems.count()-1; i >= 0; --i) {
- FxListItem1 *listItem = visibleItems.at(i);
- if (listItem->index != -1) {
- lastIndex = listItem->index;
- break;
- }
- }
- return lastIndex;
- }
-
- // map a model index to visibleItems index.
- int mapFromModel(int modelIndex) const {
- if (modelIndex < visibleIndex || modelIndex >= visibleIndex + visibleItems.count())
- return -1;
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxListItem1 *listItem = visibleItems.at(i);
- if (listItem->index == modelIndex)
- return i;
- if (listItem->index > modelIndex)
- return -1;
- }
- return -1; // Not in visibleList
- }
-
- void updateViewport() {
- Q_Q(QDeclarative1ListView);
- if (orient == QDeclarative1ListView::Vertical) {
- q->setContentHeight(endPosition() - startPosition() + 1);
- } else {
- q->setContentWidth(endPosition() - startPosition() + 1);
- }
- }
-
- void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) {
- Q_Q(QDeclarative1ListView);
- QDeclarative1FlickablePrivate::itemGeometryChanged(item, newGeometry, oldGeometry);
- if (!q->isComponentComplete())
- return;
- if (item != contentItem && (!highlight || item != highlight->item)) {
- if ((orient == QDeclarative1ListView::Vertical && newGeometry.height() != oldGeometry.height())
- || (orient == QDeclarative1ListView::Horizontal && newGeometry.width() != oldGeometry.width())) {
- scheduleLayout();
- }
- }
- if ((header && header->item == item) || (footer && footer->item == item)) {
- if (header)
- updateHeader();
- if (footer)
- updateFooter();
- }
- if (currentItem && currentItem->item == item)
- updateHighlight();
- if (trackedItem && trackedItem->item == item)
- q->trackedPositionChanged();
- }
-
- // for debugging only
- void checkVisible() const {
- int skip = 0;
- for (int i = 0; i < visibleItems.count(); ++i) {
- FxListItem1 *listItem = visibleItems.at(i);
- if (listItem->index == -1) {
- ++skip;
- } else if (listItem->index != visibleIndex + i - skip) {
- qFatal("index %d %d %d", visibleIndex, i, listItem->index);
- }
- }
- }
-
- void refill(qreal from, qreal to, bool doBuffer = false);
- void scheduleLayout();
- void layout();
- void updateUnrequestedIndexes();
- void updateUnrequestedPositions();
- void updateTrackedItem();
- void createHighlight();
- void updateHighlight();
- void createSection(FxListItem1 *);
- void updateSections();
- void updateCurrentSection();
- void updateCurrent(int);
- void updateAverage();
- void updateHeader();
- void updateFooter();
- void fixupPosition();
- void positionViewAtIndex(int index, int mode);
- virtual void fixup(AxisData &data, qreal minExtent, qreal maxExtent);
- virtual void flick(QDeclarative1FlickablePrivate::AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
- QDeclarative1TimeLineCallback::Callback fixupCallback, qreal velocity);
-
- QDeclarativeGuard<QDeclarative1VisualModel> model;
- QVariant modelVariant;
- QList<FxListItem1*> visibleItems;
- QHash<QDeclarativeItem*,int> unrequestedItems;
- FxListItem1 *currentItem;
- QDeclarative1ListView::Orientation orient;
- Qt::LayoutDirection layoutDirection;
- qreal visiblePos;
- int visibleIndex;
- qreal averageSize;
- int currentIndex;
- int requestedIndex;
- int itemCount;
- qreal highlightRangeStart;
- qreal highlightRangeEnd;
- bool highlightRangeStartValid;
- bool highlightRangeEndValid;
- QDeclarativeComponent *highlightComponent;
- FxListItem1 *highlight;
- FxListItem1 *trackedItem;
- enum MovementReason { Other, SetIndex, Mouse };
- MovementReason moveReason;
- int buffer;
- QSmoothedAnimation_1 *highlightPosAnimator;
- QSmoothedAnimation_1 *highlightSizeAnimator;
- QDeclarative1ViewSection *sectionCriteria;
- QString currentSection;
- static const int sectionCacheSize = 4;
- QDeclarativeItem *sectionCache[sectionCacheSize];
- qreal spacing;
- qreal highlightMoveSpeed;
- int highlightMoveDuration;
- qreal highlightResizeSpeed;
- int highlightResizeDuration;
- QDeclarative1ListView::HighlightRangeMode highlightRange;
- QDeclarative1ListView::SnapMode snapMode;
- qreal overshootDist;
- QDeclarativeComponent *footerComponent;
- FxListItem1 *footer;
- QDeclarativeComponent *headerComponent;
- FxListItem1 *header;
- enum BufferMode { NoBuffer = 0x00, BufferBefore = 0x01, BufferAfter = 0x02 };
- int bufferMode;
- mutable qreal minExtent;
- mutable qreal maxExtent;
-
- bool ownModel : 1;
- bool wrap : 1;
- bool autoHighlight : 1;
- bool haveHighlightRange : 1;
- bool correctFlick : 1;
- bool inFlickCorrection : 1;
- bool lazyRelease : 1;
- bool deferredRelease : 1;
- bool layoutScheduled : 1;
- bool currentIndexCleared : 1;
- bool inViewportMoved : 1;
- mutable bool minExtentDirty : 1;
- mutable bool maxExtentDirty : 1;
-};
-
-void QDeclarative1ListViewPrivate::init()
-{
- Q_Q(QDeclarative1ListView);
- q->setFlag(QGraphicsItem::ItemIsFocusScope);
- addItemChangeListener(this, Geometry);
- QObject::connect(q, SIGNAL(movementEnded()), q, SLOT(animStopped()));
- q->setFlickableDirection(QDeclarative1Flickable::VerticalFlick);
- ::memset(sectionCache, 0, sizeof(QDeclarativeItem*) * sectionCacheSize);
-}
-
-void QDeclarative1ListViewPrivate::clear()
-{
- timeline.clear();
- for (int i = 0; i < visibleItems.count(); ++i)
- releaseItem(visibleItems.at(i));
- visibleItems.clear();
- for (int i = 0; i < sectionCacheSize; ++i) {
- delete sectionCache[i];
- sectionCache[i] = 0;
- }
- visiblePos = header ? header->size() : 0;
- visibleIndex = 0;
- releaseItem(currentItem);
- currentItem = 0;
- createHighlight();
- trackedItem = 0;
- minExtentDirty = true;
- maxExtentDirty = true;
- itemCount = 0;
-}
-
-FxListItem1 *QDeclarative1ListViewPrivate::createItem(int modelIndex)
-{
- Q_Q(QDeclarative1ListView);
- // create object
- requestedIndex = modelIndex;
- FxListItem1 *listItem = 0;
- if (QDeclarativeItem *item = model->item(modelIndex, false)) {
- listItem = new FxListItem1(item, q);
- listItem->index = modelIndex;
- // initialise attached properties
- if (sectionCriteria) {
- QString propValue = model->stringValue(modelIndex, sectionCriteria->property());
- listItem->attached->m_section = sectionCriteria->sectionString(propValue);
- if (modelIndex > 0) {
- if (FxListItem1 *item = itemBefore(modelIndex))
- listItem->attached->m_prevSection = item->attached->section();
- else
- listItem->attached->m_prevSection = sectionAt(modelIndex-1);
- }
- if (modelIndex < model->count()-1) {
- if (FxListItem1 *item = visibleItem(modelIndex+1))
- listItem->attached->m_nextSection = item->attached->section();
- else
- listItem->attached->m_nextSection = sectionAt(modelIndex+1);
- }
- }
- if (model->completePending()) {
- // complete
- listItem->item->setZValue(1);
- listItem->item->setParentItem(q->contentItem());
- model->completeItem();
- } else {
- listItem->item->setParentItem(q->contentItem());
- }
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
- itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- if (sectionCriteria && sectionCriteria->delegate()) {
- if (listItem->attached->m_prevSection != listItem->attached->m_section)
- createSection(listItem);
- }
- unrequestedItems.remove(listItem->item);
- }
- requestedIndex = -1;
-
- return listItem;
-}
-
-void QDeclarative1ListViewPrivate::releaseItem(FxListItem1 *item)
-{
- Q_Q(QDeclarative1ListView);
- if (!item || !model)
- return;
- if (trackedItem == item)
- trackedItem = 0;
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item->item));
- itemPrivate->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- if (model->release(item->item) == 0) {
- // item was not destroyed, and we no longer reference it.
- unrequestedItems.insert(item->item, model->indexOf(item->item, q));
- }
- if (item->section) {
- int i = 0;
- do {
- if (!sectionCache[i]) {
- sectionCache[i] = item->section;
- sectionCache[i]->setVisible(false);
- item->section = 0;
- break;
- }
- ++i;
- } while (i < sectionCacheSize);
- delete item->section;
- }
- delete item;
-}
-
-void QDeclarative1ListViewPrivate::refill(qreal from, qreal to, bool doBuffer)
-{
- Q_Q(QDeclarative1ListView);
- if (!isValid() || !q->isComponentComplete())
- return;
- itemCount = model->count();
- qreal bufferFrom = from - buffer;
- qreal bufferTo = to + buffer;
- qreal fillFrom = from;
- qreal fillTo = to;
- if (doBuffer && (bufferMode & BufferAfter))
- fillTo = bufferTo;
- if (doBuffer && (bufferMode & BufferBefore))
- fillFrom = bufferFrom;
-
- bool haveValidItems = false;
- int modelIndex = visibleIndex;
- qreal itemEnd = visiblePos-1;
- if (!visibleItems.isEmpty()) {
- visiblePos = (*visibleItems.constBegin())->position();
- itemEnd = (*(--visibleItems.constEnd()))->endPosition() + spacing;
- int i = visibleItems.count() - 1;
- while (i > 0 && visibleItems.at(i)->index == -1)
- --i;
- if (visibleItems.at(i)->index != -1) {
- haveValidItems = true;
- modelIndex = visibleItems.at(i)->index + 1;
- }
- }
-
- if (haveValidItems && (fillFrom > itemEnd+averageSize+spacing
- || fillTo < visiblePos - averageSize - spacing)) {
- // We've jumped more than a page. Estimate which items are now
- // visible and fill from there.
- int count = (fillFrom - itemEnd) / (averageSize + spacing);
- for (int i = 0; i < visibleItems.count(); ++i)
- releaseItem(visibleItems.at(i));
- visibleItems.clear();
- modelIndex += count;
- if (modelIndex >= model->count()) {
- count -= modelIndex - model->count() + 1;
- modelIndex = model->count() - 1;
- } else if (modelIndex < 0) {
- count -= modelIndex;
- modelIndex = 0;
- }
- visibleIndex = modelIndex;
- visiblePos = itemEnd + count * (averageSize + spacing) + 1;
- itemEnd = visiblePos-1;
- }
-
- bool changed = false;
- FxListItem1 *item = 0;
- qreal pos = itemEnd + 1;
- while (modelIndex < model->count() && pos <= fillTo) {
-// qDebug() << "refill: append item" << modelIndex << "pos" << pos;
- if (!(item = createItem(modelIndex)))
- break;
- item->setPosition(pos);
- pos += item->size() + spacing;
- visibleItems.append(item);
- ++modelIndex;
- changed = true;
- if (doBuffer) // never buffer more than one item per frame
- break;
- }
- while (visibleIndex > 0 && visibleIndex <= model->count() && visiblePos-1 >= fillFrom) {
-// qDebug() << "refill: prepend item" << visibleIndex-1 << "current top pos" << visiblePos;
- if (!(item = createItem(visibleIndex-1)))
- break;
- --visibleIndex;
- visiblePos -= item->size() + spacing;
- item->setPosition(visiblePos);
- visibleItems.prepend(item);
- changed = true;
- if (doBuffer) // never buffer more than one item per frame
- break;
- }
-
- if (!lazyRelease || !changed || deferredRelease) { // avoid destroying items in the same frame that we create
- while (visibleItems.count() > 1 && (item = visibleItems.first()) && item->endPosition() < bufferFrom) {
- if (item->attached->delayRemove())
- break;
-// qDebug() << "refill: remove first" << visibleIndex << "top end pos" << item->endPosition();
- if (item->index != -1)
- visibleIndex++;
- visibleItems.removeFirst();
- releaseItem(item);
- changed = true;
- }
- while (visibleItems.count() > 1 && (item = visibleItems.last()) && item->position() > bufferTo) {
- if (item->attached->delayRemove())
- break;
-// qDebug() << "refill: remove last" << visibleIndex+visibleItems.count()-1 << item->position();
- visibleItems.removeLast();
- releaseItem(item);
- changed = true;
- }
- deferredRelease = false;
- } else {
- deferredRelease = true;
- }
- if (changed) {
- minExtentDirty = true;
- maxExtentDirty = true;
- if (visibleItems.count())
- visiblePos = (*visibleItems.constBegin())->position();
- updateAverage();
- if (currentIndex >= 0 && currentItem && !visibleItem(currentIndex)) {
- currentItem->setPosition(positionAt(currentIndex));
- updateHighlight();
- }
-
- if (sectionCriteria)
- updateCurrentSection();
- if (header)
- updateHeader();
- if (footer)
- updateFooter();
- updateViewport();
- updateUnrequestedPositions();
- } else if (!doBuffer && buffer && bufferMode != NoBuffer) {
- refill(from, to, true);
- }
- lazyRelease = false;
-}
-
-void QDeclarative1ListViewPrivate::scheduleLayout()
-{
- Q_Q(QDeclarative1ListView);
- if (!layoutScheduled) {
- layoutScheduled = true;
- QCoreApplication::postEvent(q, new QEvent(QEvent::User), Qt::HighEventPriority);
- }
-}
-
-void QDeclarative1ListViewPrivate::layout()
-{
- Q_Q(QDeclarative1ListView);
- layoutScheduled = false;
- if (!isValid() && !visibleItems.count()) {
- clear();
- setPosition(0);
- return;
- }
- if (!visibleItems.isEmpty()) {
- bool fixedCurrent = currentItem && visibleItems.first()->item == currentItem->item;
- qreal sum = visibleItems.first()->size();
- qreal pos = visibleItems.first()->position() + visibleItems.first()->size() + spacing;
- for (int i=1; i < visibleItems.count(); ++i) {
- FxListItem1 *item = visibleItems.at(i);
- item->setPosition(pos);
- pos += item->size() + spacing;
- sum += item->size();
- fixedCurrent = fixedCurrent || (currentItem && item->item == currentItem->item);
- }
- averageSize = qRound(sum / visibleItems.count());
- // move current item if it is not a visible item.
- if (currentIndex >= 0 && currentItem && !fixedCurrent)
- currentItem->setPosition(positionAt(currentIndex));
- }
- q->refill();
- minExtentDirty = true;
- maxExtentDirty = true;
- updateHighlight();
- if (!q->isMoving() && !q->isFlicking()) {
- fixupPosition();
- q->refill();
- }
- if (header)
- updateHeader();
- if (footer)
- updateFooter();
- updateViewport();
-}
-
-void QDeclarative1ListViewPrivate::updateUnrequestedIndexes()
-{
- Q_Q(QDeclarative1ListView);
- QHash<QDeclarativeItem*,int>::iterator it;
- for (it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it)
- *it = model->indexOf(it.key(), q);
-}
-
-void QDeclarative1ListViewPrivate::updateUnrequestedPositions()
-{
- Q_Q(QDeclarative1ListView);
- if (unrequestedItems.count()) {
- qreal pos = position();
- QHash<QDeclarativeItem*,int>::const_iterator it;
- for (it = unrequestedItems.begin(); it != unrequestedItems.end(); ++it) {
- QDeclarativeItem *item = it.key();
- if (orient == QDeclarative1ListView::Vertical) {
- if (item->y() + item->height() > pos && item->y() < pos + q->height())
- item->setY(positionAt(*it));
- } else {
- if (item->x() + item->width() > pos && item->x() < pos + q->width()) {
- if (isRightToLeft())
- item->setX(-positionAt(*it)-item->width());
- else
- item->setX(positionAt(*it));
- }
- }
- }
- }
-}
-
-void QDeclarative1ListViewPrivate::updateTrackedItem()
-{
- Q_Q(QDeclarative1ListView);
- FxListItem1 *item = currentItem;
- if (highlight)
- item = highlight;
- trackedItem = item;
- if (trackedItem)
- q->trackedPositionChanged();
-}
-
-void QDeclarative1ListViewPrivate::createHighlight()
-{
- Q_Q(QDeclarative1ListView);
- bool changed = false;
- if (highlight) {
- if (trackedItem == highlight)
- trackedItem = 0;
- if (highlight->item->scene())
- highlight->item->scene()->removeItem(highlight->item);
- highlight->item->deleteLater();
- delete highlight;
- highlight = 0;
- delete highlightPosAnimator;
- delete highlightSizeAnimator;
- highlightPosAnimator = 0;
- highlightSizeAnimator = 0;
- changed = true;
- }
-
- if (currentItem) {
- QDeclarativeItem *item = 0;
- if (highlightComponent) {
- QDeclarativeContext *highlightContext = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = highlightComponent->create(highlightContext);
- if (nobj) {
- QDeclarative_setParent_noEvent(highlightContext, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete highlightContext;
- }
- } else {
- item = new QDeclarativeItem;
- }
- if (item) {
- QDeclarative_setParent_noEvent(item, q->contentItem());
- item->setParentItem(q->contentItem());
- highlight = new FxListItem1(item, q);
- if (currentItem && autoHighlight) {
- if (orient == QDeclarative1ListView::Vertical) {
- highlight->item->setHeight(currentItem->item->height());
- } else {
- highlight->item->setWidth(currentItem->item->width());
- }
- highlight->setPosition(currentItem->itemPosition());
- }
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
- itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- const QLatin1String posProp(orient == QDeclarative1ListView::Vertical ? "y" : "x");
- highlightPosAnimator = new QSmoothedAnimation_1(q);
- highlightPosAnimator->target = QDeclarativeProperty(highlight->item, posProp);
- highlightPosAnimator->velocity = highlightMoveSpeed;
- highlightPosAnimator->userDuration = highlightMoveDuration;
- const QLatin1String sizeProp(orient == QDeclarative1ListView::Vertical ? "height" : "width");
- highlightSizeAnimator = new QSmoothedAnimation_1(q);
- highlightSizeAnimator->velocity = highlightResizeSpeed;
- highlightSizeAnimator->userDuration = highlightResizeDuration;
- highlightSizeAnimator->target = QDeclarativeProperty(highlight->item, sizeProp);
- if (autoHighlight) {
- highlightPosAnimator->restart();
- highlightSizeAnimator->restart();
- }
- changed = true;
- }
- }
- if (changed)
- emit q->highlightItemChanged();
-}
-
-void QDeclarative1ListViewPrivate::updateHighlight()
-{
- if ((!currentItem && highlight) || (currentItem && !highlight))
- createHighlight();
- if (currentItem && autoHighlight && highlight && !hData.moving && !vData.moving) {
- // auto-update highlight
- highlightPosAnimator->to = isRightToLeft()
- ? -currentItem->itemPosition()-currentItem->itemSize()
- : currentItem->itemPosition();
- highlightSizeAnimator->to = currentItem->itemSize();
- if (orient == QDeclarative1ListView::Vertical) {
- if (highlight->item->width() == 0)
- highlight->item->setWidth(currentItem->item->width());
- } else {
- if (highlight->item->height() == 0)
- highlight->item->setHeight(currentItem->item->height());
- }
- highlightPosAnimator->restart();
- highlightSizeAnimator->restart();
- }
- updateTrackedItem();
-}
-
-void QDeclarative1ListViewPrivate::createSection(FxListItem1 *listItem)
-{
- Q_Q(QDeclarative1ListView);
- if (!sectionCriteria || !sectionCriteria->delegate())
- return;
- if (listItem->attached->m_prevSection != listItem->attached->m_section) {
- if (!listItem->section) {
- qreal pos = listItem->position();
- int i = sectionCacheSize-1;
- while (i >= 0 && !sectionCache[i])
- --i;
- if (i >= 0) {
- listItem->section = sectionCache[i];
- sectionCache[i] = 0;
- listItem->section->setVisible(true);
- QDeclarativeContext *context = QDeclarativeEngine::contextForObject(listItem->section)->parentContext();
- context->setContextProperty(QLatin1String("section"), listItem->attached->m_section);
- } else {
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- context->setContextProperty(QLatin1String("section"), listItem->attached->m_section);
- QObject *nobj = sectionCriteria->delegate()->beginCreate(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- listItem->section = qobject_cast<QDeclarativeItem *>(nobj);
- if (!listItem->section) {
- delete nobj;
- } else {
- listItem->section->setZValue(1);
- QDeclarative_setParent_noEvent(listItem->section, q->contentItem());
- listItem->section->setParentItem(q->contentItem());
- }
- } else {
- delete context;
- }
- sectionCriteria->delegate()->completeCreate();
- }
- listItem->setPosition(pos);
- } else {
- QDeclarativeContext *context = QDeclarativeEngine::contextForObject(listItem->section)->parentContext();
- context->setContextProperty(QLatin1String("section"), listItem->attached->m_section);
- }
- } else if (listItem->section) {
- qreal pos = listItem->position();
- int i = 0;
- do {
- if (!sectionCache[i]) {
- sectionCache[i] = listItem->section;
- sectionCache[i]->setVisible(false);
- listItem->section = 0;
- return;
- }
- ++i;
- } while (i < sectionCacheSize);
- delete listItem->section;
- listItem->section = 0;
- listItem->setPosition(pos);
- }
-}
-
-void QDeclarative1ListViewPrivate::updateSections()
-{
- if (sectionCriteria && !visibleItems.isEmpty()) {
- QString prevSection;
- if (visibleIndex > 0)
- prevSection = sectionAt(visibleIndex-1);
- QDeclarative1ListViewAttached *prevAtt = 0;
- int idx = -1;
- for (int i = 0; i < visibleItems.count(); ++i) {
- QDeclarative1ListViewAttached *attached = visibleItems.at(i)->attached;
- attached->setPrevSection(prevSection);
- if (visibleItems.at(i)->index != -1) {
- QString propValue = model->stringValue(visibleItems.at(i)->index, sectionCriteria->property());
- attached->setSection(sectionCriteria->sectionString(propValue));
- idx = visibleItems.at(i)->index;
- }
- createSection(visibleItems.at(i));
- if (prevAtt)
- prevAtt->setNextSection(attached->section());
- prevSection = attached->section();
- prevAtt = attached;
- }
- if (prevAtt) {
- if (idx > 0 && idx < model->count()-1)
- prevAtt->setNextSection(sectionAt(idx+1));
- else
- prevAtt->setNextSection(QString());
- }
- }
-}
-
-void QDeclarative1ListViewPrivate::updateCurrentSection()
-{
- Q_Q(QDeclarative1ListView);
- if (!sectionCriteria || visibleItems.isEmpty()) {
- if (!currentSection.isEmpty()) {
- currentSection.clear();
- emit q->currentSectionChanged();
- }
- return;
- }
- int index = 0;
- while (index < visibleItems.count() && visibleItems.at(index)->endPosition() < position())
- ++index;
-
- QString newSection = currentSection;
- if (index < visibleItems.count())
- newSection = visibleItems.at(index)->attached->section();
- else
- newSection = visibleItems.first()->attached->section();
- if (newSection != currentSection) {
- currentSection = newSection;
- emit q->currentSectionChanged();
- }
-}
-
-void QDeclarative1ListViewPrivate::updateCurrent(int modelIndex)
-{
- Q_Q(QDeclarative1ListView);
- if (!q->isComponentComplete() || !isValid() || modelIndex < 0 || modelIndex >= model->count()) {
- if (currentItem) {
- currentItem->attached->setIsCurrentItem(false);
- releaseItem(currentItem);
- currentItem = 0;
- currentIndex = modelIndex;
- emit q->currentIndexChanged();
- updateHighlight();
- } else if (currentIndex != modelIndex) {
- currentIndex = modelIndex;
- emit q->currentIndexChanged();
- }
- return;
- }
-
- if (currentItem && currentIndex == modelIndex) {
- updateHighlight();
- return;
- }
- FxListItem1 *oldCurrentItem = currentItem;
- currentIndex = modelIndex;
- currentItem = createItem(modelIndex);
- if (oldCurrentItem && (!currentItem || oldCurrentItem->item != currentItem->item))
- oldCurrentItem->attached->setIsCurrentItem(false);
- if (currentItem) {
- if (modelIndex == visibleIndex - 1 && visibleItems.count()) {
- // We can calculate exact postion in this case
- currentItem->setPosition(visibleItems.first()->position() - currentItem->size() - spacing);
- } else {
- // Create current item now and position as best we can.
- // Its position will be corrected when it becomes visible.
- currentItem->setPosition(positionAt(modelIndex));
- }
- currentItem->item->setFocus(true);
- currentItem->attached->setIsCurrentItem(true);
- // Avoid showing section delegate twice. We still need the section heading so that
- // currentItem positioning works correctly.
- // This is slightly sub-optimal, but section heading caching minimizes the impact.
- if (currentItem->section)
- currentItem->section->setVisible(false);
- if (visibleItems.isEmpty())
- averageSize = currentItem->size();
- }
- updateHighlight();
- emit q->currentIndexChanged();
- // Release the old current item
- releaseItem(oldCurrentItem);
-}
-
-void QDeclarative1ListViewPrivate::updateAverage()
-{
- if (!visibleItems.count())
- return;
- qreal sum = 0.0;
- for (int i = 0; i < visibleItems.count(); ++i)
- sum += visibleItems.at(i)->size();
- averageSize = qRound(sum / visibleItems.count());
-}
-
-void QDeclarative1ListViewPrivate::updateFooter()
-{
- Q_Q(QDeclarative1ListView);
- if (!footer && footerComponent) {
- QDeclarativeItem *item = 0;
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = footerComponent->create(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete context;
- }
- if (item) {
- QDeclarative_setParent_noEvent(item, q->contentItem());
- item->setParentItem(q->contentItem());
- item->setZValue(1);
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
- itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- footer = new FxListItem1(item, q);
- }
- }
- if (footer) {
- if (visibleItems.count()) {
- qreal endPos = lastPosition() + 1;
- if (lastVisibleIndex() == model->count()-1) {
- footer->setPosition(endPos);
- } else {
- qreal visiblePos = position() + q->height();
- if (endPos <= visiblePos || footer->position() < endPos)
- footer->setPosition(endPos);
- }
- } else {
- footer->setPosition(visiblePos);
- }
- }
-}
-
-void QDeclarative1ListViewPrivate::updateHeader()
-{
- Q_Q(QDeclarative1ListView);
- if (!header && headerComponent) {
- QDeclarativeItem *item = 0;
- QDeclarativeContext *context = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = headerComponent->create(context);
- if (nobj) {
- QDeclarative_setParent_noEvent(context, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete context;
- }
- if (item) {
- QDeclarative_setParent_noEvent(item, q->contentItem());
- item->setParentItem(q->contentItem());
- item->setZValue(1);
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
- itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- header = new FxListItem1(item, q);
- }
- }
- if (header) {
- if (visibleItems.count()) {
- qreal startPos = originPosition();
- if (visibleIndex == 0) {
- header->setPosition(startPos - header->size());
- } else {
- if (position() <= startPos || header->position() > startPos - header->size())
- header->setPosition(startPos - header->size());
- }
- } else {
- visiblePos = header->size();
- header->setPosition(0);
- }
- }
-}
-
-void QDeclarative1ListViewPrivate::fixupPosition()
-{
- if ((haveHighlightRange && highlightRange == QDeclarative1ListView::StrictlyEnforceRange)
- || snapMode != QDeclarative1ListView::NoSnap)
- moveReason = Other;
- if (orient == QDeclarative1ListView::Vertical)
- fixupY();
- else
- fixupX();
-}
-
-void QDeclarative1ListViewPrivate::fixup(AxisData &data, qreal minExtent, qreal maxExtent)
-{
- if ((orient == QDeclarative1ListView::Horizontal && &data == &vData)
- || (orient == QDeclarative1ListView::Vertical && &data == &hData))
- return;
-
- correctFlick = false;
- fixupMode = moveReason == Mouse ? fixupMode : Immediate;
- bool strictHighlightRange = haveHighlightRange && highlightRange == QDeclarative1ListView::StrictlyEnforceRange;
-
- qreal highlightStart;
- qreal highlightEnd;
- qreal viewPos;
- if (isRightToLeft()) {
- // Handle Right-To-Left exceptions
- viewPos = -position()-size();
- highlightStart = highlightRangeStartValid ? size() - highlightRangeEnd : highlightRangeStart;
- highlightEnd = highlightRangeEndValid ? size() - highlightRangeStart : highlightRangeEnd;
- } else {
- viewPos = position();
- highlightStart = highlightRangeStart;
- highlightEnd = highlightRangeEnd;
- }
-
- if (snapMode != QDeclarative1ListView::NoSnap && moveReason != QDeclarative1ListViewPrivate::SetIndex) {
- qreal tempPosition = isRightToLeft() ? -position()-size() : position();
- if (snapMode == QDeclarative1ListView::SnapOneItem && moveReason == Mouse) {
- // if we've been dragged < averageSize/2 then bias towards the next item
- qreal dist = data.move.value() - (data.pressPos - data.dragStartOffset);
- qreal bias = 0;
- if (data.velocity > 0 && dist > QML_FLICK_SNAPONETHRESHOLD && dist < averageSize/2)
- bias = averageSize/2;
- else if (data.velocity < 0 && dist < -QML_FLICK_SNAPONETHRESHOLD && dist > -averageSize/2)
- bias = -averageSize/2;
- if (isRightToLeft())
- bias = -bias;
- tempPosition -= bias;
- }
- FxListItem1 *topItem = snapItemAt(tempPosition+highlightStart);
- if (!topItem && strictHighlightRange && currentItem) {
- // StrictlyEnforceRange always keeps an item in range
- updateHighlight();
- topItem = currentItem;
- }
- FxListItem1 *bottomItem = snapItemAt(tempPosition+highlightEnd);
- if (!bottomItem && strictHighlightRange && currentItem) {
- // StrictlyEnforceRange always keeps an item in range
- updateHighlight();
- bottomItem = currentItem;
- }
- qreal pos;
- bool isInBounds = -position() > maxExtent && -position() <= minExtent;
- if (topItem && (isInBounds || strictHighlightRange)) {
- if (topItem->index == 0 && header && tempPosition+highlightStart < header->position()+header->size()/2 && !strictHighlightRange) {
- pos = isRightToLeft() ? - header->position() + highlightStart - size() : header->position() - highlightStart;
- } else {
- if (isRightToLeft())
- pos = qMax(qMin(-topItem->position() + highlightStart - size(), -maxExtent), -minExtent);
- else
- pos = qMax(qMin(topItem->position() - highlightStart, -maxExtent), -minExtent);
- }
- } else if (bottomItem && isInBounds) {
- if (isRightToLeft())
- pos = qMax(qMin(-bottomItem->position() + highlightEnd - size(), -maxExtent), -minExtent);
- else
- pos = qMax(qMin(bottomItem->position() - highlightEnd, -maxExtent), -minExtent);
- } else {
- QDeclarative1FlickablePrivate::fixup(data, minExtent, maxExtent);
- return;
- }
-
- qreal dist = qAbs(data.move + pos);
- if (dist > 0) {
- timeline.reset(data.move);
- if (fixupMode != Immediate) {
- timeline.move(data.move, -pos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
- data.fixingUp = true;
- } else {
- timeline.set(data.move, -pos);
- }
- vTime = timeline.time();
- }
- } else if (currentItem && strictHighlightRange
- && moveReason != QDeclarative1ListViewPrivate::SetIndex) {
- updateHighlight();
- qreal pos = currentItem->itemPosition();
- if (viewPos < pos + currentItem->itemSize() - highlightEnd)
- viewPos = pos + currentItem->itemSize() - highlightEnd;
- if (viewPos > pos - highlightStart)
- viewPos = pos - highlightStart;
- if (isRightToLeft())
- viewPos = -viewPos-size();
-
- timeline.reset(data.move);
- if (viewPos != position()) {
- if (fixupMode != Immediate) {
- timeline.move(data.move, -viewPos, QEasingCurve(QEasingCurve::InOutQuad), fixupDuration/2);
- data.fixingUp = true;
- } else {
- timeline.set(data.move, -viewPos);
- }
- }
- vTime = timeline.time();
- } else {
- QDeclarative1FlickablePrivate::fixup(data, minExtent, maxExtent);
- }
- data.inOvershoot = false;
- fixupMode = Normal;
-}
-
-void QDeclarative1ListViewPrivate::flick(AxisData &data, qreal minExtent, qreal maxExtent, qreal vSize,
- QDeclarative1TimeLineCallback::Callback fixupCallback, qreal velocity)
-{
- Q_Q(QDeclarative1ListView);
-
- data.fixingUp = false;
- moveReason = Mouse;
- if ((!haveHighlightRange || highlightRange != QDeclarative1ListView::StrictlyEnforceRange) && snapMode == QDeclarative1ListView::NoSnap) {
- correctFlick = true;
- QDeclarative1FlickablePrivate::flick(data, minExtent, maxExtent, vSize, fixupCallback, velocity);
- return;
- }
- qreal maxDistance = 0;
- qreal dataValue = isRightToLeft() ? -data.move.value()+size() : data.move.value();
- qreal highlightStart = isRightToLeft() && highlightRangeStartValid ? size()-highlightRangeEnd : highlightRangeStart;
- // -ve velocity means list is moving up/left
- if (velocity > 0) {
- if (data.move.value() < minExtent) {
- if (snapMode == QDeclarative1ListView::SnapOneItem && !hData.flicking && !vData.flicking) {
- // if we've been dragged < averageSize/2 then bias towards the next item
- qreal dist = data.move.value() - (data.pressPos - data.dragStartOffset);
- qreal bias = dist < averageSize/2 ? averageSize/2 : 0;
- if (isRightToLeft())
- bias = -bias;
- data.flickTarget = -snapPosAt(-(dataValue - highlightStart) - bias) + highlightStart;
- maxDistance = qAbs(data.flickTarget - data.move.value());
- velocity = maxVelocity;
- } else {
- maxDistance = qAbs(minExtent - data.move.value());
- }
- }
- if (snapMode == QDeclarative1ListView::NoSnap && highlightRange != QDeclarative1ListView::StrictlyEnforceRange)
- data.flickTarget = minExtent;
- } else {
- if (data.move.value() > maxExtent) {
- if (snapMode == QDeclarative1ListView::SnapOneItem && !hData.flicking && !vData.flicking) {
- // if we've been dragged < averageSize/2 then bias towards the next item
- qreal dist = data.move.value() - (data.pressPos - data.dragStartOffset);
- qreal bias = -dist < averageSize/2 ? averageSize/2 : 0;
- if (isRightToLeft())
- bias = -bias;
- data.flickTarget = -snapPosAt(-(dataValue - highlightStart) + bias) + highlightStart;
- maxDistance = qAbs(data.flickTarget - data.move.value());
- velocity = -maxVelocity;
- } else {
- maxDistance = qAbs(maxExtent - data.move.value());
- }
- }
- if (snapMode == QDeclarative1ListView::NoSnap && highlightRange != QDeclarative1ListView::StrictlyEnforceRange)
- data.flickTarget = maxExtent;
- }
-
- bool overShoot = boundsBehavior == QDeclarative1Flickable::DragAndOvershootBounds;
-
- if (maxDistance > 0 || overShoot) {
- // These modes require the list to stop exactly on an item boundary.
- // The initial flick will estimate the boundary to stop on.
- // Since list items can have variable sizes, the boundary will be
- // reevaluated and adjusted as we approach the boundary.
- qreal v = velocity;
- if (maxVelocity != -1 && maxVelocity < qAbs(v)) {
- if (v < 0)
- v = -maxVelocity;
- else
- v = maxVelocity;
- }
- if (!hData.flicking && !vData.flicking) {
- // the initial flick - estimate boundary
- qreal accel = deceleration;
- qreal v2 = v * v;
- overshootDist = 0.0;
- // + averageSize/4 to encourage moving at least one item in the flick direction
- qreal dist = v2 / (accel * 2.0) + averageSize/4;
- if (maxDistance > 0)
- dist = qMin(dist, maxDistance);
- if (v > 0)
- dist = -dist;
- if ((maxDistance > 0.0 && v2 / (2.0f * maxDistance) < accel) || snapMode == QDeclarative1ListView::SnapOneItem) {
- if (snapMode != QDeclarative1ListView::SnapOneItem) {
- qreal distTemp = isRightToLeft() ? -dist : dist;
- data.flickTarget = -snapPosAt(-(dataValue - highlightStart) + distTemp) + highlightStart;
- }
- data.flickTarget = isRightToLeft() ? -data.flickTarget+size() : data.flickTarget;
- if (overShoot) {
- if (data.flickTarget >= minExtent) {
- overshootDist = overShootDistance(vSize);
- data.flickTarget += overshootDist;
- } else if (data.flickTarget <= maxExtent) {
- overshootDist = overShootDistance(vSize);
- data.flickTarget -= overshootDist;
- }
- }
- qreal adjDist = -data.flickTarget + data.move.value();
- if (qAbs(adjDist) > qAbs(dist)) {
- // Prevent painfully slow flicking - adjust velocity to suit flickDeceleration
- qreal adjv2 = accel * 2.0f * qAbs(adjDist);
- if (adjv2 > v2) {
- v2 = adjv2;
- v = qSqrt(v2);
- if (dist > 0)
- v = -v;
- }
- }
- dist = adjDist;
- accel = v2 / (2.0f * qAbs(dist));
- } else if (overShoot) {
- data.flickTarget = data.move.value() - dist;
- if (data.flickTarget >= minExtent) {
- overshootDist = overShootDistance(vSize);
- data.flickTarget += overshootDist;
- } else if (data.flickTarget <= maxExtent) {
- overshootDist = overShootDistance(vSize);
- data.flickTarget -= overshootDist;
- }
- }
-
- timeline.reset(data.move);
- timeline.accel(data.move, v, accel, maxDistance + overshootDist);
- timeline.callback(QDeclarative1TimeLineCallback(&data.move, fixupCallback, this));
- if (!hData.flicking && q->xflick()) {
- hData.flicking = true;
- emit q->flickingChanged();
- emit q->flickingHorizontallyChanged();
- emit q->flickStarted();
- }
- if (!vData.flicking && q->yflick()) {
- vData.flicking = true;
- emit q->flickingChanged();
- emit q->flickingVerticallyChanged();
- emit q->flickStarted();
- }
- correctFlick = true;
- } else {
- // reevaluate the target boundary.
- qreal newtarget = data.flickTarget;
- if (snapMode != QDeclarative1ListView::NoSnap || highlightRange == QDeclarative1ListView::StrictlyEnforceRange) {
- qreal tempFlickTarget = isRightToLeft() ? -data.flickTarget+size() : data.flickTarget;
- newtarget = -snapPosAt(-(tempFlickTarget - highlightStart)) + highlightStart;
- newtarget = isRightToLeft() ? -newtarget+size() : newtarget;
- }
- if (velocity < 0 && newtarget <= maxExtent)
- newtarget = maxExtent - overshootDist;
- else if (velocity > 0 && newtarget >= minExtent)
- newtarget = minExtent + overshootDist;
- if (newtarget == data.flickTarget) { // boundary unchanged - nothing to do
- if (qAbs(velocity) < MinimumFlickVelocity)
- correctFlick = false;
- return;
- }
- data.flickTarget = newtarget;
- qreal dist = -newtarget + data.move.value();
- if ((v < 0 && dist < 0) || (v > 0 && dist > 0)) {
- correctFlick = false;
- timeline.reset(data.move);
- fixup(data, minExtent, maxExtent);
- return;
- }
-
- timeline.reset(data.move);
- timeline.accelDistance(data.move, v, -dist);
- timeline.callback(QDeclarative1TimeLineCallback(&data.move, fixupCallback, this));
- }
- } else {
- correctFlick = false;
- timeline.reset(data.move);
- fixup(data, minExtent, maxExtent);
- }
-}
-
-//----------------------------------------------------------------------------
-
-/*!
- \qmlclass ListView QDeclarative1ListView
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \inherits Flickable
- \brief The ListView item provides a list view of items provided by a model.
-
- A ListView displays data from models created from built-in QML elements like ListModel
- and XmlListModel, or custom model classes defined in C++ that inherit from
- QAbstractListModel.
-
- A ListView has a \l model, which defines the data to be displayed, and
- a \l delegate, which defines how the data should be displayed. Items in a
- ListView are laid out horizontally or vertically. List views are inherently
- flickable because ListView inherits from \l Flickable.
-
- \section1 Example Usage
-
- The following example shows the definition of a simple list model defined
- in a file called \c ContactModel.qml:
-
- \snippet doc/src/snippets/qtquick1/listview/ContactModel.qml 0
-
- Another component can display this model data in a ListView, like this:
-
- \snippet doc/src/snippets/qtquick1/listview/listview.qml import
- \codeline
- \snippet doc/src/snippets/qtquick1/listview/listview.qml classdocs simple
-
- \image listview-simple.png
-
- Here, the ListView creates a \c ContactModel component for its model, and a \l Text element
- for its delegate. The view will create a new \l Text component for each item in the model. Notice
- the delegate is able to access the model's \c name and \c number data directly.
-
- An improved list view is shown below. The delegate is visually improved and is moved
- into a separate \c contactDelegate component.
-
- \snippet doc/src/snippets/qtquick1/listview/listview.qml classdocs advanced
- \image listview-highlight.png
-
- The currently selected item is highlighted with a blue \l Rectangle using the \l highlight property,
- and \c focus is set to \c true to enable keyboard navigation for the list view.
- The list view itself is a focus scope (see \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page} for more details).
-
- Delegates are instantiated as needed and may be destroyed at any time.
- State should \e never be stored in a delegate.
-
- ListView attaches a number of properties to the root item of the delegate, for example
- \c {ListView.isCurrentItem}. In the following example, the root delegate item can access
- this attached property directly as \c ListView.isCurrentItem, while the child
- \c contactInfo object must refer to this property as \c wrapper.ListView.isCurrentItem.
-
- \snippet doc/src/snippets/qtquick1/listview/listview.qml isCurrentItem
-
- \note Views do not enable \e clip automatically. If the view
- is not clipped by another item or the screen, it will be necessary
- to set \e {clip: true} in order to have the out of view items clipped
- nicely.
-
- \sa {QML Data Models}, GridView, {declarative/modelviews/listview}{ListView examples}
-*/
-
-QDeclarative1ListView::QDeclarative1ListView(QDeclarativeItem *parent)
- : QDeclarative1Flickable(*(new QDeclarative1ListViewPrivate), parent)
-{
- Q_D(QDeclarative1ListView);
- d->init();
-}
-
-QDeclarative1ListView::~QDeclarative1ListView()
-{
- Q_D(QDeclarative1ListView);
- d->clear();
- if (d->ownModel)
- delete d->model;
- delete d->header;
- delete d->footer;
-}
-
-/*!
- \qmlattachedproperty bool ListView::isCurrentItem
- This attached property is true if this delegate is the current item; otherwise false.
-
- It is attached to each instance of the delegate.
-
- This property may be used to adjust the appearance of the current item, for example:
-
- \snippet doc/src/snippets/qtquick1/listview/listview.qml isCurrentItem
-*/
-
-/*!
- \qmlattachedproperty ListView ListView::view
- This attached property holds the view that manages this delegate instance.
-
- It is attached to each instance of the delegate.
-*/
-
-/*!
- \qmlattachedproperty string ListView::previousSection
- This attached property holds the section of the previous element.
-
- It is attached to each instance of the delegate.
-
- The section is evaluated using the \l {ListView::section.property}{section} properties.
-*/
-
-/*!
- \qmlattachedproperty string ListView::nextSection
- This attached property holds the section of the next element.
-
- It is attached to each instance of the delegate.
-
- The section is evaluated using the \l {ListView::section.property}{section} properties.
-*/
-
-/*!
- \qmlattachedproperty string ListView::section
- This attached property holds the section of this element.
-
- It is attached to each instance of the delegate.
-
- The section is evaluated using the \l {ListView::section.property}{section} properties.
-*/
-
-/*!
- \qmlattachedproperty bool ListView::delayRemove
- This attached property holds whether the delegate may be destroyed.
-
- It is attached to each instance of the delegate.
-
- It is sometimes necessary to delay the destruction of an item
- until an animation completes.
-
- The example delegate below ensures that the animation completes before
- the item is removed from the list.
-
- \snippet doc/src/snippets/qtquick1/listview/listview.qml delayRemove
-*/
-
-/*!
- \qmlattachedsignal QtQuick1::ListView::onAdd()
- This attached handler is called immediately after an item is added to the view.
-*/
-
-/*!
- \qmlattachedsignal QtQuick1::ListView::onRemove()
- This attached handler is called immediately before an item is removed from the view.
-*/
-
-/*!
- \qmlproperty model QtQuick1::ListView::model
- This property holds the model providing data for the list.
-
- The model provides the set of data that is used to create the items
- in the view. Models can be created directly in QML using \l ListModel, \l XmlListModel
- or \l VisualItemModel, or provided by C++ model classes. If a C++ model class is
- used, it must be a subclass of \l QAbstractItemModel or a simple list.
-
- \sa {qmlmodels}{Data Models}
-*/
-QVariant QDeclarative1ListView::model() const
-{
- Q_D(const QDeclarative1ListView);
- return d->modelVariant;
-}
-
-void QDeclarative1ListView::setModel(const QVariant &model)
-{
- Q_D(QDeclarative1ListView);
- if (d->modelVariant == model)
- return;
- if (d->model) {
- disconnect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
- disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
- disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
- disconnect(d->model, SIGNAL(itemsChanged(int,int)), this, SLOT(itemsChanged(int,int)));
- disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- disconnect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
- disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
- }
- d->clear();
- QDeclarative1VisualModel *oldModel = d->model;
- d->model = 0;
- d->setPosition(0);
- d->modelVariant = model;
- QObject *object = qvariant_cast<QObject*>(model);
- QDeclarative1VisualModel *vim = 0;
- if (object && (vim = qobject_cast<QDeclarative1VisualModel *>(object))) {
- if (d->ownModel) {
- delete oldModel;
- d->ownModel = false;
- }
- d->model = vim;
- } else {
- if (!d->ownModel) {
- d->model = new QDeclarative1VisualDataModel(qmlContext(this), this);
- d->ownModel = true;
- } else {
- d->model = oldModel;
- }
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- dataModel->setModel(model);
- }
- if (d->model) {
- d->bufferMode = QDeclarative1ListViewPrivate::BufferBefore | QDeclarative1ListViewPrivate::BufferAfter;
- if (isComponentComplete()) {
- updateSections();
- refill();
- if ((d->currentIndex >= d->model->count() || d->currentIndex < 0) && !d->currentIndexCleared) {
- setCurrentIndex(0);
- } else {
- d->moveReason = QDeclarative1ListViewPrivate::SetIndex;
- d->updateCurrent(d->currentIndex);
- if (d->highlight && d->currentItem) {
- if (d->autoHighlight)
- d->highlight->setPosition(d->currentItem->position());
- d->updateTrackedItem();
- }
- }
- d->updateViewport();
- }
- connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
- connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
- connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
- connect(d->model, SIGNAL(itemsChanged(int,int)), this, SLOT(itemsChanged(int,int)));
- connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- connect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
- connect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
- emit countChanged();
- }
- emit modelChanged();
-}
-
-/*!
- \qmlproperty Component QtQuick1::ListView::delegate
-
- The delegate provides a template defining each item instantiated by the view.
- The index is exposed as an accessible \c index property. Properties of the
- model are also available depending upon the type of \l {qmlmodels}{Data Model}.
-
- The number of elements in the delegate has a direct effect on the
- flicking performance of the view. If at all possible, place functionality
- that is not needed for the normal display of the delegate in a \l Loader which
- can load additional elements when needed.
-
- The ListView will lay out the items based on the size of the root item
- in the delegate.
-
- It is recommended that the delagate's size be a whole number to avoid sub-pixel
- alignment of items.
-
- \note Delegates are instantiated as needed and may be destroyed at any time.
- State should \e never be stored in a delegate.
-*/
-QDeclarativeComponent *QDeclarative1ListView::delegate() const
-{
- Q_D(const QDeclarative1ListView);
- if (d->model) {
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- return dataModel->delegate();
- }
-
- return 0;
-}
-
-void QDeclarative1ListView::setDelegate(QDeclarativeComponent *delegate)
-{
- Q_D(QDeclarative1ListView);
- if (delegate == this->delegate())
- return;
- if (!d->ownModel) {
- d->model = new QDeclarative1VisualDataModel(qmlContext(this));
- d->ownModel = true;
- }
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model)) {
- int oldCount = dataModel->count();
- dataModel->setDelegate(delegate);
- if (isComponentComplete()) {
- for (int i = 0; i < d->visibleItems.count(); ++i)
- d->releaseItem(d->visibleItems.at(i));
- d->visibleItems.clear();
- d->releaseItem(d->currentItem);
- d->currentItem = 0;
- updateSections();
- refill();
- d->moveReason = QDeclarative1ListViewPrivate::SetIndex;
- d->updateCurrent(d->currentIndex);
- if (d->highlight && d->currentItem) {
- if (d->autoHighlight)
- d->highlight->setPosition(d->currentItem->position());
- d->updateTrackedItem();
- }
- d->updateViewport();
- }
- if (oldCount != dataModel->count())
- emit countChanged();
- }
- emit delegateChanged();
-}
-
-/*!
- \qmlproperty int QtQuick1::ListView::currentIndex
- \qmlproperty Item QtQuick1::ListView::currentItem
-
- The \c currentIndex property holds the index of the current item, and
- \c currentItem holds the current item. Setting the currentIndex to -1
- will clear the highlight and set currentItem to null.
-
- If highlightFollowsCurrentItem is \c true, setting either of these
- properties will smoothly scroll the ListView so that the current
- item becomes visible.
-
- Note that the position of the current item
- may only be approximate until it becomes visible in the view.
-*/
-int QDeclarative1ListView::currentIndex() const
-{
- Q_D(const QDeclarative1ListView);
- return d->currentIndex;
-}
-
-void QDeclarative1ListView::setCurrentIndex(int index)
-{
- Q_D(QDeclarative1ListView);
- if (d->requestedIndex >= 0) // currently creating item
- return;
- d->currentIndexCleared = (index == -1);
- if (index == d->currentIndex)
- return;
- if (isComponentComplete() && d->isValid()) {
- if (d->layoutScheduled)
- d->layout();
- d->moveReason = QDeclarative1ListViewPrivate::SetIndex;
- d->updateCurrent(index);
- } else if (d->currentIndex != index) {
- d->currentIndex = index;
- emit currentIndexChanged();
- }
-}
-
-QDeclarativeItem *QDeclarative1ListView::currentItem()
-{
- Q_D(QDeclarative1ListView);
- if (!d->currentItem)
- return 0;
- return d->currentItem->item;
-}
-
-/*!
- \qmlproperty Item QtQuick1::ListView::highlightItem
-
- This holds the highlight item created from the \l highlight component.
-
- The \c highlightItem is managed by the view unless
- \l highlightFollowsCurrentItem is set to false.
-
- \sa highlight, highlightFollowsCurrentItem
-*/
-QDeclarativeItem *QDeclarative1ListView::highlightItem()
-{
- Q_D(QDeclarative1ListView);
- if (!d->highlight)
- return 0;
- return d->highlight->item;
-}
-
-/*!
- \qmlproperty int QtQuick1::ListView::count
- This property holds the number of items in the view.
-*/
-int QDeclarative1ListView::count() const
-{
- Q_D(const QDeclarative1ListView);
- if (d->model)
- return d->model->count();
- return 0;
-}
-
-/*!
- \qmlproperty Component QtQuick1::ListView::highlight
- This property holds the component to use as the highlight.
-
- An instance of the highlight component is created for each list.
- The geometry of the resulting component instance is managed by the list
- so as to stay with the current item, unless the highlightFollowsCurrentItem
- property is false.
-
- \sa highlightItem, highlightFollowsCurrentItem, {declarative/modelviews/listview}{ListView examples}
-*/
-QDeclarativeComponent *QDeclarative1ListView::highlight() const
-{
- Q_D(const QDeclarative1ListView);
- return d->highlightComponent;
-}
-
-void QDeclarative1ListView::setHighlight(QDeclarativeComponent *highlight)
-{
- Q_D(QDeclarative1ListView);
- if (highlight != d->highlightComponent) {
- d->highlightComponent = highlight;
- d->createHighlight();
- if (d->currentItem)
- d->updateHighlight();
- emit highlightChanged();
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::ListView::highlightFollowsCurrentItem
- This property holds whether the highlight is managed by the view.
-
- If this property is true (the default value), the highlight is moved smoothly
- to follow the current item. Otherwise, the
- highlight is not moved by the view, and any movement must be implemented
- by the highlight.
-
- Here is a highlight with its motion defined by a \l {SpringAnimation} item:
-
- \snippet doc/src/snippets/qtquick1/listview/listview.qml highlightFollowsCurrentItem
-
- Note that the highlight animation also affects the way that the view
- is scrolled. This is because the view moves to maintain the
- highlight within the preferred highlight range (or visible viewport).
-
- \sa highlight, highlightMoveSpeed
-*/
-bool QDeclarative1ListView::highlightFollowsCurrentItem() const
-{
- Q_D(const QDeclarative1ListView);
- return d->autoHighlight;
-}
-
-void QDeclarative1ListView::setHighlightFollowsCurrentItem(bool autoHighlight)
-{
- Q_D(QDeclarative1ListView);
- if (d->autoHighlight != autoHighlight) {
- d->autoHighlight = autoHighlight;
- if (autoHighlight) {
- d->updateHighlight();
- } else {
- if (d->highlightPosAnimator)
- d->highlightPosAnimator->stop();
- if (d->highlightSizeAnimator)
- d->highlightSizeAnimator->stop();
- }
- emit highlightFollowsCurrentItemChanged();
- }
-}
-
-//###Possibly rename these properties, since they are very useful even without a highlight?
-/*!
- \qmlproperty real QtQuick1::ListView::preferredHighlightBegin
- \qmlproperty real QtQuick1::ListView::preferredHighlightEnd
- \qmlproperty enumeration QtQuick1::ListView::highlightRangeMode
-
- These properties define the preferred range of the highlight (for the current item)
- within the view. The \c preferredHighlightBegin value must be less than the
- \c preferredHighlightEnd value.
-
- These properties affect the position of the current item when the list is scrolled.
- For example, if the currently selected item should stay in the middle of the
- list when the view is scrolled, set the \c preferredHighlightBegin and
- \c preferredHighlightEnd values to the top and bottom coordinates of where the middle
- item would be. If the \c currentItem is changed programmatically, the list will
- automatically scroll so that the current item is in the middle of the view.
- Furthermore, the behavior of the current item index will occur whether or not a
- highlight exists.
-
- Valid values for \c highlightRangeMode are:
-
- \list
- \o ListView.ApplyRange - the view attempts to maintain the highlight within the range.
- However, the highlight can move outside of the range at the ends of the list or due
- to mouse interaction.
- \o ListView.StrictlyEnforceRange - the highlight never moves outside of the range.
- The current item changes if a keyboard or mouse action would cause the highlight to move
- outside of the range.
- \o ListView.NoHighlightRange - this is the default value.
- \endlist
-*/
-qreal QDeclarative1ListView::preferredHighlightBegin() const
-{
- Q_D(const QDeclarative1ListView);
- return d->highlightRangeStart;
-}
-
-void QDeclarative1ListView::setPreferredHighlightBegin(qreal start)
-{
- Q_D(QDeclarative1ListView);
- d->highlightRangeStartValid = true;
- if (d->highlightRangeStart == start)
- return;
- d->highlightRangeStart = start;
- d->haveHighlightRange = d->highlightRange != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- emit preferredHighlightBeginChanged();
-}
-
-void QDeclarative1ListView::resetPreferredHighlightBegin()
-{
- Q_D(QDeclarative1ListView);
- d->highlightRangeStartValid = false;
- if (d->highlightRangeStart == 0)
- return;
- d->highlightRangeStart = 0;
- emit preferredHighlightBeginChanged();
-}
-
-qreal QDeclarative1ListView::preferredHighlightEnd() const
-{
- Q_D(const QDeclarative1ListView);
- return d->highlightRangeEnd;
-}
-
-void QDeclarative1ListView::setPreferredHighlightEnd(qreal end)
-{
- Q_D(QDeclarative1ListView);
- d->highlightRangeEndValid = true;
- if (d->highlightRangeEnd == end)
- return;
- d->highlightRangeEnd = end;
- d->haveHighlightRange = d->highlightRange != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- emit preferredHighlightEndChanged();
-}
-
-void QDeclarative1ListView::resetPreferredHighlightEnd()
-{
- Q_D(QDeclarative1ListView);
- d->highlightRangeEndValid = false;
- if (d->highlightRangeEnd == 0)
- return;
- d->highlightRangeEnd = 0;
- emit preferredHighlightEndChanged();
-}
-
-QDeclarative1ListView::HighlightRangeMode QDeclarative1ListView::highlightRangeMode() const
-{
- Q_D(const QDeclarative1ListView);
- return d->highlightRange;
-}
-
-void QDeclarative1ListView::setHighlightRangeMode(HighlightRangeMode mode)
-{
- Q_D(QDeclarative1ListView);
- if (d->highlightRange == mode)
- return;
- d->highlightRange = mode;
- d->haveHighlightRange = d->highlightRange != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- emit highlightRangeModeChanged();
-}
-
-/*!
- \qmlproperty real QtQuick1::ListView::spacing
-
- This property holds the spacing between items.
-
- The default value is 0.
-*/
-qreal QDeclarative1ListView::spacing() const
-{
- Q_D(const QDeclarative1ListView);
- return d->spacing;
-}
-
-void QDeclarative1ListView::setSpacing(qreal spacing)
-{
- Q_D(QDeclarative1ListView);
- if (spacing != d->spacing) {
- d->spacing = spacing;
- d->layout();
- emit spacingChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::ListView::orientation
- This property holds the orientation of the list.
-
- Possible values:
-
- \list
- \o ListView.Horizontal - Items are laid out horizontally
- \o ListView.Vertical (default) - Items are laid out vertically
- \endlist
-
- \table
- \row
- \o Horizontal orientation:
- \image ListViewHorizontal.png
-
- \row
- \o Vertical orientation:
- \image listview-highlight.png
- \endtable
-*/
-QDeclarative1ListView::Orientation QDeclarative1ListView::orientation() const
-{
- Q_D(const QDeclarative1ListView);
- return d->orient;
-}
-
-void QDeclarative1ListView::setOrientation(QDeclarative1ListView::Orientation orientation)
-{
- Q_D(QDeclarative1ListView);
- if (d->orient != orientation) {
- d->orient = orientation;
- if (d->orient == QDeclarative1ListView::Vertical) {
- setContentWidth(-1);
- setFlickableDirection(VerticalFlick);
- setContentX(0);
- } else {
- setContentHeight(-1);
- setFlickableDirection(HorizontalFlick);
- setContentY(0);
- }
- d->regenerate();
- emit orientationChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::ListView::layoutDirection
- This property holds the layout direction of the horizontal list.
-
- Possible values:
-
- \list
- \o Qt.LeftToRight (default) - Items will be laid out from left to right.
- \o Qt.RightToLeft - Items will be laid out from right to let.
- \endlist
-
- \sa ListView::effectiveLayoutDirection
-*/
-
-Qt::LayoutDirection QDeclarative1ListView::layoutDirection() const
-{
- Q_D(const QDeclarative1ListView);
- return d->layoutDirection;
-}
-
-void QDeclarative1ListView::setLayoutDirection(Qt::LayoutDirection layoutDirection)
-{
- Q_D(QDeclarative1ListView);
- if (d->layoutDirection != layoutDirection) {
- d->layoutDirection = layoutDirection;
- d->regenerate();
- emit layoutDirectionChanged();
- emit effectiveLayoutDirectionChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::ListView::effectiveLayoutDirection
- This property holds the effective layout direction of the horizontal list.
-
- When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts,
- the visual layout direction of the horizontal list will be mirrored. However, the
- property \l {ListView::layoutDirection}{layoutDirection} will remain unchanged.
-
- \sa ListView::layoutDirection, {LayoutMirroring}{LayoutMirroring}
-*/
-
-Qt::LayoutDirection QDeclarative1ListView::effectiveLayoutDirection() const
-{
- Q_D(const QDeclarative1ListView);
- if (d->effectiveLayoutMirror)
- return d->layoutDirection == Qt::RightToLeft ? Qt::LeftToRight : Qt::RightToLeft;
- else
- return d->layoutDirection;
-}
-
-/*!
- \qmlproperty bool QtQuick1::ListView::keyNavigationWraps
- This property holds whether the list wraps key navigation.
-
- If this is true, key navigation that would move the current item selection
- past the end of the list instead wraps around and moves the selection to
- the start of the list, and vice-versa.
-
- By default, key navigation is not wrapped.
-*/
-bool QDeclarative1ListView::isWrapEnabled() const
-{
- Q_D(const QDeclarative1ListView);
- return d->wrap;
-}
-
-void QDeclarative1ListView::setWrapEnabled(bool wrap)
-{
- Q_D(QDeclarative1ListView);
- if (d->wrap == wrap)
- return;
- d->wrap = wrap;
- emit keyNavigationWrapsChanged();
-}
-
-/*!
- \qmlproperty int QtQuick1::ListView::cacheBuffer
- This property determines whether delegates are retained outside the
- visible area of the view.
-
- If this value is non-zero, the view keeps as many delegates
- instantiated as it can fit within the buffer specified. For example,
- if in a vertical view the delegate is 20 pixels high and \c cacheBuffer is
- set to 40, then up to 2 delegates above and 2 delegates below the visible
- area may be retained.
-
- Note that cacheBuffer is not a pixel buffer - it only maintains additional
- instantiated delegates.
-
- Setting this value can improve the smoothness of scrolling behavior at the expense
- of additional memory usage. It is not a substitute for creating efficient
- delegates; the fewer elements in a delegate, the faster a view can be
- scrolled.
-*/
-int QDeclarative1ListView::cacheBuffer() const
-{
- Q_D(const QDeclarative1ListView);
- return d->buffer;
-}
-
-void QDeclarative1ListView::setCacheBuffer(int b)
-{
- Q_D(QDeclarative1ListView);
- if (d->buffer != b) {
- d->buffer = b;
- if (isComponentComplete()) {
- d->bufferMode = QDeclarative1ListViewPrivate::BufferBefore | QDeclarative1ListViewPrivate::BufferAfter;
- refill();
- }
- emit cacheBufferChanged();
- }
-}
-
-/*!
- \qmlproperty string QtQuick1::ListView::section.property
- \qmlproperty enumeration QtQuick1::ListView::section.criteria
- \qmlproperty Component QtQuick1::ListView::section.delegate
-
- These properties hold the expression to be evaluated for the \l section attached property.
-
- The \l section attached property enables a ListView to be visually
- separated into different parts. These properties determine how sections
- are created.
-
- \c section.property holds the name of the property that is the basis
- of each section.
-
- \c section.criteria holds the criteria for forming each section based on
- \c section.property. This value can be one of:
-
- \list
- \o ViewSection.FullString (default) - sections are created based on the
- \c section.property value.
- \o ViewSection.FirstCharacter - sections are created based on the first
- character of the \c section.property value (for example, 'A', 'B', 'C'
- sections, etc. for an address book)
- \endlist
-
- \c section.delegate holds the delegate component for each section.
-
- Each item in the list has attached properties named \c ListView.section,
- \c ListView.previousSection and \c ListView.nextSection. These may be
- used to place a section header for related items.
-
- For example, here is a ListView that displays a list of animals, separated
- into sections. Each item in the ListView is placed in a different section
- depending on the "size" property of the model item. The \c sectionHeading
- delegate component provides the light blue bar that marks the beginning of
- each section.
-
-
- \snippet examples/declarative/modelviews/listview/sections.qml 0
-
- \image qml-listview-sections-example.png
-
- \note Adding sections to a ListView does not automatically re-order the
- list items by the section criteria.
- If the model is not ordered by section, then it is possible that
- the sections created will not be unique; each boundary between
- differing sections will result in a section header being created
- even if that section exists elsewhere.
-
- \sa {declarative/modelviews/listview}{ListView examples}
-*/
-QDeclarative1ViewSection *QDeclarative1ListView::sectionCriteria()
-{
- Q_D(QDeclarative1ListView);
- if (!d->sectionCriteria) {
- d->sectionCriteria = new QDeclarative1ViewSection(this);
- connect(d->sectionCriteria, SIGNAL(propertyChanged()), this, SLOT(updateSections()));
- }
- return d->sectionCriteria;
-}
-
-/*!
- \qmlproperty string QtQuick1::ListView::currentSection
- This property holds the section that is currently at the beginning of the view.
-*/
-QString QDeclarative1ListView::currentSection() const
-{
- Q_D(const QDeclarative1ListView);
- return d->currentSection;
-}
-
-/*!
- \qmlproperty real QtQuick1::ListView::highlightMoveSpeed
- \qmlproperty int QtQuick1::ListView::highlightMoveDuration
- \qmlproperty real QtQuick1::ListView::highlightResizeSpeed
- \qmlproperty int QtQuick1::ListView::highlightResizeDuration
-
- These properties hold the move and resize animation speed of the highlight delegate.
-
- \l highlightFollowsCurrentItem must be true for these properties
- to have effect.
-
- The default value for the speed properties is 400 pixels/second.
- The default value for the duration properties is -1, i.e. the
- highlight will take as much time as necessary to move at the set speed.
-
- These properties have the same characteristics as a SmoothedAnimation.
-
- \sa highlightFollowsCurrentItem
-*/
-qreal QDeclarative1ListView::highlightMoveSpeed() const
-{
- Q_D(const QDeclarative1ListView);\
- return d->highlightMoveSpeed;
-}
-
-void QDeclarative1ListView::setHighlightMoveSpeed(qreal speed)
-{
- Q_D(QDeclarative1ListView);\
- if (d->highlightMoveSpeed != speed) {
- d->highlightMoveSpeed = speed;
- if (d->highlightPosAnimator)
- d->highlightPosAnimator->velocity = d->highlightMoveSpeed;
- emit highlightMoveSpeedChanged();
- }
-}
-
-int QDeclarative1ListView::highlightMoveDuration() const
-{
- Q_D(const QDeclarative1ListView);
- return d->highlightMoveDuration;
-}
-
-void QDeclarative1ListView::setHighlightMoveDuration(int duration)
-{
- Q_D(QDeclarative1ListView);\
- if (d->highlightMoveDuration != duration) {
- d->highlightMoveDuration = duration;
- if (d->highlightPosAnimator)
- d->highlightPosAnimator->userDuration = d->highlightMoveDuration;
- emit highlightMoveDurationChanged();
- }
-}
-
-qreal QDeclarative1ListView::highlightResizeSpeed() const
-{
- Q_D(const QDeclarative1ListView);\
- return d->highlightResizeSpeed;
-}
-
-void QDeclarative1ListView::setHighlightResizeSpeed(qreal speed)
-{
- Q_D(QDeclarative1ListView);\
- if (d->highlightResizeSpeed != speed) {
- d->highlightResizeSpeed = speed;
- if (d->highlightSizeAnimator)
- d->highlightSizeAnimator->velocity = d->highlightResizeSpeed;
- emit highlightResizeSpeedChanged();
- }
-}
-
-int QDeclarative1ListView::highlightResizeDuration() const
-{
- Q_D(const QDeclarative1ListView);
- return d->highlightResizeDuration;
-}
-
-void QDeclarative1ListView::setHighlightResizeDuration(int duration)
-{
- Q_D(QDeclarative1ListView);\
- if (d->highlightResizeDuration != duration) {
- d->highlightResizeDuration = duration;
- if (d->highlightSizeAnimator)
- d->highlightSizeAnimator->userDuration = d->highlightResizeDuration;
- emit highlightResizeDurationChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::ListView::snapMode
-
- This property determines how the view scrolling will settle following a drag or flick.
- The possible values are:
-
- \list
- \o ListView.NoSnap (default) - the view stops anywhere within the visible area.
- \o ListView.SnapToItem - the view settles with an item aligned with the start of
- the view.
- \o ListView.SnapOneItem - the view settles no more than one item away from the first
- visible item at the time the mouse button is released. This mode is particularly
- useful for moving one page at a time.
- \endlist
-
- \c snapMode does not affect the \l currentIndex. To update the
- \l currentIndex as the list is moved, set \l highlightRangeMode
- to \c ListView.StrictlyEnforceRange.
-
- \sa highlightRangeMode
-*/
-QDeclarative1ListView::SnapMode QDeclarative1ListView::snapMode() const
-{
- Q_D(const QDeclarative1ListView);
- return d->snapMode;
-}
-
-void QDeclarative1ListView::setSnapMode(SnapMode mode)
-{
- Q_D(QDeclarative1ListView);
- if (d->snapMode != mode) {
- d->snapMode = mode;
- emit snapModeChanged();
- }
-}
-
-/*!
- \qmlproperty Component QtQuick1::ListView::footer
- This property holds the component to use as the footer.
-
- An instance of the footer component is created for each view. The
- footer is positioned at the end of the view, after any items.
-
- \sa header
-*/
-QDeclarativeComponent *QDeclarative1ListView::footer() const
-{
- Q_D(const QDeclarative1ListView);
- return d->footerComponent;
-}
-
-void QDeclarative1ListView::setFooter(QDeclarativeComponent *footer)
-{
- Q_D(QDeclarative1ListView);
- if (d->footerComponent != footer) {
- if (d->footer) {
- if (scene())
- scene()->removeItem(d->footer->item);
- d->footer->item->deleteLater();
- delete d->footer;
- d->footer = 0;
- }
- d->footerComponent = footer;
- d->minExtentDirty = true;
- d->maxExtentDirty = true;
- if (isComponentComplete()) {
- d->updateFooter();
- d->updateViewport();
- d->fixupPosition();
- }
- emit footerChanged();
- }
-}
-
-/*!
- \qmlproperty Component QtQuick1::ListView::header
- This property holds the component to use as the header.
-
- An instance of the header component is created for each view. The
- header is positioned at the beginning of the view, before any items.
-
- \sa footer
-*/
-QDeclarativeComponent *QDeclarative1ListView::header() const
-{
- Q_D(const QDeclarative1ListView);
- return d->headerComponent;
-}
-
-void QDeclarative1ListView::setHeader(QDeclarativeComponent *header)
-{
- Q_D(QDeclarative1ListView);
- if (d->headerComponent != header) {
- if (d->header) {
- if (scene())
- scene()->removeItem(d->header->item);
- d->header->item->deleteLater();
- delete d->header;
- d->header = 0;
- }
- d->headerComponent = header;
- d->minExtentDirty = true;
- d->maxExtentDirty = true;
- if (isComponentComplete()) {
- d->updateHeader();
- d->updateFooter();
- d->updateViewport();
- d->fixupPosition();
- }
- emit headerChanged();
- }
-}
-
-void QDeclarative1ListView::setContentX(qreal pos)
-{
- Q_D(QDeclarative1ListView);
- // Positioning the view manually should override any current movement state
- d->moveReason = QDeclarative1ListViewPrivate::Other;
- QDeclarative1Flickable::setContentX(pos);
-}
-
-void QDeclarative1ListView::setContentY(qreal pos)
-{
- Q_D(QDeclarative1ListView);
- // Positioning the view manually should override any current movement state
- d->moveReason = QDeclarative1ListViewPrivate::Other;
- QDeclarative1Flickable::setContentY(pos);
-}
-
-bool QDeclarative1ListView::event(QEvent *event)
-{
- Q_D(QDeclarative1ListView);
- if (event->type() == QEvent::User) {
- if (d->layoutScheduled)
- d->layout();
- return true;
- }
-
- return QDeclarative1Flickable::event(event);
-}
-
-void QDeclarative1ListView::viewportMoved()
-{
- Q_D(QDeclarative1ListView);
- QDeclarative1Flickable::viewportMoved();
- if (!d->itemCount)
- return;
- // Recursion can occur due to refill changing the content size.
- if (d->inViewportMoved)
- return;
- d->inViewportMoved = true;
- d->lazyRelease = true;
- refill();
- if (d->hData.flicking || d->vData.flicking || d->hData.moving || d->vData.moving)
- d->moveReason = QDeclarative1ListViewPrivate::Mouse;
- if (d->moveReason != QDeclarative1ListViewPrivate::SetIndex) {
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange && d->highlight) {
- // reposition highlight
- qreal pos = d->highlight->position();
- qreal viewPos;
- qreal highlightStart;
- qreal highlightEnd;
- if (d->isRightToLeft()) {
- // Handle Right-To-Left exceptions
- viewPos = -d->position()-d->size();
- highlightStart = d->highlightRangeStartValid ? d->size()-d->highlightRangeEnd : d->highlightRangeStart;
- highlightEnd = d->highlightRangeEndValid ? d->size()-d->highlightRangeStart : d->highlightRangeEnd;
- } else {
- viewPos = d->position();
- highlightStart = d->highlightRangeStart;
- highlightEnd = d->highlightRangeEnd;
- }
- if (pos > viewPos + highlightEnd - d->highlight->size())
- pos = viewPos + highlightEnd - d->highlight->size();
- if (pos < viewPos + highlightStart)
- pos = viewPos + highlightStart;
- d->highlightPosAnimator->stop();
- d->highlight->setPosition(qRound(pos));
-
- // update current index
- if (FxListItem1 *snapItem = d->snapItemAt(d->highlight->position())) {
- if (snapItem->index >= 0 && snapItem->index != d->currentIndex)
- d->updateCurrent(snapItem->index);
- }
- }
- }
-
- if ((d->hData.flicking || d->vData.flicking) && d->correctFlick && !d->inFlickCorrection) {
- d->inFlickCorrection = true;
- // Near an end and it seems that the extent has changed?
- // Recalculate the flick so that we don't end up in an odd position.
- if (yflick() && !d->vData.inOvershoot) {
- if (d->vData.velocity > 0) {
- const qreal minY = minYExtent();
- if ((minY - d->vData.move.value() < height()/2 || d->vData.flickTarget - d->vData.move.value() < height()/2)
- && minY != d->vData.flickTarget)
- d->flickY(-d->vData.smoothVelocity.value());
- d->bufferMode = QDeclarative1ListViewPrivate::BufferBefore;
- } else if (d->vData.velocity < 0) {
- const qreal maxY = maxYExtent();
- if ((d->vData.move.value() - maxY < height()/2 || d->vData.move.value() - d->vData.flickTarget < height()/2)
- && maxY != d->vData.flickTarget)
- d->flickY(-d->vData.smoothVelocity.value());
- d->bufferMode = QDeclarative1ListViewPrivate::BufferAfter;
- }
- }
-
- if (xflick() && !d->hData.inOvershoot) {
- if (d->hData.velocity > 0) {
- const qreal minX = minXExtent();
- if ((minX - d->hData.move.value() < width()/2 || d->hData.flickTarget - d->hData.move.value() < width()/2)
- && minX != d->hData.flickTarget)
- d->flickX(-d->hData.smoothVelocity.value());
- d->bufferMode = d->isRightToLeft()
- ? QDeclarative1ListViewPrivate::BufferAfter : QDeclarative1ListViewPrivate::BufferBefore;
- } else if (d->hData.velocity < 0) {
- const qreal maxX = maxXExtent();
- if ((d->hData.move.value() - maxX < width()/2 || d->hData.move.value() - d->hData.flickTarget < width()/2)
- && maxX != d->hData.flickTarget)
- d->flickX(-d->hData.smoothVelocity.value());
- d->bufferMode = d->isRightToLeft()
- ? QDeclarative1ListViewPrivate::BufferBefore : QDeclarative1ListViewPrivate::BufferAfter;
- }
- }
- d->inFlickCorrection = false;
- }
- d->inViewportMoved = false;
-}
-
-qreal QDeclarative1ListView::minYExtent() const
-{
- Q_D(const QDeclarative1ListView);
- if (d->orient == QDeclarative1ListView::Horizontal)
- return QDeclarative1Flickable::minYExtent();
- if (d->minExtentDirty) {
- d->minExtent = -d->startPosition();
- if (d->header && d->visibleItems.count())
- d->minExtent += d->header->size();
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- d->minExtent += d->highlightRangeStart;
- if (d->sectionCriteria) {
- if (d->visibleItem(0))
- d->minExtent -= d->visibleItem(0)->sectionSize();
- }
- d->minExtent = qMax(d->minExtent, -(d->endPositionAt(0) - d->highlightRangeEnd + 1));
- }
- d->minExtentDirty = false;
- }
-
- return d->minExtent;
-}
-
-qreal QDeclarative1ListView::maxYExtent() const
-{
- Q_D(const QDeclarative1ListView);
- if (d->orient == QDeclarative1ListView::Horizontal)
- return height();
- if (d->maxExtentDirty) {
- if (!d->model || !d->model->count()) {
- d->maxExtent = d->header ? -d->header->size() : 0;
- d->maxExtent += height();
- } else if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- d->maxExtent = -(d->positionAt(d->model->count()-1) - d->highlightRangeStart);
- if (d->highlightRangeEnd != d->highlightRangeStart)
- d->maxExtent = qMin(d->maxExtent, -(d->endPosition() - d->highlightRangeEnd + 1));
- } else {
- d->maxExtent = -(d->endPosition() - height() + 1);
- }
- if (d->footer)
- d->maxExtent -= d->footer->size();
- qreal minY = minYExtent();
- if (d->maxExtent > minY)
- d->maxExtent = minY;
- d->maxExtentDirty = false;
- }
- return d->maxExtent;
-}
-
-qreal QDeclarative1ListView::minXExtent() const
-{
- Q_D(const QDeclarative1ListView);
- if (d->orient == QDeclarative1ListView::Vertical)
- return QDeclarative1Flickable::minXExtent();
- if (d->minExtentDirty) {
- d->minExtent = -d->startPosition();
-
- qreal highlightStart;
- qreal highlightEnd;
- qreal endPositionFirstItem = 0;
- if (d->isRightToLeft()) {
- if (d->model && d->model->count())
- endPositionFirstItem = d->positionAt(d->model->count()-1);
- else if (d->header)
- d->minExtent += d->header->size();
- highlightStart = d->highlightRangeStartValid
- ? d->highlightRangeStart - (d->lastPosition()-endPositionFirstItem)
- : d->size() - (d->lastPosition()-endPositionFirstItem);
- highlightEnd = d->highlightRangeEndValid ? d->highlightRangeEnd : d->size();
- if (d->footer)
- d->minExtent += d->footer->size();
- qreal maxX = maxXExtent();
- if (d->minExtent < maxX)
- d->minExtent = maxX;
- } else {
- endPositionFirstItem = d->endPositionAt(0);
- highlightStart = d->highlightRangeStart;
- highlightEnd = d->highlightRangeEnd;
- if (d->header && d->visibleItems.count())
- d->minExtent += d->header->size();
- }
- if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- d->minExtent += d->isRightToLeft() ? -highlightStart : highlightStart;
- d->minExtent = qMax(d->minExtent, -(endPositionFirstItem - highlightEnd + 1));
- }
- d->minExtentDirty = false;
- }
-
- return d->minExtent;
-}
-
-qreal QDeclarative1ListView::maxXExtent() const
-{
- Q_D(const QDeclarative1ListView);
- if (d->orient == QDeclarative1ListView::Vertical)
- return width();
- if (d->maxExtentDirty) {
- qreal highlightStart;
- qreal highlightEnd;
- qreal lastItemPosition = 0;
- d->maxExtent = 0;
- if (d->isRightToLeft()) {
- highlightStart = d->highlightRangeStartValid ? d->highlightRangeEnd : d->size();
- highlightEnd = d->highlightRangeEndValid ? d->highlightRangeStart : d->size();
- lastItemPosition = d->endPosition();
- } else {
- highlightStart = d->highlightRangeStart;
- highlightEnd = d->highlightRangeEnd;
- if (d->model && d->model->count())
- lastItemPosition = d->positionAt(d->model->count()-1);
- }
- if (!d->model || !d->model->count()) {
- if (!d->isRightToLeft())
- d->maxExtent = d->header ? -d->header->size() : 0;
- d->maxExtent += width();
- } else if (d->haveHighlightRange && d->highlightRange == StrictlyEnforceRange) {
- d->maxExtent = -(lastItemPosition - highlightStart);
- if (highlightEnd != highlightStart) {
- d->maxExtent = d->isRightToLeft()
- ? qMax(d->maxExtent, -(d->endPosition() - highlightEnd + 1))
- : qMin(d->maxExtent, -(d->endPosition() - highlightEnd + 1));
- }
- } else {
- d->maxExtent = -(d->endPosition() - width() + 1);
- }
- if (d->isRightToLeft()) {
- if (d->header && d->visibleItems.count())
- d->maxExtent -= d->header->size();
- } else {
- if (d->footer)
- d->maxExtent -= d->footer->size();
- qreal minX = minXExtent();
- if (d->maxExtent > minX)
- d->maxExtent = minX;
- }
- d->maxExtentDirty = false;
- }
- return d->maxExtent;
-}
-
-void QDeclarative1ListView::keyPressEvent(QKeyEvent *event)
-{
- Q_D(QDeclarative1ListView);
- keyPressPreHandler(event);
- if (event->isAccepted())
- return;
-
- if (d->model && d->model->count() && d->interactive) {
- if ((d->orient == QDeclarative1ListView::Horizontal && !d->isRightToLeft() && event->key() == Qt::Key_Left)
- || (d->orient == QDeclarative1ListView::Horizontal && d->isRightToLeft() && event->key() == Qt::Key_Right)
- || (d->orient == QDeclarative1ListView::Vertical && event->key() == Qt::Key_Up)) {
- if (currentIndex() > 0 || (d->wrap && !event->isAutoRepeat())) {
- decrementCurrentIndex();
- event->accept();
- return;
- } else if (d->wrap) {
- event->accept();
- return;
- }
- } else if ((d->orient == QDeclarative1ListView::Horizontal && !d->isRightToLeft() && event->key() == Qt::Key_Right)
- || (d->orient == QDeclarative1ListView::Horizontal && d->isRightToLeft() && event->key() == Qt::Key_Left)
- || (d->orient == QDeclarative1ListView::Vertical && event->key() == Qt::Key_Down)) {
- if (currentIndex() < d->model->count() - 1 || (d->wrap && !event->isAutoRepeat())) {
- incrementCurrentIndex();
- event->accept();
- return;
- } else if (d->wrap) {
- event->accept();
- return;
- }
- }
- }
- event->ignore();
- QDeclarative1Flickable::keyPressEvent(event);
-}
-
-void QDeclarative1ListView::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- Q_D(QDeclarative1ListView);
- d->maxExtentDirty = true;
- d->minExtentDirty = true;
- if (d->isRightToLeft() && d->orient == QDeclarative1ListView::Horizontal) {
- // maintain position relative to the right edge
- int dx = newGeometry.width() - oldGeometry.width();
- setContentX(contentX() - dx);
- }
- QDeclarative1Flickable::geometryChanged(newGeometry, oldGeometry);
-}
-
-
-/*!
- \qmlmethod QtQuick1::ListView::incrementCurrentIndex()
-
- Increments the current index. The current index will wrap
- if keyNavigationWraps is true and it is currently at the end.
- This method has no effect if the \l count is zero.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-void QDeclarative1ListView::incrementCurrentIndex()
-{
- Q_D(QDeclarative1ListView);
- int count = d->model ? d->model->count() : 0;
- if (count && (currentIndex() < count - 1 || d->wrap)) {
- d->moveReason = QDeclarative1ListViewPrivate::SetIndex;
- int index = currentIndex()+1;
- setCurrentIndex((index >= 0 && index < count) ? index : 0);
- }
-}
-
-/*!
- \qmlmethod QtQuick1::ListView::decrementCurrentIndex()
-
- Decrements the current index. The current index will wrap
- if keyNavigationWraps is true and it is currently at the beginning.
- This method has no effect if the \l count is zero.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-void QDeclarative1ListView::decrementCurrentIndex()
-{
- Q_D(QDeclarative1ListView);
- int count = d->model ? d->model->count() : 0;
- if (count && (currentIndex() > 0 || d->wrap)) {
- d->moveReason = QDeclarative1ListViewPrivate::SetIndex;
- int index = currentIndex()-1;
- setCurrentIndex((index >= 0 && index < count) ? index : count-1);
- }
-}
-
-void QDeclarative1ListViewPrivate::positionViewAtIndex(int index, int mode)
-{
- Q_Q(QDeclarative1ListView);
- if (!isValid())
- return;
- if (mode < QDeclarative1ListView::Beginning || mode > QDeclarative1ListView::Contain)
- return;
- int idx = qMax(qMin(index, model->count()-1), 0);
-
- if (layoutScheduled)
- layout();
- qreal pos = isRightToLeft() ? -position() - size() : position();
- FxListItem1 *item = visibleItem(idx);
- qreal maxExtent;
- if (orient == QDeclarative1ListView::Vertical)
- maxExtent = -q->maxYExtent();
- else
- maxExtent = isRightToLeft() ? q->minXExtent()-size(): -q->maxXExtent();
-
- if (!item) {
- int itemPos = positionAt(idx);
- // save the currently visible items in case any of them end up visible again
- QList<FxListItem1*> oldVisible = visibleItems;
- visibleItems.clear();
- visiblePos = itemPos;
- visibleIndex = idx;
- setPosition(qMin(qreal(itemPos), maxExtent));
- // now release the reference to all the old visible items.
- for (int i = 0; i < oldVisible.count(); ++i)
- releaseItem(oldVisible.at(i));
- item = visibleItem(idx);
- }
- if (item) {
- const qreal itemPos = item->position();
- switch (mode) {
- case QDeclarative1ListView::Beginning:
- pos = itemPos;
- if (index < 0 && header)
- pos -= header->size();
- break;
- case QDeclarative1ListView::Center:
- pos = itemPos - (size() - item->size())/2;
- break;
- case QDeclarative1ListView::End:
- pos = itemPos - size() + item->size();
- if (index >= model->count() && footer)
- pos += footer->size();
- break;
- case QDeclarative1ListView::Visible:
- if (itemPos > pos + size())
- pos = itemPos - size() + item->size();
- else if (item->endPosition() < pos)
- pos = itemPos;
- break;
- case QDeclarative1ListView::Contain:
- if (item->endPosition() > pos + size())
- pos = itemPos - size() + item->size();
- if (itemPos < pos)
- pos = itemPos;
- }
- pos = qMin(pos, maxExtent);
- qreal minExtent;
- if (orient == QDeclarative1ListView::Vertical) {
- minExtent = -q->minYExtent();
- } else {
- minExtent = isRightToLeft() ? q->maxXExtent()-size(): -q->minXExtent();
- }
- pos = qMax(pos, minExtent);
- moveReason = QDeclarative1ListViewPrivate::Other;
- q->cancelFlick();
- setPosition(pos);
- if (highlight) {
- if (autoHighlight) {
- highlight->setPosition(currentItem->itemPosition());
- highlight->setSize(currentItem->itemSize());
- }
- updateHighlight();
- }
- }
- fixupPosition();
-}
-
-/*!
- \qmlmethod QtQuick1::ListView::positionViewAtIndex(int index, PositionMode mode)
-
- Positions the view such that the \a index is at the position specified by
- \a mode:
-
- \list
- \o ListView.Beginning - position item at the top (or left for horizontal orientation) of the view.
- \o ListView.Center - position item in the center of the view.
- \o ListView.End - position item at bottom (or right for horizontal orientation) of the view.
- \o ListView.Visible - if any part of the item is visible then take no action, otherwise
- bring the item into view.
- \o ListView.Contain - ensure the entire item is visible. If the item is larger than
- the view the item is positioned at the top (or left for horizontal orientation) of the view.
- \endlist
-
- If positioning the view at \a index would cause empty space to be displayed at
- the beginning or end of the view, the view will be positioned at the boundary.
-
- It is not recommended to use \l {Flickable::}{contentX} or \l {Flickable::}{contentY} to position the view
- at a particular index. This is unreliable since removing items from the start
- of the list does not cause all other items to be repositioned, and because
- the actual start of the view can vary based on the size of the delegates.
- The correct way to bring an item into view is with \c positionViewAtIndex.
-
- \bold Note: methods should only be called after the Component has completed. To position
- the view at startup, this method should be called by Component.onCompleted. For
- example, to position the view at the end:
-
- \code
- Component.onCompleted: positionViewAtIndex(count - 1, ListView.Beginning)
- \endcode
-*/
-void QDeclarative1ListView::positionViewAtIndex(int index, int mode)
-{
- Q_D(QDeclarative1ListView);
- if (!d->isValid() || index < 0 || index >= d->model->count())
- return;
- d->positionViewAtIndex(index, mode);
-}
-
-/*!
- \qmlmethod QtQuick1::ListView::positionViewAtBeginning()
- \qmlmethod QtQuick1::ListView::positionViewAtEnd()
- \since Quick 1.1
-
- Positions the view at the beginning or end, taking into account any header or footer.
-
- It is not recommended to use \l {Flickable::}{contentX} or \l {Flickable::}{contentY} to position the view
- at a particular index. This is unreliable since removing items from the start
- of the list does not cause all other items to be repositioned, and because
- the actual start of the view can vary based on the size of the delegates.
-
- \bold Note: methods should only be called after the Component has completed. To position
- the view at startup, this method should be called by Component.onCompleted. For
- example, to position the view at the end on startup:
-
- \code
- Component.onCompleted: positionViewAtEnd()
- \endcode
-*/
-void QDeclarative1ListView::positionViewAtBeginning()
-{
- Q_D(QDeclarative1ListView);
- if (!d->isValid())
- return;
- d->positionViewAtIndex(-1, Beginning);
-}
-
-void QDeclarative1ListView::positionViewAtEnd()
-{
- Q_D(QDeclarative1ListView);
- if (!d->isValid())
- return;
- d->positionViewAtIndex(d->model->count(), End);
-}
-
-/*!
- \qmlmethod int QtQuick1::ListView::indexAt(int x, int y)
-
- Returns the index of the visible item containing the point \a x, \a y in content
- coordinates. If there is no item at the point specified, or the item is
- not visible -1 is returned.
-
- If the item is outside the visible area, -1 is returned, regardless of
- whether an item will exist at that point when scrolled into view.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-int QDeclarative1ListView::indexAt(qreal x, qreal y) const
-{
- Q_D(const QDeclarative1ListView);
- for (int i = 0; i < d->visibleItems.count(); ++i) {
- const FxListItem1 *listItem = d->visibleItems.at(i);
- if(listItem->contains(x, y))
- return listItem->index;
- }
-
- return -1;
-}
-
-void QDeclarative1ListView::componentComplete()
-{
- Q_D(QDeclarative1ListView);
- QDeclarative1Flickable::componentComplete();
- updateSections();
- d->updateHeader();
- d->updateFooter();
- if (d->isValid()) {
- refill();
- d->moveReason = QDeclarative1ListViewPrivate::SetIndex;
- if (d->currentIndex < 0 && !d->currentIndexCleared)
- d->updateCurrent(0);
- else
- d->updateCurrent(d->currentIndex);
- if (d->highlight && d->currentItem) {
- if (d->autoHighlight)
- d->highlight->setPosition(d->currentItem->position());
- d->updateTrackedItem();
- }
- d->moveReason = QDeclarative1ListViewPrivate::Other;
- d->fixupPosition();
- }
-}
-
-void QDeclarative1ListView::updateSections()
-{
- Q_D(QDeclarative1ListView);
- if (isComponentComplete() && d->model) {
- QList<QByteArray> roles;
- if (d->sectionCriteria && !d->sectionCriteria->property().isEmpty())
- roles << d->sectionCriteria->property().toUtf8();
- d->model->setWatchedRoles(roles);
- d->updateSections();
- if (d->itemCount)
- d->layout();
- }
-}
-
-void QDeclarative1ListView::refill()
-{
- Q_D(QDeclarative1ListView);
- if (d->isRightToLeft())
- d->refill(-d->position()-d->size()+1, -d->position());
- else
- d->refill(d->position(), d->position()+d->size()-1);
-}
-
-void QDeclarative1ListView::trackedPositionChanged()
-{
- Q_D(QDeclarative1ListView);
- if (!d->trackedItem || !d->currentItem)
- return;
- if (d->moveReason == QDeclarative1ListViewPrivate::SetIndex) {
- qreal trackedPos = qCeil(d->trackedItem->position());
- qreal trackedSize = d->trackedItem->size();
- if (d->trackedItem != d->currentItem) {
- trackedSize += d->currentItem->sectionSize();
- }
- qreal viewPos;
- qreal highlightStart;
- qreal highlightEnd;
- if (d->isRightToLeft()) {
- viewPos = -d->position()-d->size();
- highlightStart = d->highlightRangeStartValid ? d->size()-d->highlightRangeEnd : d->highlightRangeStart;
- highlightEnd = d->highlightRangeEndValid ? d->size()-d->highlightRangeStart : d->highlightRangeEnd;
- } else {
- viewPos = d->position();
- highlightStart = d->highlightRangeStart;
- highlightEnd = d->highlightRangeEnd;
- }
- qreal pos = viewPos;
- if (d->haveHighlightRange) {
- if (d->highlightRange == StrictlyEnforceRange) {
- if (trackedPos > pos + highlightEnd - d->trackedItem->size())
- pos = trackedPos - highlightEnd + d->trackedItem->size();
- if (trackedPos < pos + highlightStart)
- pos = trackedPos - highlightStart;
- } else {
- if (trackedPos < d->startPosition() + highlightStart) {
- pos = d->startPosition();
- } else if (d->trackedItem->endPosition() > d->endPosition() - d->size() + highlightEnd) {
- pos = d->endPosition() - d->size() + 1;
- if (pos < d->startPosition())
- pos = d->startPosition();
- } else {
- if (trackedPos > pos + highlightEnd - trackedSize)
- pos = trackedPos - highlightEnd + trackedSize;
- if (trackedPos < pos + highlightStart)
- pos = trackedPos - highlightStart;
- }
- }
- } else {
- if (trackedPos < viewPos && d->currentItem->position() < viewPos) {
- pos = d->currentItem->position() < trackedPos ? trackedPos : d->currentItem->position();
- } else if (d->trackedItem->endPosition() >= viewPos + d->size()
- && d->currentItem->endPosition() >= viewPos + d->size()) {
- if (d->trackedItem->endPosition() <= d->currentItem->endPosition()) {
- pos = d->trackedItem->endPosition() - d->size() + 1;
- if (trackedSize > d->size())
- pos = trackedPos;
- } else {
- pos = d->currentItem->endPosition() - d->size() + 1;
- if (d->currentItem->size() > d->size())
- pos = d->currentItem->position();
- }
- }
- }
- if (viewPos != pos) {
- cancelFlick();
- d->calcVelocity = true;
- d->setPosition(pos);
- d->calcVelocity = false;
- }
- }
-}
-
-void QDeclarative1ListView::itemsInserted(int modelIndex, int count)
-{
- Q_D(QDeclarative1ListView);
- if (!isComponentComplete() || !d->model || !d->model->isValid())
- return;
- d->updateUnrequestedIndexes();
- d->moveReason = QDeclarative1ListViewPrivate::Other;
-
- qreal tempPos = d->isRightToLeft() ? -d->position()-d->size() : d->position();
- int index = d->visibleItems.count() ? d->mapFromModel(modelIndex) : 0;
-
- if (index < 0) {
- int i = d->visibleItems.count() - 1;
- while (i > 0 && d->visibleItems.at(i)->index == -1)
- --i;
- if (i == 0 && d->visibleItems.first()->index == -1) {
- // there are no visible items except items marked for removal
- index = d->visibleItems.count();
- } else if (d->visibleItems.at(i)->index + 1 == modelIndex
- && d->visibleItems.at(i)->endPosition() < d->buffer+tempPos+d->size()-1) {
- // Special case of appending an item to the model.
- index = d->visibleItems.count();
- } else {
- if (modelIndex < d->visibleIndex) {
- // Insert before visible items
- d->visibleIndex += count;
- for (int i = 0; i < d->visibleItems.count(); ++i) {
- FxListItem1 *listItem = d->visibleItems.at(i);
- if (listItem->index != -1 && listItem->index >= modelIndex)
- listItem->index += count;
- }
- }
- if (d->currentIndex >= modelIndex) {
- // adjust current item index
- d->currentIndex += count;
- if (d->currentItem)
- d->currentItem->index = d->currentIndex;
- emit currentIndexChanged();
- }
- d->scheduleLayout();
- d->itemCount += count;
- emit countChanged();
- return;
- }
- }
-
- // index can be the next item past the end of the visible items list (i.e. appended)
- int pos = 0;
- if (d->visibleItems.count()) {
- pos = index < d->visibleItems.count() ? d->visibleItems.at(index)->position()
- : d->visibleItems.last()->endPosition()+d->spacing+1;
- } else if (d->itemCount == 0 && d->header) {
- pos = d->header->size();
- }
-
- int initialPos = pos;
- int diff = 0;
- QList<FxListItem1*> added;
- bool addedVisible = false;
- FxListItem1 *firstVisible = d->firstVisibleItem();
- if (firstVisible && pos < firstVisible->position()) {
- // Insert items before the visible item.
- int insertionIdx = index;
- int i = 0;
- int from = tempPos - d->buffer;
- for (i = count-1; i >= 0 && pos > from; --i) {
- if (!addedVisible) {
- d->scheduleLayout();
- addedVisible = true;
- }
- FxListItem1 *item = d->createItem(modelIndex + i);
- d->visibleItems.insert(insertionIdx, item);
- pos -= item->size() + d->spacing;
- item->setPosition(pos);
- index++;
- }
- if (i >= 0) {
- // If we didn't insert all our new items - anything
- // before the current index is not visible - remove it.
- while (insertionIdx--) {
- FxListItem1 *item = d->visibleItems.takeFirst();
- if (item->index != -1)
- d->visibleIndex++;
- d->releaseItem(item);
- }
- } else {
- // adjust pos of items before inserted items.
- for (int i = insertionIdx-1; i >= 0; i--) {
- FxListItem1 *listItem = d->visibleItems.at(i);
- listItem->setPosition(listItem->position() - (initialPos - pos));
- }
- }
- } else {
- int i = 0;
- int to = d->buffer+tempPos+d->size();
- for (i = 0; i < count && pos <= to; ++i) {
- if (!addedVisible) {
- d->scheduleLayout();
- addedVisible = true;
- }
- FxListItem1 *item = d->createItem(modelIndex + i);
- d->visibleItems.insert(index, item);
- item->setPosition(pos);
- added.append(item);
- pos += item->size() + d->spacing;
- ++index;
- }
- if (i != count) {
- // We didn't insert all our new items, which means anything
- // beyond the current index is not visible - remove it.
- while (d->visibleItems.count() > index)
- d->releaseItem(d->visibleItems.takeLast());
- }
- diff = pos - initialPos;
- }
- if (d->itemCount && d->currentIndex >= modelIndex) {
- // adjust current item index
- d->currentIndex += count;
- if (d->currentItem) {
- d->currentItem->index = d->currentIndex;
- d->currentItem->setPosition(d->currentItem->position() + diff);
- }
- emit currentIndexChanged();
- } else if (!d->itemCount && (!d->currentIndex || (d->currentIndex < 0 && !d->currentIndexCleared))) {
- d->updateCurrent(0);
- }
- // Update the indexes of the following visible items.
- for (; index < d->visibleItems.count(); ++index) {
- FxListItem1 *listItem = d->visibleItems.at(index);
- if (d->currentItem && listItem->item != d->currentItem->item)
- listItem->setPosition(listItem->position() + diff);
- if (listItem->index != -1)
- listItem->index += count;
- }
- // everything is in order now - emit add() signal
- for (int j = 0; j < added.count(); ++j)
- added.at(j)->attached->emitAdd();
-
- d->updateSections();
- d->itemCount += count;
- emit countChanged();
-}
-
-void QDeclarative1ListView::itemsRemoved(int modelIndex, int count)
-{
- Q_D(QDeclarative1ListView);
- if (!isComponentComplete() || !d->model || !d->model->isValid())
- return;
- d->moveReason = QDeclarative1ListViewPrivate::Other;
- d->updateUnrequestedIndexes();
- d->itemCount -= count;
-
- FxListItem1 *firstVisible = d->firstVisibleItem();
- int preRemovedSize = 0;
- bool removedVisible = false;
- // Remove the items from the visible list, skipping anything already marked for removal
- QList<FxListItem1*>::Iterator it = d->visibleItems.begin();
- while (it != d->visibleItems.end()) {
- FxListItem1 *item = *it;
- if (item->index == -1 || item->index < modelIndex) {
- // already removed, or before removed items
- ++it;
- } else if (item->index >= modelIndex + count) {
- // after removed items
- item->index -= count;
- ++it;
- } else {
- // removed item
- if (!removedVisible) {
- d->scheduleLayout();
- removedVisible = true;
- }
- item->attached->emitRemove();
- if (item->attached->delayRemove()) {
- item->index = -1;
- connect(item->attached, SIGNAL(delayRemoveChanged()), this, SLOT(destroyRemoved()), Qt::QueuedConnection);
- ++it;
- } else {
- if (item == firstVisible)
- firstVisible = 0;
- if (firstVisible && item->position() < firstVisible->position())
- preRemovedSize += item->size();
- it = d->visibleItems.erase(it);
- d->releaseItem(item);
- }
- }
- }
-
- if (firstVisible && d->visibleItems.first() != firstVisible)
- d->visibleItems.first()->setPosition(d->visibleItems.first()->position() + preRemovedSize);
-
- // update visibleIndex
- bool haveVisibleIndex = false;
- for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) {
- if ((*it)->index != -1) {
- d->visibleIndex = (*it)->index;
- haveVisibleIndex = true;
- break;
- }
- }
-
- // fix current
- if (d->currentIndex >= modelIndex + count) {
- d->currentIndex -= count;
- if (d->currentItem)
- d->currentItem->index -= count;
- emit currentIndexChanged();
- } else if (d->currentIndex >= modelIndex && d->currentIndex < modelIndex + count) {
- // current item has been removed.
- d->currentItem->attached->setIsCurrentItem(false);
- d->releaseItem(d->currentItem);
- d->currentItem = 0;
- d->currentIndex = -1;
- if (d->itemCount)
- d->updateCurrent(qMin(modelIndex, d->itemCount-1));
- else
- emit currentIndexChanged();
- }
-
- if (!haveVisibleIndex) {
- d->timeline.clear();
- if (removedVisible && d->itemCount == 0) {
- d->visibleIndex = 0;
- d->visiblePos = d->header ? d->header->size() : 0;
- d->setPosition(0);
- d->updateHeader();
- d->updateFooter();
- update();
- } else {
- if (modelIndex < d->visibleIndex)
- d->visibleIndex = modelIndex+1;
- d->visibleIndex = qMax(qMin(d->visibleIndex, d->itemCount-1), 0);
- }
- }
-
- d->updateSections();
- emit countChanged();
-}
-
-void QDeclarative1ListView::destroyRemoved()
-{
- Q_D(QDeclarative1ListView);
- for (QList<FxListItem1*>::Iterator it = d->visibleItems.begin();
- it != d->visibleItems.end();) {
- FxListItem1 *listItem = *it;
- if (listItem->index == -1 && listItem->attached->delayRemove() == false) {
- d->releaseItem(listItem);
- it = d->visibleItems.erase(it);
- } else {
- ++it;
- }
- }
-
- // Correct the positioning of the items
- d->updateSections();
- d->layout();
-}
-
-void QDeclarative1ListView::itemsMoved(int from, int to, int count)
-{
- Q_D(QDeclarative1ListView);
- if (!isComponentComplete() || !d->isValid())
- return;
- d->updateUnrequestedIndexes();
-
- if (d->visibleItems.isEmpty()) {
- refill();
- return;
- }
-
- d->moveReason = QDeclarative1ListViewPrivate::Other;
- FxListItem1 *firstVisible = d->firstVisibleItem();
- qreal firstItemPos = firstVisible->position();
- QHash<int,FxListItem1*> moved;
- int moveBy = 0;
-
- QList<FxListItem1*>::Iterator it = d->visibleItems.begin();
- while (it != d->visibleItems.end()) {
- FxListItem1 *item = *it;
- if (item->index >= from && item->index < from + count) {
- // take the items that are moving
- item->index += (to-from);
- moved.insert(item->index, item);
- if (item->position() < firstItemPos)
- moveBy += item->size();
- it = d->visibleItems.erase(it);
- } else {
- // move everything after the moved items.
- if (item->index > from && item->index != -1)
- item->index -= count;
- ++it;
- }
- }
-
- int remaining = count;
- int endIndex = d->visibleIndex;
- it = d->visibleItems.begin();
- while (it != d->visibleItems.end()) {
- FxListItem1 *item = *it;
- if (remaining && item->index >= to && item->index < to + count) {
- // place items in the target position, reusing any existing items
- FxListItem1 *movedItem = moved.take(item->index);
- if (!movedItem)
- movedItem = d->createItem(item->index);
- if (item->index <= firstVisible->index)
- moveBy -= movedItem->size();
- it = d->visibleItems.insert(it, movedItem);
- ++it;
- --remaining;
- } else {
- if (item->index != -1) {
- if (item->index >= to) {
- // update everything after the moved items.
- item->index += count;
- }
- endIndex = item->index;
- }
- ++it;
- }
- }
-
- // If we have moved items to the end of the visible items
- // then add any existing moved items that we have
- while (FxListItem1 *item = moved.take(endIndex+1)) {
- d->visibleItems.append(item);
- ++endIndex;
- }
-
- // update visibleIndex
- for (it = d->visibleItems.begin(); it != d->visibleItems.end(); ++it) {
- if ((*it)->index != -1) {
- d->visibleIndex = (*it)->index;
- break;
- }
- }
-
- // Fix current index
- if (d->currentIndex >= 0 && d->currentItem) {
- int oldCurrent = d->currentIndex;
- d->currentIndex = d->model->indexOf(d->currentItem->item, this);
- if (oldCurrent != d->currentIndex) {
- d->currentItem->index = d->currentIndex;
- emit currentIndexChanged();
- }
- }
-
- // Whatever moved items remain are no longer visible items.
- while (moved.count()) {
- int idx = moved.begin().key();
- FxListItem1 *item = moved.take(idx);
- if (d->currentItem && item->item == d->currentItem->item)
- item->setPosition(d->positionAt(idx));
- d->releaseItem(item);
- }
-
- // Ensure we don't cause an ugly list scroll.
- d->visibleItems.first()->setPosition(d->visibleItems.first()->position() + moveBy);
-
- d->updateSections();
- d->layout();
-}
-
-void QDeclarative1ListView::itemsChanged(int, int)
-{
- Q_D(QDeclarative1ListView);
- d->updateSections();
- d->layout();
-}
-
-void QDeclarative1ListView::modelReset()
-{
- Q_D(QDeclarative1ListView);
- d->moveReason = QDeclarative1ListViewPrivate::SetIndex;
- d->regenerate();
- if (d->highlight && d->currentItem) {
- if (d->autoHighlight)
- d->highlight->setPosition(d->currentItem->position());
- d->updateTrackedItem();
- }
- d->moveReason = QDeclarative1ListViewPrivate::Other;
- emit countChanged();
-}
-
-void QDeclarative1ListView::createdItem(int index, QDeclarativeItem *item)
-{
- Q_D(QDeclarative1ListView);
- if (d->requestedIndex != index) {
- item->setParentItem(contentItem());
- d->unrequestedItems.insert(item, index);
- if (d->orient == QDeclarative1ListView::Vertical) {
- item->setY(d->positionAt(index));
- } else {
- if (d->isRightToLeft())
- item->setX(-d->positionAt(index)-item->width());
- else
- item->setX(d->positionAt(index));
- }
- }
-}
-
-void QDeclarative1ListView::destroyingItem(QDeclarativeItem *item)
-{
- Q_D(QDeclarative1ListView);
- d->unrequestedItems.remove(item);
-}
-
-void QDeclarative1ListView::animStopped()
-{
- Q_D(QDeclarative1ListView);
- d->bufferMode = QDeclarative1ListViewPrivate::NoBuffer;
- if (d->haveHighlightRange && d->highlightRange == QDeclarative1ListView::StrictlyEnforceRange)
- d->updateHighlight();
-}
-
-QDeclarative1ListViewAttached *QDeclarative1ListView::qmlAttachedProperties(QObject *obj)
-{
- return new QDeclarative1ListViewAttached(obj);
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativelistview_p.h b/src/qtquick1/graphicsitems/qdeclarativelistview_p.h
deleted file mode 100644
index 41d997fc08..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativelistview_p.h
+++ /dev/null
@@ -1,370 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVELISTVIEW_H
-#define QDECLARATIVELISTVIEW_H
-
-#include "private/qdeclarativeflickable_p.h"
-#include "QtDeclarative/private/qdeclarativeguard_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class Q_AUTOTEST_EXPORT QDeclarative1ViewSection : public QObject
-{
- Q_OBJECT
- Q_PROPERTY(QString property READ property WRITE setProperty NOTIFY propertyChanged)
- Q_PROPERTY(SectionCriteria criteria READ criteria WRITE setCriteria NOTIFY criteriaChanged)
- Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
- Q_ENUMS(SectionCriteria)
-public:
- QDeclarative1ViewSection(QObject *parent=0) : QObject(parent), m_criteria(FullString), m_delegate(0) {}
-
- QString property() const { return m_property; }
- void setProperty(const QString &);
-
- enum SectionCriteria { FullString, FirstCharacter };
- SectionCriteria criteria() const { return m_criteria; }
- void setCriteria(SectionCriteria);
-
- QDeclarativeComponent *delegate() const { return m_delegate; }
- void setDelegate(QDeclarativeComponent *delegate);
-
- QString sectionString(const QString &value);
-
-Q_SIGNALS:
- void propertyChanged();
- void criteriaChanged();
- void delegateChanged();
-
-private:
- QString m_property;
- SectionCriteria m_criteria;
- QDeclarativeComponent *m_delegate;
-};
-
-
-class QDeclarative1VisualModel;
-class QDeclarative1ListViewAttached;
-class QDeclarative1ListViewPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1ListView : public QDeclarative1Flickable
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1ListView)
-
- Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged)
- Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
- Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
- Q_PROPERTY(QDeclarativeItem *currentItem READ currentItem NOTIFY currentIndexChanged)
- Q_PROPERTY(int count READ count NOTIFY countChanged)
-
- Q_PROPERTY(QDeclarativeComponent *highlight READ highlight WRITE setHighlight NOTIFY highlightChanged)
- Q_PROPERTY(QDeclarativeItem *highlightItem READ highlightItem NOTIFY highlightItemChanged)
- Q_PROPERTY(bool highlightFollowsCurrentItem READ highlightFollowsCurrentItem WRITE setHighlightFollowsCurrentItem NOTIFY highlightFollowsCurrentItemChanged)
- Q_PROPERTY(qreal highlightMoveSpeed READ highlightMoveSpeed WRITE setHighlightMoveSpeed NOTIFY highlightMoveSpeedChanged)
- Q_PROPERTY(int highlightMoveDuration READ highlightMoveDuration WRITE setHighlightMoveDuration NOTIFY highlightMoveDurationChanged)
- Q_PROPERTY(qreal highlightResizeSpeed READ highlightResizeSpeed WRITE setHighlightResizeSpeed NOTIFY highlightResizeSpeedChanged)
- Q_PROPERTY(int highlightResizeDuration READ highlightResizeDuration WRITE setHighlightResizeDuration NOTIFY highlightResizeDurationChanged)
-
- Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin NOTIFY preferredHighlightBeginChanged RESET resetPreferredHighlightBegin)
- Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd NOTIFY preferredHighlightEndChanged RESET resetPreferredHighlightEnd)
- Q_PROPERTY(HighlightRangeMode highlightRangeMode READ highlightRangeMode WRITE setHighlightRangeMode NOTIFY highlightRangeModeChanged)
-
- Q_PROPERTY(qreal spacing READ spacing WRITE setSpacing NOTIFY spacingChanged)
- Q_PROPERTY(Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged)
- Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1)
- Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1)
- Q_PROPERTY(bool keyNavigationWraps READ isWrapEnabled WRITE setWrapEnabled NOTIFY keyNavigationWrapsChanged)
- Q_PROPERTY(int cacheBuffer READ cacheBuffer WRITE setCacheBuffer NOTIFY cacheBufferChanged)
- Q_PROPERTY(QDeclarative1ViewSection *section READ sectionCriteria CONSTANT)
- Q_PROPERTY(QString currentSection READ currentSection NOTIFY currentSectionChanged)
-
- Q_PROPERTY(SnapMode snapMode READ snapMode WRITE setSnapMode NOTIFY snapModeChanged)
-
- Q_PROPERTY(QDeclarativeComponent *header READ header WRITE setHeader NOTIFY headerChanged)
- Q_PROPERTY(QDeclarativeComponent *footer READ footer WRITE setFooter NOTIFY footerChanged)
-
- Q_ENUMS(HighlightRangeMode)
- Q_ENUMS(Orientation)
- Q_ENUMS(SnapMode)
- Q_ENUMS(PositionMode)
- Q_CLASSINFO("DefaultProperty", "data")
-
-public:
- QDeclarative1ListView(QDeclarativeItem *parent=0);
- ~QDeclarative1ListView();
-
- QVariant model() const;
- void setModel(const QVariant &);
-
- QDeclarativeComponent *delegate() const;
- void setDelegate(QDeclarativeComponent *);
-
- int currentIndex() const;
- void setCurrentIndex(int idx);
-
- QDeclarativeItem *currentItem();
- QDeclarativeItem *highlightItem();
- int count() const;
-
- QDeclarativeComponent *highlight() const;
- void setHighlight(QDeclarativeComponent *highlight);
-
- bool highlightFollowsCurrentItem() const;
- void setHighlightFollowsCurrentItem(bool);
-
- enum HighlightRangeMode { NoHighlightRange, ApplyRange, StrictlyEnforceRange };
- HighlightRangeMode highlightRangeMode() const;
- void setHighlightRangeMode(HighlightRangeMode mode);
-
- qreal preferredHighlightBegin() const;
- void setPreferredHighlightBegin(qreal);
- void resetPreferredHighlightBegin();
-
- qreal preferredHighlightEnd() const;
- void setPreferredHighlightEnd(qreal);
- void resetPreferredHighlightEnd();
-
- qreal spacing() const;
- void setSpacing(qreal spacing);
-
- enum Orientation { Horizontal = Qt::Horizontal, Vertical = Qt::Vertical };
- Orientation orientation() const;
- void setOrientation(Orientation);
-
- Qt::LayoutDirection layoutDirection() const;
- void setLayoutDirection(Qt::LayoutDirection);
- Qt::LayoutDirection effectiveLayoutDirection() const;
-
- bool isWrapEnabled() const;
- void setWrapEnabled(bool);
-
- int cacheBuffer() const;
- void setCacheBuffer(int);
-
- QDeclarative1ViewSection *sectionCriteria();
- QString currentSection() const;
-
- qreal highlightMoveSpeed() const;
- void setHighlightMoveSpeed(qreal);
-
- int highlightMoveDuration() const;
- void setHighlightMoveDuration(int);
-
- qreal highlightResizeSpeed() const;
- void setHighlightResizeSpeed(qreal);
-
- int highlightResizeDuration() const;
- void setHighlightResizeDuration(int);
-
- enum SnapMode { NoSnap, SnapToItem, SnapOneItem };
- SnapMode snapMode() const;
- void setSnapMode(SnapMode mode);
-
- QDeclarativeComponent *footer() const;
- void setFooter(QDeclarativeComponent *);
-
- QDeclarativeComponent *header() const;
- void setHeader(QDeclarativeComponent *);
-
- virtual void setContentX(qreal pos);
- virtual void setContentY(qreal pos);
-
- static QDeclarative1ListViewAttached *qmlAttachedProperties(QObject *);
-
- enum PositionMode { Beginning, Center, End, Visible, Contain };
-
- Q_INVOKABLE void positionViewAtIndex(int index, int mode);
- Q_INVOKABLE int indexAt(qreal x, qreal y) const;
- Q_INVOKABLE Q_REVISION(1) void positionViewAtBeginning();
- Q_INVOKABLE Q_REVISION(1) void positionViewAtEnd();
-
-public Q_SLOTS:
- void incrementCurrentIndex();
- void decrementCurrentIndex();
-
-Q_SIGNALS:
- void countChanged();
- void spacingChanged();
- void orientationChanged();
- Q_REVISION(1) void layoutDirectionChanged();
- Q_REVISION(1) void effectiveLayoutDirectionChanged();
- void currentIndexChanged();
- void currentSectionChanged();
- void highlightMoveSpeedChanged();
- void highlightMoveDurationChanged();
- void highlightResizeSpeedChanged();
- void highlightResizeDurationChanged();
- void highlightChanged();
- void highlightItemChanged();
- void modelChanged();
- void delegateChanged();
- void highlightFollowsCurrentItemChanged();
- void preferredHighlightBeginChanged();
- void preferredHighlightEndChanged();
- void highlightRangeModeChanged();
- void keyNavigationWrapsChanged();
- void cacheBufferChanged();
- void snapModeChanged();
- void headerChanged();
- void footerChanged();
-
-protected:
- virtual bool event(QEvent *event);
- virtual void viewportMoved();
- virtual qreal minYExtent() const;
- virtual qreal maxYExtent() const;
- virtual qreal minXExtent() const;
- virtual qreal maxXExtent() const;
- virtual void keyPressEvent(QKeyEvent *);
- virtual void geometryChanged(const QRectF &newGeometry,const QRectF &oldGeometry);
- virtual void componentComplete();
-
-private Q_SLOTS:
- void updateSections();
- void refill();
- void trackedPositionChanged();
- void itemsInserted(int index, int count);
- void itemsRemoved(int index, int count);
- void itemsMoved(int from, int to, int count);
- void itemsChanged(int index, int count);
- void modelReset();
- void destroyRemoved();
- void createdItem(int index, QDeclarativeItem *item);
- void destroyingItem(QDeclarativeItem *item);
- void animStopped();
-};
-
-class QDeclarative1ListViewAttached : public QObject
-{
- Q_OBJECT
-public:
- QDeclarative1ListViewAttached(QObject *parent)
- : QObject(parent), m_view(0), m_isCurrent(false), m_delayRemove(false) {}
- ~QDeclarative1ListViewAttached() {}
-
- Q_PROPERTY(QDeclarative1ListView *view READ view NOTIFY viewChanged)
- QDeclarative1ListView *view() { return m_view; }
- void setView(QDeclarative1ListView *view) {
- if (view != m_view) {
- m_view = view;
- emit viewChanged();
- }
- }
-
- Q_PROPERTY(bool isCurrentItem READ isCurrentItem NOTIFY currentItemChanged)
- bool isCurrentItem() const { return m_isCurrent; }
- void setIsCurrentItem(bool c) {
- if (m_isCurrent != c) {
- m_isCurrent = c;
- emit currentItemChanged();
- }
- }
-
- Q_PROPERTY(QString previousSection READ prevSection NOTIFY prevSectionChanged)
- QString prevSection() const { return m_prevSection; }
- void setPrevSection(const QString &sect) {
- if (m_prevSection != sect) {
- m_prevSection = sect;
- emit prevSectionChanged();
- }
- }
-
- Q_PROPERTY(QString nextSection READ nextSection NOTIFY nextSectionChanged)
- QString nextSection() const { return m_nextSection; }
- void setNextSection(const QString &sect) {
- if (m_nextSection != sect) {
- m_nextSection = sect;
- emit nextSectionChanged();
- }
- }
-
- Q_PROPERTY(QString section READ section NOTIFY sectionChanged)
- QString section() const { return m_section; }
- void setSection(const QString &sect) {
- if (m_section != sect) {
- m_section = sect;
- emit sectionChanged();
- }
- }
-
- Q_PROPERTY(bool delayRemove READ delayRemove WRITE setDelayRemove NOTIFY delayRemoveChanged)
- bool delayRemove() const { return m_delayRemove; }
- void setDelayRemove(bool delay) {
- if (m_delayRemove != delay) {
- m_delayRemove = delay;
- emit delayRemoveChanged();
- }
- }
-
- void emitAdd() { emit add(); }
- void emitRemove() { emit remove(); }
-
-Q_SIGNALS:
- void currentItemChanged();
- void sectionChanged();
- void prevSectionChanged();
- void nextSectionChanged();
- void delayRemoveChanged();
- void add();
- void remove();
- void viewChanged();
-
-public:
- QDeclarativeGuard<QDeclarative1ListView> m_view;
- mutable QString m_section;
- QString m_prevSection;
- QString m_nextSection;
- bool m_isCurrent : 1;
- bool m_delayRemove : 1;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPEINFO(QDeclarative1ListView, QML_HAS_ATTACHED_PROPERTIES)
-QML_DECLARE_TYPE(QDeclarative1ListView)
-QML_DECLARE_TYPE(QDeclarative1ViewSection)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativeloader.cpp b/src/qtquick1/graphicsitems/qdeclarativeloader.cpp
deleted file mode 100644
index e14c1b8f0e..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeloader.cpp
+++ /dev/null
@@ -1,602 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativeloader_p_p.h"
-
-#include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtDeclarative/private/qdeclarativeengine_p.h>
-#include <QtDeclarative/private/qdeclarativeglobal_p.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-QDeclarative1LoaderPrivate::QDeclarative1LoaderPrivate()
- : item(0), component(0), ownComponent(false), updatingSize(false),
- itemWidthValid(false), itemHeightValid(false)
-{
-}
-
-QDeclarative1LoaderPrivate::~QDeclarative1LoaderPrivate()
-{
-}
-
-void QDeclarative1LoaderPrivate::itemGeometryChanged(QDeclarativeItem *resizeItem, const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- if (resizeItem == item) {
- if (!updatingSize && newGeometry.width() != oldGeometry.width())
- itemWidthValid = true;
- if (!updatingSize && newGeometry.height() != oldGeometry.height())
- itemHeightValid = true;
- _q_updateSize(false);
- }
- QDeclarativeItemChangeListener::itemGeometryChanged(resizeItem, newGeometry, oldGeometry);
-}
-
-void QDeclarative1LoaderPrivate::clear()
-{
- if (ownComponent) {
- component->deleteLater();
- component = 0;
- ownComponent = false;
- }
- source = QUrl();
-
- if (item) {
- if (QDeclarativeItem *qmlItem = qobject_cast<QDeclarativeItem*>(item)) {
- QDeclarativeItemPrivate *p =
- static_cast<QDeclarativeItemPrivate *>(QGraphicsItemPrivate::get(qmlItem));
- p->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- }
-
- // We can't delete immediately because our item may have triggered
- // the Loader to load a different item.
- if (item->scene()) {
- item->scene()->removeItem(item);
- } else {
- item->setParentItem(0);
- item->setVisible(false);
- }
- item->deleteLater();
- item = 0;
- }
-}
-
-void QDeclarative1LoaderPrivate::initResize()
-{
- Q_Q(QDeclarative1Loader);
- if (QDeclarativeItem *qmlItem = qobject_cast<QDeclarativeItem*>(item)) {
- QDeclarativeItemPrivate *p =
- static_cast<QDeclarativeItemPrivate *>(QGraphicsItemPrivate::get(qmlItem));
- p->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- // We may override the item's size, so we need to remember
- // whether the item provided its own valid size.
- itemWidthValid = p->widthValid;
- itemHeightValid = p->heightValid;
- } else if (item && item->isWidget()) {
- QGraphicsWidget *widget = static_cast<QGraphicsWidget*>(item);
- widget->installEventFilter(q);
- }
- _q_updateSize();
-}
-
-/*!
- \qmlclass Loader QDeclarative1Loader
- \inqmlmodule QtQuick 1
- \ingroup qml-utility-elements
- \since QtQuick 1.0
- \inherits Item
-
- \brief The Loader item allows dynamically loading an Item-based
- subtree from a URL or Component.
-
- Loader is used to dynamically load visual QML components. It can load a
- QML file (using the \l source property) or a \l Component object (using
- the \l sourceComponent property). It is useful for delaying the creation
- of a component until it is required: for example, when a component should
- be created on demand, or when a component should not be created
- unnecessarily for performance reasons.
-
- Here is a Loader that loads "Page1.qml" as a component when the
- \l MouseArea is clicked:
-
- \snippet doc/src/snippets/qtquick1/loader/simple.qml 0
-
- The loaded item can be accessed using the \l item property.
-
- If the \l source or \l sourceComponent changes, any previously instantiated
- items are destroyed. Setting \l source to an empty string or setting
- \l sourceComponent to \c undefined destroys the currently loaded item,
- freeing resources and leaving the Loader empty.
-
- \section2 Loader sizing behavior
-
- Loader is like any other visual item and must be positioned and sized
- accordingly to become visible.
-
- \list
- \o If an explicit size is not specified for the Loader, the Loader
- is automatically resized to the size of the loaded item once the
- component is loaded.
- \o If the size of the Loader is specified explicitly by setting
- the width, height or by anchoring, the loaded item will be resized
- to the size of the Loader.
- \endlist
-
- In both scenarios the size of the item and the Loader are identical.
- This ensures that anchoring to the Loader is equivalent to anchoring
- to the loaded item.
-
- \table
- \row
- \o sizeloader.qml
- \o sizeitem.qml
- \row
- \o \snippet doc/src/snippets/qtquick1/loader/sizeloader.qml 0
- \o \snippet doc/src/snippets/qtquick1/loader/sizeitem.qml 0
- \row
- \o The red rectangle will be sized to the size of the root item.
- \o The red rectangle will be 50x50, centered in the root item.
- \endtable
-
-
- \section2 Receiving signals from loaded items
-
- Any signals emitted from the loaded item can be received using the
- \l Connections element. For example, the following \c application.qml
- loads \c MyItem.qml, and is able to receive the \c message signal from
- the loaded item through a \l Connections object:
-
- \table
- \row
- \o application.qml
- \o MyItem.qml
- \row
- \o \snippet doc/src/snippets/qtquick1/loader/connections.qml 0
- \o \snippet doc/src/snippets/qtquick1/loader/MyItem.qml 0
- \endtable
-
- Alternatively, since \c MyItem.qml is loaded within the scope of the
- Loader, it could also directly call any function defined in the Loader or
- its parent \l Item.
-
-
- \section2 Focus and key events
-
- Loader is a focus scope. Its \l {Item::}{focus} property must be set to
- \c true for any of its children to get the \e {active focus}. (See
- \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page}
- for more details.) Any key events received in the loaded item should likely
- also be \l {KeyEvent::}{accepted} so they are not propagated to the Loader.
-
- For example, the following \c application.qml loads \c KeyReader.qml when
- the \l MouseArea is clicked. Notice the \l {Item::}{focus} property is
- set to \c true for the Loader as well as the \l Item in the dynamically
- loaded object:
-
- \table
- \row
- \o application.qml
- \o KeyReader.qml
- \row
- \o \snippet doc/src/snippets/qtquick1/loader/focus.qml 0
- \o \snippet doc/src/snippets/qtquick1/loader/KeyReader.qml 0
- \endtable
-
- Once \c KeyReader.qml is loaded, it accepts key events and sets
- \c event.accepted to \c true so that the event is not propagated to the
- parent \l Rectangle.
-
- \sa {dynamic-object-creation}{Dynamic Object Creation}
-*/
-
-QDeclarative1Loader::QDeclarative1Loader(QDeclarativeItem *parent)
- : QDeclarative1ImplicitSizeItem(*(new QDeclarative1LoaderPrivate), parent)
-{
- Q_D(QDeclarative1Loader);
- d->flags |= QGraphicsItem::ItemIsFocusScope;
-}
-
-QDeclarative1Loader::~QDeclarative1Loader()
-{
- Q_D(QDeclarative1Loader);
- if (d->item) {
- if (QDeclarativeItem *qmlItem = qobject_cast<QDeclarativeItem*>(d->item)) {
- QDeclarativeItemPrivate *p =
- static_cast<QDeclarativeItemPrivate *>(QGraphicsItemPrivate::get(qmlItem));
- p->removeItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
- }
- }
-}
-
-/*!
- \qmlproperty url QtQuick1::Loader::source
- This property holds the URL of the QML component to instantiate.
-
- Note the QML component must be an \l{Item}-based component. The loader
- cannot load non-visual components.
-
- To unload the currently loaded item, set this property to an empty string,
- or set \l sourceComponent to \c undefined. Setting \c source to a
- new URL will also cause the item created by the previous URL to be unloaded.
-
- \sa sourceComponent, status, progress
-*/
-QUrl QDeclarative1Loader::source() const
-{
- Q_D(const QDeclarative1Loader);
- return d->source;
-}
-
-void QDeclarative1Loader::setSource(const QUrl &url)
-{
- Q_D(QDeclarative1Loader);
- if (d->source == url)
- return;
-
- d->clear();
-
- d->source = url;
-
- if (d->source.isEmpty()) {
- emit sourceChanged();
- emit statusChanged();
- emit progressChanged();
- emit itemChanged();
- return;
- }
-
- d->component = new QDeclarativeComponent(qmlEngine(this), d->source, this);
- d->ownComponent = true;
-
- if (isComponentComplete())
- d->load();
-}
-
-/*!
- \qmlproperty Component QtQuick1::Loader::sourceComponent
- This property holds the \l{Component} to instantiate.
-
- \qml
- Item {
- Component {
- id: redSquare
- Rectangle { color: "red"; width: 10; height: 10 }
- }
-
- Loader { sourceComponent: redSquare }
- Loader { sourceComponent: redSquare; x: 10 }
- }
- \endqml
-
- To unload the currently loaded item, set this property to an empty string
- or \c undefined.
-
- \sa source, progress
-*/
-
-QDeclarativeComponent *QDeclarative1Loader::sourceComponent() const
-{
- Q_D(const QDeclarative1Loader);
- return d->component;
-}
-
-void QDeclarative1Loader::setSourceComponent(QDeclarativeComponent *comp)
-{
- Q_D(QDeclarative1Loader);
- if (comp == d->component)
- return;
-
- d->clear();
-
- d->component = comp;
- d->ownComponent = false;
-
- if (!d->component) {
- emit sourceChanged();
- emit statusChanged();
- emit progressChanged();
- emit itemChanged();
- return;
- }
-
- if (isComponentComplete())
- d->load();
-}
-
-void QDeclarative1Loader::resetSourceComponent()
-{
- setSourceComponent(0);
-}
-
-void QDeclarative1LoaderPrivate::load()
-{
- Q_Q(QDeclarative1Loader);
-
- if (!q->isComponentComplete() || !component)
- return;
-
- if (!component->isLoading()) {
- _q_sourceLoaded();
- } else {
- QObject::connect(component, SIGNAL(statusChanged(QDeclarativeComponent::Status)),
- q, SLOT(_q_sourceLoaded()));
- QObject::connect(component, SIGNAL(progressChanged(qreal)),
- q, SIGNAL(progressChanged()));
- emit q->statusChanged();
- emit q->progressChanged();
- emit q->sourceChanged();
- emit q->itemChanged();
- }
-}
-
-void QDeclarative1LoaderPrivate::_q_sourceLoaded()
-{
- Q_Q(QDeclarative1Loader);
-
- if (component) {
- if (!component->errors().isEmpty()) {
- QDeclarativeEnginePrivate::warning(qmlEngine(q), component->errors());
- emit q->sourceChanged();
- emit q->statusChanged();
- emit q->progressChanged();
- return;
- }
-
- QDeclarativeContext *creationContext = component->creationContext();
- if (!creationContext) creationContext = qmlContext(q);
- QDeclarativeContext *ctxt = new QDeclarativeContext(creationContext);
- ctxt->setContextObject(q);
-
- QDeclarativeGuard<QDeclarativeComponent> c = component;
- QObject *obj = component->beginCreate(ctxt);
- if (component != c) {
- // component->create could trigger a change in source that causes
- // component to be set to something else. In that case we just
- // need to cleanup.
- if (c)
- c->completeCreate();
- delete obj;
- delete ctxt;
- return;
- }
- if (obj) {
- item = qobject_cast<QGraphicsObject *>(obj);
- if (item) {
- QDeclarative_setParent_noEvent(ctxt, obj);
- QDeclarative_setParent_noEvent(item, q);
- item->setParentItem(q);
-// item->setFocus(true);
- initResize();
- } else {
- qmlInfo(q) << QDeclarative1Loader::tr("Loader does not support loading non-visual elements.");
- delete obj;
- delete ctxt;
- }
- } else {
- if (!component->errors().isEmpty())
- QDeclarativeEnginePrivate::warning(qmlEngine(q), component->errors());
- delete obj;
- delete ctxt;
- source = QUrl();
- }
- component->completeCreate();
- emit q->sourceChanged();
- emit q->statusChanged();
- emit q->progressChanged();
- emit q->itemChanged();
- emit q->loaded();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Loader::status
-
- This property holds the status of QML loading. It can be one of:
- \list
- \o Loader.Null - no QML source has been set
- \o Loader.Ready - the QML source has been loaded
- \o Loader.Loading - the QML source is currently being loaded
- \o Loader.Error - an error occurred while loading the QML source
- \endlist
-
- Use this status to provide an update or respond to the status change in some way.
- For example, you could:
-
- \list
- \o Trigger a state change:
- \qml
- State { name: 'loaded'; when: loader.status == Loader.Ready }
- \endqml
-
- \o Implement an \c onStatusChanged signal handler:
- \qml
- Loader {
- id: loader
- onStatusChanged: if (loader.status == Loader.Ready) console.log('Loaded')
- }
- \endqml
-
- \o Bind to the status value:
- \qml
- Text { text: loader.status == Loader.Ready ? 'Loaded' : 'Not loaded' }
- \endqml
- \endlist
-
- Note that if the source is a local file, the status will initially be Ready (or Error). While
- there will be no onStatusChanged signal in that case, the onLoaded will still be invoked.
-
- \sa progress
-*/
-
-QDeclarative1Loader::Status QDeclarative1Loader::status() const
-{
- Q_D(const QDeclarative1Loader);
-
- if (d->component)
- return static_cast<QDeclarative1Loader::Status>(d->component->status());
-
- if (d->item)
- return Ready;
-
- return d->source.isEmpty() ? Null : Error;
-}
-
-void QDeclarative1Loader::componentComplete()
-{
- Q_D(QDeclarative1Loader);
-
- QDeclarativeItem::componentComplete();
- d->load();
-}
-
-
-/*!
- \qmlsignal QtQuick1::Loader::onLoaded()
-
- This handler is called when the \l status becomes \c Loader.Ready, or on successful
- initial load.
-*/
-
-
-/*!
-\qmlproperty real QtQuick1::Loader::progress
-
-This property holds the progress of loading QML data from the network, from
-0.0 (nothing loaded) to 1.0 (finished). Most QML files are quite small, so
-this value will rapidly change from 0 to 1.
-
-\sa status
-*/
-qreal QDeclarative1Loader::progress() const
-{
- Q_D(const QDeclarative1Loader);
-
- if (d->item)
- return 1.0;
-
- if (d->component)
- return d->component->progress();
-
- return 0.0;
-}
-
-void QDeclarative1LoaderPrivate::_q_updateSize(bool loaderGeometryChanged)
-{
- Q_Q(QDeclarative1Loader);
- if (!item || updatingSize)
- return;
-
- updatingSize = true;
- if (QDeclarativeItem *qmlItem = qobject_cast<QDeclarativeItem*>(item)) {
- if (!itemWidthValid)
- q->setImplicitWidth(qmlItem->implicitWidth());
- else
- q->setImplicitWidth(qmlItem->width());
- if (loaderGeometryChanged && q->widthValid())
- qmlItem->setWidth(q->width());
- if (!itemHeightValid)
- q->setImplicitHeight(qmlItem->implicitHeight());
- else
- q->setImplicitHeight(qmlItem->height());
- if (loaderGeometryChanged && q->heightValid())
- qmlItem->setHeight(q->height());
- } else if (item && item->isWidget()) {
- QGraphicsWidget *widget = static_cast<QGraphicsWidget*>(item);
- QSizeF widgetSize = widget->size();
- q->setImplicitWidth(widgetSize.width());
- if (loaderGeometryChanged && q->widthValid())
- widgetSize.setWidth(q->width());
- q->setImplicitHeight(widgetSize.height());
- if (loaderGeometryChanged && q->heightValid())
- widgetSize.setHeight(q->height());
- if (widget->size() != widgetSize)
- widget->resize(widgetSize);
- }
- updatingSize = false;
-}
-
-/*!
- \qmlproperty Item QtQuick1::Loader::item
- This property holds the top-level item that is currently loaded.
-*/
-QGraphicsObject *QDeclarative1Loader::item() const
-{
- Q_D(const QDeclarative1Loader);
- return d->item;
-}
-
-void QDeclarative1Loader::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- Q_D(QDeclarative1Loader);
- if (newGeometry != oldGeometry) {
- d->_q_updateSize();
- }
- QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-QVariant QDeclarative1Loader::itemChange(GraphicsItemChange change, const QVariant &value)
-{
- Q_D(QDeclarative1Loader);
- if (change == ItemSceneHasChanged) {
- if (d->item && d->item->isWidget()) {
- d->item->removeEventFilter(this);
- d->item->installEventFilter(this);
- }
- }
- return QDeclarativeItem::itemChange(change, value);
-}
-
-bool QDeclarative1Loader::eventFilter(QObject *watched, QEvent *e)
-{
- Q_D(QDeclarative1Loader);
- if (watched == d->item && e->type() == QEvent::GraphicsSceneResize) {
- if (d->item && d->item->isWidget())
- d->_q_updateSize(false);
- }
- return QDeclarativeItem::eventFilter(watched, e);
-}
-
-#include <moc_qdeclarativeloader_p.cpp>
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativeloader_p.h b/src/qtquick1/graphicsitems/qdeclarativeloader_p.h
deleted file mode 100644
index c321ba36f9..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeloader_p.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVELOADER_H
-#define QDECLARATIVELOADER_H
-
-#include "qdeclarativeimplicitsizeitem_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1LoaderPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1Loader : public QDeclarative1ImplicitSizeItem
-{
- Q_OBJECT
- Q_ENUMS(Status)
-
- Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
- Q_PROPERTY(QDeclarativeComponent *sourceComponent READ sourceComponent WRITE setSourceComponent RESET resetSourceComponent NOTIFY sourceChanged)
- Q_PROPERTY(QGraphicsObject *item READ item NOTIFY itemChanged)
- Q_PROPERTY(Status status READ status NOTIFY statusChanged)
- Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged)
-
-public:
- QDeclarative1Loader(QDeclarativeItem *parent=0);
- virtual ~QDeclarative1Loader();
-
- QUrl source() const;
- void setSource(const QUrl &);
-
- QDeclarativeComponent *sourceComponent() const;
- void setSourceComponent(QDeclarativeComponent *);
- void resetSourceComponent();
-
- enum Status { Null, Ready, Loading, Error };
- Status status() const;
- qreal progress() const;
-
- QGraphicsObject *item() const;
-
-Q_SIGNALS:
- void itemChanged();
- void sourceChanged();
- void statusChanged();
- void progressChanged();
- void loaded();
-
-protected:
- void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
- QVariant itemChange(GraphicsItemChange change, const QVariant &value);
- bool eventFilter(QObject *watched, QEvent *e);
- void componentComplete();
-
-private:
- Q_DISABLE_COPY(QDeclarative1Loader)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1Loader)
- Q_PRIVATE_SLOT(d_func(), void _q_sourceLoaded())
- Q_PRIVATE_SLOT(d_func(), void _q_updateSize())
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Loader)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVELOADER_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativeloader_p_p.h b/src/qtquick1/graphicsitems/qdeclarativeloader_p_p.h
deleted file mode 100644
index 8f59800e52..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativeloader_p_p.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVELOADER_P_H
-#define QDECLARATIVELOADER_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeloader_p.h"
-
-#include "QtQuick1/private/qdeclarativeimplicitsizeitem_p_p.h"
-#include "QtQuick1/private/qdeclarativeitemchangelistener_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeContext;
-class QDeclarative1LoaderPrivate : public QDeclarative1ImplicitSizeItemPrivate, public QDeclarativeItemChangeListener
-{
- Q_DECLARE_PUBLIC(QDeclarative1Loader)
-
-public:
- QDeclarative1LoaderPrivate();
- ~QDeclarative1LoaderPrivate();
-
- void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry);
- void clear();
- void initResize();
- void load();
-
- QUrl source;
- QGraphicsObject *item;
- QDeclarativeComponent *component;
- bool ownComponent : 1;
- bool updatingSize: 1;
- bool itemWidthValid : 1;
- bool itemHeightValid : 1;
-
- void _q_sourceLoaded();
- void _q_updateSize(bool loaderGeometryChanged = true);
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVELOADER_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativemousearea.cpp b/src/qtquick1/graphicsitems/qdeclarativemousearea.cpp
deleted file mode 100644
index 37cdbfb4ee..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativemousearea.cpp
+++ /dev/null
@@ -1,1014 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativemousearea_p.h"
-#include "QtQuick1/private/qdeclarativemousearea_p_p.h"
-
-#include "QtQuick1/private/qdeclarativeevents_p_p.h"
-
-#include <QGraphicsSceneMouseEvent>
-
-#include <float.h>
-
-QT_BEGIN_NAMESPACE
-
-
-static const int PressAndHoldDelay = 800;
-
-QDeclarative1Drag::QDeclarative1Drag(QObject *parent)
-: QObject(parent), _target(0), _axis(XandYAxis), _xmin(-FLT_MAX), _xmax(FLT_MAX), _ymin(-FLT_MAX), _ymax(FLT_MAX),
-_active(false), _filterChildren(false)
-{
-}
-
-QDeclarative1Drag::~QDeclarative1Drag()
-{
-}
-
-QGraphicsObject *QDeclarative1Drag::target() const
-{
- return _target;
-}
-
-void QDeclarative1Drag::setTarget(QGraphicsObject *t)
-{
- if (_target == t)
- return;
- _target = t;
- emit targetChanged();
-}
-
-void QDeclarative1Drag::resetTarget()
-{
- if (!_target)
- return;
- _target = 0;
- emit targetChanged();
-}
-
-QDeclarative1Drag::Axis QDeclarative1Drag::axis() const
-{
- return _axis;
-}
-
-void QDeclarative1Drag::setAxis(QDeclarative1Drag::Axis a)
-{
- if (_axis == a)
- return;
- _axis = a;
- emit axisChanged();
-}
-
-qreal QDeclarative1Drag::xmin() const
-{
- return _xmin;
-}
-
-void QDeclarative1Drag::setXmin(qreal m)
-{
- if (_xmin == m)
- return;
- _xmin = m;
- emit minimumXChanged();
-}
-
-qreal QDeclarative1Drag::xmax() const
-{
- return _xmax;
-}
-
-void QDeclarative1Drag::setXmax(qreal m)
-{
- if (_xmax == m)
- return;
- _xmax = m;
- emit maximumXChanged();
-}
-
-qreal QDeclarative1Drag::ymin() const
-{
- return _ymin;
-}
-
-void QDeclarative1Drag::setYmin(qreal m)
-{
- if (_ymin == m)
- return;
- _ymin = m;
- emit minimumYChanged();
-}
-
-qreal QDeclarative1Drag::ymax() const
-{
- return _ymax;
-}
-
-void QDeclarative1Drag::setYmax(qreal m)
-{
- if (_ymax == m)
- return;
- _ymax = m;
- emit maximumYChanged();
-}
-
-bool QDeclarative1Drag::active() const
-{
- return _active;
-}
-
-void QDeclarative1Drag::setActive(bool drag)
-{
- if (_active == drag)
- return;
- _active = drag;
- emit activeChanged();
-}
-
-bool QDeclarative1Drag::filterChildren() const
-{
- return _filterChildren;
-}
-
-void QDeclarative1Drag::setFilterChildren(bool filter)
-{
- if (_filterChildren == filter)
- return;
- _filterChildren = filter;
- emit filterChildrenChanged();
-}
-
-QDeclarative1MouseAreaPrivate::~QDeclarative1MouseAreaPrivate()
-{
- delete drag;
-}
-
-/*!
- \qmlclass MouseArea QDeclarative1MouseArea
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-interaction-elements
- \since QtQuick 1.0
- \brief The MouseArea item enables simple mouse handling.
- \inherits Item
-
- A MouseArea is an invisible item that is typically used in conjunction with
- a visible item in order to provide mouse handling for that item.
- By effectively acting as a proxy, the logic for mouse handling can be
- contained within a MouseArea item.
-
- For basic key handling, see the \l{Keys}{Keys attached property}.
-
- The \l enabled property is used to enable and disable mouse handling for
- the proxied item. When disabled, the mouse area becomes transparent to
- mouse events.
-
- The \l pressed read-only property indicates whether or not the user is
- holding down a mouse button over the mouse area. This property is often
- used in bindings between properties in a user interface. The containsMouse
- read-only property indicates the presence of the mouse cursor over the
- mouse area but, by default, only when a mouse button is held down; see below
- for further details.
-
- Information about the mouse position and button clicks are provided via
- signals for which event handler properties are defined. The most commonly
- used involved handling mouse presses and clicks: onClicked, onDoubleClicked,
- onPressed, onReleased and onPressAndHold.
-
- By default, MouseArea items only report mouse clicks and not changes to the
- position of the mouse cursor. Setting the hoverEnabled property ensures that
- handlers defined for onPositionChanged, onEntered and onExited are used and
- that the containsMouse property is updated even when no mouse buttons are
- pressed.
-
- \section1 Example Usage
-
- \div {class="float-right"}
- \inlineimage qml-mousearea-snippet.png
- \enddiv
-
- The following example uses a MouseArea in a \l Rectangle that changes
- the \l Rectangle color to red when clicked:
-
- \snippet doc/src/snippets/qtquick1/mousearea/mousearea.qml import
- \codeline
- \snippet doc/src/snippets/qtquick1/mousearea/mousearea.qml intro
-
- \clearfloat
- Many MouseArea signals pass a \l{MouseEvent}{mouse} parameter that contains
- additional information about the mouse event, such as the position, button,
- and any key modifiers.
-
- Here is an extension of the previous example that produces a different
- color when the area is right clicked:
-
- \snippet doc/src/snippets/qtquick1/mousearea/mousearea.qml intro-extended
-
- \sa MouseEvent, {declarative/touchinteraction/mousearea}{MouseArea example}
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onEntered()
-
- This handler is called when the mouse enters the mouse area.
-
- By default the onEntered handler is only called while a button is
- pressed. Setting hoverEnabled to true enables handling of
- onEntered when no mouse button is pressed.
-
- \sa hoverEnabled
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onExited()
-
- This handler is called when the mouse exits the mouse area.
-
- By default the onExited handler is only called while a button is
- pressed. Setting hoverEnabled to true enables handling of
- onExited when no mouse button is pressed.
-
- The example below shows a fairly typical relationship between
- two MouseAreas, with \c mouseArea2 on top of \c mouseArea1. Moving the
- mouse into \c mouseArea2 from \c mouseArea1 will cause \c onExited
- to be called for \c mouseArea1.
- \qml
- Rectangle {
- width: 400; height: 400
- MouseArea {
- id: mouseArea1
- anchors.fill: parent
- hoverEnabled: true
- }
- MouseArea {
- id: mouseArea2
- width: 100; height: 100
- anchors.centerIn: parent
- hoverEnabled: true
- }
- }
- \endqml
-
- If instead you give the two mouseAreas a parent-child relationship,
- moving the mouse into \c mouseArea2 from \c mouseArea1 will \b not
- cause \c onExited to be called for \c mouseArea1. Instead, they will
- both be considered to be simultaneously hovered.
-
- \sa hoverEnabled
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onPositionChanged(MouseEvent mouse)
-
- This handler is called when the mouse position changes.
-
- The \l {MouseEvent}{mouse} parameter provides information about the mouse, including the x and y
- position, and any buttons currently pressed.
-
- The \e accepted property of the MouseEvent parameter is ignored in this handler.
-
- By default the onPositionChanged handler is only called while a button is
- pressed. Setting hoverEnabled to true enables handling of
- onPositionChanged when no mouse button is pressed.
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onClicked(MouseEvent mouse)
-
- This handler is called when there is a click. A click is defined as a press followed by a release,
- both inside the MouseArea (pressing, moving outside the MouseArea, and then moving back inside and
- releasing is also considered a click).
-
- The \l {MouseEvent}{mouse} parameter provides information about the click, including the x and y
- position of the release of the click, and whether the click was held.
-
- The \e accepted property of the MouseEvent parameter is ignored in this handler.
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onPressed(MouseEvent mouse)
-
- This handler is called when there is a press.
- The \l {MouseEvent}{mouse} parameter provides information about the press, including the x and y
- position and which button was pressed.
-
- The \e accepted property of the MouseEvent parameter determines whether this MouseArea
- will handle the press and all future mouse events until release. The default is to accept
- the event and not allow other MouseArea beneath this one to handle the event. If \e accepted
- is set to false, no further events will be sent to this MouseArea until the button is next
- pressed.
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onReleased(MouseEvent mouse)
-
- This handler is called when there is a release.
- The \l {MouseEvent}{mouse} parameter provides information about the click, including the x and y
- position of the release of the click, and whether the click was held.
-
- The \e accepted property of the MouseEvent parameter is ignored in this handler.
-
- \sa onCanceled
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onPressAndHold(MouseEvent mouse)
-
- This handler is called when there is a long press (currently 800ms).
- The \l {MouseEvent}{mouse} parameter provides information about the press, including the x and y
- position of the press, and which button is pressed.
-
- The \e accepted property of the MouseEvent parameter is ignored in this handler.
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onDoubleClicked(MouseEvent mouse)
-
- This handler is called when there is a double-click (a press followed by a release followed by a press).
- The \l {MouseEvent}{mouse} parameter provides information about the click, including the x and y
- position of the release of the click, and whether the click was held.
-
- If the \e accepted property of the \l {MouseEvent}{mouse} parameter is set to false
- in the handler, the onPressed/onReleased/onClicked handlers will be called for the second
- click; otherwise they are suppressed. The accepted property defaults to true.
-*/
-
-/*!
- \qmlsignal QtQuick1::MouseArea::onCanceled()
-
- This handler is called when mouse events have been canceled, either because an event was not accepted, or
- because another element stole the mouse event handling.
-
- This signal is for advanced use: it is useful when there is more than one MouseArea
- that is handling input, or when there is a MouseArea inside a \l Flickable. In the latter
- case, if you execute some logic on the pressed signal and then start dragging, the
- \l Flickable will steal the mouse handling from the MouseArea. In these cases, to reset
- the logic when the MouseArea has lost the mouse handling to the \l Flickable,
- \c onCanceled should be used in addition to onReleased.
-*/
-
-QDeclarative1MouseArea::QDeclarative1MouseArea(QDeclarativeItem *parent)
- : QDeclarativeItem(*(new QDeclarative1MouseAreaPrivate), parent)
-{
- Q_D(QDeclarative1MouseArea);
- d->init();
-}
-
-QDeclarative1MouseArea::~QDeclarative1MouseArea()
-{
-}
-
-/*!
- \qmlproperty real QtQuick1::MouseArea::mouseX
- \qmlproperty real QtQuick1::MouseArea::mouseY
- These properties hold the coordinates of the mouse cursor.
-
- If the hoverEnabled property is false then these properties will only be valid
- while a button is pressed, and will remain valid as long as the button is held
- down even if the mouse is moved outside the area.
-
- By default, this property is false.
-
- If hoverEnabled is true then these properties will be valid when:
- \list
- \i no button is pressed, but the mouse is within the MouseArea (containsMouse is true).
- \i a button is pressed and held, even if it has since moved out of the area.
- \endlist
-
- The coordinates are relative to the MouseArea.
-*/
-qreal QDeclarative1MouseArea::mouseX() const
-{
- Q_D(const QDeclarative1MouseArea);
- return d->lastPos.x();
-}
-
-qreal QDeclarative1MouseArea::mouseY() const
-{
- Q_D(const QDeclarative1MouseArea);
- return d->lastPos.y();
-}
-
-/*!
- \qmlproperty bool QtQuick1::MouseArea::enabled
- This property holds whether the item accepts mouse events.
-
- By default, this property is true.
-*/
-bool QDeclarative1MouseArea::isEnabled() const
-{
- Q_D(const QDeclarative1MouseArea);
- return d->absorb;
-}
-
-void QDeclarative1MouseArea::setEnabled(bool a)
-{
- Q_D(QDeclarative1MouseArea);
- if (a != d->absorb) {
- d->absorb = a;
- emit enabledChanged();
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::MouseArea::preventStealing
- \since Quick 1.1
- This property holds whether the mouse events may be stolen from this
- MouseArea.
-
- If a MouseArea is placed within an item that filters child mouse
- events, such as Flickable, the mouse
- events may be stolen from the MouseArea if a gesture is recognized
- by the parent element, e.g. a flick gesture. If preventStealing is
- set to true, no element will steal the mouse events.
-
- Note that setting preventStealing to true once an element has started
- stealing events will have no effect until the next press event.
-
- By default this property is false.
-*/
-bool QDeclarative1MouseArea::preventStealing() const
-{
- Q_D(const QDeclarative1MouseArea);
- return d->preventStealing;
-}
-
-void QDeclarative1MouseArea::setPreventStealing(bool prevent)
-{
- Q_D(QDeclarative1MouseArea);
- if (prevent != d->preventStealing) {
- d->preventStealing = prevent;
- setKeepMouseGrab(d->preventStealing && d->absorb);
- emit preventStealingChanged();
- }
-}
-
-/*!
- \qmlproperty MouseButtons QtQuick1::MouseArea::pressedButtons
- This property holds the mouse buttons currently pressed.
-
- It contains a bitwise combination of:
- \list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
- \endlist
-
- The code below displays "right" when the right mouse buttons is pressed:
-
- \snippet doc/src/snippets/qtquick1/mousearea/mousearea.qml mousebuttons
-
- \sa acceptedButtons
-*/
-Qt::MouseButtons QDeclarative1MouseArea::pressedButtons() const
-{
- Q_D(const QDeclarative1MouseArea);
- return d->lastButtons;
-}
-
-void QDeclarative1MouseArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- d->moved = false;
- d->stealMouse = d->preventStealing;
- if (!d->absorb)
- QDeclarativeItem::mousePressEvent(event);
- else {
- d->longPress = false;
- d->saveEvent(event);
- if (d->drag) {
- d->dragX = drag()->axis() & QDeclarative1Drag::XAxis;
- d->dragY = drag()->axis() & QDeclarative1Drag::YAxis;
- }
- if (d->drag)
- d->drag->setActive(false);
- setHovered(true);
- d->startScene = event->scenePos();
- // we should only start timer if pressAndHold is connected to.
- if (d->isPressAndHoldConnected())
- d->pressAndHoldTimer.start(PressAndHoldDelay, this);
- setKeepMouseGrab(d->stealMouse);
- event->setAccepted(setPressed(true));
- }
-}
-
-void QDeclarative1MouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- if (!d->absorb) {
- QDeclarativeItem::mouseMoveEvent(event);
- return;
- }
-
- d->saveEvent(event);
-
- // ### we should skip this if these signals aren't used
- // ### can GV handle this for us?
- bool contains = boundingRect().contains(d->lastPos);
- if (d->hovered && !contains)
- setHovered(false);
- else if (!d->hovered && contains)
- setHovered(true);
-
- if (d->drag && d->drag->target()) {
- if (!d->moved) {
- d->startX = drag()->target()->x();
- d->startY = drag()->target()->y();
- }
-
- QPointF startLocalPos;
- QPointF curLocalPos;
- if (drag()->target()->parentItem()) {
- startLocalPos = drag()->target()->parentItem()->mapFromScene(d->startScene);
- curLocalPos = drag()->target()->parentItem()->mapFromScene(event->scenePos());
- } else {
- startLocalPos = d->startScene;
- curLocalPos = event->scenePos();
- }
-
- const int dragThreshold = QApplication::startDragDistance();
- qreal dx = qAbs(curLocalPos.x() - startLocalPos.x());
- qreal dy = qAbs(curLocalPos.y() - startLocalPos.y());
-
- if (keepMouseGrab() && d->stealMouse)
- d->drag->setActive(true);
-
- if (d->dragX && d->drag->active()) {
- qreal x = (curLocalPos.x() - startLocalPos.x()) + d->startX;
- if (x < drag()->xmin())
- x = drag()->xmin();
- else if (x > drag()->xmax())
- x = drag()->xmax();
- drag()->target()->setX(x);
- }
- if (d->dragY && d->drag->active()) {
- qreal y = (curLocalPos.y() - startLocalPos.y()) + d->startY;
- if (y < drag()->ymin())
- y = drag()->ymin();
- else if (y > drag()->ymax())
- y = drag()->ymax();
- drag()->target()->setY(y);
- }
-
- if (!keepMouseGrab()) {
- if ((!d->dragY && dy < dragThreshold && d->dragX && dx > dragThreshold)
- || (!d->dragX && dx < dragThreshold && d->dragY && dy > dragThreshold)
- || (d->dragX && d->dragY && (dx > dragThreshold || dy > dragThreshold))) {
- setKeepMouseGrab(true);
- d->stealMouse = true;
- }
- }
-
- d->moved = true;
- }
- QDeclarative1MouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress);
- emit mousePositionChanged(&me);
- me.setX(d->lastPos.x());
- me.setY(d->lastPos.y());
- emit positionChanged(&me);
-}
-
-
-void QDeclarative1MouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- d->stealMouse = false;
- if (!d->absorb) {
- QDeclarativeItem::mouseReleaseEvent(event);
- } else {
- d->saveEvent(event);
- setPressed(false);
- if (d->drag)
- d->drag->setActive(false);
- // If we don't accept hover, we need to reset containsMouse.
- if (!acceptHoverEvents())
- setHovered(false);
- QGraphicsScene *s = scene();
- if (s && s->mouseGrabberItem() == this)
- ungrabMouse();
- setKeepMouseGrab(false);
- }
- d->doubleClick = false;
-}
-
-void QDeclarative1MouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- if (!d->absorb) {
- QDeclarativeItem::mouseDoubleClickEvent(event);
- } else {
- if (d->isDoubleClickConnected())
- d->doubleClick = true;
- d->saveEvent(event);
- QDeclarative1MouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false);
- me.setAccepted(d->isDoubleClickConnected());
- emit this->doubleClicked(&me);
- QDeclarativeItem::mouseDoubleClickEvent(event);
- }
-}
-
-void QDeclarative1MouseArea::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- if (!d->absorb)
- QDeclarativeItem::hoverEnterEvent(event);
- else {
- d->lastPos = event->pos();
- setHovered(true);
- QDeclarative1MouseEvent me(d->lastPos.x(), d->lastPos.y(), Qt::NoButton, Qt::NoButton, event->modifiers(), false, false);
- emit mousePositionChanged(&me);
- }
-}
-
-void QDeclarative1MouseArea::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- if (!d->absorb) {
- QDeclarativeItem::hoverMoveEvent(event);
- } else {
- d->lastPos = event->pos();
- QDeclarative1MouseEvent me(d->lastPos.x(), d->lastPos.y(), Qt::NoButton, Qt::NoButton, event->modifiers(), false, false);
- emit mousePositionChanged(&me);
- me.setX(d->lastPos.x());
- me.setY(d->lastPos.y());
- emit positionChanged(&me);
- }
-}
-
-void QDeclarative1MouseArea::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- if (!d->absorb)
- QDeclarativeItem::hoverLeaveEvent(event);
- else
- setHovered(false);
-}
-
-#ifndef QT_NO_CONTEXTMENU
-void QDeclarative1MouseArea::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
-{
- bool acceptsContextMenuButton;
-#if defined(Q_WS_WINCE)
- // ### WinCE can trigger context menu event with a gesture in the left button or a
- // click with the right button. Since we have no way here to differentiate them when
- // event happens, accepting either of the them will block the event.
- acceptsContextMenuButton = acceptedButtons() & (Qt::LeftButton | Qt::RightButton);
-#else
- acceptsContextMenuButton = acceptedButtons() & Qt::RightButton;
-#endif
-
- if (isEnabled() && event->reason() == QGraphicsSceneContextMenuEvent::Mouse
- && acceptsContextMenuButton) {
- // Do not let the context menu event propagate to items behind.
- return;
- }
-
- QDeclarativeItem::contextMenuEvent(event);
-}
-#endif // QT_NO_CONTEXTMENU
-
-bool QDeclarative1MouseArea::sceneEvent(QEvent *event)
-{
- bool rv = QDeclarativeItem::sceneEvent(event);
- if (event->type() == QEvent::UngrabMouse) {
- Q_D(QDeclarative1MouseArea);
- if (d->pressed) {
- // if our mouse grab has been removed (probably by Flickable), fix our
- // state
- d->pressed = false;
- d->stealMouse = false;
- setKeepMouseGrab(false);
- emit canceled();
- emit pressedChanged();
- if (d->hovered) {
- d->hovered = false;
- emit hoveredChanged();
- }
- }
- }
- return rv;
-}
-
-bool QDeclarative1MouseArea::sendMouseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- QGraphicsSceneMouseEvent mouseEvent(event->type());
- QRectF myRect = mapToScene(QRectF(0, 0, width(), height())).boundingRect();
-
- QGraphicsScene *s = scene();
- QDeclarativeItem *grabber = s ? qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()) : 0;
- bool stealThisEvent = d->stealMouse;
- if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
- mouseEvent.setAccepted(false);
- for (int i = 0x1; i <= 0x10; i <<= 1) {
- if (event->buttons() & i) {
- Qt::MouseButton button = Qt::MouseButton(i);
- mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button)));
- }
- }
- mouseEvent.setScenePos(event->scenePos());
- mouseEvent.setLastScenePos(event->lastScenePos());
- mouseEvent.setPos(mapFromScene(event->scenePos()));
- mouseEvent.setLastPos(mapFromScene(event->lastScenePos()));
-
- switch(mouseEvent.type()) {
- case QEvent::GraphicsSceneMouseMove:
- mouseMoveEvent(&mouseEvent);
- break;
- case QEvent::GraphicsSceneMousePress:
- mousePressEvent(&mouseEvent);
- break;
- case QEvent::GraphicsSceneMouseRelease:
- mouseReleaseEvent(&mouseEvent);
- break;
- default:
- break;
- }
- grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem());
- if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this)
- grabMouse();
-
- return stealThisEvent;
- }
- if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease) {
- if (d->pressed) {
- d->pressed = false;
- d->stealMouse = false;
- if (s && s->mouseGrabberItem() == this)
- ungrabMouse();
- emit canceled();
- emit pressedChanged();
- if (d->hovered) {
- d->hovered = false;
- emit hoveredChanged();
- }
- }
- }
- return false;
-}
-
-bool QDeclarative1MouseArea::sceneEventFilter(QGraphicsItem *i, QEvent *e)
-{
- Q_D(QDeclarative1MouseArea);
- if (!d->absorb || !isVisible() || !d->drag || !d->drag->filterChildren())
- return QDeclarativeItem::sceneEventFilter(i, e);
- switch (e->type()) {
- case QEvent::GraphicsSceneMousePress:
- case QEvent::GraphicsSceneMouseMove:
- case QEvent::GraphicsSceneMouseRelease:
- return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
- default:
- break;
- }
-
- return QDeclarativeItem::sceneEventFilter(i, e);
-}
-
-void QDeclarative1MouseArea::timerEvent(QTimerEvent *event)
-{
- Q_D(QDeclarative1MouseArea);
- if (event->timerId() == d->pressAndHoldTimer.timerId()) {
- d->pressAndHoldTimer.stop();
- bool dragged = d->drag && d->drag->active();
- if (d->pressed && dragged == false && d->hovered == true) {
- d->longPress = true;
- QDeclarative1MouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, false, d->longPress);
- emit pressAndHold(&me);
- }
- }
-}
-
-void QDeclarative1MouseArea::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- Q_D(QDeclarative1MouseArea);
- QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-
- if (d->lastScenePos.isNull)
- d->lastScenePos = mapToScene(d->lastPos);
- else if (newGeometry.x() != oldGeometry.x() || newGeometry.y() != oldGeometry.y())
- d->lastPos = mapFromScene(d->lastScenePos);
-}
-
-QVariant QDeclarative1MouseArea::itemChange(GraphicsItemChange change,
- const QVariant &value)
-{
- Q_D(QDeclarative1MouseArea);
- switch (change) {
- case ItemVisibleHasChanged:
- if (acceptHoverEvents() && d->hovered != (isVisible() && isUnderMouse()))
- setHovered(!d->hovered);
- break;
- default:
- break;
- }
-
- return QDeclarativeItem::itemChange(change, value);
-}
-
-/*!
- \qmlproperty bool QtQuick1::MouseArea::hoverEnabled
- This property holds whether hover events are handled.
-
- By default, mouse events are only handled in response to a button event, or when a button is
- pressed. Hover enables handling of all mouse events even when no mouse button is
- pressed.
-
- This property affects the containsMouse property and the onEntered, onExited and
- onPositionChanged signals.
-*/
-bool QDeclarative1MouseArea::hoverEnabled() const
-{
- return acceptHoverEvents();
-}
-
-void QDeclarative1MouseArea::setHoverEnabled(bool h)
-{
- Q_D(QDeclarative1MouseArea);
- if (h == acceptHoverEvents())
- return;
-
- setAcceptHoverEvents(h);
- emit hoverEnabledChanged();
- if (d->hovered != isUnderMouse())
- setHovered(!d->hovered);
-}
-
-/*!
- \qmlproperty bool QtQuick1::MouseArea::containsMouse
- This property holds whether the mouse is currently inside the mouse area.
-
- \warning This property is not updated if the area moves under the mouse: \e containsMouse will not change.
- In addition, if hoverEnabled is false, containsMouse will only be valid when the mouse is pressed.
-*/
-bool QDeclarative1MouseArea::hovered() const
-{
- Q_D(const QDeclarative1MouseArea);
- return d->hovered;
-}
-
-/*!
- \qmlproperty bool QtQuick1::MouseArea::pressed
- This property holds whether the mouse area is currently pressed.
-*/
-bool QDeclarative1MouseArea::pressed() const
-{
- Q_D(const QDeclarative1MouseArea);
- return d->pressed;
-}
-
-void QDeclarative1MouseArea::setHovered(bool h)
-{
- Q_D(QDeclarative1MouseArea);
- if (d->hovered != h) {
- d->hovered = h;
- emit hoveredChanged();
- d->hovered ? emit entered() : emit exited();
- }
-}
-
-/*!
- \qmlproperty QtQuick1::Qt::MouseButtons MouseArea::acceptedButtons
- This property holds the mouse buttons that the mouse area reacts to.
-
- The available buttons are:
- \list
- \o Qt.LeftButton
- \o Qt.RightButton
- \o Qt.MiddleButton
- \endlist
-
- To accept more than one button the flags can be combined with the
- "|" (or) operator:
-
- \code
- MouseArea { acceptedButtons: Qt.LeftButton | Qt.RightButton }
- \endcode
-
- The default value is \c Qt.LeftButton.
-*/
-Qt::MouseButtons QDeclarative1MouseArea::acceptedButtons() const
-{
- return acceptedMouseButtons();
-}
-
-void QDeclarative1MouseArea::setAcceptedButtons(Qt::MouseButtons buttons)
-{
- if (buttons != acceptedMouseButtons()) {
- setAcceptedMouseButtons(buttons);
- emit acceptedButtonsChanged();
- }
-}
-
-bool QDeclarative1MouseArea::setPressed(bool p)
-{
- Q_D(QDeclarative1MouseArea);
- bool dragged = d->drag && d->drag->active();
- bool isclick = d->pressed == true && p == false && dragged == false && d->hovered == true;
-
- if (d->pressed != p) {
- d->pressed = p;
- QDeclarative1MouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, isclick, d->longPress);
- if (d->pressed) {
- if (!d->doubleClick)
- emit pressed(&me);
- me.setX(d->lastPos.x());
- me.setY(d->lastPos.y());
- emit mousePositionChanged(&me);
- emit pressedChanged();
- } else {
- emit released(&me);
- me.setX(d->lastPos.x());
- me.setY(d->lastPos.y());
- emit pressedChanged();
- if (isclick && !d->longPress && !d->doubleClick)
- emit clicked(&me);
- }
-
- return me.isAccepted();
- }
- return false;
-}
-
-QDeclarative1Drag *QDeclarative1MouseArea::drag()
-{
- Q_D(QDeclarative1MouseArea);
- if (!d->drag)
- d->drag = new QDeclarative1Drag;
- return d->drag;
-}
-
-/*!
- \qmlproperty Item QtQuick1::MouseArea::drag.target
- \qmlproperty bool QtQuick1::MouseArea::drag.active
- \qmlproperty enumeration QtQuick1::MouseArea::drag.axis
- \qmlproperty real QtQuick1::MouseArea::drag.minimumX
- \qmlproperty real QtQuick1::MouseArea::drag.maximumX
- \qmlproperty real QtQuick1::MouseArea::drag.minimumY
- \qmlproperty real QtQuick1::MouseArea::drag.maximumY
- \qmlproperty bool QtQuick1::MouseArea::drag.filterChildren
-
- \c drag provides a convenient way to make an item draggable.
-
- \list
- \i \c drag.target specifies the id of the item to drag.
- \i \c drag.active specifies if the target item is currently being dragged.
- \i \c drag.axis specifies whether dragging can be done horizontally (\c Drag.XAxis), vertically (\c Drag.YAxis), or both (\c Drag.XandYAxis)
- \i \c drag.minimum and \c drag.maximum limit how far the target can be dragged along the corresponding axes.
- \endlist
-
- The following example displays a \l Rectangle that can be dragged along the X-axis. The opacity
- of the rectangle is reduced when it is dragged to the right.
-
- \snippet doc/src/snippets/qtquick1/mousearea/mousearea.qml drag
-
- \note Items cannot be dragged if they are anchored for the requested
- \c drag.axis. For example, if \c anchors.left or \c anchors.right was set
- for \c rect in the above example, it cannot be dragged along the X-axis.
- This can be avoided by settng the anchor value to \c undefined in
- an \l onPressed handler.
-
- If \c drag.filterChildren is set to true, a drag can override descendant MouseAreas. This
- enables a parent MouseArea to handle drags, for example, while descendants handle clicks:
-
- \snippet doc/src/snippets/qtquick1/mousearea/mouseareadragfilter.qml dragfilter
-
-*/
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativemousearea_p.h b/src/qtquick1/graphicsitems/qdeclarativemousearea_p.h
deleted file mode 100644
index 8be347ded2..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativemousearea_p.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEMOUSEAREA_H
-#define QDECLARATIVEMOUSEAREA_H
-
-#include "qdeclarativeitem.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class Q_AUTOTEST_EXPORT QDeclarative1Drag : public QObject
-{
- Q_OBJECT
-
- Q_ENUMS(Axis)
- Q_PROPERTY(QGraphicsObject *target READ target WRITE setTarget NOTIFY targetChanged RESET resetTarget)
- Q_PROPERTY(Axis axis READ axis WRITE setAxis NOTIFY axisChanged)
- Q_PROPERTY(qreal minimumX READ xmin WRITE setXmin NOTIFY minimumXChanged)
- Q_PROPERTY(qreal maximumX READ xmax WRITE setXmax NOTIFY maximumXChanged)
- Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged)
- Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged)
- Q_PROPERTY(bool active READ active NOTIFY activeChanged)
- Q_PROPERTY(bool filterChildren READ filterChildren WRITE setFilterChildren NOTIFY filterChildrenChanged)
- //### consider drag and drop
-
-public:
- QDeclarative1Drag(QObject *parent=0);
- ~QDeclarative1Drag();
-
- QGraphicsObject *target() const;
- void setTarget(QGraphicsObject *);
- void resetTarget();
-
- enum Axis { XAxis=0x01, YAxis=0x02, XandYAxis=0x03 };
- Axis axis() const;
- void setAxis(Axis);
-
- qreal xmin() const;
- void setXmin(qreal);
- qreal xmax() const;
- void setXmax(qreal);
- qreal ymin() const;
- void setYmin(qreal);
- qreal ymax() const;
- void setYmax(qreal);
-
- bool active() const;
- void setActive(bool);
-
- bool filterChildren() const;
- void setFilterChildren(bool);
-
-Q_SIGNALS:
- void targetChanged();
- void axisChanged();
- void minimumXChanged();
- void maximumXChanged();
- void minimumYChanged();
- void maximumYChanged();
- void activeChanged();
- void filterChildrenChanged();
-
-private:
- QGraphicsObject *_target;
- Axis _axis;
- qreal _xmin;
- qreal _xmax;
- qreal _ymin;
- qreal _ymax;
- bool _active : 1;
- bool _filterChildren: 1;
- Q_DISABLE_COPY(QDeclarative1Drag)
-};
-
-class QDeclarative1MouseEvent;
-class QDeclarative1MouseAreaPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1MouseArea : public QDeclarativeItem
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal mouseX READ mouseX NOTIFY mousePositionChanged)
- Q_PROPERTY(qreal mouseY READ mouseY NOTIFY mousePositionChanged)
- Q_PROPERTY(bool containsMouse READ hovered NOTIFY hoveredChanged)
- Q_PROPERTY(bool pressed READ pressed NOTIFY pressedChanged)
- Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
- Q_PROPERTY(Qt::MouseButtons pressedButtons READ pressedButtons NOTIFY pressedChanged)
- Q_PROPERTY(Qt::MouseButtons acceptedButtons READ acceptedButtons WRITE setAcceptedButtons NOTIFY acceptedButtonsChanged)
- Q_PROPERTY(bool hoverEnabled READ hoverEnabled WRITE setHoverEnabled NOTIFY hoverEnabledChanged)
- Q_PROPERTY(QDeclarative1Drag *drag READ drag CONSTANT) //### add flicking to QDeclarative1Drag or add a QDeclarative1Flick ???
- Q_PROPERTY(bool preventStealing READ preventStealing WRITE setPreventStealing NOTIFY preventStealingChanged REVISION 1)
-
-public:
- QDeclarative1MouseArea(QDeclarativeItem *parent=0);
- ~QDeclarative1MouseArea();
-
- qreal mouseX() const;
- qreal mouseY() const;
-
- bool isEnabled() const;
- void setEnabled(bool);
-
- bool hovered() const;
- bool pressed() const;
-
- Qt::MouseButtons pressedButtons() const;
-
- Qt::MouseButtons acceptedButtons() const;
- void setAcceptedButtons(Qt::MouseButtons buttons);
-
- bool hoverEnabled() const;
- void setHoverEnabled(bool h);
-
- QDeclarative1Drag *drag();
-
- bool preventStealing() const;
- void setPreventStealing(bool prevent);
-
-Q_SIGNALS:
- void hoveredChanged();
- void pressedChanged();
- void enabledChanged();
- void acceptedButtonsChanged();
- void hoverEnabledChanged();
- void positionChanged(QDeclarative1MouseEvent *mouse);
- void mousePositionChanged(QDeclarative1MouseEvent *mouse);
- Q_REVISION(1) void preventStealingChanged();
-
- void pressed(QDeclarative1MouseEvent *mouse);
- void pressAndHold(QDeclarative1MouseEvent *mouse);
- void released(QDeclarative1MouseEvent *mouse);
- void clicked(QDeclarative1MouseEvent *mouse);
- void doubleClicked(QDeclarative1MouseEvent *mouse);
- void entered();
- void exited();
- void canceled();
-
-protected:
- void setHovered(bool);
- bool setPressed(bool);
-
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
- void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
- void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
-#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
-#endif // QT_NO_CONTEXTMENU
- bool sceneEvent(QEvent *);
- bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
- bool sceneEventFilter(QGraphicsItem *i, QEvent *e);
- void timerEvent(QTimerEvent *event);
-
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
- virtual QVariant itemChange(GraphicsItemChange change, const QVariant& value);
-
-private:
- void handlePress();
- void handleRelease();
-
-private:
- Q_DISABLE_COPY(QDeclarative1MouseArea)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1MouseArea)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Drag)
-QML_DECLARE_TYPE(QDeclarative1MouseArea)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEMOUSEAREA_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativemousearea_p_p.h b/src/qtquick1/graphicsitems/qdeclarativemousearea_p_p.h
deleted file mode 100644
index 6760a2f42b..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativemousearea_p_p.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEMOUSEREGION_P_H
-#define QDECLARATIVEMOUSEREGION_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeitem_p.h"
-
-#include <qdatetime.h>
-#include <qbasictimer.h>
-#include <qgraphicssceneevent.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1MouseAreaPrivate : public QDeclarativeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1MouseArea)
-
-public:
- QDeclarative1MouseAreaPrivate()
- : absorb(true), hovered(false), pressed(false), longPress(false),
- moved(false), stealMouse(false), doubleClick(false), preventStealing(false), drag(0)
- {
- }
-
- ~QDeclarative1MouseAreaPrivate();
-
- void init()
- {
- Q_Q(QDeclarative1MouseArea);
- q->setAcceptedMouseButtons(Qt::LeftButton);
- q->setFiltersChildEvents(true);
- }
-
- void saveEvent(QGraphicsSceneMouseEvent *event) {
- lastPos = event->pos();
- lastScenePos = event->scenePos();
- lastButton = event->button();
- lastButtons = event->buttons();
- lastModifiers = event->modifiers();
- }
-
- bool isPressAndHoldConnected() {
- Q_Q(QDeclarative1MouseArea);
- static int idx = QObjectPrivate::get(q)->signalIndex("pressAndHold(QDeclarative1MouseEvent*)");
- return QObjectPrivate::get(q)->isSignalConnected(idx);
- }
-
- bool isDoubleClickConnected() {
- Q_Q(QDeclarative1MouseArea);
- static int idx = QObjectPrivate::get(q)->signalIndex("doubleClicked(QDeclarative1MouseEvent*)");
- return QObjectPrivate::get(q)->isSignalConnected(idx);
- }
-
- bool absorb : 1;
- bool hovered : 1;
- bool pressed : 1;
- bool longPress : 1;
- bool moved : 1;
- bool dragX : 1;
- bool dragY : 1;
- bool stealMouse : 1;
- bool doubleClick : 1;
- bool preventStealing : 1;
- QDeclarative1Drag *drag;
- QPointF startScene;
- qreal startX;
- qreal startY;
- QPointF lastPos;
- QDeclarativeNullableValue<QPointF> lastScenePos;
- Qt::MouseButton lastButton;
- Qt::MouseButtons lastButtons;
- Qt::KeyboardModifiers lastModifiers;
- QBasicTimer pressAndHoldTimer;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEMOUSEREGION_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativepainteditem.cpp b/src/qtquick1/graphicsitems/qdeclarativepainteditem.cpp
deleted file mode 100644
index f919cbb0b3..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepainteditem.cpp
+++ /dev/null
@@ -1,501 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativepainteditem_p.h"
-#include "QtQuick1/private/qdeclarativepainteditem_p_p.h"
-
-#include <QDebug>
-#include <QPen>
-#include <QEvent>
-#include <QApplication>
-#include <QGraphicsSceneMouseEvent>
-#include <QPainter>
-#include <QPaintEngine>
-#include <qmath.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \class QDeclarative1PaintedItem
- \brief The QDeclarative1PaintedItem class is an abstract base class for QDeclarative1View items that want cached painting.
- \internal
-
- This is a convenience class for implementing items that cache their painting.
- The contents of the item are cached behind the scenes.
- The dirtyCache() function should be called if the contents change to
- ensure the cache is refreshed the next time painting occurs.
-
- To subclass QDeclarative1PaintedItem, you must reimplement drawContents() to draw
- the contents of the item.
-*/
-
-/*!
- \fn void QDeclarative1PaintedItem::drawContents(QPainter *painter, const QRect &rect)
-
- This function is called when the cache needs to be refreshed. When
- sub-classing QDeclarative1PaintedItem this function should be implemented so as to
- paint the contents of the item using the given \a painter for the
- area of the contents specified by \a rect.
-*/
-
-/*!
- \property QDeclarative1PaintedItem::contentsSize
- \brief The size of the contents
-
- The contents size is the size of the item in regards to how it is painted
- using the drawContents() function. This is distinct from the size of the
- item in regards to height() and width().
-*/
-
-// XXX bug in WebKit - can call repaintRequested and other cache-changing functions from within render!
-static int inpaint=0;
-static int inpaint_clearcache=0;
-
-extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled;
-
-/*!
- Marks areas of the cache that intersect with the given \a rect as dirty and
- in need of being refreshed.
-
- \sa clearCache()
-*/
-void QDeclarative1PaintedItem::dirtyCache(const QRect& rect)
-{
- Q_D(QDeclarative1PaintedItem);
- QRect srect(qCeil(rect.x()*d->contentsScale),
- qCeil(rect.y()*d->contentsScale),
- qCeil(rect.width()*d->contentsScale),
- qCeil(rect.height()*d->contentsScale));
- for (int i=0; i < d->imagecache.count(); ) {
- QDeclarative1PaintedItemPrivate::ImageCacheItem *c = d->imagecache[i];
- QRect isect = (c->area & srect) | c->dirty;
- if (isect == c->area && !inpaint) {
- delete d->imagecache.takeAt(i);
- } else {
- c->dirty = isect;
- ++i;
- }
- }
-}
-
-/*!
- Marks the entirety of the contents cache as dirty.
-
- \sa dirtyCache()
-*/
-void QDeclarative1PaintedItem::clearCache()
-{
- if (inpaint) {
- inpaint_clearcache=1;
- return;
- }
- Q_D(QDeclarative1PaintedItem);
- qDeleteAll(d->imagecache);
- d->imagecache.clear();
-}
-
-/*!
- Returns the size of the contents.
-
- \sa setContentsSize()
-*/
-QSize QDeclarative1PaintedItem::contentsSize() const
-{
- Q_D(const QDeclarative1PaintedItem);
- return d->contentsSize;
-}
-
-/*!
- Sets the size of the contents to the given \a size.
-
- \sa contentsSize()
-*/
-void QDeclarative1PaintedItem::setContentsSize(const QSize &size)
-{
- Q_D(QDeclarative1PaintedItem);
- if (d->contentsSize == size) return;
- prepareGeometryChange();
- d->contentsSize = size;
- clearCache();
- update();
- emit contentsSizeChanged();
-}
-
-qreal QDeclarative1PaintedItem::contentsScale() const
-{
- Q_D(const QDeclarative1PaintedItem);
- return d->contentsScale;
-}
-
-void QDeclarative1PaintedItem::setContentsScale(qreal scale)
-{
- Q_D(QDeclarative1PaintedItem);
- if (d->contentsScale == scale) return;
- d->contentsScale = scale;
- clearCache();
- update();
- emit contentsScaleChanged();
-}
-
-
-/*!
- Constructs a new QDeclarative1PaintedItem with the given \a parent.
-*/
-QDeclarative1PaintedItem::QDeclarative1PaintedItem(QDeclarativeItem *parent)
- : QDeclarativeItem(*(new QDeclarative1PaintedItemPrivate), parent)
-{
-}
-
-/*!
- \internal
- Constructs a new QDeclarative1PaintedItem with the given \a parent and
- initialized private data member \a dd.
-*/
-QDeclarative1PaintedItem::QDeclarative1PaintedItem(QDeclarative1PaintedItemPrivate &dd, QDeclarativeItem *parent)
- : QDeclarativeItem(dd, parent)
-{
-}
-
-/*!
- Destroys the image item.
-*/
-QDeclarative1PaintedItem::~QDeclarative1PaintedItem()
-{
- clearCache();
-}
-
-void QDeclarative1PaintedItem::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- if (newGeometry.width() != oldGeometry.width() ||
- newGeometry.height() != oldGeometry.height())
- clearCache();
-
- QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-QVariant QDeclarative1PaintedItem::itemChange(GraphicsItemChange change,
- const QVariant &value)
-{
- if (change == ItemVisibleHasChanged)
- clearCache();
-
- return QDeclarativeItem::itemChange(change, value);
-}
-
-void QDeclarative1PaintedItem::setCacheFrozen(bool frozen)
-{
- Q_D(QDeclarative1PaintedItem);
- if (d->cachefrozen == frozen)
- return;
- d->cachefrozen = frozen;
- // XXX clear cache?
-}
-
-QRectF QDeclarative1PaintedItem::boundingRect() const
-{
- Q_D(const QDeclarative1PaintedItem);
- qreal w = d->mWidth;
- QSizeF sz = d->contentsSize * d->contentsScale;
- if (w < sz.width())
- w = sz.width();
- qreal h = d->mHeight;
- if (h < sz.height())
- h = sz.height();
- return QRectF(0.0,0.0,w,h);
-}
-
-/*!
- \internal
-*/
-void QDeclarative1PaintedItem::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
-{
- Q_D(QDeclarative1PaintedItem);
- const QRect content = boundingRect().toRect();
- if (content.width() <= 0 || content.height() <= 0)
- return;
-
- ++inpaint;
-
- const QTransform &x = p->deviceTransform();
- QTransform xinv = x.inverted();
- QRegion effectiveClip;
- QRegion sysClip = p->paintEngine()->systemClip();
- if (xinv.type() <= QTransform::TxScale && sysClip.rectCount() < 5) {
- // simple transform, region gets no more complicated...
- effectiveClip = xinv.map(sysClip);
- } else {
- // do not make complicated regions...
- effectiveClip = xinv.mapRect(sysClip.boundingRect());
- }
-
- QRegion topaint = p->clipRegion();
- if (topaint.isEmpty()) {
- if (effectiveClip.isEmpty())
- topaint = QRect(0,0,p->device()->width(),p->device()->height());
- else
- topaint = effectiveClip;
- } else if (!effectiveClip.isEmpty()) {
- topaint &= effectiveClip;
- }
-
- topaint &= content;
- QRegion uncached(content);
- p->setRenderHints(QPainter::SmoothPixmapTransform, d->smooth);
-
- int cachesize=0;
- for (int i=0; i<d->imagecache.count(); ++i) {
- QRect area = d->imagecache[i]->area;
- if (topaint.contains(area)) {
- QRectF target(area.x(), area.y(), area.width(), area.height());
- if (!d->cachefrozen) {
- if (!d->imagecache[i]->dirty.isNull() && topaint.contains(d->imagecache[i]->dirty)) {
-#ifdef Q_WS_MAC
- bool oldSmooth = qt_applefontsmoothing_enabled;
- qt_applefontsmoothing_enabled = false;
-#endif
- QPainter qp(&d->imagecache[i]->image);
-#ifdef Q_WS_MAC
- qt_applefontsmoothing_enabled = oldSmooth;
-#endif
- qp.setRenderHints(QPainter::HighQualityAntialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform, d->smoothCache);
- qp.translate(-area.x(), -area.y());
- qp.scale(d->contentsScale,d->contentsScale);
- QRect clip = d->imagecache[i]->dirty;
- QRect sclip(qFloor(clip.x()/d->contentsScale),
- qFloor(clip.y()/d->contentsScale),
- qCeil(clip.width()/d->contentsScale+clip.x()/d->contentsScale-qFloor(clip.x()/d->contentsScale)),
- qCeil(clip.height()/d->contentsScale+clip.y()/d->contentsScale-qFloor(clip.y()/d->contentsScale)));
- qp.setClipRect(sclip);
- if (d->fillColor.isValid()){
- if(d->fillColor.alpha() < 255){
- // ### Might not work outside of raster paintengine
- QPainter::CompositionMode prev = qp.compositionMode();
- qp.setCompositionMode(QPainter::CompositionMode_Source);
- qp.fillRect(sclip,d->fillColor);
- qp.setCompositionMode(prev);
- }else{
- qp.fillRect(sclip,d->fillColor);
- }
- }
- drawContents(&qp, sclip);
- d->imagecache[i]->dirty = QRect();
- }
- }
- p->drawPixmap(target.toRect(), d->imagecache[i]->image);
- topaint -= area;
- d->imagecache[i]->age=0;
- } else {
- d->imagecache[i]->age++;
- }
- cachesize += area.width()*area.height();
- uncached -= area;
- }
-
- if (!topaint.isEmpty()) {
- if (!d->cachefrozen) {
- // Find a sensible larger area, otherwise will paint lots of tiny images.
- QRect biggerrect = topaint.boundingRect().adjusted(-64,-64,128,128);
- cachesize += biggerrect.width() * biggerrect.height();
- while (d->imagecache.count() && cachesize > d->max_imagecache_size) {
- int oldest=-1;
- int age=-1;
- for (int i=0; i<d->imagecache.count(); ++i) {
- int a = d->imagecache[i]->age;
- if (a > age) {
- oldest = i;
- age = a;
- }
- }
- cachesize -= d->imagecache[oldest]->area.width()*d->imagecache[oldest]->area.height();
- uncached += d->imagecache[oldest]->area;
- delete d->imagecache.takeAt(oldest);
- }
- const QRegion bigger = QRegion(biggerrect) & uncached;
- const QVector<QRect> rects = bigger.rects();
- for (int i = 0; i < rects.count(); ++i) {
- const QRect &r = rects.at(i);
- QPixmap img(r.size());
- if (d->fillColor.isValid())
- img.fill(d->fillColor);
- {
-#ifdef Q_WS_MAC
- bool oldSmooth = qt_applefontsmoothing_enabled;
- qt_applefontsmoothing_enabled = false;
-#endif
- QPainter qp(&img);
-#ifdef Q_WS_MAC
- qt_applefontsmoothing_enabled = oldSmooth;
-#endif
- qp.setRenderHints(QPainter::HighQualityAntialiasing | QPainter::TextAntialiasing | QPainter::SmoothPixmapTransform, d->smoothCache);
-
- qp.translate(-r.x(),-r.y());
- qp.scale(d->contentsScale,d->contentsScale);
- QRect sclip(qFloor(r.x()/d->contentsScale),
- qFloor(r.y()/d->contentsScale),
- qCeil(r.width()/d->contentsScale+r.x()/d->contentsScale-qFloor(r.x()/d->contentsScale)),
- qCeil(r.height()/d->contentsScale+r.y()/d->contentsScale-qFloor(r.y()/d->contentsScale)));
- drawContents(&qp, sclip);
- }
- QDeclarative1PaintedItemPrivate::ImageCacheItem *newitem = new QDeclarative1PaintedItemPrivate::ImageCacheItem;
- newitem->area = r;
- newitem->image = img;
- d->imagecache.append(newitem);
- p->drawPixmap(r, newitem->image);
- }
- } else {
- const QVector<QRect> rects = uncached.rects();
- for (int i = 0; i < rects.count(); ++i)
- p->fillRect(rects.at(i), Qt::lightGray);
- }
- }
-
- if (inpaint_clearcache) {
- clearCache();
- inpaint_clearcache = 0;
- }
-
- --inpaint;
-}
-
-/*!
- \qmlproperty int QtQuick1::PaintedItem::pixelCacheSize
-
- This property holds the maximum number of pixels of image cache to
- allow. The default is 0.1 megapixels. The cache will not be larger
- than the (unscaled) size of the WebView.
-*/
-/*!
- \property QDeclarative1PaintedItem::pixelCacheSize
-
- The maximum number of pixels of image cache to allow. The default
- is 0.1 megapixels. The cache will not be larger than the (unscaled)
- size of the QDeclarative1PaintedItem.
-*/
-int QDeclarative1PaintedItem::pixelCacheSize() const
-{
- Q_D(const QDeclarative1PaintedItem);
- return d->max_imagecache_size;
-}
-
-void QDeclarative1PaintedItem::setPixelCacheSize(int pixels)
-{
- Q_D(QDeclarative1PaintedItem);
- if (pixels < d->max_imagecache_size) {
- int cachesize=0;
- for (int i=0; i<d->imagecache.count(); ++i) {
- QRect area = d->imagecache[i]->area;
- cachesize += area.width()*area.height();
- }
- while (d->imagecache.count() && cachesize > pixels) {
- int oldest=-1;
- int age=-1;
- for (int i=0; i<d->imagecache.count(); ++i) {
- int a = d->imagecache[i]->age;
- if (a > age) {
- oldest = i;
- age = a;
- }
- }
- cachesize -= d->imagecache[oldest]->area.width()*d->imagecache[oldest]->area.height();
- delete d->imagecache.takeAt(oldest);
- }
- }
- d->max_imagecache_size = pixels;
-}
-
-
-
-/*!
- \property QDeclarative1PaintedItem::fillColor
-
- The color to be used to fill the item prior to calling drawContents().
- By default, this is Qt::transparent.
-
- Performance improvements can be achieved if subclasses call this with either an
- invalid color (QColor()), or an appropriate solid color.
-*/
-void QDeclarative1PaintedItem::setFillColor(const QColor& c)
-{
- Q_D(QDeclarative1PaintedItem);
- if (d->fillColor == c)
- return;
- d->fillColor = c;
- emit fillColorChanged();
- update();
-}
-
-QColor QDeclarative1PaintedItem::fillColor() const
-{
- Q_D(const QDeclarative1PaintedItem);
- return d->fillColor;
-}
-
-/*!
- \qmlproperty bool QtQuick1::PaintedItem::smoothCache
-
- Controls whether the cached tiles of which the item is composed are
- rendered smoothly when they are generated.
-
- This is in addition toe Item::smooth, which controls the smooth painting of
- the already-painted cached tiles under transformation.
-*/
-bool QDeclarative1PaintedItem::smoothCache() const
-{
- Q_D(const QDeclarative1PaintedItem);
- return d->smoothCache;
-}
-
-void QDeclarative1PaintedItem::setSmoothCache(bool on)
-{
- Q_D(QDeclarative1PaintedItem);
- if (d->smoothCache != on) {
- d->smoothCache = on;
- clearCache();
- }
-}
-
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativepainteditem_p.h b/src/qtquick1/graphicsitems/qdeclarativepainteditem_p.h
deleted file mode 100644
index cafbc76be7..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepainteditem_p.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEIMAGEITEM_H
-#define QDECLARATIVEIMAGEITEM_H
-
-#include "qdeclarativeitem.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1PaintedItemPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1PaintedItem : public QDeclarativeItem
-{
- Q_OBJECT
-
- Q_PROPERTY(QSize contentsSize READ contentsSize WRITE setContentsSize NOTIFY contentsSizeChanged)
- Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor NOTIFY fillColorChanged)
- Q_PROPERTY(int pixelCacheSize READ pixelCacheSize WRITE setPixelCacheSize)
- Q_PROPERTY(bool smoothCache READ smoothCache WRITE setSmoothCache)
- Q_PROPERTY(qreal contentsScale READ contentsScale WRITE setContentsScale NOTIFY contentsScaleChanged)
-
-
-public:
- QDeclarative1PaintedItem(QDeclarativeItem *parent=0);
- ~QDeclarative1PaintedItem();
-
- QSize contentsSize() const;
- void setContentsSize(const QSize &);
-
- qreal contentsScale() const;
- void setContentsScale(qreal);
-
- int pixelCacheSize() const;
- void setPixelCacheSize(int pixels);
-
- bool smoothCache() const;
- void setSmoothCache(bool on);
-
- QColor fillColor() const;
- void setFillColor(const QColor&);
-
- void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
-
-protected:
- QDeclarative1PaintedItem(QDeclarative1PaintedItemPrivate &dd, QDeclarativeItem *parent);
-
- virtual void drawContents(QPainter *p, const QRect &) = 0;
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
- virtual QVariant itemChange(GraphicsItemChange change,
- const QVariant &value);
-
- void setCacheFrozen(bool);
- QRectF boundingRect() const;
-
-Q_SIGNALS:
- void fillColorChanged();
- void contentsSizeChanged();
- void contentsScaleChanged();
-
-protected Q_SLOTS:
- void dirtyCache(const QRect &);
- void clearCache();
-
-private:
- Q_DISABLE_COPY(QDeclarative1PaintedItem)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1PaintedItem)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1PaintedItem)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativepainteditem_p_p.h b/src/qtquick1/graphicsitems/qdeclarativepainteditem_p_p.h
deleted file mode 100644
index c04e76d54d..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepainteditem_p_p.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEIMAGEITEM_P_H
-#define QDECLARATIVEIMAGEITEM_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeitem_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1PaintedItemPrivate : public QDeclarativeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1PaintedItem)
-
-public:
- QDeclarative1PaintedItemPrivate()
- : max_imagecache_size(100000), contentsScale(1.0), fillColor(Qt::transparent), cachefrozen(false), smoothCache(true)
- {
- }
-
- struct ImageCacheItem {
- ImageCacheItem() : age(0) {}
- ~ImageCacheItem() { }
- int age;
- QRect area;
- QRect dirty; // one dirty area (allows optimization of common cases)
- QPixmap image;
- };
-
- QList<ImageCacheItem*> imagecache;
-
- int max_imagecache_size;
- QSize contentsSize;
- qreal contentsScale;
- QColor fillColor;
- bool cachefrozen;
- bool smoothCache;
-};
-
-QT_END_NAMESPACE
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativepath.cpp b/src/qtquick1/graphicsitems/qdeclarativepath.cpp
deleted file mode 100644
index c8aa75dd1d..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepath.cpp
+++ /dev/null
@@ -1,933 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativepath_p.h"
-#include "QtQuick1/private/qdeclarativepath_p_p.h"
-
-#include <QSet>
-#include <QTime>
-
-#include <private/qbezier_p.h>
-#include <QtCore/qmath.h>
-#include <QtCore/qnumeric.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \qmlclass PathElement QDeclarative1PathElement
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \brief PathElement is the base path type.
-
- This type is the base for all path types. It cannot
- be instantiated.
-
- \sa Path, PathAttribute, PathPercent, PathLine, PathQuad, PathCubic
-*/
-
-/*!
- \qmlclass Path QDeclarative1Path
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \brief A Path object defines a path for use by \l PathView.
-
- A Path is composed of one or more path segments - PathLine, PathQuad,
- PathCubic.
-
- The spacing of the items along the Path can be adjusted via a
- PathPercent object.
-
- PathAttribute allows named attributes with values to be defined
- along the path.
-
- \sa PathView, PathAttribute, PathPercent, PathLine, PathQuad, PathCubic
-*/
-QDeclarative1Path::QDeclarative1Path(QObject *parent)
- : QObject(*(new QDeclarative1PathPrivate), parent)
-{
-}
-
-QDeclarative1Path::~QDeclarative1Path()
-{
-}
-
-/*!
- \qmlproperty real QtQuick1::Path::startX
- \qmlproperty real QtQuick1::Path::startY
- These properties hold the starting position of the path.
-*/
-qreal QDeclarative1Path::startX() const
-{
- Q_D(const QDeclarative1Path);
- return d->startX;
-}
-
-void QDeclarative1Path::setStartX(qreal x)
-{
- Q_D(QDeclarative1Path);
- if (qFuzzyCompare(x, d->startX))
- return;
- d->startX = x;
- emit startXChanged();
- processPath();
-}
-
-qreal QDeclarative1Path::startY() const
-{
- Q_D(const QDeclarative1Path);
- return d->startY;
-}
-
-void QDeclarative1Path::setStartY(qreal y)
-{
- Q_D(QDeclarative1Path);
- if (qFuzzyCompare(y, d->startY))
- return;
- d->startY = y;
- emit startYChanged();
- processPath();
-}
-
-/*!
- \qmlproperty bool QtQuick1::Path::closed
- This property holds whether the start and end of the path are identical.
-*/
-bool QDeclarative1Path::isClosed() const
-{
- Q_D(const QDeclarative1Path);
- return d->closed;
-}
-
-/*!
- \qmlproperty list<PathElement> QtQuick1::Path::pathElements
- This property holds the objects composing the path.
-
- \default
-
- A path can contain the following path objects:
- \list
- \i \l PathLine - a straight line to a given position.
- \i \l PathQuad - a quadratic Bezier curve to a given position with a control point.
- \i \l PathCubic - a cubic Bezier curve to a given position with two control points.
- \i \l PathAttribute - an attribute at a given position in the path.
- \i \l PathPercent - a way to spread out items along various segments of the path.
- \endlist
-
- \snippet doc/src/snippets/qtquick1/pathview/pathattributes.qml 2
-*/
-
-QDeclarativeListProperty<QDeclarative1PathElement> QDeclarative1Path::pathElements()
-{
- Q_D(QDeclarative1Path);
- return QDeclarativeListProperty<QDeclarative1PathElement>(this, d->_pathElements);
-}
-
-void QDeclarative1Path::interpolate(int idx, const QString &name, qreal value)
-{
- Q_D(QDeclarative1Path);
- if (!idx)
- return;
-
- qreal lastValue = 0;
- qreal lastPercent = 0;
- int search = idx - 1;
- while(search >= 0) {
- const AttributePoint &point = d->_attributePoints.at(search);
- if (point.values.contains(name)) {
- lastValue = point.values.value(name);
- lastPercent = point.origpercent;
- break;
- }
- --search;
- }
-
- ++search;
-
- const AttributePoint &curPoint = d->_attributePoints.at(idx);
-
- for (int ii = search; ii < idx; ++ii) {
- AttributePoint &point = d->_attributePoints[ii];
-
- qreal val = lastValue + (value - lastValue) * (point.origpercent - lastPercent) / (curPoint.origpercent - lastPercent);
- point.values.insert(name, val);
- }
-}
-
-void QDeclarative1Path::endpoint(const QString &name)
-{
- Q_D(QDeclarative1Path);
- const AttributePoint &first = d->_attributePoints.first();
- qreal val = first.values.value(name);
- for (int ii = d->_attributePoints.count() - 1; ii >= 0; ii--) {
- const AttributePoint &point = d->_attributePoints.at(ii);
- if (point.values.contains(name)) {
- for (int jj = ii + 1; jj < d->_attributePoints.count(); ++jj) {
- AttributePoint &setPoint = d->_attributePoints[jj];
- setPoint.values.insert(name, val);
- }
- return;
- }
- }
-}
-
-void QDeclarative1Path::processPath()
-{
- Q_D(QDeclarative1Path);
-
- if (!d->componentComplete)
- return;
-
- d->_pointCache.clear();
- d->_attributePoints.clear();
- d->_path = QPainterPath();
-
- AttributePoint first;
- for (int ii = 0; ii < d->_attributes.count(); ++ii)
- first.values[d->_attributes.at(ii)] = 0;
- d->_attributePoints << first;
-
- d->_path.moveTo(d->startX, d->startY);
-
- QDeclarative1Curve *lastCurve = 0;
- foreach (QDeclarative1PathElement *pathElement, d->_pathElements) {
- if (QDeclarative1Curve *curve = qobject_cast<QDeclarative1Curve *>(pathElement)) {
- curve->addToPath(d->_path);
- AttributePoint p;
- p.origpercent = d->_path.length();
- d->_attributePoints << p;
- lastCurve = curve;
- } else if (QDeclarative1PathAttribute *attribute = qobject_cast<QDeclarative1PathAttribute *>(pathElement)) {
- AttributePoint &point = d->_attributePoints.last();
- point.values[attribute->name()] = attribute->value();
- interpolate(d->_attributePoints.count() - 1, attribute->name(), attribute->value());
- } else if (QDeclarative1PathPercent *percent = qobject_cast<QDeclarative1PathPercent *>(pathElement)) {
- AttributePoint &point = d->_attributePoints.last();
- point.values[QLatin1String("_qfx_percent")] = percent->value();
- interpolate(d->_attributePoints.count() - 1, QLatin1String("_qfx_percent"), percent->value());
- }
- }
-
- // Fixup end points
- const AttributePoint &last = d->_attributePoints.last();
- for (int ii = 0; ii < d->_attributes.count(); ++ii) {
- if (!last.values.contains(d->_attributes.at(ii)))
- endpoint(d->_attributes.at(ii));
- }
-
- // Adjust percent
- qreal length = d->_path.length();
- qreal prevpercent = 0;
- qreal prevorigpercent = 0;
- for (int ii = 0; ii < d->_attributePoints.count(); ++ii) {
- const AttributePoint &point = d->_attributePoints.at(ii);
- if (point.values.contains(QLatin1String("_qfx_percent"))) { //special string for QDeclarative1PathPercent
- if ( ii > 0) {
- qreal scale = (d->_attributePoints[ii].origpercent/length - prevorigpercent) /
- (point.values.value(QLatin1String("_qfx_percent"))-prevpercent);
- d->_attributePoints[ii].scale = scale;
- }
- d->_attributePoints[ii].origpercent /= length;
- d->_attributePoints[ii].percent = point.values.value(QLatin1String("_qfx_percent"));
- prevorigpercent = d->_attributePoints[ii].origpercent;
- prevpercent = d->_attributePoints[ii].percent;
- } else {
- d->_attributePoints[ii].origpercent /= length;
- d->_attributePoints[ii].percent = d->_attributePoints[ii].origpercent;
- }
- }
-
- d->closed = lastCurve && d->startX == lastCurve->x() && d->startY == lastCurve->y();
-
- emit changed();
-}
-
-void QDeclarative1Path::classBegin()
-{
- Q_D(QDeclarative1Path);
- d->componentComplete = false;
-}
-
-void QDeclarative1Path::componentComplete()
-{
- Q_D(QDeclarative1Path);
- QSet<QString> attrs;
- d->componentComplete = true;
-
- // First gather up all the attributes
- foreach (QDeclarative1PathElement *pathElement, d->_pathElements) {
- if (QDeclarative1PathAttribute *attribute =
- qobject_cast<QDeclarative1PathAttribute *>(pathElement))
- attrs.insert(attribute->name());
- }
- d->_attributes = attrs.toList();
-
- processPath();
-
- foreach (QDeclarative1PathElement *pathElement, d->_pathElements)
- connect(pathElement, SIGNAL(changed()), this, SLOT(processPath()));
-}
-
-QPainterPath QDeclarative1Path::path() const
-{
- Q_D(const QDeclarative1Path);
- return d->_path;
-}
-
-QStringList QDeclarative1Path::attributes() const
-{
- Q_D(const QDeclarative1Path);
- if (!d->componentComplete) {
- QSet<QString> attrs;
-
- // First gather up all the attributes
- foreach (QDeclarative1PathElement *pathElement, d->_pathElements) {
- if (QDeclarative1PathAttribute *attribute =
- qobject_cast<QDeclarative1PathAttribute *>(pathElement))
- attrs.insert(attribute->name());
- }
- return attrs.toList();
- }
- return d->_attributes;
-}
-
-static inline QBezier nextBezier(const QPainterPath &path, int *from, qreal *bezLength)
-{
- const int lastElement = path.elementCount() - 1;
- for (int i=*from; i <= lastElement; ++i) {
- const QPainterPath::Element &e = path.elementAt(i);
-
- switch (e.type) {
- case QPainterPath::MoveToElement:
- break;
- case QPainterPath::LineToElement:
- {
- QLineF line(path.elementAt(i-1), e);
- *bezLength = line.length();
- QPointF a = path.elementAt(i-1);
- QPointF delta = e - a;
- *from = i+1;
- return QBezier::fromPoints(a, a + delta / 3, a + 2 * delta / 3, e);
- }
- case QPainterPath::CurveToElement:
- {
- QBezier b = QBezier::fromPoints(path.elementAt(i-1),
- e,
- path.elementAt(i+1),
- path.elementAt(i+2));
- *bezLength = b.length();
- *from = i+3;
- return b;
- }
- default:
- break;
- }
- }
- *from = lastElement;
- *bezLength = 0;
- return QBezier();
-}
-
-void QDeclarative1Path::createPointCache() const
-{
- Q_D(const QDeclarative1Path);
- qreal pathLength = d->_path.length();
- if (pathLength <= 0 || qIsNaN(pathLength))
- return;
- // more points means less jitter between items as they move along the
- // path, but takes longer to generate
- const int points = qCeil(pathLength*5);
- const int lastElement = d->_path.elementCount() - 1;
- d->_pointCache.resize(points+1);
-
- int currElement = 0;
- qreal bezLength = 0;
- QBezier currBez = nextBezier(d->_path, &currElement, &bezLength);
- qreal currLength = bezLength;
- qreal epc = currLength / pathLength;
-
- for (int i = 0; i < d->_pointCache.size(); i++) {
- //find which set we are in
- qreal prevPercent = 0;
- qreal prevOrigPercent = 0;
- for (int ii = 0; ii < d->_attributePoints.count(); ++ii) {
- qreal percent = qreal(i)/points;
- const AttributePoint &point = d->_attributePoints.at(ii);
- if (percent < point.percent || ii == d->_attributePoints.count() - 1) { //### || is special case for very last item
- qreal elementPercent = (percent - prevPercent);
-
- qreal spc = prevOrigPercent + elementPercent * point.scale;
-
- while (spc > epc) {
- if (currElement > lastElement)
- break;
- currBez = nextBezier(d->_path, &currElement, &bezLength);
- if (bezLength == 0.0) {
- currLength = pathLength;
- epc = 1.0;
- break;
- }
- currLength += bezLength;
- epc = currLength / pathLength;
- }
- qreal realT = (pathLength * spc - (currLength - bezLength)) / bezLength;
- d->_pointCache[i] = currBez.pointAt(qBound(qreal(0), realT, qreal(1)));
- break;
- }
- prevOrigPercent = point.origpercent;
- prevPercent = point.percent;
- }
- }
-}
-
-QPointF QDeclarative1Path::pointAt(qreal p) const
-{
- Q_D(const QDeclarative1Path);
- if (d->_pointCache.isEmpty()) {
- createPointCache();
- if (d->_pointCache.isEmpty())
- return QPointF();
- }
- int idx = qRound(p*d->_pointCache.size());
- if (idx >= d->_pointCache.size())
- idx = d->_pointCache.size() - 1;
- else if (idx < 0)
- idx = 0;
- return d->_pointCache.at(idx);
-}
-
-qreal QDeclarative1Path::attributeAt(const QString &name, qreal percent) const
-{
- Q_D(const QDeclarative1Path);
- if (percent < 0 || percent > 1)
- return 0;
-
- for (int ii = 0; ii < d->_attributePoints.count(); ++ii) {
- const AttributePoint &point = d->_attributePoints.at(ii);
-
- if (point.percent == percent) {
- return point.values.value(name);
- } else if (point.percent > percent) {
- qreal lastValue =
- ii?(d->_attributePoints.at(ii - 1).values.value(name)):0;
- qreal lastPercent =
- ii?(d->_attributePoints.at(ii - 1).percent):0;
- qreal curValue = point.values.value(name);
- qreal curPercent = point.percent;
-
- return lastValue + (curValue - lastValue) * (percent - lastPercent) / (curPercent - lastPercent);
- }
- }
-
- return 0;
-}
-
-/****************************************************************************/
-
-qreal QDeclarative1Curve::x() const
-{
- return _x;
-}
-
-void QDeclarative1Curve::setX(qreal x)
-{
- if (_x != x) {
- _x = x;
- emit xChanged();
- emit changed();
- }
-}
-
-qreal QDeclarative1Curve::y() const
-{
- return _y;
-}
-
-void QDeclarative1Curve::setY(qreal y)
-{
- if (_y != y) {
- _y = y;
- emit yChanged();
- emit changed();
- }
-}
-
-/****************************************************************************/
-
-/*!
- \qmlclass PathAttribute QDeclarative1PathAttribute
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \brief The PathAttribute allows setting an attribute at a given position in a Path.
-
- The PathAttribute object allows attributes consisting of a name and
- a value to be specified for various points along a path. The
- attributes are exposed to the delegate as
- \l{qdeclarativeintroduction.html#attached-properties} {Attached Properties}.
- The value of an attribute at any particular point along the path is interpolated
- from the PathAttributes bounding that point.
-
- The example below shows a path with the items scaled to 30% with
- opacity 50% at the top of the path and scaled 100% with opacity
- 100% at the bottom. Note the use of the PathView.iconScale and
- PathView.iconOpacity attached properties to set the scale and opacity
- of the delegate.
-
- \table
- \row
- \o \image declarative-pathattribute.png
- \o
- \snippet doc/src/snippets/qtquick1/pathview/pathattributes.qml 0
- (see the PathView documentation for the specification of ContactModel.qml
- used for ContactModel above.)
- \endtable
-
-
- \sa Path
-*/
-
-/*!
- \qmlproperty string QtQuick1::PathAttribute::name
- This property holds the name of the attribute to change.
-
- This attribute will be available to the delegate as PathView.<name>
-
- Note that using an existing Item property name such as "opacity" as an
- attribute is allowed. This is because path attributes add a new
- \l{qdeclarativeintroduction.html#attached-properties} {Attached Property}
- which in no way clashes with existing properties.
-*/
-
-/*!
- the name of the attribute to change.
-*/
-
-QString QDeclarative1PathAttribute::name() const
-{
- return _name;
-}
-
-void QDeclarative1PathAttribute::setName(const QString &name)
-{
- if (_name == name)
- return;
- _name = name;
- emit nameChanged();
-}
-
-/*!
- \qmlproperty real QtQuick1::PathAttribute::value
- This property holds the value for the attribute.
-
- The value specified can be used to influence the visual appearance
- of an item along the path. For example, the following Path specifies
- an attribute named \e itemRotation, which has the value \e 0 at the
- beginning of the path, and the value 90 at the end of the path.
-
- \qml
- Path {
- startX: 0
- startY: 0
- PathAttribute { name: "itemRotation"; value: 0 }
- PathLine { x: 100; y: 100 }
- PathAttribute { name: "itemRotation"; value: 90 }
- }
- \endqml
-
- In our delegate, we can then bind the \e rotation property to the
- \l{qdeclarativeintroduction.html#attached-properties} {Attached Property}
- \e PathView.itemRotation created for this attribute.
-
- \qml
- Rectangle {
- width: 10; height: 10
- rotation: PathView.itemRotation
- }
- \endqml
-
- As each item is positioned along the path, it will be rotated accordingly:
- an item at the beginning of the path with be not be rotated, an item at
- the end of the path will be rotated 90 degrees, and an item mid-way along
- the path will be rotated 45 degrees.
-*/
-
-/*!
- the new value of the attribute.
-*/
-qreal QDeclarative1PathAttribute::value() const
-{
- return _value;
-}
-
-void QDeclarative1PathAttribute::setValue(qreal value)
-{
- if (_value != value) {
- _value = value;
- emit valueChanged();
- emit changed();
- }
-}
-
-/****************************************************************************/
-
-/*!
- \qmlclass PathLine QDeclarative1PathLine
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \brief The PathLine defines a straight line.
-
- The example below creates a path consisting of a straight line from
- 0,100 to 200,100:
-
- \qml
- Path {
- startX: 0; startY: 100
- PathLine { x: 200; y: 100 }
- }
- \endqml
-
- \sa Path, PathQuad, PathCubic
-*/
-
-/*!
- \qmlproperty real QtQuick1::PathLine::x
- \qmlproperty real QtQuick1::PathLine::y
-
- Defines the end point of the line.
-*/
-
-void QDeclarative1PathLine::addToPath(QPainterPath &path)
-{
- path.lineTo(x(), y());
-}
-
-/****************************************************************************/
-
-/*!
- \qmlclass PathQuad QDeclarative1PathQuad
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \brief The PathQuad defines a quadratic Bezier curve with a control point.
-
- The following QML produces the path shown below:
- \table
- \row
- \o \image declarative-pathquad.png
- \o
- \qml
- Path {
- startX: 0; startY: 0
- PathQuad { x: 200; y: 0; controlX: 100; controlY: 150 }
- }
- \endqml
- \endtable
-
- \sa Path, PathCubic, PathLine
-*/
-
-/*!
- \qmlproperty real QtQuick1::PathQuad::x
- \qmlproperty real QtQuick1::PathQuad::y
-
- Defines the end point of the curve.
-*/
-
-/*!
- \qmlproperty real QtQuick1::PathQuad::controlX
- \qmlproperty real QtQuick1::PathQuad::controlY
-
- Defines the position of the control point.
-*/
-
-/*!
- the x position of the control point.
-*/
-qreal QDeclarative1PathQuad::controlX() const
-{
- return _controlX;
-}
-
-void QDeclarative1PathQuad::setControlX(qreal x)
-{
- if (_controlX != x) {
- _controlX = x;
- emit controlXChanged();
- emit changed();
- }
-}
-
-
-/*!
- the y position of the control point.
-*/
-qreal QDeclarative1PathQuad::controlY() const
-{
- return _controlY;
-}
-
-void QDeclarative1PathQuad::setControlY(qreal y)
-{
- if (_controlY != y) {
- _controlY = y;
- emit controlYChanged();
- emit changed();
- }
-}
-
-void QDeclarative1PathQuad::addToPath(QPainterPath &path)
-{
- path.quadTo(controlX(), controlY(), x(), y());
-}
-
-/****************************************************************************/
-
-/*!
- \qmlclass PathCubic QDeclarative1PathCubic
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \brief The PathCubic defines a cubic Bezier curve with two control points.
-
- The following QML produces the path shown below:
- \table
- \row
- \o \image declarative-pathcubic.png
- \o
- \qml
- Path {
- startX: 20; startY: 0
- PathCubic {
- x: 180; y: 0
- control1X: -10; control1Y: 90
- control2X: 210; control2Y: 90
- }
- }
- \endqml
- \endtable
-
- \sa Path, PathQuad, PathLine
-*/
-
-/*!
- \qmlproperty real QtQuick1::PathCubic::x
- \qmlproperty real QtQuick1::PathCubic::y
-
- Defines the end point of the curve.
-*/
-
-/*!
- \qmlproperty real QtQuick1::PathCubic::control1X
- \qmlproperty real QtQuick1::PathCubic::control1Y
-
- Defines the position of the first control point.
-*/
-qreal QDeclarative1PathCubic::control1X() const
-{
- return _control1X;
-}
-
-void QDeclarative1PathCubic::setControl1X(qreal x)
-{
- if (_control1X != x) {
- _control1X = x;
- emit control1XChanged();
- emit changed();
- }
-}
-
-qreal QDeclarative1PathCubic::control1Y() const
-{
- return _control1Y;
-}
-
-void QDeclarative1PathCubic::setControl1Y(qreal y)
-{
- if (_control1Y != y) {
- _control1Y = y;
- emit control1YChanged();
- emit changed();
- }
-}
-
-/*!
- \qmlproperty real QtQuick1::PathCubic::control2X
- \qmlproperty real QtQuick1::PathCubic::control2Y
-
- Defines the position of the second control point.
-*/
-qreal QDeclarative1PathCubic::control2X() const
-{
- return _control2X;
-}
-
-void QDeclarative1PathCubic::setControl2X(qreal x)
-{
- if (_control2X != x) {
- _control2X = x;
- emit control2XChanged();
- emit changed();
- }
-}
-
-qreal QDeclarative1PathCubic::control2Y() const
-{
- return _control2Y;
-}
-
-void QDeclarative1PathCubic::setControl2Y(qreal y)
-{
- if (_control2Y != y) {
- _control2Y = y;
- emit control2YChanged();
- emit changed();
- }
-}
-
-void QDeclarative1PathCubic::addToPath(QPainterPath &path)
-{
- path.cubicTo(control1X(), control1Y(), control2X(), control2Y(), x(), y());
-}
-
-/****************************************************************************/
-
-/*!
- \qmlclass PathPercent QDeclarative1PathPercent
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \brief The PathPercent manipulates the way a path is interpreted.
-
- PathPercent allows you to manipulate the spacing between items on a
- PathView's path. You can use it to bunch together items on part of
- the path, and spread them out on other parts of the path.
-
- The examples below show the normal distrubution of items along a path
- compared to a distribution which places 50% of the items along the
- PathLine section of the path.
- \table
- \row
- \o \image declarative-nopercent.png
- \o
- \qml
- PathView {
- // ...
- Path {
- startX: 20; startY: 0
- PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }
- PathLine { x: 150; y: 80 }
- PathQuad { x: 180; y: 0; controlX: 200; controlY: 80 }
- }
- }
- \endqml
- \row
- \o \image declarative-percent.png
- \o
- \qml
- PathView {
- // ...
- Path {
- startX: 20; startY: 0
- PathQuad { x: 50; y: 80; controlX: 0; controlY: 80 }
- PathPercent { value: 0.25 }
- PathLine { x: 150; y: 80 }
- PathPercent { value: 0.75 }
- PathQuad { x: 180; y: 0; controlX: 200; controlY: 80 }
- PathPercent { value: 1 }
- }
- }
- \endqml
- \endtable
-
- \sa Path
-*/
-
-/*!
- \qmlproperty real QtQuick1::PathPercent::value
- The proporation of items that should be laid out up to this point.
-
- This value should always be higher than the last value specified
- by a PathPercent at a previous position in the Path.
-
- In the following example we have a Path made up of three PathLines.
- Normally, the items of the PathView would be laid out equally along
- this path, with an equal number of items per line segment. PathPercent
- allows us to specify that the first and third lines should each hold
- 10% of the laid out items, while the second line should hold the remaining
- 80%.
-
- \qml
- PathView {
- // ...
- Path {
- startX: 0; startY: 0
- PathLine { x:100; y: 0; }
- PathPercent { value: 0.1 }
- PathLine { x: 100; y: 100 }
- PathPercent { value: 0.9 }
- PathLine { x: 100; y: 0 }
- PathPercent { value: 1 }
- }
- }
- \endqml
-*/
-
-qreal QDeclarative1PathPercent::value() const
-{
- return _value;
-}
-
-void QDeclarative1PathPercent::setValue(qreal value)
-{
- if (_value != value) {
- _value = value;
- emit valueChanged();
- emit changed();
- }
-}
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativepath_p.h b/src/qtquick1/graphicsitems/qdeclarativepath_p.h
deleted file mode 100644
index 701903ca10..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepath_p.h
+++ /dev/null
@@ -1,285 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEPATH_H
-#define QDECLARATIVEPATH_H
-
-#include "qdeclarativeitem.h"
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QtCore/QObject>
-#include <QtGui/QPainterPath>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class Q_AUTOTEST_EXPORT QDeclarative1PathElement : public QObject
-{
- Q_OBJECT
-public:
- QDeclarative1PathElement(QObject *parent=0) : QObject(parent) {}
-Q_SIGNALS:
- void changed();
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1PathAttribute : public QDeclarative1PathElement
-{
- Q_OBJECT
-
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
- Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
-public:
- QDeclarative1PathAttribute(QObject *parent=0) : QDeclarative1PathElement(parent), _value(0) {}
-
-
- QString name() const;
- void setName(const QString &name);
-
- qreal value() const;
- void setValue(qreal value);
-
-Q_SIGNALS:
- void nameChanged();
- void valueChanged();
-
-private:
- QString _name;
- qreal _value;
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1Curve : public QDeclarative1PathElement
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
- Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
-public:
- QDeclarative1Curve(QObject *parent=0) : QDeclarative1PathElement(parent), _x(0), _y(0) {}
-
- qreal x() const;
- void setX(qreal x);
-
- qreal y() const;
- void setY(qreal y);
-
- virtual void addToPath(QPainterPath &) {}
-
-Q_SIGNALS:
- void xChanged();
- void yChanged();
-
-private:
- qreal _x;
- qreal _y;
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1PathLine : public QDeclarative1Curve
-{
- Q_OBJECT
-public:
- QDeclarative1PathLine(QObject *parent=0) : QDeclarative1Curve(parent) {}
-
- void addToPath(QPainterPath &path);
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1PathQuad : public QDeclarative1Curve
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal controlX READ controlX WRITE setControlX NOTIFY controlXChanged)
- Q_PROPERTY(qreal controlY READ controlY WRITE setControlY NOTIFY controlYChanged)
-public:
- QDeclarative1PathQuad(QObject *parent=0) : QDeclarative1Curve(parent), _controlX(0), _controlY(0) {}
-
- qreal controlX() const;
- void setControlX(qreal x);
-
- qreal controlY() const;
- void setControlY(qreal y);
-
- void addToPath(QPainterPath &path);
-
-Q_SIGNALS:
- void controlXChanged();
- void controlYChanged();
-
-private:
- qreal _controlX;
- qreal _controlY;
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1PathCubic : public QDeclarative1Curve
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal control1X READ control1X WRITE setControl1X NOTIFY control1XChanged)
- Q_PROPERTY(qreal control1Y READ control1Y WRITE setControl1Y NOTIFY control1YChanged)
- Q_PROPERTY(qreal control2X READ control2X WRITE setControl2X NOTIFY control2XChanged)
- Q_PROPERTY(qreal control2Y READ control2Y WRITE setControl2Y NOTIFY control2YChanged)
-public:
- QDeclarative1PathCubic(QObject *parent=0) : QDeclarative1Curve(parent), _control1X(0), _control1Y(0), _control2X(0), _control2Y(0) {}
-
- qreal control1X() const;
- void setControl1X(qreal x);
-
- qreal control1Y() const;
- void setControl1Y(qreal y);
-
- qreal control2X() const;
- void setControl2X(qreal x);
-
- qreal control2Y() const;
- void setControl2Y(qreal y);
-
- void addToPath(QPainterPath &path);
-
-Q_SIGNALS:
- void control1XChanged();
- void control1YChanged();
- void control2XChanged();
- void control2YChanged();
-
-private:
- qreal _control1X;
- qreal _control1Y;
- qreal _control2X;
- qreal _control2Y;
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1PathPercent : public QDeclarative1PathElement
-{
- Q_OBJECT
- Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged)
-public:
- QDeclarative1PathPercent(QObject *parent=0) : QDeclarative1PathElement(parent) {}
-
- qreal value() const;
- void setValue(qreal value);
-
-signals:
- void valueChanged();
-
-private:
- qreal _value;
-};
-
-class QDeclarative1PathPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1Path : public QObject, public QDeclarativeParserStatus
-{
- Q_OBJECT
-
- Q_INTERFACES(QDeclarativeParserStatus)
- Q_PROPERTY(QDeclarativeListProperty<QDeclarative1PathElement> pathElements READ pathElements)
- Q_PROPERTY(qreal startX READ startX WRITE setStartX NOTIFY startXChanged)
- Q_PROPERTY(qreal startY READ startY WRITE setStartY NOTIFY startYChanged)
- Q_PROPERTY(bool closed READ isClosed NOTIFY changed)
- Q_CLASSINFO("DefaultProperty", "pathElements")
- Q_INTERFACES(QDeclarativeParserStatus)
-public:
- QDeclarative1Path(QObject *parent=0);
- ~QDeclarative1Path();
-
- QDeclarativeListProperty<QDeclarative1PathElement> pathElements();
-
- qreal startX() const;
- void setStartX(qreal x);
-
- qreal startY() const;
- void setStartY(qreal y);
-
- bool isClosed() const;
-
- QPainterPath path() const;
- QStringList attributes() const;
- qreal attributeAt(const QString &, qreal) const;
- QPointF pointAt(qreal) const;
-
-Q_SIGNALS:
- void changed();
- void startXChanged();
- void startYChanged();
-
-protected:
- virtual void componentComplete();
- virtual void classBegin();
-
-private Q_SLOTS:
- void processPath();
-
-private:
- struct AttributePoint {
- AttributePoint() : percent(0), scale(1), origpercent(0) {}
- AttributePoint(const AttributePoint &other)
- : percent(other.percent), scale(other.scale), origpercent(other.origpercent), values(other.values) {}
- AttributePoint &operator=(const AttributePoint &other) {
- percent = other.percent; scale = other.scale; origpercent = other.origpercent; values = other.values; return *this;
- }
- qreal percent; //massaged percent along the painter path
- qreal scale;
- qreal origpercent; //'real' percent along the painter path
- QHash<QString, qreal> values;
- };
-
- void interpolate(int idx, const QString &name, qreal value);
- void endpoint(const QString &name);
- void createPointCache() const;
-
-private:
- Q_DISABLE_COPY(QDeclarative1Path)
- Q_DECLARE_PRIVATE(QDeclarative1Path)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1PathElement)
-QML_DECLARE_TYPE(QDeclarative1PathAttribute)
-QML_DECLARE_TYPE(QDeclarative1Curve)
-QML_DECLARE_TYPE(QDeclarative1PathLine)
-QML_DECLARE_TYPE(QDeclarative1PathQuad)
-QML_DECLARE_TYPE(QDeclarative1PathCubic)
-QML_DECLARE_TYPE(QDeclarative1PathPercent)
-QML_DECLARE_TYPE(QDeclarative1Path)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEPATH_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativepath_p_p.h b/src/qtquick1/graphicsitems/qdeclarativepath_p_p.h
deleted file mode 100644
index 2761b3ea05..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepath_p_p.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEPATH_P_H
-#define QDECLARATIVEPATH_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativepath_p.h"
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <private/qobject_p.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1PathPrivate : public QObjectPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1Path)
-
-public:
- QDeclarative1PathPrivate() : startX(0), startY(0), closed(false), componentComplete(true) { }
-
- QPainterPath _path;
- QList<QDeclarative1PathElement*> _pathElements;
- mutable QVector<QPointF> _pointCache;
- QList<QDeclarative1Path::AttributePoint> _attributePoints;
- QStringList _attributes;
- int startX;
- int startY;
- bool closed;
- bool componentComplete;
-};
-
-QT_END_NAMESPACE
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativepathview.cpp b/src/qtquick1/graphicsitems/qdeclarativepathview.cpp
deleted file mode 100644
index 2ee65728ff..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepathview.cpp
+++ /dev/null
@@ -1,1750 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativepathview_p.h"
-#include "QtQuick1/private/qdeclarativepathview_p_p.h"
-
-#include <QtQuick1/private/qdeclarativestate_p.h>
-#include <QtQuick1/private/qdeclarativeopenmetaobject_p.h>
-#include <QDebug>
-#include <QEvent>
-#include <QGraphicsSceneEvent>
-
-#include <qmath.h>
-#include <math.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-inline qreal qmlMod(qreal x, qreal y)
-{
-#ifdef QT_USE_MATH_H_FLOATS
- if(sizeof(qreal) == sizeof(float))
- return fmodf(float(x), float(y));
- else
-#endif
- return fmod(x, y);
-}
-
-static QDeclarative1OpenMetaObjectType *qPathViewAttachedType = 0;
-
-QDeclarative1PathViewAttached::QDeclarative1PathViewAttached(QObject *parent)
-: QObject(parent), m_percent(-1), m_view(0), m_onPath(false), m_isCurrent(false)
-{
- if (qPathViewAttachedType) {
- m_metaobject = new QDeclarative1OpenMetaObject(this, qPathViewAttachedType);
- m_metaobject->setCached(true);
- } else {
- m_metaobject = new QDeclarative1OpenMetaObject(this);
- }
-}
-
-QDeclarative1PathViewAttached::~QDeclarative1PathViewAttached()
-{
-}
-
-QVariant QDeclarative1PathViewAttached::value(const QByteArray &name) const
-{
- return m_metaobject->value(name);
-}
-void QDeclarative1PathViewAttached::setValue(const QByteArray &name, const QVariant &val)
-{
- m_metaobject->setValue(name, val);
-}
-
-
-void QDeclarative1PathViewPrivate::init()
-{
- Q_Q(QDeclarative1PathView);
- offset = 0;
- q->setAcceptedMouseButtons(Qt::LeftButton);
- q->setFlag(QGraphicsItem::ItemIsFocusScope);
- q->setFiltersChildEvents(true);
- q->connect(&tl, SIGNAL(updated()), q, SLOT(ticked()));
- lastPosTime.invalidate();
- static int timelineCompletedIdx = -1;
- static int movementEndingIdx = -1;
- if (timelineCompletedIdx == -1) {
- timelineCompletedIdx = QDeclarative1TimeLine::staticMetaObject.indexOfSignal("completed()");
- movementEndingIdx = QDeclarative1PathView::staticMetaObject.indexOfSlot("movementEnding()");
- }
- QMetaObject::connect(&tl, timelineCompletedIdx,
- q, movementEndingIdx, Qt::DirectConnection);
-}
-
-QDeclarativeItem *QDeclarative1PathViewPrivate::getItem(int modelIndex)
-{
- Q_Q(QDeclarative1PathView);
- requestedIndex = modelIndex;
- QDeclarativeItem *item = model->item(modelIndex, false);
- if (item) {
- if (!attType) {
- // pre-create one metatype to share with all attached objects
- attType = new QDeclarative1OpenMetaObjectType(&QDeclarative1PathViewAttached::staticMetaObject, qmlEngine(q));
- foreach(const QString &attr, path->attributes())
- attType->createProperty(attr.toUtf8());
- }
- qPathViewAttachedType = attType;
- QDeclarative1PathViewAttached *att = static_cast<QDeclarative1PathViewAttached *>(qmlAttachedPropertiesObject<QDeclarative1PathView>(item));
- qPathViewAttachedType = 0;
- if (att) {
- att->m_view = q;
- att->setOnPath(true);
- }
- item->setParentItem(q);
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
- itemPrivate->addItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- }
- requestedIndex = -1;
- return item;
-}
-
-void QDeclarative1PathViewPrivate::releaseItem(QDeclarativeItem *item)
-{
- if (!item || !model)
- return;
- QDeclarativeItemPrivate *itemPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(item));
- itemPrivate->removeItemChangeListener(this, QDeclarativeItemPrivate::Geometry);
- if (model->release(item) == 0) {
- // item was not destroyed, and we no longer reference it.
- if (QDeclarative1PathViewAttached *att = attached(item))
- att->setOnPath(false);
- }
-}
-
-QDeclarative1PathViewAttached *QDeclarative1PathViewPrivate::attached(QDeclarativeItem *item)
-{
- return static_cast<QDeclarative1PathViewAttached *>(qmlAttachedPropertiesObject<QDeclarative1PathView>(item, false));
-}
-
-void QDeclarative1PathViewPrivate::clear()
-{
- for (int i=0; i<items.count(); i++){
- QDeclarativeItem *p = items[i];
- releaseItem(p);
- }
- items.clear();
-}
-
-void QDeclarative1PathViewPrivate::updateMappedRange()
-{
- if (model && pathItems != -1 && pathItems < modelCount)
- mappedRange = qreal(pathItems)/modelCount;
- else
- mappedRange = 1.0;
-}
-
-qreal QDeclarative1PathViewPrivate::positionOfIndex(qreal index) const
-{
- qreal pos = -1.0;
-
- if (model && index >= 0 && index < modelCount) {
- qreal start = 0.0;
- if (haveHighlightRange && highlightRangeMode != QDeclarative1PathView::NoHighlightRange)
- start = highlightRangeStart;
- qreal globalPos = index + offset;
- globalPos = qmlMod(globalPos, qreal(modelCount)) / modelCount;
- if (pathItems != -1 && pathItems < modelCount) {
- globalPos += start * mappedRange;
- globalPos = qmlMod(globalPos, 1.0);
- if (globalPos < mappedRange)
- pos = globalPos / mappedRange;
- } else {
- pos = qmlMod(globalPos + start, 1.0);
- }
- }
-
- return pos;
-}
-
-void QDeclarative1PathViewPrivate::createHighlight()
-{
- Q_Q(QDeclarative1PathView);
- if (!q->isComponentComplete())
- return;
-
- bool changed = false;
- if (highlightItem) {
- if (highlightItem->scene())
- highlightItem->scene()->removeItem(highlightItem);
- highlightItem->deleteLater();
- highlightItem = 0;
- changed = true;
- }
-
- QDeclarativeItem *item = 0;
- if (highlightComponent) {
- QDeclarativeContext *highlightContext = new QDeclarativeContext(qmlContext(q));
- QObject *nobj = highlightComponent->create(highlightContext);
- if (nobj) {
- QDeclarative_setParent_noEvent(highlightContext, nobj);
- item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item)
- delete nobj;
- } else {
- delete highlightContext;
- }
- } else {
- item = new QDeclarativeItem;
- }
- if (item) {
- QDeclarative_setParent_noEvent(item, q);
- item->setParentItem(q);
- highlightItem = item;
- changed = true;
- }
- if (changed)
- emit q->highlightItemChanged();
-}
-
-void QDeclarative1PathViewPrivate::updateHighlight()
-{
- Q_Q(QDeclarative1PathView);
- if (!q->isComponentComplete() || !isValid())
- return;
- if (highlightItem) {
- if (haveHighlightRange && highlightRangeMode == QDeclarative1PathView::StrictlyEnforceRange) {
- updateItem(highlightItem, highlightRangeStart);
- } else {
- qreal target = currentIndex;
-
- offsetAdj = 0.0;
- tl.reset(moveHighlight);
- moveHighlight.setValue(highlightPosition);
-
- const int duration = highlightMoveDuration;
-
- if (target - highlightPosition > modelCount/2) {
- highlightUp = false;
- qreal distance = modelCount - target + highlightPosition;
- tl.move(moveHighlight, 0.0, QEasingCurve(QEasingCurve::InQuad), int(duration * highlightPosition / distance));
- tl.set(moveHighlight, modelCount-0.01);
- tl.move(moveHighlight, target, QEasingCurve(QEasingCurve::OutQuad), int(duration * (modelCount-target) / distance));
- } else if (target - highlightPosition <= -modelCount/2) {
- highlightUp = true;
- qreal distance = modelCount - highlightPosition + target;
- tl.move(moveHighlight, modelCount-0.01, QEasingCurve(QEasingCurve::InQuad), int(duration * (modelCount-highlightPosition) / distance));
- tl.set(moveHighlight, 0.0);
- tl.move(moveHighlight, target, QEasingCurve(QEasingCurve::OutQuad), int(duration * target / distance));
- } else {
- highlightUp = highlightPosition - target < 0;
- tl.move(moveHighlight, target, QEasingCurve(QEasingCurve::InOutQuad), duration);
- }
- }
- }
-}
-
-void QDeclarative1PathViewPrivate::setHighlightPosition(qreal pos)
-{
- if (pos != highlightPosition) {
- qreal start = 0.0;
- qreal end = 1.0;
- if (haveHighlightRange && highlightRangeMode != QDeclarative1PathView::NoHighlightRange) {
- start = highlightRangeStart;
- end = highlightRangeEnd;
- }
-
- qreal range = qreal(modelCount);
- // calc normalized position of highlight relative to offset
- qreal relativeHighlight = qmlMod(pos + offset, range) / range;
-
- if (!highlightUp && relativeHighlight > end * mappedRange) {
- qreal diff = 1.0 - relativeHighlight;
- setOffset(offset + diff * range);
- } else if (highlightUp && relativeHighlight >= (end - start) * mappedRange) {
- qreal diff = relativeHighlight - (end - start) * mappedRange;
- setOffset(offset - diff * range - 0.00001);
- }
-
- highlightPosition = pos;
- qreal pathPos = positionOfIndex(pos);
- updateItem(highlightItem, pathPos);
- if (QDeclarative1PathViewAttached *att = attached(highlightItem))
- att->setOnPath(pathPos != -1.0);
- }
-}
-
-void QDeclarative1PathView::pathUpdated()
-{
- Q_D(QDeclarative1PathView);
- QList<QDeclarativeItem*>::iterator it = d->items.begin();
- while (it != d->items.end()) {
- QDeclarativeItem *item = *it;
- if (QDeclarative1PathViewAttached *att = d->attached(item))
- att->m_percent = -1;
- ++it;
- }
- refill();
-}
-
-void QDeclarative1PathViewPrivate::updateItem(QDeclarativeItem *item, qreal percent)
-{
- if (QDeclarative1PathViewAttached *att = attached(item)) {
- if (qFuzzyCompare(att->m_percent, percent))
- return;
- att->m_percent = percent;
- foreach(const QString &attr, path->attributes())
- att->setValue(attr.toUtf8(), path->attributeAt(attr, percent));
- }
- QPointF pf = path->pointAt(percent);
- item->setX(qRound(pf.x() - item->width()/2));
- item->setY(qRound(pf.y() - item->height()/2));
-}
-
-void QDeclarative1PathViewPrivate::regenerate()
-{
- Q_Q(QDeclarative1PathView);
- if (!q->isComponentComplete())
- return;
-
- clear();
-
- if (!isValid())
- return;
-
- firstIndex = -1;
- updateMappedRange();
- q->refill();
-}
-
-/*!
- \qmlclass PathView QDeclarative1PathView
- \inqmlmodule QtQuick 1
- \ingroup qml-view-elements
- \since QtQuick 1.0
- \brief The PathView element lays out model-provided items on a path.
- \inherits Item
-
- A PathView displays data from models created from built-in QML elements like ListModel
- and XmlListModel, or custom model classes defined in C++ that inherit from
- QAbstractListModel.
-
- The view has a \l model, which defines the data to be displayed, and
- a \l delegate, which defines how the data should be displayed.
- The \l delegate is instantiated for each item on the \l path.
- The items may be flicked to move them along the path.
-
- For example, if there is a simple list model defined in a file \c ContactModel.qml like this:
-
- \snippet doc/src/snippets/qtquick1/pathview/ContactModel.qml 0
-
- This data can be represented as a PathView, like this:
-
- \snippet doc/src/snippets/qtquick1/pathview/pathview.qml 0
-
- \image pathview.gif
-
- (Note the above example uses PathAttribute to scale and modify the
- opacity of the items as they rotate. This additional code can be seen in the
- PathAttribute documentation.)
-
- PathView does not automatically handle keyboard navigation. This is because
- the keys to use for navigation will depend upon the shape of the path. Navigation
- can be added quite simply by setting \c focus to \c true and calling
- \l decrementCurrentIndex() or \l incrementCurrentIndex(), for example to navigate
- using the left and right arrow keys:
-
- \qml
- PathView {
- // ...
- focus: true
- Keys.onLeftPressed: decrementCurrentIndex()
- Keys.onRightPressed: incrementCurrentIndex()
- }
- \endqml
-
- The path view itself is a focus scope (see \l{qmlfocus#Acquiring Focus and Focus Scopes}{the focus documentation page} for more details).
-
- Delegates are instantiated as needed and may be destroyed at any time.
- State should \e never be stored in a delegate.
-
- PathView attaches a number of properties to the root item of the delegate, for example
- \c {PathView.isCurrentItem}. In the following example, the root delegate item can access
- this attached property directly as \c PathView.isCurrentItem, while the child
- \c nameText object must refer to this property as \c wrapper.PathView.isCurrentItem.
-
- \snippet doc/src/snippets/qtquick1/pathview/pathview.qml 1
-
- \bold Note that views do not enable \e clip automatically. If the view
- is not clipped by another item or the screen, it will be necessary
- to set \e {clip: true} in order to have the out of view items clipped
- nicely.
-
- \sa Path, {declarative/modelviews/pathview}{PathView example}
-*/
-
-QDeclarative1PathView::QDeclarative1PathView(QDeclarativeItem *parent)
- : QDeclarativeItem(*(new QDeclarative1PathViewPrivate), parent)
-{
- Q_D(QDeclarative1PathView);
- d->init();
-}
-
-QDeclarative1PathView::~QDeclarative1PathView()
-{
- Q_D(QDeclarative1PathView);
- d->clear();
- if (d->attType)
- d->attType->release();
- if (d->ownModel)
- delete d->model;
-}
-
-/*!
- \qmlattachedproperty PathView PathView::view
- This attached property holds the view that manages this delegate instance.
-
- It is attached to each instance of the delegate.
-*/
-
-/*!
- \qmlattachedproperty bool PathView::onPath
- This attached property holds whether the item is currently on the path.
-
- If a pathItemCount has been set, it is possible that some items may
- be instantiated, but not considered to be currently on the path.
- Usually, these items would be set invisible, for example:
-
- \qml
- Component {
- Rectangle {
- visible: PathView.onPath
- // ...
- }
- }
- \endqml
-
- It is attached to each instance of the delegate.
-*/
-
-/*!
- \qmlattachedproperty bool PathView::isCurrentItem
- This attached property is true if this delegate is the current item; otherwise false.
-
- It is attached to each instance of the delegate.
-
- This property may be used to adjust the appearance of the current item.
-
- \snippet doc/src/snippets/qtquick1/pathview/pathview.qml 1
-*/
-
-/*!
- \qmlproperty model QtQuick1::PathView::model
- This property holds the model providing data for the view.
-
- The model provides a set of data that is used to create the items for the view.
- For large or dynamic datasets the model is usually provided by a C++ model object.
- Models can also be created directly in QML, using the ListModel element.
-
- \sa {qmlmodels}{Data Models}
-*/
-QVariant QDeclarative1PathView::model() const
-{
- Q_D(const QDeclarative1PathView);
- return d->modelVariant;
-}
-
-void QDeclarative1PathView::setModel(const QVariant &model)
-{
- Q_D(QDeclarative1PathView);
- if (d->modelVariant == model)
- return;
-
- if (d->model) {
- disconnect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
- disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
- disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
- disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- disconnect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
- for (int i=0; i<d->items.count(); i++){
- QDeclarativeItem *p = d->items[i];
- d->model->release(p);
- }
- d->items.clear();
- }
-
- d->modelVariant = model;
- QObject *object = qvariant_cast<QObject*>(model);
- QDeclarative1VisualModel *vim = 0;
- if (object && (vim = qobject_cast<QDeclarative1VisualModel *>(object))) {
- if (d->ownModel) {
- delete d->model;
- d->ownModel = false;
- }
- d->model = vim;
- } else {
- if (!d->ownModel) {
- d->model = new QDeclarative1VisualDataModel(qmlContext(this), this);
- d->ownModel = true;
- }
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- dataModel->setModel(model);
- }
- d->modelCount = 0;
- if (d->model) {
- connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
- connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
- connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
- connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- connect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
- d->modelCount = d->model->count();
- if (d->model->count())
- d->offset = qmlMod(d->offset, qreal(d->model->count()));
- if (d->offset < 0)
- d->offset = d->model->count() + d->offset;
-}
- d->regenerate();
- d->fixOffset();
- emit countChanged();
- emit modelChanged();
-}
-
-/*!
- \qmlproperty int QtQuick1::PathView::count
- This property holds the number of items in the model.
-*/
-int QDeclarative1PathView::count() const
-{
- Q_D(const QDeclarative1PathView);
- return d->model ? d->modelCount : 0;
-}
-
-/*!
- \qmlproperty Path QtQuick1::PathView::path
- This property holds the path used to lay out the items.
- For more information see the \l Path documentation.
-*/
-QDeclarative1Path *QDeclarative1PathView::path() const
-{
- Q_D(const QDeclarative1PathView);
- return d->path;
-}
-
-void QDeclarative1PathView::setPath(QDeclarative1Path *path)
-{
- Q_D(QDeclarative1PathView);
- if (d->path == path)
- return;
- if (d->path)
- disconnect(d->path, SIGNAL(changed()), this, SLOT(pathUpdated()));
- d->path = path;
- connect(d->path, SIGNAL(changed()), this, SLOT(pathUpdated()));
- if (d->isValid() && isComponentComplete()) {
- d->clear();
- if (d->attType) {
- d->attType->release();
- d->attType = 0;
- }
- d->regenerate();
- }
- emit pathChanged();
-}
-
-/*!
- \qmlproperty int QtQuick1::PathView::currentIndex
- This property holds the index of the current item.
-*/
-int QDeclarative1PathView::currentIndex() const
-{
- Q_D(const QDeclarative1PathView);
- return d->currentIndex;
-}
-
-void QDeclarative1PathView::setCurrentIndex(int idx)
-{
- Q_D(QDeclarative1PathView);
- if (d->model && d->modelCount)
- idx = qAbs(idx % d->modelCount);
- if (d->model && idx != d->currentIndex) {
- if (d->modelCount) {
- int itemIndex = (d->currentIndex - d->firstIndex + d->modelCount) % d->modelCount;
- if (itemIndex < d->items.count()) {
- if (QDeclarativeItem *item = d->items.at(itemIndex)) {
- if (QDeclarative1PathViewAttached *att = d->attached(item))
- att->setIsCurrentItem(false);
- }
- }
- }
- d->currentItem = 0;
- d->moveReason = QDeclarative1PathViewPrivate::SetIndex;
- d->currentIndex = idx;
- if (d->modelCount) {
- if (d->haveHighlightRange && d->highlightRangeMode == QDeclarative1PathView::StrictlyEnforceRange)
- d->snapToCurrent();
- int itemIndex = (idx - d->firstIndex + d->modelCount) % d->modelCount;
- if (itemIndex < d->items.count()) {
- d->currentItem = d->items.at(itemIndex);
- d->currentItem->setFocus(true);
- if (QDeclarative1PathViewAttached *att = d->attached(d->currentItem))
- att->setIsCurrentItem(true);
- }
- d->currentItemOffset = d->positionOfIndex(d->currentIndex);
- d->updateHighlight();
- }
- emit currentIndexChanged();
- }
-}
-
-/*!
- \qmlmethod QtQuick1::PathView::incrementCurrentIndex()
-
- Increments the current index.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-void QDeclarative1PathView::incrementCurrentIndex()
-{
- Q_D(QDeclarative1PathView);
- d->moveDirection = QDeclarative1PathViewPrivate::Positive;
- setCurrentIndex(currentIndex()+1);
-}
-
-
-/*!
- \qmlmethod QtQuick1::PathView::decrementCurrentIndex()
-
- Decrements the current index.
-
- \bold Note: methods should only be called after the Component has completed.
-*/
-void QDeclarative1PathView::decrementCurrentIndex()
-{
- Q_D(QDeclarative1PathView);
- if (d->model && d->modelCount) {
- int idx = currentIndex()-1;
- if (idx < 0)
- idx = d->modelCount - 1;
- d->moveDirection = QDeclarative1PathViewPrivate::Negative;
- setCurrentIndex(idx);
- }
-}
-
-/*!
- \qmlproperty real QtQuick1::PathView::offset
-
- The offset specifies how far along the path the items are from their initial positions.
- This is a real number that ranges from 0.0 to the count of items in the model.
-*/
-qreal QDeclarative1PathView::offset() const
-{
- Q_D(const QDeclarative1PathView);
- return d->offset;
-}
-
-void QDeclarative1PathView::setOffset(qreal offset)
-{
- Q_D(QDeclarative1PathView);
- d->setOffset(offset);
- d->updateCurrent();
-}
-
-void QDeclarative1PathViewPrivate::setOffset(qreal o)
-{
- Q_Q(QDeclarative1PathView);
- if (offset != o) {
- if (isValid() && q->isComponentComplete()) {
- offset = qmlMod(o, qreal(modelCount));
- if (offset < 0)
- offset += qreal(modelCount);
- q->refill();
- } else {
- offset = o;
- }
- emit q->offsetChanged();
- }
-}
-
-void QDeclarative1PathViewPrivate::setAdjustedOffset(qreal o)
-{
- setOffset(o+offsetAdj);
-}
-
-/*!
- \qmlproperty Component QtQuick1::PathView::highlight
- This property holds the component to use as the highlight.
-
- An instance of the highlight component will be created for each view.
- The geometry of the resultant component instance will be managed by the view
- so as to stay with the current item.
-
- The below example demonstrates how to make a simple highlight. Note the use
- of the \l{PathView::onPath}{PathView.onPath} attached property to ensure that
- the highlight is hidden when flicked away from the path.
-
- \qml
- Component {
- Rectangle {
- visible: PathView.onPath
- // ...
- }
- }
- \endqml
-
- \sa highlightItem, highlightRangeMode
-*/
-
-QDeclarativeComponent *QDeclarative1PathView::highlight() const
-{
- Q_D(const QDeclarative1PathView);
- return d->highlightComponent;
-}
-
-void QDeclarative1PathView::setHighlight(QDeclarativeComponent *highlight)
-{
- Q_D(QDeclarative1PathView);
- if (highlight != d->highlightComponent) {
- d->highlightComponent = highlight;
- d->createHighlight();
- d->updateHighlight();
- emit highlightChanged();
- }
-}
-
-/*!
- \qmlproperty Item QtQuick1::PathView::highlightItem
-
- \c highlightItem holds the highlight item, which was created
- from the \l highlight component.
-
- \sa highlight
-*/
-QDeclarativeItem *QDeclarative1PathView::highlightItem()
-{
- Q_D(const QDeclarative1PathView);
- return d->highlightItem;
-}
-/*!
- \qmlproperty real QtQuick1::PathView::preferredHighlightBegin
- \qmlproperty real QtQuick1::PathView::preferredHighlightEnd
- \qmlproperty enumeration QtQuick1::PathView::highlightRangeMode
-
- These properties set the preferred range of the highlight (current item)
- within the view. The preferred values must be in the range 0.0-1.0.
-
- If highlightRangeMode is set to \e PathView.NoHighlightRange
-
- If highlightRangeMode is set to \e PathView.ApplyRange the view will
- attempt to maintain the highlight within the range, however
- the highlight can move outside of the range at the ends of the path
- or due to a mouse interaction.
-
- If highlightRangeMode is set to \e PathView.StrictlyEnforceRange the highlight will never
- move outside of the range. This means that the current item will change
- if a keyboard or mouse action would cause the highlight to move
- outside of the range.
-
- Note that this is the correct way to influence where the
- current item ends up when the view moves. For example, if you want the
- currently selected item to be in the middle of the path, then set the
- highlight range to be 0.5,0.5 and highlightRangeMode to PathView.StrictlyEnforceRange.
- Then, when the path scrolls,
- the currently selected item will be the item at that position. This also applies to
- when the currently selected item changes - it will scroll to within the preferred
- highlight range. Furthermore, the behaviour of the current item index will occur
- whether or not a highlight exists.
-
- The default value is \e PathView.StrictlyEnforceRange.
-
- Note that a valid range requires preferredHighlightEnd to be greater
- than or equal to preferredHighlightBegin.
-*/
-qreal QDeclarative1PathView::preferredHighlightBegin() const
-{
- Q_D(const QDeclarative1PathView);
- return d->highlightRangeStart;
-}
-
-void QDeclarative1PathView::setPreferredHighlightBegin(qreal start)
-{
- Q_D(QDeclarative1PathView);
- if (d->highlightRangeStart == start || start < 0 || start > 1.0)
- return;
- d->highlightRangeStart = start;
- d->haveHighlightRange = d->highlightRangeMode != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- refill();
- emit preferredHighlightBeginChanged();
-}
-
-qreal QDeclarative1PathView::preferredHighlightEnd() const
-{
- Q_D(const QDeclarative1PathView);
- return d->highlightRangeEnd;
-}
-
-void QDeclarative1PathView::setPreferredHighlightEnd(qreal end)
-{
- Q_D(QDeclarative1PathView);
- if (d->highlightRangeEnd == end || end < 0 || end > 1.0)
- return;
- d->highlightRangeEnd = end;
- d->haveHighlightRange = d->highlightRangeMode != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- refill();
- emit preferredHighlightEndChanged();
-}
-
-QDeclarative1PathView::HighlightRangeMode QDeclarative1PathView::highlightRangeMode() const
-{
- Q_D(const QDeclarative1PathView);
- return d->highlightRangeMode;
-}
-
-void QDeclarative1PathView::setHighlightRangeMode(HighlightRangeMode mode)
-{
- Q_D(QDeclarative1PathView);
- if (d->highlightRangeMode == mode)
- return;
- d->highlightRangeMode = mode;
- d->haveHighlightRange = d->highlightRangeMode != NoHighlightRange && d->highlightRangeStart <= d->highlightRangeEnd;
- emit highlightRangeModeChanged();
-}
-
-
-/*!
- \qmlproperty int QtQuick1::PathView::highlightMoveDuration
- This property holds the move animation duration of the highlight delegate.
-
- If the highlightRangeMode is StrictlyEnforceRange then this property
- determines the speed that the items move along the path.
-
- The default value for the duration is 300ms.
-*/
-int QDeclarative1PathView::highlightMoveDuration() const
-{
- Q_D(const QDeclarative1PathView);
- return d->highlightMoveDuration;
-}
-
-void QDeclarative1PathView::setHighlightMoveDuration(int duration)
-{
- Q_D(QDeclarative1PathView);
- if (d->highlightMoveDuration == duration)
- return;
- d->highlightMoveDuration = duration;
- emit highlightMoveDurationChanged();
-}
-
-/*!
- \qmlproperty real QtQuick1::PathView::dragMargin
- This property holds the maximum distance from the path that initiate mouse dragging.
-
- By default the path can only be dragged by clicking on an item. If
- dragMargin is greater than zero, a drag can be initiated by clicking
- within dragMargin pixels of the path.
-*/
-qreal QDeclarative1PathView::dragMargin() const
-{
- Q_D(const QDeclarative1PathView);
- return d->dragMargin;
-}
-
-void QDeclarative1PathView::setDragMargin(qreal dragMargin)
-{
- Q_D(QDeclarative1PathView);
- if (d->dragMargin == dragMargin)
- return;
- d->dragMargin = dragMargin;
- emit dragMarginChanged();
-}
-
-/*!
- \qmlproperty real QtQuick1::PathView::flickDeceleration
- This property holds the rate at which a flick will decelerate.
-
- The default is 100.
-*/
-qreal QDeclarative1PathView::flickDeceleration() const
-{
- Q_D(const QDeclarative1PathView);
- return d->deceleration;
-}
-
-void QDeclarative1PathView::setFlickDeceleration(qreal dec)
-{
- Q_D(QDeclarative1PathView);
- if (d->deceleration == dec)
- return;
- d->deceleration = dec;
- emit flickDecelerationChanged();
-}
-
-/*!
- \qmlproperty bool QtQuick1::PathView::interactive
-
- A user cannot drag or flick a PathView that is not interactive.
-
- This property is useful for temporarily disabling flicking. This allows
- special interaction with PathView's children.
-*/
-bool QDeclarative1PathView::isInteractive() const
-{
- Q_D(const QDeclarative1PathView);
- return d->interactive;
-}
-
-void QDeclarative1PathView::setInteractive(bool interactive)
-{
- Q_D(QDeclarative1PathView);
- if (interactive != d->interactive) {
- d->interactive = interactive;
- if (!interactive)
- d->tl.clear();
- emit interactiveChanged();
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::PathView::moving
-
- This property holds whether the view is currently moving
- due to the user either dragging or flicking the view.
-*/
-bool QDeclarative1PathView::isMoving() const
-{
- Q_D(const QDeclarative1PathView);
- return d->moving;
-}
-
-/*!
- \qmlproperty bool QtQuick1::PathView::flicking
-
- This property holds whether the view is currently moving
- due to the user flicking the view.
-*/
-bool QDeclarative1PathView::isFlicking() const
-{
- Q_D(const QDeclarative1PathView);
- return d->flicking;
-}
-
-/*!
- \qmlsignal QtQuick1::PathView::onMovementStarted()
-
- This handler is called when the view begins moving due to user
- interaction.
-*/
-
-/*!
- \qmlsignal QtQuick1::PathView::onMovementEnded()
-
- This handler is called when the view stops moving due to user
- interaction. If a flick was generated, this handler will
- be triggered once the flick stops. If a flick was not
- generated, the handler will be triggered when the
- user stops dragging - i.e. a mouse or touch release.
-*/
-
-/*!
- \qmlsignal QtQuick1::PathView::onFlickStarted()
-
- This handler is called when the view is flicked. A flick
- starts from the point that the mouse or touch is released,
- while still in motion.
-*/
-
-/*!
- \qmlsignal QtQuick1::PathView::onFlickEnded()
-
- This handler is called when the view stops moving due to a flick.
-*/
-
-/*!
- \qmlproperty Component QtQuick1::PathView::delegate
-
- The delegate provides a template defining each item instantiated by the view.
- The index is exposed as an accessible \c index property. Properties of the
- model are also available depending upon the type of \l {qmlmodels}{Data Model}.
-
- The number of elements in the delegate has a direct effect on the
- flicking performance of the view when pathItemCount is specified. If at all possible, place functionality
- that is not needed for the normal display of the delegate in a \l Loader which
- can load additional elements when needed.
-
- Note that the PathView will layout the items based on the size of the root
- item in the delegate.
-
- Here is an example delegate:
- \snippet doc/src/snippets/qtquick1/pathview/pathview.qml 1
-*/
-QDeclarativeComponent *QDeclarative1PathView::delegate() const
-{
- Q_D(const QDeclarative1PathView);
- if (d->model) {
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- return dataModel->delegate();
- }
-
- return 0;
-}
-
-void QDeclarative1PathView::setDelegate(QDeclarativeComponent *delegate)
-{
- Q_D(QDeclarative1PathView);
- if (delegate == this->delegate())
- return;
- if (!d->ownModel) {
- d->model = new QDeclarative1VisualDataModel(qmlContext(this));
- d->ownModel = true;
- }
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model)) {
- int oldCount = dataModel->count();
- dataModel->setDelegate(delegate);
- d->modelCount = dataModel->count();
- d->regenerate();
- if (oldCount != dataModel->count())
- emit countChanged();
- emit delegateChanged();
- }
-}
-
-/*!
- \qmlproperty int QtQuick1::PathView::pathItemCount
- This property holds the number of items visible on the path at any one time.
-*/
-int QDeclarative1PathView::pathItemCount() const
-{
- Q_D(const QDeclarative1PathView);
- return d->pathItems;
-}
-
-void QDeclarative1PathView::setPathItemCount(int i)
-{
- Q_D(QDeclarative1PathView);
- if (i == d->pathItems)
- return;
- if (i < 1)
- i = 1;
- d->pathItems = i;
- d->updateMappedRange();
- if (d->isValid() && isComponentComplete()) {
- d->regenerate();
- }
- emit pathItemCountChanged();
-}
-
-QPointF QDeclarative1PathViewPrivate::pointNear(const QPointF &point, qreal *nearPercent) const
-{
- //XXX maybe do recursively at increasing resolution.
- qreal mindist = 1e10; // big number
- QPointF nearPoint = path->pointAt(0);
- qreal nearPc = 0;
- for (qreal i=1; i < 1000; i++) {
- QPointF pt = path->pointAt(i/1000.0);
- QPointF diff = pt - point;
- qreal dist = diff.x()*diff.x() + diff.y()*diff.y();
- if (dist < mindist) {
- nearPoint = pt;
- nearPc = i;
- mindist = dist;
- }
- }
-
- if (nearPercent)
- *nearPercent = nearPc / 1000.0;
-
- return nearPoint;
-}
-
-void QDeclarative1PathView::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1PathView);
- if (d->interactive) {
- d->handleMousePressEvent(event);
- event->accept();
- } else {
- QDeclarativeItem::mousePressEvent(event);
- }
-}
-
-void QDeclarative1PathViewPrivate::handleMousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_Q(QDeclarative1PathView);
- if (!interactive || !items.count())
- return;
- QPointF scenePoint = q->mapToScene(event->pos());
- int idx = 0;
- for (; idx < items.count(); ++idx) {
- QRectF rect = items.at(idx)->boundingRect();
- rect = items.at(idx)->mapToScene(rect).boundingRect();
- if (rect.contains(scenePoint))
- break;
- }
- if (idx == items.count() && dragMargin == 0.) // didn't click on an item
- return;
-
- startPoint = pointNear(event->pos(), &startPc);
- if (idx == items.count()) {
- qreal distance = qAbs(event->pos().x() - startPoint.x()) + qAbs(event->pos().y() - startPoint.y());
- if (distance > dragMargin)
- return;
- }
-
- if (tl.isActive() && flicking)
- stealMouse = true; // If we've been flicked then steal the click.
- else
- stealMouse = false;
-
- lastElapsed = 0;
- lastDist = 0;
- QDeclarativeItemPrivate::start(lastPosTime);
- tl.clear();
-}
-
-void QDeclarative1PathView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1PathView);
- if (d->interactive) {
- d->handleMouseMoveEvent(event);
- if (d->stealMouse)
- setKeepMouseGrab(true);
- event->accept();
- } else {
- QDeclarativeItem::mouseMoveEvent(event);
- }
-}
-
-void QDeclarative1PathViewPrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_Q(QDeclarative1PathView);
- if (!interactive || !lastPosTime.isValid())
- return;
-
- qreal newPc;
- QPointF pathPoint = pointNear(event->pos(), &newPc);
- if (!stealMouse) {
- QPointF delta = pathPoint - startPoint;
- if (qAbs(delta.x()) > QApplication::startDragDistance() || qAbs(delta.y()) > QApplication::startDragDistance()) {
- stealMouse = true;
- startPc = newPc;
- }
- }
-
- if (stealMouse) {
- moveReason = QDeclarative1PathViewPrivate::Mouse;
- qreal diff = (newPc - startPc)*modelCount*mappedRange;
- if (diff) {
- q->setOffset(offset + diff);
-
- if (diff > modelCount/2)
- diff -= modelCount;
- else if (diff < -modelCount/2)
- diff += modelCount;
-
- lastElapsed = QDeclarativeItemPrivate::restart(lastPosTime);
- lastDist = diff;
- startPc = newPc;
- }
- if (!moving) {
- moving = true;
- emit q->movingChanged();
- emit q->movementStarted();
- }
- }
-}
-
-void QDeclarative1PathView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1PathView);
- if (d->interactive) {
- d->handleMouseReleaseEvent(event);
- event->accept();
- ungrabMouse();
- } else {
- QDeclarativeItem::mouseReleaseEvent(event);
- }
-}
-
-void QDeclarative1PathViewPrivate::handleMouseReleaseEvent(QGraphicsSceneMouseEvent *)
-{
- Q_Q(QDeclarative1PathView);
- stealMouse = false;
- q->setKeepMouseGrab(false);
- if (!interactive || !lastPosTime.isValid())
- return;
-
- qreal elapsed = qreal(lastElapsed + QDeclarativeItemPrivate::elapsed(lastPosTime)) / 1000.;
- qreal velocity = elapsed > 0. ? lastDist / elapsed : 0;
- if (model && modelCount && qAbs(velocity) > 1.) {
- qreal count = pathItems == -1 ? modelCount : pathItems;
- if (qAbs(velocity) > count * 2) // limit velocity
- velocity = (velocity > 0 ? count : -count) * 2;
- // Calculate the distance to be travelled
- qreal v2 = velocity*velocity;
- qreal accel = deceleration/10;
- // + 0.25 to encourage moving at least one item in the flick direction
- qreal dist = qMin(qreal(modelCount-1), qreal(v2 / (accel * 2.0) + 0.25));
- if (haveHighlightRange && highlightRangeMode == QDeclarative1PathView::StrictlyEnforceRange) {
- // round to nearest item.
- if (velocity > 0.)
- dist = qRound(dist + offset) - offset;
- else
- dist = qRound(dist - offset) + offset;
- // Calculate accel required to stop on item boundary
- if (dist <= 0.) {
- dist = 0.;
- accel = 0.;
- } else {
- accel = v2 / (2.0f * qAbs(dist));
- }
- }
- offsetAdj = 0.0;
- moveOffset.setValue(offset);
- tl.accel(moveOffset, velocity, accel, dist);
- tl.callback(QDeclarative1TimeLineCallback(&moveOffset, fixOffsetCallback, this));
- if (!flicking) {
- flicking = true;
- emit q->flickingChanged();
- emit q->flickStarted();
- }
- } else {
- fixOffset();
- }
-
- lastPosTime.invalidate();
- if (!tl.isActive())
- q->movementEnding();
-}
-
-bool QDeclarative1PathView::sendMouseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1PathView);
- QGraphicsSceneMouseEvent mouseEvent(event->type());
- QRectF myRect = mapToScene(QRectF(0, 0, width(), height())).boundingRect();
- QGraphicsScene *s = scene();
- QDeclarativeItem *grabber = s ? qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()) : 0;
- bool stealThisEvent = d->stealMouse;
- if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
- mouseEvent.setAccepted(false);
- for (int i = 0x1; i <= 0x10; i <<= 1) {
- if (event->buttons() & i) {
- Qt::MouseButton button = Qt::MouseButton(i);
- mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button)));
- }
- }
- mouseEvent.setScenePos(event->scenePos());
- mouseEvent.setLastScenePos(event->lastScenePos());
- mouseEvent.setPos(mapFromScene(event->scenePos()));
- mouseEvent.setLastPos(mapFromScene(event->lastScenePos()));
-
- switch(mouseEvent.type()) {
- case QEvent::GraphicsSceneMouseMove:
- d->handleMouseMoveEvent(&mouseEvent);
- break;
- case QEvent::GraphicsSceneMousePress:
- d->handleMousePressEvent(&mouseEvent);
- stealThisEvent = d->stealMouse; // Update stealThisEvent in case changed by function call above
- break;
- case QEvent::GraphicsSceneMouseRelease:
- d->handleMouseReleaseEvent(&mouseEvent);
- break;
- default:
- break;
- }
- grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem());
- if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this)
- grabMouse();
-
- return d->stealMouse;
- } else if (d->lastPosTime.isValid()) {
- d->lastPosTime.invalidate();
- d->fixOffset();
- }
- if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease)
- d->stealMouse = false;
- return false;
-}
-
-bool QDeclarative1PathView::sceneEventFilter(QGraphicsItem *i, QEvent *e)
-{
- Q_D(QDeclarative1PathView);
- if (!isVisible() || !d->interactive)
- return QDeclarativeItem::sceneEventFilter(i, e);
-
- switch (e->type()) {
- case QEvent::GraphicsSceneMousePress:
- case QEvent::GraphicsSceneMouseMove:
- case QEvent::GraphicsSceneMouseRelease:
- return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
- default:
- break;
- }
-
- return QDeclarativeItem::sceneEventFilter(i, e);
-}
-
-bool QDeclarative1PathView::sceneEvent(QEvent *event)
-{
- bool rv = QDeclarativeItem::sceneEvent(event);
- if (event->type() == QEvent::UngrabMouse) {
- Q_D(QDeclarative1PathView);
- if (d->stealMouse) {
- // if our mouse grab has been removed (probably by another Flickable),
- // fix our state
- d->stealMouse = false;
- setKeepMouseGrab(false);
- d->lastPosTime.invalidate();
- }
- }
- return rv;
-}
-
-bool QDeclarative1PathView::event(QEvent *event)
-{
- if (event->type() == QEvent::User) {
- refill();
- return true;
- }
-
- return QDeclarativeItem::event(event);
-}
-
-void QDeclarative1PathView::componentComplete()
-{
- Q_D(QDeclarative1PathView);
- QDeclarativeItem::componentComplete();
- d->createHighlight();
- // It is possible that a refill has already happended to to Path
- // bindings being handled in the componentComplete(). If so
- // don't do it again.
- if (d->items.count() == 0 && d->model) {
- d->modelCount = d->model->count();
- d->regenerate();
- }
- d->updateHighlight();
-}
-
-void QDeclarative1PathView::refill()
-{
- Q_D(QDeclarative1PathView);
- if (!d->isValid() || !isComponentComplete())
- return;
-
- d->layoutScheduled = false;
- bool currentVisible = false;
-
- // first move existing items and remove items off path
- int idx = d->firstIndex;
- QList<QDeclarativeItem*>::iterator it = d->items.begin();
- while (it != d->items.end()) {
- qreal pos = d->positionOfIndex(idx);
- QDeclarativeItem *item = *it;
- if (pos >= 0.0) {
- d->updateItem(item, pos);
- if (idx == d->currentIndex) {
- currentVisible = true;
- d->currentItemOffset = pos;
- }
- ++it;
- } else {
-// qDebug() << "release";
- d->updateItem(item, 1.0);
- d->releaseItem(item);
- if (it == d->items.begin()) {
- if (++d->firstIndex >= d->modelCount)
- d->firstIndex = 0;
- }
- it = d->items.erase(it);
- }
- ++idx;
- if (idx >= d->modelCount)
- idx = 0;
- }
- if (!d->items.count())
- d->firstIndex = -1;
-
- if (d->modelCount) {
- // add items to beginning and end
- int count = d->pathItems == -1 ? d->modelCount : qMin(d->pathItems, d->modelCount);
- if (d->items.count() < count) {
- int idx = qRound(d->modelCount - d->offset) % d->modelCount;
- qreal startPos = 0.0;
- if (d->haveHighlightRange && d->highlightRangeMode != QDeclarative1PathView::NoHighlightRange)
- startPos = d->highlightRangeStart;
- if (d->firstIndex >= 0) {
- startPos = d->positionOfIndex(d->firstIndex);
- idx = (d->firstIndex + d->items.count()) % d->modelCount;
- }
- qreal pos = d->positionOfIndex(idx);
- while ((pos > startPos || !d->items.count()) && d->items.count() < count) {
- // qDebug() << "append" << idx;
- QDeclarativeItem *item = d->getItem(idx);
- if (d->model->completePending())
- item->setZValue(idx+1);
- if (d->currentIndex == idx) {
- item->setFocus(true);
- if (QDeclarative1PathViewAttached *att = d->attached(item))
- att->setIsCurrentItem(true);
- currentVisible = true;
- d->currentItemOffset = pos;
- d->currentItem = item;
- }
- if (d->items.count() == 0)
- d->firstIndex = idx;
- d->items.append(item);
- d->updateItem(item, pos);
- if (d->model->completePending())
- d->model->completeItem();
- ++idx;
- if (idx >= d->modelCount)
- idx = 0;
- pos = d->positionOfIndex(idx);
- }
-
- idx = d->firstIndex - 1;
- if (idx < 0)
- idx = d->modelCount - 1;
- pos = d->positionOfIndex(idx);
- while (pos >= 0.0 && pos < startPos) {
- // qDebug() << "prepend" << idx;
- QDeclarativeItem *item = d->getItem(idx);
- if (d->model->completePending())
- item->setZValue(idx+1);
- if (d->currentIndex == idx) {
- item->setFocus(true);
- if (QDeclarative1PathViewAttached *att = d->attached(item))
- att->setIsCurrentItem(true);
- currentVisible = true;
- d->currentItemOffset = pos;
- d->currentItem = item;
- }
- d->items.prepend(item);
- d->updateItem(item, pos);
- if (d->model->completePending())
- d->model->completeItem();
- d->firstIndex = idx;
- idx = d->firstIndex - 1;
- if (idx < 0)
- idx = d->modelCount - 1;
- pos = d->positionOfIndex(idx);
- }
- }
- }
-
- if (!currentVisible)
- d->currentItemOffset = 1.0;
-
- if (d->highlightItem && d->haveHighlightRange && d->highlightRangeMode == QDeclarative1PathView::StrictlyEnforceRange) {
- d->updateItem(d->highlightItem, d->highlightRangeStart);
- if (QDeclarative1PathViewAttached *att = d->attached(d->highlightItem))
- att->setOnPath(true);
- } else if (d->highlightItem && d->moveReason != QDeclarative1PathViewPrivate::SetIndex) {
- d->updateItem(d->highlightItem, d->currentItemOffset);
- if (QDeclarative1PathViewAttached *att = d->attached(d->highlightItem))
- att->setOnPath(currentVisible);
- }
- while (d->itemCache.count())
- d->releaseItem(d->itemCache.takeLast());
-}
-
-void QDeclarative1PathView::itemsInserted(int modelIndex, int count)
-{
- //XXX support animated insertion
- Q_D(QDeclarative1PathView);
- if (!d->isValid() || !isComponentComplete())
- return;
-
- if (d->modelCount) {
- d->itemCache += d->items;
- d->items.clear();
- if (modelIndex <= d->currentIndex) {
- d->currentIndex += count;
- emit currentIndexChanged();
- } else if (d->offset != 0) {
- d->offset += count;
- d->offsetAdj += count;
- }
- }
- d->modelCount += count;
- if (d->flicking || d->moving) {
- d->regenerate();
- d->updateCurrent();
- } else {
- d->firstIndex = -1;
- d->updateMappedRange();
- d->scheduleLayout();
- }
- emit countChanged();
-}
-
-void QDeclarative1PathView::itemsRemoved(int modelIndex, int count)
-{
- //XXX support animated removal
- Q_D(QDeclarative1PathView);
- if (!d->model || !d->modelCount || !d->model->isValid() || !d->path || !isComponentComplete())
- return;
-
- // fix current
- bool currentChanged = false;
- if (d->currentIndex >= modelIndex + count) {
- d->currentIndex -= count;
- currentChanged = true;
- } else if (d->currentIndex >= modelIndex && d->currentIndex < modelIndex + count) {
- // current item has been removed.
- d->currentIndex = qMin(modelIndex, d->modelCount-count-1);
- if (d->currentItem) {
- if (QDeclarative1PathViewAttached *att = d->attached(d->currentItem))
- att->setIsCurrentItem(true);
- }
- currentChanged = true;
- }
-
- d->itemCache += d->items;
- d->items.clear();
-
- bool changedOffset = false;
- if (modelIndex > d->currentIndex) {
- if (d->offset >= count) {
- changedOffset = true;
- d->offset -= count;
- d->offsetAdj -= count;
- }
- }
-
- d->modelCount -= count;
- if (!d->modelCount) {
- while (d->itemCache.count())
- d->releaseItem(d->itemCache.takeLast());
- d->offset = 0;
- changedOffset = true;
- d->tl.reset(d->moveOffset);
- update();
- } else {
- d->regenerate();
- d->updateCurrent();
- if (!d->flicking && !d->moving && d->haveHighlightRange && d->highlightRangeMode == QDeclarative1PathView::StrictlyEnforceRange)
- d->snapToCurrent();
- }
- if (changedOffset)
- emit offsetChanged();
- if (currentChanged)
- emit currentIndexChanged();
- emit countChanged();
-}
-
-void QDeclarative1PathView::itemsMoved(int /*from*/, int /*to*/, int /*count*/)
-{
- Q_D(QDeclarative1PathView);
- if (!d->isValid() || !isComponentComplete())
- return;
-
- QList<QDeclarativeItem *> removedItems = d->items;
- d->items.clear();
- d->regenerate();
- while (removedItems.count())
- d->releaseItem(removedItems.takeLast());
-
- // Fix current index
- if (d->currentIndex >= 0 && d->currentItem) {
- int oldCurrent = d->currentIndex;
- d->currentIndex = d->model->indexOf(d->currentItem, this);
- if (oldCurrent != d->currentIndex)
- emit currentIndexChanged();
- }
- d->updateCurrent();
-}
-
-void QDeclarative1PathView::modelReset()
-{
- Q_D(QDeclarative1PathView);
- d->modelCount = d->model->count();
- d->regenerate();
- emit countChanged();
-}
-
-void QDeclarative1PathView::createdItem(int index, QDeclarativeItem *item)
-{
- Q_D(QDeclarative1PathView);
- if (d->requestedIndex != index) {
- if (!d->attType) {
- // pre-create one metatype to share with all attached objects
- d->attType = new QDeclarative1OpenMetaObjectType(&QDeclarative1PathViewAttached::staticMetaObject, qmlEngine(this));
- foreach(const QString &attr, d->path->attributes())
- d->attType->createProperty(attr.toUtf8());
- }
- qPathViewAttachedType = d->attType;
- QDeclarative1PathViewAttached *att = static_cast<QDeclarative1PathViewAttached *>(qmlAttachedPropertiesObject<QDeclarative1PathView>(item));
- qPathViewAttachedType = 0;
- if (att) {
- att->m_view = this;
- att->setOnPath(false);
- }
- item->setParentItem(this);
- d->updateItem(item, index < d->firstIndex ? 0.0 : 1.0);
- }
-}
-
-void QDeclarative1PathView::destroyingItem(QDeclarativeItem *item)
-{
- Q_UNUSED(item);
-}
-
-void QDeclarative1PathView::ticked()
-{
- Q_D(QDeclarative1PathView);
- d->updateCurrent();
-}
-
-void QDeclarative1PathView::movementEnding()
-{
- Q_D(QDeclarative1PathView);
- if (d->flicking) {
- d->flicking = false;
- emit flickingChanged();
- emit flickEnded();
- }
- if (d->moving && !d->stealMouse) {
- d->moving = false;
- emit movingChanged();
- emit movementEnded();
- }
-}
-
-// find the item closest to the snap position
-int QDeclarative1PathViewPrivate::calcCurrentIndex()
-{
- int current = -1;
- if (modelCount && model && items.count()) {
- offset = qmlMod(offset, modelCount);
- if (offset < 0)
- offset += modelCount;
- current = qRound(qAbs(qmlMod(modelCount - offset, modelCount)));
- current = current % modelCount;
- }
-
- return current;
-}
-
-void QDeclarative1PathViewPrivate::updateCurrent()
-{
- Q_Q(QDeclarative1PathView);
- if (moveReason != Mouse)
- return;
- if (!modelCount || !haveHighlightRange || highlightRangeMode != QDeclarative1PathView::StrictlyEnforceRange)
- return;
-
- int idx = calcCurrentIndex();
- if (model && idx != currentIndex) {
- int itemIndex = (currentIndex - firstIndex + modelCount) % modelCount;
- if (itemIndex < items.count()) {
- if (QDeclarativeItem *item = items.at(itemIndex)) {
- if (QDeclarative1PathViewAttached *att = attached(item))
- att->setIsCurrentItem(false);
- }
- }
- currentIndex = idx;
- currentItem = 0;
- itemIndex = (idx - firstIndex + modelCount) % modelCount;
- if (itemIndex < items.count()) {
- currentItem = items.at(itemIndex);
- currentItem->setFocus(true);
- if (QDeclarative1PathViewAttached *att = attached(currentItem))
- att->setIsCurrentItem(true);
- }
- emit q->currentIndexChanged();
- }
-}
-
-void QDeclarative1PathViewPrivate::fixOffsetCallback(void *d)
-{
- ((QDeclarative1PathViewPrivate *)d)->fixOffset();
-}
-
-void QDeclarative1PathViewPrivate::fixOffset()
-{
- Q_Q(QDeclarative1PathView);
- if (model && items.count()) {
- if (haveHighlightRange && highlightRangeMode == QDeclarative1PathView::StrictlyEnforceRange) {
- int curr = calcCurrentIndex();
- if (curr != currentIndex)
- q->setCurrentIndex(curr);
- else
- snapToCurrent();
- }
- }
-}
-
-void QDeclarative1PathViewPrivate::snapToCurrent()
-{
- if (!model || modelCount <= 0)
- return;
-
- qreal targetOffset = qmlMod(modelCount - currentIndex, modelCount);
-
- moveReason = Other;
- offsetAdj = 0.0;
- tl.reset(moveOffset);
- moveOffset.setValue(offset);
-
- const int duration = highlightMoveDuration;
-
- if (moveDirection == Positive || (moveDirection == Shortest && targetOffset - offset > modelCount/2)) {
- qreal distance = modelCount - targetOffset + offset;
- if (targetOffset > moveOffset) {
- tl.move(moveOffset, 0.0, QEasingCurve(QEasingCurve::InQuad), int(duration * offset / distance));
- tl.set(moveOffset, modelCount);
- tl.move(moveOffset, targetOffset, QEasingCurve(offset == 0.0 ? QEasingCurve::InOutQuad : QEasingCurve::OutQuad), int(duration * (modelCount-targetOffset) / distance));
- } else {
- tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), duration);
- }
- } else if (moveDirection == Negative || targetOffset - offset <= -modelCount/2) {
- qreal distance = modelCount - offset + targetOffset;
- if (targetOffset < moveOffset) {
- tl.move(moveOffset, modelCount, QEasingCurve(targetOffset == 0 ? QEasingCurve::InOutQuad : QEasingCurve::InQuad), int(duration * (modelCount-offset) / distance));
- tl.set(moveOffset, 0.0);
- tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::OutQuad), int(duration * targetOffset / distance));
- } else {
- tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), duration);
- }
- } else {
- tl.move(moveOffset, targetOffset, QEasingCurve(QEasingCurve::InOutQuad), duration);
- }
- moveDirection = Shortest;
-}
-
-QDeclarative1PathViewAttached *QDeclarative1PathView::qmlAttachedProperties(QObject *obj)
-{
- return new QDeclarative1PathViewAttached(obj);
-}
-
-
-
-QT_END_NAMESPACE
-
diff --git a/src/qtquick1/graphicsitems/qdeclarativepathview_p.h b/src/qtquick1/graphicsitems/qdeclarativepathview_p.h
deleted file mode 100644
index 288f7268e2..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepathview_p.h
+++ /dev/null
@@ -1,252 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEPATHVIEW_H
-#define QDECLARATIVEPATHVIEW_H
-
-#include "qdeclarativeitem.h"
-#include "QtQuick1/private/qdeclarativepath_p.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1PathViewPrivate;
-class QDeclarative1PathViewAttached;
-class Q_AUTOTEST_EXPORT QDeclarative1PathView : public QDeclarativeItem
-{
- Q_OBJECT
-
- Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged)
- Q_PROPERTY(QDeclarative1Path *path READ path WRITE setPath NOTIFY pathChanged)
- Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
- Q_PROPERTY(qreal offset READ offset WRITE setOffset NOTIFY offsetChanged)
-
- Q_PROPERTY(QDeclarativeComponent *highlight READ highlight WRITE setHighlight NOTIFY highlightChanged)
- Q_PROPERTY(QDeclarativeItem *highlightItem READ highlightItem NOTIFY highlightItemChanged)
-
- Q_PROPERTY(qreal preferredHighlightBegin READ preferredHighlightBegin WRITE setPreferredHighlightBegin NOTIFY preferredHighlightBeginChanged)
- Q_PROPERTY(qreal preferredHighlightEnd READ preferredHighlightEnd WRITE setPreferredHighlightEnd NOTIFY preferredHighlightEndChanged)
- Q_PROPERTY(HighlightRangeMode highlightRangeMode READ highlightRangeMode WRITE setHighlightRangeMode NOTIFY highlightRangeModeChanged)
- Q_PROPERTY(int highlightMoveDuration READ highlightMoveDuration WRITE setHighlightMoveDuration NOTIFY highlightMoveDurationChanged)
-
- Q_PROPERTY(qreal dragMargin READ dragMargin WRITE setDragMargin NOTIFY dragMarginChanged)
- Q_PROPERTY(qreal flickDeceleration READ flickDeceleration WRITE setFlickDeceleration NOTIFY flickDecelerationChanged)
- Q_PROPERTY(bool interactive READ isInteractive WRITE setInteractive NOTIFY interactiveChanged)
-
- Q_PROPERTY(bool moving READ isMoving NOTIFY movingChanged)
- Q_PROPERTY(bool flicking READ isFlicking NOTIFY flickingChanged)
-
- Q_PROPERTY(int count READ count NOTIFY countChanged)
- Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
- Q_PROPERTY(int pathItemCount READ pathItemCount WRITE setPathItemCount NOTIFY pathItemCountChanged)
-
- Q_ENUMS(HighlightRangeMode)
-
-public:
- QDeclarative1PathView(QDeclarativeItem *parent=0);
- virtual ~QDeclarative1PathView();
-
- QVariant model() const;
- void setModel(const QVariant &);
-
- QDeclarative1Path *path() const;
- void setPath(QDeclarative1Path *);
-
- int currentIndex() const;
- void setCurrentIndex(int idx);
-
- qreal offset() const;
- void setOffset(qreal offset);
-
- QDeclarativeComponent *highlight() const;
- void setHighlight(QDeclarativeComponent *highlight);
- QDeclarativeItem *highlightItem();
-
- enum HighlightRangeMode { NoHighlightRange, ApplyRange, StrictlyEnforceRange };
- HighlightRangeMode highlightRangeMode() const;
- void setHighlightRangeMode(HighlightRangeMode mode);
-
- qreal preferredHighlightBegin() const;
- void setPreferredHighlightBegin(qreal);
-
- qreal preferredHighlightEnd() const;
- void setPreferredHighlightEnd(qreal);
-
- int highlightMoveDuration() const;
- void setHighlightMoveDuration(int);
-
- qreal dragMargin() const;
- void setDragMargin(qreal margin);
-
- qreal flickDeceleration() const;
- void setFlickDeceleration(qreal dec);
-
- bool isInteractive() const;
- void setInteractive(bool);
-
- bool isMoving() const;
- bool isFlicking() const;
-
- int count() const;
-
- QDeclarativeComponent *delegate() const;
- void setDelegate(QDeclarativeComponent *);
-
- int pathItemCount() const;
- void setPathItemCount(int);
-
- static QDeclarative1PathViewAttached *qmlAttachedProperties(QObject *);
-
-public Q_SLOTS:
- void incrementCurrentIndex();
- void decrementCurrentIndex();
-
-Q_SIGNALS:
- void currentIndexChanged();
- void offsetChanged();
- void modelChanged();
- void countChanged();
- void pathChanged();
- void preferredHighlightBeginChanged();
- void preferredHighlightEndChanged();
- void highlightRangeModeChanged();
- void dragMarginChanged();
- void snapPositionChanged();
- void delegateChanged();
- void pathItemCountChanged();
- void flickDecelerationChanged();
- void interactiveChanged();
- void movingChanged();
- void flickingChanged();
- void highlightChanged();
- void highlightItemChanged();
- void highlightMoveDurationChanged();
- void movementStarted();
- void movementEnded();
- void flickStarted();
- void flickEnded();
-
-protected:
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *);
- bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
- bool sceneEventFilter(QGraphicsItem *, QEvent *);
- bool sceneEvent(QEvent *event);
- bool event(QEvent *event);
- void componentComplete();
-
-private Q_SLOTS:
- void refill();
- void ticked();
- void movementEnding();
- void itemsInserted(int index, int count);
- void itemsRemoved(int index, int count);
- void itemsMoved(int,int,int);
- void modelReset();
- void createdItem(int index, QDeclarativeItem *item);
- void destroyingItem(QDeclarativeItem *item);
- void pathUpdated();
-
-private:
- friend class QDeclarative1PathViewAttached;
- Q_DISABLE_COPY(QDeclarative1PathView)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1PathView)
-};
-
-class QDeclarative1OpenMetaObject;
-class QDeclarative1PathViewAttached : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarative1PathView *view READ view CONSTANT)
- Q_PROPERTY(bool isCurrentItem READ isCurrentItem NOTIFY currentItemChanged)
- Q_PROPERTY(bool onPath READ isOnPath NOTIFY pathChanged)
-
-public:
- QDeclarative1PathViewAttached(QObject *parent);
- ~QDeclarative1PathViewAttached();
-
- QDeclarative1PathView *view() { return m_view; }
-
- bool isCurrentItem() const { return m_isCurrent; }
- void setIsCurrentItem(bool c) {
- if (m_isCurrent != c) {
- m_isCurrent = c;
- emit currentItemChanged();
- }
- }
-
- QVariant value(const QByteArray &name) const;
- void setValue(const QByteArray &name, const QVariant &val);
-
- bool isOnPath() const { return m_onPath; }
- void setOnPath(bool on) {
- if (on != m_onPath) {
- m_onPath = on;
- emit pathChanged();
- }
- }
- qreal m_percent;
-
-Q_SIGNALS:
- void currentItemChanged();
- void pathChanged();
-
-private:
- friend class QDeclarative1PathViewPrivate;
- friend class QDeclarative1PathView;
- QDeclarative1PathView *m_view;
- QDeclarative1OpenMetaObject *m_metaobject;
- bool m_onPath : 1;
- bool m_isCurrent : 1;
-};
-
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1PathView)
-QML_DECLARE_TYPEINFO(QDeclarative1PathView, QML_HAS_ATTACHED_PROPERTIES)
-QT_END_HEADER
-
-#endif // QDECLARATIVEPATHVIEW_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativepathview_p_p.h b/src/qtquick1/graphicsitems/qdeclarativepathview_p_p.h
deleted file mode 100644
index b44c5ae3ee..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepathview_p_p.h
+++ /dev/null
@@ -1,192 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEPATHVIEW_P_H
-#define QDECLARATIVEPATHVIEW_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativepathview_p.h"
-
-#include "QtQuick1/private/qdeclarativeitem_p.h"
-#include "QtQuick1/private/qdeclarativevisualitemmodel_p.h"
-
-#include <QtDeclarative/qdeclarative.h>
-#include <QtQuick1/private/qdeclarativeanimation_p_p.h>
-#include <QtDeclarative/private/qdeclarativeguard_p.h>
-
-#include <qdatetime.h>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1OpenMetaObjectType;
-class QDeclarative1PathViewAttached;
-class QDeclarative1PathViewPrivate : public QDeclarativeItemPrivate, public QDeclarativeItemChangeListener
-{
- Q_DECLARE_PUBLIC(QDeclarative1PathView)
-
-public:
- QDeclarative1PathViewPrivate()
- : path(0), currentIndex(0), currentItemOffset(0.0), startPc(0), lastDist(0)
- , lastElapsed(0), offset(0.0), offsetAdj(0.0), mappedRange(1.0)
- , stealMouse(false), ownModel(false), interactive(true), haveHighlightRange(true)
- , autoHighlight(true), highlightUp(false), layoutScheduled(false)
- , moving(false), flicking(false)
- , dragMargin(0), deceleration(100)
- , moveOffset(this, &QDeclarative1PathViewPrivate::setAdjustedOffset)
- , firstIndex(-1), pathItems(-1), requestedIndex(-1)
- , moveReason(Other), moveDirection(Shortest), attType(0), highlightComponent(0), highlightItem(0)
- , moveHighlight(this, &QDeclarative1PathViewPrivate::setHighlightPosition)
- , highlightPosition(0)
- , highlightRangeStart(0), highlightRangeEnd(0)
- , highlightRangeMode(QDeclarative1PathView::StrictlyEnforceRange)
- , highlightMoveDuration(300), modelCount(0)
- {
- }
-
- void init();
-
- void itemGeometryChanged(QDeclarativeItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) {
- if ((newGeometry.size() != oldGeometry.size())
- && (!highlightItem || item != highlightItem)) {
- if (QDeclarative1PathViewAttached *att = attached(item))
- att->m_percent = -1;
- scheduleLayout();
- }
- }
-
- void scheduleLayout() {
- Q_Q(QDeclarative1PathView);
- if (!layoutScheduled) {
- layoutScheduled = true;
- QCoreApplication::postEvent(q, new QEvent(QEvent::User), Qt::HighEventPriority);
- }
- }
-
- QDeclarativeItem *getItem(int modelIndex);
- void releaseItem(QDeclarativeItem *item);
- QDeclarative1PathViewAttached *attached(QDeclarativeItem *item);
- void clear();
- void updateMappedRange();
- qreal positionOfIndex(qreal index) const;
- void createHighlight();
- void updateHighlight();
- void setHighlightPosition(qreal pos);
- bool isValid() const {
- return model && model->count() > 0 && model->isValid() && path;
- }
-
- void handleMousePressEvent(QGraphicsSceneMouseEvent *event);
- void handleMouseMoveEvent(QGraphicsSceneMouseEvent *event);
- void handleMouseReleaseEvent(QGraphicsSceneMouseEvent *);
-
- int calcCurrentIndex();
- void updateCurrent();
- static void fixOffsetCallback(void*);
- void fixOffset();
- void setOffset(qreal offset);
- void setAdjustedOffset(qreal offset);
- void regenerate();
- void updateItem(QDeclarativeItem *, qreal);
- void snapToCurrent();
- QPointF pointNear(const QPointF &point, qreal *nearPercent=0) const;
-
- QDeclarative1Path *path;
- int currentIndex;
- QDeclarativeGuard<QDeclarativeItem> currentItem;
- qreal currentItemOffset;
- qreal startPc;
- QPointF startPoint;
- qreal lastDist;
- int lastElapsed;
- qreal offset;
- qreal offsetAdj;
- qreal mappedRange;
- bool stealMouse : 1;
- bool ownModel : 1;
- bool interactive : 1;
- bool haveHighlightRange : 1;
- bool autoHighlight : 1;
- bool highlightUp : 1;
- bool layoutScheduled : 1;
- bool moving : 1;
- bool flicking : 1;
- QElapsedTimer lastPosTime;
- QPointF lastPos;
- qreal dragMargin;
- qreal deceleration;
- QDeclarative1TimeLine tl;
- QDeclarative1TimeLineValueProxy<QDeclarative1PathViewPrivate> moveOffset;
- int firstIndex;
- int pathItems;
- int requestedIndex;
- QList<QDeclarativeItem *> items;
- QList<QDeclarativeItem *> itemCache;
- QDeclarativeGuard<QDeclarative1VisualModel> model;
- QVariant modelVariant;
- enum MovementReason { Other, SetIndex, Mouse };
- MovementReason moveReason;
- enum MovementDirection { Shortest, Negative, Positive };
- MovementDirection moveDirection;
- QDeclarative1OpenMetaObjectType *attType;
- QDeclarativeComponent *highlightComponent;
- QDeclarativeItem *highlightItem;
- QDeclarative1TimeLineValueProxy<QDeclarative1PathViewPrivate> moveHighlight;
- qreal highlightPosition;
- qreal highlightRangeStart;
- qreal highlightRangeEnd;
- QDeclarative1PathView::HighlightRangeMode highlightRangeMode;
- int highlightMoveDuration;
- int modelCount;
-};
-
-QT_END_NAMESPACE
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativepincharea.cpp b/src/qtquick1/graphicsitems/qdeclarativepincharea.cpp
deleted file mode 100644
index f9bc3a5ff3..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepincharea.cpp
+++ /dev/null
@@ -1,613 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativepincharea_p.h"
-#include "QtQuick1/private/qdeclarativepincharea_p_p.h"
-
-#include <QApplication>
-#include <QGraphicsScene>
-
-#include <float.h>
-#include <math.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-
-/*!
- \qmlclass PinchEvent QDeclarative1PinchEvent
- \inqmlmodule QtQuick 1
- \ingroup qml-event-elements
- \brief The PinchEvent object provides information about a pinch event.
-
- \bold {The PinchEvent element was added in QtQuick 1.1}
-
- The \c center, \c startCenter, \c previousCenter properties provide the center position between the two touch points.
-
- The \c scale and \c previousScale properties provide the scale factor.
-
- The \c angle, \c previousAngle and \c rotation properties provide the angle between the two points and the amount of rotation.
-
- The \c point1, \c point2, \c startPoint1, \c startPoint2 properties provide the positions of the touch points.
-
- The \c accepted property may be set to false in the \c onPinchStarted handler if the gesture should not
- be handled.
-
- \sa PinchArea
-*/
-
-/*!
- \qmlproperty QPointF QtQuick1::PinchEvent::center
- \qmlproperty QPointF QtQuick1::PinchEvent::startCenter
- \qmlproperty QPointF QtQuick1::PinchEvent::previousCenter
-
- These properties hold the position of the center point between the two touch points.
-
- \list
- \o \c center is the current center point
- \o \c previousCenter is the center point of the previous event.
- \o \c startCenter is the center point when the gesture began
- \endlist
-*/
-
-/*!
- \qmlproperty real QtQuick1::PinchEvent::scale
- \qmlproperty real QtQuick1::PinchEvent::previousScale
-
- These properties hold the scale factor determined by the change in distance between the two touch points.
-
- \list
- \o \c scale is the current scale factor.
- \o \c previousScale is the scale factor of the previous event.
- \endlist
-
- When a pinch gesture is started, the scale is 1.0.
-*/
-
-/*!
- \qmlproperty real QtQuick1::PinchEvent::angle
- \qmlproperty real QtQuick1::PinchEvent::previousAngle
- \qmlproperty real QtQuick1::PinchEvent::rotation
-
- These properties hold the angle between the two touch points.
-
- \list
- \o \c angle is the current angle between the two points in the range -180 to 180.
- \o \c previousAngle is the angle of the previous event.
- \o \c rotation is the total rotation since the pinch gesture started.
- \endlist
-
- When a pinch gesture is started, the rotation is 0.0.
-*/
-
-/*!
- \qmlproperty QPointF QtQuick1::PinchEvent::point1
- \qmlproperty QPointF QtQuick1::PinchEvent::startPoint1
- \qmlproperty QPointF QtQuick1::PinchEvent::point2
- \qmlproperty QPointF QtQuick1::PinchEvent::startPoint2
-
- These properties provide the actual touch points generating the pinch.
-
- \list
- \o \c point1 and \c point2 hold the current positions of the points.
- \o \c startPoint1 and \c startPoint2 hold the positions of the points when the second point was touched.
- \endlist
-*/
-
-/*!
- \qmlproperty bool QtQuick1::PinchEvent::accepted
-
- Setting this property to false in the \c PinchArea::onPinchStarted handler
- will result in no further pinch events being generated, and the gesture
- ignored.
-*/
-
-/*!
- \qmlproperty int QtQuick1::PinchEvent::pointCount
-
- Holds the number of points currently touched. The PinchArea will not react
- until two touch points have initited a gesture, but will remain active until
- all touch points have been released.
-*/
-
-QDeclarative1Pinch::QDeclarative1Pinch()
- : m_target(0), m_minScale(1.0), m_maxScale(1.0)
- , m_minRotation(0.0), m_maxRotation(0.0)
- , m_axis(NoDrag), m_xmin(-FLT_MAX), m_xmax(FLT_MAX)
- , m_ymin(-FLT_MAX), m_ymax(FLT_MAX), m_active(false)
-{
-}
-
-QDeclarative1PinchAreaPrivate::~QDeclarative1PinchAreaPrivate()
-{
- delete pinch;
-}
-
-/*!
- \qmlclass PinchArea QDeclarative1PinchArea
- \inqmlmodule QtQuick 1
- \brief The PinchArea item enables simple pinch gesture handling.
- \inherits Item
-
- \bold {The PinchArea element was added in QtQuick 1.1}
-
- A PinchArea is an invisible item that is typically used in conjunction with
- a visible item in order to provide pinch gesture handling for that item.
-
- The \l enabled property is used to enable and disable pinch handling for
- the proxied item. When disabled, the pinch area becomes transparent to
- mouse/touch events.
-
- PinchArea can be used in two ways:
-
- \list
- \o setting a \c pinch.target to provide automatic interaction with an element
- \o using the onPinchStarted, onPinchUpdated and onPinchFinished handlers
- \endlist
-
- \sa PinchEvent
-*/
-
-/*!
- \qmlsignal QtQuick1::PinchArea::onPinchStarted()
-
- This handler is called when the pinch area detects that a pinch gesture has started.
-
- The \l {PinchEvent}{pinch} parameter provides information about the pinch gesture,
- including the scale, center and angle of the pinch.
-
- To ignore this gesture set the \c pinch.accepted property to false. The gesture
- will be cancelled and no further events will be sent.
-*/
-
-/*!
- \qmlsignal QtQuick1::PinchArea::onPinchUpdated()
-
- This handler is called when the pinch area detects that a pinch gesture has changed.
-
- The \l {PinchEvent}{pinch} parameter provides information about the pinch gesture,
- including the scale, center and angle of the pinch.
-*/
-
-/*!
- \qmlsignal QtQuick1::PinchArea::onPinchFinished()
-
- This handler is called when the pinch area detects that a pinch gesture has finished.
-
- The \l {PinchEvent}{pinch} parameter provides information about the pinch gesture,
- including the scale, center and angle of the pinch.
-*/
-
-
-/*!
- \qmlproperty Item QtQuick1::PinchArea::pinch.target
- \qmlproperty bool QtQuick1::PinchArea::pinch.active
- \qmlproperty real QtQuick1::PinchArea::pinch.minimumScale
- \qmlproperty real QtQuick1::PinchArea::pinch.maximumScale
- \qmlproperty real QtQuick1::PinchArea::pinch.minimumRotation
- \qmlproperty real QtQuick1::PinchArea::pinch.maximumRotation
- \qmlproperty enumeration QtQuick1::PinchArea::pinch.dragAxis
- \qmlproperty real QtQuick1::PinchArea::pinch.minimumX
- \qmlproperty real QtQuick1::PinchArea::pinch.maximumX
- \qmlproperty real QtQuick1::PinchArea::pinch.minimumY
- \qmlproperty real QtQuick1::PinchArea::pinch.maximumY
-
- \c pinch provides a convenient way to make an item react to pinch gestures.
-
- \list
- \i \c pinch.target specifies the id of the item to drag.
- \i \c pinch.active specifies if the target item is currently being dragged.
- \i \c pinch.minimumScale and \c pinch.maximumScale limit the range of the Item::scale property.
- \i \c pinch.minimumRotation and \c pinch.maximumRotation limit the range of the Item::rotation property.
- \i \c pinch.dragAxis specifies whether dragging in not allowed (\c Pinch.NoDrag), can be done horizontally (\c Pinch.XAxis), vertically (\c Pinch.YAxis), or both (\c Pinch.XandYAxis)
- \i \c pinch.minimum and \c pinch.maximum limit how far the target can be dragged along the corresponding axes.
- \endlist
-*/
-
-QDeclarative1PinchArea::QDeclarative1PinchArea(QDeclarativeItem *parent)
- : QDeclarativeItem(*(new QDeclarative1PinchAreaPrivate), parent)
-{
- Q_D(QDeclarative1PinchArea);
- d->init();
-}
-
-QDeclarative1PinchArea::~QDeclarative1PinchArea()
-{
-}
-
-/*!
- \qmlproperty bool QtQuick1::PinchArea::enabled
- This property holds whether the item accepts pinch gestures.
-
- This property defaults to true.
-*/
-bool QDeclarative1PinchArea::isEnabled() const
-{
- Q_D(const QDeclarative1PinchArea);
- return d->absorb;
-}
-
-void QDeclarative1PinchArea::setEnabled(bool a)
-{
- Q_D(QDeclarative1PinchArea);
- if (a != d->absorb) {
- d->absorb = a;
- emit enabledChanged();
- }
-}
-
-bool QDeclarative1PinchArea::event(QEvent *event)
-{
- Q_D(QDeclarative1PinchArea);
- if (!d->absorb || !isVisible())
- return QDeclarativeItem::event(event);
- switch (event->type()) {
- case QEvent::TouchBegin:
- case QEvent::TouchUpdate: {
- QTouchEvent *touch = static_cast<QTouchEvent*>(event);
- d->touchPoints.clear();
- for (int i = 0; i < touch->touchPoints().count(); ++i) {
- if (!(touch->touchPoints().at(i).state() & Qt::TouchPointReleased)) {
- d->touchPoints << touch->touchPoints().at(i);
- }
- }
- updatePinch();
- }
- return true;
- case QEvent::TouchEnd:
- d->touchPoints.clear();
- updatePinch();
- break;
- default:
- return QDeclarativeItem::event(event);
- }
-
- return QDeclarativeItem::event(event);
-}
-
-void QDeclarative1PinchArea::updatePinch()
-{
- Q_D(QDeclarative1PinchArea);
- if (d->touchPoints.count() == 0) {
- if (d->inPinch) {
- d->stealMouse = false;
- setKeepMouseGrab(false);
- d->inPinch = false;
- QPointF pinchCenter = mapFromScene(d->sceneLastCenter);
- QDeclarative1PinchEvent pe(pinchCenter, d->pinchLastScale, d->pinchLastAngle, d->pinchRotation);
- pe.setStartCenter(d->pinchStartCenter);
- pe.setPreviousCenter(pinchCenter);
- pe.setPreviousAngle(d->pinchLastAngle);
- pe.setPreviousScale(d->pinchLastScale);
- pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));
- pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));
- pe.setPoint1(mapFromScene(d->lastPoint1));
- pe.setPoint2(mapFromScene(d->lastPoint2));
- emit pinchFinished(&pe);
- d->pinchStartDist = 0;
- d->pinchActivated = false;
- if (d->pinch && d->pinch->target())
- d->pinch->setActive(false);
- }
- return;
- }
- QTouchEvent::TouchPoint touchPoint1 = d->touchPoints.at(0);
- QTouchEvent::TouchPoint touchPoint2 = d->touchPoints.at(d->touchPoints. count() >= 2 ? 1 : 0);
- if (d->touchPoints.count() == 2
- && (touchPoint1.state() & Qt::TouchPointPressed || touchPoint2.state() & Qt::TouchPointPressed)) {
- d->id1 = touchPoint1.id();
- d->sceneStartPoint1 = touchPoint1.scenePos();
- d->sceneStartPoint2 = touchPoint2.scenePos();
- d->inPinch = false;
- d->pinchRejected = false;
- d->pinchActivated = true;
- } else if (d->pinchActivated && !d->pinchRejected) {
- const int dragThreshold = QApplication::startDragDistance();
- QPointF p1 = touchPoint1.scenePos();
- QPointF p2 = touchPoint2.scenePos();
- qreal dx = p1.x() - p2.x();
- qreal dy = p1.y() - p2.y();
- qreal dist = sqrt(dx*dx + dy*dy);
- QPointF sceneCenter = (p1 + p2)/2;
- qreal angle = QLineF(p1, p2).angle();
- if (d->touchPoints.count() == 1) {
- // If we only have one point then just move the center
- if (d->id1 == touchPoint1.id())
- sceneCenter = d->sceneLastCenter + touchPoint1.scenePos() - d->lastPoint1;
- else
- sceneCenter = d->sceneLastCenter + touchPoint2.scenePos() - d->lastPoint2;
- angle = d->pinchLastAngle;
- }
- d->id1 = touchPoint1.id();
- if (angle > 180)
- angle -= 360;
- if (!d->inPinch) {
- if (d->touchPoints.count() >= 2
- && (qAbs(p1.x()-d->sceneStartPoint1.x()) > dragThreshold
- || qAbs(p1.y()-d->sceneStartPoint1.y()) > dragThreshold
- || qAbs(p2.x()-d->sceneStartPoint2.x()) > dragThreshold
- || qAbs(p2.y()-d->sceneStartPoint2.y()) > dragThreshold)) {
- d->sceneStartCenter = sceneCenter;
- d->sceneLastCenter = sceneCenter;
- d->pinchStartCenter = mapFromScene(sceneCenter);
- d->pinchStartDist = dist;
- d->pinchStartAngle = angle;
- d->pinchLastScale = 1.0;
- d->pinchLastAngle = angle;
- d->pinchRotation = 0.0;
- d->lastPoint1 = p1;
- d->lastPoint2 = p2;
- QDeclarative1PinchEvent pe(d->pinchStartCenter, 1.0, angle, 0.0);
- pe.setStartCenter(d->pinchStartCenter);
- pe.setPreviousCenter(d->pinchStartCenter);
- pe.setPreviousAngle(d->pinchLastAngle);
- pe.setPreviousScale(d->pinchLastScale);
- pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));
- pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));
- pe.setPoint1(mapFromScene(d->lastPoint1));
- pe.setPoint2(mapFromScene(d->lastPoint2));
- pe.setPointCount(d->touchPoints.count());
- emit pinchStarted(&pe);
- if (pe.accepted()) {
- d->inPinch = true;
- d->stealMouse = true;
- QGraphicsScene *s = scene();
- if (s && s->mouseGrabberItem() != this)
- grabMouse();
- setKeepMouseGrab(true);
- if (d->pinch && d->pinch->target()) {
- d->pinchStartPos = pinch()->target()->pos();
- d->pinchStartScale = d->pinch->target()->scale();
- d->pinchStartRotation = d->pinch->target()->rotation();
- d->pinch->setActive(true);
- }
- } else {
- d->pinchRejected = true;
- }
- }
- } else if (d->pinchStartDist > 0) {
- qreal scale = dist ? dist / d->pinchStartDist : d->pinchLastScale;
- qreal da = d->pinchLastAngle - angle;
- if (da > 180)
- da -= 360;
- else if (da < -180)
- da += 360;
- d->pinchRotation += da;
- QPointF pinchCenter = mapFromScene(sceneCenter);
- QDeclarative1PinchEvent pe(pinchCenter, scale, angle, d->pinchRotation);
- pe.setStartCenter(d->pinchStartCenter);
- pe.setPreviousCenter(mapFromScene(d->sceneLastCenter));
- pe.setPreviousAngle(d->pinchLastAngle);
- pe.setPreviousScale(d->pinchLastScale);
- pe.setStartPoint1(mapFromScene(d->sceneStartPoint1));
- pe.setStartPoint2(mapFromScene(d->sceneStartPoint2));
- pe.setPoint1(touchPoint1.pos());
- pe.setPoint2(touchPoint2.pos());
- pe.setPointCount(d->touchPoints.count());
- d->pinchLastScale = scale;
- d->sceneLastCenter = sceneCenter;
- d->pinchLastAngle = angle;
- d->lastPoint1 = touchPoint1.scenePos();
- d->lastPoint2 = touchPoint2.scenePos();
- emit pinchUpdated(&pe);
- if (d->pinch && d->pinch->target()) {
- qreal s = d->pinchStartScale * scale;
- s = qMin(qMax(pinch()->minimumScale(),s), pinch()->maximumScale());
- pinch()->target()->setScale(s);
- QPointF pos = sceneCenter - d->sceneStartCenter + d->pinchStartPos;
- if (pinch()->axis() & QDeclarative1Pinch::XAxis) {
- qreal x = pos.x();
- if (x < pinch()->xmin())
- x = pinch()->xmin();
- else if (x > pinch()->xmax())
- x = pinch()->xmax();
- pinch()->target()->setX(x);
- }
- if (pinch()->axis() & QDeclarative1Pinch::YAxis) {
- qreal y = pos.y();
- if (y < pinch()->ymin())
- y = pinch()->ymin();
- else if (y > pinch()->ymax())
- y = pinch()->ymax();
- pinch()->target()->setY(y);
- }
- if (d->pinchStartRotation >= pinch()->minimumRotation()
- && d->pinchStartRotation <= pinch()->maximumRotation()) {
- qreal r = d->pinchRotation + d->pinchStartRotation;
- r = qMin(qMax(pinch()->minimumRotation(),r), pinch()->maximumRotation());
- pinch()->target()->setRotation(r);
- }
- }
- }
- }
-}
-
-void QDeclarative1PinchArea::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1PinchArea);
- d->stealMouse = false;
- if (!d->absorb)
- QDeclarativeItem::mousePressEvent(event);
- else {
- setKeepMouseGrab(false);
- event->setAccepted(true);
- }
-}
-
-void QDeclarative1PinchArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1PinchArea);
- if (!d->absorb) {
- QDeclarativeItem::mouseMoveEvent(event);
- return;
- }
-}
-
-void QDeclarative1PinchArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1PinchArea);
- d->stealMouse = false;
- if (!d->absorb) {
- QDeclarativeItem::mouseReleaseEvent(event);
- } else {
- QGraphicsScene *s = scene();
- if (s && s->mouseGrabberItem() == this)
- ungrabMouse();
- setKeepMouseGrab(false);
- }
-}
-
-bool QDeclarative1PinchArea::sceneEvent(QEvent *event)
-{
- bool rv = QDeclarativeItem::sceneEvent(event);
- if (event->type() == QEvent::UngrabMouse) {
- setKeepMouseGrab(false);
- }
- return rv;
-}
-
-bool QDeclarative1PinchArea::sendMouseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1PinchArea);
- QGraphicsSceneMouseEvent mouseEvent(event->type());
- QRectF myRect = mapToScene(QRectF(0, 0, width(), height())).boundingRect();
-
- QGraphicsScene *s = scene();
- QDeclarativeItem *grabber = s ? qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem()) : 0;
- bool stealThisEvent = d->stealMouse;
- if ((stealThisEvent || myRect.contains(event->scenePos().toPoint())) && (!grabber || !grabber->keepMouseGrab())) {
- mouseEvent.setAccepted(false);
- for (int i = 0x1; i <= 0x10; i <<= 1) {
- if (event->buttons() & i) {
- Qt::MouseButton button = Qt::MouseButton(i);
- mouseEvent.setButtonDownPos(button, mapFromScene(event->buttonDownPos(button)));
- }
- }
- mouseEvent.setScenePos(event->scenePos());
- mouseEvent.setLastScenePos(event->lastScenePos());
- mouseEvent.setPos(mapFromScene(event->scenePos()));
- mouseEvent.setLastPos(mapFromScene(event->lastScenePos()));
-
- switch(mouseEvent.type()) {
- case QEvent::GraphicsSceneMouseMove:
- mouseMoveEvent(&mouseEvent);
- break;
- case QEvent::GraphicsSceneMousePress:
- mousePressEvent(&mouseEvent);
- break;
- case QEvent::GraphicsSceneMouseRelease:
- mouseReleaseEvent(&mouseEvent);
- break;
- default:
- break;
- }
- grabber = qobject_cast<QDeclarativeItem*>(s->mouseGrabberItem());
- if (grabber && stealThisEvent && !grabber->keepMouseGrab() && grabber != this)
- grabMouse();
-
- return stealThisEvent;
- }
- if (mouseEvent.type() == QEvent::GraphicsSceneMouseRelease) {
- d->stealMouse = false;
- if (s && s->mouseGrabberItem() == this)
- ungrabMouse();
- setKeepMouseGrab(false);
- }
- return false;
-}
-
-bool QDeclarative1PinchArea::sceneEventFilter(QGraphicsItem *i, QEvent *e)
-{
- Q_D(QDeclarative1PinchArea);
- if (!d->absorb || !isVisible())
- return QDeclarativeItem::sceneEventFilter(i, e);
- switch (e->type()) {
- case QEvent::GraphicsSceneMousePress:
- case QEvent::GraphicsSceneMouseMove:
- case QEvent::GraphicsSceneMouseRelease:
- return sendMouseEvent(static_cast<QGraphicsSceneMouseEvent *>(e));
- break;
- case QEvent::TouchBegin:
- case QEvent::TouchUpdate: {
- QTouchEvent *touch = static_cast<QTouchEvent*>(e);
- d->touchPoints.clear();
- for (int i = 0; i < touch->touchPoints().count(); ++i)
- if (!(touch->touchPoints().at(i).state() & Qt::TouchPointReleased))
- d->touchPoints << touch->touchPoints().at(i);
- updatePinch();
- }
- return d->inPinch;
- case QEvent::TouchEnd:
- d->touchPoints.clear();
- updatePinch();
- break;
- default:
- break;
- }
-
- return QDeclarativeItem::sceneEventFilter(i, e);
-}
-
-void QDeclarative1PinchArea::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-QVariant QDeclarative1PinchArea::itemChange(GraphicsItemChange change,
- const QVariant &value)
-{
- return QDeclarativeItem::itemChange(change, value);
-}
-
-QDeclarative1Pinch *QDeclarative1PinchArea::pinch()
-{
- Q_D(QDeclarative1PinchArea);
- if (!d->pinch)
- d->pinch = new QDeclarative1Pinch;
- return d->pinch;
-}
-
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativepincharea_p.h b/src/qtquick1/graphicsitems/qdeclarativepincharea_p.h
deleted file mode 100644
index 01f8b92524..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepincharea_p.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEPINCHAREA_H
-#define QDECLARATIVEPINCHAREA_H
-
-#include <qdeclarativeitem.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class Q_AUTOTEST_EXPORT QDeclarative1Pinch : public QObject
-{
- Q_OBJECT
-
- Q_ENUMS(Axis)
- Q_PROPERTY(QGraphicsObject *target READ target WRITE setTarget RESET resetTarget)
- Q_PROPERTY(qreal minimumScale READ minimumScale WRITE setMinimumScale NOTIFY minimumScaleChanged)
- Q_PROPERTY(qreal maximumScale READ maximumScale WRITE setMaximumScale NOTIFY maximumScaleChanged)
- Q_PROPERTY(qreal minimumRotation READ minimumRotation WRITE setMinimumRotation NOTIFY minimumRotationChanged)
- Q_PROPERTY(qreal maximumRotation READ maximumRotation WRITE setMaximumRotation NOTIFY maximumRotationChanged)
- Q_PROPERTY(Axis dragAxis READ axis WRITE setAxis NOTIFY dragAxisChanged)
- Q_PROPERTY(qreal minimumX READ xmin WRITE setXmin NOTIFY minimumXChanged)
- Q_PROPERTY(qreal maximumX READ xmax WRITE setXmax NOTIFY maximumXChanged)
- Q_PROPERTY(qreal minimumY READ ymin WRITE setYmin NOTIFY minimumYChanged)
- Q_PROPERTY(qreal maximumY READ ymax WRITE setYmax NOTIFY maximumYChanged)
- Q_PROPERTY(bool active READ active NOTIFY activeChanged)
-
-public:
- QDeclarative1Pinch();
-
- QGraphicsObject *target() const { return m_target; }
- void setTarget(QGraphicsObject *target) {
- if (target == m_target)
- return;
- m_target = target;
- emit targetChanged();
- }
- void resetTarget() {
- if (!m_target)
- return;
- m_target = 0;
- emit targetChanged();
- }
-
- qreal minimumScale() const { return m_minScale; }
- void setMinimumScale(qreal s) {
- if (s == m_minScale)
- return;
- m_minScale = s;
- emit minimumScaleChanged();
- }
- qreal maximumScale() const { return m_maxScale; }
- void setMaximumScale(qreal s) {
- if (s == m_maxScale)
- return;
- m_maxScale = s;
- emit maximumScaleChanged();
- }
-
- qreal minimumRotation() const { return m_minRotation; }
- void setMinimumRotation(qreal r) {
- if (r == m_minRotation)
- return;
- m_minRotation = r;
- emit minimumRotationChanged();
- }
- qreal maximumRotation() const { return m_maxRotation; }
- void setMaximumRotation(qreal r) {
- if (r == m_maxRotation)
- return;
- m_maxRotation = r;
- emit maximumRotationChanged();
- }
-
- enum Axis { NoDrag=0x00, XAxis=0x01, YAxis=0x02, XandYAxis=0x03 };
- Axis axis() const { return m_axis; }
- void setAxis(Axis a) {
- if (a == m_axis)
- return;
- m_axis = a;
- emit dragAxisChanged();
- }
-
- qreal xmin() const { return m_xmin; }
- void setXmin(qreal x) {
- if (x == m_xmin)
- return;
- m_xmin = x;
- emit minimumXChanged();
- }
- qreal xmax() const { return m_xmax; }
- void setXmax(qreal x) {
- if (x == m_xmax)
- return;
- m_xmax = x;
- emit maximumXChanged();
- }
- qreal ymin() const { return m_ymin; }
- void setYmin(qreal y) {
- if (y == m_ymin)
- return;
- m_ymin = y;
- emit minimumYChanged();
- }
- qreal ymax() const { return m_ymax; }
- void setYmax(qreal y) {
- if (y == m_ymax)
- return;
- m_ymax = y;
- emit maximumYChanged();
- }
-
- bool active() const { return m_active; }
- void setActive(bool a) {
- if (a == m_active)
- return;
- m_active = a;
- emit activeChanged();
- }
-
-signals:
- void targetChanged();
- void minimumScaleChanged();
- void maximumScaleChanged();
- void minimumRotationChanged();
- void maximumRotationChanged();
- void dragAxisChanged();
- void minimumXChanged();
- void maximumXChanged();
- void minimumYChanged();
- void maximumYChanged();
- void activeChanged();
-
-private:
- QGraphicsObject *m_target;
- qreal m_minScale;
- qreal m_maxScale;
- qreal m_minRotation;
- qreal m_maxRotation;
- Axis m_axis;
- qreal m_xmin;
- qreal m_xmax;
- qreal m_ymin;
- qreal m_ymax;
- bool m_active;
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1PinchEvent : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QPointF center READ center)
- Q_PROPERTY(QPointF startCenter READ startCenter)
- Q_PROPERTY(QPointF previousCenter READ previousCenter)
- Q_PROPERTY(qreal scale READ scale)
- Q_PROPERTY(qreal previousScale READ previousScale)
- Q_PROPERTY(qreal angle READ angle)
- Q_PROPERTY(qreal previousAngle READ previousAngle)
- Q_PROPERTY(qreal rotation READ rotation)
- Q_PROPERTY(QPointF point1 READ point1)
- Q_PROPERTY(QPointF startPoint1 READ startPoint1)
- Q_PROPERTY(QPointF point2 READ point2)
- Q_PROPERTY(QPointF startPoint2 READ startPoint2)
- Q_PROPERTY(int pointCount READ pointCount)
- Q_PROPERTY(bool accepted READ accepted WRITE setAccepted)
-
-public:
- QDeclarative1PinchEvent(QPointF c, qreal s, qreal a, qreal r)
- : QObject(), m_center(c), m_scale(s), m_angle(a), m_rotation(r)
- , m_pointCount(0), m_accepted(true) {}
-
- QPointF center() const { return m_center; }
- QPointF startCenter() const { return m_startCenter; }
- void setStartCenter(QPointF c) { m_startCenter = c; }
- QPointF previousCenter() const { return m_lastCenter; }
- void setPreviousCenter(QPointF c) { m_lastCenter = c; }
- qreal scale() const { return m_scale; }
- qreal previousScale() const { return m_lastScale; }
- void setPreviousScale(qreal s) { m_lastScale = s; }
- qreal angle() const { return m_angle; }
- qreal previousAngle() const { return m_lastAngle; }
- void setPreviousAngle(qreal a) { m_lastAngle = a; }
- qreal rotation() const { return m_rotation; }
- QPointF point1() const { return m_point1; }
- void setPoint1(QPointF p) { m_point1 = p; }
- QPointF startPoint1() const { return m_startPoint1; }
- void setStartPoint1(QPointF p) { m_startPoint1 = p; }
- QPointF point2() const { return m_point2; }
- void setPoint2(QPointF p) { m_point2 = p; }
- QPointF startPoint2() const { return m_startPoint2; }
- void setStartPoint2(QPointF p) { m_startPoint2 = p; }
- int pointCount() const { return m_pointCount; }
- void setPointCount(int count) { m_pointCount = count; }
-
- bool accepted() const { return m_accepted; }
- void setAccepted(bool a) { m_accepted = a; }
-
-private:
- QPointF m_center;
- QPointF m_startCenter;
- QPointF m_lastCenter;
- qreal m_scale;
- qreal m_lastScale;
- qreal m_angle;
- qreal m_lastAngle;
- qreal m_rotation;
- QPointF m_point1;
- QPointF m_point2;
- QPointF m_startPoint1;
- QPointF m_startPoint2;
- int m_pointCount;
- bool m_accepted;
-};
-
-
-class QDeclarative1MouseEvent;
-class QDeclarative1PinchAreaPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1PinchArea : public QDeclarativeItem
-{
- Q_OBJECT
-
- Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
- Q_PROPERTY(QDeclarative1Pinch *pinch READ pinch CONSTANT)
-
-public:
- QDeclarative1PinchArea(QDeclarativeItem *parent=0);
- ~QDeclarative1PinchArea();
-
- bool isEnabled() const;
- void setEnabled(bool);
-
- QDeclarative1Pinch *pinch();
-
-Q_SIGNALS:
- void enabledChanged();
- void pinchStarted(QDeclarative1PinchEvent *pinch);
- void pinchUpdated(QDeclarative1PinchEvent *pinch);
- void pinchFinished(QDeclarative1PinchEvent *pinch);
-
-protected:
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- bool sceneEvent(QEvent *);
- bool sendMouseEvent(QGraphicsSceneMouseEvent *event);
- bool sceneEventFilter(QGraphicsItem *i, QEvent *e);
- bool event(QEvent *);
-
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
- virtual QVariant itemChange(GraphicsItemChange change, const QVariant& value);
-
-private:
- void updatePinch();
- void handlePress();
- void handleRelease();
-
-private:
- Q_DISABLE_COPY(QDeclarative1PinchArea)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1PinchArea)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Pinch)
-QML_DECLARE_TYPE(QDeclarative1PinchEvent)
-QML_DECLARE_TYPE(QDeclarative1PinchArea)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEPINCHAREA_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativepincharea_p_p.h b/src/qtquick1/graphicsitems/qdeclarativepincharea_p_p.h
deleted file mode 100644
index 2e679e5464..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepincharea_p_p.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEPINCHAREA_P_H
-#define QDECLARATIVEPINCHAREA_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include <qdatetime.h>
-#include <qbasictimer.h>
-#include <qevent.h>
-#include <qgraphicssceneevent.h>
-#include "qdeclarativeitem_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1Pinch;
-class QDeclarative1PinchAreaPrivate : public QDeclarativeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1PinchArea)
-public:
- QDeclarative1PinchAreaPrivate()
- : absorb(true), stealMouse(false), inPinch(false)
- , pinchRejected(false), pinchActivated(false)
- , pinch(0), pinchStartDist(0), pinchStartScale(1.0)
- , pinchLastScale(1.0), pinchStartRotation(0.0), pinchStartAngle(0.0)
- , pinchLastAngle(0.0), pinchRotation(0.0)
- {
- }
-
- ~QDeclarative1PinchAreaPrivate();
-
- void init()
- {
- Q_Q(QDeclarative1PinchArea);
- q->setAcceptedMouseButtons(Qt::LeftButton);
- q->setAcceptTouchEvents(true);
- q->setFiltersChildEvents(true);
- }
-
- bool absorb : 1;
- bool stealMouse : 1;
- bool inPinch : 1;
- bool pinchRejected : 1;
- bool pinchActivated : 1;
- QDeclarative1Pinch *pinch;
- QPointF sceneStartPoint1;
- QPointF sceneStartPoint2;
- QPointF lastPoint1;
- QPointF lastPoint2;
- qreal pinchStartDist;
- qreal pinchStartScale;
- qreal pinchLastScale;
- qreal pinchStartRotation;
- qreal pinchStartAngle;
- qreal pinchLastAngle;
- qreal pinchRotation;
- QPointF sceneStartCenter;
- QPointF pinchStartCenter;
- QPointF sceneLastCenter;
- QPointF pinchStartPos;
- QList<QTouchEvent::TouchPoint> touchPoints;
- int id1;
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVEPINCHAREA_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativepositioners.cpp b/src/qtquick1/graphicsitems/qdeclarativepositioners.cpp
deleted file mode 100644
index 1a7d86f00a..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepositioners.cpp
+++ /dev/null
@@ -1,1400 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativepositioners_p.h"
-#include "QtQuick1/private/qdeclarativepositioners_p_p.h"
-
-#include <QtDeclarative/qdeclarative.h>
-#include <QtQuick1/private/qdeclarativestate_p.h>
-#include <QtQuick1/private/qdeclarativestategroup_p.h>
-#include <QtQuick1/private/qdeclarativestateoperations_p.h>
-#include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtCore/qmath.h>
-
-#include <QDebug>
-#include <QCoreApplication>
-
-QT_BEGIN_NAMESPACE
-
-
-
-static const QDeclarativeItemPrivate::ChangeTypes watchedChanges
- = QDeclarativeItemPrivate::Geometry
- | QDeclarativeItemPrivate::SiblingOrder
- | QDeclarativeItemPrivate::Visibility
- | QDeclarativeItemPrivate::Opacity
- | QDeclarativeItemPrivate::Destroyed;
-
-void QDeclarative1BasePositionerPrivate::watchChanges(QGraphicsObject *other)
-{
- if (QGraphicsItemPrivate::get(other)->isDeclarativeItem) {
- QDeclarativeItemPrivate *otherPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(other));
- otherPrivate->addItemChangeListener(this, watchedChanges);
- } else {
- Q_Q(QDeclarative1BasePositioner);
- QObject::connect(other, SIGNAL(widthChanged()), q, SLOT(graphicsWidgetGeometryChanged()));
- QObject::connect(other, SIGNAL(heightChanged()), q, SLOT(graphicsWidgetGeometryChanged()));
- QObject::connect(other, SIGNAL(opacityChanged()), q, SLOT(graphicsWidgetGeometryChanged()));
- QObject::connect(other, SIGNAL(visibleChanged()), q, SLOT(graphicsWidgetGeometryChanged()));
- }
-}
-
-void QDeclarative1BasePositionerPrivate::unwatchChanges(QGraphicsObject* other)
-{
- if (QGraphicsItemPrivate::get(other)->isDeclarativeItem) {
- QDeclarativeItemPrivate *otherPrivate = static_cast<QDeclarativeItemPrivate*>(QGraphicsItemPrivate::get(other));
- otherPrivate->removeItemChangeListener(this, watchedChanges);
- } else {
- Q_Q(QDeclarative1BasePositioner);
- QObject::disconnect(other, SIGNAL(widthChanged()), q, SLOT(graphicsWidgetGeometryChanged()));
- QObject::disconnect(other, SIGNAL(heightChanged()), q, SLOT(graphicsWidgetGeometryChanged()));
- QObject::disconnect(other, SIGNAL(opacityChanged()), q, SLOT(graphicsWidgetGeometryChanged()));
- QObject::disconnect(other, SIGNAL(visibleChanged()), q, SLOT(graphicsWidgetGeometryChanged()));
- }
-}
-
-void QDeclarative1BasePositioner::graphicsWidgetGeometryChanged()
-{
- prePositioning();
-}
-
-/*!
- \internal
- \class QDeclarative1BasePositioner
- \brief The QDeclarative1BasePositioner class provides a base for QDeclarative1Graphics layouts.
-
- To create a QDeclarative1Graphics Positioner, simply subclass QDeclarative1BasePositioner and implement
- doLayout(), which is automatically called when the layout might need
- updating. In doLayout() use the setX and setY functions from QDeclarative1BasePositioner, and the
- base class will apply the positions along with the appropriate transitions. The items to
- position are provided in order as the protected member positionedItems.
-
- You also need to set a PositionerType, to declare whether you are positioning the x, y or both
- for the child items. Depending on the chosen type, only x or y changes will be applied.
-
- Note that the subclass is responsible for adding the spacing in between items.
-*/
-QDeclarative1BasePositioner::QDeclarative1BasePositioner(PositionerType at, QDeclarativeItem *parent)
- : QDeclarative1ImplicitSizeItem(*(new QDeclarative1BasePositionerPrivate), parent)
-{
- Q_D(QDeclarative1BasePositioner);
- d->init(at);
-}
-
-QDeclarative1BasePositioner::QDeclarative1BasePositioner(QDeclarative1BasePositionerPrivate &dd, PositionerType at, QDeclarativeItem *parent)
- : QDeclarative1ImplicitSizeItem(dd, parent)
-{
- Q_D(QDeclarative1BasePositioner);
- d->init(at);
-}
-
-QDeclarative1BasePositioner::~QDeclarative1BasePositioner()
-{
- Q_D(QDeclarative1BasePositioner);
- for (int i = 0; i < positionedItems.count(); ++i)
- d->unwatchChanges(positionedItems.at(i).item);
- positionedItems.clear();
-}
-
-int QDeclarative1BasePositioner::spacing() const
-{
- Q_D(const QDeclarative1BasePositioner);
- return d->spacing;
-}
-
-void QDeclarative1BasePositioner::setSpacing(int s)
-{
- Q_D(QDeclarative1BasePositioner);
- if (s==d->spacing)
- return;
- d->spacing = s;
- prePositioning();
- emit spacingChanged();
-}
-
-QDeclarative1Transition *QDeclarative1BasePositioner::move() const
-{
- Q_D(const QDeclarative1BasePositioner);
- return d->moveTransition;
-}
-
-void QDeclarative1BasePositioner::setMove(QDeclarative1Transition *mt)
-{
- Q_D(QDeclarative1BasePositioner);
- if (mt == d->moveTransition)
- return;
- d->moveTransition = mt;
- emit moveChanged();
-}
-
-QDeclarative1Transition *QDeclarative1BasePositioner::add() const
-{
- Q_D(const QDeclarative1BasePositioner);
- return d->addTransition;
-}
-
-void QDeclarative1BasePositioner::setAdd(QDeclarative1Transition *add)
-{
- Q_D(QDeclarative1BasePositioner);
- if (add == d->addTransition)
- return;
-
- d->addTransition = add;
- emit addChanged();
-}
-
-void QDeclarative1BasePositioner::componentComplete()
-{
- Q_D(QDeclarative1BasePositioner);
- QDeclarativeItem::componentComplete();
- positionedItems.reserve(d->QGraphicsItemPrivate::children.count());
- prePositioning();
- reportConflictingAnchors();
-}
-
-QVariant QDeclarative1BasePositioner::itemChange(GraphicsItemChange change,
- const QVariant &value)
-{
- Q_D(QDeclarative1BasePositioner);
- if (change == ItemChildAddedChange){
- QGraphicsItem* item = value.value<QGraphicsItem*>();
- QGraphicsObject* child = 0;
- if(item)
- child = item->toGraphicsObject();
- if (child)
- prePositioning();
- } else if (change == ItemChildRemovedChange) {
- QGraphicsItem* item = value.value<QGraphicsItem*>();
- QGraphicsObject* child = 0;
- if(item)
- child = item->toGraphicsObject();
- if (child) {
- QDeclarative1BasePositioner::PositionedItem posItem(child);
- int idx = positionedItems.find(posItem);
- if (idx >= 0) {
- d->unwatchChanges(child);
- positionedItems.remove(idx);
- }
- prePositioning();
- }
- }
- return QDeclarativeItem::itemChange(change, value);
-}
-
-void QDeclarative1BasePositioner::prePositioning()
-{
- Q_D(QDeclarative1BasePositioner);
- if (!isComponentComplete())
- return;
-
- if (d->doingPositioning)
- return;
-
- d->queuedPositioning = false;
- d->doingPositioning = true;
- //Need to order children by creation order modified by stacking order
- QList<QGraphicsItem *> children = d->QGraphicsItemPrivate::children;
- qSort(children.begin(), children.end(), d->insertionOrder);
-
- QPODVector<PositionedItem,8> oldItems;
- positionedItems.copyAndClear(oldItems);
- for (int ii = 0; ii < children.count(); ++ii) {
- QGraphicsObject *child = children.at(ii)->toGraphicsObject();
- if (!child)
- continue;
- QGraphicsItemPrivate *childPrivate = static_cast<QGraphicsItemPrivate*>(QGraphicsItemPrivate::get(child));
- PositionedItem *item = 0;
- PositionedItem posItem(child);
- int wIdx = oldItems.find(posItem);
- if (wIdx < 0) {
- d->watchChanges(child);
- positionedItems.append(posItem);
- item = &positionedItems[positionedItems.count()-1];
- item->isNew = true;
- if (child->opacity() <= 0.0 || childPrivate->explicitlyHidden || !childPrivate->width() || !childPrivate->height())
- item->isVisible = false;
- } else {
- item = &oldItems[wIdx];
- // Items are only omitted from positioning if they are explicitly hidden
- // i.e. their positioning is not affected if an ancestor is hidden.
- if (child->opacity() <= 0.0 || childPrivate->explicitlyHidden || !childPrivate->width() || !childPrivate->height()) {
- item->isVisible = false;
- } else if (!item->isVisible) {
- item->isVisible = true;
- item->isNew = true;
- } else {
- item->isNew = false;
- }
- positionedItems.append(*item);
- }
- }
- QSizeF contentSize;
- doPositioning(&contentSize);
- if(d->addTransition || d->moveTransition)
- finishApplyTransitions();
- d->doingPositioning = false;
- //Set implicit size to the size of its children
- setImplicitHeight(contentSize.height());
- setImplicitWidth(contentSize.width());
-}
-
-void QDeclarative1BasePositioner::positionX(int x, const PositionedItem &target)
-{
- Q_D(QDeclarative1BasePositioner);
- if(d->type == Horizontal || d->type == Both){
- if (target.isNew) {
- if (!d->addTransition)
- target.item->setX(x);
- else
- d->addActions << QDeclarative1Action(target.item, QLatin1String("x"), QVariant(x));
- } else if (x != target.item->x()) {
- if (!d->moveTransition)
- target.item->setX(x);
- else
- d->moveActions << QDeclarative1Action(target.item, QLatin1String("x"), QVariant(x));
- }
- }
-}
-
-void QDeclarative1BasePositioner::positionY(int y, const PositionedItem &target)
-{
- Q_D(QDeclarative1BasePositioner);
- if(d->type == Vertical || d->type == Both){
- if (target.isNew) {
- if (!d->addTransition)
- target.item->setY(y);
- else
- d->addActions << QDeclarative1Action(target.item, QLatin1String("y"), QVariant(y));
- } else if (y != target.item->y()) {
- if (!d->moveTransition)
- target.item->setY(y);
- else
- d->moveActions << QDeclarative1Action(target.item, QLatin1String("y"), QVariant(y));
- }
- }
-}
-
-void QDeclarative1BasePositioner::finishApplyTransitions()
-{
- Q_D(QDeclarative1BasePositioner);
- // Note that if a transition is not set the transition manager will
- // apply the changes directly, in the case add/move aren't set
- d->addTransitionManager.transition(d->addActions, d->addTransition);
- d->moveTransitionManager.transition(d->moveActions, d->moveTransition);
- d->addActions.clear();
- d->moveActions.clear();
-}
-
-/*!
- \qmlclass Column QDeclarative1Column
- \inqmlmodule QtQuick 1
- \ingroup qml-positioning-elements
- \since QtQuick 1.0
- \brief The Column item arranges its children vertically.
- \inherits Item
-
- The Column item positions its child items so that they are vertically
- aligned and not overlapping.
-
- Spacing between items can be added using the \l spacing property.
- Transitions can be used for cases where items managed by a Column are
- added or moved. These are stored in the \l add and \l move properties
- respectively.
-
- See \l{Using QML Positioner and Repeater Items} for more details about this item and other
- related items.
-
- \section1 Example Usage
-
- The following example positions differently shaped rectangles using a Column
- item.
-
- \image verticalpositioner_example.png
-
- \snippet doc/src/snippets/qtquick1/column/vertical-positioner.qml document
-
- \section1 Using Transitions
-
- Transitions can be used to animate items that are added to, moved within,
- or removed from a Column item. The \l add and \l move properties can be set to
- the transitions that will be applied when items are added to, removed from,
- or re-positioned within a Column item.
-
- The use of transitions with positioners is described in more detail in the
- \l{Using QML Positioner and Repeater Items#Using Transitions}{Using QML
- Positioner and Repeater Items} document.
-
- \image verticalpositioner_transition.gif
-
- \qml
- Column {
- spacing: 2
- add: Transition {
- // Define an animation for adding a new item...
- }
- move: Transition {
- // Define an animation for moving items within the column...
- }
- // ...
- }
- \endqml
-
- \section1 Limitations
-
- Note that the positioner assumes that the x and y positions of its children
- will not change. If you manually change the x or y properties in script, bind
- the x or y properties, use anchors on a child of a positioner, or have the
- height of a child depend on the position of a child, then the
- positioner may exhibit strange behavior. If you need to perform any of these
- actions, consider positioning the items without the use of a Column.
-
- Items with a width or height of 0 will not be positioned.
-
- \sa Row, Grid, Flow, {declarative/positioners}{Positioners example}
-*/
-/*!
- \qmlproperty Transition QtQuick1::Column::add
-
- This property holds the transition to be applied when adding an
- item to the positioner. The transition will only be applied to the
- added item(s). Positioner transitions will only affect the
- position (x, y) of items.
-
- For a positioner, adding an item can mean that either the object
- has been created or reparented, and thus is now a child or the
- positioner, or that the object has had its opacity increased from
- zero, and thus is now visible.
-
- \sa move
-*/
-/*!
- \qmlproperty Transition QtQuick1::Column::move
-
- This property holds the transition to apply when moving an item
- within the positioner. Positioner transitions will only affect
- the position (x, y) of items.
-
- This transition can be performed when other items are added or removed
- from the positioner, or when items resize themselves.
-
- \image positioner-move.gif
-
- \qml
- Column {
- move: Transition {
- NumberAnimation {
- properties: "y"
- duration: 1000
- }
- }
- }
- \endqml
-
- \sa add, {declarative/positioners}{Positioners example}
-*/
-/*!
- \qmlproperty int QtQuick1::Column::spacing
-
- The spacing is the amount in pixels left empty between adjacent
- items. The default spacing is 0.
-
- \sa Grid::spacing
-*/
-QDeclarative1Column::QDeclarative1Column(QDeclarativeItem *parent)
-: QDeclarative1BasePositioner(Vertical, parent)
-{
-}
-
-void QDeclarative1Column::doPositioning(QSizeF *contentSize)
-{
- int voffset = 0;
-
- for (int ii = 0; ii < positionedItems.count(); ++ii) {
- const PositionedItem &child = positionedItems.at(ii);
- if (!child.item || !child.isVisible)
- continue;
-
- if(child.item->y() != voffset)
- positionY(voffset, child);
-
- contentSize->setWidth(qMax(contentSize->width(), QGraphicsItemPrivate::get(child.item)->width()));
-
- voffset += QGraphicsItemPrivate::get(child.item)->height();
- voffset += spacing();
- }
-
- contentSize->setHeight(voffset - spacing());
-}
-
-void QDeclarative1Column::reportConflictingAnchors()
-{
- QDeclarative1BasePositionerPrivate *d = static_cast<QDeclarative1BasePositionerPrivate*>(QDeclarative1BasePositionerPrivate::get(this));
- for (int ii = 0; ii < positionedItems.count(); ++ii) {
- const PositionedItem &child = positionedItems.at(ii);
- if (child.item && QGraphicsItemPrivate::get(child.item)->isDeclarativeItem) {
- QDeclarative1Anchors *anchors = QDeclarativeItemPrivate::get(static_cast<QDeclarativeItem *>(child.item))->_anchors;
- if (anchors) {
- QDeclarative1Anchors::Anchors usedAnchors = anchors->usedAnchors();
- if (usedAnchors & QDeclarative1Anchors::TopAnchor ||
- usedAnchors & QDeclarative1Anchors::BottomAnchor ||
- usedAnchors & QDeclarative1Anchors::VCenterAnchor ||
- anchors->fill() || anchors->centerIn()) {
- d->anchorConflict = true;
- break;
- }
- }
- }
- }
- if (d->anchorConflict) {
- qmlInfo(this) << "Cannot specify top, bottom, verticalCenter, fill or centerIn anchors for items inside Column";
- }
-}
-
-/*!
- \qmlclass Row QDeclarative1Row
- \inqmlmodule QtQuick 1
- \ingroup qml-positioning-elements
- \since QtQuick 1.0
- \brief The Row item arranges its children horizontally.
- \inherits Item
-
- The Row item positions its child items so that they are horizontally
- aligned and not overlapping.
-
- Use \l spacing to set the spacing between items in a Row, and use the
- \l add and \l move properties to set the transitions that should be applied
- when items are added to, removed from, or re-positioned within the Row.
-
- See \l{Using QML Positioner and Repeater Items} for more details about this item and other
- related items.
-
- \section1 Example Usage
-
- The following example lays out differently shaped rectangles using a Row.
-
- \image horizontalpositioner_example.png
-
- \snippet doc/src/snippets/qtquick1/row/row.qml document
-
- \section1 Using Transitions
-
- Transitions can be used to animate items that are added to, moved within,
- or removed from a Grid item. The \l add and \l move properties can be set to
- the transitions that will be applied when items are added to, removed from,
- or re-positioned within a Row item.
-
- \section1 Limitations
-
- Note that the positioner assumes that the x and y positions of its children
- will not change. If you manually change the x or y properties in script, bind
- the x or y properties, use anchors on a child of a positioner, or have the
- width of a child depend on the position of a child, then the
- positioner may exhibit strange behaviour. If you need to perform any of these
- actions, consider positioning the items without the use of a Row.
-
- Items with a width or height of 0 will not be positioned.
-
- \sa Column, Grid, Flow, {declarative/positioners}{Positioners example}
-*/
-/*!
- \qmlproperty Transition QtQuick1::Row::add
-
- This property holds the transition to be applied when adding an
- item to the positioner. The transition will only be applied to the
- added item(s). Positioner transitions will only affect the
- position (x, y) of items.
-
- For a positioner, adding an item can mean that either the object
- has been created or reparented, and thus is now a child or the
- positioner, or that the object has had its opacity increased from
- zero, and thus is now visible.
-
- \sa move
-*/
-/*!
- \qmlproperty Transition QtQuick1::Row::move
-
- This property holds the transition to be applied when moving an
- item within the positioner. Positioner transitions will only affect
- the position (x, y) of items.
-
- This transition can be performed when other items are added or removed
- from the positioner, or when items resize themselves.
-
- \qml
- Row {
- id: positioner
- move: Transition {
- NumberAnimation {
- properties: "x"
- duration: 1000
- }
- }
- }
- \endqml
-
- \sa add, {declarative/positioners}{Positioners example}
-*/
-/*!
- \qmlproperty int QtQuick1::Row::spacing
-
- The spacing is the amount in pixels left empty between adjacent
- items. The default spacing is 0.
-
- \sa Grid::spacing
-*/
-QDeclarative1Row::QDeclarative1Row(QDeclarativeItem *parent)
-: QDeclarative1BasePositioner(Horizontal, parent)
-{
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Row::layoutDirection
- \since Quick 1.1
-
- This property holds the layoutDirection of the row.
-
- Possible values:
-
- \list
- \o Qt.LeftToRight (default) - Items are laid out from left to right. If the width of the row is explicitly set,
- the left anchor remains to the left of the row.
- \o Qt.RightToLeft - Items are laid out from right to left. If the width of the row is explicitly set,
- the right anchor remains to the right of the row.
- \endlist
-
- \sa Grid::layoutDirection, Flow::layoutDirection, {declarative/righttoleft/layoutdirection}{Layout directions example}
-*/
-Qt::LayoutDirection QDeclarative1Row::layoutDirection() const
-{
- return QDeclarative1BasePositionerPrivate::getLayoutDirection(this);
-}
-
-void QDeclarative1Row::setLayoutDirection(Qt::LayoutDirection layoutDirection)
-{
- QDeclarative1BasePositionerPrivate *d = static_cast<QDeclarative1BasePositionerPrivate* >(QDeclarative1BasePositionerPrivate::get(this));
- if (d->layoutDirection != layoutDirection) {
- d->layoutDirection = layoutDirection;
- // For RTL layout the positioning changes when the width changes.
- if (d->layoutDirection == Qt::RightToLeft)
- d->addItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
- else
- d->removeItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
- prePositioning();
- emit layoutDirectionChanged();
- emit effectiveLayoutDirectionChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Row::effectiveLayoutDirection
- This property holds the effective layout direction of the row positioner.
-
- When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts,
- the visual layout direction of the row positioner will be mirrored. However, the
- property \l {Row::layoutDirection}{layoutDirection} will remain unchanged.
-
- \sa Row::layoutDirection, {LayoutMirroring}{LayoutMirroring}
-*/
-
-Qt::LayoutDirection QDeclarative1Row::effectiveLayoutDirection() const
-{
- return QDeclarative1BasePositionerPrivate::getEffectiveLayoutDirection(this);
-}
-
-void QDeclarative1Row::doPositioning(QSizeF *contentSize)
-{
- QDeclarative1BasePositionerPrivate *d = static_cast<QDeclarative1BasePositionerPrivate*>(QDeclarative1BasePositionerPrivate::get(this));
- int hoffset = 0;
-
- QList<int> hoffsets;
- for (int ii = 0; ii < positionedItems.count(); ++ii) {
- const PositionedItem &child = positionedItems.at(ii);
- if (!child.item || !child.isVisible)
- continue;
-
- if(d->isLeftToRight()){
- if(child.item->x() != hoffset)
- positionX(hoffset, child);
- }else{
- hoffsets << hoffset;
- }
-
- contentSize->setHeight(qMax(contentSize->height(), QGraphicsItemPrivate::get(child.item)->height()));
-
- hoffset += QGraphicsItemPrivate::get(child.item)->width();
- hoffset += spacing();
- }
-
- contentSize->setWidth(hoffset - spacing());
-
- if(d->isLeftToRight())
- return;
-
- //Right to Left layout
- int end = 0;
- if(!widthValid())
- end = contentSize->width();
- else
- end = width();
-
- int acc = 0;
- for (int ii = 0; ii < positionedItems.count(); ++ii) {
- const PositionedItem &child = positionedItems.at(ii);
- if (!child.item || !child.isVisible)
- continue;
- hoffset = end - hoffsets[acc++] - QGraphicsItemPrivate::get(child.item)->width();
- if(child.item->x() != hoffset)
- positionX(hoffset, child);
- }
-}
-
-void QDeclarative1Row::reportConflictingAnchors()
-{
- QDeclarative1BasePositionerPrivate *d = static_cast<QDeclarative1BasePositionerPrivate*>(QDeclarative1BasePositionerPrivate::get(this));
- for (int ii = 0; ii < positionedItems.count(); ++ii) {
- const PositionedItem &child = positionedItems.at(ii);
- if (child.item && QGraphicsItemPrivate::get(child.item)->isDeclarativeItem) {
- QDeclarative1Anchors *anchors = QDeclarativeItemPrivate::get(static_cast<QDeclarativeItem *>(child.item))->_anchors;
- if (anchors) {
- QDeclarative1Anchors::Anchors usedAnchors = anchors->usedAnchors();
- if (usedAnchors & QDeclarative1Anchors::LeftAnchor ||
- usedAnchors & QDeclarative1Anchors::RightAnchor ||
- usedAnchors & QDeclarative1Anchors::HCenterAnchor ||
- anchors->fill() || anchors->centerIn()) {
- d->anchorConflict = true;
- break;
- }
- }
- }
- }
- if (d->anchorConflict)
- qmlInfo(this) << "Cannot specify left, right, horizontalCenter, fill or centerIn anchors for items inside Row";
-}
-
-/*!
- \qmlclass Grid QDeclarative1Grid
- \inqmlmodule QtQuick 1
- \ingroup qml-positioning-elements
- \since QtQuick 1.0
- \brief The Grid item positions its children in a grid.
- \inherits Item
-
- The Grid item positions its child items so that they are
- aligned in a grid and are not overlapping.
-
- The grid positioner calculates a grid of rectangular cells of sufficient
- size to hold all items, placing the items in the cells, from left to right
- and top to bottom. Each item is positioned in the top-left corner of its
- cell with position (0, 0).
-
- A Grid defaults to four columns, and as many rows as are necessary to
- fit all child items. The number of rows and columns can be constrained
- by setting the \l rows and \l columns properties.
-
- Spacing can be added between child items by setting the \l spacing
- property. The amount of spacing applied will be the same in the
- horizontal and vertical directions.
-
- See \l{Using QML Positioner and Repeater Items} for more details about this item and other
- related items.
-
- \section1 Example Usage
-
- The following example demonstrates this.
-
- \image gridLayout_example.png
-
- \snippet doc/src/snippets/qtquick1/grid/grid.qml document
-
- \section1 Using Transitions
-
- Transitions can be used to animate items that are added to, moved within,
- or removed from a Grid item. The \l add and \l move properties can be set to
- the transitions that will be applied when items are added to, removed from,
- or re-positioned within a Grid item.
-
- \section1 Limitations
-
- Note that the positioner assumes that the x and y positions of its children
- will not change. If you manually change the x or y properties in script, bind
- the x or y properties, use anchors on a child of a positioner, or have the
- width or height of a child depend on the position of a child, then the
- positioner may exhibit strange behaviour. If you need to perform any of these
- actions, consider positioning the items without the use of a Grid.
-
- Items with a width or height of 0 will not be positioned.
-
- \sa Flow, Row, Column, {declarative/positioners}{Positioners example}
-*/
-/*!
- \qmlproperty Transition QtQuick1::Grid::add
-
- This property holds the transition to be applied when adding an
- item to the positioner. The transition will only be applied to the
- added item(s). Positioner transitions will only affect the
- position (x, y) of items.
-
- For a positioner, adding an item can mean that either the object
- has been created or reparented, and thus is now a child or the
- positioner, or that the object has had its opacity increased from
- zero, and thus is now visible.
-
- \sa move
-*/
-/*!
- \qmlproperty Transition QtQuick1::Grid::move
-
- This property holds the transition to be applied when moving an
- item within the positioner. Positioner transitions will only affect
- the position (x, y) of items.
-
- This transition can be performed when other items are added or removed
- from the positioner, or when items resize themselves.
-
- \qml
- Grid {
- move: Transition {
- NumberAnimation {
- properties: "x,y"
- duration: 1000
- }
- }
- }
- \endqml
-
- \sa add, {declarative/positioners}{Positioners example}
-*/
-/*!
- \qmlproperty int QtQuick1::Grid::spacing
-
- The spacing is the amount in pixels left empty between adjacent
- items. The default spacing is 0.
-
- The below example places a Grid containing a red, a blue and a
- green rectangle on a gray background. The area the grid positioner
- occupies is colored white. The positioner on the left has the
- no spacing (the default), and the positioner on the right has
- a spacing of 6.
-
- \inlineimage qml-grid-no-spacing.png
- \inlineimage qml-grid-spacing.png
-
- \sa rows, columns
-*/
-QDeclarative1Grid::QDeclarative1Grid(QDeclarativeItem *parent) :
- QDeclarative1BasePositioner(Both, parent), m_rows(-1), m_columns(-1), m_flow(LeftToRight)
-{
-}
-
-/*!
- \qmlproperty int QtQuick1::Grid::columns
-
- This property holds the number of columns in the grid. The default
- number of columns is 4.
-
- If the grid does not have enough items to fill the specified
- number of columns, some columns will be of zero width.
-*/
-
-/*!
- \qmlproperty int QtQuick1::Grid::rows
- This property holds the number of rows in the grid.
-
- If the grid does not have enough items to fill the specified
- number of rows, some rows will be of zero width.
-*/
-
-void QDeclarative1Grid::setColumns(const int columns)
-{
- if (columns == m_columns)
- return;
- m_columns = columns;
- prePositioning();
- emit columnsChanged();
-}
-
-void QDeclarative1Grid::setRows(const int rows)
-{
- if (rows == m_rows)
- return;
- m_rows = rows;
- prePositioning();
- emit rowsChanged();
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Grid::flow
- This property holds the flow of the layout.
-
- Possible values are:
-
- \list
- \o Grid.LeftToRight (default) - Items are positioned next to
- each other in the \l layoutDirection, then wrapped to the next line.
- \o Grid.TopToBottom - Items are positioned next to each
- other from top to bottom, then wrapped to the next column.
- \endlist
-*/
-QDeclarative1Grid::Flow QDeclarative1Grid::flow() const
-{
- return m_flow;
-}
-
-void QDeclarative1Grid::setFlow(Flow flow)
-{
- if (m_flow != flow) {
- m_flow = flow;
- prePositioning();
- emit flowChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Grid::layoutDirection
- \since Quick 1.1
-
- This property holds the layout direction of the layout.
-
- Possible values are:
-
- \list
- \o Qt.LeftToRight (default) - Items are positioned from the top to bottom,
- and left to right. The flow direction is dependent on the
- \l Grid::flow property.
- \o Qt.RightToLeft - Items are positioned from the top to bottom,
- and right to left. The flow direction is dependent on the
- \l Grid::flow property.
- \endlist
-
- \sa Flow::layoutDirection, Row::layoutDirection, {declarative/righttoleft/layoutdirection}{Layout directions example}
-*/
-Qt::LayoutDirection QDeclarative1Grid::layoutDirection() const
-{
- return QDeclarative1BasePositionerPrivate::getLayoutDirection(this);
-}
-
-void QDeclarative1Grid::setLayoutDirection(Qt::LayoutDirection layoutDirection)
-{
- QDeclarative1BasePositionerPrivate *d = static_cast<QDeclarative1BasePositionerPrivate*>(QDeclarative1BasePositionerPrivate::get(this));
- if (d->layoutDirection != layoutDirection) {
- d->layoutDirection = layoutDirection;
- // For RTL layout the positioning changes when the width changes.
- if (d->layoutDirection == Qt::RightToLeft)
- d->addItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
- else
- d->removeItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
- prePositioning();
- emit layoutDirectionChanged();
- emit effectiveLayoutDirectionChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Grid::effectiveLayoutDirection
- This property holds the effective layout direction of the grid positioner.
-
- When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts,
- the visual layout direction of the grid positioner will be mirrored. However, the
- property \l {Grid::layoutDirection}{layoutDirection} will remain unchanged.
-
- \sa Grid::layoutDirection, {LayoutMirroring}{LayoutMirroring}
-*/
-
-Qt::LayoutDirection QDeclarative1Grid::effectiveLayoutDirection() const
-{
- return QDeclarative1BasePositionerPrivate::getEffectiveLayoutDirection(this);
-}
-
-void QDeclarative1Grid::doPositioning(QSizeF *contentSize)
-{
- QDeclarative1BasePositionerPrivate *d = static_cast<QDeclarative1BasePositionerPrivate*>(QDeclarative1BasePositionerPrivate::get(this));
- int c = m_columns;
- int r = m_rows;
- //Is allocating the extra QPODVector too much overhead?
- QPODVector<PositionedItem, 8> visibleItems;//we aren't concerned with invisible items
- visibleItems.reserve(positionedItems.count());
- for(int i=0; i<positionedItems.count(); i++)
- if(positionedItems[i].item && positionedItems[i].isVisible)
- visibleItems.append(positionedItems[i]);
-
- int numVisible = visibleItems.count();
- if (m_columns <= 0 && m_rows <= 0){
- c = 4;
- r = (numVisible+3)/4;
- } else if (m_rows <= 0){
- r = (numVisible+(m_columns-1))/m_columns;
- } else if (m_columns <= 0){
- c = (numVisible+(m_rows-1))/m_rows;
- }
-
- if(r==0 || c==0)
- return; //Nothing to do
-
- QList<int> maxColWidth;
- QList<int> maxRowHeight;
- int childIndex =0;
- if (m_flow == LeftToRight) {
- for (int i=0; i < r; i++){
- for (int j=0; j < c; j++){
- if (j==0)
- maxRowHeight << 0;
- if (i==0)
- maxColWidth << 0;
-
- if (childIndex == visibleItems.count())
- break;
-
- const PositionedItem &child = visibleItems.at(childIndex++);
- QGraphicsItemPrivate *childPrivate = QGraphicsItemPrivate::get(child.item);
- if (childPrivate->width() > maxColWidth[j])
- maxColWidth[j] = childPrivate->width();
- if (childPrivate->height() > maxRowHeight[i])
- maxRowHeight[i] = childPrivate->height();
- }
- }
- } else {
- for (int j=0; j < c; j++){
- for (int i=0; i < r; i++){
- if (j==0)
- maxRowHeight << 0;
- if (i==0)
- maxColWidth << 0;
-
- if (childIndex == visibleItems.count())
- break;
-
- const PositionedItem &child = visibleItems.at(childIndex++);
- QGraphicsItemPrivate *childPrivate = QGraphicsItemPrivate::get(child.item);
- if (childPrivate->width() > maxColWidth[j])
- maxColWidth[j] = childPrivate->width();
- if (childPrivate->height() > maxRowHeight[i])
- maxRowHeight[i] = childPrivate->height();
- }
- }
- }
-
- int widthSum = 0;
- for(int j=0; j < maxColWidth.size(); j++){
- if(j)
- widthSum += spacing();
- widthSum += maxColWidth[j];
- }
-
- int heightSum = 0;
- for(int i=0; i < maxRowHeight.size(); i++){
- if(i)
- heightSum += spacing();
- heightSum += maxRowHeight[i];
- }
-
- contentSize->setHeight(heightSum);
- contentSize->setWidth(widthSum);
-
- int end = 0;
- if(widthValid())
- end = width();
- else
- end = widthSum;
-
- int xoffset=0;
- if(!d->isLeftToRight())
- xoffset=end;
- int yoffset=0;
- int curRow =0;
- int curCol =0;
- for (int i = 0; i < visibleItems.count(); ++i) {
- const PositionedItem &child = visibleItems.at(i);
- int childXOffset = xoffset;
- if(!d->isLeftToRight())
- childXOffset -= QGraphicsItemPrivate::get(child.item)->width();
- if((child.item->x()!=childXOffset)||(child.item->y()!=yoffset)){
- positionX(childXOffset, child);
- positionY(yoffset, child);
- }
-
- if (m_flow == LeftToRight) {
- if(d->isLeftToRight())
- xoffset+=maxColWidth[curCol]+spacing();
- else
- xoffset-=maxColWidth[curCol]+spacing();
- curCol++;
- curCol%=c;
- if (!curCol){
- yoffset+=maxRowHeight[curRow]+spacing();
- if(d->isLeftToRight())
- xoffset=0;
- else
- xoffset=end;
- curRow++;
- if (curRow>=r)
- break;
- }
- } else {
- yoffset+=maxRowHeight[curRow]+spacing();
- curRow++;
- curRow%=r;
- if (!curRow){
- if(d->isLeftToRight())
- xoffset+=maxColWidth[curCol]+spacing();
- else
- xoffset-=maxColWidth[curCol]+spacing();
- yoffset=0;
- curCol++;
- if (curCol>=c)
- break;
- }
- }
- }
-}
-
-void QDeclarative1Grid::reportConflictingAnchors()
-{
- QDeclarative1BasePositionerPrivate *d = static_cast<QDeclarative1BasePositionerPrivate*>(QDeclarative1BasePositionerPrivate::get(this));
- for (int ii = 0; ii < positionedItems.count(); ++ii) {
- const PositionedItem &child = positionedItems.at(ii);
- if (child.item && QGraphicsItemPrivate::get(child.item)->isDeclarativeItem) {
- QDeclarative1Anchors *anchors = QDeclarativeItemPrivate::get(static_cast<QDeclarativeItem *>(child.item))->_anchors;
- if (anchors && (anchors->usedAnchors() || anchors->fill() || anchors->centerIn())) {
- d->anchorConflict = true;
- break;
- }
- }
- }
- if (d->anchorConflict)
- qmlInfo(this) << "Cannot specify anchors for items inside Grid";
-}
-
-/*!
- \qmlclass Flow QDeclarative1Flow
- \inqmlmodule QtQuick 1
- \ingroup qml-positioning-elements
- \since QtQuick 1.0
- \brief The Flow item arranges its children side by side, wrapping as necessary.
- \inherits Item
-
- The Flow item positions its child items like words on a page, wrapping them
- to create rows or columns of items that do not overlap.
-
- Spacing between items can be added using the \l spacing property.
- Transitions can be used for cases where items managed by a Column are
- added or moved. These are stored in the \l add and \l move properties
- respectively.
-
- See \l{Using QML Positioner and Repeater Items} for more details about this item and other
- related items.
-
- \section1 Example Usage
-
- The following example positions \l Text items within a parent item using
- a Flow item.
-
- \image qml-flow-snippet.png
-
- \snippet doc/src/snippets/qtquick1/flow.qml flow item
-
- \section1 Using Transitions
-
- Transitions can be used to animate items that are added to, moved within,
- or removed from a Flow item. The \l add and \l move properties can be set to
- the transitions that will be applied when items are added to, removed from,
- or re-positioned within a Flow item.
-
- The use of transitions with positioners is described in more detail in the
- \l{Using QML Positioner and Repeater Items#Using Transitions}{Using QML
- Positioner and Repeater Items} document.
-
- \section1 Limitations
-
- Note that the positioner assumes that the x and y positions of its children
- will not change. If you manually change the x or y properties in script, bind
- the x or y properties, use anchors on a child of a positioner, or have the
- width or height of a child depend on the position of a child, then the
- positioner may exhibit strange behaviour. If you need to perform any of these
- actions, consider positioning the items without the use of a Flow.
-
- Items with a width or height of 0 will not be positioned.
-
- \sa Column, Row, Grid, {declarative/positioners}{Positioners example}
-*/
-/*!
- \qmlproperty Transition QtQuick1::Flow::add
-
- This property holds the transition to be applied when adding an
- item to the positioner. The transition will only be applied to the
- added item(s). Positioner transitions will only affect the
- position (x, y) of items.
-
- For a positioner, adding an item can mean that either the object
- has been created or reparented, and thus is now a child or the
- positioner, or that the object has had its opacity increased from
- zero, and thus is now visible.
-
- \sa move
-*/
-/*!
- \qmlproperty Transition QtQuick1::Flow::move
-
- This property holds the transition to be applied when moving an
- item within the positioner. Positioner transitions will only affect
- the position (x, y) of items.
-
- This transition can be performed when other items are added or removed
- from the positioner, or when items resize themselves.
-
- \qml
- Flow {
- id: positioner
- move: Transition {
- NumberAnimation {
- properties: "x,y"
- ease: "easeOutBounce"
- }
- }
- }
- \endqml
-
- \sa add, {declarative/positioners}{Positioners example}
-*/
-/*!
- \qmlproperty int QtQuick1::Flow::spacing
-
- spacing is the amount in pixels left empty between each adjacent
- item, and defaults to 0.
-
- \sa Grid::spacing
-*/
-
-class QDeclarative1FlowPrivate : public QDeclarative1BasePositionerPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1Flow)
-
-public:
- QDeclarative1FlowPrivate()
- : QDeclarative1BasePositionerPrivate(), flow(QDeclarative1Flow::LeftToRight)
- {}
-
- QDeclarative1Flow::Flow flow;
-};
-
-QDeclarative1Flow::QDeclarative1Flow(QDeclarativeItem *parent)
-: QDeclarative1BasePositioner(*(new QDeclarative1FlowPrivate), Both, parent)
-{
- Q_D(QDeclarative1Flow);
- // Flow layout requires relayout if its own size changes too.
- d->addItemChangeListener(d, QDeclarativeItemPrivate::Geometry);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Flow::flow
- This property holds the flow of the layout.
-
- Possible values are:
-
- \list
- \o Flow.LeftToRight (default) - Items are positioned next to
- to each other according to the \l layoutDirection until the width of the Flow
- is exceeded, then wrapped to the next line.
- \o Flow.TopToBottom - Items are positioned next to each
- other from top to bottom until the height of the Flow is exceeded,
- then wrapped to the next column.
- \endlist
-*/
-QDeclarative1Flow::Flow QDeclarative1Flow::flow() const
-{
- Q_D(const QDeclarative1Flow);
- return d->flow;
-}
-
-void QDeclarative1Flow::setFlow(Flow flow)
-{
- Q_D(QDeclarative1Flow);
- if (d->flow != flow) {
- d->flow = flow;
- prePositioning();
- emit flowChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Flow::layoutDirection
- \since Quick 1.1
-
- This property holds the layout direction of the layout.
-
- Possible values are:
-
- \list
- \o Qt.LeftToRight (default) - Items are positioned from the top to bottom,
- and left to right. The flow direction is dependent on the
- \l Flow::flow property.
- \o Qt.RightToLeft - Items are positioned from the top to bottom,
- and right to left. The flow direction is dependent on the
- \l Flow::flow property.
- \endlist
-
- \sa Grid::layoutDirection, Row::layoutDirection, {declarative/righttoleft/layoutdirection}{Layout directions example}
-*/
-
-Qt::LayoutDirection QDeclarative1Flow::layoutDirection() const
-{
- Q_D(const QDeclarative1Flow);
- return d->layoutDirection;
-}
-
-void QDeclarative1Flow::setLayoutDirection(Qt::LayoutDirection layoutDirection)
-{
- Q_D(QDeclarative1Flow);
- if (d->layoutDirection != layoutDirection) {
- d->layoutDirection = layoutDirection;
- prePositioning();
- emit layoutDirectionChanged();
- emit effectiveLayoutDirectionChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Flow::effectiveLayoutDirection
- This property holds the effective layout direction of the flow positioner.
-
- When using the attached property \l {LayoutMirroring::enabled}{LayoutMirroring::enabled} for locale layouts,
- the visual layout direction of the grid positioner will be mirrored. However, the
- property \l {Flow::layoutDirection}{layoutDirection} will remain unchanged.
-
- \sa Flow::layoutDirection, {LayoutMirroring}{LayoutMirroring}
-*/
-
-Qt::LayoutDirection QDeclarative1Flow::effectiveLayoutDirection() const
-{
- return QDeclarative1BasePositionerPrivate::getEffectiveLayoutDirection(this);
-}
-
-void QDeclarative1Flow::doPositioning(QSizeF *contentSize)
-{
- Q_D(QDeclarative1Flow);
-
- int hoffset = 0;
- int voffset = 0;
- int linemax = 0;
- QList<int> hoffsets;
-
- for (int i = 0; i < positionedItems.count(); ++i) {
- const PositionedItem &child = positionedItems.at(i);
- if (!child.item || !child.isVisible)
- continue;
-
- QGraphicsItemPrivate *childPrivate = QGraphicsItemPrivate::get(child.item);
- if (d->flow == LeftToRight) {
- if (widthValid() && hoffset && hoffset + childPrivate->width() > width()) {
- hoffset = 0;
- voffset += linemax + spacing();
- linemax = 0;
- }
- } else {
- if (heightValid() && voffset && voffset + childPrivate->height() > height()) {
- voffset = 0;
- hoffset += linemax + spacing();
- linemax = 0;
- }
- }
-
- if(d->isLeftToRight()){
- if(child.item->x() != hoffset)
- positionX(hoffset, child);
- }else{
- hoffsets << hoffset;
- }
- if(child.item->y() != voffset)
- positionY(voffset, child);
-
- contentSize->setWidth(qMax(contentSize->width(), hoffset + childPrivate->width()));
- contentSize->setHeight(qMax(contentSize->height(), voffset + childPrivate->height()));
-
- if (d->flow == LeftToRight) {
- hoffset += childPrivate->width();
- hoffset += spacing();
- linemax = qMax(linemax, qCeil(childPrivate->height()));
- } else {
- voffset += childPrivate->height();
- voffset += spacing();
- linemax = qMax(linemax, qCeil(childPrivate->width()));
- }
- }
-
- if(d->isLeftToRight())
- return;
-
- int end;
- if(widthValid())
- end = width();
- else
- end = contentSize->width();
- int acc = 0;
- for (int i = 0; i < positionedItems.count(); ++i) {
- const PositionedItem &child = positionedItems.at(i);
- if (!child.item || !child.isVisible)
- continue;
- hoffset = end - hoffsets[acc++] - QGraphicsItemPrivate::get(child.item)->width();
- if(child.item->x() != hoffset)
- positionX(hoffset, child);
- }
-}
-
-void QDeclarative1Flow::reportConflictingAnchors()
-{
- Q_D(QDeclarative1Flow);
- for (int ii = 0; ii < positionedItems.count(); ++ii) {
- const PositionedItem &child = positionedItems.at(ii);
- if (child.item && QGraphicsItemPrivate::get(child.item)->isDeclarativeItem) {
- QDeclarative1Anchors *anchors = QDeclarativeItemPrivate::get(static_cast<QDeclarativeItem *>(child.item))->_anchors;
- if (anchors && (anchors->usedAnchors() || anchors->fill() || anchors->centerIn())) {
- d->anchorConflict = true;
- break;
- }
- }
- }
- if (d->anchorConflict)
- qmlInfo(this) << "Cannot specify anchors for items inside Flow";
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativepositioners_p.h b/src/qtquick1/graphicsitems/qdeclarativepositioners_p.h
deleted file mode 100644
index e2db345e37..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepositioners_p.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVELAYOUTS_H
-#define QDECLARATIVELAYOUTS_H
-
-#include "qdeclarativeimplicitsizeitem_p.h"
-
-#include <QtQuick1/private/qdeclarativestate_p.h>
-#include <private/qpodvector_p.h>
-
-#include <QtCore/QObject>
-#include <QtCore/QString>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1BasePositionerPrivate;
-
-class Q_QTQUICK1_EXPORT QDeclarative1BasePositioner : public QDeclarative1ImplicitSizeItem
-{
- Q_OBJECT
-
- Q_PROPERTY(int spacing READ spacing WRITE setSpacing NOTIFY spacingChanged)
- Q_PROPERTY(QDeclarative1Transition *move READ move WRITE setMove NOTIFY moveChanged)
- Q_PROPERTY(QDeclarative1Transition *add READ add WRITE setAdd NOTIFY addChanged)
-public:
- enum PositionerType { None = 0x0, Horizontal = 0x1, Vertical = 0x2, Both = 0x3 };
- QDeclarative1BasePositioner(PositionerType, QDeclarativeItem *parent);
- ~QDeclarative1BasePositioner();
-
- int spacing() const;
- void setSpacing(int);
-
- QDeclarative1Transition *move() const;
- void setMove(QDeclarative1Transition *);
-
- QDeclarative1Transition *add() const;
- void setAdd(QDeclarative1Transition *);
-
-protected:
- QDeclarative1BasePositioner(QDeclarative1BasePositionerPrivate &dd, PositionerType at, QDeclarativeItem *parent);
- virtual void componentComplete();
- virtual QVariant itemChange(GraphicsItemChange, const QVariant &);
- void finishApplyTransitions();
-
-Q_SIGNALS:
- void spacingChanged();
- void moveChanged();
- void addChanged();
-
-protected Q_SLOTS:
- void prePositioning();
- void graphicsWidgetGeometryChanged();
-
-protected:
- virtual void doPositioning(QSizeF *contentSize)=0;
- virtual void reportConflictingAnchors()=0;
- class PositionedItem {
- public :
- PositionedItem(QGraphicsObject *i) : item(i), isNew(false), isVisible(true) {}
- bool operator==(const PositionedItem &other) const { return other.item == item; }
- QGraphicsObject *item;
- bool isNew;
- bool isVisible;
- };
-
- QPODVector<PositionedItem,8> positionedItems;
- void positionX(int,const PositionedItem &target);
- void positionY(int,const PositionedItem &target);
-
-private:
- Q_DISABLE_COPY(QDeclarative1BasePositioner)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1BasePositioner)
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1Column : public QDeclarative1BasePositioner
-{
- Q_OBJECT
-public:
- QDeclarative1Column(QDeclarativeItem *parent=0);
-protected:
- virtual void doPositioning(QSizeF *contentSize);
- virtual void reportConflictingAnchors();
-private:
- Q_DISABLE_COPY(QDeclarative1Column)
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1Row: public QDeclarative1BasePositioner
-{
- Q_OBJECT
- Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1)
- Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1)
-public:
- QDeclarative1Row(QDeclarativeItem *parent=0);
-
- Qt::LayoutDirection layoutDirection() const;
- void setLayoutDirection (Qt::LayoutDirection);
- Qt::LayoutDirection effectiveLayoutDirection() const;
-
-Q_SIGNALS:
- Q_REVISION(1) void layoutDirectionChanged();
- Q_REVISION(1) void effectiveLayoutDirectionChanged();
-
-protected:
- virtual void doPositioning(QSizeF *contentSize);
- virtual void reportConflictingAnchors();
-private:
- Q_DISABLE_COPY(QDeclarative1Row)
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1Grid : public QDeclarative1BasePositioner
-{
- Q_OBJECT
- Q_PROPERTY(int rows READ rows WRITE setRows NOTIFY rowsChanged)
- Q_PROPERTY(int columns READ columns WRITE setColumns NOTIFY columnsChanged)
- Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged)
- Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1)
- Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1)
-public:
- QDeclarative1Grid(QDeclarativeItem *parent=0);
-
- int rows() const {return m_rows;}
- void setRows(const int rows);
-
- int columns() const {return m_columns;}
- void setColumns(const int columns);
-
- Q_ENUMS(Flow)
- enum Flow { LeftToRight, TopToBottom };
- Flow flow() const;
- void setFlow(Flow);
-
- Qt::LayoutDirection layoutDirection() const;
- void setLayoutDirection (Qt::LayoutDirection);
- Qt::LayoutDirection effectiveLayoutDirection() const;
-
-Q_SIGNALS:
- void rowsChanged();
- void columnsChanged();
- void flowChanged();
- Q_REVISION(1) void layoutDirectionChanged();
- Q_REVISION(1) void effectiveLayoutDirectionChanged();
-
-protected:
- virtual void doPositioning(QSizeF *contentSize);
- virtual void reportConflictingAnchors();
-
-private:
- int m_rows;
- int m_columns;
- Flow m_flow;
- Q_DISABLE_COPY(QDeclarative1Grid)
-};
-
-class QDeclarative1FlowPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1Flow: public QDeclarative1BasePositioner
-{
- Q_OBJECT
- Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged)
- Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged REVISION 1)
- Q_PROPERTY(Qt::LayoutDirection effectiveLayoutDirection READ effectiveLayoutDirection NOTIFY effectiveLayoutDirectionChanged REVISION 1)
-public:
- QDeclarative1Flow(QDeclarativeItem *parent=0);
-
- Q_ENUMS(Flow)
- enum Flow { LeftToRight, TopToBottom };
- Flow flow() const;
- void setFlow(Flow);
-
- Qt::LayoutDirection layoutDirection() const;
- void setLayoutDirection (Qt::LayoutDirection);
- Qt::LayoutDirection effectiveLayoutDirection() const;
-Q_SIGNALS:
- void flowChanged();
- Q_REVISION(1) void layoutDirectionChanged();
- Q_REVISION(1) void effectiveLayoutDirectionChanged();
-
-protected:
- virtual void doPositioning(QSizeF *contentSize);
- virtual void reportConflictingAnchors();
-protected:
- QDeclarative1Flow(QDeclarative1FlowPrivate &dd, QDeclarativeItem *parent);
-private:
- Q_DISABLE_COPY(QDeclarative1Flow)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1Flow)
-};
-
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Column)
-QML_DECLARE_TYPE(QDeclarative1Row)
-QML_DECLARE_TYPE(QDeclarative1Grid)
-QML_DECLARE_TYPE(QDeclarative1Flow)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativepositioners_p_p.h b/src/qtquick1/graphicsitems/qdeclarativepositioners_p_p.h
deleted file mode 100644
index 8d6e4b4e69..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativepositioners_p_p.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVELAYOUTS_P_H
-#define QDECLARATIVELAYOUTS_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativepositioners_p.h"
-
-#include "private/qdeclarativeimplicitsizeitem_p_p.h"
-
-#include <QtQuick1/private/qdeclarativestate_p.h>
-#include <QtQuick1/private/qdeclarativetransitionmanager_p_p.h>
-#include <QtQuick1/private/qdeclarativestateoperations_p.h>
-
-#include <QtCore/QObject>
-#include <QtCore/QString>
-#include <QtCore/QTimer>
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1BasePositionerPrivate : public QDeclarative1ImplicitSizeItemPrivate, public QDeclarativeItemChangeListener
-{
- Q_DECLARE_PUBLIC(QDeclarative1BasePositioner)
-
-public:
- QDeclarative1BasePositionerPrivate()
- : spacing(0), type(QDeclarative1BasePositioner::None)
- , moveTransition(0), addTransition(0), queuedPositioning(false)
- , doingPositioning(false), anchorConflict(false), layoutDirection(Qt::LeftToRight)
- {
- }
-
- void init(QDeclarative1BasePositioner::PositionerType at)
- {
- type = at;
- }
-
- int spacing;
-
- QDeclarative1BasePositioner::PositionerType type;
- QDeclarative1Transition *moveTransition;
- QDeclarative1Transition *addTransition;
- QDeclarative1StateOperation::ActionList addActions;
- QDeclarative1StateOperation::ActionList moveActions;
- QDeclarative1TransitionManager addTransitionManager;
- QDeclarative1TransitionManager moveTransitionManager;
-
- void watchChanges(QGraphicsObject *other);
- void unwatchChanges(QGraphicsObject* other);
- bool queuedPositioning : 1;
- bool doingPositioning : 1;
- bool anchorConflict : 1;
-
- Qt::LayoutDirection layoutDirection;
-
-
- void schedulePositioning()
- {
- Q_Q(QDeclarative1BasePositioner);
- if(!queuedPositioning){
- QTimer::singleShot(0,q,SLOT(prePositioning()));
- queuedPositioning = true;
- }
- }
-
- void mirrorChange() {
- Q_Q(QDeclarative1BasePositioner);
- if (type != QDeclarative1BasePositioner::Vertical)
- q->prePositioning();
- }
- bool isLeftToRight() const {
- if (type == QDeclarative1BasePositioner::Vertical)
- return true;
- else
- return effectiveLayoutMirror ? layoutDirection == Qt::RightToLeft : layoutDirection == Qt::LeftToRight;
- }
-
- virtual void itemSiblingOrderChanged(QDeclarativeItem* other)
- {
- Q_UNUSED(other);
- //Delay is due to many children often being reordered at once
- //And we only want to reposition them all once
- schedulePositioning();
- }
-
- void itemGeometryChanged(QDeclarativeItem *, const QRectF &newGeometry, const QRectF &oldGeometry)
- {
- Q_Q(QDeclarative1BasePositioner);
- if (newGeometry.size() != oldGeometry.size())
- q->prePositioning();
- }
-
- virtual void itemVisibilityChanged(QDeclarativeItem *)
- {
- schedulePositioning();
- }
- virtual void itemOpacityChanged(QDeclarativeItem *)
- {
- Q_Q(QDeclarative1BasePositioner);
- q->prePositioning();
- }
-
- void itemDestroyed(QDeclarativeItem *item)
- {
- Q_Q(QDeclarative1BasePositioner);
- q->positionedItems.removeOne(QDeclarative1BasePositioner::PositionedItem(item));
- }
-
- static Qt::LayoutDirection getLayoutDirection(const QDeclarative1BasePositioner *positioner)
- {
- return positioner->d_func()->layoutDirection;
- }
-
- static Qt::LayoutDirection getEffectiveLayoutDirection(const QDeclarative1BasePositioner *positioner)
- {
- if (positioner->d_func()->effectiveLayoutMirror)
- return positioner->d_func()->layoutDirection == Qt::RightToLeft ? Qt::LeftToRight : Qt::RightToLeft;
- else
- return positioner->d_func()->layoutDirection;
- }
-};
-
-QT_END_NAMESPACE
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativerectangle.cpp b/src/qtquick1/graphicsitems/qdeclarativerectangle.cpp
deleted file mode 100644
index c4e7c67977..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativerectangle.cpp
+++ /dev/null
@@ -1,597 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativerectangle_p.h"
-#include "QtQuick1/private/qdeclarativerectangle_p_p.h"
-
-#include <QPainter>
-#include <QStringBuilder>
-#include <QtCore/qmath.h>
-#include <QtWidgets/qdrawutil.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \internal
- \class QDeclarative1Pen
- \brief The QDeclarative1Pen class provides a pen used for drawing rectangle borders on a QDeclarative1View.
-
- By default, the pen is invalid and nothing is drawn. You must either set a color (then the default
- width is 1) or a width (then the default color is black).
-
- A width of 1 indicates is a single-pixel line on the border of the item being painted.
-
- Example:
- \qml
- Rectangle {
- border.width: 2
- border.color: "red"
- }
- \endqml
-*/
-
-void QDeclarative1Pen::setColor(const QColor &c)
-{
- _color = c;
- _valid = (_color.alpha() && _width >= 1) ? true : false;
- emit penChanged();
-}
-
-void QDeclarative1Pen::setWidth(int w)
-{
- if (_width == w && _valid)
- return;
-
- _width = w;
- _valid = (_color.alpha() && _width >= 1) ? true : false;
- emit penChanged();
-}
-
-
-/*!
- \qmlclass GradientStop QDeclarative1GradientStop
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
- \since QtQuick 1.0
- \brief The GradientStop item defines the color at a position in a Gradient.
-
- \sa Gradient
-*/
-
-/*!
- \qmlproperty real QtQuick1::GradientStop::position
- \qmlproperty color QtQuick1::GradientStop::color
-
- The position and color properties describe the color used at a given
- position in a gradient, as represented by a gradient stop.
-
- The default position is 0.0; the default color is black.
-
- \sa Gradient
-*/
-
-void QDeclarative1GradientStop::updateGradient()
-{
- if (QDeclarative1Gradient *grad = qobject_cast<QDeclarative1Gradient*>(parent()))
- grad->doUpdate();
-}
-
-/*!
- \qmlclass Gradient QDeclarative1Gradient
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
- \since QtQuick 1.0
- \brief The Gradient item defines a gradient fill.
-
- A gradient is defined by two or more colors, which will be blended seamlessly.
-
- The colors are specified as a set of GradientStop child items, each of
- which defines a position on the gradient from 0.0 to 1.0 and a color.
- The position of each GradientStop is defined by setting its
- \l{GradientStop::}{position} property; its color is defined using its
- \l{GradientStop::}{color} property.
-
- A gradient without any gradient stops is rendered as a solid white fill.
-
- Note that this item is not a visual representation of a gradient. To display a
- gradient, use a visual element (like \l Rectangle) which supports the use
- of gradients.
-
- \section1 Example Usage
-
- \div {class="float-right"}
- \inlineimage qml-gradient.png
- \enddiv
-
- The following example declares a \l Rectangle item with a gradient starting
- with red, blending to yellow at one third of the height of the rectangle,
- and ending with green:
-
- \snippet doc/src/snippets/qtquick1/gradient.qml code
-
- \clearfloat
- \section1 Performance and Limitations
-
- Calculating gradients can be computationally expensive compared to the use
- of solid color fills or images. Consider using gradients for static items
- in a user interface.
-
- In Qt 4.7, only vertical, linear gradients can be applied to items. If you
- need to apply different orientations of gradients, a combination of rotation
- and clipping will need to be applied to the relevant items. This can
- introduce additional performance requirements for your application.
-
- The use of animations involving gradient stops may not give the desired
- result. An alternative way to animate gradients is to use pre-generated
- images or SVG drawings containing gradients.
-
- \sa GradientStop
-*/
-
-/*!
- \qmlproperty list<GradientStop> QtQuick1::Gradient::stops
- \default
-
- This property holds the gradient stops describing the gradient.
-
- By default, this property contains an empty list.
-
- To set the gradient stops, define them as children of the Gradient element.
-*/
-
-const QGradient *QDeclarative1Gradient::gradient() const
-{
- if (!m_gradient && !m_stops.isEmpty()) {
- m_gradient = new QLinearGradient(0,0,0,1.0);
- for (int i = 0; i < m_stops.count(); ++i) {
- const QDeclarative1GradientStop *stop = m_stops.at(i);
- m_gradient->setCoordinateMode(QGradient::ObjectBoundingMode);
- m_gradient->setColorAt(stop->position(), stop->color());
- }
- }
-
- return m_gradient;
-}
-
-void QDeclarative1Gradient::doUpdate()
-{
- delete m_gradient;
- m_gradient = 0;
- emit updated();
-}
-
-
-/*!
- \qmlclass Rectangle QDeclarative1Rectangle
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
- \since QtQuick 1.0
- \brief The Rectangle item provides a filled rectangle with an optional border.
- \inherits Item
-
- Rectangle items are used to fill areas with solid color or gradients, and are
- often used to hold other items.
-
- \section1 Appearance
-
- Each Rectangle item is painted using either a solid fill color, specified using
- the \l color property, or a gradient, defined using a Gradient element and set
- using the \l gradient property. If both a color and a gradient are specified,
- the gradient is used.
-
- You can add an optional border to a rectangle with its own color and thickness
- by settting the \l border.color and \l border.width properties.
-
- You can also create rounded rectangles using the \l radius property. Since this
- introduces curved edges to the corners of a rectangle, it may be appropriate to
- set the \l smooth property to improve its appearance.
-
- \section1 Example Usage
-
- \div {class="float-right"}
- \inlineimage declarative-rect.png
- \enddiv
-
- The following example shows the effects of some of the common properties on a
- Rectangle item, which in this case is used to create a square:
-
- \snippet doc/src/snippets/qtquick1/rectangle/rectangle.qml document
-
- \clearfloat
- \section1 Performance
-
- Using the \l smooth property improves the appearance of a rounded rectangle at
- the cost of rendering performance. You should consider unsetting this property
- for rectangles in motion, and only set it when they are stationary.
-
- \sa Image
-*/
-
-int QDeclarative1RectanglePrivate::doUpdateSlotIdx = -1;
-
-QDeclarative1Rectangle::QDeclarative1Rectangle(QDeclarativeItem *parent)
- : QDeclarativeItem(*(new QDeclarative1RectanglePrivate), parent)
-{
-}
-
-void QDeclarative1Rectangle::doUpdate()
-{
- Q_D(QDeclarative1Rectangle);
- d->rectImage = QPixmap();
- const int pw = d->pen && d->pen->isValid() ? d->pen->width() : 0;
- d->setPaintMargin((pw+1)/2);
- update();
-}
-
-/*!
- \qmlproperty int QtQuick1::Rectangle::border.width
- \qmlproperty color QtQuick1::Rectangle::border.color
-
- The width and color used to draw the border of the rectangle.
-
- A width of 1 creates a thin line. For no line, use a width of 0 or a transparent color.
-
- \note The width of the rectangle's border does not affect the geometry of the
- rectangle itself or its position relative to other items if anchors are used.
-
- If \c border.width is an odd number, the rectangle is painted at a half-pixel offset to retain
- border smoothness. Also, the border is rendered evenly on either side of the
- rectangle's boundaries, and the spare pixel is rendered to the right and below the
- rectangle (as documented for QRect rendering). This can cause unintended effects if
- \c border.width is 1 and the rectangle is \l{Item::clip}{clipped} by a parent item:
-
- \div {class="float-right"}
- \inlineimage rect-border-width.png
- \enddiv
-
- \snippet doc/src/snippets/qtquick1/rectangle/rect-border-width.qml 0
-
- \clearfloat
- Here, the innermost rectangle's border is clipped on the bottom and right edges by its
- parent. To avoid this, the border width can be set to two instead of one.
-*/
-QDeclarative1Pen *QDeclarative1Rectangle::border()
-{
- Q_D(QDeclarative1Rectangle);
- return d->getPen();
-}
-
-/*!
- \qmlproperty Gradient QtQuick1::Rectangle::gradient
-
- The gradient to use to fill the rectangle.
-
- This property allows for the construction of simple vertical gradients.
- Other gradients may by formed by adding rotation to the rectangle.
-
- \div {class="float-left"}
- \inlineimage declarative-rect_gradient.png
- \enddiv
-
- \snippet doc/src/snippets/qtquick1/rectangle/rectangle-gradient.qml rectangles
- \clearfloat
-
- If both a gradient and a color are specified, the gradient will be used.
-
- \sa Gradient, color
-*/
-QDeclarative1Gradient *QDeclarative1Rectangle::gradient() const
-{
- Q_D(const QDeclarative1Rectangle);
- return d->gradient;
-}
-
-void QDeclarative1Rectangle::setGradient(QDeclarative1Gradient *gradient)
-{
- Q_D(QDeclarative1Rectangle);
- if (d->gradient == gradient)
- return;
- static int updatedSignalIdx = -1;
- if (updatedSignalIdx < 0)
- updatedSignalIdx = QDeclarative1Gradient::staticMetaObject.indexOfSignal("updated()");
- if (d->doUpdateSlotIdx < 0)
- d->doUpdateSlotIdx = QDeclarative1Rectangle::staticMetaObject.indexOfSlot("doUpdate()");
- if (d->gradient)
- QMetaObject::disconnect(d->gradient, updatedSignalIdx, this, d->doUpdateSlotIdx);
- d->gradient = gradient;
- if (d->gradient)
- QMetaObject::connect(d->gradient, updatedSignalIdx, this, d->doUpdateSlotIdx);
- update();
-}
-
-
-/*!
- \qmlproperty real QtQuick1::Rectangle::radius
- This property holds the corner radius used to draw a rounded rectangle.
-
- If radius is non-zero, the rectangle will be painted as a rounded rectangle, otherwise it will be
- painted as a normal rectangle. The same radius is used by all 4 corners; there is currently
- no way to specify different radii for different corners.
-*/
-qreal QDeclarative1Rectangle::radius() const
-{
- Q_D(const QDeclarative1Rectangle);
- return d->radius;
-}
-
-void QDeclarative1Rectangle::setRadius(qreal radius)
-{
- Q_D(QDeclarative1Rectangle);
- if (d->radius == radius)
- return;
-
- d->radius = radius;
- d->rectImage = QPixmap();
- update();
- emit radiusChanged();
-}
-
-/*!
- \qmlproperty color QtQuick1::Rectangle::color
- This property holds the color used to fill the rectangle.
-
- The default color is white.
-
- \div {class="float-right"}
- \inlineimage rect-color.png
- \enddiv
-
- The following example shows rectangles with colors specified
- using hexadecimal and named color notation:
-
- \snippet doc/src/snippets/qtquick1/rectangle/rectangle-colors.qml rectangles
-
- \clearfloat
- If both a gradient and a color are specified, the gradient will be used.
-
- \sa gradient
-*/
-QColor QDeclarative1Rectangle::color() const
-{
- Q_D(const QDeclarative1Rectangle);
- return d->color;
-}
-
-void QDeclarative1Rectangle::setColor(const QColor &c)
-{
- Q_D(QDeclarative1Rectangle);
- if (d->color == c)
- return;
-
- d->color = c;
- d->rectImage = QPixmap();
- update();
- emit colorChanged();
-}
-
-void QDeclarative1Rectangle::generateRoundedRect()
-{
- Q_D(QDeclarative1Rectangle);
- if (d->rectImage.isNull()) {
- const int pw = d->pen && d->pen->isValid() ? d->pen->width() : 0;
- const int radius = qCeil(d->radius); //ensure odd numbered width/height so we get 1-pixel center
-
- QString key = QLatin1String("q_") % QString::number(pw) % d->color.name() % QString::number(d->color.alpha(), 16) % QLatin1Char('_') % QString::number(radius);
- if (d->pen && d->pen->isValid())
- key += d->pen->color().name() % QString::number(d->pen->color().alpha(), 16);
-
- if (!QPixmapCache::find(key, &d->rectImage)) {
- d->rectImage = QPixmap(radius*2 + 3 + pw*2, radius*2 + 3 + pw*2);
- d->rectImage.fill(Qt::transparent);
- QPainter p(&(d->rectImage));
- p.setRenderHint(QPainter::Antialiasing);
- if (d->pen && d->pen->isValid()) {
- QPen pn(QColor(d->pen->color()), d->pen->width());
- p.setPen(pn);
- } else {
- p.setPen(Qt::NoPen);
- }
- p.setBrush(d->color);
- if (pw%2)
- p.drawRoundedRect(QRectF(qreal(pw)/2+1, qreal(pw)/2+1, d->rectImage.width()-(pw+1), d->rectImage.height()-(pw+1)), d->radius, d->radius);
- else
- p.drawRoundedRect(QRectF(qreal(pw)/2, qreal(pw)/2, d->rectImage.width()-pw, d->rectImage.height()-pw), d->radius, d->radius);
-
- // end painting before inserting pixmap
- // to pixmap cache to avoid a deep copy
- p.end();
- QPixmapCache::insert(key, d->rectImage);
- }
- }
-}
-
-void QDeclarative1Rectangle::generateBorderedRect()
-{
- Q_D(QDeclarative1Rectangle);
- if (d->rectImage.isNull()) {
- const int pw = d->pen && d->pen->isValid() ? d->pen->width() : 0;
-
- QString key = QLatin1String("q_") % QString::number(pw) % d->color.name() % QString::number(d->color.alpha(), 16);
- if (d->pen && d->pen->isValid())
- key += d->pen->color().name() % QString::number(d->pen->color().alpha(), 16);
-
- if (!QPixmapCache::find(key, &d->rectImage)) {
- // Adding 5 here makes qDrawBorderPixmap() paint correctly with smooth: true
- // See QTBUG-7999 and QTBUG-10765 for more details.
- d->rectImage = QPixmap(pw*2 + 5, pw*2 + 5);
- d->rectImage.fill(Qt::transparent);
- QPainter p(&(d->rectImage));
- p.setRenderHint(QPainter::Antialiasing);
- if (d->pen && d->pen->isValid()) {
- QPen pn(QColor(d->pen->color()), d->pen->width());
- pn.setJoinStyle(Qt::MiterJoin);
- p.setPen(pn);
- } else {
- p.setPen(Qt::NoPen);
- }
- p.setBrush(d->color);
- if (pw%2)
- p.drawRect(QRectF(qreal(pw)/2+1, qreal(pw)/2+1, d->rectImage.width()-(pw+1), d->rectImage.height()-(pw+1)));
- else
- p.drawRect(QRectF(qreal(pw)/2, qreal(pw)/2, d->rectImage.width()-pw, d->rectImage.height()-pw));
-
- // end painting before inserting pixmap
- // to pixmap cache to avoid a deep copy
- p.end();
- QPixmapCache::insert(key, d->rectImage);
- }
- }
-}
-
-void QDeclarative1Rectangle::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
-{
- Q_D(QDeclarative1Rectangle);
- if (width() <= 0 || height() <= 0)
- return;
- if (d->radius > 0 || (d->pen && d->pen->isValid())
- || (d->gradient && d->gradient->gradient()) ) {
- drawRect(*p);
- }
- else {
- bool oldAA = p->testRenderHint(QPainter::Antialiasing);
- if (d->smooth)
- p->setRenderHints(QPainter::Antialiasing, true);
- p->fillRect(QRectF(0, 0, width(), height()), d->color);
- if (d->smooth)
- p->setRenderHint(QPainter::Antialiasing, oldAA);
- }
-}
-
-void QDeclarative1Rectangle::drawRect(QPainter &p)
-{
- Q_D(QDeclarative1Rectangle);
- if ((d->gradient && d->gradient->gradient())
- || d->radius > width()/2 || d->radius > height()/2
- || width() < 3 || height() < 3) {
- // XXX This path is still slower than the image path
- // Image path won't work for gradients or invalid radius though
- bool oldAA = p.testRenderHint(QPainter::Antialiasing);
- if (d->smooth)
- p.setRenderHint(QPainter::Antialiasing);
- if (d->pen && d->pen->isValid()) {
- QPen pn(QColor(d->pen->color()), d->pen->width());
- pn.setJoinStyle(Qt::MiterJoin);
- p.setPen(pn);
- } else {
- p.setPen(Qt::NoPen);
- }
- if (d->gradient && d->gradient->gradient())
- p.setBrush(*d->gradient->gradient());
- else
- p.setBrush(d->color);
- const int pw = d->pen && d->pen->isValid() ? d->pen->width() : 0;
- QRectF rect;
- if (pw%2)
- rect = QRectF(0.5, 0.5, width()-1, height()-1);
- else
- rect = QRectF(0, 0, width(), height());
- qreal radius = d->radius;
- if (radius > width()/2 || radius > height()/2)
- radius = qMin(width()/2, height()/2);
- if (radius > 0.)
- p.drawRoundedRect(rect, radius, radius);
- else
- p.drawRect(rect);
- if (d->smooth)
- p.setRenderHint(QPainter::Antialiasing, oldAA);
- } else {
- bool oldAA = p.testRenderHint(QPainter::Antialiasing);
- bool oldSmooth = p.testRenderHint(QPainter::SmoothPixmapTransform);
- if (d->smooth)
- p.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth);
-
- const int pw = d->pen && d->pen->isValid() ? (d->pen->width()+1)/2*2 : 0;
-
- if (d->radius > 0)
- generateRoundedRect();
- else
- generateBorderedRect();
-
- int xOffset = (d->rectImage.width()-1)/2;
- int yOffset = (d->rectImage.height()-1)/2;
- Q_ASSERT(d->rectImage.width() == 2*xOffset + 1);
- Q_ASSERT(d->rectImage.height() == 2*yOffset + 1);
-
- // check whether we've eliminated the center completely
- if (2*xOffset > width()+pw)
- xOffset = (width()+pw)/2;
- if (2*yOffset > height()+pw)
- yOffset = (height()+pw)/2;
-
- QMargins margins(xOffset, yOffset, xOffset, yOffset);
- QTileRules rules(Qt::StretchTile, Qt::StretchTile);
- //NOTE: even though our item may have qreal-based width and height, qDrawBorderPixmap only supports QRects
- qDrawBorderPixmap(&p, QRect(-pw/2, -pw/2, width()+pw, height()+pw), margins, d->rectImage, d->rectImage.rect(), margins, rules);
-
- if (d->smooth) {
- p.setRenderHint(QPainter::Antialiasing, oldAA);
- p.setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth);
- }
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::Rectangle::smooth
-
- Set this property if you want the item to be smoothly scaled or
- transformed. Smooth filtering gives better visual quality, but is slower. If
- the item is displayed at its natural size, this property has no visual or
- performance effect.
-
- \note Generally scaling artifacts are only visible if the item is stationary on
- the screen. A common pattern when animating an item is to disable smooth
- filtering at the beginning of the animation and reenable it at the conclusion.
-
- \image rect-smooth.png
- On this image, smooth is turned off on the top half and on on the bottom half.
-*/
-
-QRectF QDeclarative1Rectangle::boundingRect() const
-{
- Q_D(const QDeclarative1Rectangle);
- return QRectF(-d->paintmargin, -d->paintmargin, d->width()+d->paintmargin*2, d->height()+d->paintmargin*2);
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativerectangle_p.h b/src/qtquick1/graphicsitems/qdeclarativerectangle_p.h
deleted file mode 100644
index 00e8a06664..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativerectangle_p.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVERECT_H
-#define QDECLARATIVERECT_H
-
-#include "qdeclarativeitem.h"
-
-#include <QtGui/qbrush.h>
-
-#include <QtDeclarative/private/qdeclarativeglobal_p.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class Q_QTQUICK1_EXPORT QDeclarative1Pen : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(int width READ width WRITE setWidth NOTIFY penChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY penChanged)
-public:
- QDeclarative1Pen(QObject *parent=0)
- : QObject(parent), _width(1), _color("#000000"), _valid(false)
- {}
-
- int width() const { return _width; }
- void setWidth(int w);
-
- QColor color() const { return _color; }
- void setColor(const QColor &c);
-
- bool isValid() { return _valid; }
-
-Q_SIGNALS:
- void penChanged();
-
-private:
- int _width;
- QColor _color;
- bool _valid;
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1GradientStop : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal position READ position WRITE setPosition)
- Q_PROPERTY(QColor color READ color WRITE setColor)
-
-public:
- QDeclarative1GradientStop(QObject *parent=0) : QObject(parent) {}
-
- qreal position() const { return m_position; }
- void setPosition(qreal position) { m_position = position; updateGradient(); }
-
- QColor color() const { return m_color; }
- void setColor(const QColor &color) { m_color = color; updateGradient(); }
-
-private:
- void updateGradient();
-
-private:
- qreal m_position;
- QColor m_color;
-};
-
-class Q_AUTOTEST_EXPORT QDeclarative1Gradient : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(QDeclarativeListProperty<QDeclarative1GradientStop> stops READ stops)
- Q_CLASSINFO("DefaultProperty", "stops")
-
-public:
- QDeclarative1Gradient(QObject *parent=0) : QObject(parent), m_gradient(0) {}
- ~QDeclarative1Gradient() { delete m_gradient; }
-
- QDeclarativeListProperty<QDeclarative1GradientStop> stops() { return QDeclarativeListProperty<QDeclarative1GradientStop>(this, m_stops); }
-
- const QGradient *gradient() const;
-
-Q_SIGNALS:
- void updated();
-
-private:
- void doUpdate();
-
-private:
- QList<QDeclarative1GradientStop *> m_stops;
- mutable QGradient *m_gradient;
- friend class QDeclarative1GradientStop;
-};
-
-class QDeclarative1RectanglePrivate;
-class Q_QTQUICK1_EXPORT QDeclarative1Rectangle : public QDeclarativeItem
-{
- Q_OBJECT
-
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QDeclarative1Gradient *gradient READ gradient WRITE setGradient)
- Q_PROPERTY(QDeclarative1Pen * border READ border CONSTANT)
- Q_PROPERTY(qreal radius READ radius WRITE setRadius NOTIFY radiusChanged)
-public:
- QDeclarative1Rectangle(QDeclarativeItem *parent=0);
-
- QColor color() const;
- void setColor(const QColor &);
-
- QDeclarative1Pen *border();
-
- QDeclarative1Gradient *gradient() const;
- void setGradient(QDeclarative1Gradient *gradient);
-
- qreal radius() const;
- void setRadius(qreal radius);
-
- QRectF boundingRect() const;
-
- void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
-
-Q_SIGNALS:
- void colorChanged();
- void radiusChanged();
-
-private Q_SLOTS:
- void doUpdate();
-
-private:
- void generateRoundedRect();
- void generateBorderedRect();
- void drawRect(QPainter &painter);
-
-private:
- Q_DISABLE_COPY(QDeclarative1Rectangle)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1Rectangle)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Pen)
-QML_DECLARE_TYPE(QDeclarative1GradientStop)
-QML_DECLARE_TYPE(QDeclarative1Gradient)
-QML_DECLARE_TYPE(QDeclarative1Rectangle)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVERECT_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativerectangle_p_p.h b/src/qtquick1/graphicsitems/qdeclarativerectangle_p_p.h
deleted file mode 100644
index 536d0336e4..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativerectangle_p_p.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVERECT_P_H
-#define QDECLARATIVERECT_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativeitem_p.h"
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1Gradient;
-class QDeclarative1Rectangle;
-class QDeclarative1RectanglePrivate : public QDeclarativeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1Rectangle)
-
-public:
- QDeclarative1RectanglePrivate() :
- color(Qt::white), gradient(0), pen(0), radius(0), paintmargin(0)
- {
- QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents;
- }
-
- ~QDeclarative1RectanglePrivate()
- {
- delete pen;
- }
-
- QColor color;
- QDeclarative1Gradient *gradient;
- QDeclarative1Pen *pen;
- qreal radius;
- qreal paintmargin;
- QPixmap rectImage;
- static int doUpdateSlotIdx;
-
- QDeclarative1Pen *getPen() {
- if (!pen) {
- Q_Q(QDeclarative1Rectangle);
- pen = new QDeclarative1Pen;
- static int penChangedSignalIdx = -1;
- if (penChangedSignalIdx < 0)
- penChangedSignalIdx = QDeclarative1Pen::staticMetaObject.indexOfSignal("penChanged()");
- if (doUpdateSlotIdx < 0)
- doUpdateSlotIdx = QDeclarative1Rectangle::staticMetaObject.indexOfSlot("doUpdate()");
- QMetaObject::connect(pen, penChangedSignalIdx, q, doUpdateSlotIdx);
- }
- return pen;
- }
-
- void setPaintMargin(qreal margin)
- {
- Q_Q(QDeclarative1Rectangle);
- if (margin == paintmargin)
- return;
- q->prepareGeometryChange();
- paintmargin = margin;
- }
-};
-
-QT_END_NAMESPACE
-
-#endif // QDECLARATIVERECT_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativerepeater.cpp b/src/qtquick1/graphicsitems/qdeclarativerepeater.cpp
deleted file mode 100644
index 7e92d579e9..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativerepeater.cpp
+++ /dev/null
@@ -1,450 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativerepeater_p.h"
-#include "QtQuick1/private/qdeclarativerepeater_p_p.h"
-
-#include "QtQuick1/private/qdeclarativevisualitemmodel_p.h"
-#include <QtDeclarative/private/qdeclarativeglobal_p.h>
-#include <QtQuick1/private/qdeclarativelistaccessor_p.h>
-
-QT_BEGIN_NAMESPACE
-
-
-QDeclarative1RepeaterPrivate::QDeclarative1RepeaterPrivate()
-: model(0), ownModel(false)
-{
-}
-
-QDeclarative1RepeaterPrivate::~QDeclarative1RepeaterPrivate()
-{
- if (ownModel)
- delete model;
-}
-
-/*!
- \qmlclass Repeater QDeclarative1Repeater
- \inqmlmodule QtQuick 1
- \ingroup qml-utility-elements
- \since QtQuick 1.0
- \inherits Item
-
- \brief The Repeater element allows you to repeat an Item-based component using a model.
-
- The Repeater element is used to create a large number of
- similar items. Like other view elements, a Repeater has a \l model and a \l delegate:
- for each entry in the model, the delegate is instantiated
- in a context seeded with data from the model. A Repeater item is usually
- enclosed in a positioner element such as \l Row or \l Column to visually
- position the multiple delegate items created by the Repeater.
-
- The following Repeater creates three instances of a \l Rectangle item within
- a \l Row:
-
- \snippet doc/src/snippets/qtquick1/repeaters/repeater.qml import
- \codeline
- \snippet doc/src/snippets/qtquick1/repeaters/repeater.qml simple
-
- \image repeater-simple.png
-
- A Repeater's \l model can be any of the supported \l {qmlmodels}{data models}.
- Additionally, like delegates for other views, a Repeater delegate can access
- its index within the repeater, as well as the model data relevant to the
- delegate. See the \l delegate property documentation for details.
-
- Items instantiated by the Repeater are inserted, in order, as
- children of the Repeater's parent. The insertion starts immediately after
- the repeater's position in its parent stacking list. This allows
- a Repeater to be used inside a layout. For example, the following Repeater's
- items are stacked between a red rectangle and a blue rectangle:
-
- \snippet doc/src/snippets/qtquick1/repeaters/repeater.qml layout
-
- \image repeater.png
-
-
- \note A Repeater item owns all items it instantiates. Removing or dynamically destroying
- an item created by a Repeater results in unpredictable behavior.
-
-
- \section2 Considerations when using Repeater
-
- The Repeater element creates all of its delegate items when the repeater is first
- created. This can be inefficient if there are a large number of delegate items and
- not all of the items are required to be visible at the same time. If this is the case,
- consider using other view elements like ListView (which only creates delegate items
- when they are scrolled into view) or use the \l {Dynamic Object Creation} methods to
- create items as they are required.
-
- Also, note that Repeater is \l {Item}-based, and can only repeat \l {Item}-derived objects.
- For example, it cannot be used to repeat QtObjects:
- \badcode
- Item {
- //XXX does not work! Can't repeat QtObject as it doesn't derive from Item.
- Repeater {
- model: 10
- QtObject {}
- }
- }
- \endcode
- */
-
-/*!
- \qmlsignal QtQuick1::Repeater::onItemAdded(int index, Item item)
- \since Quick 1.1
-
- This handler is called when an item is added to the repeater. The \a index
- parameter holds the index at which the item has been inserted within the
- repeater, and the \a item parameter holds the \l Item that has been added.
-*/
-
-/*!
- \qmlsignal QtQuick1::Repeater::onItemRemoved(int index, Item item)
- \since Quick 1.1
-
- This handler is called when an item is removed from the repeater. The \a index
- parameter holds the index at which the item was removed from the repeater,
- and the \a item parameter holds the \l Item that was removed.
-
- Do not keep a reference to \a item if it was created by this repeater, as
- in these cases it will be deleted shortly after the handler is called.
-*/
-
-QDeclarative1Repeater::QDeclarative1Repeater(QDeclarativeItem *parent)
- : QDeclarativeItem(*(new QDeclarative1RepeaterPrivate), parent)
-{
-}
-
-QDeclarative1Repeater::~QDeclarative1Repeater()
-{
-}
-
-/*!
- \qmlproperty any QtQuick1::Repeater::model
-
- The model providing data for the repeater.
-
- This property can be set to any of the supported \l {qmlmodels}{data models}:
-
- \list
- \o A number that indicates the number of delegates to be created by the repeater
- \o A model (e.g. a ListModel item, or a QAbstractItemModel subclass)
- \o A string list
- \o An object list
- \endlist
-
- The type of model affects the properties that are exposed to the \l delegate.
-
- \sa {qmlmodels}{Data Models}
-*/
-QVariant QDeclarative1Repeater::model() const
-{
- Q_D(const QDeclarative1Repeater);
- return d->dataSource;
-}
-
-void QDeclarative1Repeater::setModel(const QVariant &model)
-{
- Q_D(QDeclarative1Repeater);
- if (d->dataSource == model)
- return;
-
- clear();
- if (d->model) {
- disconnect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
- disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
- disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
- disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- /*
- disconnect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
- disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
- */
- }
- d->dataSource = model;
- QObject *object = qvariant_cast<QObject*>(model);
- QDeclarative1VisualModel *vim = 0;
- if (object && (vim = qobject_cast<QDeclarative1VisualModel *>(object))) {
- if (d->ownModel) {
- delete d->model;
- d->ownModel = false;
- }
- d->model = vim;
- } else {
- if (!d->ownModel) {
- d->model = new QDeclarative1VisualDataModel(qmlContext(this), this);
- d->ownModel = true;
- }
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- dataModel->setModel(model);
- }
- if (d->model) {
- connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int)));
- connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int)));
- connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int)));
- connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset()));
- /*
- connect(d->model, SIGNAL(createdItem(int,QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*)));
- connect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
- */
- regenerate();
- }
- emit modelChanged();
- emit countChanged();
-}
-
-/*!
- \qmlproperty Component QtQuick1::Repeater::delegate
- \default
-
- The delegate provides a template defining each item instantiated by the repeater.
-
- Delegates are exposed to a read-only \c index property that indicates the index
- of the delegate within the repeater. For example, the following \l Text delegate
- displays the index of each repeated item:
-
- \table
- \row
- \o \snippet doc/src/snippets/qtquick1/repeaters/repeater.qml index
- \o \image repeater-index.png
- \endtable
-
- If the \l model is a \l{QStringList-based model}{string list} or
- \l{QObjectList-based model}{object list}, the delegate is also exposed to
- a read-only \c modelData property that holds the string or object data. For
- example:
-
- \table
- \row
- \o \snippet doc/src/snippets/qtquick1/repeaters/repeater.qml modeldata
- \o \image repeater-modeldata.png
- \endtable
-
- If the \l model is a model object (such as a \l ListModel) the delegate
- can access all model roles as named properties, in the same way that delegates
- do for view classes like ListView.
-
- \sa {QML Data Models}
- */
-QDeclarativeComponent *QDeclarative1Repeater::delegate() const
-{
- Q_D(const QDeclarative1Repeater);
- if (d->model) {
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- return dataModel->delegate();
- }
-
- return 0;
-}
-
-void QDeclarative1Repeater::setDelegate(QDeclarativeComponent *delegate)
-{
- Q_D(QDeclarative1Repeater);
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model))
- if (delegate == dataModel->delegate())
- return;
-
- if (!d->ownModel) {
- d->model = new QDeclarative1VisualDataModel(qmlContext(this));
- d->ownModel = true;
- }
- if (QDeclarative1VisualDataModel *dataModel = qobject_cast<QDeclarative1VisualDataModel*>(d->model)) {
- dataModel->setDelegate(delegate);
- regenerate();
- emit delegateChanged();
- }
-}
-
-/*!
- \qmlproperty int QtQuick1::Repeater::count
-
- This property holds the number of items in the repeater.
-*/
-int QDeclarative1Repeater::count() const
-{
- Q_D(const QDeclarative1Repeater);
- if (d->model)
- return d->model->count();
- return 0;
-}
-
-/*!
- \qmlmethod Item QtQuick1::Repeater::itemAt(index)
- \since Quick 1.1
-
- Returns the \l Item that has been created at the given \a index, or \c null
- if no item exists at \a index.
-*/
-QDeclarativeItem *QDeclarative1Repeater::itemAt(int index) const
-{
- Q_D(const QDeclarative1Repeater);
- if (index >= 0 && index < d->deletables.count())
- return d->deletables[index];
- return 0;
-
-}
-
-void QDeclarative1Repeater::componentComplete()
-{
- QDeclarativeItem::componentComplete();
- regenerate();
-}
-
-QVariant QDeclarative1Repeater::itemChange(GraphicsItemChange change,
- const QVariant &value)
-{
- QVariant rv = QDeclarativeItem::itemChange(change, value);
- if (change == ItemParentHasChanged) {
- regenerate();
- }
-
- return rv;
-}
-
-void QDeclarative1Repeater::clear()
-{
- Q_D(QDeclarative1Repeater);
- bool complete = isComponentComplete();
-
- if (d->model) {
- while (d->deletables.count() > 0) {
- QDeclarativeItem *item = d->deletables.takeLast();
- if (complete)
- emit itemRemoved(d->deletables.count()-1, item);
- d->model->release(item);
- }
- }
- d->deletables.clear();
-}
-
-void QDeclarative1Repeater::regenerate()
-{
- Q_D(QDeclarative1Repeater);
- if (!isComponentComplete())
- return;
-
- clear();
-
- if (!d->model || !d->model->count() || !d->model->isValid() || !parentItem() || !isComponentComplete())
- return;
-
- for (int ii = 0; ii < count(); ++ii) {
- QDeclarativeItem *item = d->model->item(ii);
- if (item) {
- QDeclarative_setParent_noEvent(item, parentItem());
- item->setParentItem(parentItem());
- item->stackBefore(this);
- d->deletables << item;
- emit itemAdded(ii, item);
- }
- }
-}
-
-void QDeclarative1Repeater::itemsInserted(int index, int count)
-{
- Q_D(QDeclarative1Repeater);
- if (!isComponentComplete())
- return;
- for (int i = 0; i < count; ++i) {
- int modelIndex = index + i;
- QDeclarativeItem *item = d->model->item(modelIndex);
- if (item) {
- QDeclarative_setParent_noEvent(item, parentItem());
- item->setParentItem(parentItem());
- if (modelIndex < d->deletables.count())
- item->stackBefore(d->deletables.at(modelIndex));
- else
- item->stackBefore(this);
- d->deletables.insert(modelIndex, item);
- emit itemAdded(modelIndex, item);
- }
- }
- emit countChanged();
-}
-
-void QDeclarative1Repeater::itemsRemoved(int index, int count)
-{
- Q_D(QDeclarative1Repeater);
- if (!isComponentComplete() || count <= 0)
- return;
- while (count--) {
- QDeclarativeItem *item = d->deletables.takeAt(index);
- emit itemRemoved(index, item);
- if (item)
- d->model->release(item);
- else
- break;
- }
- emit countChanged();
-}
-
-void QDeclarative1Repeater::itemsMoved(int from, int to, int count)
-{
- Q_D(QDeclarative1Repeater);
- if (!isComponentComplete() || count <= 0)
- return;
- if (from + count > d->deletables.count()) {
- regenerate();
- return;
- }
- QList<QDeclarativeItem*> removed;
- int removedCount = count;
- while (removedCount--)
- removed << d->deletables.takeAt(from);
- for (int i = 0; i < count; ++i)
- d->deletables.insert(to + i, removed.at(i));
- d->deletables.last()->stackBefore(this);
- for (int i = d->model->count()-1; i > 0; --i) {
- QDeclarativeItem *item = d->deletables.at(i-1);
- item->stackBefore(d->deletables.at(i));
- }
-}
-
-void QDeclarative1Repeater::modelReset()
-{
- if (!isComponentComplete())
- return;
- regenerate();
- emit countChanged();
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativerepeater_p.h b/src/qtquick1/graphicsitems/qdeclarativerepeater_p.h
deleted file mode 100644
index 110c64d9d6..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativerepeater_p.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEREPEATER_H
-#define QDECLARATIVEREPEATER_H
-
-#include "qdeclarativeitem.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1RepeaterPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1Repeater : public QDeclarativeItem
-{
- Q_OBJECT
-
- Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged)
- Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged)
- Q_PROPERTY(int count READ count NOTIFY countChanged)
- Q_CLASSINFO("DefaultProperty", "delegate")
-
-public:
- QDeclarative1Repeater(QDeclarativeItem *parent=0);
- virtual ~QDeclarative1Repeater();
-
- QVariant model() const;
- void setModel(const QVariant &);
-
- QDeclarativeComponent *delegate() const;
- void setDelegate(QDeclarativeComponent *);
-
- int count() const;
-
- Q_INVOKABLE Q_REVISION(1) QDeclarativeItem *itemAt(int index) const;
-
-Q_SIGNALS:
- void modelChanged();
- void delegateChanged();
- void countChanged();
-
- Q_REVISION(1) void itemAdded(int index, QDeclarativeItem *item);
- Q_REVISION(1) void itemRemoved(int index, QDeclarativeItem *item);
-
-private:
- void clear();
- void regenerate();
-
-protected:
- virtual void componentComplete();
- QVariant itemChange(GraphicsItemChange change, const QVariant &value);
-
-private Q_SLOTS:
- void itemsInserted(int,int);
- void itemsRemoved(int,int);
- void itemsMoved(int,int,int);
- void modelReset();
-
-private:
- Q_DISABLE_COPY(QDeclarative1Repeater)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1Repeater)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Repeater)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEREPEATER_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativerepeater_p_p.h b/src/qtquick1/graphicsitems/qdeclarativerepeater_p_p.h
deleted file mode 100644
index dcc5a00592..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativerepeater_p_p.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEREPEATER_P_H
-#define QDECLARATIVEREPEATER_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "private/qdeclarativerepeater_p.h"
-
-#include "private/qdeclarativeitem_p.h"
-
-#include <QPointer>
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarativeContext;
-class QDeclarative1VisualModel;
-class QDeclarative1RepeaterPrivate : public QDeclarativeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1Repeater)
-
-public:
- QDeclarative1RepeaterPrivate();
- ~QDeclarative1RepeaterPrivate();
-
- QDeclarative1VisualModel *model;
- QVariant dataSource;
- bool ownModel;
-
- QList<QPointer<QDeclarativeItem> > deletables;
-};
-
-QT_END_NAMESPACE
-#endif // QDECLARATIVEREPEATER_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativescalegrid.cpp b/src/qtquick1/graphicsitems/qdeclarativescalegrid.cpp
deleted file mode 100644
index 542f6e8b08..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativescalegrid.cpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativescalegrid_p_p.h"
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QBuffer>
-#include <QDebug>
-
-QT_BEGIN_NAMESPACE
-
-
-/*!
- \internal
- \class QDeclarative1ScaleGrid
- \brief The QDeclarative1ScaleGrid class allows you to specify a 3x3 grid to use in scaling an image.
-*/
-
-QDeclarative1ScaleGrid::QDeclarative1ScaleGrid(QObject *parent) : QObject(parent), _left(0), _top(0), _right(0), _bottom(0)
-{
-}
-
-QDeclarative1ScaleGrid::~QDeclarative1ScaleGrid()
-{
-}
-
-bool QDeclarative1ScaleGrid::isNull() const
-{
- return !_left && !_top && !_right && !_bottom;
-}
-
-void QDeclarative1ScaleGrid::setLeft(int pos)
-{
- if (_left != pos) {
- _left = pos;
- emit borderChanged();
- }
-}
-
-void QDeclarative1ScaleGrid::setTop(int pos)
-{
- if (_top != pos) {
- _top = pos;
- emit borderChanged();
- }
-}
-
-void QDeclarative1ScaleGrid::setRight(int pos)
-{
- if (_right != pos) {
- _right = pos;
- emit borderChanged();
- }
-}
-
-void QDeclarative1ScaleGrid::setBottom(int pos)
-{
- if (_bottom != pos) {
- _bottom = pos;
- emit borderChanged();
- }
-}
-
-QDeclarative1GridScaledImage::QDeclarative1GridScaledImage()
-: _l(-1), _r(-1), _t(-1), _b(-1),
- _h(QDeclarative1BorderImage::Stretch), _v(QDeclarative1BorderImage::Stretch)
-{
-}
-
-QDeclarative1GridScaledImage::QDeclarative1GridScaledImage(const QDeclarative1GridScaledImage &o)
-: _l(o._l), _r(o._r), _t(o._t), _b(o._b), _h(o._h), _v(o._v), _pix(o._pix)
-{
-}
-
-QDeclarative1GridScaledImage &QDeclarative1GridScaledImage::operator=(const QDeclarative1GridScaledImage &o)
-{
- _l = o._l;
- _r = o._r;
- _t = o._t;
- _b = o._b;
- _h = o._h;
- _v = o._v;
- _pix = o._pix;
- return *this;
-}
-
-QDeclarative1GridScaledImage::QDeclarative1GridScaledImage(QIODevice *data)
-: _l(-1), _r(-1), _t(-1), _b(-1), _h(QDeclarative1BorderImage::Stretch), _v(QDeclarative1BorderImage::Stretch)
-{
- int l = -1;
- int r = -1;
- int t = -1;
- int b = -1;
- QString imgFile;
-
- QByteArray raw;
- while(raw = data->readLine(), !raw.isEmpty()) {
- QString line = QString::fromUtf8(raw.trimmed());
- if (line.isEmpty() || line.startsWith(QLatin1Char('#')))
- continue;
-
- int colonId = line.indexOf(QLatin1Char(':'));
- if (colonId <= 0)
- return;
- QStringList list;
- list.append(line.left(colonId).trimmed());
- list.append(line.mid(colonId+1).trimmed());
-
- if (list[0] == QLatin1String("border.left"))
- l = list[1].toInt();
- else if (list[0] == QLatin1String("border.right"))
- r = list[1].toInt();
- else if (list[0] == QLatin1String("border.top"))
- t = list[1].toInt();
- else if (list[0] == QLatin1String("border.bottom"))
- b = list[1].toInt();
- else if (list[0] == QLatin1String("source"))
- imgFile = list[1];
- else if (list[0] == QLatin1String("horizontalTileRule"))
- _h = stringToRule(list[1]);
- else if (list[0] == QLatin1String("verticalTileRule"))
- _v = stringToRule(list[1]);
- }
-
- if (l < 0 || r < 0 || t < 0 || b < 0 || imgFile.isEmpty())
- return;
-
- _l = l; _r = r; _t = t; _b = b;
-
- _pix = imgFile;
- if (_pix.startsWith(QLatin1Char('"')) && _pix.endsWith(QLatin1Char('"')))
- _pix = _pix.mid(1, _pix.size() - 2); // remove leading/trailing quotes.
-}
-
-QDeclarative1BorderImage::TileMode QDeclarative1GridScaledImage::stringToRule(const QString &s)
-{
- if (s == QLatin1String("Stretch"))
- return QDeclarative1BorderImage::Stretch;
- if (s == QLatin1String("Repeat"))
- return QDeclarative1BorderImage::Repeat;
- if (s == QLatin1String("Round"))
- return QDeclarative1BorderImage::Round;
-
- qWarning("QDeclarative1GridScaledImage: Invalid tile rule specified. Using Stretch.");
- return QDeclarative1BorderImage::Stretch;
-}
-
-bool QDeclarative1GridScaledImage::isValid() const
-{
- return _l >= 0;
-}
-
-int QDeclarative1GridScaledImage::gridLeft() const
-{
- return _l;
-}
-
-int QDeclarative1GridScaledImage::gridRight() const
-{
- return _r;
-}
-
-int QDeclarative1GridScaledImage::gridTop() const
-{
- return _t;
-}
-
-int QDeclarative1GridScaledImage::gridBottom() const
-{
- return _b;
-}
-
-QString QDeclarative1GridScaledImage::pixmapUrl() const
-{
- return _pix;
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativescalegrid_p_p.h b/src/qtquick1/graphicsitems/qdeclarativescalegrid_p_p.h
deleted file mode 100644
index d9df5748e0..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativescalegrid_p_p.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVESCALEGRID_H
-#define QDECLARATIVESCALEGRID_H
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QtCore/QString>
-#include <QtCore/QObject>
-
-#include <QtQuick1/private/qdeclarativeborderimage_p.h>
-#include <QtQuick1/private/qdeclarativepixmapcache_p.h>
-#include <QtDeclarative/private/qdeclarativeglobal_p.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class Q_QTQUICK1_EXPORT QDeclarative1ScaleGrid : public QObject
-{
- Q_OBJECT
- Q_ENUMS(TileRule)
-
- Q_PROPERTY(int left READ left WRITE setLeft NOTIFY borderChanged)
- Q_PROPERTY(int top READ top WRITE setTop NOTIFY borderChanged)
- Q_PROPERTY(int right READ right WRITE setRight NOTIFY borderChanged)
- Q_PROPERTY(int bottom READ bottom WRITE setBottom NOTIFY borderChanged)
-
-public:
- QDeclarative1ScaleGrid(QObject *parent=0);
- ~QDeclarative1ScaleGrid();
-
- bool isNull() const;
-
- int left() const { return _left; }
- void setLeft(int);
-
- int top() const { return _top; }
- void setTop(int);
-
- int right() const { return _right; }
- void setRight(int);
-
- int bottom() const { return _bottom; }
- void setBottom(int);
-
-Q_SIGNALS:
- void borderChanged();
-
-private:
- int _left;
- int _top;
- int _right;
- int _bottom;
-};
-
-class Q_QTQUICK1_EXPORT QDeclarative1GridScaledImage
-{
-public:
- QDeclarative1GridScaledImage();
- QDeclarative1GridScaledImage(const QDeclarative1GridScaledImage &);
- QDeclarative1GridScaledImage(QIODevice*);
- QDeclarative1GridScaledImage &operator=(const QDeclarative1GridScaledImage &);
- bool isValid() const;
- int gridLeft() const;
- int gridRight() const;
- int gridTop() const;
- int gridBottom() const;
- QDeclarative1BorderImage::TileMode horizontalTileRule() const { return _h; }
- QDeclarative1BorderImage::TileMode verticalTileRule() const { return _v; }
-
- QString pixmapUrl() const;
-
-private:
- static QDeclarative1BorderImage::TileMode stringToRule(const QString &);
-
-private:
- int _l;
- int _r;
- int _t;
- int _b;
- QDeclarative1BorderImage::TileMode _h;
- QDeclarative1BorderImage::TileMode _v;
- QString _pix;
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1ScaleGrid)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVESCALEGRID_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativetext.cpp b/src/qtquick1/graphicsitems/qdeclarativetext.cpp
deleted file mode 100644
index 490c10aac9..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetext.cpp
+++ /dev/null
@@ -1,1647 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativetext_p.h"
-#include "QtQuick1/private/qdeclarativetext_p_p.h"
-#include "QtQuick1/private/qdeclarativestyledtext_p.h"
-#include <QtDeclarative/qdeclarativeinfo.h>
-#include "QtQuick1/private/qdeclarativepixmapcache_p.h"
-
-#include <QSet>
-#include <QTextLayout>
-#include <QTextLine>
-#include <QTextDocument>
-#include <QGraphicsSceneMouseEvent>
-#include <QPainter>
-#include <QAbstractTextDocumentLayout>
-#include <QtGui/QInputPanel>
-#include <qmath.h>
-#include <limits.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled;
-
-class QTextDocumentWithImageResources_1 : public QTextDocument {
- Q_OBJECT
-
-public:
- QTextDocumentWithImageResources_1(QDeclarative1Text *parent);
- virtual ~QTextDocumentWithImageResources_1();
-
- void setText(const QString &);
- int resourcesLoading() const { return outstanding; }
-
-protected:
- QVariant loadResource(int type, const QUrl &name);
-
-private slots:
- void requestFinished();
-
-private:
- QHash<QUrl, QDeclarative1Pixmap *> m_resources;
-
- int outstanding;
- static QSet<QUrl> errors;
-};
-
-
-QTextDocumentWithImageResources_1::QTextDocumentWithImageResources_1(QDeclarative1Text *parent)
-: QTextDocument(parent), outstanding(0)
-{
-}
-
-QTextDocumentWithImageResources_1::~QTextDocumentWithImageResources_1()
-{
- if (!m_resources.isEmpty())
- qDeleteAll(m_resources);
-}
-
-QVariant QTextDocumentWithImageResources_1::loadResource(int type, const QUrl &name)
-{
- QDeclarativeContext *context = qmlContext(parent());
- QUrl url = context->resolvedUrl(name);
-
- if (type == QTextDocument::ImageResource) {
- QHash<QUrl, QDeclarative1Pixmap *>::Iterator iter = m_resources.find(url);
-
- if (iter == m_resources.end()) {
- QDeclarative1Pixmap *p = new QDeclarative1Pixmap(context->engine(), url);
- iter = m_resources.insert(name, p);
-
- if (p->isLoading()) {
- p->connectFinished(this, SLOT(requestFinished()));
- outstanding++;
- }
- }
-
- QDeclarative1Pixmap *p = *iter;
- if (p->isReady()) {
- return p->pixmap();
- } else if (p->isError()) {
- if (!errors.contains(url)) {
- errors.insert(url);
- qmlInfo(parent()) << p->error();
- }
- }
- }
-
- return QTextDocument::loadResource(type,url); // The *resolved* URL
-}
-
-void QTextDocumentWithImageResources_1::requestFinished()
-{
- outstanding--;
- if (outstanding == 0) {
- QDeclarative1Text *textItem = static_cast<QDeclarative1Text*>(parent());
- QString text = textItem->text();
-#ifndef QT_NO_TEXTHTMLPARSER
- setHtml(text);
-#else
- setPlainText(text);
-#endif
- QDeclarative1TextPrivate *d = QDeclarative1TextPrivate::get(textItem);
- d->updateLayout();
- }
-}
-
-void QTextDocumentWithImageResources_1::setText(const QString &text)
-{
- if (!m_resources.isEmpty()) {
- qDeleteAll(m_resources);
- m_resources.clear();
- outstanding = 0;
- }
-
-#ifndef QT_NO_TEXTHTMLPARSER
- setHtml(text);
-#else
- setPlainText(text);
-#endif
-}
-
-QSet<QUrl> QTextDocumentWithImageResources_1::errors;
-
-QDeclarative1TextPrivate::~QDeclarative1TextPrivate()
-{
-}
-
-DEFINE_BOOL_CONFIG_OPTION(enableImageCache, QML_ENABLE_TEXT_IMAGE_CACHE);
-
-QString QDeclarative1TextPrivate::elideChar = QString(0x2026);
-
-QDeclarative1TextPrivate::QDeclarative1TextPrivate()
-: color((QRgb)0), style(QDeclarative1Text::Normal), hAlign(QDeclarative1Text::AlignLeft),
- vAlign(QDeclarative1Text::AlignTop), elideMode(QDeclarative1Text::ElideNone),
- format(QDeclarative1Text::AutoText), wrapMode(QDeclarative1Text::NoWrap), lineHeight(1),
- lineHeightMode(QDeclarative1Text::ProportionalHeight), lineCount(1), truncated(false), maximumLineCount(INT_MAX),
- maximumLineCountValid(false), imageCacheDirty(true), updateOnComponentComplete(true), richText(false), singleline(false),
- cacheAllTextAsImage(true), internalWidthUpdate(false), requireImplicitWidth(false), hAlignImplicit(true),
- rightToLeftText(false), layoutTextElided(false), naturalWidth(0), doc(0)
-{
- cacheAllTextAsImage = enableImageCache();
- QGraphicsItemPrivate::acceptedMouseButtons = Qt::LeftButton;
- QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents;
-}
-
-qreal QDeclarative1TextPrivate::implicitWidth() const
-{
- if (!requireImplicitWidth) {
- // We don't calculate implicitWidth unless it is required.
- // We need to force a size update now to ensure implicitWidth is calculated
- QDeclarative1TextPrivate *me = const_cast<QDeclarative1TextPrivate*>(this);
- me->requireImplicitWidth = true;
- me->updateSize();
- }
- return mImplicitWidth;
-}
-
-void QDeclarative1TextPrivate::updateLayout()
-{
- Q_Q(QDeclarative1Text);
- if (!q->isComponentComplete()) {
- updateOnComponentComplete = true;
- return;
- }
-
- layoutTextElided = false;
- // Setup instance of QTextLayout for all cases other than richtext
- if (!richText) {
- layout.clearLayout();
- layout.setFont(font);
- if (format != QDeclarative1Text::StyledText) {
- QString tmp = text;
- tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
- singleline = !tmp.contains(QChar::LineSeparator);
- if (singleline && !maximumLineCountValid && elideMode != QDeclarative1Text::ElideNone && q->widthValid()) {
- QFontMetrics fm(font);
- tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width());
- if (tmp != text) {
- layoutTextElided = true;
- if (!truncated) {
- truncated = true;
- emit q->truncatedChanged();
- }
- }
- }
- layout.setText(tmp);
- } else {
- singleline = false;
- QDeclarative1StyledText::parse(text, layout);
- }
- }
-
- updateSize();
-}
-
-void QDeclarative1TextPrivate::updateSize()
-{
- Q_Q(QDeclarative1Text);
-
- if (!q->isComponentComplete()) {
- updateOnComponentComplete = true;
- return;
- }
-
- if (!requireImplicitWidth) {
- emit q->implicitWidthChanged();
- // if the implicitWidth is used, then updateSize() has already been called (recursively)
- if (requireImplicitWidth)
- return;
- }
-
- invalidateImageCache();
-
- QFontMetrics fm(font);
- if (text.isEmpty()) {
- q->setImplicitWidth(0);
- q->setImplicitHeight(fm.height());
- paintedSize = QSize(0, fm.height());
- emit q->paintedSizeChanged();
- q->update();
- return;
- }
-
- int dy = q->height();
- QSize size(0, 0);
-
- //setup instance of QTextLayout for all cases other than richtext
- if (!richText) {
- QRect textRect = setupTextLayout();
- if (layedOutTextRect.size() != textRect.size())
- q->prepareGeometryChange();
- layedOutTextRect = textRect;
- size = textRect.size();
- dy -= size.height();
- } else {
- singleline = false; // richtext can't elide or be optimized for single-line case
- ensureDoc();
- doc->setDefaultFont(font);
-
- QDeclarative1Text::HAlignment horizontalAlignment = q->effectiveHAlign();
- if (rightToLeftText) {
- if (horizontalAlignment == QDeclarative1Text::AlignLeft)
- horizontalAlignment = QDeclarative1Text::AlignRight;
- else if (horizontalAlignment == QDeclarative1Text::AlignRight)
- horizontalAlignment = QDeclarative1Text::AlignLeft;
- }
- QTextOption option;
- option.setAlignment((Qt::Alignment)int(horizontalAlignment | vAlign));
- option.setWrapMode(QTextOption::WrapMode(wrapMode));
- doc->setDefaultTextOption(option);
- if (requireImplicitWidth && q->widthValid()) {
- doc->setTextWidth(-1);
- naturalWidth = doc->idealWidth();
- }
- if (wrapMode != QDeclarative1Text::NoWrap && q->widthValid())
- doc->setTextWidth(q->width());
- else
- doc->setTextWidth(doc->idealWidth()); // ### Text does not align if width is not set (QTextDoc bug)
- dy -= (int)doc->size().height();
- QSize dsize = doc->size().toSize();
- if (dsize != layedOutTextRect.size()) {
- q->prepareGeometryChange();
- layedOutTextRect = QRect(QPoint(0,0), dsize);
- }
- size = QSize(int(doc->idealWidth()),dsize.height());
- }
- int yoff = 0;
-
- if (q->heightValid()) {
- if (vAlign == QDeclarative1Text::AlignBottom)
- yoff = dy;
- else if (vAlign == QDeclarative1Text::AlignVCenter)
- yoff = dy/2;
- }
- q->setBaselineOffset(fm.ascent() + yoff);
-
- //### need to comfirm cost of always setting these for richText
- internalWidthUpdate = true;
- if (!q->widthValid())
- q->setImplicitWidth(size.width());
- else if (requireImplicitWidth)
- q->setImplicitWidth(naturalWidth);
- internalWidthUpdate = false;
- q->setImplicitHeight(size.height());
- if (paintedSize != size) {
- paintedSize = size;
- emit q->paintedSizeChanged();
- }
- q->update();
-}
-
-/*!
- Lays out the QDeclarative1TextPrivate::layout QTextLayout in the constraints of the QDeclarative1Text.
-
- Returns the size of the final text. This can be used to position the text vertically (the text is
- already absolutely positioned horizontally).
-*/
-QRect QDeclarative1TextPrivate::setupTextLayout()
-{
- // ### text layout handling should be profiled and optimized as needed
- // what about QStackTextEngine engine(tmp, d->font.font()); QTextLayout textLayout(&engine);
- Q_Q(QDeclarative1Text);
- layout.setCacheEnabled(true);
-
- qreal lineWidth = 0;
- int visibleCount = 0;
-
- //set manual width
- if (q->widthValid())
- lineWidth = q->width();
-
- QTextOption textOption = layout.textOption();
- textOption.setAlignment(Qt::Alignment(q->effectiveHAlign()));
- textOption.setWrapMode(QTextOption::WrapMode(wrapMode));
- layout.setTextOption(textOption);
-
- bool elideText = false;
- bool truncate = false;
-
- QFontMetrics fm(layout.font());
- elidePos = QPointF();
-
- if (requireImplicitWidth && q->widthValid()) {
- // requires an extra layout
- QString elidedText;
- if (layoutTextElided) {
- // We have provided elided text to the layout, but we must calculate unelided width.
- elidedText = layout.text();
- layout.setText(text);
- }
- layout.beginLayout();
- forever {
- QTextLine line = layout.createLine();
- if (!line.isValid())
- break;
- }
- layout.endLayout();
- QRectF br;
- for (int i = 0; i < layout.lineCount(); ++i) {
- QTextLine line = layout.lineAt(i);
- br = br.united(line.naturalTextRect());
- }
- naturalWidth = br.width();
- if (layoutTextElided)
- layout.setText(elidedText);
- }
-
- if (maximumLineCountValid) {
- layout.beginLayout();
- if (!lineWidth)
- lineWidth = INT_MAX;
- int linesLeft = maximumLineCount;
- int visibleTextLength = 0;
- while (linesLeft > 0) {
- QTextLine line = layout.createLine();
- if (!line.isValid())
- break;
-
- visibleCount++;
- if (lineWidth)
- line.setLineWidth(lineWidth);
- visibleTextLength += line.textLength();
-
- if (--linesLeft == 0) {
- if (visibleTextLength < text.length()) {
- truncate = true;
- if (elideMode==QDeclarative1Text::ElideRight && q->widthValid()) {
- qreal elideWidth = fm.width(elideChar);
- // Need to correct for alignment
- line.setLineWidth(lineWidth-elideWidth);
- if (layout.text().mid(line.textStart(), line.textLength()).isRightToLeft()) {
- line.setPosition(QPointF(line.position().x() + elideWidth, line.position().y()));
- elidePos.setX(line.naturalTextRect().left() - elideWidth);
- } else {
- elidePos.setX(line.naturalTextRect().right());
- }
- elideText = true;
- }
- }
- }
- }
- layout.endLayout();
-
- //Update truncated
- if (truncated != truncate) {
- truncated = truncate;
- emit q->truncatedChanged();
- }
- } else {
- layout.beginLayout();
- forever {
- QTextLine line = layout.createLine();
- if (!line.isValid())
- break;
- visibleCount++;
- if (lineWidth)
- line.setLineWidth(lineWidth);
- }
- layout.endLayout();
- }
-
- qreal height = 0;
- QRectF br;
- for (int i = 0; i < layout.lineCount(); ++i) {
- QTextLine line = layout.lineAt(i);
- // set line spacing
- line.setPosition(QPointF(line.position().x(), height));
- if (elideText && i == layout.lineCount()-1) {
- elidePos.setY(height + fm.ascent());
- br = br.united(QRectF(elidePos, QSizeF(fm.width(elideChar), fm.ascent())));
- }
- br = br.united(line.naturalTextRect());
- height += (lineHeightMode == QDeclarative1Text::FixedHeight) ? lineHeight : line.height() * lineHeight;
- }
- br.setHeight(height);
-
- if (!q->widthValid())
- naturalWidth = br.width();
-
- //Update the number of visible lines
- if (lineCount != visibleCount) {
- lineCount = visibleCount;
- emit q->lineCountChanged();
- }
-
- return QRect(qRound(br.x()), qRound(br.y()), qCeil(br.width()), qCeil(br.height()));
-}
-
-/*!
- Returns a painted version of the QDeclarative1TextPrivate::layout QTextLayout.
- If \a drawStyle is true, the style color overrides all colors in the document.
-*/
-QPixmap QDeclarative1TextPrivate::textLayoutImage(bool drawStyle)
-{
- //do layout
- QSize size = layedOutTextRect.size();
- //paint text
- QPixmap img(size);
- if (!size.isEmpty()) {
- img.fill(Qt::transparent);
-#ifdef Q_WS_MAC
- bool oldSmooth = qt_applefontsmoothing_enabled;
- qt_applefontsmoothing_enabled = false;
-#endif
- QPainter p(&img);
-#ifdef Q_WS_MAC
- qt_applefontsmoothing_enabled = oldSmooth;
-#endif
- drawTextLayout(&p, QPointF(-layedOutTextRect.x(),0), drawStyle);
- }
- return img;
-}
-
-/*!
- Paints the QDeclarative1TextPrivate::layout QTextLayout into \a painter at \a pos. If
- \a drawStyle is true, the style color overrides all colors in the document.
-*/
-void QDeclarative1TextPrivate::drawTextLayout(QPainter *painter, const QPointF &pos, bool drawStyle)
-{
- if (drawStyle)
- painter->setPen(styleColor);
- else
- painter->setPen(color);
- painter->setFont(font);
- layout.draw(painter, pos);
- if (!elidePos.isNull())
- painter->drawText(pos + elidePos, elideChar);
-}
-
-/*!
- Returns a painted version of the QDeclarative1TextPrivate::doc QTextDocument.
- If \a drawStyle is true, the style color overrides all colors in the document.
-*/
-QPixmap QDeclarative1TextPrivate::textDocumentImage(bool drawStyle)
-{
- QSize size = doc->size().toSize();
-
- //paint text
- QPixmap img(size);
- img.fill(Qt::transparent);
-#ifdef Q_WS_MAC
- bool oldSmooth = qt_applefontsmoothing_enabled;
- qt_applefontsmoothing_enabled = false;
-#endif
- QPainter p(&img);
-#ifdef Q_WS_MAC
- qt_applefontsmoothing_enabled = oldSmooth;
-#endif
-
- QAbstractTextDocumentLayout::PaintContext context;
-
- QTextOption oldOption(doc->defaultTextOption());
- if (drawStyle) {
- context.palette.setColor(QPalette::Text, styleColor);
- QTextOption colorOption(doc->defaultTextOption());
- colorOption.setFlags(QTextOption::SuppressColors);
- doc->setDefaultTextOption(colorOption);
- } else {
- context.palette.setColor(QPalette::Text, color);
- }
- doc->documentLayout()->draw(&p, context);
- if (drawStyle)
- doc->setDefaultTextOption(oldOption);
- return img;
-}
-
-/*!
- Mark the image cache as dirty.
-*/
-void QDeclarative1TextPrivate::invalidateImageCache()
-{
- Q_Q(QDeclarative1Text);
-
- if(cacheAllTextAsImage || style != QDeclarative1Text::Normal){//If actually using the image cache
- if (imageCacheDirty)
- return;
-
- imageCacheDirty = true;
- imageCache = QPixmap();
- }
- if (q->isComponentComplete())
- q->update();
-}
-
-/*!
- Tests if the image cache is dirty, and repaints it if it is.
-*/
-void QDeclarative1TextPrivate::checkImageCache()
-{
- if (!imageCacheDirty)
- return;
-
- if (text.isEmpty()) {
-
- imageCache = QPixmap();
-
- } else {
-
- QPixmap textImage;
- QPixmap styledImage;
-
- if (richText) {
- textImage = textDocumentImage(false);
- if (style != QDeclarative1Text::Normal)
- styledImage = textDocumentImage(true); //### should use styleColor
- } else {
- textImage = textLayoutImage(false);
- if (style != QDeclarative1Text::Normal)
- styledImage = textLayoutImage(true); //### should use styleColor
- }
-
- switch (style) {
- case QDeclarative1Text::Outline:
- imageCache = drawOutline(textImage, styledImage);
- break;
- case QDeclarative1Text::Sunken:
- imageCache = drawOutline(textImage, styledImage, -1);
- break;
- case QDeclarative1Text::Raised:
- imageCache = drawOutline(textImage, styledImage, 1);
- break;
- default:
- imageCache = textImage;
- break;
- }
-
- }
-
- imageCacheDirty = false;
-}
-
-/*!
- Ensures the QDeclarative1TextPrivate::doc variable is set to a valid text document
-*/
-void QDeclarative1TextPrivate::ensureDoc()
-{
- if (!doc) {
- Q_Q(QDeclarative1Text);
- doc = new QTextDocumentWithImageResources_1(q);
- doc->setDocumentMargin(0);
- }
-}
-
-/*!
- Draw \a styleSource as an outline around \a source and return the new image.
-*/
-QPixmap QDeclarative1TextPrivate::drawOutline(const QPixmap &source, const QPixmap &styleSource)
-{
- QPixmap img = QPixmap(styleSource.width() + 2, styleSource.height() + 2);
- img.fill(Qt::transparent);
-
- QPainter ppm(&img);
-
- QPoint pos(0, 0);
- pos += QPoint(-1, 0);
- ppm.drawPixmap(pos, styleSource);
- pos += QPoint(2, 0);
- ppm.drawPixmap(pos, styleSource);
- pos += QPoint(-1, -1);
- ppm.drawPixmap(pos, styleSource);
- pos += QPoint(0, 2);
- ppm.drawPixmap(pos, styleSource);
-
- pos += QPoint(0, -1);
- ppm.drawPixmap(pos, source);
- ppm.end();
-
- return img;
-}
-
-/*!
- Draw \a styleSource below \a source at \a yOffset and return the new image.
-*/
-QPixmap QDeclarative1TextPrivate::drawOutline(const QPixmap &source, const QPixmap &styleSource, int yOffset)
-{
- QPixmap img = QPixmap(styleSource.width() + 2, styleSource.height() + 2);
- img.fill(Qt::transparent);
-
- QPainter ppm(&img);
-
- ppm.drawPixmap(QPoint(0, yOffset), styleSource);
- ppm.drawPixmap(0, 0, source);
-
- ppm.end();
-
- return img;
-}
-
-/*!
- \qmlclass Text QDeclarative1Text
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
- \since QtQuick 1.0
- \brief The Text item allows you to add formatted text to a scene.
- \inherits Item
-
- Text items can display both plain and rich text. For example, red text with
- a specific font and size can be defined like this:
-
- \qml
- Text {
- text: "Hello World!"
- font.family: "Helvetica"
- font.pointSize: 24
- color: "red"
- }
- \endqml
-
- Rich text is defined using HTML-style markup:
-
- \qml
- Text {
- text: "<b>Hello</b> <i>World!</i>"
- }
- \endqml
-
- \image declarative-text.png
-
- If height and width are not explicitly set, Text will attempt to determine how
- much room is needed and set it accordingly. Unless \l wrapMode is set, it will always
- prefer width to height (all text will be placed on a single line).
-
- The \l elide property can alternatively be used to fit a single line of
- plain text to a set width.
-
- Note that the \l{Supported HTML Subset} is limited. Also, if the text contains
- HTML img tags that load remote images, the text is reloaded.
-
- Text provides read-only text. For editable text, see \l TextEdit.
-
- \sa {declarative/text/fonts}{Fonts example}
-*/
-QDeclarative1Text::QDeclarative1Text(QDeclarativeItem *parent)
- : QDeclarative1ImplicitSizeItem(*(new QDeclarative1TextPrivate), parent)
-{
-}
-
-QDeclarative1Text::~QDeclarative1Text()
-{
-}
-
-/*!
- \qmlproperty bool QtQuick1::Text::clip
- This property holds whether the text is clipped.
-
- Note that if the text does not fit in the bounding rectangle it will be abruptly chopped.
-
- If you want to display potentially long text in a limited space, you probably want to use \c elide instead.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Text::smooth
-
- This property holds whether the text is smoothly scaled or transformed.
-
- Smooth filtering gives better visual quality, but is slower. If
- the item is displayed at its natural size, this property has no visual or
- performance effect.
-
- \note Generally scaling artifacts are only visible if the item is stationary on
- the screen. A common pattern when animating an item is to disable smooth
- filtering at the beginning of the animation and reenable it at the conclusion.
-*/
-
-/*!
- \qmlsignal QtQuick1::Text::onLinkActivated(string link)
-
- This handler is called when the user clicks on a link embedded in the text.
- The link must be in rich text or HTML format and the
- \a link string provides access to the particular link.
-
- \snippet doc/src/snippets/qtquick1/text/onLinkActivated.qml 0
-
- The example code will display the text
- "The main website is at \l{http://qt.nokia.com}{Nokia Qt DF}."
-
- Clicking on the highlighted link will output
- \tt{http://qt.nokia.com link activated} to the console.
-*/
-
-/*!
- \qmlproperty string QtQuick1::Text::font.family
-
- Sets the family name of the font.
-
- The family name is case insensitive and may optionally include a foundry name, e.g. "Helvetica [Cronyx]".
- If the family is available from more than one foundry and the foundry isn't specified, an arbitrary foundry is chosen.
- If the family isn't available a family will be set using the font matching algorithm.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Text::font.bold
-
- Sets whether the font weight is bold.
-*/
-
-/*!
- \qmlproperty enumeration QtQuick1::Text::font.weight
-
- Sets the font's weight.
-
- The weight can be one of:
- \list
- \o Font.Light
- \o Font.Normal - the default
- \o Font.DemiBold
- \o Font.Bold
- \o Font.Black
- \endlist
-
- \qml
- Text { text: "Hello"; font.weight: Font.DemiBold }
- \endqml
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Text::font.italic
-
- Sets whether the font has an italic style.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Text::font.underline
-
- Sets whether the text is underlined.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::Text::font.strikeout
-
- Sets whether the font has a strikeout style.
-*/
-
-/*!
- \qmlproperty real QtQuick1::Text::font.pointSize
-
- Sets the font size in points. The point size must be greater than zero.
-*/
-
-/*!
- \qmlproperty int QtQuick1::Text::font.pixelSize
-
- Sets the font size in pixels.
-
- Using this function makes the font device dependent.
- Use \c pointSize to set the size of the font in a device independent manner.
-*/
-
-/*!
- \qmlproperty real QtQuick1::Text::font.letterSpacing
-
- Sets the letter spacing for the font.
-
- Letter spacing changes the default spacing between individual letters in the font.
- A positive value increases the letter spacing by the corresponding pixels; a negative value decreases the spacing.
-*/
-
-/*!
- \qmlproperty real QtQuick1::Text::font.wordSpacing
-
- Sets the word spacing for the font.
-
- Word spacing changes the default spacing between individual words.
- A positive value increases the word spacing by a corresponding amount of pixels,
- while a negative value decreases the inter-word spacing accordingly.
-*/
-
-/*!
- \qmlproperty enumeration QtQuick1::Text::font.capitalization
-
- Sets the capitalization for the text.
-
- \list
- \o Font.MixedCase - This is the normal text rendering option where no capitalization change is applied.
- \o Font.AllUppercase - This alters the text to be rendered in all uppercase type.
- \o Font.AllLowercase - This alters the text to be rendered in all lowercase type.
- \o Font.SmallCaps - This alters the text to be rendered in small-caps type.
- \o Font.Capitalize - This alters the text to be rendered with the first character of each word as an uppercase character.
- \endlist
-
- \qml
- Text { text: "Hello"; font.capitalization: Font.AllLowercase }
- \endqml
-*/
-QFont QDeclarative1Text::font() const
-{
- Q_D(const QDeclarative1Text);
- return d->sourceFont;
-}
-
-void QDeclarative1Text::setFont(const QFont &font)
-{
- Q_D(QDeclarative1Text);
- if (d->sourceFont == font)
- return;
-
- d->sourceFont = font;
- QFont oldFont = d->font;
- d->font = font;
- if (d->font.pointSizeF() != -1) {
- // 0.5pt resolution
- qreal size = qRound(d->font.pointSizeF()*2.0);
- d->font.setPointSizeF(size/2.0);
- }
-
- if (oldFont != d->font)
- d->updateLayout();
-
- emit fontChanged(d->sourceFont);
-}
-
-/*!
- \qmlproperty string QtQuick1::Text::text
-
- The text to display. Text supports both plain and rich text strings.
-
- The item will try to automatically determine whether the text should
- be treated as rich text. This determination is made using Qt::mightBeRichText().
-*/
-QString QDeclarative1Text::text() const
-{
- Q_D(const QDeclarative1Text);
- return d->text;
-}
-
-void QDeclarative1Text::setText(const QString &n)
-{
- Q_D(QDeclarative1Text);
- if (d->text == n)
- return;
-
- d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
- d->text = n;
- if (isComponentComplete()) {
- if (d->richText) {
- d->ensureDoc();
- d->doc->setText(n);
- d->rightToLeftText = d->doc->toPlainText().isRightToLeft();
- } else {
- d->rightToLeftText = d->text.isRightToLeft();
- }
- d->determineHorizontalAlignment();
- }
- d->updateLayout();
- emit textChanged(d->text);
-}
-
-
-/*!
- \qmlproperty color QtQuick1::Text::color
-
- The text color.
-
- An example of green text defined using hexadecimal notation:
- \qml
- Text {
- color: "#00FF00"
- text: "green text"
- }
- \endqml
-
- An example of steel blue text defined using an SVG color name:
- \qml
- Text {
- color: "steelblue"
- text: "blue text"
- }
- \endqml
-*/
-QColor QDeclarative1Text::color() const
-{
- Q_D(const QDeclarative1Text);
- return d->color;
-}
-
-void QDeclarative1Text::setColor(const QColor &color)
-{
- Q_D(QDeclarative1Text);
- if (d->color == color)
- return;
-
- d->color = color;
- d->invalidateImageCache();
- emit colorChanged(d->color);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Text::style
-
- Set an additional text style.
-
- Supported text styles are:
- \list
- \o Text.Normal - the default
- \o Text.Outline
- \o Text.Raised
- \o Text.Sunken
- \endlist
-
- \qml
- Row {
- Text { font.pointSize: 24; text: "Normal" }
- Text { font.pointSize: 24; text: "Raised"; style: Text.Raised; styleColor: "#AAAAAA" }
- Text { font.pointSize: 24; text: "Outline";style: Text.Outline; styleColor: "red" }
- Text { font.pointSize: 24; text: "Sunken"; style: Text.Sunken; styleColor: "#AAAAAA" }
- }
- \endqml
-
- \image declarative-textstyle.png
-*/
-QDeclarative1Text::TextStyle QDeclarative1Text::style() const
-{
- Q_D(const QDeclarative1Text);
- return d->style;
-}
-
-void QDeclarative1Text::setStyle(QDeclarative1Text::TextStyle style)
-{
- Q_D(QDeclarative1Text);
- if (d->style == style)
- return;
-
- // changing to/from Normal requires the boundingRect() to change
- if (isComponentComplete() && (d->style == Normal || style == Normal))
- prepareGeometryChange();
- d->style = style;
- d->invalidateImageCache();
- emit styleChanged(d->style);
-}
-
-/*!
- \qmlproperty color QtQuick1::Text::styleColor
-
- Defines the secondary color used by text styles.
-
- \c styleColor is used as the outline color for outlined text, and as the
- shadow color for raised or sunken text. If no style has been set, it is not
- used at all.
-
- \qml
- Text { font.pointSize: 18; text: "hello"; style: Text.Raised; styleColor: "gray" }
- \endqml
-
- \sa style
- */
-QColor QDeclarative1Text::styleColor() const
-{
- Q_D(const QDeclarative1Text);
- return d->styleColor;
-}
-
-void QDeclarative1Text::setStyleColor(const QColor &color)
-{
- Q_D(QDeclarative1Text);
- if (d->styleColor == color)
- return;
-
- d->styleColor = color;
- d->invalidateImageCache();
- emit styleColorChanged(d->styleColor);
-}
-
-
-/*!
- \qmlproperty enumeration QtQuick1::Text::horizontalAlignment
- \qmlproperty enumeration QtQuick1::Text::verticalAlignment
- \qmlproperty enumeration QtQuick1::Text::effectiveHorizontalAlignment
-
- Sets the horizontal and vertical alignment of the text within the Text items
- width and height. By default, the text is vertically aligned to the top. Horizontal
- alignment follows the natural alignment of the text, for example text that is read
- from left to right will be aligned to the left.
-
- The valid values for \c horizontalAlignment are \c Text.AlignLeft, \c Text.AlignRight, \c Text.AlignHCenter and
- \c Text.AlignJustify. The valid values for \c verticalAlignment are \c Text.AlignTop, \c Text.AlignBottom
- and \c Text.AlignVCenter.
-
- Note that for a single line of text, the size of the text is the area of the text. In this common case,
- all alignments are equivalent. If you want the text to be, say, centered in its parent, then you will
- need to either modify the Item::anchors, or set horizontalAlignment to Text.AlignHCenter and bind the width to
- that of the parent.
-
- When using the attached property LayoutMirroring::enabled to mirror application
- layouts, the horizontal alignment of text will also be mirrored. However, the property
- \c horizontalAlignment will remain unchanged. To query the effective horizontal alignment
- of Text, use the read-only property \c effectiveHorizontalAlignment.
-*/
-QDeclarative1Text::HAlignment QDeclarative1Text::hAlign() const
-{
- Q_D(const QDeclarative1Text);
- return d->hAlign;
-}
-
-void QDeclarative1Text::setHAlign(HAlignment align)
-{
- Q_D(QDeclarative1Text);
- bool forceAlign = d->hAlignImplicit && d->effectiveLayoutMirror;
- d->hAlignImplicit = false;
- if (d->setHAlign(align, forceAlign) && isComponentComplete())
- d->updateLayout();
-}
-
-void QDeclarative1Text::resetHAlign()
-{
- Q_D(QDeclarative1Text);
- d->hAlignImplicit = true;
- if (d->determineHorizontalAlignment() && isComponentComplete())
- d->updateLayout();
-}
-
-QDeclarative1Text::HAlignment QDeclarative1Text::effectiveHAlign() const
-{
- Q_D(const QDeclarative1Text);
- QDeclarative1Text::HAlignment effectiveAlignment = d->hAlign;
- if (!d->hAlignImplicit && d->effectiveLayoutMirror) {
- switch (d->hAlign) {
- case QDeclarative1Text::AlignLeft:
- effectiveAlignment = QDeclarative1Text::AlignRight;
- break;
- case QDeclarative1Text::AlignRight:
- effectiveAlignment = QDeclarative1Text::AlignLeft;
- break;
- default:
- break;
- }
- }
- return effectiveAlignment;
-}
-
-bool QDeclarative1TextPrivate::setHAlign(QDeclarative1Text::HAlignment alignment, bool forceAlign)
-{
- Q_Q(QDeclarative1Text);
- if (hAlign != alignment || forceAlign) {
- QDeclarative1Text::HAlignment oldEffectiveHAlign = q->effectiveHAlign();
- hAlign = alignment;
-
- emit q->horizontalAlignmentChanged(hAlign);
- if (oldEffectiveHAlign != q->effectiveHAlign())
- emit q->effectiveHorizontalAlignmentChanged();
- return true;
- }
- return false;
-}
-
-bool QDeclarative1TextPrivate::determineHorizontalAlignment()
-{
- Q_Q(QDeclarative1Text);
- if (hAlignImplicit && q->isComponentComplete()) {
- bool alignToRight = text.isEmpty() ? qApp->inputPanel()->inputDirection() == Qt::RightToLeft : rightToLeftText;
- return setHAlign(alignToRight ? QDeclarative1Text::AlignRight : QDeclarative1Text::AlignLeft);
- }
- return false;
-}
-
-void QDeclarative1TextPrivate::mirrorChange()
-{
- Q_Q(QDeclarative1Text);
- if (q->isComponentComplete()) {
- if (!hAlignImplicit && (hAlign == QDeclarative1Text::AlignRight || hAlign == QDeclarative1Text::AlignLeft)) {
- updateLayout();
- emit q->effectiveHorizontalAlignmentChanged();
- }
- }
-}
-
-QTextDocument *QDeclarative1TextPrivate::textDocument()
-{
- return doc;
-}
-
-QDeclarative1Text::VAlignment QDeclarative1Text::vAlign() const
-{
- Q_D(const QDeclarative1Text);
- return d->vAlign;
-}
-
-void QDeclarative1Text::setVAlign(VAlignment align)
-{
- Q_D(QDeclarative1Text);
- if (d->vAlign == align)
- return;
-
- if (isComponentComplete())
- prepareGeometryChange();
- d->vAlign = align;
- emit verticalAlignmentChanged(align);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Text::wrapMode
-
- Set this property to wrap the text to the Text item's width. The text will only
- wrap if an explicit width has been set. wrapMode can be one of:
-
- \list
- \o Text.NoWrap (default) - no wrapping will be performed. If the text contains insufficient newlines, then \l paintedWidth will exceed a set width.
- \o Text.WordWrap - wrapping is done on word boundaries only. If a word is too long, \l paintedWidth will exceed a set width.
- \o Text.WrapAnywhere - wrapping is done at any point on a line, even if it occurs in the middle of a word.
- \o Text.Wrap - if possible, wrapping occurs at a word boundary; otherwise it will occur at the appropriate point on the line, even in the middle of a word.
- \endlist
-*/
-QDeclarative1Text::WrapMode QDeclarative1Text::wrapMode() const
-{
- Q_D(const QDeclarative1Text);
- return d->wrapMode;
-}
-
-void QDeclarative1Text::setWrapMode(WrapMode mode)
-{
- Q_D(QDeclarative1Text);
- if (mode == d->wrapMode)
- return;
-
- d->wrapMode = mode;
- d->updateLayout();
-
- emit wrapModeChanged();
-}
-
-/*!
- \qmlproperty int QtQuick1::Text::lineCount
- \since Quick 1.1
-
- Returns the number of lines visible in the text item.
-
- This property is not supported for rich text.
-
- \sa maximumLineCount
-*/
-int QDeclarative1Text::lineCount() const
-{
- Q_D(const QDeclarative1Text);
- return d->lineCount;
-}
-
-/*!
- \qmlproperty bool QtQuick1::Text::truncated
- \since Quick 1.1
-
- Returns true if the text has been truncated due to \l maximumLineCount
- or \l elide.
-
- This property is not supported for rich text.
-
- \sa maximumLineCount, elide
-*/
-bool QDeclarative1Text::truncated() const
-{
- Q_D(const QDeclarative1Text);
- return d->truncated;
-}
-
-/*!
- \qmlproperty int QtQuick1::Text::maximumLineCount
- \since Quick 1.1
-
- Set this property to limit the number of lines that the text item will show.
- If elide is set to Text.ElideRight, the text will be elided appropriately.
- By default, this is the value of the largest possible integer.
-
- This property is not supported for rich text.
-
- \sa lineCount, elide
-*/
-int QDeclarative1Text::maximumLineCount() const
-{
- Q_D(const QDeclarative1Text);
- return d->maximumLineCount;
-}
-
-void QDeclarative1Text::setMaximumLineCount(int lines)
-{
- Q_D(QDeclarative1Text);
-
- d->maximumLineCountValid = lines==INT_MAX ? false : true;
- if (d->maximumLineCount != lines) {
- d->maximumLineCount = lines;
- d->updateLayout();
- emit maximumLineCountChanged();
- }
-}
-
-void QDeclarative1Text::resetMaximumLineCount()
-{
- Q_D(QDeclarative1Text);
- setMaximumLineCount(INT_MAX);
- d->elidePos = QPointF();
- if (d->truncated != false) {
- d->truncated = false;
- emit truncatedChanged();
- }
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Text::textFormat
-
- The way the text property should be displayed.
-
- Supported text formats are:
-
- \list
- \o Text.AutoText (default)
- \o Text.PlainText
- \o Text.RichText
- \o Text.StyledText
- \endlist
-
- If the text format is \c Text.AutoText the text element
- will automatically determine whether the text should be treated as
- rich text. This determination is made using Qt::mightBeRichText().
-
- Text.StyledText is an optimized format supporting some basic text
- styling markup, in the style of html 3.2:
-
- \code
- <font size="4" color="#ff0000">font size and color</font>
- <b>bold</b>
- <i>italic</i>
- <br>
- &gt; &lt; &amp;
- \endcode
-
- \c Text.StyledText parser is strict, requiring tags to be correctly nested.
-
- \table
- \row
- \o
- \qml
-Column {
- Text {
- font.pointSize: 24
- text: "<b>Hello</b> <i>World!</i>"
- }
- Text {
- font.pointSize: 24
- textFormat: Text.RichText
- text: "<b>Hello</b> <i>World!</i>"
- }
- Text {
- font.pointSize: 24
- textFormat: Text.PlainText
- text: "<b>Hello</b> <i>World!</i>"
- }
-}
- \endqml
- \o \image declarative-textformat.png
- \endtable
-*/
-QDeclarative1Text::TextFormat QDeclarative1Text::textFormat() const
-{
- Q_D(const QDeclarative1Text);
- return d->format;
-}
-
-void QDeclarative1Text::setTextFormat(TextFormat format)
-{
- Q_D(QDeclarative1Text);
- if (format == d->format)
- return;
- d->format = format;
- bool wasRich = d->richText;
- d->richText = format == RichText || (format == AutoText && Qt::mightBeRichText(d->text));
-
- if (!wasRich && d->richText && isComponentComplete()) {
- d->ensureDoc();
- d->doc->setText(d->text);
- }
-
- d->updateLayout();
-
- emit textFormatChanged(d->format);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Text::elide
-
- Set this property to elide parts of the text fit to the Text item's width.
- The text will only elide if an explicit width has been set.
-
- This property cannot be used with rich text.
-
- Eliding can be:
- \list
- \o Text.ElideNone - the default
- \o Text.ElideLeft
- \o Text.ElideMiddle
- \o Text.ElideRight
- \endlist
-
- If this property is set to Text.ElideRight, it can be used with multiline
- text. The text will only elide if maximumLineCount has been set.
-
- If the text is a multi-length string, and the mode is not \c Text.ElideNone,
- the first string that fits will be used, otherwise the last will be elided.
-
- Multi-length strings are ordered from longest to shortest, separated by the
- Unicode "String Terminator" character \c U009C (write this in QML with \c{"\u009C"} or \c{"\x9C"}).
-*/
-QDeclarative1Text::TextElideMode QDeclarative1Text::elideMode() const
-{
- Q_D(const QDeclarative1Text);
- return d->elideMode;
-}
-
-void QDeclarative1Text::setElideMode(QDeclarative1Text::TextElideMode mode)
-{
- Q_D(QDeclarative1Text);
- if (mode == d->elideMode)
- return;
-
- d->elideMode = mode;
- d->updateLayout();
-
- emit elideModeChanged(d->elideMode);
-}
-
-/*! \internal */
-QRectF QDeclarative1Text::boundingRect() const
-{
- Q_D(const QDeclarative1Text);
-
- QRect rect = d->layedOutTextRect;
- if (d->style != Normal)
- rect.adjust(-1, 0, 1, 2);
-
- // Could include font max left/right bearings to either side of rectangle.
-
- int h = height();
- switch (d->vAlign) {
- case AlignTop:
- break;
- case AlignBottom:
- rect.moveTop(h - rect.height());
- break;
- case AlignVCenter:
- rect.moveTop((h - rect.height()) / 2);
- break;
- }
-
- return QRectF(rect);
-}
-
-/*! \internal */
-void QDeclarative1Text::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
-{
- Q_D(QDeclarative1Text);
- if ((!d->internalWidthUpdate && newGeometry.width() != oldGeometry.width())
- && (d->wrapMode != QDeclarative1Text::NoWrap
- || d->elideMode != QDeclarative1Text::ElideNone
- || d->hAlign != QDeclarative1Text::AlignLeft)) {
- if ((d->singleline || d->maximumLineCountValid) && d->elideMode != QDeclarative1Text::ElideNone && widthValid()) {
- // We need to re-elide
- d->updateLayout();
- } else {
- // We just need to re-layout
- d->updateSize();
- }
- }
-
- QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-/*!
- \qmlproperty real QtQuick1::Text::paintedWidth
-
- Returns the width of the text, including width past the width
- which is covered due to insufficient wrapping if WrapMode is set.
-*/
-qreal QDeclarative1Text::paintedWidth() const
-{
- Q_D(const QDeclarative1Text);
- return d->paintedSize.width();
-}
-
-/*!
- \qmlproperty real QtQuick1::Text::paintedHeight
-
- Returns the height of the text, including height past the height
- which is covered due to there being more text than fits in the set height.
-*/
-qreal QDeclarative1Text::paintedHeight() const
-{
- Q_D(const QDeclarative1Text);
- return d->paintedSize.height();
-}
-
-/*!
- \qmlproperty real QtQuick1::Text::lineHeight
- \since Quick 1.1
-
- Sets the line height for the text.
- The value can be in pixels or a multiplier depending on lineHeightMode.
-
- The default value is a multiplier of 1.0.
- The line height must be a positive value.
-*/
-qreal QDeclarative1Text::lineHeight() const
-{
- Q_D(const QDeclarative1Text);
- return d->lineHeight;
-}
-
-void QDeclarative1Text::setLineHeight(qreal lineHeight)
-{
- Q_D(QDeclarative1Text);
-
- if ((d->lineHeight == lineHeight) || (lineHeight < 0.0))
- return;
-
- d->lineHeight = lineHeight;
- d->updateLayout();
- emit lineHeightChanged(lineHeight);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::Text::lineHeightMode
-
- This property determines how the line height is specified.
- The possible values are:
-
- \list
- \o Text.ProportionalHeight (default) - this sets the spacing proportional to the
- line (as a multiplier). For example, set to 2 for double spacing.
- \o Text.FixedHeight - this sets the line height to a fixed line height (in pixels).
- \endlist
-*/
-QDeclarative1Text::LineHeightMode QDeclarative1Text::lineHeightMode() const
-{
- Q_D(const QDeclarative1Text);
- return d->lineHeightMode;
-}
-
-void QDeclarative1Text::setLineHeightMode(LineHeightMode mode)
-{
- Q_D(QDeclarative1Text);
- if (mode == d->lineHeightMode)
- return;
-
- d->lineHeightMode = mode;
- d->updateLayout();
-
- emit lineHeightModeChanged(mode);
-}
-
-/*!
- Returns the number of resources (images) that are being loaded asynchronously.
-*/
-int QDeclarative1Text::resourcesLoading() const
-{
- Q_D(const QDeclarative1Text);
- return d->doc ? d->doc->resourcesLoading() : 0;
-}
-
-/*! \internal */
-void QDeclarative1Text::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
-{
- Q_D(QDeclarative1Text);
-
- if (d->cacheAllTextAsImage || d->style != Normal) {
- d->checkImageCache();
- if (d->imageCache.isNull())
- return;
-
- bool oldAA = p->testRenderHint(QPainter::Antialiasing);
- bool oldSmooth = p->testRenderHint(QPainter::SmoothPixmapTransform);
- if (d->smooth)
- p->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform, d->smooth);
-
- QRect br = boundingRect().toRect();
-
- bool needClip = clip() && (d->imageCache.width() > width() ||
- d->imageCache.height() > height());
-
- if (needClip)
- p->drawPixmap(0, 0, width(), height(), d->imageCache, -br.x(), -br.y(), width(), height());
- else
- p->drawPixmap(br.x(), br.y(), d->imageCache);
-
- if (d->smooth) {
- p->setRenderHint(QPainter::Antialiasing, oldAA);
- p->setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth);
- }
- } else {
- QRectF bounds = boundingRect();
-
- bool needClip = clip() && (d->layedOutTextRect.width() > width() ||
- d->layedOutTextRect.height() > height());
-
- if (needClip) {
- p->save();
- p->setClipRect(0, 0, width(), height(), Qt::IntersectClip);
- }
- if (d->richText) {
- QAbstractTextDocumentLayout::PaintContext context;
- context.palette.setColor(QPalette::Text, d->color);
- p->translate(bounds.x(), bounds.y());
- d->doc->documentLayout()->draw(p, context);
- p->translate(-bounds.x(), -bounds.y());
- } else {
- d->drawTextLayout(p, QPointF(0, bounds.y()), false);
- }
-
- if (needClip) {
- p->restore();
- }
- }
-}
-
-/*! \internal */
-void QDeclarative1Text::componentComplete()
-{
- Q_D(QDeclarative1Text);
- QDeclarativeItem::componentComplete();
- if (d->updateOnComponentComplete) {
- d->updateOnComponentComplete = false;
- if (d->richText) {
- d->ensureDoc();
- d->doc->setText(d->text);
- d->rightToLeftText = d->doc->toPlainText().isRightToLeft();
- } else {
- d->rightToLeftText = d->text.isRightToLeft();
- }
- d->determineHorizontalAlignment();
- d->updateLayout();
- }
-}
-
-/*! \internal */
-void QDeclarative1Text::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1Text);
-
- if (!d->richText || !d->doc || d->doc->documentLayout()->anchorAt(event->pos()).isEmpty()) {
- event->setAccepted(false);
- d->activeLink.clear();
- } else {
- d->activeLink = d->doc->documentLayout()->anchorAt(event->pos());
- }
-
- // ### may malfunction if two of the same links are clicked & dragged onto each other)
-
- if (!event->isAccepted())
- QDeclarativeItem::mousePressEvent(event);
-
-}
-
-/*! \internal */
-void QDeclarative1Text::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1Text);
-
- // ### confirm the link, and send a signal out
- if (d->richText && d->doc && d->activeLink == d->doc->documentLayout()->anchorAt(event->pos()))
- emit linkActivated(d->activeLink);
- else
- event->setAccepted(false);
-
- if (!event->isAccepted())
- QDeclarativeItem::mouseReleaseEvent(event);
-}
-
-
-
-QT_END_NAMESPACE
-
-#include "qdeclarativetext.moc"
diff --git a/src/qtquick1/graphicsitems/qdeclarativetext_p.h b/src/qtquick1/graphicsitems/qdeclarativetext_p.h
deleted file mode 100644
index bf78cfdd50..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetext_p.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVETEXT_H
-#define QDECLARATIVETEXT_H
-
-#include <QtGui/qtextoption.h>
-#include "qdeclarativeimplicitsizeitem_p.h"
-
-#include <QtDeclarative/private/qdeclarativeglobal_p.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-class QDeclarative1TextPrivate;
-class Q_QTQUICK1_EXPORT QDeclarative1Text : public QDeclarative1ImplicitSizeItem
-{
- Q_OBJECT
- Q_ENUMS(HAlignment)
- Q_ENUMS(VAlignment)
- Q_ENUMS(TextStyle)
- Q_ENUMS(TextFormat)
- Q_ENUMS(TextElideMode)
- Q_ENUMS(WrapMode)
- Q_ENUMS(LineHeightMode)
-
- Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
- Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(TextStyle style READ style WRITE setStyle NOTIFY styleChanged)
- Q_PROPERTY(QColor styleColor READ styleColor WRITE setStyleColor NOTIFY styleColorChanged)
- Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged)
- Q_PROPERTY(HAlignment effectiveHorizontalAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged REVISION 1)
- Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged)
- Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged)
- Q_PROPERTY(int lineCount READ lineCount NOTIFY lineCountChanged REVISION 1)
- Q_PROPERTY(bool truncated READ truncated NOTIFY truncatedChanged REVISION 1)
- Q_PROPERTY(int maximumLineCount READ maximumLineCount WRITE setMaximumLineCount NOTIFY maximumLineCountChanged RESET resetMaximumLineCount REVISION 1)
-
- Q_PROPERTY(TextFormat textFormat READ textFormat WRITE setTextFormat NOTIFY textFormatChanged)
- Q_PROPERTY(TextElideMode elide READ elideMode WRITE setElideMode NOTIFY elideModeChanged) //### elideMode?
- Q_PROPERTY(qreal paintedWidth READ paintedWidth NOTIFY paintedSizeChanged)
- Q_PROPERTY(qreal paintedHeight READ paintedHeight NOTIFY paintedSizeChanged)
- Q_PROPERTY(qreal lineHeight READ lineHeight WRITE setLineHeight NOTIFY lineHeightChanged REVISION 1)
- Q_PROPERTY(LineHeightMode lineHeightMode READ lineHeightMode WRITE setLineHeightMode NOTIFY lineHeightModeChanged REVISION 1)
-
-public:
- QDeclarative1Text(QDeclarativeItem *parent=0);
- ~QDeclarative1Text();
-
- enum HAlignment { AlignLeft = Qt::AlignLeft,
- AlignRight = Qt::AlignRight,
- AlignHCenter = Qt::AlignHCenter,
- AlignJustify = Qt::AlignJustify }; // ### VERSIONING: Only in QtQuick 1.1
- enum VAlignment { AlignTop = Qt::AlignTop,
- AlignBottom = Qt::AlignBottom,
- AlignVCenter = Qt::AlignVCenter };
- enum TextStyle { Normal,
- Outline,
- Raised,
- Sunken };
- enum TextFormat { PlainText = Qt::PlainText,
- RichText = Qt::RichText,
- AutoText = Qt::AutoText,
- StyledText = 4 };
- enum TextElideMode { ElideLeft = Qt::ElideLeft,
- ElideRight = Qt::ElideRight,
- ElideMiddle = Qt::ElideMiddle,
- ElideNone = Qt::ElideNone };
-
- enum WrapMode { NoWrap = QTextOption::NoWrap,
- WordWrap = QTextOption::WordWrap,
- WrapAnywhere = QTextOption::WrapAnywhere,
- WrapAtWordBoundaryOrAnywhere = QTextOption::WrapAtWordBoundaryOrAnywhere, // COMPAT
- Wrap = QTextOption::WrapAtWordBoundaryOrAnywhere
- };
-
- enum LineHeightMode { ProportionalHeight, FixedHeight };
-
- QString text() const;
- void setText(const QString &);
-
- QFont font() const;
- void setFont(const QFont &font);
-
- QColor color() const;
- void setColor(const QColor &c);
-
- TextStyle style() const;
- void setStyle(TextStyle style);
-
- QColor styleColor() const;
- void setStyleColor(const QColor &c);
-
- HAlignment hAlign() const;
- void setHAlign(HAlignment align);
- void resetHAlign();
- HAlignment effectiveHAlign() const;
-
- VAlignment vAlign() const;
- void setVAlign(VAlignment align);
-
- WrapMode wrapMode() const;
- void setWrapMode(WrapMode w);
-
- int lineCount() const;
- bool truncated() const;
-
- int maximumLineCount() const;
- void setMaximumLineCount(int lines);
- void resetMaximumLineCount();
-
- TextFormat textFormat() const;
- void setTextFormat(TextFormat format);
-
- TextElideMode elideMode() const;
- void setElideMode(TextElideMode);
-
- qreal lineHeight() const;
- void setLineHeight(qreal lineHeight);
-
- LineHeightMode lineHeightMode() const;
- void setLineHeightMode(LineHeightMode);
-
- void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
-
- virtual void componentComplete();
-
- int resourcesLoading() const; // mainly for testing
-
- qreal paintedWidth() const;
- qreal paintedHeight() const;
-
- QRectF boundingRect() const;
-
-Q_SIGNALS:
- void textChanged(const QString &text);
- void linkActivated(const QString &link);
- void fontChanged(const QFont &font);
- void colorChanged(const QColor &color);
- void styleChanged(TextStyle style);
- void styleColorChanged(const QColor &color);
- void horizontalAlignmentChanged(HAlignment alignment);
- void verticalAlignmentChanged(VAlignment alignment);
- void wrapModeChanged();
- Q_REVISION(1) void lineCountChanged();
- Q_REVISION(1) void truncatedChanged();
- Q_REVISION(1) void maximumLineCountChanged();
- void textFormatChanged(TextFormat textFormat);
- void elideModeChanged(TextElideMode mode);
- void paintedSizeChanged();
- Q_REVISION(1) void lineHeightChanged(qreal lineHeight);
- Q_REVISION(1) void lineHeightModeChanged(LineHeightMode mode);
- Q_REVISION(1) void effectiveHorizontalAlignmentChanged();
-
-protected:
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
-
-private:
- Q_DISABLE_COPY(QDeclarative1Text)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1Text)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Text)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativetext_p_p.h b/src/qtquick1/graphicsitems/qdeclarativetext_p_p.h
deleted file mode 100644
index 0d40ab80ee..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetext_p_p.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVETEXT_P_H
-#define QDECLARATIVETEXT_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qdeclarativeitem.h"
-#include "private/qdeclarativeimplicitsizeitem_p_p.h"
-#include "QtQuick1/private/qdeclarativetextlayout_p.h"
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QtGui/qtextlayout.h>
-
-QT_BEGIN_NAMESPACE
-
-class QTextLayout;
-class QTextDocumentWithImageResources_1;
-
-class Q_AUTOTEST_EXPORT QDeclarative1TextPrivate : public QDeclarative1ImplicitSizeItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1Text)
-public:
- QDeclarative1TextPrivate();
-
- ~QDeclarative1TextPrivate();
-
- void updateSize();
- void updateLayout();
- bool determineHorizontalAlignment();
- bool setHAlign(QDeclarative1Text::HAlignment, bool forceAlign = false);
- void mirrorChange();
- QTextDocument *textDocument();
-
- QString text;
- QFont font;
- QFont sourceFont;
- QColor color;
- QDeclarative1Text::TextStyle style;
- QColor styleColor;
- QString activeLink;
- QDeclarative1Text::HAlignment hAlign;
- QDeclarative1Text::VAlignment vAlign;
- QDeclarative1Text::TextElideMode elideMode;
- QDeclarative1Text::TextFormat format;
- QDeclarative1Text::WrapMode wrapMode;
- qreal lineHeight;
- QDeclarative1Text::LineHeightMode lineHeightMode;
- int lineCount;
- bool truncated;
- int maximumLineCount;
- int maximumLineCountValid;
- QPointF elidePos;
-
- static QString elideChar;
-
- void invalidateImageCache();
- void checkImageCache();
- QPixmap imageCache;
-
- bool imageCacheDirty:1;
- bool updateOnComponentComplete:1;
- bool richText:1;
- bool singleline:1;
- bool cacheAllTextAsImage:1;
- bool internalWidthUpdate:1;
- bool requireImplicitWidth:1;
- bool hAlignImplicit:1;
- bool rightToLeftText:1;
- bool layoutTextElided:1;
-
- QRect layedOutTextRect;
- QSize paintedSize;
- qreal naturalWidth;
- virtual qreal implicitWidth() const;
- void ensureDoc();
- QPixmap textDocumentImage(bool drawStyle);
- QTextDocumentWithImageResources_1 *doc;
-
- QRect setupTextLayout();
- QPixmap textLayoutImage(bool drawStyle);
- void drawTextLayout(QPainter *p, const QPointF &pos, bool drawStyle);
- QDeclarative1TextLayout layout;
-
- static QPixmap drawOutline(const QPixmap &source, const QPixmap &styleSource);
- static QPixmap drawOutline(const QPixmap &source, const QPixmap &styleSource, int yOffset);
-
- static inline QDeclarative1TextPrivate *get(QDeclarative1Text *t) {
- return t->d_func();
- }
-};
-
-QT_END_NAMESPACE
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextedit.cpp b/src/qtquick1/graphicsitems/qdeclarativetextedit.cpp
deleted file mode 100644
index b0c9a0a8ed..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetextedit.cpp
+++ /dev/null
@@ -1,1885 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "private/qdeclarativetextedit_p.h"
-#include "private/qdeclarativetextedit_p_p.h"
-
-#include "private/qdeclarativeevents_p_p.h"
-#include <private/qdeclarativeglobal_p.h>
-#include <qdeclarativeinfo.h>
-
-#include <QtCore/qmath.h>
-
-#include <private/qtextengine_p.h>
-#include <QTextLayout>
-#include <QTextLine>
-#include <QTextDocument>
-#include <QTextObject>
-#include <QGraphicsSceneMouseEvent>
-#include <QDebug>
-#include <QPainter>
-#include <QtGui/QInputPanel>
-
-#include <private/qwidgettextcontrol_p.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \qmlclass TextEdit QDeclarative1TextEdit
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
- \since QtQuick 1.0
- \brief The TextEdit item displays multiple lines of editable formatted text.
- \inherits Item
-
- The TextEdit item displays a block of editable, formatted text.
-
- It can display both plain and rich text. For example:
-
- \qml
-TextEdit {
- width: 240
- text: "<b>Hello</b> <i>World!</i>"
- font.family: "Helvetica"
- font.pointSize: 20
- color: "blue"
- focus: true
-}
- \endqml
-
- \image declarative-textedit.gif
-
- Setting \l {Item::focus}{focus} to \c true enables the TextEdit item to receive keyboard focus.
-
- Note that the TextEdit does not implement scrolling, following the cursor, or other behaviors specific
- to a look-and-feel. For example, to add flickable scrolling that follows the cursor:
-
- \snippet snippets/declarative/texteditor.qml 0
-
- A particular look-and-feel might use smooth scrolling (eg. using SmoothedFollow), might have a visible
- scrollbar, or a scrollbar that fades in to show location, etc.
-
- Clipboard support is provided by the cut(), copy(), and paste() functions, and the selection can
- be handled in a traditional "mouse" mechanism by setting selectByMouse, or handled completely
- from QML by manipulating selectionStart and selectionEnd, or using selectAll() or selectWord().
-
- You can translate between cursor positions (characters from the start of the document) and pixel
- points using positionAt() and positionToRectangle().
-
- \sa Text, TextInput, {declarative/text/textselection}{Text Selection example}
-*/
-
-/*!
- \qmlsignal QtQuick1::TextEdit::onLinkActivated(string link)
- \since Quick 1.1
-
- This handler is called when the user clicks on a link embedded in the text.
- The link must be in rich text or HTML format and the
- \a link string provides access to the particular link.
-*/
-QDeclarative1TextEdit::QDeclarative1TextEdit(QDeclarativeItem *parent)
-: QDeclarative1ImplicitSizePaintedItem(*(new QDeclarative1TextEditPrivate), parent)
-{
- Q_D(QDeclarative1TextEdit);
- d->init();
-}
-
-QString QDeclarative1TextEdit::text() const
-{
- Q_D(const QDeclarative1TextEdit);
-
-#ifndef QT_NO_TEXTHTMLPARSER
- if (d->richText)
- return d->control->toHtml();
- else
-#endif
- return d->control->toPlainText();
-}
-
-/*!
- \qmlproperty string QtQuick1::TextEdit::font.family
-
- Sets the family name of the font.
-
- The family name is case insensitive and may optionally include a foundry name, e.g. "Helvetica [Cronyx]".
- If the family is available from more than one foundry and the foundry isn't specified, an arbitrary foundry is chosen.
- If the family isn't available a family will be set using the font matching algorithm.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::font.bold
-
- Sets whether the font weight is bold.
-*/
-
-/*!
- \qmlproperty enumeration QtQuick1::TextEdit::font.weight
-
- Sets the font's weight.
-
- The weight can be one of:
- \list
- \o Font.Light
- \o Font.Normal - the default
- \o Font.DemiBold
- \o Font.Bold
- \o Font.Black
- \endlist
-
- \qml
- TextEdit { text: "Hello"; font.weight: Font.DemiBold }
- \endqml
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::font.italic
-
- Sets whether the font has an italic style.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::font.underline
-
- Sets whether the text is underlined.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::font.strikeout
-
- Sets whether the font has a strikeout style.
-*/
-
-/*!
- \qmlproperty real QtQuick1::TextEdit::font.pointSize
-
- Sets the font size in points. The point size must be greater than zero.
-*/
-
-/*!
- \qmlproperty int QtQuick1::TextEdit::font.pixelSize
-
- Sets the font size in pixels.
-
- Using this function makes the font device dependent. Use
- \l{TextEdit::font.pointSize} to set the size of the font in a
- device independent manner.
-*/
-
-/*!
- \qmlproperty real QtQuick1::TextEdit::font.letterSpacing
-
- Sets the letter spacing for the font.
-
- Letter spacing changes the default spacing between individual letters in the font.
- A positive value increases the letter spacing by the corresponding pixels; a negative value decreases the spacing.
-*/
-
-/*!
- \qmlproperty real QtQuick1::TextEdit::font.wordSpacing
-
- Sets the word spacing for the font.
-
- Word spacing changes the default spacing between individual words.
- A positive value increases the word spacing by a corresponding amount of pixels,
- while a negative value decreases the inter-word spacing accordingly.
-*/
-
-/*!
- \qmlproperty enumeration QtQuick1::TextEdit::font.capitalization
-
- Sets the capitalization for the text.
-
- \list
- \o Font.MixedCase - This is the normal text rendering option where no capitalization change is applied.
- \o Font.AllUppercase - This alters the text to be rendered in all uppercase type.
- \o Font.AllLowercase - This alters the text to be rendered in all lowercase type.
- \o Font.SmallCaps - This alters the text to be rendered in small-caps type.
- \o Font.Capitalize - This alters the text to be rendered with the first character of each word as an uppercase character.
- \endlist
-
- \qml
- TextEdit { text: "Hello"; font.capitalization: Font.AllLowercase }
- \endqml
-*/
-
-/*!
- \qmlproperty string QtQuick1::TextEdit::text
-
- The text to display. If the text format is AutoText the text edit will
- automatically determine whether the text should be treated as
- rich text. This determination is made using Qt::mightBeRichText().
-*/
-void QDeclarative1TextEdit::setText(const QString &text)
-{
- Q_D(QDeclarative1TextEdit);
- if (QDeclarative1TextEdit::text() == text)
- return;
-
- d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(text));
- if (d->richText) {
-#ifndef QT_NO_TEXTHTMLPARSER
- d->control->setHtml(text);
-#else
- d->control->setPlainText(text);
-#endif
- } else {
- d->control->setPlainText(text);
- }
- q_textChanged();
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::TextEdit::textFormat
-
- The way the text property should be displayed.
-
- \list
- \o TextEdit.AutoText
- \o TextEdit.PlainText
- \o TextEdit.RichText
- \endlist
-
- The default is TextEdit.AutoText. If the text format is TextEdit.AutoText the text edit
- will automatically determine whether the text should be treated as
- rich text. This determination is made using Qt::mightBeRichText().
-
- \table
- \row
- \o
- \qml
-Column {
- TextEdit {
- font.pointSize: 24
- text: "<b>Hello</b> <i>World!</i>"
- }
- TextEdit {
- font.pointSize: 24
- textFormat: TextEdit.RichText
- text: "<b>Hello</b> <i>World!</i>"
- }
- TextEdit {
- font.pointSize: 24
- textFormat: TextEdit.PlainText
- text: "<b>Hello</b> <i>World!</i>"
- }
-}
- \endqml
- \o \image declarative-textformat.png
- \endtable
-*/
-QDeclarative1TextEdit::TextFormat QDeclarative1TextEdit::textFormat() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->format;
-}
-
-void QDeclarative1TextEdit::setTextFormat(TextFormat format)
-{
- Q_D(QDeclarative1TextEdit);
- if (format == d->format)
- return;
- bool wasRich = d->richText;
- d->richText = format == RichText || (format == AutoText && Qt::mightBeRichText(d->text));
-
- if (wasRich && !d->richText) {
- d->control->setPlainText(d->text);
- updateSize();
- } else if (!wasRich && d->richText) {
-#ifndef QT_NO_TEXTHTMLPARSER
- d->control->setHtml(d->text);
-#else
- d->control->setPlainText(d->text);
-#endif
- updateSize();
- }
- d->format = format;
- d->control->setAcceptRichText(d->format != PlainText);
- emit textFormatChanged(d->format);
-}
-
-QFont QDeclarative1TextEdit::font() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->sourceFont;
-}
-
-void QDeclarative1TextEdit::setFont(const QFont &font)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->sourceFont == font)
- return;
-
- d->sourceFont = font;
- QFont oldFont = d->font;
- d->font = font;
- if (d->font.pointSizeF() != -1) {
- // 0.5pt resolution
- qreal size = qRound(d->font.pointSizeF()*2.0);
- d->font.setPointSizeF(size/2.0);
- }
-
- if (oldFont != d->font) {
- clearCache();
- d->document->setDefaultFont(d->font);
- if(d->cursor){
- d->cursor->setHeight(QFontMetrics(d->font).height());
- moveCursorDelegate();
- }
- updateSize();
- update();
- }
- emit fontChanged(d->sourceFont);
-}
-
-/*!
- \qmlproperty color QtQuick1::TextEdit::color
-
- The text color.
-
- \qml
- // green text using hexadecimal notation
- TextEdit { color: "#00FF00" }
- \endqml
-
- \qml
- // steelblue text using SVG color name
- TextEdit { color: "steelblue" }
- \endqml
-*/
-QColor QDeclarative1TextEdit::color() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->color;
-}
-
-void QDeclarative1TextEdit::setColor(const QColor &color)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->color == color)
- return;
-
- clearCache();
- d->color = color;
- QPalette pal = d->control->palette();
- pal.setColor(QPalette::Text, color);
- d->control->setPalette(pal);
- update();
- emit colorChanged(d->color);
-}
-
-/*!
- \qmlproperty color QtQuick1::TextEdit::selectionColor
-
- The text highlight color, used behind selections.
-*/
-QColor QDeclarative1TextEdit::selectionColor() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->selectionColor;
-}
-
-void QDeclarative1TextEdit::setSelectionColor(const QColor &color)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->selectionColor == color)
- return;
-
- clearCache();
- d->selectionColor = color;
- QPalette pal = d->control->palette();
- pal.setColor(QPalette::Highlight, color);
- d->control->setPalette(pal);
- update();
- emit selectionColorChanged(d->selectionColor);
-}
-
-/*!
- \qmlproperty color QtQuick1::TextEdit::selectedTextColor
-
- The selected text color, used in selections.
-*/
-QColor QDeclarative1TextEdit::selectedTextColor() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->selectedTextColor;
-}
-
-void QDeclarative1TextEdit::setSelectedTextColor(const QColor &color)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->selectedTextColor == color)
- return;
-
- clearCache();
- d->selectedTextColor = color;
- QPalette pal = d->control->palette();
- pal.setColor(QPalette::HighlightedText, color);
- d->control->setPalette(pal);
- update();
- emit selectedTextColorChanged(d->selectedTextColor);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::TextEdit::horizontalAlignment
- \qmlproperty enumeration QtQuick1::TextEdit::verticalAlignment
- \qmlproperty enumeration QtQuick1::TextEdit::effectiveHorizontalAlignment
-
- Sets the horizontal and vertical alignment of the text within the TextEdit item's
- width and height. By default, the text alignment follows the natural alignment
- of the text, for example text that is read from left to right will be aligned to
- the left.
-
- Valid values for \c horizontalAlignment are:
- \list
- \o TextEdit.AlignLeft (default)
- \o TextEdit.AlignRight
- \o TextEdit.AlignHCenter
- \o TextEdit.AlignJustify
- \endlist
-
- Valid values for \c verticalAlignment are:
- \list
- \o TextEdit.AlignTop (default)
- \o TextEdit.AlignBottom
- \o TextEdit.AlignVCenter
- \endlist
-
- When using the attached property LayoutMirroring::enabled to mirror application
- layouts, the horizontal alignment of text will also be mirrored. However, the property
- \c horizontalAlignment will remain unchanged. To query the effective horizontal alignment
- of TextEdit, use the read-only property \c effectiveHorizontalAlignment.
-*/
-QDeclarative1TextEdit::HAlignment QDeclarative1TextEdit::hAlign() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->hAlign;
-}
-
-void QDeclarative1TextEdit::setHAlign(HAlignment align)
-{
- Q_D(QDeclarative1TextEdit);
- bool forceAlign = d->hAlignImplicit && d->effectiveLayoutMirror;
- d->hAlignImplicit = false;
- if (d->setHAlign(align, forceAlign) && isComponentComplete()) {
- d->updateDefaultTextOption();
- updateSize();
- }
-}
-
-void QDeclarative1TextEdit::resetHAlign()
-{
- Q_D(QDeclarative1TextEdit);
- d->hAlignImplicit = true;
- if (d->determineHorizontalAlignment() && isComponentComplete()) {
- d->updateDefaultTextOption();
- updateSize();
- }
-}
-
-QDeclarative1TextEdit::HAlignment QDeclarative1TextEdit::effectiveHAlign() const
-{
- Q_D(const QDeclarative1TextEdit);
- QDeclarative1TextEdit::HAlignment effectiveAlignment = d->hAlign;
- if (!d->hAlignImplicit && d->effectiveLayoutMirror) {
- switch (d->hAlign) {
- case QDeclarative1TextEdit::AlignLeft:
- effectiveAlignment = QDeclarative1TextEdit::AlignRight;
- break;
- case QDeclarative1TextEdit::AlignRight:
- effectiveAlignment = QDeclarative1TextEdit::AlignLeft;
- break;
- default:
- break;
- }
- }
- return effectiveAlignment;
-}
-
-bool QDeclarative1TextEditPrivate::setHAlign(QDeclarative1TextEdit::HAlignment alignment, bool forceAlign)
-{
- Q_Q(QDeclarative1TextEdit);
- if (hAlign != alignment || forceAlign) {
- QDeclarative1TextEdit::HAlignment oldEffectiveHAlign = q->effectiveHAlign();
- hAlign = alignment;
- emit q->horizontalAlignmentChanged(alignment);
- if (oldEffectiveHAlign != q->effectiveHAlign())
- emit q->effectiveHorizontalAlignmentChanged();
- return true;
- }
- return false;
-}
-
-bool QDeclarative1TextEditPrivate::determineHorizontalAlignment()
-{
- Q_Q(QDeclarative1TextEdit);
- if (hAlignImplicit && q->isComponentComplete()) {
- bool alignToRight;
- if (text.isEmpty()) {
- QTextCursor cursor = control->textCursor();
- const QString preeditText = cursor.block().isValid()
- ? control->textCursor().block().layout()->preeditAreaText()
- : QString();
- alignToRight = preeditText.isEmpty()
- ? qApp->inputPanel()->inputDirection() == Qt::RightToLeft
- : preeditText.isRightToLeft();
- } else {
- alignToRight = rightToLeftText;
- }
- return setHAlign(alignToRight ? QDeclarative1TextEdit::AlignRight : QDeclarative1TextEdit::AlignLeft);
- }
- return false;
-}
-
-void QDeclarative1TextEditPrivate::mirrorChange()
-{
- Q_Q(QDeclarative1TextEdit);
- if (q->isComponentComplete()) {
- if (!hAlignImplicit && (hAlign == QDeclarative1TextEdit::AlignRight || hAlign == QDeclarative1TextEdit::AlignLeft)) {
- updateDefaultTextOption();
- q->updateSize();
- emit q->effectiveHorizontalAlignmentChanged();
- }
- }
-}
-
-QDeclarative1TextEdit::VAlignment QDeclarative1TextEdit::vAlign() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->vAlign;
-}
-
-void QDeclarative1TextEdit::setVAlign(QDeclarative1TextEdit::VAlignment alignment)
-{
- Q_D(QDeclarative1TextEdit);
- if (alignment == d->vAlign)
- return;
- d->vAlign = alignment;
- d->updateDefaultTextOption();
- updateSize();
- moveCursorDelegate();
- emit verticalAlignmentChanged(d->vAlign);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::TextEdit::wrapMode
-
- Set this property to wrap the text to the TextEdit item's width.
- The text will only wrap if an explicit width has been set.
-
- \list
- \o TextEdit.NoWrap - no wrapping will be performed. If the text contains insufficient newlines, then implicitWidth will exceed a set width.
- \o TextEdit.WordWrap - wrapping is done on word boundaries only. If a word is too long, implicitWidth will exceed a set width.
- \o TextEdit.WrapAnywhere - wrapping is done at any point on a line, even if it occurs in the middle of a word.
- \o TextEdit.Wrap - if possible, wrapping occurs at a word boundary; otherwise it will occur at the appropriate point on the line, even in the middle of a word.
- \endlist
-
- The default is TextEdit.NoWrap. If you set a width, consider using TextEdit.Wrap.
-*/
-QDeclarative1TextEdit::WrapMode QDeclarative1TextEdit::wrapMode() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->wrapMode;
-}
-
-void QDeclarative1TextEdit::setWrapMode(WrapMode mode)
-{
- Q_D(QDeclarative1TextEdit);
- if (mode == d->wrapMode)
- return;
- d->wrapMode = mode;
- d->updateDefaultTextOption();
- updateSize();
- emit wrapModeChanged();
-}
-
-/*!
- \qmlproperty int QtQuick1::TextEdit::lineCount
- \since Quick 1.1
-
- Returns the total number of lines in the textEdit item.
-*/
-int QDeclarative1TextEdit::lineCount() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->lineCount;
-}
-
-/*!
- \qmlproperty real QtQuick1::TextEdit::paintedWidth
-
- Returns the width of the text, including the width past the width
- which is covered due to insufficient wrapping if \l wrapMode is set.
-*/
-qreal QDeclarative1TextEdit::paintedWidth() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->paintedSize.width();
-}
-
-/*!
- \qmlproperty real QtQuick1::TextEdit::paintedHeight
-
- Returns the height of the text, including the height past the height
- that is covered if the text does not fit within the set height.
-*/
-qreal QDeclarative1TextEdit::paintedHeight() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->paintedSize.height();
-}
-
-/*!
- \qmlmethod rectangle QtQuick1::TextEdit::positionToRectangle(position)
-
- Returns the rectangle at the given \a position in the text. The x, y,
- and height properties correspond to the cursor that would describe
- that position.
-*/
-QRectF QDeclarative1TextEdit::positionToRectangle(int pos) const
-{
- Q_D(const QDeclarative1TextEdit);
- QTextCursor c(d->document);
- c.setPosition(pos);
- return d->control->cursorRect(c);
-
-}
-
-/*!
- \qmlmethod int QtQuick1::TextEdit::positionAt(int x, int y)
-
- Returns the text position closest to pixel position (\a x, \a y).
-
- Position 0 is before the first character, position 1 is after the first character
- but before the second, and so on until position \l {text}.length, which is after all characters.
-*/
-int QDeclarative1TextEdit::positionAt(int x, int y) const
-{
- Q_D(const QDeclarative1TextEdit);
- int r = d->document->documentLayout()->hitTest(QPoint(x,y-d->yoff), Qt::FuzzyHit);
- QTextCursor cursor = d->control->textCursor();
- if (r > cursor.position()) {
- // The cursor position includes positions within the preedit text, but only positions in the
- // same text block are offset so it is possible to get a position that is either part of the
- // preedit or the next text block.
- QTextLayout *layout = cursor.block().layout();
- const int preeditLength = layout
- ? layout->preeditAreaText().length()
- : 0;
- if (preeditLength > 0
- && d->document->documentLayout()->blockBoundingRect(cursor.block()).contains(x,y-d->yoff)) {
- r = r > cursor.position() + preeditLength
- ? r - preeditLength
- : cursor.position();
- }
- }
- return r;
-}
-
-void QDeclarative1TextEdit::moveCursorSelection(int pos)
-{
- //Note that this is the same as setCursorPosition but with the KeepAnchor flag set
- Q_D(QDeclarative1TextEdit);
- QTextCursor cursor = d->control->textCursor();
- if (cursor.position() == pos)
- return;
- cursor.setPosition(pos, QTextCursor::KeepAnchor);
- d->control->setTextCursor(cursor);
-}
-
-/*!
- \qmlmethod void QtQuick1::TextEdit::moveCursorSelection(int position, SelectionMode mode = TextEdit.SelectCharacters)
- \since Quick 1.1
-
- Moves the cursor to \a position and updates the selection according to the optional \a mode
- parameter. (To only move the cursor, set the \l cursorPosition property.)
-
- When this method is called it additionally sets either the
- selectionStart or the selectionEnd (whichever was at the previous cursor position)
- to the specified position. This allows you to easily extend and contract the selected
- text range.
-
- The selection mode specifies whether the selection is updated on a per character or a per word
- basis. If not specified the selection mode will default to TextEdit.SelectCharacters.
-
- \list
- \o TextEdit.SelectCharacters - Sets either the selectionStart or selectionEnd (whichever was at
- the previous cursor position) to the specified position.
- \o TextEdit.SelectWords - Sets the selectionStart and selectionEnd to include all
- words between the specified postion and the previous cursor position. Words partially in the
- range are included.
- \endlist
-
- For example, take this sequence of calls:
-
- \code
- cursorPosition = 5
- moveCursorSelection(9, TextEdit.SelectCharacters)
- moveCursorSelection(7, TextEdit.SelectCharacters)
- \endcode
-
- This moves the cursor to position 5, extend the selection end from 5 to 9
- and then retract the selection end from 9 to 7, leaving the text from position 5 to 7
- selected (the 6th and 7th characters).
-
- The same sequence with TextEdit.SelectWords will extend the selection start to a word boundary
- before or on position 5 and extend the selection end to a word boundary on or past position 9.
-*/
-void QDeclarative1TextEdit::moveCursorSelection(int pos, SelectionMode mode)
-{
- Q_D(QDeclarative1TextEdit);
- QTextCursor cursor = d->control->textCursor();
- if (cursor.position() == pos)
- return;
- if (mode == SelectCharacters) {
- cursor.setPosition(pos, QTextCursor::KeepAnchor);
- } else if (cursor.anchor() < pos || (cursor.anchor() == pos && cursor.position() < pos)) {
- if (cursor.anchor() > cursor.position()) {
- cursor.setPosition(cursor.anchor(), QTextCursor::MoveAnchor);
- cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::KeepAnchor);
- if (cursor.position() == cursor.anchor())
- cursor.movePosition(QTextCursor::PreviousWord, QTextCursor::MoveAnchor);
- else
- cursor.setPosition(cursor.position(), QTextCursor::MoveAnchor);
- } else {
- cursor.setPosition(cursor.anchor(), QTextCursor::MoveAnchor);
- cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::MoveAnchor);
- }
-
- cursor.setPosition(pos, QTextCursor::KeepAnchor);
- cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::KeepAnchor);
- if (cursor.position() != pos)
- cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
- } else if (cursor.anchor() > pos || (cursor.anchor() == pos && cursor.position() > pos)) {
- if (cursor.anchor() < cursor.position()) {
- cursor.setPosition(cursor.anchor(), QTextCursor::MoveAnchor);
- cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::MoveAnchor);
- } else {
- cursor.setPosition(cursor.anchor(), QTextCursor::MoveAnchor);
- cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor);
- cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
- if (cursor.position() != cursor.anchor()) {
- cursor.setPosition(cursor.anchor(), QTextCursor::MoveAnchor);
- cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::MoveAnchor);
- }
- }
-
- cursor.setPosition(pos, QTextCursor::KeepAnchor);
- cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
- if (cursor.position() != pos) {
- cursor.movePosition(QTextCursor::PreviousCharacter, QTextCursor::KeepAnchor);
- cursor.movePosition(QTextCursor::StartOfWord, QTextCursor::KeepAnchor);
- }
- }
- d->control->setTextCursor(cursor);
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::cursorVisible
- If true the text edit shows a cursor.
-
- This property is set and unset when the text edit gets active focus, but it can also
- be set directly (useful, for example, if a KeyProxy might forward keys to it).
-*/
-bool QDeclarative1TextEdit::isCursorVisible() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->cursorVisible;
-}
-
-void QDeclarative1TextEdit::setCursorVisible(bool on)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->cursorVisible == on)
- return;
- d->cursorVisible = on;
- QFocusEvent focusEvent(on ? QEvent::FocusIn : QEvent::FocusOut);
- if (!on && !d->persistentSelection)
- d->control->setCursorIsFocusIndicator(true);
- d->control->processEvent(&focusEvent, QPointF(0, -d->yoff));
- emit cursorVisibleChanged(d->cursorVisible);
-}
-
-/*!
- \qmlproperty int QtQuick1::TextEdit::cursorPosition
- The position of the cursor in the TextEdit.
-*/
-int QDeclarative1TextEdit::cursorPosition() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->control->textCursor().position();
-}
-
-void QDeclarative1TextEdit::setCursorPosition(int pos)
-{
- Q_D(QDeclarative1TextEdit);
- if (pos < 0 || pos > d->text.length())
- return;
- QTextCursor cursor = d->control->textCursor();
- if (cursor.position() == pos && cursor.anchor() == pos)
- return;
- cursor.setPosition(pos);
- d->control->setTextCursor(cursor);
-}
-
-/*!
- \qmlproperty Component QtQuick1::TextEdit::cursorDelegate
- The delegate for the cursor in the TextEdit.
-
- If you set a cursorDelegate for a TextEdit, this delegate will be used for
- drawing the cursor instead of the standard cursor. An instance of the
- delegate will be created and managed by the text edit when a cursor is
- needed, and the x and y properties of delegate instance will be set so as
- to be one pixel before the top left of the current character.
-
- Note that the root item of the delegate component must be a QDeclarativeItem or
- QDeclarativeItem derived item.
-*/
-QDeclarativeComponent* QDeclarative1TextEdit::cursorDelegate() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->cursorComponent;
-}
-
-void QDeclarative1TextEdit::setCursorDelegate(QDeclarativeComponent* c)
-{
- Q_D(QDeclarative1TextEdit);
- if(d->cursorComponent){
- if(d->cursor){
- d->control->setCursorWidth(-1);
- dirtyCache(cursorRectangle());
- delete d->cursor;
- d->cursor = 0;
- }
- }
- d->cursorComponent = c;
- if(c && c->isReady()){
- loadCursorDelegate();
- }else{
- if(c)
- connect(c, SIGNAL(statusChanged()),
- this, SLOT(loadCursorDelegate()));
- }
-
- emit cursorDelegateChanged();
-}
-
-void QDeclarative1TextEdit::loadCursorDelegate()
-{
- Q_D(QDeclarative1TextEdit);
- if(d->cursorComponent->isLoading())
- return;
- d->cursor = qobject_cast<QDeclarativeItem*>(d->cursorComponent->create(qmlContext(this)));
- if(d->cursor){
- d->control->setCursorWidth(0);
- dirtyCache(cursorRectangle());
- QDeclarative_setParent_noEvent(d->cursor, this);
- d->cursor->setParentItem(this);
- d->cursor->setHeight(QFontMetrics(d->font).height());
- moveCursorDelegate();
- }else{
- qmlInfo(this) << "Error loading cursor delegate.";
- }
-}
-
-/*!
- \qmlproperty int QtQuick1::TextEdit::selectionStart
-
- The cursor position before the first character in the current selection.
-
- This property is read-only. To change the selection, use select(start,end),
- selectAll(), or selectWord().
-
- \sa selectionEnd, cursorPosition, selectedText
-*/
-int QDeclarative1TextEdit::selectionStart() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->control->textCursor().selectionStart();
-}
-
-/*!
- \qmlproperty int QtQuick1::TextEdit::selectionEnd
-
- The cursor position after the last character in the current selection.
-
- This property is read-only. To change the selection, use select(start,end),
- selectAll(), or selectWord().
-
- \sa selectionStart, cursorPosition, selectedText
-*/
-int QDeclarative1TextEdit::selectionEnd() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->control->textCursor().selectionEnd();
-}
-
-/*!
- \qmlproperty string QtQuick1::TextEdit::selectedText
-
- This read-only property provides the text currently selected in the
- text edit.
-
- It is equivalent to the following snippet, but is faster and easier
- to use.
- \code
- //myTextEdit is the id of the TextEdit
- myTextEdit.text.toString().substring(myTextEdit.selectionStart,
- myTextEdit.selectionEnd);
- \endcode
-*/
-QString QDeclarative1TextEdit::selectedText() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->control->textCursor().selectedText();
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::activeFocusOnPress
-
- Whether the TextEdit should gain active focus on a mouse press. By default this is
- set to true.
-*/
-bool QDeclarative1TextEdit::focusOnPress() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->focusOnPress;
-}
-
-void QDeclarative1TextEdit::setFocusOnPress(bool on)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->focusOnPress == on)
- return;
- d->focusOnPress = on;
- emit activeFocusOnPressChanged(d->focusOnPress);
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::persistentSelection
-
- Whether the TextEdit should keep the selection visible when it loses active focus to another
- item in the scene. By default this is set to true;
-*/
-bool QDeclarative1TextEdit::persistentSelection() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->persistentSelection;
-}
-
-void QDeclarative1TextEdit::setPersistentSelection(bool on)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->persistentSelection == on)
- return;
- d->persistentSelection = on;
- emit persistentSelectionChanged(d->persistentSelection);
-}
-
-/*
- \qmlproperty real QtQuick1::TextEdit::textMargin
-
- The margin, in pixels, around the text in the TextEdit.
-*/
-qreal QDeclarative1TextEdit::textMargin() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->textMargin;
-}
-
-void QDeclarative1TextEdit::setTextMargin(qreal margin)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->textMargin == margin)
- return;
- d->textMargin = margin;
- d->document->setDocumentMargin(d->textMargin);
- emit textMarginChanged(d->textMargin);
-}
-
-void QDeclarative1TextEdit::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- if (newGeometry.width() != oldGeometry.width())
- updateSize();
- QDeclarative1PaintedItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-/*!
- Ensures any delayed caching or data loading the class
- needs to performed is complete.
-*/
-void QDeclarative1TextEdit::componentComplete()
-{
- Q_D(QDeclarative1TextEdit);
- QDeclarative1PaintedItem::componentComplete();
- if (d->dirty) {
- d->determineHorizontalAlignment();
- d->updateDefaultTextOption();
- updateSize();
- d->dirty = false;
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::selectByMouse
-
- Defaults to false.
-
- If true, the user can use the mouse to select text in some
- platform-specific way. Note that for some platforms this may
- not be an appropriate interaction (eg. may conflict with how
- the text needs to behave inside a Flickable.
-*/
-bool QDeclarative1TextEdit::selectByMouse() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->selectByMouse;
-}
-
-void QDeclarative1TextEdit::setSelectByMouse(bool on)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->selectByMouse != on) {
- d->selectByMouse = on;
- setKeepMouseGrab(on);
- if (on)
- setTextInteractionFlags(d->control->textInteractionFlags() | Qt::TextSelectableByMouse);
- else
- setTextInteractionFlags(d->control->textInteractionFlags() & ~Qt::TextSelectableByMouse);
- emit selectByMouseChanged(on);
- }
-}
-
-
-/*!
- \qmlproperty enum QtQuick1::TextEdit::mouseSelectionMode
- \since Quick 1.1
-
- Specifies how text should be selected using a mouse.
-
- \list
- \o TextEdit.SelectCharacters - The selection is updated with individual characters. (Default)
- \o TextEdit.SelectWords - The selection is updated with whole words.
- \endlist
-
- This property only applies when \l selectByMouse is true.
-*/
-
-QDeclarative1TextEdit::SelectionMode QDeclarative1TextEdit::mouseSelectionMode() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->mouseSelectionMode;
-}
-
-void QDeclarative1TextEdit::setMouseSelectionMode(SelectionMode mode)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->mouseSelectionMode != mode) {
- d->mouseSelectionMode = mode;
- d->control->setWordSelectionEnabled(mode == SelectWords);
- emit mouseSelectionModeChanged(mode);
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::readOnly
-
- Whether the user can interact with the TextEdit item. If this
- property is set to true the text cannot be edited by user interaction.
-
- By default this property is false.
-*/
-void QDeclarative1TextEdit::setReadOnly(bool r)
-{
- Q_D(QDeclarative1TextEdit);
- if (r == isReadOnly())
- return;
-
- setFlag(QGraphicsItem::ItemAcceptsInputMethod, !r);
-
- Qt::TextInteractionFlags flags = Qt::LinksAccessibleByMouse;
- if (d->selectByMouse)
- flags = flags | Qt::TextSelectableByMouse;
- if (!r)
- flags = flags | Qt::TextSelectableByKeyboard | Qt::TextEditable;
- d->control->setTextInteractionFlags(flags);
- if (!r)
- d->control->moveCursor(QTextCursor::End);
-
- emit readOnlyChanged(r);
-}
-
-bool QDeclarative1TextEdit::isReadOnly() const
-{
- Q_D(const QDeclarative1TextEdit);
- return !(d->control->textInteractionFlags() & Qt::TextEditable);
-}
-
-/*!
- Sets how the text edit should interact with user input to the given
- \a flags.
-*/
-void QDeclarative1TextEdit::setTextInteractionFlags(Qt::TextInteractionFlags flags)
-{
- Q_D(QDeclarative1TextEdit);
- d->control->setTextInteractionFlags(flags);
-}
-
-/*!
- Returns the flags specifying how the text edit should interact
- with user input.
-*/
-Qt::TextInteractionFlags QDeclarative1TextEdit::textInteractionFlags() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->control->textInteractionFlags();
-}
-
-/*!
- \qmlproperty rectangle QtQuick1::TextEdit::cursorRectangle
-
- The rectangle where the text cursor is rendered
- within the text edit. Read-only.
-*/
-QRect QDeclarative1TextEdit::cursorRectangle() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->control->cursorRect().toRect().translated(0,d->yoff);
-}
-
-
-/*!
-\overload
-Handles the given \a event.
-*/
-bool QDeclarative1TextEdit::event(QEvent *event)
-{
- Q_D(QDeclarative1TextEdit);
- if (event->type() == QEvent::ShortcutOverride) {
- d->control->processEvent(event, QPointF(0, -d->yoff));
- return event->isAccepted();
- }
- return QDeclarative1PaintedItem::event(event);
-}
-
-/*!
-\overload
-Handles the given key \a event.
-*/
-void QDeclarative1TextEdit::keyPressEvent(QKeyEvent *event)
-{
- Q_D(QDeclarative1TextEdit);
- keyPressPreHandler(event);
- if (!event->isAccepted())
- d->control->processEvent(event, QPointF(0, -d->yoff));
- if (!event->isAccepted())
- QDeclarative1PaintedItem::keyPressEvent(event);
-}
-
-/*!
-\overload
-Handles the given key \a event.
-*/
-void QDeclarative1TextEdit::keyReleaseEvent(QKeyEvent *event)
-{
- Q_D(QDeclarative1TextEdit);
- keyReleasePreHandler(event);
- if (!event->isAccepted())
- d->control->processEvent(event, QPointF(0, -d->yoff));
- if (!event->isAccepted())
- QDeclarative1PaintedItem::keyReleaseEvent(event);
-}
-
-void QDeclarative1TextEditPrivate::focusChanged(bool hasFocus)
-{
- Q_Q(QDeclarative1TextEdit);
- q->setCursorVisible(hasFocus && scene && scene->hasFocus());
- QDeclarativeItemPrivate::focusChanged(hasFocus);
-}
-
-/*!
- \qmlmethod void QtQuick1::TextEdit::deselect()
- \since Quick 1.1
-
- Removes active text selection.
-*/
-void QDeclarative1TextEdit::deselect()
-{
- Q_D(QDeclarative1TextEdit);
- QTextCursor c = d->control->textCursor();
- c.clearSelection();
- d->control->setTextCursor(c);
-}
-
-/*!
- \qmlmethod void QtQuick1::TextEdit::selectAll()
-
- Causes all text to be selected.
-*/
-void QDeclarative1TextEdit::selectAll()
-{
- Q_D(QDeclarative1TextEdit);
- d->control->selectAll();
-}
-
-/*!
- \qmlmethod void QtQuick1::TextEdit::selectWord()
-
- Causes the word closest to the current cursor position to be selected.
-*/
-void QDeclarative1TextEdit::selectWord()
-{
- Q_D(QDeclarative1TextEdit);
- QTextCursor c = d->control->textCursor();
- c.select(QTextCursor::WordUnderCursor);
- d->control->setTextCursor(c);
-}
-
-/*!
- \qmlmethod void QtQuick1::TextEdit::select(int start, int end)
-
- Causes the text from \a start to \a end to be selected.
-
- If either start or end is out of range, the selection is not changed.
-
- After calling this, selectionStart will become the lesser
- and selectionEnd will become the greater (regardless of the order passed
- to this method).
-
- \sa selectionStart, selectionEnd
-*/
-void QDeclarative1TextEdit::select(int start, int end)
-{
- Q_D(QDeclarative1TextEdit);
- if (start < 0 || end < 0 || start > d->text.length() || end > d->text.length())
- return;
- QTextCursor cursor = d->control->textCursor();
- cursor.beginEditBlock();
- cursor.setPosition(start, QTextCursor::MoveAnchor);
- cursor.setPosition(end, QTextCursor::KeepAnchor);
- cursor.endEditBlock();
- d->control->setTextCursor(cursor);
-
- // QTBUG-11100
- updateSelectionMarkers();
-}
-
-/*!
- \qmlmethod void QtQuick1::TextEdit::isRightToLeft(int start, int end)
-
- Returns true if the natural reading direction of the editor text
- found between positions \a start and \a end is right to left.
-*/
-bool QDeclarative1TextEdit::isRightToLeft(int start, int end)
-{
- Q_D(QDeclarative1TextEdit);
- if (start > end) {
- qmlInfo(this) << "isRightToLeft(start, end) called with the end property being smaller than the start.";
- return false;
- } else {
- return d->text.mid(start, end - start).isRightToLeft();
- }
-}
-
-#ifndef QT_NO_CLIPBOARD
-/*!
- \qmlmethod QtQuick1::TextEdit::cut()
-
- Moves the currently selected text to the system clipboard.
-*/
-void QDeclarative1TextEdit::cut()
-{
- Q_D(QDeclarative1TextEdit);
- d->control->cut();
-}
-
-/*!
- \qmlmethod QtQuick1::TextEdit::copy()
-
- Copies the currently selected text to the system clipboard.
-*/
-void QDeclarative1TextEdit::copy()
-{
- Q_D(QDeclarative1TextEdit);
- d->control->copy();
-}
-
-/*!
- \qmlmethod QtQuick1::TextEdit::paste()
-
- Replaces the currently selected text by the contents of the system clipboard.
-*/
-void QDeclarative1TextEdit::paste()
-{
- Q_D(QDeclarative1TextEdit);
- d->control->paste();
-}
-#endif // QT_NO_CLIPBOARD
-
-/*!
-\overload
-Handles the given mouse \a event.
-*/
-void QDeclarative1TextEdit::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1TextEdit);
- if (d->focusOnPress){
- bool hadActiveFocus = hasActiveFocus();
- forceActiveFocus();
- if (d->showInputPanelOnFocus) {
- if (hasActiveFocus() && hadActiveFocus && !isReadOnly()) {
- // re-open input panel on press if already focused
- openSoftwareInputPanel();
- }
- } else { // show input panel on click
- if (hasActiveFocus() && !hadActiveFocus) {
- d->clickCausedFocus = true;
- }
- }
- }
-
- d->control->processEvent(event, QPointF(0, -d->yoff));
- if (!event->isAccepted())
- QDeclarative1PaintedItem::mousePressEvent(event);
-}
-
-/*!
-\overload
-Handles the given mouse \a event.
-*/
-void QDeclarative1TextEdit::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1TextEdit);
- d->control->processEvent(event, QPointF(0, -d->yoff));
- if (!d->showInputPanelOnFocus) { // input panel on click
- if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->pos())) {
- if (QGraphicsView * view = qobject_cast<QGraphicsView*>(qApp->focusWidget())) {
- if (view->scene() && view->scene() == scene()) {
- qt_widget_private(view)->handleSoftwareInputPanel(event->button(), d->clickCausedFocus);
- }
- }
- }
- }
- d->clickCausedFocus = false;
-
- if (!event->isAccepted())
- QDeclarative1PaintedItem::mouseReleaseEvent(event);
-}
-
-/*!
-\overload
-Handles the given mouse \a event.
-*/
-void QDeclarative1TextEdit::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1TextEdit);
-
- d->control->processEvent(event, QPointF(0, -d->yoff));
- if (!event->isAccepted())
- QDeclarative1PaintedItem::mouseDoubleClickEvent(event);
-
-}
-
-/*!
-\overload
-Handles the given mouse \a event.
-*/
-void QDeclarative1TextEdit::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1TextEdit);
- d->control->processEvent(event, QPointF(0, -d->yoff));
- if (!event->isAccepted())
- QDeclarative1PaintedItem::mouseMoveEvent(event);
-}
-
-/*!
-\overload
-Handles the given input method \a event.
-*/
-void QDeclarative1TextEdit::inputMethodEvent(QInputMethodEvent *event)
-{
- Q_D(QDeclarative1TextEdit);
- const bool wasComposing = isInputMethodComposing();
- d->control->processEvent(event, QPointF(0, -d->yoff));
- if (wasComposing != isInputMethodComposing())
- emit inputMethodComposingChanged();
-}
-
-/*!
-\overload
-Returns the value of the given \a property.
-*/
-QVariant QDeclarative1TextEdit::inputMethodQuery(Qt::InputMethodQuery property) const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->control->inputMethodQuery(property);
-}
-
-/*!
-Draws the contents of the text edit using the given \a painter within
-the given \a bounds.
-*/
-void QDeclarative1TextEdit::drawContents(QPainter *painter, const QRect &bounds)
-{
- Q_D(QDeclarative1TextEdit);
-
- painter->setRenderHint(QPainter::TextAntialiasing, true);
- painter->translate(0,d->yoff);
-
- d->control->drawContents(painter, bounds.translated(0,-d->yoff));
-
- painter->translate(0,-d->yoff);
-}
-
-void QDeclarative1TextEdit::updateImgCache(const QRectF &rf)
-{
- Q_D(const QDeclarative1TextEdit);
- QRect r;
- if (!rf.isValid()) {
- r = QRect(0,0,INT_MAX,INT_MAX);
- } else {
- r = rf.toRect();
- if (r.height() > INT_MAX/2) {
- // Take care of overflow when translating "everything"
- r.setTop(r.y() + d->yoff);
- r.setBottom(INT_MAX/2);
- } else {
- r = r.translated(0,d->yoff);
- }
- }
- dirtyCache(r);
- emit update();
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::smooth
-
- This property holds whether the text is smoothly scaled or transformed.
-
- Smooth filtering gives better visual quality, but is slower. If
- the item is displayed at its natural size, this property has no visual or
- performance effect.
-
- \note Generally scaling artifacts are only visible if the item is stationary on
- the screen. A common pattern when animating an item is to disable smooth
- filtering at the beginning of the animation and reenable it at the conclusion.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::canPaste
- \since QtQuick 1.1
-
- Returns true if the TextEdit is writable and the content of the clipboard is
- suitable for pasting into the TextEdit.
-*/
-bool QDeclarative1TextEdit::canPaste() const
-{
- Q_D(const QDeclarative1TextEdit);
- return d->canPaste;
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextEdit::inputMethodComposing
-
- \since QtQuick 1.1
-
- This property holds whether the TextEdit has partial text input from an
- input method.
-
- While it is composing an input method may rely on mouse or key events from
- the TextEdit to edit or commit the partial text. This property can be used
- to determine when to disable events handlers that may interfere with the
- correct operation of an input method.
-*/
-bool QDeclarative1TextEdit::isInputMethodComposing() const
-{
- Q_D(const QDeclarative1TextEdit);
- if (QTextLayout *layout = d->control->textCursor().block().layout())
- return layout->preeditAreaText().length() > 0;
- return false;
-}
-
-void QDeclarative1TextEditPrivate::init()
-{
- Q_Q(QDeclarative1TextEdit);
-
- q->setSmooth(smooth);
- q->setAcceptedMouseButtons(Qt::LeftButton);
- q->setFlag(QGraphicsItem::ItemHasNoContents, false);
- q->setFlag(QGraphicsItem::ItemAcceptsInputMethod);
-
- control = new QWidgetTextControl(q);
- control->setIgnoreUnusedNavigationEvents(true);
- control->setTextInteractionFlags(Qt::TextInteractionFlags(Qt::LinksAccessibleByMouse | Qt::TextSelectableByKeyboard | Qt::TextEditable));
- control->setDragEnabled(false);
-
- // QWidgetTextControl follows the default text color
- // defined by the platform, declarative text
- // should be black by default
- QPalette pal = control->palette();
- if (pal.color(QPalette::Text) != color) {
- pal.setColor(QPalette::Text, color);
- control->setPalette(pal);
- }
-
- QObject::connect(control, SIGNAL(updateRequest(QRectF)), q, SLOT(updateImgCache(QRectF)));
-
- QObject::connect(control, SIGNAL(textChanged()), q, SLOT(q_textChanged()));
- QObject::connect(control, SIGNAL(selectionChanged()), q, SIGNAL(selectionChanged()));
- QObject::connect(control, SIGNAL(selectionChanged()), q, SLOT(updateSelectionMarkers()));
- QObject::connect(control, SIGNAL(cursorPositionChanged()), q, SLOT(updateSelectionMarkers()));
- QObject::connect(control, SIGNAL(cursorPositionChanged()), q, SIGNAL(cursorPositionChanged()));
- QObject::connect(control, SIGNAL(microFocusChanged()), q, SLOT(moveCursorDelegate()));
- QObject::connect(control, SIGNAL(linkActivated(QString)), q, SIGNAL(linkActivated(QString)));
-#ifndef QT_NO_CLIPBOARD
- QObject::connect(q, SIGNAL(readOnlyChanged(bool)), q, SLOT(q_canPasteChanged()));
- QObject::connect(QApplication::clipboard(), SIGNAL(dataChanged()), q, SLOT(q_canPasteChanged()));
- canPaste = control->canPaste();
-#endif
-
- document = control->document();
- document->setDefaultFont(font);
- document->setDocumentMargin(textMargin);
- document->setUndoRedoEnabled(false); // flush undo buffer.
- document->setUndoRedoEnabled(true);
- updateDefaultTextOption();
-}
-
-void QDeclarative1TextEdit::q_textChanged()
-{
- Q_D(QDeclarative1TextEdit);
- d->text = text();
- d->rightToLeftText = d->document->begin().layout()->engine()->isRightToLeft();
- d->determineHorizontalAlignment();
- d->updateDefaultTextOption();
- updateSize();
- updateTotalLines();
- emit textChanged(d->text);
-}
-
-void QDeclarative1TextEdit::moveCursorDelegate()
-{
- Q_D(QDeclarative1TextEdit);
- d->determineHorizontalAlignment();
- updateMicroFocus();
- emit cursorRectangleChanged();
- if(!d->cursor)
- return;
- QRectF cursorRect = cursorRectangle();
- d->cursor->setX(cursorRect.x());
- d->cursor->setY(cursorRect.y());
-}
-
-void QDeclarative1TextEdit::updateSelectionMarkers()
-{
- Q_D(QDeclarative1TextEdit);
- if(d->lastSelectionStart != d->control->textCursor().selectionStart()){
- d->lastSelectionStart = d->control->textCursor().selectionStart();
- emit selectionStartChanged();
- }
- if(d->lastSelectionEnd != d->control->textCursor().selectionEnd()){
- d->lastSelectionEnd = d->control->textCursor().selectionEnd();
- emit selectionEndChanged();
- }
-}
-
-QRectF QDeclarative1TextEdit::boundingRect() const
-{
- Q_D(const QDeclarative1TextEdit);
- QRectF r = QDeclarative1PaintedItem::boundingRect();
- int cursorWidth = 1;
- if(d->cursor)
- cursorWidth = d->cursor->width();
- if(!d->document->isEmpty())
- cursorWidth += 3;// ### Need a better way of accounting for space between char and cursor
-
- // Could include font max left/right bearings to either side of rectangle.
-
- r.setRight(r.right() + cursorWidth);
- return r.translated(0,d->yoff);
-}
-
-qreal QDeclarative1TextEditPrivate::implicitWidth() const
-{
- Q_Q(const QDeclarative1TextEdit);
- if (!requireImplicitWidth) {
- // We don't calculate implicitWidth unless it is required.
- // We need to force a size update now to ensure implicitWidth is calculated
- const_cast<QDeclarative1TextEditPrivate*>(this)->requireImplicitWidth = true;
- const_cast<QDeclarative1TextEdit*>(q)->updateSize();
- }
- return mImplicitWidth;
-}
-
-//### we should perhaps be a bit smarter here -- depending on what has changed, we shouldn't
-// need to do all the calculations each time
-void QDeclarative1TextEdit::updateSize()
-{
- Q_D(QDeclarative1TextEdit);
- if (isComponentComplete()) {
- qreal naturalWidth = d->mImplicitWidth;
- // ### assumes that if the width is set, the text will fill to edges
- // ### (unless wrap is false, then clipping will occur)
- if (widthValid()) {
- if (!d->requireImplicitWidth) {
- emit implicitWidthChanged();
- // if the implicitWidth is used, then updateSize() has already been called (recursively)
- if (d->requireImplicitWidth)
- return;
- }
- if (d->requireImplicitWidth) {
- d->document->setTextWidth(-1);
- naturalWidth = d->document->idealWidth();
- }
- if (d->document->textWidth() != width())
- d->document->setTextWidth(width());
- } else {
- d->document->setTextWidth(-1);
- }
- QFontMetrics fm = QFontMetrics(d->font);
- int dy = height();
- dy -= (int)d->document->size().height();
-
- int nyoff;
- if (heightValid()) {
- if (d->vAlign == AlignBottom)
- nyoff = dy;
- else if (d->vAlign == AlignVCenter)
- nyoff = dy/2;
- else
- nyoff = 0;
- } else {
- nyoff = 0;
- }
- if (nyoff != d->yoff) {
- prepareGeometryChange();
- d->yoff = nyoff;
- }
- setBaselineOffset(fm.ascent() + d->yoff + d->textMargin);
-
- //### need to comfirm cost of always setting these
- int newWidth = qCeil(d->document->idealWidth());
- if (!widthValid() && d->document->textWidth() != newWidth)
- d->document->setTextWidth(newWidth); // ### Text does not align if width is not set (QTextDoc bug)
- // ### Setting the implicitWidth triggers another updateSize(), and unless there are bindings nothing has changed.
- if (!widthValid())
- setImplicitWidth(newWidth);
- else if (d->requireImplicitWidth)
- setImplicitWidth(naturalWidth);
- qreal newHeight = d->document->isEmpty() ? fm.height() : (int)d->document->size().height();
- setImplicitHeight(newHeight);
-
- d->paintedSize = QSize(newWidth, newHeight);
- setContentsSize(d->paintedSize);
- emit paintedSizeChanged();
- } else {
- d->dirty = true;
- }
- emit update();
-}
-
-void QDeclarative1TextEdit::updateTotalLines()
-{
- Q_D(QDeclarative1TextEdit);
-
- int subLines = 0;
-
- for (QTextBlock it = d->document->begin(); it != d->document->end(); it = it.next()) {
- QTextLayout *layout = it.layout();
- if (!layout)
- continue;
- subLines += layout->lineCount()-1;
- }
-
- int newTotalLines = d->document->lineCount() + subLines;
- if (d->lineCount != newTotalLines) {
- d->lineCount = newTotalLines;
- emit lineCountChanged();
- }
-}
-
-void QDeclarative1TextEditPrivate::updateDefaultTextOption()
-{
- Q_Q(QDeclarative1TextEdit);
- QTextOption opt = document->defaultTextOption();
- int oldAlignment = opt.alignment();
-
- QDeclarative1TextEdit::HAlignment horizontalAlignment = q->effectiveHAlign();
- if (rightToLeftText) {
- if (horizontalAlignment == QDeclarative1TextEdit::AlignLeft)
- horizontalAlignment = QDeclarative1TextEdit::AlignRight;
- else if (horizontalAlignment == QDeclarative1TextEdit::AlignRight)
- horizontalAlignment = QDeclarative1TextEdit::AlignLeft;
- }
- opt.setAlignment((Qt::Alignment)(int)(horizontalAlignment | vAlign));
-
- QTextOption::WrapMode oldWrapMode = opt.wrapMode();
- opt.setWrapMode(QTextOption::WrapMode(wrapMode));
-
- if (oldWrapMode == opt.wrapMode() && oldAlignment == opt.alignment())
- return;
- document->setDefaultTextOption(opt);
-}
-
-
-/*!
- \qmlmethod void QtQuick1::TextEdit::openSoftwareInputPanel()
-
- Opens software input panels like virtual keyboards for typing, useful for
- customizing when you want the input keyboard to be shown and hidden in
- your application.
-
- By default the opening of input panels follows the platform style.
- The panels are automatically opened when TextEdit element gains active focus. Input panels are
- always closed if no editor has active focus.
-
- You can disable the automatic behavior by setting the property \c activeFocusOnPress to false
- and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement
- the behavior you want.
-
- Only relevant on platforms, which provide virtual keyboards.
-
- \code
- import QtQuick 1.0
- TextEdit {
- id: textEdit
- text: "Hello world!"
- activeFocusOnPress: false
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (!textEdit.activeFocus) {
- textEdit.forceActiveFocus();
- textEdit.openSoftwareInputPanel();
- } else {
- textEdit.focus = false;
- }
- }
- onPressAndHold: textEdit.closeSoftwareInputPanel();
- }
- }
- \endcode
-*/
-void QDeclarative1TextEdit::openSoftwareInputPanel()
-{
- if (qApp) {
- if (QGraphicsView * view = qobject_cast<QGraphicsView*>(qApp->focusWidget())) {
- if (view->scene() && view->scene() == scene()) {
- qApp->inputPanel()->show();
- }
- }
- }
-}
-
-/*!
- \qmlmethod void QtQuick1::TextEdit::closeSoftwareInputPanel()
-
- Closes a software input panel like a virtual keyboard shown on the screen, useful
- for customizing when you want the input keyboard to be shown and hidden in
- your application.
-
- By default the opening of input panels follows the platform style.
- The panels are automatically opened when TextEdit element gains active focus. Input panels are
- always closed if no editor has active focus.
-
- You can disable the automatic behavior by setting the property \c activeFocusOnPress to false
- and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement
- the behavior you want.
-
- Only relevant on platforms, which provide virtual keyboards.
-
- \code
- import QtQuick 1.0
- TextEdit {
- id: textEdit
- text: "Hello world!"
- activeFocusOnPress: false
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (!textEdit.activeFocus) {
- textEdit.forceActiveFocus();
- textEdit.openSoftwareInputPanel();
- } else {
- textEdit.focus = false;
- }
- }
- onPressAndHold: textEdit.closeSoftwareInputPanel();
- }
- }
- \endcode
-*/
-void QDeclarative1TextEdit::closeSoftwareInputPanel()
-{
- if (qApp) {
- if (QGraphicsView * view = qobject_cast<QGraphicsView*>(qApp->focusWidget())) {
- if (view->scene() && view->scene() == scene()) {
- qApp->inputPanel()->hide();
- }
- }
- }
-}
-
-void QDeclarative1TextEdit::focusInEvent(QFocusEvent *event)
-{
- Q_D(const QDeclarative1TextEdit);
- if (d->showInputPanelOnFocus) {
- if (d->focusOnPress && !isReadOnly()) {
- openSoftwareInputPanel();
- }
- }
- QDeclarative1PaintedItem::focusInEvent(event);
-}
-
-void QDeclarative1TextEdit::q_canPasteChanged()
-{
- Q_D(QDeclarative1TextEdit);
- bool old = d->canPaste;
- d->canPaste = d->control->canPaste();
- if(old!=d->canPaste)
- emit canPasteChanged();
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextedit_p.h b/src/qtquick1/graphicsitems/qdeclarativetextedit_p.h
deleted file mode 100644
index 1f78f1ffdc..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetextedit_p.h
+++ /dev/null
@@ -1,306 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVETEXTEDIT_H
-#define QDECLARATIVETEXTEDIT_H
-
-#include "private/qdeclarativetext_p.h"
-#include "private/qdeclarativeimplicitsizeitem_p.h"
-
-#include <QtGui/qtextdocument.h>
-#include <QtGui/qtextoption.h>
-#include <QtGui/qtextcursor.h>
-#include <QtGui/qtextformat.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-
-class QDeclarative1TextEditPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1TextEdit : public QDeclarative1ImplicitSizePaintedItem
-{
- Q_OBJECT
- Q_ENUMS(VAlignment)
- Q_ENUMS(HAlignment)
- Q_ENUMS(TextFormat)
- Q_ENUMS(WrapMode)
- Q_ENUMS(SelectionMode)
-
- Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QColor selectionColor READ selectionColor WRITE setSelectionColor NOTIFY selectionColorChanged)
- Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor NOTIFY selectedTextColorChanged)
- Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
- Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged)
- Q_PROPERTY(HAlignment effectiveHorizontalAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged REVISION 1)
- Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged)
- Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged)
- Q_PROPERTY(int lineCount READ lineCount NOTIFY lineCountChanged REVISION 1)
- Q_PROPERTY(qreal paintedWidth READ paintedWidth NOTIFY paintedSizeChanged)
- Q_PROPERTY(qreal paintedHeight READ paintedHeight NOTIFY paintedSizeChanged)
- Q_PROPERTY(TextFormat textFormat READ textFormat WRITE setTextFormat NOTIFY textFormatChanged)
- Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged)
- Q_PROPERTY(bool cursorVisible READ isCursorVisible WRITE setCursorVisible NOTIFY cursorVisibleChanged)
- Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged)
- Q_PROPERTY(QRect cursorRectangle READ cursorRectangle NOTIFY cursorRectangleChanged)
- Q_PROPERTY(QDeclarativeComponent* cursorDelegate READ cursorDelegate WRITE setCursorDelegate NOTIFY cursorDelegateChanged)
- Q_PROPERTY(int selectionStart READ selectionStart NOTIFY selectionStartChanged)
- Q_PROPERTY(int selectionEnd READ selectionEnd NOTIFY selectionEndChanged)
- Q_PROPERTY(QString selectedText READ selectedText NOTIFY selectionChanged)
- Q_PROPERTY(bool activeFocusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY activeFocusOnPressChanged)
- Q_PROPERTY(bool persistentSelection READ persistentSelection WRITE setPersistentSelection NOTIFY persistentSelectionChanged)
- Q_PROPERTY(qreal textMargin READ textMargin WRITE setTextMargin NOTIFY textMarginChanged)
- Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ inputMethodHints WRITE setInputMethodHints)
- Q_PROPERTY(bool selectByMouse READ selectByMouse WRITE setSelectByMouse NOTIFY selectByMouseChanged)
- Q_PROPERTY(SelectionMode mouseSelectionMode READ mouseSelectionMode WRITE setMouseSelectionMode NOTIFY mouseSelectionModeChanged REVISION 1)
- Q_PROPERTY(bool canPaste READ canPaste NOTIFY canPasteChanged REVISION 1)
- Q_PROPERTY(bool inputMethodComposing READ isInputMethodComposing NOTIFY inputMethodComposingChanged REVISION 1)
-
-public:
- QDeclarative1TextEdit(QDeclarativeItem *parent=0);
-
- enum HAlignment {
- AlignLeft = Qt::AlignLeft,
- AlignRight = Qt::AlignRight,
- AlignHCenter = Qt::AlignHCenter,
- AlignJustify = Qt::AlignJustify // ### VERSIONING: Only in QtQuick 1.1
- };
-
- enum VAlignment {
- AlignTop = Qt::AlignTop,
- AlignBottom = Qt::AlignBottom,
- AlignVCenter = Qt::AlignVCenter
- };
-
- enum TextFormat {
- PlainText = Qt::PlainText,
- RichText = Qt::RichText,
- AutoText = Qt::AutoText
- };
-
- enum WrapMode { NoWrap = QTextOption::NoWrap,
- WordWrap = QTextOption::WordWrap,
- WrapAnywhere = QTextOption::WrapAnywhere,
- WrapAtWordBoundaryOrAnywhere = QTextOption::WrapAtWordBoundaryOrAnywhere, // COMPAT
- Wrap = QTextOption::WrapAtWordBoundaryOrAnywhere
- };
-
- enum SelectionMode {
- SelectCharacters,
- SelectWords
- };
-
- Q_INVOKABLE void openSoftwareInputPanel();
- Q_INVOKABLE void closeSoftwareInputPanel();
-
- QString text() const;
- void setText(const QString &);
-
- TextFormat textFormat() const;
- void setTextFormat(TextFormat format);
-
- QFont font() const;
- void setFont(const QFont &font);
-
- QColor color() const;
- void setColor(const QColor &c);
-
- QColor selectionColor() const;
- void setSelectionColor(const QColor &c);
-
- QColor selectedTextColor() const;
- void setSelectedTextColor(const QColor &c);
-
- HAlignment hAlign() const;
- void setHAlign(HAlignment align);
- void resetHAlign();
- HAlignment effectiveHAlign() const;
-
- VAlignment vAlign() const;
- void setVAlign(VAlignment align);
-
- WrapMode wrapMode() const;
- void setWrapMode(WrapMode w);
-
- int lineCount() const;
-
- bool isCursorVisible() const;
- void setCursorVisible(bool on);
-
- int cursorPosition() const;
- void setCursorPosition(int pos);
-
- QDeclarativeComponent* cursorDelegate() const;
- void setCursorDelegate(QDeclarativeComponent*);
-
- int selectionStart() const;
- int selectionEnd() const;
-
- QString selectedText() const;
-
- bool focusOnPress() const;
- void setFocusOnPress(bool on);
-
- bool persistentSelection() const;
- void setPersistentSelection(bool on);
-
- qreal textMargin() const;
- void setTextMargin(qreal margin);
-
- bool selectByMouse() const;
- void setSelectByMouse(bool);
-
- SelectionMode mouseSelectionMode() const;
- void setMouseSelectionMode(SelectionMode mode);
-
- bool canPaste() const;
-
- virtual void componentComplete();
-
- /* FROM EDIT */
- void setReadOnly(bool);
- bool isReadOnly() const;
-
- void setTextInteractionFlags(Qt::TextInteractionFlags flags);
- Qt::TextInteractionFlags textInteractionFlags() const;
-
- QRect cursorRectangle() const;
-
- QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
-
- qreal paintedWidth() const;
- qreal paintedHeight() const;
-
- Q_INVOKABLE QRectF positionToRectangle(int) const;
- Q_INVOKABLE int positionAt(int x, int y) const;
- Q_INVOKABLE void moveCursorSelection(int pos);
- Q_INVOKABLE Q_REVISION(1) void moveCursorSelection(int pos, SelectionMode mode);
-
- QRectF boundingRect() const;
-
- bool isInputMethodComposing() const;
-
-Q_SIGNALS:
- void textChanged(const QString &);
- void paintedSizeChanged();
- void cursorPositionChanged();
- void cursorRectangleChanged();
- void selectionStartChanged();
- void selectionEndChanged();
- void selectionChanged();
- void colorChanged(const QColor &color);
- void selectionColorChanged(const QColor &color);
- void selectedTextColorChanged(const QColor &color);
- void fontChanged(const QFont &font);
- void horizontalAlignmentChanged(HAlignment alignment);
- void verticalAlignmentChanged(VAlignment alignment);
- void wrapModeChanged();
- void lineCountChanged();
- void textFormatChanged(TextFormat textFormat);
- void readOnlyChanged(bool isReadOnly);
- void cursorVisibleChanged(bool isCursorVisible);
- void cursorDelegateChanged();
- void activeFocusOnPressChanged(bool activeFocusOnPressed);
- void persistentSelectionChanged(bool isPersistentSelection);
- void textMarginChanged(qreal textMargin);
- void selectByMouseChanged(bool selectByMouse);
- Q_REVISION(1) void mouseSelectionModeChanged(SelectionMode mode);
- Q_REVISION(1) void linkActivated(const QString &link);
- Q_REVISION(1) void canPasteChanged();
- Q_REVISION(1) void inputMethodComposingChanged();
- Q_REVISION(1) void effectiveHorizontalAlignmentChanged();
-
-public Q_SLOTS:
- void selectAll();
- void selectWord();
- void select(int start, int end);
- Q_REVISION(1) void deselect();
- Q_REVISION(1) bool isRightToLeft(int start, int end);
-#ifndef QT_NO_CLIPBOARD
- void cut();
- void copy();
- void paste();
-#endif
-
-private Q_SLOTS:
- void updateImgCache(const QRectF &rect);
- void q_textChanged();
- void updateSelectionMarkers();
- void moveCursorDelegate();
- void loadCursorDelegate();
- void q_canPasteChanged();
-
-private:
- void updateSize();
- void updateTotalLines();
-
-protected:
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
-
- bool event(QEvent *);
- void keyPressEvent(QKeyEvent *);
- void keyReleaseEvent(QKeyEvent *);
- void focusInEvent(QFocusEvent *event);
-
- // mouse filter?
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
-
- void inputMethodEvent(QInputMethodEvent *e);
-
- void drawContents(QPainter *, const QRect &);
-private:
- Q_DISABLE_COPY(QDeclarative1TextEdit)
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1TextEdit)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1TextEdit)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextedit_p_p.h b/src/qtquick1/graphicsitems/qdeclarativetextedit_p_p.h
deleted file mode 100644
index 38eef69348..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetextedit_p_p.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVETEXTEDIT_P_H
-#define QDECLARATIVETEXTEDIT_P_H
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-//
-
-#include "qdeclarativeitem.h"
-#include "private/qdeclarativeimplicitsizeitem_p_p.h"
-
-#include <QtDeclarative/qdeclarative.h>
-
-QT_BEGIN_NAMESPACE
-
-class QTextLayout;
-class QTextDocument;
-class QWidgetTextControl;
-class QDeclarative1TextEditPrivate : public QDeclarative1ImplicitSizePaintedItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1TextEdit)
-
-public:
- QDeclarative1TextEditPrivate()
- : color("black"), hAlign(QDeclarative1TextEdit::AlignLeft), vAlign(QDeclarative1TextEdit::AlignTop),
- imgDirty(true), dirty(false), richText(false), cursorVisible(false), focusOnPress(true),
- showInputPanelOnFocus(true), clickCausedFocus(false), persistentSelection(true), requireImplicitWidth(false),
- hAlignImplicit(true), rightToLeftText(false), textMargin(0.0), lastSelectionStart(0), lastSelectionEnd(0),
- cursorComponent(0), cursor(0), format(QDeclarative1TextEdit::AutoText), document(0), wrapMode(QDeclarative1TextEdit::NoWrap),
- mouseSelectionMode(QDeclarative1TextEdit::SelectCharacters), lineCount(0), selectByMouse(false), canPaste(false),
- yoff(0)
- {
- }
-
- void init();
-
- void updateDefaultTextOption();
- void relayoutDocument();
- bool determineHorizontalAlignment();
- bool setHAlign(QDeclarative1TextEdit::HAlignment, bool forceAlign = false);
- void mirrorChange();
- qreal implicitWidth() const;
- void focusChanged(bool);
-
- QString text;
- QFont font;
- QFont sourceFont;
- QColor color;
- QColor selectionColor;
- QColor selectedTextColor;
- QString style;
- QColor styleColor;
- QPixmap imgCache;
- QPixmap imgStyleCache;
- QDeclarative1TextEdit::HAlignment hAlign;
- QDeclarative1TextEdit::VAlignment vAlign;
- bool imgDirty : 1;
- bool dirty : 1;
- bool richText : 1;
- bool cursorVisible : 1;
- bool focusOnPress : 1;
- bool showInputPanelOnFocus : 1;
- bool clickCausedFocus : 1;
- bool persistentSelection : 1;
- bool requireImplicitWidth:1;
- bool hAlignImplicit:1;
- bool rightToLeftText:1;
- qreal textMargin;
- int lastSelectionStart;
- int lastSelectionEnd;
- QDeclarativeComponent* cursorComponent;
- QDeclarativeItem* cursor;
- QDeclarative1TextEdit::TextFormat format;
- QTextDocument *document;
- QWidgetTextControl *control;
- QDeclarative1TextEdit::WrapMode wrapMode;
- QDeclarative1TextEdit::SelectionMode mouseSelectionMode;
- int lineCount;
- bool selectByMouse;
- bool canPaste;
- int yoff;
- QSize paintedSize;
-};
-
-QT_END_NAMESPACE
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextinput.cpp b/src/qtquick1/graphicsitems/qdeclarativetextinput.cpp
deleted file mode 100644
index 32dd65eaea..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetextinput.cpp
+++ /dev/null
@@ -1,2015 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "private/qdeclarativetextinput_p.h"
-#include "private/qdeclarativetextinput_p_p.h"
-
-#include <private/qdeclarativeglobal_p.h>
-#include <qdeclarativeinfo.h>
-
-#include <QValidator>
-#include <QTextCursor>
-#include <QApplication>
-#include <QtGui/QInputPanel>
-#include <QFontMetrics>
-#include <QPainter>
-#include <QTextBoundaryFinder>
-#include <QInputContext>
-#include <qstyle.h>
-
-#ifndef QT_NO_LINEEDIT
-
-QT_BEGIN_NAMESPACE
-
-
-
-/*!
- \qmlclass TextInput QDeclarative1TextInput
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
- \since QtQuick 1.0
- \brief The TextInput item displays an editable line of text.
- \inherits Item
-
- The TextInput element displays a single line of editable plain text.
-
- TextInput is used to accept a line of text input. Input constraints
- can be placed on a TextInput item (for example, through a \l validator or \l inputMask),
- and setting \l echoMode to an appropriate value enables TextInput to be used for
- a password input field.
-
- On Mac OS X, the Up/Down key bindings for Home/End are explicitly disabled.
- If you want such bindings (on any platform), you will need to construct them in QML.
-
- \sa TextEdit, Text, {declarative/text/textselection}{Text Selection example}
-*/
-QDeclarative1TextInput::QDeclarative1TextInput(QDeclarativeItem* parent)
- : QDeclarative1ImplicitSizePaintedItem(*(new QDeclarative1TextInputPrivate), parent)
-{
- Q_D(QDeclarative1TextInput);
- d->init();
-}
-
-QDeclarative1TextInput::~QDeclarative1TextInput()
-{
-}
-
-/*!
- \qmlproperty string QtQuick1::TextInput::text
-
- The text in the TextInput.
-*/
-
-QString QDeclarative1TextInput::text() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->text();
-}
-
-void QDeclarative1TextInput::setText(const QString &s)
-{
- Q_D(QDeclarative1TextInput);
- if(s == text())
- return;
- d->control->setText(s);
-}
-
-/*!
- \qmlproperty string QtQuick1::TextInput::font.family
-
- Sets the family name of the font.
-
- The family name is case insensitive and may optionally include a foundry name, e.g. "Helvetica [Cronyx]".
- If the family is available from more than one foundry and the foundry isn't specified, an arbitrary foundry is chosen.
- If the family isn't available a family will be set using the font matching algorithm.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::font.bold
-
- Sets whether the font weight is bold.
-*/
-
-/*!
- \qmlproperty enumeration QtQuick1::TextInput::font.weight
-
- Sets the font's weight.
-
- The weight can be one of:
- \list
- \o Font.Light
- \o Font.Normal - the default
- \o Font.DemiBold
- \o Font.Bold
- \o Font.Black
- \endlist
-
- \qml
- TextInput { text: "Hello"; font.weight: Font.DemiBold }
- \endqml
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::font.italic
-
- Sets whether the font has an italic style.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::font.underline
-
- Sets whether the text is underlined.
-*/
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::font.strikeout
-
- Sets whether the font has a strikeout style.
-*/
-
-/*!
- \qmlproperty real QtQuick1::TextInput::font.pointSize
-
- Sets the font size in points. The point size must be greater than zero.
-*/
-
-/*!
- \qmlproperty int QtQuick1::TextInput::font.pixelSize
-
- Sets the font size in pixels.
-
- Using this function makes the font device dependent.
- Use \c pointSize to set the size of the font in a device independent manner.
-*/
-
-/*!
- \qmlproperty real QtQuick1::TextInput::font.letterSpacing
-
- Sets the letter spacing for the font.
-
- Letter spacing changes the default spacing between individual letters in the font.
- A positive value increases the letter spacing by the corresponding pixels; a negative value decreases the spacing.
-*/
-
-/*!
- \qmlproperty real QtQuick1::TextInput::font.wordSpacing
-
- Sets the word spacing for the font.
-
- Word spacing changes the default spacing between individual words.
- A positive value increases the word spacing by a corresponding amount of pixels,
- while a negative value decreases the inter-word spacing accordingly.
-*/
-
-/*!
- \qmlproperty enumeration QtQuick1::TextInput::font.capitalization
-
- Sets the capitalization for the text.
-
- \list
- \o Font.MixedCase - This is the normal text rendering option where no capitalization change is applied.
- \o Font.AllUppercase - This alters the text to be rendered in all uppercase type.
- \o Font.AllLowercase - This alters the text to be rendered in all lowercase type.
- \o Font.SmallCaps - This alters the text to be rendered in small-caps type.
- \o Font.Capitalize - This alters the text to be rendered with the first character of each word as an uppercase character.
- \endlist
-
- \qml
- TextInput { text: "Hello"; font.capitalization: Font.AllLowercase }
- \endqml
-*/
-
-QFont QDeclarative1TextInput::font() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->sourceFont;
-}
-
-void QDeclarative1TextInput::setFont(const QFont &font)
-{
- Q_D(QDeclarative1TextInput);
- if (d->sourceFont == font)
- return;
-
- d->sourceFont = font;
- QFont oldFont = d->font;
- d->font = font;
- if (d->font.pointSizeF() != -1) {
- // 0.5pt resolution
- qreal size = qRound(d->font.pointSizeF()*2.0);
- d->font.setPointSizeF(size/2.0);
- }
-
- if (oldFont != d->font) {
- d->control->setFont(d->font);
- updateSize();
- updateCursorRectangle();
- if(d->cursorItem){
- d->cursorItem->setHeight(QFontMetrics(d->font).height());
- }
- }
- emit fontChanged(d->sourceFont);
-}
-
-/*!
- \qmlproperty color QtQuick1::TextInput::color
-
- The text color.
-*/
-QColor QDeclarative1TextInput::color() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->color;
-}
-
-void QDeclarative1TextInput::setColor(const QColor &c)
-{
- Q_D(QDeclarative1TextInput);
- if (c != d->color) {
- d->color = c;
- clearCache();
- update();
- emit colorChanged(c);
- }
-}
-
-
-/*!
- \qmlproperty color QtQuick1::TextInput::selectionColor
-
- The text highlight color, used behind selections.
-*/
-QColor QDeclarative1TextInput::selectionColor() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->selectionColor;
-}
-
-void QDeclarative1TextInput::setSelectionColor(const QColor &color)
-{
- Q_D(QDeclarative1TextInput);
- if (d->selectionColor == color)
- return;
-
- d->selectionColor = color;
- QPalette p = d->control->palette();
- p.setColor(QPalette::Highlight, d->selectionColor);
- d->control->setPalette(p);
- if (d->control->hasSelectedText()) {
- clearCache();
- update();
- }
- emit selectionColorChanged(color);
-}
-
-/*!
- \qmlproperty color QtQuick1::TextInput::selectedTextColor
-
- The highlighted text color, used in selections.
-*/
-QColor QDeclarative1TextInput::selectedTextColor() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->selectedTextColor;
-}
-
-void QDeclarative1TextInput::setSelectedTextColor(const QColor &color)
-{
- Q_D(QDeclarative1TextInput);
- if (d->selectedTextColor == color)
- return;
-
- d->selectedTextColor = color;
- QPalette p = d->control->palette();
- p.setColor(QPalette::HighlightedText, d->selectedTextColor);
- d->control->setPalette(p);
- if (d->control->hasSelectedText()) {
- clearCache();
- update();
- }
- emit selectedTextColorChanged(color);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::TextInput::horizontalAlignment
- \qmlproperty enumeration QtQuick1::TextInput::effectiveHorizontalAlignment
-
- Sets the horizontal alignment of the text within the TextInput item's
- width and height. By default, the text alignment follows the natural alignment
- of the text, for example text that is read from left to right will be aligned to
- the left.
-
- TextInput does not have vertical alignment, as the natural height is
- exactly the height of the single line of text. If you set the height
- manually to something larger, TextInput will always be top aligned
- vertically. You can use anchors to align it however you want within
- another item.
-
- The valid values for \c horizontalAlignment are \c TextInput.AlignLeft, \c TextInput.AlignRight and
- \c TextInput.AlignHCenter.
-
- When using the attached property LayoutMirroring::enabled to mirror application
- layouts, the horizontal alignment of text will also be mirrored. However, the property
- \c horizontalAlignment will remain unchanged. To query the effective horizontal alignment
- of TextInput, use the read-only property \c effectiveHorizontalAlignment.
-*/
-QDeclarative1TextInput::HAlignment QDeclarative1TextInput::hAlign() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->hAlign;
-}
-
-void QDeclarative1TextInput::setHAlign(HAlignment align)
-{
- Q_D(QDeclarative1TextInput);
- bool forceAlign = d->hAlignImplicit && d->effectiveLayoutMirror;
- d->hAlignImplicit = false;
- if (d->setHAlign(align, forceAlign) && isComponentComplete()) {
- updateCursorRectangle();
- }
-}
-
-void QDeclarative1TextInput::resetHAlign()
-{
- Q_D(QDeclarative1TextInput);
- d->hAlignImplicit = true;
- if (d->determineHorizontalAlignment() && isComponentComplete()) {
- updateCursorRectangle();
- }
-}
-
-QDeclarative1TextInput::HAlignment QDeclarative1TextInput::effectiveHAlign() const
-{
- Q_D(const QDeclarative1TextInput);
- QDeclarative1TextInput::HAlignment effectiveAlignment = d->hAlign;
- if (!d->hAlignImplicit && d->effectiveLayoutMirror) {
- switch (d->hAlign) {
- case QDeclarative1TextInput::AlignLeft:
- effectiveAlignment = QDeclarative1TextInput::AlignRight;
- break;
- case QDeclarative1TextInput::AlignRight:
- effectiveAlignment = QDeclarative1TextInput::AlignLeft;
- break;
- default:
- break;
- }
- }
- return effectiveAlignment;
-}
-
-bool QDeclarative1TextInputPrivate::setHAlign(QDeclarative1TextInput::HAlignment alignment, bool forceAlign)
-{
- Q_Q(QDeclarative1TextInput);
- if ((hAlign != alignment || forceAlign) && alignment <= QDeclarative1TextInput::AlignHCenter) { // justify not supported
- QDeclarative1TextInput::HAlignment oldEffectiveHAlign = q->effectiveHAlign();
- hAlign = alignment;
- emit q->horizontalAlignmentChanged(alignment);
- if (oldEffectiveHAlign != q->effectiveHAlign())
- emit q->effectiveHorizontalAlignmentChanged();
- return true;
- }
- return false;
-}
-
-bool QDeclarative1TextInputPrivate::determineHorizontalAlignment()
-{
- if (hAlignImplicit) {
- // if no explicit alignment has been set, follow the natural layout direction of the text
- QString text = control->text();
- if (text.isEmpty())
- text = control->preeditAreaText();
- bool isRightToLeft = text.isEmpty()
- ? qApp->inputPanel()->inputDirection() == Qt::RightToLeft
- : text.isRightToLeft();
- return setHAlign(isRightToLeft ? QDeclarative1TextInput::AlignRight : QDeclarative1TextInput::AlignLeft);
- }
- return false;
-}
-
-void QDeclarative1TextInputPrivate::mirrorChange()
-{
- Q_Q(QDeclarative1TextInput);
- if (q->isComponentComplete()) {
- if (!hAlignImplicit && (hAlign == QDeclarative1TextInput::AlignRight || hAlign == QDeclarative1TextInput::AlignLeft)) {
- q->updateCursorRectangle();
- emit q->effectiveHorizontalAlignmentChanged();
- }
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::readOnly
-
- Sets whether user input can modify the contents of the TextInput.
-
- If readOnly is set to true, then user input will not affect the text
- property. Any bindings or attempts to set the text property will still
- work.
-*/
-
-bool QDeclarative1TextInput::isReadOnly() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->isReadOnly();
-}
-
-void QDeclarative1TextInput::setReadOnly(bool ro)
-{
- Q_D(QDeclarative1TextInput);
- if (d->control->isReadOnly() == ro)
- return;
-
- setFlag(QGraphicsItem::ItemAcceptsInputMethod, !ro);
- d->control->setReadOnly(ro);
-
- emit readOnlyChanged(ro);
-}
-
-/*!
- \qmlproperty int QtQuick1::TextInput::maximumLength
- The maximum permitted length of the text in the TextInput.
-
- If the text is too long, it is truncated at the limit.
-
- By default, this property contains a value of 32767.
-*/
-int QDeclarative1TextInput::maxLength() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->maxLength();
-}
-
-void QDeclarative1TextInput::setMaxLength(int ml)
-{
- Q_D(QDeclarative1TextInput);
- if (d->control->maxLength() == ml)
- return;
-
- d->control->setMaxLength(ml);
-
- emit maximumLengthChanged(ml);
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::cursorVisible
- Set to true when the TextInput shows a cursor.
-
- This property is set and unset when the TextInput gets active focus, so that other
- properties can be bound to whether the cursor is currently showing. As it
- gets set and unset automatically, when you set the value yourself you must
- keep in mind that your value may be overwritten.
-
- It can be set directly in script, for example if a KeyProxy might
- forward keys to it and you desire it to look active when this happens
- (but without actually giving it active focus).
-
- It should not be set directly on the element, like in the below QML,
- as the specified value will be overridden an lost on focus changes.
-
- \code
- TextInput {
- text: "Text"
- cursorVisible: false
- }
- \endcode
-
- In the above snippet the cursor will still become visible when the
- TextInput gains active focus.
-*/
-bool QDeclarative1TextInput::isCursorVisible() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->cursorVisible;
-}
-
-void QDeclarative1TextInput::setCursorVisible(bool on)
-{
- Q_D(QDeclarative1TextInput);
- if (d->cursorVisible == on)
- return;
- d->cursorVisible = on;
- d->control->setCursorBlinkPeriod(on?QApplication::cursorFlashTime():0);
- QRect r = d->control->cursorRect();
- if (d->control->inputMask().isEmpty())
- updateRect(r);
- else
- updateRect();
- emit cursorVisibleChanged(d->cursorVisible);
-}
-
-/*!
- \qmlproperty int QtQuick1::TextInput::cursorPosition
- The position of the cursor in the TextInput.
-*/
-int QDeclarative1TextInput::cursorPosition() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->cursor();
-}
-void QDeclarative1TextInput::setCursorPosition(int cp)
-{
- Q_D(QDeclarative1TextInput);
- if (cp < 0 || cp > d->control->text().length())
- return;
- d->control->moveCursor(cp);
-}
-
-/*!
- Returns a Rect which encompasses the cursor, but which may be larger than is
- required. Ignores custom cursor delegates.
-*/
-QRect QDeclarative1TextInput::cursorRectangle() const
-{
- Q_D(const QDeclarative1TextInput);
- QRect r = d->control->cursorRect();
- // Scroll and make consistent with TextEdit
- // QWidgetLineControl inexplicably adds 1 to the height and horizontal padding
- // for unicode direction markers.
- r.adjust(5 - d->hscroll, 0, -4 - d->hscroll, -1);
- return r;
-}
-
-/*!
- \qmlproperty int QtQuick1::TextInput::selectionStart
-
- The cursor position before the first character in the current selection.
-
- This property is read-only. To change the selection, use select(start,end),
- selectAll(), or selectWord().
-
- \sa selectionEnd, cursorPosition, selectedText
-*/
-int QDeclarative1TextInput::selectionStart() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->lastSelectionStart;
-}
-
-/*!
- \qmlproperty int QtQuick1::TextInput::selectionEnd
-
- The cursor position after the last character in the current selection.
-
- This property is read-only. To change the selection, use select(start,end),
- selectAll(), or selectWord().
-
- \sa selectionStart, cursorPosition, selectedText
-*/
-int QDeclarative1TextInput::selectionEnd() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->lastSelectionEnd;
-}
-
-/*!
- \qmlmethod void QtQuick1::TextInput::select(int start, int end)
-
- Causes the text from \a start to \a end to be selected.
-
- If either start or end is out of range, the selection is not changed.
-
- After calling this, selectionStart will become the lesser
- and selectionEnd will become the greater (regardless of the order passed
- to this method).
-
- \sa selectionStart, selectionEnd
-*/
-void QDeclarative1TextInput::select(int start, int end)
-{
- Q_D(QDeclarative1TextInput);
- if (start < 0 || end < 0 || start > d->control->text().length() || end > d->control->text().length())
- return;
- d->control->setSelection(start, end-start);
-}
-
-/*!
- \qmlproperty string QtQuick1::TextInput::selectedText
-
- This read-only property provides the text currently selected in the
- text input.
-
- It is equivalent to the following snippet, but is faster and easier
- to use.
-
- \js
- myTextInput.text.toString().substring(myTextInput.selectionStart,
- myTextInput.selectionEnd);
- \endjs
-*/
-QString QDeclarative1TextInput::selectedText() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->selectedText();
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::activeFocusOnPress
-
- Whether the TextInput should gain active focus on a mouse press. By default this is
- set to true.
-*/
-bool QDeclarative1TextInput::focusOnPress() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->focusOnPress;
-}
-
-void QDeclarative1TextInput::setFocusOnPress(bool b)
-{
- Q_D(QDeclarative1TextInput);
- if (d->focusOnPress == b)
- return;
-
- d->focusOnPress = b;
-
- emit activeFocusOnPressChanged(d->focusOnPress);
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::autoScroll
-
- Whether the TextInput should scroll when the text is longer than the width. By default this is
- set to true.
-*/
-bool QDeclarative1TextInput::autoScroll() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->autoScroll;
-}
-
-void QDeclarative1TextInput::setAutoScroll(bool b)
-{
- Q_D(QDeclarative1TextInput);
- if (d->autoScroll == b)
- return;
-
- d->autoScroll = b;
- //We need to repaint so that the scrolling is taking into account.
- updateSize(true);
- updateCursorRectangle();
- emit autoScrollChanged(d->autoScroll);
-}
-
-/*!
- \qmlclass IntValidator QIntValidator
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
-
- This element provides a validator for integer values.
-
- IntValidator uses the \l {QLocale::setDefault()}{default locale} to interpret the number and
- will accept locale specific digits, group separators, and positive and negative signs. In
- addition, IntValidator is always guaranteed to accept a number formatted according to the "C"
- locale.
-*/
-/*!
- \qmlproperty int QtQuick1::IntValidator::top
-
- This property holds the validator's highest acceptable value.
- By default, this property's value is derived from the highest signed integer available (typically 2147483647).
-*/
-/*!
- \qmlproperty int QtQuick1::IntValidator::bottom
-
- This property holds the validator's lowest acceptable value.
- By default, this property's value is derived from the lowest signed integer available (typically -2147483647).
-*/
-
-/*!
- \qmlclass DoubleValidator QDoubleValidator
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
-
- This element provides a validator for non-integer numbers.
-*/
-
-/*!
- \qmlproperty real QtQuick1::DoubleValidator::top
-
- This property holds the validator's maximum acceptable value.
- By default, this property contains a value of infinity.
-*/
-/*!
- \qmlproperty real QtQuick1::DoubleValidator::bottom
-
- This property holds the validator's minimum acceptable value.
- By default, this property contains a value of -infinity.
-*/
-/*!
- \qmlproperty int QtQuick1::DoubleValidator::decimals
-
- This property holds the validator's maximum number of digits after the decimal point.
- By default, this property contains a value of 1000.
-*/
-/*!
- \qmlproperty enumeration QtQuick1::DoubleValidator::notation
- This property holds the notation of how a string can describe a number.
-
- The possible values for this property are:
-
- \list
- \o DoubleValidator.StandardNotation
- \o DoubleValidator.ScientificNotation (default)
- \endlist
-
- If this property is set to DoubleValidator.ScientificNotation, the written number may have an exponent part (e.g. 1.5E-2).
-*/
-
-/*!
- \qmlclass RegExpValidator QRegExpValidator
- \inqmlmodule QtQuick 1
- \ingroup qml-basic-visual-elements
-
- This element provides a validator, which counts as valid any string which
- matches a specified regular expression.
-*/
-/*!
- \qmlproperty regExp QtQuick1::RegExpValidator::regExp
-
- This property holds the regular expression used for validation.
-
- Note that this property should be a regular expression in JS syntax, e.g /a/ for the regular expression
- matching "a".
-
- By default, this property contains a regular expression with the pattern .* that matches any string.
-*/
-
-/*!
- \qmlproperty Validator QtQuick1::TextInput::validator
-
- Allows you to set a validator on the TextInput. When a validator is set
- the TextInput will only accept input which leaves the text property in
- an acceptable or intermediate state. The accepted signal will only be sent
- if the text is in an acceptable state when enter is pressed.
-
- Currently supported validators are IntValidator, DoubleValidator and
- RegExpValidator. An example of using validators is shown below, which allows
- input of integers between 11 and 31 into the text input:
-
- \code
- import QtQuick 1.0
- TextInput{
- validator: IntValidator{bottom: 11; top: 31;}
- focus: true
- }
- \endcode
-
- \sa acceptableInput, inputMask
-*/
-#ifndef QT_NO_VALIDATOR
-QValidator* QDeclarative1TextInput::validator() const
-{
- Q_D(const QDeclarative1TextInput);
- //###const cast isn't good, but needed for property system?
- return const_cast<QValidator*>(d->control->validator());
-}
-
-void QDeclarative1TextInput::setValidator(QValidator* v)
-{
- Q_D(QDeclarative1TextInput);
- if (d->control->validator() == v)
- return;
-
- d->control->setValidator(v);
- if(!d->control->hasAcceptableInput()){
- d->oldValidity = false;
- emit acceptableInputChanged();
- }
-
- emit validatorChanged();
-}
-#endif // QT_NO_VALIDATOR
-
-/*!
- \qmlproperty string QtQuick1::TextInput::inputMask
-
- Allows you to set an input mask on the TextInput, restricting the allowable
- text inputs. See QLineEdit::inputMask for further details, as the exact
- same mask strings are used by TextInput.
-
- \sa acceptableInput, validator
-*/
-QString QDeclarative1TextInput::inputMask() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->inputMask();
-}
-
-void QDeclarative1TextInput::setInputMask(const QString &im)
-{
- Q_D(QDeclarative1TextInput);
- if (d->control->inputMask() == im)
- return;
-
- d->control->setInputMask(im);
- emit inputMaskChanged(d->control->inputMask());
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::acceptableInput
-
- This property is always true unless a validator or input mask has been set.
- If a validator or input mask has been set, this property will only be true
- if the current text is acceptable to the validator or input mask as a final
- string (not as an intermediate string).
-*/
-bool QDeclarative1TextInput::hasAcceptableInput() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->hasAcceptableInput();
-}
-
-/*!
- \qmlsignal QtQuick1::TextInput::onAccepted()
-
- This handler is called when the Return or Enter key is pressed.
- Note that if there is a \l validator or \l inputMask set on the text
- input, the handler will only be emitted if the input is in an acceptable
- state.
-*/
-
-void QDeclarative1TextInputPrivate::updateInputMethodHints()
-{
- Q_Q(QDeclarative1TextInput);
- Qt::InputMethodHints hints = inputMethodHints;
- uint echo = control->echoMode();
- if (echo == QDeclarative1TextInput::Password || echo == QDeclarative1TextInput::NoEcho)
- hints |= Qt::ImhHiddenText;
- else if (echo == QDeclarative1TextInput::PasswordEchoOnEdit)
- hints &= ~Qt::ImhHiddenText;
- if (echo != QDeclarative1TextInput::Normal) {
- hints |= Qt::ImhNoAutoUppercase;
- hints |= Qt::ImhNoPredictiveText;
- }
- q->setInputMethodHints(hints);
-}
-
-/*!
- \qmlproperty enumeration QtQuick1::TextInput::echoMode
-
- Specifies how the text should be displayed in the TextInput.
- \list
- \o TextInput.Normal - Displays the text as it is. (Default)
- \o TextInput.Password - Displays asterixes instead of characters.
- \o TextInput.NoEcho - Displays nothing.
- \o TextInput.PasswordEchoOnEdit - Displays characters as they are entered
- while editing, otherwise displays asterisks.
- \endlist
-*/
-QDeclarative1TextInput::EchoMode QDeclarative1TextInput::echoMode() const
-{
- Q_D(const QDeclarative1TextInput);
- return (QDeclarative1TextInput::EchoMode)d->control->echoMode();
-}
-
-void QDeclarative1TextInput::setEchoMode(QDeclarative1TextInput::EchoMode echo)
-{
- Q_D(QDeclarative1TextInput);
- if (echoMode() == echo)
- return;
- d->control->setEchoMode(echo);
- d->updateInputMethodHints();
- q_textChanged();
- emit echoModeChanged(echoMode());
-}
-
-Qt::InputMethodHints QDeclarative1TextInput::imHints() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->inputMethodHints;
-}
-
-void QDeclarative1TextInput::setIMHints(Qt::InputMethodHints hints)
-{
- Q_D(QDeclarative1TextInput);
- if (d->inputMethodHints == hints)
- return;
- d->inputMethodHints = hints;
- d->updateInputMethodHints();
-}
-
-/*!
- \qmlproperty Component QtQuick1::TextInput::cursorDelegate
- The delegate for the cursor in the TextInput.
-
- If you set a cursorDelegate for a TextInput, this delegate will be used for
- drawing the cursor instead of the standard cursor. An instance of the
- delegate will be created and managed by the TextInput when a cursor is
- needed, and the x property of delegate instance will be set so as
- to be one pixel before the top left of the current character.
-
- Note that the root item of the delegate component must be a QDeclarativeItem or
- QDeclarativeItem derived item.
-*/
-QDeclarativeComponent* QDeclarative1TextInput::cursorDelegate() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->cursorComponent;
-}
-
-void QDeclarative1TextInput::setCursorDelegate(QDeclarativeComponent* c)
-{
- Q_D(QDeclarative1TextInput);
- if (d->cursorComponent == c)
- return;
-
- d->cursorComponent = c;
- if(!c){
- //note that the components are owned by something else
- delete d->cursorItem;
- }else{
- d->startCreatingCursor();
- }
-
- emit cursorDelegateChanged();
-}
-
-void QDeclarative1TextInputPrivate::startCreatingCursor()
-{
- Q_Q(QDeclarative1TextInput);
- if(cursorComponent->isReady()){
- q->createCursor();
- }else if(cursorComponent->isLoading()){
- q->connect(cursorComponent, SIGNAL(statusChanged(int)),
- q, SLOT(createCursor()));
- }else {//isError
- qmlInfo(q, cursorComponent->errors()) << QDeclarative1TextInput::tr("Could not load cursor delegate");
- }
-}
-
-void QDeclarative1TextInput::createCursor()
-{
- Q_D(QDeclarative1TextInput);
- if(d->cursorComponent->isError()){
- qmlInfo(this, d->cursorComponent->errors()) << tr("Could not load cursor delegate");
- return;
- }
-
- if(!d->cursorComponent->isReady())
- return;
-
- if(d->cursorItem)
- delete d->cursorItem;
- d->cursorItem = qobject_cast<QDeclarativeItem*>(d->cursorComponent->create());
- if(!d->cursorItem){
- qmlInfo(this, d->cursorComponent->errors()) << tr("Could not instantiate cursor delegate");
- return;
- }
-
- QDeclarative_setParent_noEvent(d->cursorItem, this);
- d->cursorItem->setParentItem(this);
- d->cursorItem->setX(d->control->cursorToX());
- d->cursorItem->setHeight(d->control->height()-1); // -1 to counter QWidgetLineControl's +1 which is not consistent with Text.
-}
-
-/*!
- \qmlmethod rect QtQuick1::TextInput::positionToRectangle(int pos)
-
- This function takes a character position and returns the rectangle that the
- cursor would occupy, if it was placed at that character position.
-
- This is similar to setting the cursorPosition, and then querying the cursor
- rectangle, but the cursorPosition is not changed.
-*/
-QRectF QDeclarative1TextInput::positionToRectangle(int pos) const
-{
- Q_D(const QDeclarative1TextInput);
- if (pos > d->control->cursorPosition())
- pos += d->control->preeditAreaText().length();
- return QRectF(d->control->cursorToX(pos)-d->hscroll,
- 0.0,
- d->control->cursorWidth(),
- cursorRectangle().height());
-}
-
-int QDeclarative1TextInput::positionAt(int x) const
-{
- return positionAt(x, CursorBetweenCharacters);
-}
-
-/*!
- \qmlmethod int QtQuick1::TextInput::positionAt(int x, CursorPosition position = CursorBetweenCharacters)
- \since Quick 1.1
-
- This function returns the character position at
- x pixels from the left of the textInput. Position 0 is before the
- first character, position 1 is after the first character but before the second,
- and so on until position text.length, which is after all characters.
-
- This means that for all x values before the first character this function returns 0,
- and for all x values after the last character this function returns text.length.
-
- The cursor position type specifies how the cursor position should be resolved.
-
- \list
- \o TextInput.CursorBetweenCharacters - Returns the position between characters that is nearest x.
- \o TextInput.CursorOnCharacter - Returns the position before the character that is nearest x.
- \endlist
-*/
-int QDeclarative1TextInput::positionAt(int x, CursorPosition position) const
-{
- Q_D(const QDeclarative1TextInput);
- int pos = d->control->xToPos(x + d->hscroll, QTextLine::CursorPosition(position));
- const int cursor = d->control->cursor();
- if (pos > cursor) {
- const int preeditLength = d->control->preeditAreaText().length();
- pos = pos > cursor + preeditLength
- ? pos - preeditLength
- : cursor;
- }
- return pos;
-}
-
-void QDeclarative1TextInputPrivate::focusChanged(bool hasFocus)
-{
- Q_Q(QDeclarative1TextInput);
- focused = hasFocus;
- q->setCursorVisible(hasFocus && scene && scene->hasFocus());
- if(!hasFocus && control->passwordEchoEditing())
- control->updatePasswordEchoEditing(false);//QWidgetLineControl sets it on key events, but doesn't deal with focus events
- if (!hasFocus) {
- control->commitPreedit();
- control->deselect();
- }
- QDeclarativeItemPrivate::focusChanged(hasFocus);
-}
-
-void QDeclarative1TextInput::keyPressEvent(QKeyEvent* ev)
-{
- Q_D(QDeclarative1TextInput);
- keyPressPreHandler(ev);
- if (ev->isAccepted())
- return;
-
- // Don't allow MacOSX up/down support, and we don't allow a completer.
- bool ignore = (ev->key() == Qt::Key_Up || ev->key() == Qt::Key_Down) && ev->modifiers() == Qt::NoModifier;
- if (!ignore && (d->lastSelectionStart == d->lastSelectionEnd) && (ev->key() == Qt::Key_Right || ev->key() == Qt::Key_Left)) {
- // Ignore when moving off the end unless there is a selection,
- // because then moving will do something (deselect).
- int cursorPosition = d->control->cursor();
- if (cursorPosition == 0)
- ignore = ev->key() == (d->control->layoutDirection() == Qt::LeftToRight ? Qt::Key_Left : Qt::Key_Right);
- if (cursorPosition == d->control->text().length())
- ignore = ev->key() == (d->control->layoutDirection() == Qt::LeftToRight ? Qt::Key_Right : Qt::Key_Left);
- }
- if (ignore) {
- ev->ignore();
- } else {
- d->control->processKeyEvent(ev);
- }
- if (!ev->isAccepted())
- QDeclarative1PaintedItem::keyPressEvent(ev);
-}
-
-void QDeclarative1TextInput::inputMethodEvent(QInputMethodEvent *ev)
-{
- Q_D(QDeclarative1TextInput);
- ev->ignore();
- const bool wasComposing = d->control->preeditAreaText().length() > 0;
- inputMethodPreHandler(ev);
- if (!ev->isAccepted()) {
- if (d->control->isReadOnly()) {
- ev->ignore();
- } else {
- d->control->processInputMethodEvent(ev);
- }
- }
- if (!ev->isAccepted())
- QDeclarative1PaintedItem::inputMethodEvent(ev);
-
- if (wasComposing != (d->control->preeditAreaText().length() > 0))
- emit inputMethodComposingChanged();
-}
-
-/*!
-\overload
-Handles the given mouse \a event.
-*/
-void QDeclarative1TextInput::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1TextInput);
- if (d->selectByMouse && event->button() == Qt::LeftButton) {
- int cursor = d->xToPos(event->pos().x());
- d->control->selectWordAtPos(cursor);
- event->setAccepted(true);
- } else {
- if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonDblClick))
- return;
- QDeclarative1PaintedItem::mouseDoubleClickEvent(event);
- }
-}
-
-void QDeclarative1TextInput::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1TextInput);
-
- d->pressPos = event->pos();
-
- if(d->focusOnPress){
- bool hadActiveFocus = hasActiveFocus();
- forceActiveFocus();
- if (d->showInputPanelOnFocus) {
- if (hasActiveFocus() && hadActiveFocus && !isReadOnly()) {
- // re-open input panel on press if already focused
- openSoftwareInputPanel();
- }
- } else { // show input panel on click
- if (hasActiveFocus() && !hadActiveFocus) {
- d->clickCausedFocus = true;
- }
- }
- }
- if (d->selectByMouse) {
- setKeepMouseGrab(false);
- d->selectPressed = true;
- }
- if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonPress))
- return;
-
- bool mark = (event->modifiers() & Qt::ShiftModifier) && d->selectByMouse;
- int cursor = d->xToPos(event->pos().x());
- d->control->moveCursor(cursor, mark);
- event->setAccepted(true);
-}
-
-void QDeclarative1TextInput::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1TextInput);
-
- if (d->selectPressed) {
- if (qAbs(int(event->pos().x() - d->pressPos.x())) > QApplication::startDragDistance())
- setKeepMouseGrab(true);
-
- if (d->control->composeMode()) {
- // start selection
- int startPos = d->xToPos(d->pressPos.x());
- int currentPos = d->xToPos(event->pos().x());
- if (startPos != currentPos)
- d->control->setSelection(startPos, currentPos - startPos);
- } else {
- moveCursorSelection(d->xToPos(event->pos().x()), d->mouseSelectionMode);
- }
- event->setAccepted(true);
- } else {
- QDeclarative1PaintedItem::mouseMoveEvent(event);
- }
-}
-
-/*!
-\overload
-Handles the given mouse \a event.
-*/
-void QDeclarative1TextInput::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
-{
- Q_D(QDeclarative1TextInput);
- if (d->sendMouseEventToInputContext(event, QEvent::MouseButtonRelease))
- return;
- if (d->selectPressed) {
- d->selectPressed = false;
- setKeepMouseGrab(false);
- }
- if (!d->showInputPanelOnFocus) { // input panel on click
- if (d->focusOnPress && !isReadOnly() && boundingRect().contains(event->pos())) {
- if (QGraphicsView * view = qobject_cast<QGraphicsView*>(qApp->focusWidget())) {
- if (view->scene() && view->scene() == scene()) {
- qt_widget_private(view)->handleSoftwareInputPanel(event->button(), d->clickCausedFocus);
- }
- }
- }
- }
- d->clickCausedFocus = false;
-#ifndef QT_NO_CLIPBOARD
- if (QGuiApplication::clipboard()->supportsSelection()) {
- if (event->button() == Qt::LeftButton) {
- d->control->copy(QClipboard::Selection);
- } else if (!isReadOnly() && event->button() == Qt::MidButton) {
- d->control->deselect();
- d->control->insert(QGuiApplication::clipboard()->text(QClipboard::Selection));
- }
- }
-#endif
- if (!event->isAccepted())
- QDeclarative1PaintedItem::mouseReleaseEvent(event);
-}
-
-bool QDeclarative1TextInputPrivate::sendMouseEventToInputContext(
- QGraphicsSceneMouseEvent *event, QEvent::Type eventType)
-{
-#if !defined QT_NO_IM
- if (event->widget() && control->composeMode()) {
- int tmp_cursor = xToPos(event->pos().x());
- int mousePos = tmp_cursor - control->cursor();
- if (mousePos >= 0 && mousePos <= control->preeditAreaText().length()) {
- if (eventType == QEvent::MouseButtonRelease) {
- qApp->inputPanel()->invokeAction(QInputPanel::Click, mousePos);
- }
- return true;
- }
- }
-#else
- Q_UNUSED(event);
- Q_UNUSED(eventType)
-#endif
-
- return false;
-}
-
-bool QDeclarative1TextInput::sceneEvent(QEvent *event)
-{
- Q_D(QDeclarative1TextInput);
- bool rv = QDeclarativeItem::sceneEvent(event);
- if (event->type() == QEvent::UngrabMouse) {
- d->selectPressed = false;
- setKeepMouseGrab(false);
- }
- return rv;
-}
-
-bool QDeclarative1TextInput::event(QEvent* ev)
-{
-#ifndef QT_NO_SHORTCUT
- Q_D(QDeclarative1TextInput);
-
- if (ev->type() == QEvent::ShortcutOverride) {
- d->control->processShortcutOverrideEvent(static_cast<QKeyEvent *>(ev));
- return ev->isAccepted();
- }
-#endif
- return QDeclarative1PaintedItem::event(ev);
-}
-
-void QDeclarative1TextInput::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
-{
- if (newGeometry.width() != oldGeometry.width()) {
- updateSize();
- updateCursorRectangle();
- }
- QDeclarative1PaintedItem::geometryChanged(newGeometry, oldGeometry);
-}
-
-int QDeclarative1TextInputPrivate::calculateTextWidth()
-{
- return qRound(control->naturalTextWidth());
-}
-
-void QDeclarative1TextInputPrivate::updateHorizontalScroll()
-{
- Q_Q(QDeclarative1TextInput);
- const int preeditLength = control->preeditAreaText().length();
- int cix = qRound(control->cursorToX(control->cursor() + preeditLength));
- QRect br(q->boundingRect().toRect());
- int widthUsed = calculateTextWidth();
-
- QDeclarative1TextInput::HAlignment effectiveHAlign = q->effectiveHAlign();
- if (autoScroll) {
- if (widthUsed <= br.width()) {
- // text fits in br; use hscroll for alignment
- switch (effectiveHAlign & ~(Qt::AlignAbsolute|Qt::AlignVertical_Mask)) {
- case Qt::AlignRight:
- hscroll = widthUsed - br.width() - 1;
- break;
- case Qt::AlignHCenter:
- hscroll = (widthUsed - br.width()) / 2;
- break;
- default:
- // Left
- hscroll = 0;
- break;
- }
- } else if (cix - hscroll >= br.width()) {
- // text doesn't fit, cursor is to the right of br (scroll right)
- hscroll = cix - br.width() + 1;
- } else if (cix - hscroll < 0 && hscroll < widthUsed) {
- // text doesn't fit, cursor is to the left of br (scroll left)
- hscroll = cix;
- } else if (widthUsed - hscroll < br.width()) {
- // text doesn't fit, text document is to the left of br; align
- // right
- hscroll = widthUsed - br.width() + 1;
- }
- if (preeditLength > 0) {
- // check to ensure long pre-edit text doesn't push the cursor
- // off to the left
- cix = qRound(control->cursorToX(
- control->cursor() + qMax(0, control->preeditCursor() - 1)));
- if (cix < hscroll)
- hscroll = cix;
- }
- } else {
- switch (effectiveHAlign) {
- case QDeclarative1TextInput::AlignRight:
- hscroll = q->width() - widthUsed;
- break;
- case QDeclarative1TextInput::AlignHCenter:
- hscroll = (q->width() - widthUsed) / 2;
- break;
- default:
- // Left
- hscroll = 0;
- break;
- }
- }
-}
-
-void QDeclarative1TextInput::drawContents(QPainter *p, const QRect &r)
-{
- Q_D(QDeclarative1TextInput);
- p->setRenderHint(QPainter::TextAntialiasing, true);
- p->save();
- p->setPen(QPen(d->color));
- int flags = QWidgetLineControl::DrawText;
- if(!isReadOnly() && d->cursorVisible && !d->cursorItem)
- flags |= QWidgetLineControl::DrawCursor;
- if (d->control->hasSelectedText())
- flags |= QWidgetLineControl::DrawSelections;
- QPoint offset = QPoint(0,0);
- QFontMetrics fm = QFontMetrics(d->font);
- QRect br(boundingRect().toRect());
- if (d->autoScroll) {
- // the y offset is there to keep the baseline constant in case we have script changes in the text.
- offset = br.topLeft() - QPoint(d->hscroll, d->control->ascent() - fm.ascent());
- } else {
- offset = QPoint(d->hscroll, 0);
- }
- d->control->draw(p, offset, r, flags);
- p->restore();
-}
-
-/*!
-\overload
-Returns the value of the given \a property.
-*/
-QVariant QDeclarative1TextInput::inputMethodQuery(Qt::InputMethodQuery property) const
-{
- Q_D(const QDeclarative1TextInput);
- switch(property) {
- case Qt::ImMicroFocus:
- return cursorRectangle();
- case Qt::ImFont:
- return font();
- case Qt::ImCursorPosition:
- return QVariant(d->control->cursor());
- case Qt::ImSurroundingText:
- if (d->control->echoMode() == PasswordEchoOnEdit
- && !d->control->passwordEchoEditing())
- return QVariant(displayText());
- else
- return QVariant(d->control->realText());
- case Qt::ImCurrentSelection:
- return QVariant(selectedText());
- case Qt::ImMaximumTextLength:
- return QVariant(maxLength());
- case Qt::ImAnchorPosition:
- if (d->control->selectionStart() == d->control->selectionEnd())
- return QVariant(d->control->cursor());
- else if (d->control->selectionStart() == d->control->cursor())
- return QVariant(d->control->selectionEnd());
- else
- return QVariant(d->control->selectionStart());
- default:
- return QVariant();
- }
-}
-
-/*!
- \qmlmethod void QtQuick1::TextInput::deselect()
- \since Quick 1.1
-
- Removes active text selection.
-*/
-void QDeclarative1TextInput::deselect()
-{
- Q_D(QDeclarative1TextInput);
- d->control->deselect();
-}
-
-/*!
- \qmlmethod void QtQuick1::TextInput::selectAll()
-
- Causes all text to be selected.
-*/
-void QDeclarative1TextInput::selectAll()
-{
- Q_D(QDeclarative1TextInput);
- d->control->setSelection(0, d->control->text().length());
-}
-
-/*!
- \qmlmethod void QtQuick1::TextInput::isRightToLeft(int start, int end)
-
- Returns true if the natural reading direction of the editor text
- found between positions \a start and \a end is right to left.
-*/
-bool QDeclarative1TextInput::isRightToLeft(int start, int end)
-{
- Q_D(QDeclarative1TextInput);
- if (start > end) {
- qmlInfo(this) << "isRightToLeft(start, end) called with the end property being smaller than the start.";
- return false;
- } else {
- return d->control->text().mid(start, end - start).isRightToLeft();
- }
-}
-
-#ifndef QT_NO_CLIPBOARD
-/*!
- \qmlmethod QtQuick1::TextInput::cut()
-
- Moves the currently selected text to the system clipboard.
-*/
-void QDeclarative1TextInput::cut()
-{
- Q_D(QDeclarative1TextInput);
- d->control->copy();
- d->control->del();
-}
-
-/*!
- \qmlmethod QtQuick1::TextInput::copy()
-
- Copies the currently selected text to the system clipboard.
-*/
-void QDeclarative1TextInput::copy()
-{
- Q_D(QDeclarative1TextInput);
- d->control->copy();
-}
-
-/*!
- \qmlmethod QtQuick1::TextInput::paste()
-
- Replaces the currently selected text by the contents of the system clipboard.
-*/
-void QDeclarative1TextInput::paste()
-{
- Q_D(QDeclarative1TextInput);
- if(!d->control->isReadOnly())
- d->control->paste();
-}
-#endif // QT_NO_CLIPBOARD
-
-/*!
- \qmlmethod void QtQuick1::TextInput::selectWord()
-
- Causes the word closest to the current cursor position to be selected.
-*/
-void QDeclarative1TextInput::selectWord()
-{
- Q_D(QDeclarative1TextInput);
- d->control->selectWordAtPos(d->control->cursor());
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::smooth
-
- This property holds whether the text is smoothly scaled or transformed.
-
- Smooth filtering gives better visual quality, but is slower. If
- the item is displayed at its natural size, this property has no visual or
- performance effect.
-
- \note Generally scaling artifacts are only visible if the item is stationary on
- the screen. A common pattern when animating an item is to disable smooth
- filtering at the beginning of the animation and reenable it at the conclusion.
-*/
-
-/*!
- \qmlproperty string QtQuick1::TextInput::passwordCharacter
-
- This is the character displayed when echoMode is set to Password or
- PasswordEchoOnEdit. By default it is an asterisk.
-
- If this property is set to a string with more than one character,
- the first character is used. If the string is empty, the value
- is ignored and the property is not set.
-*/
-QString QDeclarative1TextInput::passwordCharacter() const
-{
- Q_D(const QDeclarative1TextInput);
- return QString(d->control->passwordCharacter());
-}
-
-void QDeclarative1TextInput::setPasswordCharacter(const QString &str)
-{
- Q_D(QDeclarative1TextInput);
- if(str.length() < 1)
- return;
- d->control->setPasswordCharacter(str.constData()[0]);
- EchoMode echoMode_ = echoMode();
- if (echoMode_ == Password || echoMode_ == PasswordEchoOnEdit) {
- updateSize();
- }
- emit passwordCharacterChanged();
-}
-
-/*!
- \qmlproperty string QtQuick1::TextInput::displayText
-
- This is the text displayed in the TextInput.
-
- If \l echoMode is set to TextInput::Normal, this holds the
- same value as the TextInput::text property. Otherwise,
- this property holds the text visible to the user, while
- the \l text property holds the actual entered text.
-*/
-QString QDeclarative1TextInput::displayText() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->displayText();
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::selectByMouse
-
- Defaults to false.
-
- If true, the user can use the mouse to select text in some
- platform-specific way. Note that for some platforms this may
- not be an appropriate interaction (eg. may conflict with how
- the text needs to behave inside a Flickable.
-*/
-bool QDeclarative1TextInput::selectByMouse() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->selectByMouse;
-}
-
-void QDeclarative1TextInput::setSelectByMouse(bool on)
-{
- Q_D(QDeclarative1TextInput);
- if (d->selectByMouse != on) {
- d->selectByMouse = on;
- emit selectByMouseChanged(on);
- }
-}
-
-/*!
- \qmlproperty enum QtQuick1::TextInput::mouseSelectionMode
- \since Quick 1.1
-
- Specifies how text should be selected using a mouse.
-
- \list
- \o TextInput.SelectCharacters - The selection is updated with individual characters. (Default)
- \o TextInput.SelectWords - The selection is updated with whole words.
- \endlist
-
- This property only applies when \l selectByMouse is true.
-*/
-
-QDeclarative1TextInput::SelectionMode QDeclarative1TextInput::mouseSelectionMode() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->mouseSelectionMode;
-}
-
-void QDeclarative1TextInput::setMouseSelectionMode(SelectionMode mode)
-{
- Q_D(QDeclarative1TextInput);
- if (d->mouseSelectionMode != mode) {
- d->mouseSelectionMode = mode;
- emit mouseSelectionModeChanged(mode);
- }
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::canPaste
- \since QtQuick 1.1
-
- Returns true if the TextInput is writable and the content of the clipboard is
- suitable for pasting into the TextEdit.
-*/
-bool QDeclarative1TextInput::canPaste() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->canPaste;
-}
-
-void QDeclarative1TextInput::moveCursorSelection(int position)
-{
- Q_D(QDeclarative1TextInput);
- d->control->moveCursor(position, true);
-}
-
-/*!
- \qmlmethod void QtQuick1::TextInput::moveCursorSelection(int position, SelectionMode mode = TextInput.SelectCharacters)
- \since Quick 1.1
-
- Moves the cursor to \a position and updates the selection according to the optional \a mode
- parameter. (To only move the cursor, set the \l cursorPosition property.)
-
- When this method is called it additionally sets either the
- selectionStart or the selectionEnd (whichever was at the previous cursor position)
- to the specified position. This allows you to easily extend and contract the selected
- text range.
-
- The selection mode specifies whether the selection is updated on a per character or a per word
- basis. If not specified the selection mode will default to TextInput.SelectCharacters.
-
- \list
- \o TextEdit.SelectCharacters - Sets either the selectionStart or selectionEnd (whichever was at
- the previous cursor position) to the specified position.
- \o TextEdit.SelectWords - Sets the selectionStart and selectionEnd to include all
- words between the specified postion and the previous cursor position. Words partially in the
- range are included.
- \endlist
-
- For example, take this sequence of calls:
-
- \code
- cursorPosition = 5
- moveCursorSelection(9, TextInput.SelectCharacters)
- moveCursorSelection(7, TextInput.SelectCharacters)
- \endcode
-
- This moves the cursor to position 5, extend the selection end from 5 to 9
- and then retract the selection end from 9 to 7, leaving the text from position 5 to 7
- selected (the 6th and 7th characters).
-
- The same sequence with TextInput.SelectWords will extend the selection start to a word boundary
- before or on position 5 and extend the selection end to a word boundary on or past position 9.
-*/
-void QDeclarative1TextInput::moveCursorSelection(int pos, SelectionMode mode)
-{
- Q_D(QDeclarative1TextInput);
-
- if (mode == SelectCharacters) {
- d->control->moveCursor(pos, true);
- } else if (pos != d->control->cursor()){
- const int cursor = d->control->cursor();
- int anchor;
- if (!d->control->hasSelectedText())
- anchor = d->control->cursor();
- else if (d->control->selectionStart() == d->control->cursor())
- anchor = d->control->selectionEnd();
- else
- anchor = d->control->selectionStart();
-
- if (anchor < pos || (anchor == pos && cursor < pos)) {
- const QString text = d->control->text();
- QTextBoundaryFinder finder(QTextBoundaryFinder::Word, text);
- finder.setPosition(anchor);
-
- const QTextBoundaryFinder::BoundaryReasons reasons = finder.boundaryReasons();
- if (anchor < text.length() && (!(reasons & QTextBoundaryFinder::StartWord)
- || ((reasons & QTextBoundaryFinder::EndWord) && anchor > cursor))) {
- finder.toPreviousBoundary();
- }
- anchor = finder.position() != -1 ? finder.position() : 0;
-
- finder.setPosition(pos);
- if (pos > 0 && !finder.boundaryReasons())
- finder.toNextBoundary();
- const int cursor = finder.position() != -1 ? finder.position() : text.length();
-
- d->control->setSelection(anchor, cursor - anchor);
- } else if (anchor > pos || (anchor == pos && cursor > pos)) {
- const QString text = d->control->text();
- QTextBoundaryFinder finder(QTextBoundaryFinder::Word, text);
- finder.setPosition(anchor);
-
- const QTextBoundaryFinder::BoundaryReasons reasons = finder.boundaryReasons();
- if (anchor > 0 && (!(reasons & QTextBoundaryFinder::EndWord)
- || ((reasons & QTextBoundaryFinder::StartWord) && anchor < cursor))) {
- finder.toNextBoundary();
- }
- anchor = finder.position() != -1 ? finder.position() : text.length();
-
- finder.setPosition(pos);
- if (pos < text.length() && !finder.boundaryReasons())
- finder.toPreviousBoundary();
- const int cursor = finder.position() != -1 ? finder.position() : 0;
-
- d->control->setSelection(anchor, cursor - anchor);
- }
- }
-}
-
-/*!
- \qmlmethod void QtQuick1::TextInput::openSoftwareInputPanel()
-
- Opens software input panels like virtual keyboards for typing, useful for
- customizing when you want the input keyboard to be shown and hidden in
- your application.
-
- By default the opening of input panels follows the platform style.
- The panels are automatically opened when TextInput element gains active focus. Input panels are
- always closed if no editor has active focus.
-
- . You can disable the automatic behavior by setting the property \c activeFocusOnPress to false
- and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement
- the behavior you want.
-
- Only relevant on platforms, which provide virtual keyboards.
-
- \qml
- import QtQuick 1.0
- TextInput {
- id: textInput
- text: "Hello world!"
- activeFocusOnPress: false
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (!textInput.activeFocus) {
- textInput.forceActiveFocus()
- textInput.openSoftwareInputPanel();
- } else {
- textInput.focus = false;
- }
- }
- onPressAndHold: textInput.closeSoftwareInputPanel();
- }
- }
- \endqml
-*/
-void QDeclarative1TextInput::openSoftwareInputPanel()
-{
- if (qApp) {
- if (QGraphicsView * view = qobject_cast<QGraphicsView*>(qApp->focusWidget())) {
- if (view->scene() && view->scene() == scene()) {
- qApp->inputPanel()->show();
- }
- }
- }
-}
-
-/*!
- \qmlmethod void QtQuick1::TextInput::closeSoftwareInputPanel()
-
- Closes a software input panel like a virtual keyboard shown on the screen, useful
- for customizing when you want the input keyboard to be shown and hidden in
- your application.
-
- By default the opening of input panels follows the platform style.
- The panels are automatically opened when TextInput element gains active focus. Input panels are
- always closed if no editor has active focus.
-
- . You can disable the automatic behavior by setting the property \c activeFocusOnPress to false
- and use functions openSoftwareInputPanel() and closeSoftwareInputPanel() to implement
- the behavior you want.
-
- Only relevant on platforms, which provide virtual keyboards.
-
- \qml
- import QtQuick 1.0
- TextInput {
- id: textInput
- text: "Hello world!"
- activeFocusOnPress: false
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (!textInput.activeFocus) {
- textInput.forceActiveFocus();
- textInput.openSoftwareInputPanel();
- } else {
- textInput.focus = false;
- }
- }
- onPressAndHold: textInput.closeSoftwareInputPanel();
- }
- }
- \endqml
-*/
-void QDeclarative1TextInput::closeSoftwareInputPanel()
-{
- if (qApp) {
- if (QGraphicsView * view = qobject_cast<QGraphicsView*>(qApp->focusWidget())) {
- if (view->scene() && view->scene() == scene()) {
- qApp->inputPanel()->hide();
- }
- }
- }
-}
-
-void QDeclarative1TextInput::focusInEvent(QFocusEvent *event)
-{
- Q_D(const QDeclarative1TextInput);
- if (d->showInputPanelOnFocus) {
- if (d->focusOnPress && !isReadOnly()) {
- openSoftwareInputPanel();
- }
- }
- QDeclarative1PaintedItem::focusInEvent(event);
-}
-
-/*!
- \qmlproperty bool QtQuick1::TextInput::inputMethodComposing
-
- \since QtQuick 1.1
-
- This property holds whether the TextInput has partial text input from an
- input method.
-
- While it is composing an input method may rely on mouse or key events from
- the TextInput to edit or commit the partial text. This property can be
- used to determine when to disable events handlers that may interfere with
- the correct operation of an input method.
-*/
-bool QDeclarative1TextInput::isInputMethodComposing() const
-{
- Q_D(const QDeclarative1TextInput);
- return d->control->preeditAreaText().length() > 0;
-}
-
-void QDeclarative1TextInputPrivate::init()
-{
- Q_Q(QDeclarative1TextInput);
- control->setParent(q);//Now mandatory due to accessibility changes
- control->setCursorWidth(1);
- control->setPasswordCharacter(QLatin1Char('*'));
- q->setSmooth(smooth);
- q->setAcceptedMouseButtons(Qt::LeftButton);
- q->setFlag(QGraphicsItem::ItemHasNoContents, false);
- q->setFlag(QGraphicsItem::ItemAcceptsInputMethod);
- q->connect(control, SIGNAL(cursorPositionChanged(int,int)),
- q, SLOT(cursorPosChanged()));
- q->connect(control, SIGNAL(selectionChanged()),
- q, SLOT(selectionChanged()));
- q->connect(control, SIGNAL(textChanged(QString)),
- q, SLOT(q_textChanged()));
- q->connect(control, SIGNAL(accepted()),
- q, SIGNAL(accepted()));
- q->connect(control, SIGNAL(updateNeeded(QRect)),
- q, SLOT(updateRect(QRect)));
-#ifndef QT_NO_CLIPBOARD
- q->connect(q, SIGNAL(readOnlyChanged(bool)),
- q, SLOT(q_canPasteChanged()));
- q->connect(QApplication::clipboard(), SIGNAL(dataChanged()),
- q, SLOT(q_canPasteChanged()));
- canPaste = !control->isReadOnly() && QApplication::clipboard()->text().length() != 0;
-#endif // QT_NO_CLIPBOARD
- q->connect(control, SIGNAL(updateMicroFocus()),
- q, SLOT(updateCursorRectangle()));
- q->connect(control, SIGNAL(displayTextChanged(QString)),
- q, SLOT(updateRect()));
- q->updateSize();
- oldValidity = control->hasAcceptableInput();
- lastSelectionStart = 0;
- lastSelectionEnd = 0;
- QPalette p = control->palette();
- selectedTextColor = p.color(QPalette::HighlightedText);
- selectionColor = p.color(QPalette::Highlight);
- determineHorizontalAlignment();
-}
-
-void QDeclarative1TextInput::cursorPosChanged()
-{
- Q_D(QDeclarative1TextInput);
- updateCursorRectangle();
- emit cursorPositionChanged();
- d->control->resetCursorBlinkTimer();
-
- if(!d->control->hasSelectedText()){
- if(d->lastSelectionStart != d->control->cursor()){
- d->lastSelectionStart = d->control->cursor();
- emit selectionStartChanged();
- }
- if(d->lastSelectionEnd != d->control->cursor()){
- d->lastSelectionEnd = d->control->cursor();
- emit selectionEndChanged();
- }
- }
-}
-
-void QDeclarative1TextInput::updateCursorRectangle()
-{
- Q_D(QDeclarative1TextInput);
- d->determineHorizontalAlignment();
- d->updateHorizontalScroll();
- updateRect();//TODO: Only update rect between pos's
- updateMicroFocus();
- emit cursorRectangleChanged();
- if (d->cursorItem)
- d->cursorItem->setX(d->control->cursorToX() - d->hscroll);
-}
-
-void QDeclarative1TextInput::selectionChanged()
-{
- Q_D(QDeclarative1TextInput);
- updateRect();//TODO: Only update rect in selection
- emit selectedTextChanged();
-
- if(d->lastSelectionStart != d->control->selectionStart()){
- d->lastSelectionStart = d->control->selectionStart();
- if(d->lastSelectionStart == -1)
- d->lastSelectionStart = d->control->cursor();
- emit selectionStartChanged();
- }
- if(d->lastSelectionEnd != d->control->selectionEnd()){
- d->lastSelectionEnd = d->control->selectionEnd();
- if(d->lastSelectionEnd == -1)
- d->lastSelectionEnd = d->control->cursor();
- emit selectionEndChanged();
- }
-}
-
-void QDeclarative1TextInput::q_textChanged()
-{
- Q_D(QDeclarative1TextInput);
- emit textChanged();
- emit displayTextChanged();
- updateSize();
- d->determineHorizontalAlignment();
- d->updateHorizontalScroll();
- updateMicroFocus();
- if(hasAcceptableInput() != d->oldValidity){
- d->oldValidity = hasAcceptableInput();
- emit acceptableInputChanged();
- }
-}
-
-void QDeclarative1TextInput::updateRect(const QRect &r)
-{
- Q_D(QDeclarative1TextInput);
- if(r == QRect())
- clearCache();
- else
- dirtyCache(QRect(r.x() - d->hscroll, r.y(), r.width(), r.height()));
- update();
-}
-
-QRectF QDeclarative1TextInput::boundingRect() const
-{
- Q_D(const QDeclarative1TextInput);
- QRectF r = QDeclarative1PaintedItem::boundingRect();
-
- int cursorWidth = d->cursorItem ? d->cursorItem->width() : d->control->cursorWidth();
-
- // Could include font max left/right bearings to either side of rectangle.
-
- r.setRight(r.right() + cursorWidth);
- return r;
-}
-
-void QDeclarative1TextInput::updateSize(bool needsRedraw)
-{
- Q_D(QDeclarative1TextInput);
- int w = width();
- int h = height();
- setImplicitHeight(d->control->height()-1); // -1 to counter QWidgetLineControl's +1 which is not consistent with Text.
- setImplicitWidth(d->calculateTextWidth());
- setContentsSize(QSize(width(), height()));//Repaints if changed
- if(w==width() && h==height() && needsRedraw){
- clearCache();
- update();
- }
-}
-
-void QDeclarative1TextInput::q_canPasteChanged()
-{
- Q_D(QDeclarative1TextInput);
- bool old = d->canPaste;
-#ifndef QT_NO_CLIPBOARD
- d->canPaste = !d->control->isReadOnly() && QApplication::clipboard()->text().length() != 0;
-#endif
- if(d->canPaste != old)
- emit canPasteChanged();
-}
-
-
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_LINEEDIT
-
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextinput_p.h b/src/qtquick1/graphicsitems/qdeclarativetextinput_p.h
deleted file mode 100644
index 44c9bbc3ea..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetextinput_p.h
+++ /dev/null
@@ -1,305 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVETEXTINPUT_H
-#define QDECLARATIVETEXTINPUT_H
-
-#include "private/qdeclarativetext_p.h"
-#include "private/qdeclarativeimplicitsizeitem_p.h"
-
-#include <QGraphicsSceneMouseEvent>
-#include <QIntValidator>
-
-#ifndef QT_NO_LINEEDIT
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QValidator;
-class QDeclarative1TextInputPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1TextInput : public QDeclarative1ImplicitSizePaintedItem
-{
- Q_OBJECT
- Q_ENUMS(HAlignment)
- Q_ENUMS(EchoMode)
- Q_ENUMS(SelectionMode)
-
- Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
- Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
- Q_PROPERTY(QColor selectionColor READ selectionColor WRITE setSelectionColor NOTIFY selectionColorChanged)
- Q_PROPERTY(QColor selectedTextColor READ selectedTextColor WRITE setSelectedTextColor NOTIFY selectedTextColorChanged)
- Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
- Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged)
- Q_PROPERTY(HAlignment effectiveHorizontalAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged REVISION 1)
- Q_PROPERTY(bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged)
- Q_PROPERTY(bool cursorVisible READ isCursorVisible WRITE setCursorVisible NOTIFY cursorVisibleChanged)
- Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged)
- Q_PROPERTY(QRect cursorRectangle READ cursorRectangle NOTIFY cursorRectangleChanged)
- Q_PROPERTY(QDeclarativeComponent *cursorDelegate READ cursorDelegate WRITE setCursorDelegate NOTIFY cursorDelegateChanged)
- Q_PROPERTY(int selectionStart READ selectionStart NOTIFY selectionStartChanged)
- Q_PROPERTY(int selectionEnd READ selectionEnd NOTIFY selectionEndChanged)
- Q_PROPERTY(QString selectedText READ selectedText NOTIFY selectedTextChanged)
-
- Q_PROPERTY(int maximumLength READ maxLength WRITE setMaxLength NOTIFY maximumLengthChanged)
-#ifndef QT_NO_VALIDATOR
- Q_PROPERTY(QValidator* validator READ validator WRITE setValidator NOTIFY validatorChanged)
-#endif
- Q_PROPERTY(QString inputMask READ inputMask WRITE setInputMask NOTIFY inputMaskChanged)
- Q_PROPERTY(Qt::InputMethodHints inputMethodHints READ imHints WRITE setIMHints)
-
- Q_PROPERTY(bool acceptableInput READ hasAcceptableInput NOTIFY acceptableInputChanged)
- Q_PROPERTY(EchoMode echoMode READ echoMode WRITE setEchoMode NOTIFY echoModeChanged)
- Q_PROPERTY(bool activeFocusOnPress READ focusOnPress WRITE setFocusOnPress NOTIFY activeFocusOnPressChanged)
- Q_PROPERTY(QString passwordCharacter READ passwordCharacter WRITE setPasswordCharacter NOTIFY passwordCharacterChanged)
- Q_PROPERTY(QString displayText READ displayText NOTIFY displayTextChanged)
- Q_PROPERTY(bool autoScroll READ autoScroll WRITE setAutoScroll NOTIFY autoScrollChanged)
- Q_PROPERTY(bool selectByMouse READ selectByMouse WRITE setSelectByMouse NOTIFY selectByMouseChanged)
- Q_PROPERTY(SelectionMode mouseSelectionMode READ mouseSelectionMode WRITE setMouseSelectionMode NOTIFY mouseSelectionModeChanged REVISION 1)
- Q_PROPERTY(bool canPaste READ canPaste NOTIFY canPasteChanged REVISION 1)
- Q_PROPERTY(bool inputMethodComposing READ isInputMethodComposing NOTIFY inputMethodComposingChanged REVISION 1)
-
-public:
- QDeclarative1TextInput(QDeclarativeItem* parent=0);
- ~QDeclarative1TextInput();
-
- enum EchoMode {//To match QLineEdit::EchoMode
- Normal,
- NoEcho,
- Password,
- PasswordEchoOnEdit
- };
-
- enum HAlignment {
- AlignLeft = Qt::AlignLeft,
- AlignRight = Qt::AlignRight,
- AlignHCenter = Qt::AlignHCenter
- };
-
- enum SelectionMode {
- SelectCharacters,
- SelectWords
- };
-
- enum CursorPosition {
- CursorBetweenCharacters,
- CursorOnCharacter
- };
-
- //Auxilliary functions needed to control the TextInput from QML
- Q_INVOKABLE int positionAt(int x) const;
- Q_INVOKABLE Q_REVISION(1) int positionAt(int x, CursorPosition position) const;
- Q_INVOKABLE QRectF positionToRectangle(int pos) const;
- Q_INVOKABLE void moveCursorSelection(int pos);
- Q_INVOKABLE Q_REVISION(1) void moveCursorSelection(int pos, SelectionMode mode);
-
- Q_INVOKABLE void openSoftwareInputPanel();
- Q_INVOKABLE void closeSoftwareInputPanel();
-
- QString text() const;
- void setText(const QString &);
-
- QFont font() const;
- void setFont(const QFont &font);
-
- QColor color() const;
- void setColor(const QColor &c);
-
- QColor selectionColor() const;
- void setSelectionColor(const QColor &c);
-
- QColor selectedTextColor() const;
- void setSelectedTextColor(const QColor &c);
-
- HAlignment hAlign() const;
- void setHAlign(HAlignment align);
- void resetHAlign();
- HAlignment effectiveHAlign() const;
-
- bool isReadOnly() const;
- void setReadOnly(bool);
-
- bool isCursorVisible() const;
- void setCursorVisible(bool on);
-
- int cursorPosition() const;
- void setCursorPosition(int cp);
-
- QRect cursorRectangle() const;
-
- int selectionStart() const;
- int selectionEnd() const;
-
- QString selectedText() const;
-
- int maxLength() const;
- void setMaxLength(int ml);
-
-#ifndef QT_NO_VALIDATOR
- QValidator * validator() const;
- void setValidator(QValidator* v);
-#endif
- QString inputMask() const;
- void setInputMask(const QString &im);
-
- EchoMode echoMode() const;
- void setEchoMode(EchoMode echo);
-
- QString passwordCharacter() const;
- void setPasswordCharacter(const QString &str);
-
- QString displayText() const;
-
- QDeclarativeComponent* cursorDelegate() const;
- void setCursorDelegate(QDeclarativeComponent*);
-
- bool focusOnPress() const;
- void setFocusOnPress(bool);
-
- bool autoScroll() const;
- void setAutoScroll(bool);
-
- bool selectByMouse() const;
- void setSelectByMouse(bool);
-
- SelectionMode mouseSelectionMode() const;
- void setMouseSelectionMode(SelectionMode mode);
-
- bool hasAcceptableInput() const;
-
- void drawContents(QPainter *p,const QRect &r);
- QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
-
- QRectF boundingRect() const;
- bool canPaste() const;
-
- bool isInputMethodComposing() const;
-
- Qt::InputMethodHints imHints() const;
- void setIMHints(Qt::InputMethodHints hints);
-
-Q_SIGNALS:
- void textChanged();
- void cursorPositionChanged();
- void cursorRectangleChanged();
- void selectionStartChanged();
- void selectionEndChanged();
- void selectedTextChanged();
- void accepted();
- void acceptableInputChanged();
- void colorChanged(const QColor &color);
- void selectionColorChanged(const QColor &color);
- void selectedTextColorChanged(const QColor &color);
- void fontChanged(const QFont &font);
- void horizontalAlignmentChanged(HAlignment alignment);
- void readOnlyChanged(bool isReadOnly);
- void cursorVisibleChanged(bool isCursorVisible);
- void cursorDelegateChanged();
- void maximumLengthChanged(int maximumLength);
- void validatorChanged();
- void inputMaskChanged(const QString &inputMask);
- void echoModeChanged(EchoMode echoMode);
- void passwordCharacterChanged();
- void displayTextChanged();
- void activeFocusOnPressChanged(bool activeFocusOnPress);
- void autoScrollChanged(bool autoScroll);
- void selectByMouseChanged(bool selectByMouse);
- Q_REVISION(1) void mouseSelectionModeChanged(SelectionMode mode);
- Q_REVISION(1) void canPasteChanged();
- Q_REVISION(1) void inputMethodComposingChanged();
- Q_REVISION(1) void effectiveHorizontalAlignmentChanged();
-
-protected:
- virtual void geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry);
-
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
- bool sceneEvent(QEvent *event);
- void keyPressEvent(QKeyEvent* ev);
- void inputMethodEvent(QInputMethodEvent *);
- bool event(QEvent *e);
- void focusInEvent(QFocusEvent *event);
-
-public Q_SLOTS:
- void selectAll();
- void selectWord();
- void select(int start, int end);
- Q_REVISION(1) void deselect();
- Q_REVISION(1) bool isRightToLeft(int start, int end);
-#ifndef QT_NO_CLIPBOARD
- void cut();
- void copy();
- void paste();
-#endif
-
-private Q_SLOTS:
- void updateSize(bool needsRedraw = true);
- void q_textChanged();
- void selectionChanged();
- void createCursor();
- void cursorPosChanged();
- void updateCursorRectangle();
- void updateRect(const QRect &r = QRect());
- void q_canPasteChanged();
-
-private:
- Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarative1TextInput)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1TextInput)
-#ifndef QT_NO_VALIDATOR
-QML_DECLARE_TYPE(QValidator)
-QML_DECLARE_TYPE(QIntValidator)
-QML_DECLARE_TYPE(QDoubleValidator)
-QML_DECLARE_TYPE(QRegExpValidator)
-#endif
-
-QT_END_HEADER
-
-#endif // QT_NO_LINEEDIT
-
-#endif // QDECLARATIVETEXTINPUT_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextinput_p_p.h b/src/qtquick1/graphicsitems/qdeclarativetextinput_p_p.h
deleted file mode 100644
index 433ee9acdb..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetextinput_p_p.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVETEXTINPUT_P_H
-#define QDECLARATIVETEXTINPUT_P_H
-
-#include "private/qdeclarativetextinput_p.h"
-
-#include "private/qdeclarativeimplicitsizeitem_p_p.h"
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QPointer>
-
-#include <private/qwidgetlinecontrol_p.h>
-
-//
-// W A R N I N G
-// -------------
-//
-// This file is not part of the Qt API. It exists purely as an
-// implementation detail. This header file may change from version to
-// version without notice, or even be removed.
-//
-// We mean it.
-
-#ifndef QT_NO_LINEEDIT
-
-QT_BEGIN_NAMESPACE
-
-class Q_AUTOTEST_EXPORT QDeclarative1TextInputPrivate : public QDeclarative1ImplicitSizePaintedItemPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1TextInput)
-public:
- QDeclarative1TextInputPrivate() : control(new QWidgetLineControl),
- color((QRgb)0), style(QDeclarative1Text::Normal),
- styleColor((QRgb)0), hAlign(QDeclarative1TextInput::AlignLeft),
- mouseSelectionMode(QDeclarative1TextInput::SelectCharacters), inputMethodHints(Qt::ImhNone),
- hscroll(0), oldScroll(0), oldValidity(false), focused(false), focusOnPress(true),
- showInputPanelOnFocus(true), clickCausedFocus(false), cursorVisible(false),
- autoScroll(true), selectByMouse(false), canPaste(false), hAlignImplicit(true),
- selectPressed(false)
- {
- }
-
- ~QDeclarative1TextInputPrivate()
- {
- }
-
- int xToPos(int x, QTextLine::CursorPosition betweenOrOn = QTextLine::CursorBetweenCharacters) const
- {
- Q_Q(const QDeclarative1TextInput);
- QRect cr = q->boundingRect().toRect();
- x-= cr.x() - hscroll;
- return control->xToPos(x, betweenOrOn);
- }
-
- void init();
- void startCreatingCursor();
- void focusChanged(bool hasFocus);
- void updateHorizontalScroll();
- bool determineHorizontalAlignment();
- bool setHAlign(QDeclarative1TextInput::HAlignment, bool forceAlign = false);
- void mirrorChange();
- int calculateTextWidth();
- bool sendMouseEventToInputContext(QGraphicsSceneMouseEvent *event, QEvent::Type eventType);
- void updateInputMethodHints();
-
- QWidgetLineControl* control;
-
- QFont font;
- QFont sourceFont;
- QColor color;
- QColor selectionColor;
- QColor selectedTextColor;
- QDeclarative1Text::TextStyle style;
- QColor styleColor;
- QDeclarative1TextInput::HAlignment hAlign;
- QDeclarative1TextInput::SelectionMode mouseSelectionMode;
- Qt::InputMethodHints inputMethodHints;
- QPointer<QDeclarativeComponent> cursorComponent;
- QPointer<QDeclarativeItem> cursorItem;
- QPointF pressPos;
-
- int lastSelectionStart;
- int lastSelectionEnd;
- int oldHeight;
- int oldWidth;
- int hscroll;
- int oldScroll;
- bool oldValidity:1;
- bool focused:1;
- bool focusOnPress:1;
- bool showInputPanelOnFocus:1;
- bool clickCausedFocus:1;
- bool cursorVisible:1;
- bool autoScroll:1;
- bool selectByMouse:1;
- bool canPaste:1;
- bool hAlignImplicit:1;
- bool selectPressed:1;
-
- static inline QDeclarative1TextInputPrivate *get(QDeclarative1TextInput *t) {
- return t->d_func();
- }
-};
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_LINEEDIT
-
-#endif
-
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextlayout.cpp b/src/qtquick1/graphicsitems/qdeclarativetextlayout.cpp
deleted file mode 100644
index 27fec2a581..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetextlayout.cpp
+++ /dev/null
@@ -1,395 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "qdeclarativetextlayout_p.h"
-#include <private/qstatictext_p.h>
-#include <private/qfontengine_p.h>
-#include <private/qtextengine_p.h>
-#include <private/qpainter_p.h>
-#include <private/qpaintengineex_p.h>
-
-QT_BEGIN_NAMESPACE
-
-// Defined in qpainter.cpp
-extern Q_GUI_EXPORT void qt_draw_decoration_for_glyphs(QPainter *painter, const glyph_t *glyphArray,
- const QFixedPoint *positions, int glyphCount,
- QFontEngine *fontEngine, const QFont &font,
- const QTextCharFormat &charFormat);
-
-
-
-class QDeclarative1TextLayoutPrivate
-{
-public:
- QDeclarative1TextLayoutPrivate()
- : cached(false) {}
-
- QPointF position;
-
- bool cached;
- QVector<QStaticTextItem> items;
- QVector<QFixedPoint> positions;
- QVector<glyph_t> glyphs;
- QVector<QChar> chars;
-};
-
-namespace {
-class DrawTextItemRecorder: public QPaintEngine
-{
- public:
- DrawTextItemRecorder(bool untransformedCoordinates, bool useBackendOptimizations)
- : m_inertText(0), m_dirtyPen(false), m_useBackendOptimizations(useBackendOptimizations),
- m_untransformedCoordinates(untransformedCoordinates), m_currentColor(Qt::black)
- {
- }
-
- virtual void updateState(const QPaintEngineState &newState)
- {
- if (newState.state() & QPaintEngine::DirtyPen
- && newState.pen().color() != m_currentColor) {
- m_dirtyPen = true;
- m_currentColor = newState.pen().color();
- }
- }
-
- virtual void drawTextItem(const QPointF &position, const QTextItem &textItem)
- {
- int glyphOffset = m_inertText->glyphs.size(); // Store offset into glyph pool
- int positionOffset = m_inertText->glyphs.size(); // Offset into position pool
- int charOffset = m_inertText->chars.size();
-
- const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem);
-
- bool needFreshCurrentItem = true;
- if (!m_inertText->items.isEmpty()) {
- QStaticTextItem &last = m_inertText->items[m_inertText->items.count() - 1];
-
- if (last.fontEngine() == ti.fontEngine && last.font == ti.font() &&
- (!m_dirtyPen || last.color == state->pen().color())) {
- needFreshCurrentItem = false;
-
- last.numChars += ti.num_chars;
-
- }
- }
-
- if (needFreshCurrentItem) {
- QStaticTextItem currentItem;
-
- currentItem.setFontEngine(ti.fontEngine);
- currentItem.font = ti.font();
- currentItem.charOffset = charOffset;
- currentItem.numChars = ti.num_chars;
- currentItem.numGlyphs = 0;
- currentItem.glyphOffset = glyphOffset;
- currentItem.positionOffset = positionOffset;
- currentItem.useBackendOptimizations = m_useBackendOptimizations;
- if (m_dirtyPen)
- currentItem.color = m_currentColor;
-
- m_inertText->items.append(currentItem);
- }
-
- QStaticTextItem &currentItem = m_inertText->items.last();
-
- QTransform matrix = m_untransformedCoordinates ? QTransform() : state->transform();
- matrix.translate(position.x(), position.y());
-
- QVarLengthArray<glyph_t> glyphs;
- QVarLengthArray<QFixedPoint> positions;
- ti.fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions);
-
- int size = glyphs.size();
- Q_ASSERT(size == positions.size());
- currentItem.numGlyphs += size;
-
- m_inertText->glyphs.resize(m_inertText->glyphs.size() + size);
- m_inertText->positions.resize(m_inertText->glyphs.size());
- m_inertText->chars.resize(m_inertText->chars.size() + ti.num_chars);
-
- glyph_t *glyphsDestination = m_inertText->glyphs.data() + glyphOffset;
- qMemCopy(glyphsDestination, glyphs.constData(), sizeof(glyph_t) * size);
-
- QFixedPoint *positionsDestination = m_inertText->positions.data() + positionOffset;
- qMemCopy(positionsDestination, positions.constData(), sizeof(QFixedPoint) * size);
-
- QChar *charsDestination = m_inertText->chars.data() + charOffset;
- qMemCopy(charsDestination, ti.chars, sizeof(QChar) * ti.num_chars);
-
- }
-
- virtual void drawPolygon(const QPointF *, int , PolygonDrawMode )
- {
- /* intentionally empty */
- }
-
- virtual bool begin(QPaintDevice *) { return true; }
- virtual bool end() { return true; }
- virtual void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) {}
- virtual Type type() const
- {
- return User;
- }
-
- void begin(QDeclarative1TextLayoutPrivate *t) {
- m_inertText = t;
- m_dirtyPen = false;
- }
-
- private:
- QDeclarative1TextLayoutPrivate *m_inertText;
-
- bool m_dirtyPen;
- bool m_useBackendOptimizations;
- bool m_untransformedCoordinates;
- QColor m_currentColor;
-};
-
-class DrawTextItemDevice: public QPaintDevice
-{
- public:
- DrawTextItemDevice(bool untransformedCoordinates, bool useBackendOptimizations)
- {
- m_paintEngine = new DrawTextItemRecorder(untransformedCoordinates,
- useBackendOptimizations);
- }
-
- ~DrawTextItemDevice()
- {
- delete m_paintEngine;
- }
-
- void begin(QDeclarative1TextLayoutPrivate *t) {
- m_paintEngine->begin(t);
- }
-
- int metric(PaintDeviceMetric m) const
- {
- int val;
- switch (m) {
- case PdmWidth:
- case PdmHeight:
- case PdmWidthMM:
- case PdmHeightMM:
- val = 0;
- break;
- case PdmDpiX:
- case PdmPhysicalDpiX:
- val = qt_defaultDpiX();
- break;
- case PdmDpiY:
- case PdmPhysicalDpiY:
- val = qt_defaultDpiY();
- break;
- case PdmNumColors:
- val = 16777216;
- break;
- case PdmDepth:
- val = 24;
- break;
- default:
- val = 0;
- qWarning("DrawTextItemDevice::metric: Invalid metric command");
- }
- return val;
- }
-
- virtual QPaintEngine *paintEngine() const
- {
- return m_paintEngine;
- }
-
- private:
- DrawTextItemRecorder *m_paintEngine;
-};
-
-struct InertTextPainter {
- InertTextPainter()
- : device(true, true), painter(&device) {}
-
- DrawTextItemDevice device;
- QPainter painter;
-};
-}
-
-Q_GLOBAL_STATIC(InertTextPainter, inertTextPainter);
-
-/*!
-\class QDeclarative1TextLayout
-\brief The QDeclarative1TextLayout class is a version of QStaticText that works with QTextLayouts.
-\internal
-
-This class is basically a copy of the QStaticText code, but it is adapted to source its text from
-QTextLayout.
-
-It is also considerably faster to create a QDeclarative1TextLayout than a QStaticText because it uses
-a single, shared QPainter instance. QStaticText by comparison creates a new QPainter per instance.
-As a consequence this means that QDeclarative1TextLayout is not re-enterant. Adding a lock around
-the shared painter solves this, and only introduces a minor performance penalty, but is unnecessary
-for QDeclarative1TextLayout's current use (QDeclarative1Text is already tied to the GUI thread).
-*/
-
-QDeclarative1TextLayout::QDeclarative1TextLayout()
-: d(0)
-{
-}
-
-QDeclarative1TextLayout::QDeclarative1TextLayout(const QString &text)
-: QTextLayout(text), d(0)
-{
-}
-
-QDeclarative1TextLayout::~QDeclarative1TextLayout()
-{
- if (d) delete d;
-}
-
-void QDeclarative1TextLayout::beginLayout()
-{
- if (d && d->cached) {
- d->cached = false;
- d->items.clear();
- d->positions.clear();
- d->glyphs.clear();
- d->chars.clear();
- d->position = QPointF();
- }
- QTextLayout::beginLayout();
-}
-
-void QDeclarative1TextLayout::clearLayout()
-{
- if (d && d->cached) {
- d->cached = false;
- d->items.clear();
- d->positions.clear();
- d->glyphs.clear();
- d->chars.clear();
- d->position = QPointF();
- }
- QTextLayout::clearLayout();
-}
-
-void QDeclarative1TextLayout::prepare()
-{
- if (!d || !d->cached) {
-
- if (!d)
- d = new QDeclarative1TextLayoutPrivate;
-
- InertTextPainter *itp = inertTextPainter();
- itp->device.begin(d);
- QTextLayout::draw(&itp->painter, QPointF(0, 0));
-
- glyph_t *glyphPool = d->glyphs.data();
- QFixedPoint *positionPool = d->positions.data();
- QChar *charPool = d->chars.data();
-
- int itemCount = d->items.count();
- for (int ii = 0; ii < itemCount; ++ii) {
- QStaticTextItem &item = d->items[ii];
- item.glyphs = glyphPool + item.glyphOffset;
- item.glyphPositions = positionPool + item.positionOffset;
- item.chars = charPool + item.charOffset;
- }
-
- d->cached = true;
- }
-}
-
-void QDeclarative1TextLayout::draw(QPainter *painter, const QPointF &p)
-{
- QPainterPrivate *priv = QPainterPrivate::get(painter);
-
- bool paintEngineSupportsTransformations = priv->extended &&
- (priv->extended->type() == QPaintEngine::OpenGL2 ||
- priv->extended->type() == QPaintEngine::OpenVG ||
- priv->extended->type() == QPaintEngine::OpenGL);
-
- if (!paintEngineSupportsTransformations || !priv->state->matrix.isAffine()) {
- QTextLayout::draw(painter, p);
- return;
- }
-
- prepare();
-
- int itemCount = d->items.count();
-
- if (p != d->position) {
- QFixed fx = QFixed::fromReal(p.x());
- QFixed fy = QFixed::fromReal(p.y());
- QFixed oldX = QFixed::fromReal(d->position.x());
- QFixed oldY = QFixed::fromReal(d->position.y());
- for (int item = 0; item < itemCount; ++item) {
- QStaticTextItem &textItem = d->items[item];
-
- for (int ii = 0; ii < textItem.numGlyphs; ++ii) {
- textItem.glyphPositions[ii].x += fx - oldX;
- textItem.glyphPositions[ii].y += fy - oldY;
- }
- textItem.userDataNeedsUpdate = true;
- }
-
- d->position = p;
- }
-
- QPen oldPen = priv->state->pen;
- QColor currentColor = oldPen.color();
- for (int ii = 0; ii < itemCount; ++ii) {
- QStaticTextItem &item = d->items[ii];
- if (item.color.isValid() && currentColor != item.color) {
- painter->setPen(item.color);
- currentColor = item.color;
- }
- priv->extended->drawStaticTextItem(&item);
-
- qt_draw_decoration_for_glyphs(painter, item.glyphs, item.glyphPositions,
- item.numGlyphs, item.fontEngine(), painter->font(),
- QTextCharFormat());
- }
- if (currentColor != oldPen.color())
- painter->setPen(oldPen);
-}
-
-
-
-QT_END_NAMESPACE
-
diff --git a/src/qtquick1/graphicsitems/qdeclarativetextlayout_p.h b/src/qtquick1/graphicsitems/qdeclarativetextlayout_p.h
deleted file mode 100644
index dc2fc4be91..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetextlayout_p.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVETEXTLAYOUT_P_H
-#define QDECLARATIVETEXTLAYOUT_P_H
-
-#include <QtGui/qtextlayout.h>
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1TextLayoutPrivate;
-class QDeclarative1TextLayout : public QTextLayout
-{
-public:
- QDeclarative1TextLayout();
- QDeclarative1TextLayout(const QString &);
- ~QDeclarative1TextLayout();
-
- void beginLayout();
- void clearLayout();
-
- void prepare();
- void draw(QPainter *, const QPointF & = QPointF());
-
-private:
- QDeclarative1TextLayoutPrivate *d;
-};
-
-QT_END_NAMESPACE
-
-QT_END_HEADER
-
-#endif // QDECLARATIVETEXTLAYOUT_P_H
diff --git a/src/qtquick1/graphicsitems/qdeclarativetranslate.cpp b/src/qtquick1/graphicsitems/qdeclarativetranslate.cpp
deleted file mode 100644
index c2ee696e9c..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetranslate.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "private/qdeclarativetranslate_p.h"
-#include <private/qgraphicstransform_p.h>
-#include <QDebug>
-#include <QtCore/qmath.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-class QDeclarative1TranslatePrivate : public QGraphicsTransformPrivate
-{
-public:
- QDeclarative1TranslatePrivate()
- : x(0), y(0) {}
- qreal x;
- qreal y;
-};
-
-/*!
- Constructs an empty QDeclarative1Translate object with the given \a parent.
-*/
-QDeclarative1Translate::QDeclarative1Translate(QObject *parent)
- : QGraphicsTransform(*new QDeclarative1TranslatePrivate, parent)
-{
-}
-
-/*!
- Destroys the graphics scale.
-*/
-QDeclarative1Translate::~QDeclarative1Translate()
-{
-}
-
-/*!
- \property QDeclarative1Translate::x
- \brief the horizontal translation.
-
- The translation can be any real number; the default value is 0.0.
-
- \sa y
-*/
-qreal QDeclarative1Translate::x() const
-{
- Q_D(const QDeclarative1Translate);
- return d->x;
-}
-void QDeclarative1Translate::setX(qreal x)
-{
- Q_D(QDeclarative1Translate);
- if (d->x == x)
- return;
- d->x = x;
- update();
- emit xChanged();
-}
-
-/*!
- \property QDeclarative1Translate::y
- \brief the vertical translation.
-
- The translation can be any real number; the default value is 0.0.
-
- \sa x
-*/
-qreal QDeclarative1Translate::y() const
-{
- Q_D(const QDeclarative1Translate);
- return d->y;
-}
-void QDeclarative1Translate::setY(qreal y)
-{
- Q_D(QDeclarative1Translate);
- if (d->y == y)
- return;
- d->y = y;
- update();
- emit yChanged();
-}
-
-void QDeclarative1Translate::applyTo(QMatrix4x4 *matrix) const
-{
- Q_D(const QDeclarative1Translate);
- matrix->translate(d->x, d->y, 0);
-}
-
-
-
-QT_END_NAMESPACE
diff --git a/src/qtquick1/graphicsitems/qdeclarativetranslate_p.h b/src/qtquick1/graphicsitems/qdeclarativetranslate_p.h
deleted file mode 100644
index 2f7682bf86..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativetranslate_p.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVETRANSLATE_H
-#define QDECLARATIVETRANSLATE_H
-
-#include "qdeclarativeitem.h"
-
-QT_BEGIN_HEADER
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarative1TranslatePrivate;
-
-class Q_AUTOTEST_EXPORT QDeclarative1Translate : public QGraphicsTransform
-{
- Q_OBJECT
-
- Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged)
- Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged)
-
-public:
- QDeclarative1Translate(QObject *parent = 0);
- ~QDeclarative1Translate();
-
- qreal x() const;
- void setX(qreal);
-
- qreal y() const;
- void setY(qreal);
-
- void applyTo(QMatrix4x4 *matrix) const;
-
-Q_SIGNALS:
- void xChanged();
- void yChanged();
-
-private:
- Q_DECLARE_PRIVATE(QDeclarative1Translate)
- Q_DISABLE_COPY(QDeclarative1Translate)
-};
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1Translate)
-
-QT_END_HEADER
-
-#endif
diff --git a/src/qtquick1/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/qtquick1/graphicsitems/qdeclarativevisualitemmodel.cpp
deleted file mode 100644
index be0b185d7a..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ /dev/null
@@ -1,1432 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#include "QtQuick1/private/qdeclarativevisualitemmodel_p.h"
-
-#include "QtQuick1/qdeclarativeitem.h"
-
-#include <QtDeclarative/qdeclarativecontext.h>
-#include <QtDeclarative/private/qdeclarativecontext_p.h>
-#include <QtDeclarative/qdeclarativeengine.h>
-#include <QtDeclarative/qdeclarativeexpression.h>
-#include <QtQuick1/private/qdeclarativepackage_p.h>
-#include <QtQuick1/private/qdeclarativeopenmetaobject_p.h>
-#include <QtQuick1/private/qdeclarativelistaccessor_p.h>
-#include <QtDeclarative/qdeclarativeinfo.h>
-#include <QtDeclarative/private/qdeclarativedata_p.h>
-#include <QtDeclarative/private/qdeclarativepropertycache_p.h>
-#include <QtDeclarative/private/qdeclarativeguard_p.h>
-#include <QtDeclarative/private/qdeclarativeglobal_p.h>
-
-#include <qgraphicsscene.h>
-#include <QtDeclarative/private/qlistmodelinterface_p.h>
-#include <qhash.h>
-#include <qlist.h>
-#include <private/qmetaobjectbuilder_p.h>
-#include <QtCore/qdebug.h>
-
-#include <private/qobject_p.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-QHash<QObject*, QDeclarative1VisualItemModelAttached*> QDeclarative1VisualItemModelAttached::attachedProperties;
-
-
-class QDeclarative1VisualItemModelPrivate : public QObjectPrivate
-{
- Q_DECLARE_PUBLIC(QDeclarative1VisualItemModel)
-public:
- QDeclarative1VisualItemModelPrivate() : QObjectPrivate() {}
-
- static void children_append(QDeclarativeListProperty<QDeclarativeItem> *prop, QDeclarativeItem *item) {
- QDeclarative_setParent_noEvent(item, prop->object);
- static_cast<QDeclarative1VisualItemModelPrivate *>(prop->data)->children.append(Item(item));
- static_cast<QDeclarative1VisualItemModelPrivate *>(prop->data)->itemAppended();
- static_cast<QDeclarative1VisualItemModelPrivate *>(prop->data)->emitChildrenChanged();
- }
-
- static int children_count(QDeclarativeListProperty<QDeclarativeItem> *prop) {
- return static_cast<QDeclarative1VisualItemModelPrivate *>(prop->data)->children.count();
- }
-
- static QDeclarativeItem *children_at(QDeclarativeListProperty<QDeclarativeItem> *prop, int index) {
- return static_cast<QDeclarative1VisualItemModelPrivate *>(prop->data)->children.at(index).item;
- }
-
- void itemAppended() {
- Q_Q(QDeclarative1VisualItemModel);
- QDeclarative1VisualItemModelAttached *attached = QDeclarative1VisualItemModelAttached::properties(children.last().item);
- attached->setIndex(children.count()-1);
- emit q->itemsInserted(children.count()-1, 1);
- emit q->countChanged();
- }
-
- void emitChildrenChanged() {
- Q_Q(QDeclarative1VisualItemModel);
- emit q->childrenChanged();
- }
-
- int indexOf(QDeclarativeItem *item) const {
- for (int i = 0; i < children.count(); ++i)
- if (children.at(i).item == item)
- return i;
- return -1;
- }
-
- class Item {
- public:
- Item(QDeclarativeItem *i) : item(i), ref(0) {}
-
- void addRef() { ++ref; }
- bool deref() { return --ref == 0; }
-
- QDeclarativeItem *item;
- int ref;
- };
-
- QList<Item> children;
-};
-
-
-/*!
- \qmlclass VisualItemModel QDeclarative1VisualItemModel
- \inqmlmodule QtQuick 1
- \ingroup qml-working-with-data
- \since QtQuick 1.0
- \brief The VisualItemModel allows items to be provided to a view.
-
- A VisualItemModel contains the visual items to be used in a view.
- When a VisualItemModel is used in a view, the view does not require
- a delegate since the VisualItemModel already contains the visual
- delegate (items).
-
- An item can determine its index within the
- model via the \l{VisualItemModel::index}{index} attached property.
-
- The example below places three colored rectangles in a ListView.
- \code
- import QtQuick 1.0
-
- Rectangle {
- VisualItemModel {
- id: itemModel
- Rectangle { height: 30; width: 80; color: "red" }
- Rectangle { height: 30; width: 80; color: "green" }
- Rectangle { height: 30; width: 80; color: "blue" }
- }
-
- ListView {
- anchors.fill: parent
- model: itemModel
- }
- }
- \endcode
-
- \image visualitemmodel.png
-
- \sa {declarative/modelviews/visualitemmodel}{VisualItemModel example}
-*/
-QDeclarative1VisualItemModel::QDeclarative1VisualItemModel(QObject *parent)
- : QDeclarative1VisualModel(*(new QDeclarative1VisualItemModelPrivate), parent)
-{
-}
-
-/*!
- \qmlattachedproperty int VisualItemModel::index
- This attached property holds the index of this delegate's item within the model.
-
- It is attached to each instance of the delegate.
-*/
-
-QDeclarativeListProperty<QDeclarativeItem> QDeclarative1VisualItemModel::children()
-{
- Q_D(QDeclarative1VisualItemModel);
- return QDeclarativeListProperty<QDeclarativeItem>(this, d, d->children_append,
- d->children_count, d->children_at);
-}
-
-/*!
- \qmlproperty int QtQuick1::VisualItemModel::count
-
- The number of items in the model. This property is readonly.
-*/
-int QDeclarative1VisualItemModel::count() const
-{
- Q_D(const QDeclarative1VisualItemModel);
- return d->children.count();
-}
-
-bool QDeclarative1VisualItemModel::isValid() const
-{
- return true;
-}
-
-QDeclarativeItem *QDeclarative1VisualItemModel::item(int index, bool)
-{
- Q_D(QDeclarative1VisualItemModel);
- QDeclarative1VisualItemModelPrivate::Item &item = d->children[index];
- item.addRef();
- return item.item;
-}
-
-QDeclarative1VisualModel::ReleaseFlags QDeclarative1VisualItemModel::release(QDeclarativeItem *item)
-{
- Q_D(QDeclarative1VisualItemModel);
- int idx = d->indexOf(item);
- if (idx >= 0) {
- if (d->children[idx].deref()) {
- if (item->scene())
- item->scene()->removeItem(item);
- QDeclarative_setParent_noEvent(item, this);
- }
- }
- return 0;
-}
-
-bool QDeclarative1VisualItemModel::completePending() const
-{
- return false;
-}
-
-void QDeclarative1VisualItemModel::completeItem()
-{
- // Nothing to do
-}
-
-QString QDeclarative1VisualItemModel::stringValue(int index, const QString &name)
-{
- Q_D(QDeclarative1VisualItemModel);
- if (index < 0 || index >= d->children.count())
- return QString();
- return QDeclarativeEngine::contextForObject(d->children.at(index).item)->contextProperty(name).toString();
-}
-
-int QDeclarative1VisualItemModel::indexOf(QDeclarativeItem *item, QObject *) const
-{
- Q_D(const QDeclarative1VisualItemModel);
- return d->indexOf(item);
-}
-
-QDeclarative1VisualItemModelAttached *QDeclarative1VisualItemModel::qmlAttachedProperties(QObject *obj)
-{
- return QDeclarative1VisualItemModelAttached::properties(obj);
-}
-
-//============================================================================
-
-class VDMDelegateDataType : public QDeclarative1OpenMetaObjectType
-{
-public:
- VDMDelegateDataType(const QMetaObject *base, QDeclarativeEngine *engine) : QDeclarative1OpenMetaObjectType(base, engine) {}
-
- void propertyCreated(int, QMetaPropertyBuilder &prop) {
- prop.setWritable(false);
- }
-};
-
-class QDeclarative1VisualDataModelParts;
-class QDeclarative1VisualDataModelData;
-class QDeclarative1VisualDataModelPrivate : public QObjectPrivate
-{
-public:
- QDeclarative1VisualDataModelPrivate(QDeclarativeContext *);
-
- static QDeclarative1VisualDataModelPrivate *get(QDeclarative1VisualDataModel *m) {
- return static_cast<QDeclarative1VisualDataModelPrivate *>(QObjectPrivate::get(m));
- }
-
- QDeclarativeGuard<QListModelInterface> m_listModelInterface;
- QDeclarativeGuard<QAbstractItemModel> m_abstractItemModel;
- QDeclarativeGuard<QDeclarative1VisualDataModel> m_visualItemModel;
- QString m_part;
-
- QDeclarativeComponent *m_delegate;
- QDeclarativeGuard<QDeclarativeContext> m_context;
- QList<int> m_roles;
- QHash<QByteArray,int> m_roleNames;
- void ensureRoles() {
- if (m_roleNames.isEmpty()) {
- if (m_listModelInterface) {
- m_roles = m_listModelInterface->roles();
- for (int ii = 0; ii < m_roles.count(); ++ii)
- m_roleNames.insert(m_listModelInterface->toString(m_roles.at(ii)).toUtf8(), m_roles.at(ii));
- } else if (m_abstractItemModel) {
- QHash<int,QByteArray> roles = m_abstractItemModel->roleNames();
- for (QHash<int,QByteArray>::const_iterator it = roles.begin();
- it != roles.end(); ++it) {
- m_roles.append(it.key());
- m_roleNames.insert(*it, it.key());
- }
- if (m_roles.count())
- m_roleNames.insert("hasModelChildren", -1);
- } else if (m_listAccessor) {
- m_roleNames.insert("modelData", 0);
- if (m_listAccessor->type() == QDeclarative1ListAccessor::Instance) {
- if (QObject *object = m_listAccessor->at(0).value<QObject*>()) {
- int count = object->metaObject()->propertyCount();
- for (int ii = 1; ii < count; ++ii) {
- const QMetaProperty &prop = object->metaObject()->property(ii);
- m_roleNames.insert(prop.name(), 0);
- }
- }
- }
- }
- }
- }
-
- QHash<int,int> m_roleToPropId;
- int m_modelDataPropId;
- void createMetaData() {
- if (!m_metaDataCreated) {
- ensureRoles();
- if (m_roleNames.count()) {
- QHash<QByteArray, int>::const_iterator it = m_roleNames.begin();
- while (it != m_roleNames.end()) {
- int propId = m_delegateDataType->createProperty(it.key()) - m_delegateDataType->propertyOffset();
- m_roleToPropId.insert(*it, propId);
- ++it;
- }
- // Add modelData property
- if (m_roles.count() == 1)
- m_modelDataPropId = m_delegateDataType->createProperty("modelData") - m_delegateDataType->propertyOffset();
- m_metaDataCreated = true;
- }
- }
- }
-
- struct ObjectRef {
- ObjectRef(QObject *object=0) : obj(object), ref(1) {}
- QObject *obj;
- int ref;
- };
- class Cache : public QHash<int, ObjectRef> {
- public:
- QObject *getItem(int index) {
- QObject *item = 0;
- QHash<int,ObjectRef>::iterator it = find(index);
- if (it != end()) {
- (*it).ref++;
- item = (*it).obj;
- }
- return item;
- }
- QObject *item(int index) {
- QObject *item = 0;
- QHash<int, ObjectRef>::const_iterator it = find(index);
- if (it != end())
- item = (*it).obj;
- return item;
- }
- void insertItem(int index, QObject *obj) {
- insert(index, ObjectRef(obj));
- }
- bool releaseItem(QObject *obj) {
- QHash<int, ObjectRef>::iterator it = begin();
- for (; it != end(); ++it) {
- ObjectRef &objRef = *it;
- if (objRef.obj == obj) {
- if (--objRef.ref == 0) {
- erase(it);
- return true;
- }
- break;
- }
- }
- return false;
- }
- };
-
- int modelCount() const {
- if (m_visualItemModel)
- return m_visualItemModel->count();
- if (m_listModelInterface)
- return m_listModelInterface->count();
- if (m_abstractItemModel)
- return m_abstractItemModel->rowCount(m_root);
- if (m_listAccessor)
- return m_listAccessor->count();
- return 0;
- }
-
- Cache m_cache;
- QHash<QObject *, QDeclarative1Package*> m_packaged;
-
- QDeclarative1VisualDataModelParts *m_parts;
- friend class QDeclarative1VisualItemParts;
-
- VDMDelegateDataType *m_delegateDataType;
- friend class QDeclarative1VisualDataModelData;
- bool m_metaDataCreated : 1;
- bool m_metaDataCacheable : 1;
- bool m_delegateValidated : 1;
- bool m_completePending : 1;
-
- QDeclarative1VisualDataModelData *data(QObject *item);
-
- QVariant m_modelVariant;
- QDeclarative1ListAccessor *m_listAccessor;
-
- QModelIndex m_root;
- QList<QByteArray> watchedRoles;
- QList<int> watchedRoleIds;
-};
-
-class QDeclarative1VisualDataModelDataMetaObject : public QDeclarative1OpenMetaObject
-{
-public:
- QDeclarative1VisualDataModelDataMetaObject(QObject *parent, QDeclarative1OpenMetaObjectType *type)
- : QDeclarative1OpenMetaObject(parent, type) {}
-
- virtual QVariant initialValue(int);
- virtual int createProperty(const char *, const char *);
-
-private:
- friend class QDeclarative1VisualDataModelData;
-};
-
-class QDeclarative1VisualDataModelData : public QObject
-{
-Q_OBJECT
-public:
- QDeclarative1VisualDataModelData(int index, QDeclarative1VisualDataModel *model);
- ~QDeclarative1VisualDataModelData();
-
- Q_PROPERTY(int index READ index NOTIFY indexChanged)
- int index() const;
- void setIndex(int index);
-
- int propForRole(int) const;
- int modelDataPropertyId() const {
- QDeclarative1VisualDataModelPrivate *model = QDeclarative1VisualDataModelPrivate::get(m_model);
- return model->m_modelDataPropId;
- }
-
- void setValue(int, const QVariant &);
- bool hasValue(int id) const {
- return m_meta->hasValue(id);
- }
-
- void ensureProperties();
-
-Q_SIGNALS:
- void indexChanged();
-
-private:
- friend class QDeclarative1VisualDataModelDataMetaObject;
- int m_index;
- QDeclarativeGuard<QDeclarative1VisualDataModel> m_model;
- QDeclarative1VisualDataModelDataMetaObject *m_meta;
-};
-
-int QDeclarative1VisualDataModelData::propForRole(int id) const
-{
- QDeclarative1VisualDataModelPrivate *model = QDeclarative1VisualDataModelPrivate::get(m_model);
- QHash<int,int>::const_iterator it = model->m_roleToPropId.find(id);
- if (it != model->m_roleToPropId.end())
- return *it;
-
- return -1;
-}
-
-void QDeclarative1VisualDataModelData::setValue(int id, const QVariant &val)
-{
- m_meta->setValue(id, val);
-}
-
-int QDeclarative1VisualDataModelDataMetaObject::createProperty(const char *name, const char *type)
-{
- QDeclarative1VisualDataModelData *data =
- static_cast<QDeclarative1VisualDataModelData *>(object());
-
- if (!data->m_model)
- return -1;
-
- QDeclarative1VisualDataModelPrivate *model = QDeclarative1VisualDataModelPrivate::get(data->m_model);
- if (data->m_index < 0 || data->m_index >= model->modelCount())
- return -1;
-
- if ((!model->m_listModelInterface || !model->m_abstractItemModel) && model->m_listAccessor) {
- if (model->m_listAccessor->type() == QDeclarative1ListAccessor::ListProperty) {
- model->ensureRoles();
- if (qstrcmp(name,"modelData") == 0)
- return QDeclarative1OpenMetaObject::createProperty(name, type);
- }
- }
- return -1;
-}
-
-QVariant QDeclarative1VisualDataModelDataMetaObject::initialValue(int propId)
-{
- QDeclarative1VisualDataModelData *data =
- static_cast<QDeclarative1VisualDataModelData *>(object());
-
- Q_ASSERT(data->m_model);
- QDeclarative1VisualDataModelPrivate *model = QDeclarative1VisualDataModelPrivate::get(data->m_model);
-
- QByteArray propName = name(propId);
- if ((!model->m_listModelInterface || !model->m_abstractItemModel) && model->m_listAccessor) {
- if (propName == "modelData") {
- if (model->m_listAccessor->type() == QDeclarative1ListAccessor::Instance) {
- QObject *object = model->m_listAccessor->at(0).value<QObject*>();
- return object->metaObject()->property(1).read(object); // the first property after objectName
- }
- return model->m_listAccessor->at(data->m_index);
- } else {
- // return any property of a single object instance.
- QObject *object = model->m_listAccessor->at(data->m_index).value<QObject*>();
- return object->property(propName);
- }
- } else if (model->m_listModelInterface) {
- model->ensureRoles();
- QHash<QByteArray,int>::const_iterator it = model->m_roleNames.find(propName);
- if (it != model->m_roleNames.end()) {
- QVariant value = model->m_listModelInterface->data(data->m_index, *it);
- return value;
- } else if (model->m_roles.count() == 1 && propName == "modelData") {
- //for compatibility with other lists, assign modelData if there is only a single role
- QVariant value = model->m_listModelInterface->data(data->m_index, model->m_roles.first());
- return value;
- }
- } else if (model->m_abstractItemModel) {
- model->ensureRoles();
- QModelIndex index = model->m_abstractItemModel->index(data->m_index, 0, model->m_root);
- if (propName == "hasModelChildren") {
- return model->m_abstractItemModel->hasChildren(index);
- } else {
- QHash<QByteArray,int>::const_iterator it = model->m_roleNames.find(propName);
- if (it != model->m_roleNames.end()) {
- return model->m_abstractItemModel->data(index, *it);
- } else if (model->m_roles.count() == 1 && propName == "modelData") {
- //for compatibility with other lists, assign modelData if there is only a single role
- return model->m_abstractItemModel->data(index, model->m_roles.first());
- }
- }
- }
- Q_ASSERT(!"Can never be reached");
- return QVariant();
-}
-
-QDeclarative1VisualDataModelData::QDeclarative1VisualDataModelData(int index,
- QDeclarative1VisualDataModel *model)
-: m_index(index), m_model(model),
-m_meta(new QDeclarative1VisualDataModelDataMetaObject(this, QDeclarative1VisualDataModelPrivate::get(model)->m_delegateDataType))
-{
- ensureProperties();
-}
-
-QDeclarative1VisualDataModelData::~QDeclarative1VisualDataModelData()
-{
-}
-
-void QDeclarative1VisualDataModelData::ensureProperties()
-{
- QDeclarative1VisualDataModelPrivate *modelPriv = QDeclarative1VisualDataModelPrivate::get(m_model);
- if (modelPriv->m_metaDataCacheable) {
- if (!modelPriv->m_metaDataCreated)
- modelPriv->createMetaData();
- if (modelPriv->m_metaDataCreated)
- m_meta->setCached(true);
- }
-}
-
-int QDeclarative1VisualDataModelData::index() const
-{
- return m_index;
-}
-
-// This is internal only - it should not be set from qml
-void QDeclarative1VisualDataModelData::setIndex(int index)
-{
- m_index = index;
- emit indexChanged();
-}
-
-//---------------------------------------------------------------------------
-
-class QDeclarative1VisualDataModelPartsMetaObject : public QDeclarative1OpenMetaObject
-{
-public:
- QDeclarative1VisualDataModelPartsMetaObject(QObject *parent)
- : QDeclarative1OpenMetaObject(parent) {}
-
- virtual void propertyCreated(int, QMetaPropertyBuilder &);
- virtual QVariant initialValue(int);
-};
-
-class QDeclarative1VisualDataModelParts : public QObject
-{
-Q_OBJECT
-public:
- QDeclarative1VisualDataModelParts(QDeclarative1VisualDataModel *parent);
-
-private:
- friend class QDeclarative1VisualDataModelPartsMetaObject;
- QDeclarative1VisualDataModel *model;
-};
-
-void QDeclarative1VisualDataModelPartsMetaObject::propertyCreated(int, QMetaPropertyBuilder &prop)
-{
- prop.setWritable(false);
-}
-
-QVariant QDeclarative1VisualDataModelPartsMetaObject::initialValue(int id)
-{
- QDeclarative1VisualDataModel *m = new QDeclarative1VisualDataModel;
- m->setParent(object());
- m->setPart(QString::fromUtf8(name(id)));
- m->setModel(QVariant::fromValue(static_cast<QDeclarative1VisualDataModelParts *>(object())->model));
-
- QVariant var = QVariant::fromValue((QObject *)m);
- return var;
-}
-
-QDeclarative1VisualDataModelParts::QDeclarative1VisualDataModelParts(QDeclarative1VisualDataModel *parent)
-: QObject(parent), model(parent)
-{
- new QDeclarative1VisualDataModelPartsMetaObject(this);
-}
-
-QDeclarative1VisualDataModelPrivate::QDeclarative1VisualDataModelPrivate(QDeclarativeContext *ctxt)
-: m_listModelInterface(0), m_abstractItemModel(0), m_visualItemModel(0), m_delegate(0)
-, m_context(ctxt), m_modelDataPropId(-1), m_parts(0), m_delegateDataType(0), m_metaDataCreated(false)
-, m_metaDataCacheable(false), m_delegateValidated(false), m_completePending(false), m_listAccessor(0)
-{
-}
-
-QDeclarative1VisualDataModelData *QDeclarative1VisualDataModelPrivate::data(QObject *item)
-{
- QDeclarative1VisualDataModelData *dataItem =
- item->findChild<QDeclarative1VisualDataModelData *>();
- Q_ASSERT(dataItem);
- return dataItem;
-}
-
-//---------------------------------------------------------------------------
-
-/*!
- \qmlclass VisualDataModel QDeclarative1VisualDataModel
- \inqmlmodule QtQuick 1
- \ingroup qml-working-with-data
- \brief The VisualDataModel encapsulates a model and delegate
-
- A VisualDataModel encapsulates a model and the delegate that will
- be instantiated for items in the model.
-
- It is usually not necessary to create VisualDataModel elements.
- However, it can be useful for manipulating and accessing the \l modelIndex
- when a QAbstractItemModel subclass is used as the
- model. Also, VisualDataModel is used together with \l Package to
- provide delegates to multiple views.
-
- The example below illustrates using a VisualDataModel with a ListView.
-
- \snippet doc/src/snippets/qtquick1/visualdatamodel.qml 0
-*/
-
-QDeclarative1VisualDataModel::QDeclarative1VisualDataModel()
-: QDeclarative1VisualModel(*(new QDeclarative1VisualDataModelPrivate(0)))
-{
-}
-
-QDeclarative1VisualDataModel::QDeclarative1VisualDataModel(QDeclarativeContext *ctxt, QObject *parent)
-: QDeclarative1VisualModel(*(new QDeclarative1VisualDataModelPrivate(ctxt)), parent)
-{
-}
-
-QDeclarative1VisualDataModel::~QDeclarative1VisualDataModel()
-{
- Q_D(QDeclarative1VisualDataModel);
- if (d->m_listAccessor)
- delete d->m_listAccessor;
- if (d->m_delegateDataType)
- d->m_delegateDataType->release();
-}
-
-/*!
- \qmlproperty model QtQuick1::VisualDataModel::model
- This property holds the model providing data for the VisualDataModel.
-
- The model provides a set of data that is used to create the items
- for a view. For large or dynamic datasets the model is usually
- provided by a C++ model object. The C++ model object must be a \l
- {QAbstractItemModel} subclass or a simple list.
-
- Models can also be created directly in QML, using a \l{ListModel} or
- \l{XmlListModel}.
-
- \sa {qmlmodels}{Data Models}
-*/
-QVariant QDeclarative1VisualDataModel::model() const
-{
- Q_D(const QDeclarative1VisualDataModel);
- return d->m_modelVariant;
-}
-
-void QDeclarative1VisualDataModel::setModel(const QVariant &model)
-{
- Q_D(QDeclarative1VisualDataModel);
- delete d->m_listAccessor;
- d->m_listAccessor = 0;
- d->m_modelVariant = model;
- if (d->m_listModelInterface) {
- // Assume caller has released all items.
- QObject::disconnect(d->m_listModelInterface, SIGNAL(itemsChanged(int,int,QList<int>)),
- this, SLOT(_q_itemsChanged(int,int,QList<int>)));
- QObject::disconnect(d->m_listModelInterface, SIGNAL(itemsInserted(int,int)),
- this, SLOT(_q_itemsInserted(int,int)));
- QObject::disconnect(d->m_listModelInterface, SIGNAL(itemsRemoved(int,int)),
- this, SLOT(_q_itemsRemoved(int,int)));
- QObject::disconnect(d->m_listModelInterface, SIGNAL(itemsMoved(int,int,int)),
- this, SLOT(_q_itemsMoved(int,int,int)));
- d->m_listModelInterface = 0;
- } else if (d->m_abstractItemModel) {
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(_q_rowsInserted(QModelIndex,int,int)));
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(_q_rowsRemoved(QModelIndex,int,int)));
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
- this, SLOT(_q_dataChanged(QModelIndex,QModelIndex)));
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
- this, SLOT(_q_rowsMoved(QModelIndex,int,int,QModelIndex,int)));
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset()));
- QObject::disconnect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_layoutChanged()));
- d->m_abstractItemModel = 0;
- } else if (d->m_visualItemModel) {
- QObject::disconnect(d->m_visualItemModel, SIGNAL(itemsInserted(int,int)),
- this, SIGNAL(itemsInserted(int,int)));
- QObject::disconnect(d->m_visualItemModel, SIGNAL(itemsRemoved(int,int)),
- this, SIGNAL(itemsRemoved(int,int)));
- QObject::disconnect(d->m_visualItemModel, SIGNAL(itemsMoved(int,int,int)),
- this, SIGNAL(itemsMoved(int,int,int)));
- QObject::disconnect(d->m_visualItemModel, SIGNAL(createdPackage(int,QDeclarative1Package*)),
- this, SLOT(_q_createdPackage(int,QDeclarative1Package*)));
- QObject::disconnect(d->m_visualItemModel, SIGNAL(destroyingPackage(QDeclarative1Package*)),
- this, SLOT(_q_destroyingPackage(QDeclarative1Package*)));
- d->m_visualItemModel = 0;
- }
-
- d->m_roles.clear();
- d->m_roleNames.clear();
- if (d->m_delegateDataType)
- d->m_delegateDataType->release();
- d->m_metaDataCreated = 0;
- d->m_metaDataCacheable = false;
- d->m_delegateDataType = new VDMDelegateDataType(&QDeclarative1VisualDataModelData::staticMetaObject, d->m_context?d->m_context->engine():qmlEngine(this));
-
- QObject *object = qvariant_cast<QObject *>(model);
- if (object && (d->m_listModelInterface = qobject_cast<QListModelInterface *>(object))) {
- QObject::connect(d->m_listModelInterface, SIGNAL(itemsChanged(int,int,QList<int>)),
- this, SLOT(_q_itemsChanged(int,int,QList<int>)));
- QObject::connect(d->m_listModelInterface, SIGNAL(itemsInserted(int,int)),
- this, SLOT(_q_itemsInserted(int,int)));
- QObject::connect(d->m_listModelInterface, SIGNAL(itemsRemoved(int,int)),
- this, SLOT(_q_itemsRemoved(int,int)));
- QObject::connect(d->m_listModelInterface, SIGNAL(itemsMoved(int,int,int)),
- this, SLOT(_q_itemsMoved(int,int,int)));
- d->m_metaDataCacheable = true;
- if (d->m_delegate && d->m_listModelInterface->count())
- emit itemsInserted(0, d->m_listModelInterface->count());
- return;
- } else if (object && (d->m_abstractItemModel = qobject_cast<QAbstractItemModel *>(object))) {
- QObject::connect(d->m_abstractItemModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(_q_rowsInserted(QModelIndex,int,int)));
- QObject::connect(d->m_abstractItemModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(_q_rowsRemoved(QModelIndex,int,int)));
- QObject::connect(d->m_abstractItemModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
- this, SLOT(_q_dataChanged(QModelIndex,QModelIndex)));
- QObject::connect(d->m_abstractItemModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
- this, SLOT(_q_rowsMoved(QModelIndex,int,int,QModelIndex,int)));
- QObject::connect(d->m_abstractItemModel, SIGNAL(modelReset()), this, SLOT(_q_modelReset()));
- QObject::connect(d->m_abstractItemModel, SIGNAL(layoutChanged()), this, SLOT(_q_layoutChanged()));
- d->m_metaDataCacheable = true;
- if (d->m_abstractItemModel->canFetchMore(d->m_root))
- d->m_abstractItemModel->fetchMore(d->m_root);
- return;
- }
- if ((d->m_visualItemModel = qvariant_cast<QDeclarative1VisualDataModel *>(model))) {
- QObject::connect(d->m_visualItemModel, SIGNAL(itemsInserted(int,int)),
- this, SIGNAL(itemsInserted(int,int)));
- QObject::connect(d->m_visualItemModel, SIGNAL(itemsRemoved(int,int)),
- this, SIGNAL(itemsRemoved(int,int)));
- QObject::connect(d->m_visualItemModel, SIGNAL(itemsMoved(int,int,int)),
- this, SIGNAL(itemsMoved(int,int,int)));
- QObject::connect(d->m_visualItemModel, SIGNAL(createdPackage(int,QDeclarative1Package*)),
- this, SLOT(_q_createdPackage(int,QDeclarative1Package*)));
- QObject::connect(d->m_visualItemModel, SIGNAL(destroyingPackage(QDeclarative1Package*)),
- this, SLOT(_q_destroyingPackage(QDeclarative1Package*)));
- return;
- }
- d->m_listAccessor = new QDeclarative1ListAccessor;
- d->m_listAccessor->setList(model, d->m_context?d->m_context->engine():qmlEngine(this));
- if (d->m_listAccessor->type() != QDeclarative1ListAccessor::ListProperty)
- d->m_metaDataCacheable = true;
- if (d->m_delegate && d->modelCount()) {
- emit itemsInserted(0, d->modelCount());
- emit countChanged();
- }
-}
-
-/*!
- \qmlproperty Component QtQuick1::VisualDataModel::delegate
-
- The delegate provides a template defining each item instantiated by a view.
- The index is exposed as an accessible \c index property. Properties of the
- model are also available depending upon the type of \l {qmlmodels}{Data Model}.
-*/
-QDeclarativeComponent *QDeclarative1VisualDataModel::delegate() const
-{
- Q_D(const QDeclarative1VisualDataModel);
- if (d->m_visualItemModel)
- return d->m_visualItemModel->delegate();
- return d->m_delegate;
-}
-
-void QDeclarative1VisualDataModel::setDelegate(QDeclarativeComponent *delegate)
-{
- Q_D(QDeclarative1VisualDataModel);
- bool wasValid = d->m_delegate != 0;
- d->m_delegate = delegate;
- d->m_delegateValidated = false;
- if (!wasValid && d->modelCount() && d->m_delegate) {
- emit itemsInserted(0, d->modelCount());
- emit countChanged();
- }
- if (wasValid && !d->m_delegate && d->modelCount()) {
- emit itemsRemoved(0, d->modelCount());
- emit countChanged();
- }
-}
-
-/*!
- \qmlproperty QModelIndex QtQuick1::VisualDataModel::rootIndex
-
- QAbstractItemModel provides a hierarchical tree of data, whereas
- QML only operates on list data. \c rootIndex allows the children of
- any node in a QAbstractItemModel to be provided by this model.
-
- This property only affects models of type QAbstractItemModel that
- are hierarchical (e.g, a tree model).
-
- For example, here is a simple interactive file system browser.
- When a directory name is clicked, the view's \c rootIndex is set to the
- QModelIndex node of the clicked directory, thus updating the view to show
- the new directory's contents.
-
- \c main.cpp:
- \snippet doc/src/snippets/qtquick1/visualdatamodel_rootindex/main.cpp 0
-
- \c view.qml:
- \snippet doc/src/snippets/qtquick1/visualdatamodel_rootindex/view.qml 0
-
- If the \l model is a QAbstractItemModel subclass, the delegate can also
- reference a \c hasModelChildren property (optionally qualified by a
- \e model. prefix) that indicates whether the delegate's model item has
- any child nodes.
-
-
- \sa modelIndex(), parentModelIndex()
-*/
-QVariant QDeclarative1VisualDataModel::rootIndex() const
-{
- Q_D(const QDeclarative1VisualDataModel);
- return QVariant::fromValue(d->m_root);
-}
-
-void QDeclarative1VisualDataModel::setRootIndex(const QVariant &root)
-{
- Q_D(QDeclarative1VisualDataModel);
- QModelIndex modelIndex = qvariant_cast<QModelIndex>(root);
- if (d->m_root != modelIndex) {
- int oldCount = d->modelCount();
- d->m_root = modelIndex;
- if (d->m_abstractItemModel && d->m_abstractItemModel->canFetchMore(modelIndex))
- d->m_abstractItemModel->fetchMore(modelIndex);
- int newCount = d->modelCount();
- if (d->m_delegate && oldCount)
- emit itemsRemoved(0, oldCount);
- if (d->m_delegate && newCount)
- emit itemsInserted(0, newCount);
- if (newCount != oldCount)
- emit countChanged();
- emit rootIndexChanged();
- }
-}
-
-
-/*!
- \qmlmethod QModelIndex QtQuick1::VisualDataModel::modelIndex(int index)
-
- QAbstractItemModel provides a hierarchical tree of data, whereas
- QML only operates on list data. This function assists in using
- tree models in QML.
-
- Returns a QModelIndex for the specified index.
- This value can be assigned to rootIndex.
-
- \sa rootIndex
-*/
-QVariant QDeclarative1VisualDataModel::modelIndex(int idx) const
-{
- Q_D(const QDeclarative1VisualDataModel);
- if (d->m_abstractItemModel)
- return QVariant::fromValue(d->m_abstractItemModel->index(idx, 0, d->m_root));
- return QVariant::fromValue(QModelIndex());
-}
-
-/*!
- \qmlmethod QModelIndex QtQuick1::VisualDataModel::parentModelIndex()
-
- QAbstractItemModel provides a hierarchical tree of data, whereas
- QML only operates on list data. This function assists in using
- tree models in QML.
-
- Returns a QModelIndex for the parent of the current rootIndex.
- This value can be assigned to rootIndex.
-
- \sa rootIndex
-*/
-QVariant QDeclarative1VisualDataModel::parentModelIndex() const
-{
- Q_D(const QDeclarative1VisualDataModel);
- if (d->m_abstractItemModel)
- return QVariant::fromValue(d->m_abstractItemModel->parent(d->m_root));
- return QVariant::fromValue(QModelIndex());
-}
-
-QString QDeclarative1VisualDataModel::part() const
-{
- Q_D(const QDeclarative1VisualDataModel);
- return d->m_part;
-}
-
-void QDeclarative1VisualDataModel::setPart(const QString &part)
-{
- Q_D(QDeclarative1VisualDataModel);
- d->m_part = part;
-}
-
-int QDeclarative1VisualDataModel::count() const
-{
- Q_D(const QDeclarative1VisualDataModel);
- if (d->m_visualItemModel)
- return d->m_visualItemModel->count();
- if (!d->m_delegate)
- return 0;
- return d->modelCount();
-}
-
-QDeclarativeItem *QDeclarative1VisualDataModel::item(int index, bool complete)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (d->m_visualItemModel)
- return d->m_visualItemModel->item(index, d->m_part.toUtf8(), complete);
- return item(index, QByteArray(), complete);
-}
-
-/*
- Returns ReleaseStatus flags.
-*/
-QDeclarative1VisualDataModel::ReleaseFlags QDeclarative1VisualDataModel::release(QDeclarativeItem *item)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (d->m_visualItemModel)
- return d->m_visualItemModel->release(item);
-
- ReleaseFlags stat = 0;
- QObject *obj = item;
- bool inPackage = false;
-
- QHash<QObject*,QDeclarative1Package*>::iterator it = d->m_packaged.find(item);
- if (it != d->m_packaged.end()) {
- QDeclarative1Package *package = *it;
- d->m_packaged.erase(it);
- if (d->m_packaged.contains(item))
- stat |= Referenced;
- inPackage = true;
- obj = package; // fall through and delete
- }
-
- if (d->m_cache.releaseItem(obj)) {
- // Remove any bindings to avoid warnings due to parent change.
- QObjectPrivate *p = QObjectPrivate::get(obj);
- Q_ASSERT(p->declarativeData);
- QDeclarativeData *d = static_cast<QDeclarativeData*>(p->declarativeData);
- if (d->ownContext && d->context)
- d->context->clearContext();
-
- if (inPackage) {
- emit destroyingPackage(qobject_cast<QDeclarative1Package*>(obj));
- } else {
- if (item->scene())
- item->scene()->removeItem(item);
- }
- stat |= Destroyed;
- obj->deleteLater();
- } else if (!inPackage) {
- stat |= Referenced;
- }
-
- return stat;
-}
-
-/*!
- \qmlproperty object QtQuick1::VisualDataModel::parts
-
- The \a parts property selects a VisualDataModel which creates
- delegates from the part named. This is used in conjunction with
- the \l Package element.
-
- For example, the code below selects a model which creates
- delegates named \e list from a \l Package:
-
- \code
- VisualDataModel {
- id: visualModel
- delegate: Package {
- Item { Package.name: "list" }
- }
- model: myModel
- }
-
- ListView {
- width: 200; height:200
- model: visualModel.parts.list
- }
- \endcode
-
- \sa Package
-*/
-QObject *QDeclarative1VisualDataModel::parts()
-{
- Q_D(QDeclarative1VisualDataModel);
- if (!d->m_parts)
- d->m_parts = new QDeclarative1VisualDataModelParts(this);
- return d->m_parts;
-}
-
-QDeclarativeItem *QDeclarative1VisualDataModel::item(int index, const QByteArray &viewId, bool complete)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (d->m_visualItemModel)
- return d->m_visualItemModel->item(index, viewId, complete);
-
- if (d->modelCount() <= 0 || !d->m_delegate)
- return 0;
- QObject *nobj = d->m_cache.getItem(index);
- bool needComplete = false;
- if (!nobj) {
- QDeclarativeContext *ccontext = d->m_context;
- if (!ccontext) ccontext = qmlContext(this);
- QDeclarativeContext *ctxt = new QDeclarativeContext(ccontext);
- QDeclarative1VisualDataModelData *data = new QDeclarative1VisualDataModelData(index, this);
- if ((!d->m_listModelInterface || !d->m_abstractItemModel) && d->m_listAccessor
- && d->m_listAccessor->type() == QDeclarative1ListAccessor::ListProperty) {
- ctxt->setContextObject(d->m_listAccessor->at(index).value<QObject*>());
- ctxt = new QDeclarativeContext(ctxt, ctxt);
- }
- ctxt->setContextProperty(QLatin1String("model"), data);
- ctxt->setContextObject(data);
- d->m_completePending = false;
- nobj = d->m_delegate->beginCreate(ctxt);
- if (complete) {
- d->m_delegate->completeCreate();
- } else {
- d->m_completePending = true;
- needComplete = true;
- }
- if (nobj) {
- QDeclarative_setParent_noEvent(ctxt, nobj);
- QDeclarative_setParent_noEvent(data, nobj);
- d->m_cache.insertItem(index, nobj);
- if (QDeclarative1Package *package = qobject_cast<QDeclarative1Package *>(nobj))
- emit createdPackage(index, package);
- } else {
- delete data;
- delete ctxt;
- qmlInfo(this, d->m_delegate->errors()) << "Error creating delegate";
- }
- }
- QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(nobj);
- if (!item) {
- QDeclarative1Package *package = qobject_cast<QDeclarative1Package *>(nobj);
- if (package) {
- QObject *o = package->part(QString::fromUtf8(viewId));
- item = qobject_cast<QDeclarativeItem *>(o);
- if (item)
- d->m_packaged.insertMulti(item, package);
- }
- }
- if (!item) {
- if (needComplete)
- d->m_delegate->completeCreate();
- d->m_cache.releaseItem(nobj);
- if (!d->m_delegateValidated) {
- qmlInfo(d->m_delegate) << QDeclarative1VisualDataModel::tr("Delegate component must be Item type.");
- d->m_delegateValidated = true;
- }
- }
- if (d->modelCount()-1 == index && d->m_abstractItemModel && d->m_abstractItemModel->canFetchMore(d->m_root))
- d->m_abstractItemModel->fetchMore(d->m_root);
-
- return item;
-}
-
-bool QDeclarative1VisualDataModel::completePending() const
-{
- Q_D(const QDeclarative1VisualDataModel);
- if (d->m_visualItemModel)
- return d->m_visualItemModel->completePending();
- return d->m_completePending;
-}
-
-void QDeclarative1VisualDataModel::completeItem()
-{
- Q_D(QDeclarative1VisualDataModel);
- if (d->m_visualItemModel) {
- d->m_visualItemModel->completeItem();
- return;
- }
-
- d->m_delegate->completeCreate();
- d->m_completePending = false;
-}
-
-QString QDeclarative1VisualDataModel::stringValue(int index, const QString &name)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (d->m_visualItemModel)
- return d->m_visualItemModel->stringValue(index, name);
-
- if ((!d->m_listModelInterface || !d->m_abstractItemModel) && d->m_listAccessor) {
- if (QObject *object = d->m_listAccessor->at(index).value<QObject*>())
- return object->property(name.toUtf8()).toString();
- }
-
- if ((!d->m_listModelInterface && !d->m_abstractItemModel) || !d->m_delegate)
- return QString();
-
- QString val;
- QObject *data = 0;
- bool tempData = false;
-
- if (QObject *nobj = d->m_cache.item(index))
- data = d->data(nobj);
- if (!data) {
- data = new QDeclarative1VisualDataModelData(index, this);
- tempData = true;
- }
-
- QDeclarativeData *ddata = QDeclarativeData::get(data);
- if (ddata && ddata->propertyCache) {
- QDeclarativePropertyData *prop = ddata->propertyCache->property(name);
- if (prop) {
- if (prop->propType == QVariant::String) {
- void *args[] = { &val, 0 };
- QMetaObject::metacall(data, QMetaObject::ReadProperty, prop->coreIndex, args);
- } else if (prop->propType == qMetaTypeId<QVariant>()) {
- QVariant v;
- void *args[] = { &v, 0 };
- QMetaObject::metacall(data, QMetaObject::ReadProperty, prop->coreIndex, args);
- val = v.toString();
- }
- } else {
- val = data->property(name.toUtf8()).toString();
- }
- } else {
- val = data->property(name.toUtf8()).toString();
- }
-
- if (tempData)
- delete data;
-
- return val;
-}
-
-int QDeclarative1VisualDataModel::indexOf(QDeclarativeItem *item, QObject *) const
-{
- QVariant val = QDeclarativeEngine::contextForObject(item)->contextProperty(QLatin1String("index"));
- return val.toInt();
- return -1;
-}
-
-void QDeclarative1VisualDataModel::setWatchedRoles(QList<QByteArray> roles)
-{
- Q_D(QDeclarative1VisualDataModel);
- d->watchedRoles = roles;
- d->watchedRoleIds.clear();
-}
-
-void QDeclarative1VisualDataModel::_q_itemsChanged(int index, int count,
- const QList<int> &roles)
-{
- Q_D(QDeclarative1VisualDataModel);
- bool changed = false;
- if (!d->watchedRoles.isEmpty() && d->watchedRoleIds.isEmpty()) {
- foreach (QByteArray r, d->watchedRoles) {
- if (d->m_roleNames.contains(r))
- d->watchedRoleIds << d->m_roleNames.value(r);
- }
- }
-
- for (QHash<int,QDeclarative1VisualDataModelPrivate::ObjectRef>::ConstIterator iter = d->m_cache.begin();
- iter != d->m_cache.end(); ++iter) {
- const int idx = iter.key();
-
- if (idx >= index && idx < index+count) {
- QDeclarative1VisualDataModelPrivate::ObjectRef objRef = *iter;
- QDeclarative1VisualDataModelData *data = d->data(objRef.obj);
- for (int roleIdx = 0; roleIdx < roles.count(); ++roleIdx) {
- int role = roles.at(roleIdx);
- if (!changed && !d->watchedRoleIds.isEmpty() && d->watchedRoleIds.contains(role))
- changed = true;
- int propId = data->propForRole(role);
- if (propId != -1) {
- if (data->hasValue(propId)) {
- if (d->m_listModelInterface) {
- data->setValue(propId, d->m_listModelInterface->data(idx, role));
- } else if (d->m_abstractItemModel) {
- QModelIndex index = d->m_abstractItemModel->index(idx, 0, d->m_root);
- data->setValue(propId, d->m_abstractItemModel->data(index, role));
- }
- }
- } else {
- QString roleName;
- if (d->m_listModelInterface)
- roleName = d->m_listModelInterface->toString(role);
- else if (d->m_abstractItemModel)
- roleName = QString::fromUtf8(d->m_abstractItemModel->roleNames().value(role));
- qmlInfo(this) << "Changing role not present in item: " << roleName;
- }
- }
- if (d->m_roles.count() == 1) {
- // Handle the modelData role we add if there is just one role.
- int propId = data->modelDataPropertyId();
- if (data->hasValue(propId)) {
- int role = d->m_roles.at(0);
- if (d->m_listModelInterface) {
- data->setValue(propId, d->m_listModelInterface->data(idx, role));
- } else if (d->m_abstractItemModel) {
- QModelIndex index = d->m_abstractItemModel->index(idx, 0, d->m_root);
- data->setValue(propId, d->m_abstractItemModel->data(index, role));
- }
- }
- }
- }
- }
- if (changed)
- emit itemsChanged(index, count);
-}
-
-void QDeclarative1VisualDataModel::_q_itemsInserted(int index, int count)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (!count)
- return;
- // XXX - highly inefficient
- QHash<int,QDeclarative1VisualDataModelPrivate::ObjectRef> items;
- for (QHash<int,QDeclarative1VisualDataModelPrivate::ObjectRef>::Iterator iter = d->m_cache.begin();
- iter != d->m_cache.end(); ) {
-
- if (iter.key() >= index) {
- QDeclarative1VisualDataModelPrivate::ObjectRef objRef = *iter;
- int index = iter.key() + count;
- iter = d->m_cache.erase(iter);
-
- items.insert(index, objRef);
-
- QDeclarative1VisualDataModelData *data = d->data(objRef.obj);
- data->setIndex(index);
- } else {
- ++iter;
- }
- }
- d->m_cache.unite(items);
-
- emit itemsInserted(index, count);
- emit countChanged();
-}
-
-void QDeclarative1VisualDataModel::_q_itemsRemoved(int index, int count)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (!count)
- return;
- // XXX - highly inefficient
- QHash<int, QDeclarative1VisualDataModelPrivate::ObjectRef> items;
- for (QHash<int, QDeclarative1VisualDataModelPrivate::ObjectRef>::Iterator iter = d->m_cache.begin();
- iter != d->m_cache.end(); ) {
- if (iter.key() >= index && iter.key() < index + count) {
- QDeclarative1VisualDataModelPrivate::ObjectRef objRef = *iter;
- iter = d->m_cache.erase(iter);
- items.insertMulti(-1, objRef); //XXX perhaps better to maintain separately
- QDeclarative1VisualDataModelData *data = d->data(objRef.obj);
- data->setIndex(-1);
- } else if (iter.key() >= index + count) {
- QDeclarative1VisualDataModelPrivate::ObjectRef objRef = *iter;
- int index = iter.key() - count;
- iter = d->m_cache.erase(iter);
- items.insert(index, objRef);
- QDeclarative1VisualDataModelData *data = d->data(objRef.obj);
- data->setIndex(index);
- } else {
- ++iter;
- }
- }
-
- d->m_cache.unite(items);
- emit itemsRemoved(index, count);
- emit countChanged();
-}
-
-void QDeclarative1VisualDataModel::_q_itemsMoved(int from, int to, int count)
-{
- Q_D(QDeclarative1VisualDataModel);
- // XXX - highly inefficient
- QHash<int,QDeclarative1VisualDataModelPrivate::ObjectRef> items;
- for (QHash<int,QDeclarative1VisualDataModelPrivate::ObjectRef>::Iterator iter = d->m_cache.begin();
- iter != d->m_cache.end(); ) {
-
- if (iter.key() >= from && iter.key() < from + count) {
- QDeclarative1VisualDataModelPrivate::ObjectRef objRef = *iter;
- int index = iter.key() - from + to;
- iter = d->m_cache.erase(iter);
-
- items.insert(index, objRef);
-
- QDeclarative1VisualDataModelData *data = d->data(objRef.obj);
- data->setIndex(index);
- } else {
- ++iter;
- }
- }
- for (QHash<int,QDeclarative1VisualDataModelPrivate::ObjectRef>::Iterator iter = d->m_cache.begin();
- iter != d->m_cache.end(); ) {
-
- int diff = from > to ? count : -count;
- if (iter.key() >= qMin(from,to) && iter.key() < qMax(from+count,to+count)) {
- QDeclarative1VisualDataModelPrivate::ObjectRef objRef = *iter;
- int index = iter.key() + diff;
- iter = d->m_cache.erase(iter);
-
- items.insert(index, objRef);
-
- QDeclarative1VisualDataModelData *data = d->data(objRef.obj);
- data->setIndex(index);
- } else {
- ++iter;
- }
- }
- d->m_cache.unite(items);
-
- emit itemsMoved(from, to, count);
-}
-
-void QDeclarative1VisualDataModel::_q_rowsInserted(const QModelIndex &parent, int begin, int end)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (parent == d->m_root)
- _q_itemsInserted(begin, end - begin + 1);
-}
-
-void QDeclarative1VisualDataModel::_q_rowsRemoved(const QModelIndex &parent, int begin, int end)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (parent == d->m_root)
- _q_itemsRemoved(begin, end - begin + 1);
-}
-
-void QDeclarative1VisualDataModel::_q_rowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
-{
- Q_D(QDeclarative1VisualDataModel);
- const int count = sourceEnd - sourceStart + 1;
- if (destinationParent == d->m_root && sourceParent == d->m_root) {
- _q_itemsMoved(sourceStart, sourceStart > destinationRow ? destinationRow : destinationRow-count, count);
- } else if (sourceParent == d->m_root) {
- _q_itemsRemoved(sourceStart, count);
- } else if (destinationParent == d->m_root) {
- _q_itemsInserted(destinationRow, count);
- }
-}
-
-void QDeclarative1VisualDataModel::_q_dataChanged(const QModelIndex &begin, const QModelIndex &end)
-{
- Q_D(QDeclarative1VisualDataModel);
- if (begin.parent() == d->m_root)
- _q_itemsChanged(begin.row(), end.row() - begin.row() + 1, d->m_roles);
-}
-
-void QDeclarative1VisualDataModel::_q_layoutChanged()
-{
- Q_D(QDeclarative1VisualDataModel);
- _q_itemsChanged(0, count(), d->m_roles);
-}
-
-void QDeclarative1VisualDataModel::_q_modelReset()
-{
- Q_D(QDeclarative1VisualDataModel);
- d->m_root = QModelIndex();
- emit modelReset();
- emit rootIndexChanged();
- if (d->m_abstractItemModel && d->m_abstractItemModel->canFetchMore(d->m_root))
- d->m_abstractItemModel->fetchMore(d->m_root);
-}
-
-void QDeclarative1VisualDataModel::_q_createdPackage(int index, QDeclarative1Package *package)
-{
- Q_D(QDeclarative1VisualDataModel);
- emit createdItem(index, qobject_cast<QDeclarativeItem*>(package->part(d->m_part)));
-}
-
-void QDeclarative1VisualDataModel::_q_destroyingPackage(QDeclarative1Package *package)
-{
- Q_D(QDeclarative1VisualDataModel);
- emit destroyingItem(qobject_cast<QDeclarativeItem*>(package->part(d->m_part)));
-}
-
-
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QListModelInterface)
-
-#include <qdeclarativevisualitemmodel.moc>
diff --git a/src/qtquick1/graphicsitems/qdeclarativevisualitemmodel_p.h b/src/qtquick1/graphicsitems/qdeclarativevisualitemmodel_p.h
deleted file mode 100644
index b24f238d5e..0000000000
--- a/src/qtquick1/graphicsitems/qdeclarativevisualitemmodel_p.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the QtDeclarative module 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$
-**
-****************************************************************************/
-
-#ifndef QDECLARATIVEVISUALDATAMODEL_H
-#define QDECLARATIVEVISUALDATAMODEL_H
-
-#include <QtDeclarative/qdeclarative.h>
-
-#include <QtCore/qobject.h>
-#include <QtCore/qabstractitemmodel.h>
-
-QT_BEGIN_HEADER
-
-Q_DECLARE_METATYPE(QModelIndex)
-
-QT_BEGIN_NAMESPACE
-
-
-class QDeclarativeComponent;
-class QDeclarativeItem;
-class QDeclarative1Package;
-class QDeclarative1VisualDataModelPrivate;
-
-class Q_AUTOTEST_EXPORT QDeclarative1VisualModel : public QObject
-{
- Q_OBJECT
-
- Q_PROPERTY(int count READ count NOTIFY countChanged)
-
-public:
- virtual ~QDeclarative1VisualModel() {}
-
- enum ReleaseFlag { Referenced = 0x01, Destroyed = 0x02 };
- Q_DECLARE_FLAGS(ReleaseFlags, ReleaseFlag)
-
- virtual int count() const = 0;
- virtual bool isValid() const = 0;
- virtual QDeclarativeItem *item(int index, bool complete=true) = 0;
- virtual ReleaseFlags release(QDeclarativeItem *item) = 0;
- virtual bool completePending() const = 0;
- virtual void completeItem() = 0;
- virtual QString stringValue(int, const QString &) = 0;
- virtual void setWatchedRoles(QList<QByteArray> roles) = 0;
-
- virtual int indexOf(QDeclarativeItem *item, QObject *objectContext) const = 0;
-
-Q_SIGNALS:
- void countChanged();
- void itemsInserted(int index, int count);
- void itemsRemoved(int index, int count);
- void itemsMoved(int from, int to, int count);
- void itemsChanged(int index, int count);
- void modelReset();
- void createdItem(int index, QDeclarativeItem *item);
- void destroyingItem(QDeclarativeItem *item);
-
-protected:
- QDeclarative1VisualModel(QObjectPrivate &dd, QObject *parent = 0)
- : QObject(dd, parent) {}
-
-private:
- Q_DISABLE_COPY(QDeclarative1VisualModel)
-};
-
-class QDeclarative1VisualItemModelAttached;
-class QDeclarative1VisualItemModelPrivate;
-class Q_AUTOTEST_EXPORT QDeclarative1VisualItemModel : public QDeclarative1VisualModel
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QDeclarative1VisualItemModel)
-
- Q_PROPERTY(QDeclarativeListProperty<QDeclarativeItem> children READ children NOTIFY childrenChanged DESIGNABLE false)
- Q_CLASSINFO("DefaultProperty", "children")
-
-public:
- QDeclarative1VisualItemModel(QObject *parent=0);
- virtual ~QDeclarative1VisualItemModel() {}
-
- virtual int count() const;
- virtual bool isValid() const;
- virtual QDeclarativeItem *item(int index, bool complete=true);
- virtual ReleaseFlags release(QDeclarativeItem *item);
- virtual bool completePending() const;
- virtual void completeItem();
- virtual QString stringValue(int index, const QString &role);
- virtual void setWatchedRoles(QList<QByteArray>) {}
-
- virtual int indexOf(QDeclarativeItem *item, QObject *objectContext) const;
-
- QDeclarativeListProperty<QDeclarativeItem> children();
-
- static QDeclarative1VisualItemModelAttached *qmlAttachedProperties(QObject *obj);
-
-Q_SIGNALS:
- void childrenChanged();
-
-private:
- Q_DISABLE_COPY(QDeclarative1VisualItemModel)
-};
-
-
-class Q_AUTOTEST_EXPORT QDeclarative1VisualDataModel : public QDeclarative1VisualModel
-{
- Q_OBJECT
- Q_DECLARE_PRIVATE(QDeclarative1VisualDataModel)
-
- Q_PROPERTY(QVariant model READ model WRITE setModel)
- Q_PROPERTY(QDeclarativeComponent *delegate READ delegate WRITE setDelegate)
- Q_PROPERTY(QString part READ part WRITE setPart)
- Q_PROPERTY(QObject *parts READ parts CONSTANT)
- Q_PROPERTY(QVariant rootIndex READ rootIndex WRITE setRootIndex NOTIFY rootIndexChanged)
- Q_CLASSINFO("DefaultProperty", "delegate")
-public:
- QDeclarative1VisualDataModel();
- QDeclarative1VisualDataModel(QDeclarativeContext *, QObject *parent=0);
- virtual ~QDeclarative1VisualDataModel();
-
- QVariant model() const;
- void setModel(const QVariant &);
-
- QDeclarativeComponent *delegate() const;
- void setDelegate(QDeclarativeComponent *);
-
- QVariant rootIndex() const;
- void setRootIndex(const QVariant &root);
-
- Q_INVOKABLE QVariant modelIndex(int idx) const;
- Q_INVOKABLE QVariant parentModelIndex() const;
-
- QString part() const;
- void setPart(const QString &);
-
- int count() const;
- bool isValid() const { return delegate() != 0; }
- QDeclarativeItem *item(int index, bool complete=true);
- QDeclarativeItem *item(int index, const QByteArray &, bool complete=true);
- ReleaseFlags release(QDeclarativeItem *item);
- bool completePending() const;
- void completeItem();
- virtual QString stringValue(int index, const QString &role);
- virtual void setWatchedRoles(QList<QByteArray> roles);
-
- int indexOf(QDeclarativeItem *item, QObject *objectContext) const;
-
- QObject *parts();
-
-Q_SIGNALS:
- void createdPackage(int index, QDeclarative1Package *package);
- void destroyingPackage(QDeclarative1Package *package);
- void rootIndexChanged();
-
-private Q_SLOTS:
- void _q_itemsChanged(int, int, const QList<int> &);
- void _q_itemsInserted(int index, int count);
- void _q_itemsRemoved(int index, int count);
- void _q_itemsMoved(int from, int to, int count);
- void _q_rowsInserted(const QModelIndex &,int,int);
- void _q_rowsRemoved(const QModelIndex &,int,int);
- void _q_rowsMoved(const QModelIndex &, int, int, const QModelIndex &, int);
- void _q_dataChanged(const QModelIndex&,const QModelIndex&);
- void _q_layoutChanged();
- void _q_modelReset();
- void _q_createdPackage(int index, QDeclarative1Package *package);
- void _q_destroyingPackage(QDeclarative1Package *package);
-
-private:
- Q_DISABLE_COPY(QDeclarative1VisualDataModel)
-};
-
-class QDeclarative1VisualItemModelAttached : public QObject
-{
- Q_OBJECT
-
-public:
- QDeclarative1VisualItemModelAttached(QObject *parent)
- : QObject(parent), m_index(0) {}
- ~QDeclarative1VisualItemModelAttached() {
- attachedProperties.remove(parent());
- }
-
- Q_PROPERTY(int index READ index NOTIFY indexChanged)
- int index() const { return m_index; }
- void setIndex(int idx) {
- if (m_index != idx) {
- m_index = idx;
- emit indexChanged();
- }
- }
-
- static QDeclarative1VisualItemModelAttached *properties(QObject *obj) {
- QDeclarative1VisualItemModelAttached *rv = attachedProperties.value(obj);
- if (!rv) {
- rv = new QDeclarative1VisualItemModelAttached(obj);
- attachedProperties.insert(obj, rv);
- }
- return rv;
- }
-
-Q_SIGNALS:
- void indexChanged();
-
-public:
- int m_index;
-
- static QHash<QObject*, QDeclarative1VisualItemModelAttached*> attachedProperties;
-};
-
-
-QT_END_NAMESPACE
-
-QML_DECLARE_TYPE(QDeclarative1VisualModel)
-QML_DECLARE_TYPE(QDeclarative1VisualItemModel)
-QML_DECLARE_TYPEINFO(QDeclarative1VisualItemModel, QML_HAS_ATTACHED_PROPERTIES)
-QML_DECLARE_TYPE(QDeclarative1VisualDataModel)
-
-QT_END_HEADER
-
-#endif // QDECLARATIVEVISUALDATAMODEL_H