summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-08-26 14:32:47 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-08-26 14:32:47 (GMT)
commitd477cc1498ccf2204dd0e5cd6676f5c0788a9090 (patch)
treea086428b8ee6b838d3babc8d0844ab23f36389b5
parent065610d14fda00057724a46e2649db6bb98aca58 (diff)
parentff10e44642d65b2dde50579c4994aa9def43f4c0 (diff)
downloadQt-d477cc1498ccf2204dd0e5cd6676f5c0788a9090.zip
Qt-d477cc1498ccf2204dd0e5cd6676f5c0788a9090.tar.gz
Qt-d477cc1498ccf2204dd0e5cd6676f5c0788a9090.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-qml into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/qt-qml: Handle layoutChanged() properly in QML views. Fix ListView and GridView tests following off-by-one fixes. Revert 4bc81bb1cb3cd4a0a3fe071e00556124e770d7ac Fix off-by-one at end when views scroll to keep currentItem visible. Make declarative examples a bit more qt-like. Add quit buttons to declarative demos ListView.view and GridView.view properties should not be writable. Avoid Flickable view jumping when drag threashold is exceeded. Fix ListView.view attached property with VisualItemModel Remove dead code. Add test for VisualItemModel layoutChanged() handling Remove unused code. Handle QAbstractItemModel layoutChanged() signal
-rw-r--r--demos/declarative/calculator/Core/calculator.js10
-rw-r--r--demos/declarative/calculator/calculator.qml16
-rw-r--r--demos/declarative/minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpgbin30730 -> 0 bytes
-rw-r--r--demos/declarative/minehunt/MinehuntCore/pics/background.pngbin0 -> 313930 bytes
-rw-r--r--demos/declarative/minehunt/MinehuntCore/pics/quit.pngbin0 -> 583 bytes
-rw-r--r--demos/declarative/minehunt/main.cpp1
-rw-r--r--demos/declarative/minehunt/minehunt.qml14
-rw-r--r--demos/declarative/photoviewer/photoviewer.qml5
-rw-r--r--demos/declarative/rssnews/rssnews.qml20
-rw-r--r--demos/declarative/snake/snake.qml6
-rw-r--r--demos/declarative/twitter/TwitterCore/TitleBar.qml12
-rw-r--r--demos/declarative/twitter/TwitterCore/images/quit.pngbin0 -> 2369 bytes
-rw-r--r--demos/declarative/webbrowser/content/Header.qml30
-rw-r--r--demos/declarative/webbrowser/content/pics/edit-delete.pngbin1333 -> 831 bytes
-rw-r--r--demos/declarative/webbrowser/content/pics/go-jump-locationbar.pngbin714 -> 408 bytes
-rw-r--r--demos/declarative/webbrowser/content/pics/go-next-view.pngbin1187 -> 1310 bytes
-rw-r--r--demos/declarative/webbrowser/content/pics/go-previous-view.pngbin1226 -> 1080 bytes
-rw-r--r--examples/declarative/animation/states/qt-logo.pngbin0 -> 5149 bytes
-rw-r--r--examples/declarative/animation/states/states.qml8
-rw-r--r--examples/declarative/animation/states/transitions.qml8
-rw-r--r--examples/declarative/animation/states/user.pngbin4886 -> 0 bytes
-rw-r--r--examples/declarative/imageelements/image/ImageCell.qml2
-rw-r--r--examples/declarative/imageelements/image/face-smile.pngbin15408 -> 0 bytes
-rw-r--r--examples/declarative/imageelements/image/qt-logo.pngbin0 -> 5149 bytes
-rw-r--r--examples/declarative/modelviews/listview/content/pics/arrow-down.pngbin892 -> 0 bytes
-rw-r--r--examples/declarative/modelviews/listview/content/pics/arrow-up.pngbin929 -> 0 bytes
-rw-r--r--examples/declarative/modelviews/listview/content/pics/list-delete.pngbin1074 -> 0 bytes
-rw-r--r--examples/declarative/positioners/add.pngbin1577 -> 810 bytes
-rw-r--r--examples/declarative/positioners/del.pngbin1661 -> 488 bytes
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable.cpp10
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable_p_p.h1
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview.cpp14
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview_p.h12
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp16
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview_p.h12
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp8
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h1
-rw-r--r--src/declarative/util/qdeclarativelistmodel.cpp3
-rw-r--r--src/declarative/util/qdeclarativexmllistmodel.cpp2
-rw-r--r--tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp4
-rw-r--r--tests/auto/declarative/qdeclarativelistview/data/itemlist.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp5
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml15
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp35
44 files changed, 213 insertions, 63 deletions
diff --git a/demos/declarative/calculator/Core/calculator.js b/demos/declarative/calculator/Core/calculator.js
index 16cc309..7c363c7 100644
--- a/demos/declarative/calculator/Core/calculator.js
+++ b/demos/declarative/calculator/Core/calculator.js
@@ -74,6 +74,11 @@ function doOperation(op) {
memory = display.text.valueOf()
} else if (op == leftArrow) {
display.text = display.text.toString().slice(0, -1)
+ if (display.text.length == 0) {
+ display.text = "0"
+ }
+ } else if (op == "Off") {
+ Qt.quit();
} else if (op == "C") {
display.text = "0"
} else if (op == "AC") {
@@ -82,10 +87,5 @@ function doOperation(op) {
lastOp = ""
display.text ="0"
}
-
- if (op == rotateRight)
- main.state = "orientation " + Orientation.Landscape
- if (op == rotateLeft)
- main.state = ''
}
diff --git a/demos/declarative/calculator/calculator.qml b/demos/declarative/calculator/calculator.qml
index 288455b..68c922b 100644
--- a/demos/declarative/calculator/calculator.qml
+++ b/demos/declarative/calculator/calculator.qml
@@ -58,7 +58,7 @@ Rectangle {
property string plusminus : "\u00b1"
function doOp(operation) { CalcEngine.doOperation(operation) }
-
+
Item {
id: main
state: "orientation " + runtime.orientation
@@ -70,8 +70,10 @@ Rectangle {
anchors { fill: parent; topMargin: 6; bottomMargin: 6; leftMargin: 6; rightMargin: 6 }
- Row {
- Display { id: display; width: box.width; height: 64 }
+ Display {
+ id: display
+ width: box.width-3
+ height: 64
}
Column {
@@ -82,11 +84,7 @@ Rectangle {
Row {
spacing: 6
-
- Button {
- id: rotateButton
- width: column.w; height: column.h; color: 'purple'; operation: rotateRight
- }
+ Button { width: column.w; height: column.h; color: 'purple'; operation: "Off" }
Button { width: column.w; height: column.h; color: 'purple'; operation: leftArrow }
Button { width: column.w; height: column.h; color: 'purple'; operation: "C" }
Button { width: column.w; height: column.h; color: 'purple'; operation: "AC" }
@@ -103,7 +101,7 @@ Rectangle {
}
Grid {
- id: grid; rows: 4; columns: 5; spacing: 6
+ id: grid; rows: 5; columns: 5; spacing: 6
property real w: (box.width / columns) - ((spacing * (columns - 1)) / columns)
diff --git a/demos/declarative/minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpg b/demos/declarative/minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpg
deleted file mode 100644
index 445567f..0000000
--- a/demos/declarative/minehunt/MinehuntCore/pics/No-Ones-Laughing-3.jpg
+++ /dev/null
Binary files differ
diff --git a/demos/declarative/minehunt/MinehuntCore/pics/background.png b/demos/declarative/minehunt/MinehuntCore/pics/background.png
new file mode 100644
index 0000000..3734a27
--- /dev/null
+++ b/demos/declarative/minehunt/MinehuntCore/pics/background.png
Binary files differ
diff --git a/demos/declarative/minehunt/MinehuntCore/pics/quit.png b/demos/declarative/minehunt/MinehuntCore/pics/quit.png
new file mode 100644
index 0000000..b822057
--- /dev/null
+++ b/demos/declarative/minehunt/MinehuntCore/pics/quit.png
Binary files differ
diff --git a/demos/declarative/minehunt/main.cpp b/demos/declarative/minehunt/main.cpp
index fc223dd..8bbaee9 100644
--- a/demos/declarative/minehunt/main.cpp
+++ b/demos/declarative/minehunt/main.cpp
@@ -59,6 +59,7 @@ int main(int argc, char *argv[])
#endif
canvas.engine()->rootContext()->setContextObject(game);
canvas.setSource(QString("minehunt.qml"));
+ QObject::connect(canvas.engine(), SIGNAL(quit()), &app, SLOT(quit()));
#ifdef Q_OS_SYMBIAN
canvas.showFullScreen();
diff --git a/demos/declarative/minehunt/minehunt.qml b/demos/declarative/minehunt/minehunt.qml
index 136f56a..4accb52 100644
--- a/demos/declarative/minehunt/minehunt.qml
+++ b/demos/declarative/minehunt/minehunt.qml
@@ -49,7 +49,7 @@ Item {
width: 450; height: 450
- Image { source: "MinehuntCore/pics/No-Ones-Laughing-3.jpg"; anchors.fill: parent; fillMode: Image.Tile }
+ Image { source: "MinehuntCore/pics/background.png"; anchors.fill: parent; fillMode: Image.Tile }
Grid {
anchors.horizontalCenter: parent.horizontalCenter
@@ -67,6 +67,18 @@ Item {
x: 20; spacing: 20
anchors.bottom: field.bottom; anchors.bottomMargin: 15
+ Image {
+ source: "MinehuntCore/pics/quit.png"
+ scale: quitMouse.pressed ? 0.8 : 1.0
+ smooth: quitMouse.pressed
+ y: 10
+ MouseArea {
+ id: quitMouse
+ anchors.fill: parent
+ anchors.margins: -20
+ onClicked: Qt.quit()
+ }
+ }
Column {
spacing: 2
Image { source: "MinehuntCore/pics/bomb-color.png" }
diff --git a/demos/declarative/photoviewer/photoviewer.qml b/demos/declarative/photoviewer/photoviewer.qml
index 4ed3105..3072ea2 100644
--- a/demos/declarative/photoviewer/photoviewer.qml
+++ b/demos/declarative/photoviewer/photoviewer.qml
@@ -81,6 +81,11 @@ Rectangle {
onClicked: mainWindow.editMode = !mainWindow.editMode
anchors.horizontalCenter: parent.horizontalCenter
}
+ Button {
+ id: quitButton; label: qsTr("Quit"); rotation: -2;
+ onClicked: Qt.quit()
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
}
Rectangle {
diff --git a/demos/declarative/rssnews/rssnews.qml b/demos/declarative/rssnews/rssnews.qml
index def3e2c..fb5b5a3 100644
--- a/demos/declarative/rssnews/rssnews.qml
+++ b/demos/declarative/rssnews/rssnews.qml
@@ -71,6 +71,7 @@ Rectangle {
id: categories
anchors.fill: parent
model: rssFeeds
+ footer: quitButtonDelegate
delegate: CategoryDelegate {}
highlight: Rectangle { color: "steelblue" }
highlightMoveSpeed: 9999999
@@ -87,7 +88,24 @@ Rectangle {
delegate: NewsDelegate {}
}
}
-
+ Component {
+ id: quitButtonDelegate
+ Item {
+ width: categories.width; height: 60
+ Text {
+ text: "Quit"
+ font { family: "Helvetica"; pixelSize: 16; bold: true }
+ anchors {
+ left: parent.left; leftMargin: 15
+ verticalCenter: parent.verticalCenter
+ }
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: Qt.quit()
+ }
+ }
+ }
ScrollBar { scrollArea: list; height: list.height; width: 8; anchors.right: window.right }
Rectangle { x: 220; height: window.height; width: 1; color: "#cccccc" }
}
diff --git a/demos/declarative/snake/snake.qml b/demos/declarative/snake/snake.qml
index ed3bac9..12ad71c 100644
--- a/demos/declarative/snake/snake.qml
+++ b/demos/declarative/snake/snake.qml
@@ -194,6 +194,12 @@ Rectangle {
anchors.verticalCenter: parent.verticalCenter
}
+ Content.Button {
+ text: "Quit"
+ anchors { left: btnA.right; leftMargin: 3; verticalCenter: parent.verticalCenter }
+ onClicked: Qt.quit();
+ }
+
Text {
color: activePalette.text
text: "Score: " + score; font.bold: true
diff --git a/demos/declarative/twitter/TwitterCore/TitleBar.qml b/demos/declarative/twitter/TwitterCore/TitleBar.qml
index 558bc18..479aa20 100644
--- a/demos/declarative/twitter/TwitterCore/TitleBar.qml
+++ b/demos/declarative/twitter/TwitterCore/TitleBar.qml
@@ -58,10 +58,20 @@ Item {
rssModel.tags = editor.text
}
+ Image {
+ id: quitButton
+ x: 5
+ anchors.verticalCenter: parent.verticalCenter
+ source: "images/quit.png"
+ MouseArea {
+ anchors.fill: parent
+ onClicked: Qt.quit()
+ }
+ }
Text {
id: categoryText
anchors {
- left: parent.left; right: tagButton.left; leftMargin: 10; rightMargin: 10
+ left: quitButton.right; right: tagButton.left; leftMargin: 5; rightMargin: 10
verticalCenter: parent.verticalCenter
}
elide: Text.ElideLeft
diff --git a/demos/declarative/twitter/TwitterCore/images/quit.png b/demos/declarative/twitter/TwitterCore/images/quit.png
new file mode 100644
index 0000000..5bda1b6
--- /dev/null
+++ b/demos/declarative/twitter/TwitterCore/images/quit.png
Binary files differ
diff --git a/demos/declarative/webbrowser/content/Header.qml b/demos/declarative/webbrowser/content/Header.qml
index 5abf440..d3ccae3 100644
--- a/demos/declarative/webbrowser/content/Header.qml
+++ b/demos/declarative/webbrowser/content/Header.qml
@@ -51,7 +51,6 @@ Image {
x: webView.contentX < 0 ? -webView.contentX : webView.contentX > webView.contentWidth-webView.width
? -webView.contentX+webView.contentWidth-webView.width : 0
-
y: {
if (webView.progress < 1.0)
return 0;
@@ -59,7 +58,6 @@ Image {
webView.contentY < 0 ? -webView.contentY : webView.contentY > height ? -height : -webView.contentY
}
}
-
Column {
width: parent.width
@@ -101,14 +99,38 @@ Image {
Button {
id: reloadButton
- anchors { right: parent.right; rightMargin: 4 }
+ anchors { right: quitButton.left; rightMargin: 10 }
action: webView.reload; image: "pics/view-refresh.png"
visible: webView.progress == 1.0 && !header.urlChanged
}
+ Text {
+ id: quitButton
+ color: "white"
+ style: Text.Sunken
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: 18
+ width: 60
+ text: "Quit"
+ MouseArea {
+ anchors.fill: parent
+ onClicked: Qt.quit()
+ }
+ Rectangle {
+ width: 1
+ y: 5
+ height: parent.height-10
+ anchors.right: parent.left
+ color: "darkgray"
+ }
+ }
Button {
id: stopButton
- anchors { right: parent.right; rightMargin: 4 }
+ anchors { right: quitButton.left; rightMargin: 10 }
action: webView.stop; image: "pics/edit-delete.png"
visible: webView.progress < 1.0 && !header.urlChanged
}
diff --git a/demos/declarative/webbrowser/content/pics/edit-delete.png b/demos/declarative/webbrowser/content/pics/edit-delete.png
index 351659b..df2a147 100644
--- a/demos/declarative/webbrowser/content/pics/edit-delete.png
+++ b/demos/declarative/webbrowser/content/pics/edit-delete.png
Binary files differ
diff --git a/demos/declarative/webbrowser/content/pics/go-jump-locationbar.png b/demos/declarative/webbrowser/content/pics/go-jump-locationbar.png
index 636fe38..61f779c 100644
--- a/demos/declarative/webbrowser/content/pics/go-jump-locationbar.png
+++ b/demos/declarative/webbrowser/content/pics/go-jump-locationbar.png
Binary files differ
diff --git a/demos/declarative/webbrowser/content/pics/go-next-view.png b/demos/declarative/webbrowser/content/pics/go-next-view.png
index 3bce02d..a585cab 100644
--- a/demos/declarative/webbrowser/content/pics/go-next-view.png
+++ b/demos/declarative/webbrowser/content/pics/go-next-view.png
Binary files differ
diff --git a/demos/declarative/webbrowser/content/pics/go-previous-view.png b/demos/declarative/webbrowser/content/pics/go-previous-view.png
index 3ec011e..612fb34 100644
--- a/demos/declarative/webbrowser/content/pics/go-previous-view.png
+++ b/demos/declarative/webbrowser/content/pics/go-previous-view.png
Binary files differ
diff --git a/examples/declarative/animation/states/qt-logo.png b/examples/declarative/animation/states/qt-logo.png
new file mode 100644
index 0000000..14ddf2a
--- /dev/null
+++ b/examples/declarative/animation/states/qt-logo.png
Binary files differ
diff --git a/examples/declarative/animation/states/states.qml b/examples/declarative/animation/states/states.qml
index 77101d0..34cdae3 100644
--- a/examples/declarative/animation/states/states.qml
+++ b/examples/declarative/animation/states/states.qml
@@ -48,14 +48,14 @@ Rectangle {
Image {
id: userIcon
x: topLeftRect.x; y: topLeftRect.y
- source: "user.png"
+ source: "qt-logo.png"
}
Rectangle {
id: topLeftRect
anchors { left: parent.left; top: parent.top; leftMargin: 10; topMargin: 20 }
- width: 64; height: 64
+ width: 46; height: 54
color: "Transparent"; border.color: "Gray"; radius: 6
// Clicking in here sets the state to the default state, returning the image to
@@ -67,7 +67,7 @@ Rectangle {
id: middleRightRect
anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 20 }
- width: 64; height: 64
+ width: 46; height: 54
color: "Transparent"; border.color: "Gray"; radius: 6
// Clicking in here sets the state to 'middleRight'
@@ -78,7 +78,7 @@ Rectangle {
id: bottomLeftRect
anchors { left: parent.left; bottom: parent.bottom; leftMargin: 10; bottomMargin: 20 }
- width: 64; height: 64
+ width: 46; height: 54
color: "Transparent"; border.color: "Gray"; radius: 6
// Clicking in here sets the state to 'bottomLeft'
diff --git a/examples/declarative/animation/states/transitions.qml b/examples/declarative/animation/states/transitions.qml
index 1df60ae..884779c 100644
--- a/examples/declarative/animation/states/transitions.qml
+++ b/examples/declarative/animation/states/transitions.qml
@@ -54,14 +54,14 @@ Rectangle {
Image {
id: userIcon
x: topLeftRect.x; y: topLeftRect.y
- source: "user.png"
+ source: "qt-logo.png"
}
Rectangle {
id: topLeftRect
anchors { left: parent.left; top: parent.top; leftMargin: 10; topMargin: 20 }
- width: 64; height: 64
+ width: 46; height: 54
color: "Transparent"; border.color: "Gray"; radius: 6
// Clicking in here sets the state to the default state, returning the image to
@@ -73,7 +73,7 @@ Rectangle {
id: middleRightRect
anchors { right: parent.right; verticalCenter: parent.verticalCenter; rightMargin: 20 }
- width: 64; height: 64
+ width: 46; height: 54
color: "Transparent"; border.color: "Gray"; radius: 6
// Clicking in here sets the state to 'middleRight'
@@ -84,7 +84,7 @@ Rectangle {
id: bottomLeftRect
anchors { left: parent.left; bottom: parent.bottom; leftMargin: 10; bottomMargin: 20 }
- width: 64; height: 64
+ width: 46; height: 54
color: "Transparent"; border.color: "Gray"; radius: 6
// Clicking in here sets the state to 'bottomLeft'
diff --git a/examples/declarative/animation/states/user.png b/examples/declarative/animation/states/user.png
deleted file mode 100644
index dd7d7a2..0000000
--- a/examples/declarative/animation/states/user.png
+++ /dev/null
Binary files differ
diff --git a/examples/declarative/imageelements/image/ImageCell.qml b/examples/declarative/imageelements/image/ImageCell.qml
index bd232b9..71a17fe 100644
--- a/examples/declarative/imageelements/image/ImageCell.qml
+++ b/examples/declarative/imageelements/image/ImageCell.qml
@@ -48,7 +48,7 @@ Item {
Image {
id: image
width: parent.width; height: parent.height - captionItem.height
- source: "face-smile.png"
+ source: "qt-logo.png"
clip: true // only makes a difference if mode is PreserveAspectCrop
smooth: true
}
diff --git a/examples/declarative/imageelements/image/face-smile.png b/examples/declarative/imageelements/image/face-smile.png
deleted file mode 100644
index 3d66d72..0000000
--- a/examples/declarative/imageelements/image/face-smile.png
+++ /dev/null
Binary files differ
diff --git a/examples/declarative/imageelements/image/qt-logo.png b/examples/declarative/imageelements/image/qt-logo.png
new file mode 100644
index 0000000..14ddf2a
--- /dev/null
+++ b/examples/declarative/imageelements/image/qt-logo.png
Binary files differ
diff --git a/examples/declarative/modelviews/listview/content/pics/arrow-down.png b/examples/declarative/modelviews/listview/content/pics/arrow-down.png
deleted file mode 100644
index 63331a5..0000000
--- a/examples/declarative/modelviews/listview/content/pics/arrow-down.png
+++ /dev/null
Binary files differ
diff --git a/examples/declarative/modelviews/listview/content/pics/arrow-up.png b/examples/declarative/modelviews/listview/content/pics/arrow-up.png
deleted file mode 100644
index 4459024..0000000
--- a/examples/declarative/modelviews/listview/content/pics/arrow-up.png
+++ /dev/null
Binary files differ
diff --git a/examples/declarative/modelviews/listview/content/pics/list-delete.png b/examples/declarative/modelviews/listview/content/pics/list-delete.png
deleted file mode 100644
index 9640f6b..0000000
--- a/examples/declarative/modelviews/listview/content/pics/list-delete.png
+++ /dev/null
Binary files differ
diff --git a/examples/declarative/positioners/add.png b/examples/declarative/positioners/add.png
index f29d84b..1ee4542 100644
--- a/examples/declarative/positioners/add.png
+++ b/examples/declarative/positioners/add.png
Binary files differ
diff --git a/examples/declarative/positioners/del.png b/examples/declarative/positioners/del.png
index 1d753a3..8d2eaed 100644
--- a/examples/declarative/positioners/del.png
+++ b/examples/declarative/positioners/del.png
Binary files differ
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
index a6e8c85..a710190 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
@@ -653,6 +653,8 @@ void QDeclarativeFlickablePrivate::handleMousePressEvent(QGraphicsSceneMouseEven
timeline.clear();
hData.velocity = 0;
vData.velocity = 0;
+ hData.dragStartOffset = 0;
+ vData.dragStartOffset = 0;
lastPos = QPoint();
QDeclarativeItemPrivate::start(lastPosTime);
pressPos = event->pos();
@@ -675,7 +677,9 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
if (q->yflick()) {
int dy = int(event->pos().y() - pressPos.y());
if (qAbs(dy) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) {
- qreal newY = dy + vData.pressPos;
+ if (!vMoved)
+ vData.dragStartOffset = dy;
+ qreal newY = dy + vData.pressPos - vData.dragStartOffset;
const qreal minY = q->minYExtent();
const qreal maxY = q->maxYExtent();
if (newY > minY)
@@ -705,7 +709,9 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
if (q->xflick()) {
int dx = int(event->pos().x() - pressPos.x());
if (qAbs(dx) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) {
- qreal newX = dx + hData.pressPos;
+ if (!hMoved)
+ hData.dragStartOffset = dx;
+ qreal newX = dx + hData.pressPos - hData.dragStartOffset;
const qreal minX = q->minXExtent();
const qreal maxX = q->maxXExtent();
if (newX > minX)
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
index b919e1b..c398faa 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeflickable_p_p.h
@@ -96,6 +96,7 @@ public:
QDeclarativeTimeLineValueProxy<QDeclarativeFlickablePrivate> move;
qreal viewSize;
qreal pressPos;
+ qreal dragStartOffset;
qreal velocity;
qreal flickTarget;
QDeclarativeFlickablePrivate::Velocity smoothVelocity;
diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index d67e69a..a0faf14 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -64,7 +64,7 @@ public:
FxGridItem(QDeclarativeItem *i, QDeclarativeGridView *v) : item(i), view(v) {
attached = static_cast<QDeclarativeGridViewAttached*>(qmlAttachedPropertiesObject<QDeclarativeGridView>(item));
if (attached)
- attached->m_view = view;
+ attached->setView(view);
}
~FxGridItem() {}
@@ -2212,7 +2212,7 @@ void QDeclarativeGridView::trackedPositionChanged()
if (trackedPos < d->startPosition() + d->highlightRangeStart) {
pos = d->startPosition();
} else if (d->trackedItem->endRowPos() > d->endPosition() - d->size() + d->highlightRangeEnd) {
- pos = d->endPosition() - d->size();
+ pos = d->endPosition() - d->size() + 1;
if (pos < d->startPosition())
pos = d->startPosition();
} else {
@@ -2226,14 +2226,14 @@ void QDeclarativeGridView::trackedPositionChanged()
} else {
if (trackedPos < viewPos && d->currentItem->rowPos() < viewPos) {
pos = d->currentItem->rowPos() < trackedPos ? 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();
+ } 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();
+ pos = d->currentItem->endRowPos() - d->size() + 1;
if (d->rowSize() > d->size())
pos = d->currentItem->rowPos();
}
diff --git a/src/declarative/graphicsitems/qdeclarativegridview_p.h b/src/declarative/graphicsitems/qdeclarativegridview_p.h
index d6bbaf3..ee632b1 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview_p.h
+++ b/src/declarative/graphicsitems/qdeclarativegridview_p.h
@@ -43,6 +43,7 @@
#define QDECLARATIVEGRIDVIEW_H
#include "private/qdeclarativeflickable_p.h"
+#include "private/qdeclarativeguard_p.h"
QT_BEGIN_HEADER
@@ -220,8 +221,14 @@ public:
: QObject(parent), m_view(0), m_isCurrent(false), m_delayRemove(false) {}
~QDeclarativeGridViewAttached() {}
- Q_PROPERTY(QDeclarativeGridView *view READ view CONSTANT)
+ Q_PROPERTY(QDeclarativeGridView *view READ view NOTIFY viewChanged)
QDeclarativeGridView *view() { return m_view; }
+ void setView(QDeclarativeGridView *view) {
+ if (view != m_view) {
+ m_view = view;
+ emit viewChanged();
+ }
+ }
Q_PROPERTY(bool isCurrentItem READ isCurrentItem NOTIFY currentItemChanged)
bool isCurrentItem() const { return m_isCurrent; }
@@ -249,9 +256,10 @@ Q_SIGNALS:
void delayRemoveChanged();
void add();
void remove();
+ void viewChanged();
public:
- QDeclarativeGridView *m_view;
+ QDeclarativeGuard<QDeclarativeGridView> m_view;
bool m_isCurrent : 1;
bool m_delayRemove : 1;
};
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 2e2e08c..d3d46f7 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -96,7 +96,7 @@ public:
FxListItem(QDeclarativeItem *i, QDeclarativeListView *v) : item(i), section(0), view(v) {
attached = static_cast<QDeclarativeListViewAttached*>(qmlAttachedPropertiesObject<QDeclarativeListView>(item));
if (attached)
- attached->m_view = view;
+ attached->setView(view);
}
~FxListItem() {}
qreal position() const {
@@ -2652,7 +2652,7 @@ void QDeclarativeListView::trackedPositionChanged()
if (trackedPos < d->startPosition() + d->highlightRangeStart) {
pos = d->startPosition();
} else if (d->trackedItem->endPosition() > d->endPosition() - d->size() + d->highlightRangeEnd) {
- pos = d->endPosition() - d->size();
+ pos = d->endPosition() - d->size() + 1;
if (pos < d->startPosition())
pos = d->startPosition();
} else {
@@ -2666,14 +2666,14 @@ void QDeclarativeListView::trackedPositionChanged()
} 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();
- if (d->trackedItem->size() > d->size())
+ } 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 (d->trackedItem->size() > d->size())
pos = trackedPos;
} else {
- pos = d->currentItem->endPosition() - d->size();
+ pos = d->currentItem->endPosition() - d->size() + 1;
if (d->currentItem->size() > d->size())
pos = d->currentItem->position();
}
diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h
index b264861..8fbff49 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview_p.h
+++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h
@@ -43,6 +43,7 @@
#define QDECLARATIVELISTVIEW_H
#include "private/qdeclarativeflickable_p.h"
+#include "private/qdeclarativeguard_p.h"
QT_BEGIN_HEADER
@@ -268,8 +269,14 @@ public:
: QObject(parent), m_view(0), m_isCurrent(false), m_delayRemove(false) {}
~QDeclarativeListViewAttached() {}
- Q_PROPERTY(QDeclarativeListView *view READ view CONSTANT)
+ Q_PROPERTY(QDeclarativeListView *view READ view NOTIFY viewChanged)
QDeclarativeListView *view() { return m_view; }
+ void setView(QDeclarativeListView *view) {
+ if (view != m_view) {
+ m_view = view;
+ emit viewChanged();
+ }
+ }
Q_PROPERTY(bool isCurrentItem READ isCurrentItem NOTIFY currentItemChanged)
bool isCurrentItem() const { return m_isCurrent; }
@@ -327,9 +334,10 @@ Q_SIGNALS:
void delayRemoveChanged();
void add();
void remove();
+ void viewChanged();
public:
- QDeclarativeListView *m_view;
+ QDeclarativeGuard<QDeclarativeListView> m_view;
mutable QString m_section;
QString m_prevSection;
QString m_nextSection;
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
index 65b14cf..b4e8bda 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
@@ -714,6 +714,7 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model)
QObject::disconnect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)),
this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const 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)),
@@ -761,6 +762,7 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model)
QObject::connect(d->m_abstractItemModel, SIGNAL(rowsMoved(const QModelIndex&,int,int,const QModelIndex&,int)),
this, SLOT(_q_rowsMoved(const QModelIndex&,int,int,const 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;
return;
}
@@ -1332,6 +1334,12 @@ void QDeclarativeVisualDataModel::_q_dataChanged(const QModelIndex &begin, const
_q_itemsChanged(begin.row(), end.row() - begin.row() + 1, d->m_roles);
}
+void QDeclarativeVisualDataModel::_q_layoutChanged()
+{
+ Q_D(QDeclarativeVisualDataModel);
+ _q_itemsChanged(0, count(), d->m_roles);
+}
+
void QDeclarativeVisualDataModel::_q_modelReset()
{
emit modelReset();
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
index 50d2c53..e159786 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
@@ -194,6 +194,7 @@ private Q_SLOTS:
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, QDeclarativePackage *package);
void _q_destroyingPackage(QDeclarativePackage *package);
diff --git a/src/declarative/util/qdeclarativelistmodel.cpp b/src/declarative/util/qdeclarativelistmodel.cpp
index 0162beb..7504c23 100644
--- a/src/declarative/util/qdeclarativelistmodel.cpp
+++ b/src/declarative/util/qdeclarativelistmodel.cpp
@@ -58,9 +58,6 @@ Q_DECLARE_METATYPE(QListModelInterface *)
QT_BEGIN_NAMESPACE
-#define DATA_ROLE_ID 1
-#define DATA_ROLE_NAME "data"
-
QDeclarativeListModelParser::ListInstruction *QDeclarativeListModelParser::ListModelData::instructions() const
{
return (QDeclarativeListModelParser::ListInstruction *)((char *)this + sizeof(ListModelData));
diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp
index 7b3d4a8..02bf370 100644
--- a/src/declarative/util/qdeclarativexmllistmodel.cpp
+++ b/src/declarative/util/qdeclarativexmllistmodel.cpp
@@ -466,8 +466,6 @@ public:
QList<QDeclarativeXmlListModelRole *> roleObjects;
static void append_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list, QDeclarativeXmlListModelRole *role);
static void clear_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list);
- static void removeAt_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list, int i);
- static void insert_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list, int i, QDeclarativeXmlListModelRole *role);
QList<QList<QVariant> > data;
int redirectCount;
};
diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
index 1a28b71..896d69e 100644
--- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
+++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
@@ -590,7 +590,7 @@ void tst_QDeclarativeGridView::currentIndex()
QCOMPARE(gridview->currentIndex(), 35);
QCOMPARE(gridview->currentItem(), findItem<QDeclarativeItem>(contentItem, "wrapper", 35));
QCOMPARE(gridview->currentItem()->y(), gridview->highlightItem()->y());
- QCOMPARE(gridview->contentY(), 399.0);
+ QCOMPARE(gridview->contentY(), 400.0);
gridview->moveCurrentIndexRight();
QCOMPARE(gridview->currentIndex(), 36);
@@ -629,7 +629,7 @@ void tst_QDeclarativeGridView::currentIndex()
gridview->moveCurrentIndexLeft();
QCOMPARE(gridview->currentIndex(), model.count()-1);
- QTRY_COMPARE(gridview->contentY(), 879.0);
+ QTRY_COMPARE(gridview->contentY(), 880.0);
gridview->moveCurrentIndexRight();
QCOMPARE(gridview->currentIndex(), 0);
diff --git a/tests/auto/declarative/qdeclarativelistview/data/itemlist.qml b/tests/auto/declarative/qdeclarativelistview/data/itemlist.qml
index 66728d6..9ea5953 100644
--- a/tests/auto/declarative/qdeclarativelistview/data/itemlist.qml
+++ b/tests/auto/declarative/qdeclarativelistview/data/itemlist.qml
@@ -13,17 +13,17 @@ Rectangle {
objectName: "itemModel"
Rectangle {
objectName: "item1"
- height: view.height; width: view.width; color: "#FFFEF0"
+ height: ListView.view.height; width: view.width; color: "#FFFEF0"
Text { objectName: "text1"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
}
Rectangle {
objectName: "item2"
- height: view.height; width: view.width; color: "#F0FFF7"
+ height: ListView.view.height; width: view.width; color: "#F0FFF7"
Text { objectName: "text2"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
}
Rectangle {
objectName: "item3"
- height: view.height; width: view.width; color: "#F4F0FF"
+ height: ListView.view.height; width: view.width; color: "#F4F0FF"
Text { objectName: "text3"; text: "index: " + parent.VisualItemModel.index; font.bold: true; anchors.centerIn: parent }
}
}
diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
index 9c24e03..bf4754d 100644
--- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
+++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
@@ -979,7 +979,7 @@ void tst_QDeclarativeListView::currentIndex()
// current item should be 20th item at startup
// and current item should be in view
QCOMPARE(listview->currentIndex(), 20);
- QCOMPARE(listview->contentY(), 99.0);
+ QCOMPARE(listview->contentY(), 100.0);
QCOMPARE(listview->currentItem(), findItem<QDeclarativeItem>(contentItem, "wrapper", 20));
QCOMPARE(listview->highlightItem()->y(), listview->currentItem()->y());
@@ -1002,7 +1002,7 @@ void tst_QDeclarativeListView::currentIndex()
listview->decrementCurrentIndex();
QCOMPARE(listview->currentIndex(), model.count()-1);
- QTRY_COMPARE(listview->contentY(), 279.0);
+ QTRY_COMPARE(listview->contentY(), 280.0);
listview->incrementCurrentIndex();
QCOMPARE(listview->currentIndex(), 0);
@@ -1066,6 +1066,7 @@ void tst_QDeclarativeListView::itemList()
QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "item1");
QTRY_VERIFY(item);
QTRY_COMPARE(item->x(), 0.0);
+ QCOMPARE(item->height(), listview->height());
QDeclarativeText *text = findItem<QDeclarativeText>(contentItem, "text1");
QTRY_VERIFY(text);
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml
new file mode 100644
index 0000000..a798f77
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/datalist.qml
@@ -0,0 +1,15 @@
+import Qt 4.7
+
+ListView {
+ width: 100
+ height: 100
+ anchors.fill: parent
+ model: myModel
+ delegate: Component {
+ Rectangle {
+ height: 25
+ width: 100
+ Text { objectName: "display"; text: display }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
index e0f32ea..3cd786f 100644
--- a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp
@@ -83,6 +83,7 @@ public:
private slots:
void rootIndex();
+ void updateLayout();
void objectListModel();
private:
@@ -155,6 +156,40 @@ void tst_qdeclarativevisualdatamodel::rootIndex()
delete obj;
}
+void tst_qdeclarativevisualdatamodel::updateLayout()
+{
+ QDeclarativeView view;
+
+ QStandardItemModel model;
+ initStandardTreeModel(&model);
+
+ view.rootContext()->setContextProperty("myModel", &model);
+
+ view.setSource(QUrl::fromLocalFile(SRCDIR "/data/datalist.qml"));
+
+ QDeclarativeListView *listview = qobject_cast<QDeclarativeListView*>(view.rootObject());
+ QVERIFY(listview != 0);
+
+ QDeclarativeItem *contentItem = listview->contentItem();
+ QVERIFY(contentItem != 0);
+
+ QDeclarativeText *name = findItem<QDeclarativeText>(contentItem, "display", 0);
+ QCOMPARE(name->text(), QString("Row 1 Item"));
+ name = findItem<QDeclarativeText>(contentItem, "display", 1);
+ QCOMPARE(name->text(), QString("Row 2 Item"));
+ name = findItem<QDeclarativeText>(contentItem, "display", 2);
+ QCOMPARE(name->text(), QString("Row 3 Item"));
+
+ model.invisibleRootItem()->sortChildren(0, Qt::DescendingOrder);
+
+ name = findItem<QDeclarativeText>(contentItem, "display", 0);
+ QCOMPARE(name->text(), QString("Row 3 Item"));
+ name = findItem<QDeclarativeText>(contentItem, "display", 1);
+ QCOMPARE(name->text(), QString("Row 2 Item"));
+ name = findItem<QDeclarativeText>(contentItem, "display", 2);
+ QCOMPARE(name->text(), QString("Row 1 Item"));
+}
+
void tst_qdeclarativevisualdatamodel::objectListModel()
{
QDeclarativeView view;