aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquickitemview_p_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/quick/items/qquickitemview_p_p.h')
-rw-r--r--src/quick/items/qquickitemview_p_p.h258
1 files changed, 258 insertions, 0 deletions
diff --git a/src/quick/items/qquickitemview_p_p.h b/src/quick/items/qquickitemview_p_p.h
new file mode 100644
index 0000000000..3b2c39bdeb
--- /dev/null
+++ b/src/quick/items/qquickitemview_p_p.h
@@ -0,0 +1,258 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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 QQUICKITEMVIEW_P_P_H
+#define QQUICKITEMVIEW_P_P_H
+
+#include "qquickitemview_p.h"
+#include "qquickflickable_p_p.h"
+#include "qquickvisualdatamodel_p.h"
+#include <private/qdeclarativechangeset_p.h>
+
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class FxViewItem
+{
+public:
+ FxViewItem(QQuickItem *, bool own);
+ ~FxViewItem();
+
+ // these are positions and sizes along the current direction of scrolling/flicking
+ virtual qreal position() const = 0;
+ virtual qreal endPosition() const = 0;
+ virtual qreal size() const = 0;
+ virtual qreal sectionSize() const = 0;
+
+ virtual bool contains(qreal x, qreal y) const = 0;
+
+ QQuickItem *item;
+ bool ownItem;
+ int index;
+ QQuickItemViewAttached *attached;
+};
+
+class QQuickItemViewChangeSet
+{
+public:
+ QQuickItemViewChangeSet();
+
+ bool hasPendingChanges() const;
+ void prepare(int currentIndex, int count);
+ void reset();
+
+ void applyChanges(const QDeclarativeChangeSet &changeSet);
+
+ int itemCount;
+ int newCurrentIndex;
+ QDeclarativeChangeSet pendingChanges;
+ QHash<QDeclarativeChangeSet::MoveKey, FxViewItem *> removedItems;
+
+ bool active : 1;
+ bool currentChanged : 1;
+ bool currentRemoved : 1;
+};
+
+class QQuickItemViewPrivate : public QQuickFlickablePrivate
+{
+ Q_DECLARE_PUBLIC(QQuickItemView)
+public:
+ QQuickItemViewPrivate();
+
+ struct InsertionsResult {
+ QList<FxViewItem *> addedItems;
+ QList<FxViewItem *> movedBackwards;
+ qreal sizeAddedBeforeVisible;
+
+ InsertionsResult() : sizeAddedBeforeVisible(0) {}
+ };
+
+ enum BufferMode { NoBuffer = 0x00, BufferBefore = 0x01, BufferAfter = 0x02 };
+ enum MovementReason { Other, SetIndex, Mouse };
+
+ bool isValid() const;
+ qreal position() const;
+ qreal size() const;
+ qreal startPosition() const;
+ qreal endPosition() const;
+ qreal contentStartPosition() const;
+ int findLastVisibleIndex(int defaultValue = -1) const;
+ FxViewItem *visibleItem(int modelIndex) const;
+ FxViewItem *firstVisibleItem() const;
+ int mapFromModel(int modelIndex) const;
+
+ virtual void init();
+ virtual void clear();
+ virtual void updateViewport();
+
+ void regenerate();
+ void layout();
+ void refill();
+ void refill(qreal from, qreal to, bool doBuffer = false);
+ void mirrorChange();
+
+ FxViewItem *createItem(int modelIndex, bool asynchronous = false);
+ virtual void releaseItem(FxViewItem *item);
+
+ QQuickItem *createHighlightItem();
+ QQuickItem *createComponentItem(QDeclarativeComponent *component, bool receiveItemGeometryChanges, bool createDefault = false);
+
+ void updateCurrent(int modelIndex);
+ void updateTrackedItem();
+ void updateUnrequestedIndexes();
+ void updateUnrequestedPositions();
+ void updateVisibleIndex();
+ void positionViewAtIndex(int index, int mode);
+ void applyPendingChanges();
+ bool applyModelChanges();
+
+ void checkVisible() const;
+
+ void markExtentsDirty() {
+ if (layoutOrientation() == Qt::Vertical)
+ vData.markExtentsDirty();
+ else
+ hData.markExtentsDirty();
+ }
+
+ QDeclarativeGuard<QQuickVisualModel> model;
+ QVariant modelVariant;
+ int itemCount;
+ int buffer;
+ int bufferMode;
+ Qt::LayoutDirection layoutDirection;
+
+ MovementReason moveReason;
+
+ QList<FxViewItem *> visibleItems;
+ int visibleIndex;
+ int currentIndex;
+ FxViewItem *currentItem;
+ FxViewItem *trackedItem;
+ QHash<QQuickItem*,int> unrequestedItems;
+ int requestedIndex;
+ FxViewItem *requestedItem;
+ QQuickItemViewChangeSet currentChanges;
+
+ // XXX split into struct
+ QDeclarativeComponent *highlightComponent;
+ FxViewItem *highlight;
+ int highlightRange; // enum value
+ qreal highlightRangeStart;
+ qreal highlightRangeEnd;
+ int highlightMoveDuration;
+
+ QDeclarativeComponent *headerComponent;
+ FxViewItem *header;
+ QDeclarativeComponent *footerComponent;
+ FxViewItem *footer;
+
+ mutable qreal minExtent;
+ mutable qreal maxExtent;
+
+ bool ownModel : 1;
+ bool wrap : 1;
+ bool deferredRelease : 1;
+ bool inApplyModelChanges : 1;
+ bool inViewportMoved : 1;
+ bool forceLayout : 1;
+ bool currentIndexCleared : 1;
+ bool haveHighlightRange : 1;
+ bool autoHighlight : 1;
+ bool highlightRangeStartValid : 1;
+ bool highlightRangeEndValid : 1;
+ bool fillCacheBuffer : 1;
+ bool inRequest : 1;
+ bool requestedAsync : 1;
+
+protected:
+ virtual Qt::Orientation layoutOrientation() const = 0;
+ virtual bool isContentFlowReversed() const = 0;
+
+ virtual qreal positionAt(int index) const = 0;
+ virtual qreal endPositionAt(int index) const = 0;
+ virtual qreal originPosition() const = 0;
+ virtual qreal lastPosition() const = 0;
+
+ virtual qreal headerSize() const = 0;
+ virtual qreal footerSize() const = 0;
+ virtual bool showHeaderForIndex(int index) const = 0;
+ virtual bool showFooterForIndex(int index) const = 0;
+ virtual void updateHeader() = 0;
+ virtual void updateFooter() = 0;
+
+ virtual void createHighlight() = 0;
+ virtual void updateHighlight() = 0;
+ virtual void resetHighlightPosition() = 0;
+
+ virtual void setPosition(qreal pos) = 0;
+ virtual void fixupPosition() = 0;
+
+ virtual bool addVisibleItems(qreal fillFrom, qreal fillTo, bool doBuffer) = 0;
+ virtual bool removeNonVisibleItems(qreal bufferFrom, qreal bufferTo) = 0;
+ virtual void visibleItemsChanged() = 0;
+
+ virtual FxViewItem *newViewItem(int index, QQuickItem *item) = 0;
+ virtual void repositionPackageItemAt(QQuickItem *item, int index) = 0;
+ virtual void resetItemPosition(FxViewItem *item, FxViewItem *toItem) = 0;
+ virtual void resetFirstItemPosition() = 0;
+ virtual void moveItemBy(FxViewItem *item, qreal forwards, qreal backwards) = 0;
+
+ virtual void layoutVisibleItems() = 0;
+ virtual void changedVisibleIndex(int newIndex) = 0;
+ virtual bool applyInsertionChange(const QDeclarativeChangeSet::Insert &, FxViewItem *, InsertionsResult *) = 0;
+ virtual bool needsRefillForAddedOrRemovedIndex(int) const { return false; }
+
+ virtual void initializeViewItem(FxViewItem *) {}
+ virtual void initializeCurrentItem() {}
+ virtual void updateSections() {}
+
+ virtual void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry);
+};
+
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QQUICKITEMVIEW_P_P_H