on xenial help sign in
fixed left edged panel
1482f99Nick Dedekind
qml/Panel/PanelBar.qml+58−31
@@ -52,15 +52,21 @@ Item {
52 }
52 }
53
53
54 function addScrollOffset(scrollAmmout) {
54 function addScrollOffset(scrollAmmout) {
55+ if (root.alignment == Qt.AlignLeft) {
56+ scrollAmmout = -scrollAmmout;
57+ }
58+
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.
57
61
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;
60 }
64 }
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;
69+ }
64 }
70 }
65 d.scrollOffset = d.scrollOffset + scrollAmmout;
71 d.scrollOffset = d.scrollOffset + scrollAmmout;
66 }
72 }
@@ -68,14 +74,19 @@ Item {
68 QtObject {
74 QtObject {
69 id: d
75 id: d
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
73
79
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;
84+
85+ if (root.alignment == Qt.AlignLeft) {
86+ return initialItem.x - initialItem.width / 2;
87+ } else {
78− return row.width - initialItem.x - initialItem.width /2;
88+ return row.width - initialItem.x - initialItem.width / 2;
89+ }
79 }
90 }
80
91
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()
89
100
90 onInitialItemChanged: {
101 onInitialItemChanged: {
102+ if (root.alignment == Qt.AlignLeft) {
103+ originalDistanceFromEdge = initialItem ? (initialItem.x - initialItem.width/2) : -1;
104+ } else {
91− originalDistanceFromRight = initialItem ? (row.width - initialItem.x - initialItem.width/2) : -1;
105+ originalDistanceFromEdge = initialItem ? (row.width - initialItem.x - initialItem.width/2) : -1;
106+ }
92 }
107 }
93
108
94 Behavior on alignmentAdjustment {
109 Behavior on alignmentAdjustment {
@@ -99,26 +114,38 @@ Item {
99 flickable.resetContentXComponents();
114 flickable.resetContentXComponents();
100
115
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;
107− } else {
108− d.alignmentAdjustment -= ((flickable.contentX + flickable.width) - row.width);
109− }
110
117
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);
114
122
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);
126+ }
127+ } else {
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;
133+ } else {
134+ d.alignmentAdjustment -= ((flickable.contentX + flickable.width) - row.width);
135+ }
136+
137+ // gap between right and row?
138+ } else if (flickable.contentX < 0) {
139+ d.alignmentAdjustment -= flickable.contentX;
118
140
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));
144+
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);
148+ }
122 }
149 }
123 }
150 }
124 }
151 }
@@ -149,7 +176,7 @@ Item {
149 rotation: root.alignment != Qt.AlignRight ? 0 : 180
176 rotation: root.alignment != Qt.AlignRight ? 0 : 180
150
177
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
155
182
@@ -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;
240
267
241− var rowOffset = distanceFromRight - originalDistanceFromRight;
268+ var rowOffset = distanceFromEdge - originalDistanceFromEdge;
242 return rowOffset;
269 return rowOffset;
243 }
270 }
244 restoreEntryValues: false
271 restoreEntryValues: false
245 }
272 }
246− }
273+ },
247− , State {
274+ State {
248 name: "interactive"
275 name: "interactive"
249 when: expanded && interactive
276 when: expanded && interactive
250
277
tests/qmltests/Panel/tst_Panel.qml+1
@@ -48,6 +48,7 @@ PanelTest {
48
48
49 ApplicationMenuRegistry.RegisterSurfaceMenu("dialerAppSurfaceId", "/dialerapp", "/dialerapp", ":2");
49 ApplicationMenuRegistry.RegisterSurfaceMenu("dialerAppSurfaceId", "/dialerapp", "/dialerapp", ":2");
50 Indicators.UnityMenuModelCache.setCachedModelData("/dialerapp", appMenuData.dialerData);
50 Indicators.UnityMenuModelCache.setCachedModelData("/dialerapp", appMenuData.dialerData);
51+ PanelState.title = "AppMenu";
51 }
52 }
52
53
53 Rectangle {
54 Rectangle {