@@ -52,15 +52,21 @@ Item {
54 function addScrollOffset(scrollAmmout) {
54 function addScrollOffset(scrollAmmout) {
55+ if (root.alignment == Qt.AlignLeft) {
56+ scrollAmmout = -scrollAmmout;
55 if (scrollAmmout < 0) { // left scroll
59 if (scrollAmmout < 0) { // left scroll
56 if (flickable.contentX + flickable.width > row.width) return; // already off the left.
60 if (flickable.contentX + flickable.width > row.width) return; // already off the left.
58− if (flickable.contentX + flickable.width - scrollAmmout > row.width) { // going to be off the right
62+ if (flickable.contentX + flickable.width - scrollAmmout > row.width) { // going to be off the left
59 scrollAmmout = (flickable.contentX + flickable.width) - row.width;
63 scrollAmmout = (flickable.contentX + flickable.width) - row.width;
61 } else { // right scroll
65 } else { // right scroll
62 if (flickable.contentX < 0) return; // already off the right.
66 if (flickable.contentX < 0) return; // already off the right.
63− if (flickable.contentX - scrollAmmout < 0) scrollAmmout = flickable.contentX; // going to be off the right
67+ if (flickable.contentX - scrollAmmout < 0) { // going to be off the right
68+ scrollAmmout = flickable.contentX;
65 d.scrollOffset = d.scrollOffset + scrollAmmout;
71 d.scrollOffset = d.scrollOffset + scrollAmmout;
@@ -68,14 +74,19 @@ Item {
68 QtObject {
74 QtObject {
70 property var initialItem
76 property var initialItem
71− // the non-expanded distance from row offset to center of initial item
77+ // the non-expanded distance from alignment edge to center of initial item
72− property real originalDistanceFromRight: -1
78+ property real originalDistanceFromEdge: -1
74− // calculate the distance from row offset to center of initial item
80+ // calculate the distance from row alignment edge edge to center of initial item
75− property real distanceFromRight: {
81+ property real distanceFromEdge: {
76− if (originalDistanceFromRight == -1) return 0;
82+ if (originalDistanceFromEdge == -1) return 0;
77 if (!initialItem) return 0;
83 if (!initialItem) return 0;
85+ if (root.alignment == Qt.AlignLeft) {
86+ return initialItem.x - initialItem.width / 2;
78− return row.width - initialItem.x - initialItem.width /2;
88+ return row.width - initialItem.x - initialItem.width / 2;
81 // offset to the intially selected expanded item
92 // offset to the intially selected expanded item
@@ -88,7 +99,11 @@ Item {
88 onScrollOffsetChanged: root.lateralPositionChanged()
99 onScrollOffsetChanged: root.lateralPositionChanged()
90 onInitialItemChanged: {
101 onInitialItemChanged: {
102+ if (root.alignment == Qt.AlignLeft) {
103+ originalDistanceFromEdge = initialItem ? (initialItem.x - initialItem.width/2) : -1;
91− originalDistanceFromRight = initialItem ? (row.width - initialItem.x - initialItem.width/2) : -1;
105+ originalDistanceFromEdge = initialItem ? (row.width - initialItem.x - initialItem.width/2) : -1;
94 Behavior on alignmentAdjustment {
109 Behavior on alignmentAdjustment {
@@ -99,26 +114,38 @@ Item {
99 flickable.resetContentXComponents();
114 flickable.resetContentXComponents();
101 if (expanded && !flickable.moving) {
116 if (expanded && !flickable.moving) {
102− // gap between left and row?
103− if (flickable.contentX + flickable.width > row.width) {
104− // row width is less than flickable
105− if (row.width < flickable.width) {
106− d.alignmentAdjustment -= flickable.contentX;
108− d.alignmentAdjustment -= ((flickable.contentX + flickable.width) - row.width);
111− // gap between right and row?
118+ if (root.alignment == Qt.AlignLeft) {
119+ // current item overlap on left
112− } else if (flickable.contentX < 0) {
120+ if (row.currentItem && flickable.contentX > row.currentItem.x) {
113− d.alignmentAdjustment -= flickable.contentX;
121+ d.alignmentAdjustment -= (flickable.contentX - row.currentItem.x);
115− // current item overlap on left
123+ // current item overlap on right
116− } else if (row.currentItem && (flickable.contentX + flickable.width) < (row.width - row.currentItem.x)) {
124+ } else if (row.currentItem && flickable.contentX + flickable.width < row.currentItem.x + row.currentItem.width) {
117− d.alignmentAdjustment += ((row.width - row.currentItem.x) - (flickable.contentX + flickable.width));
125+ d.alignmentAdjustment += (row.currentItem.x + row.currentItem.width) - (flickable.contentX + flickable.width);
128+ // gap between left and row?
129+ if (flickable.contentX + flickable.width > row.width) {
130+ // row width is less than flickable
131+ if (row.width < flickable.width) {
132+ d.alignmentAdjustment -= flickable.contentX;
134+ d.alignmentAdjustment -= ((flickable.contentX + flickable.width) - row.width);
137+ // gap between right and row?
138+ } else if (flickable.contentX < 0) {
139+ d.alignmentAdjustment -= flickable.contentX;
141+ // current item overlap on left
142+ } else if (row.currentItem && (flickable.contentX + flickable.width) < (row.width - row.currentItem.x)) {
143+ d.alignmentAdjustment += ((row.width - row.currentItem.x) - (flickable.contentX + flickable.width));
119− // current item overlap on right
145+ // current item overlap on right
120− } else if (row.currentItem && flickable.contentX > (row.width - row.currentItem.x - row.currentItem.width)) {
146+ } else if (row.currentItem && flickable.contentX > (row.width - row.currentItem.x - row.currentItem.width)) {
121− d.alignmentAdjustment -= flickable.contentX - (row.width - row.currentItem.x - row.currentItem.width);
147+ d.alignmentAdjustment -= flickable.contentX - (row.width - row.currentItem.x - row.currentItem.width);
@@ -149,7 +176,7 @@ Item {
149 rotation: root.alignment != Qt.AlignRight ? 0 : 180
176 rotation: root.alignment != Qt.AlignRight ? 0 : 180
151 anchors.fill: parent
178 anchors.fill: parent
152− contentWidth: row.implicitWidth
179+ contentWidth: row.width
153 contentX: d.combinedOffset
180 contentX: d.combinedOffset
154 interactive: false
181 interactive: false
@@ -236,15 +263,15 @@ Item {
236 target: d
263 target: d
237 rowOffset: {
264 rowOffset: {
238 if (!initialItem) return 0;
265 if (!initialItem) return 0;
239− if (distanceFromRight - initialItem.width <= 0) return 0;
266+ if (distanceFromEdge - initialItem.width <= 0) return 0;
241− var rowOffset = distanceFromRight - originalDistanceFromRight;
268+ var rowOffset = distanceFromEdge - originalDistanceFromEdge;
242 return rowOffset;
269 return rowOffset;
244 restoreEntryValues: false
271 restoreEntryValues: false
247− , State {
274+ State {
248 name: "interactive"
275 name: "interactive"
249 when: expanded && interactive
276 when: expanded && interactive