on xenial help sign in
Make more CardTool properties readonly
8ee8002Albert Astals Cid
qml/Dash/CardGrid.qml+3−4
@@ -20,13 +20,12 @@ import "../Components"
20DashRenderer {
20DashRenderer {
21 id: root
21 id: root
22
22
23− readonly property real defaultMinimumHorizontalSpacing: units.gu(1)
24 readonly property int collapsedRows: {
23 readonly property int collapsedRows: {
25 if (!cardTool || !cardTool.template || typeof cardTool.template["collapsed-rows"] != "number") return 2;
24 if (!cardTool || !cardTool.template || typeof cardTool.template["collapsed-rows"] != "number") return 2;
26 return cardTool.template["collapsed-rows"];
25 return cardTool.template["collapsed-rows"];
27 }
26 }
27+ // ↓ This is the ubuntu store icon
28− property string backgroundShapeStyle: "inset";
28+ readonly property string backgroundShapeStyle: cardTool.isAppLikeScope && !cardTool.isAppLikeScopeAppCategory ? "shadow" : "inset"
29− property alias minimumHorizontalSpacing: grid.minimumHorizontalSpacing
30
29
31 expandedHeight: grid.totalContentHeight
30 expandedHeight: grid.totalContentHeight
32 collapsedHeight: Math.min(grid.contentHeightForRows(collapsedRows, grid.cellHeight), expandedHeight)
31 collapsedHeight: Math.min(grid.contentHeightForRows(collapsedRows, grid.cellHeight), expandedHeight)
@@ -46,7 +45,7 @@ DashRenderer {
46 ResponsiveGridView {
45 ResponsiveGridView {
47 id: grid
46 id: grid
48 anchors.fill: parent
47 anchors.fill: parent
49− minimumHorizontalSpacing: root.defaultMinimumHorizontalSpacing
48+ minimumHorizontalSpacing: (cardTool.isAppLikeScopeAppCategory && cardTool.isWideView) ? units.gu(5) : units.gu(1)
50 delegateWidth: cardTool.cardWidth
49 delegateWidth: cardTool.cardWidth
51 delegateHeight: cardTool.cardHeight
50 delegateHeight: cardTool.cardHeight
52 verticalSpacing: units.gu(1)
51 verticalSpacing: units.gu(1)
qml/Dash/CardTool.qml+60−16
@@ -41,11 +41,6 @@ Item {
41 */
41 */
42 property real viewWidth
42 property real viewWidth
43
43
44− /*!
45− \brief Scaling factor of selected Carousel item.
46− */
47− readonly property real carouselSelectedItemScaleFactor: 1.38 // XXX assuming 1.38 carousel scaling factor for cards
48−
49 /*!
44 /*!
50 \brief Template supplied for the category.
45 \brief Template supplied for the category.
51 */
46 */
@@ -56,10 +51,25 @@ Item {
56 */
51 */
57 property var components
52 property var components
58
53
54+ /*!
55+ \brief The Scope this cardTool is representing
56+ */
57+ property string scopeId
58+
59+ /*!
60+ \brief The Scope category this cardTool is representing
61+ */
62+ property string categoryId
63+
64+ /*!
65+ \brief Scaling factor of selected Carousel item.
66+ */
67+ readonly property real carouselSelectedItemScaleFactor: 1.38 // XXX assuming 1.38 carousel scaling factor for cards
68+
59 /*!
69 /*!
60 \brief The category layout for this card tool.
70 \brief The category layout for this card tool.
61 */
71 */
62− property string categoryLayout: {
72+ readonly property string categoryLayout: {
63 var layout = template["category-layout"];
73 var layout = template["category-layout"];
64
74
65 // carousel fallback mode to grid
75 // carousel fallback mode to grid
@@ -67,9 +77,17 @@ Item {
67 return layout;
77 return layout;
68 }
78 }
69
79
80+ readonly property bool isAppLikeScope: scopeId === "clickscope" || scopeId === "libertine-scope.ubuntu_libertine-scope"
81+ readonly property bool isAppLikeScopeAppCategory: ((scopeId === "clickscope" && (categoryId === "predefined" || categoryId === "local"))
82+ || (scopeId === "libertine-scope.ubuntu_libertine-scope" && categoryId !== "hint"))
70
83
71− // Not readonly because gets overwritten from GenericScopeView in some cases
84+ readonly property string artShapeStyle: {
85+ if (isAppLikeScope) {
86+ return isAppLikeScopeAppCategory ? "icon" : "flat";
87+ } else {
72− property string artShapeStyle: categoryLayout === "carousel" ? "shadow" : "inset"
88+ return categoryLayout === "carousel" ? "shadow" : "inset"
89+ }
90+ }
73
91
74 // FIXME ? This seems like it should not be needed, but on Qt 5.4 + phone
92 // FIXME ? This seems like it should not be needed, but on Qt 5.4 + phone
75 // we are doing unneeded calls to getCardComponent with artShapeStyle and categoryLayout being empty
93 // we are doing unneeded calls to getCardComponent with artShapeStyle and categoryLayout being empty
@@ -90,12 +108,31 @@ Item {
90 height: 0
108 height: 0
91 clip: true
109 clip: true
92
110
111+ // We have 3 view "widths"
112+ // narrow <= 45gu
113+ // normal
114+ // wide >= 70gu
115+ readonly property bool isWideView: viewWidth >= units.gu(70)
116+ readonly property bool isNarrowView: viewWidth <= units.gu(45)
117+
93 /*!
118 /*!
94 type:real \brief Width to be enforced on the card in this configuration.
119 type:real \brief Width to be enforced on the card in this configuration.
95
120
96 If -1, should use implicit width of the actual card.
121 If -1, should use implicit width of the actual card.
97 */
122 */
98− property real cardWidth: {
123+ readonly property real cardWidth: {
124+ if (isAppLikeScopeAppCategory) {
125+ if (!isNarrowView) {
126+ if (isWideView) {
127+ return units.gu(11);
128+ } else {
129+ return units.gu(10);
130+ }
131+ } else {
132+ return units.gu(12);
133+ }
134+ }
135+
99 switch (categoryLayout) {
136 switch (categoryLayout) {
100 case "grid":
137 case "grid":
101 case "vertical-journal":
138 case "vertical-journal":
@@ -103,16 +140,16 @@ Item {
103 if (template["card-layout"] === "horizontal") size = "large";
140 if (template["card-layout"] === "horizontal") size = "large";
104 switch (size) {
141 switch (size) {
105 case "small": {
142 case "small": {
106− if (viewWidth <= units.gu(45)) return units.gu(12);
143+ if (isNarrowView) return units.gu(12);
107 else return units.gu(14);
144 else return units.gu(14);
108 }
145 }
109 case "large": {
146 case "large": {
110− if (viewWidth >= units.gu(70)) return units.gu(42);
147+ if (isWideView) return units.gu(42);
111 else return viewWidth - units.gu(2);
148 else return viewWidth - units.gu(2);
112 }
149 }
113 }
150 }
114− if (viewWidth <= units.gu(45)) return units.gu(18);
151+ if (isNarrowView) return units.gu(18);
115− else if (viewWidth >= units.gu(70)) return units.gu(20);
152+ else if (isWideView) return units.gu(20);
116 else return units.gu(23);
153 else return units.gu(23);
117 case "carousel":
154 case "carousel":
118 case "horizontal-list":
155 case "horizontal-list":
@@ -152,12 +189,19 @@ Item {
152 type:real \brief Height of the card's header.
189 type:real \brief Height of the card's header.
153 */
190 */
154 readonly property int headerHeight: cardLoader.item ? cardLoader.item.headerHeight : 0
191 readonly property int headerHeight: cardLoader.item ? cardLoader.item.headerHeight : 0
192+
193+ readonly property size artShapeSize: {
194+ if (isAppLikeScopeAppCategory) {
195+ return Qt.size(units.gu(8), units.gu(7.5));
196+ } else {
155− property size artShapeSize: cardLoader.item ? cardLoader.item.artShapeSize : Qt.size(0, 0)
197+ return cardLoader.item ? cardLoader.item.artShapeSize : Qt.size(0, 0)
198+ }
199+ }
156
200
157 QtObject {
201 QtObject {
158 id: carouselTool
202 id: carouselTool
159
203
160− property real minimumTileWidth: {
204+ readonly property real minimumTileWidth: {
161 if (cardTool.viewWidth === undefined) return undefined;
205 if (cardTool.viewWidth === undefined) return undefined;
162 if (cardTool.viewWidth <= units.gu(40)) return units.gu(18);
206 if (cardTool.viewWidth <= units.gu(40)) return units.gu(18);
163 if (cardTool.viewWidth >= units.gu(128)) return units.gu(26);
207 if (cardTool.viewWidth >= units.gu(128)) return units.gu(26);
@@ -166,7 +210,7 @@ Item {
166
210
167 readonly property real pathItemCount: 4.8457 /// (848 / 175) reference values
211 readonly property real pathItemCount: 4.8457 /// (848 / 175) reference values
168
212
169− property real realPathItemCount: {
213+ readonly property real realPathItemCount: {
170 var scaledMinimumTileWidth = minimumTileWidth / cardTool.carouselSelectedItemScaleFactor;
214 var scaledMinimumTileWidth = minimumTileWidth / cardTool.carouselSelectedItemScaleFactor;
171 var tileWidth = Math.max(cardTool.viewWidth / pathItemCount, scaledMinimumTileWidth);
215 var tileWidth = Math.max(cardTool.viewWidth / pathItemCount, scaledMinimumTileWidth);
172 return Math.min(cardTool.viewWidth / tileWidth, pathItemCount);
216 return Math.min(cardTool.viewWidth / tileWidth, pathItemCount);
qml/Dash/GenericScopeView.qml+2−42
@@ -267,6 +267,8 @@ FocusScope {
267 template: model.renderer
267 template: model.renderer
268 components: model.components
268 components: model.components
269 viewWidth: parent.width
269 viewWidth: parent.width
270+ scopeId: scope ? scope.id : ""
271+ categoryId: baseItem.category
270 }
272 }
271
273
272 onExpandableChanged: {
274 onExpandableChanged: {
@@ -342,17 +344,6 @@ FocusScope {
342 baseItem.expand(shouldExpand, false /*animate*/);
344 baseItem.expand(shouldExpand, false /*animate*/);
343 }
345 }
344 updateRanges();
346 updateRanges();
345− clickScopeSizingHacks();
346− if (scope && (scope.id === "clickscope" || scope.id === "libertine-scope.ubuntu_libertine-scope")) {
347− if (isLibertineContainerCategory() || categoryId === "predefined" || categoryId === "local") {
348− cardTool.artShapeSize = Qt.binding(function() { return Qt.size(units.gu(8), units.gu(7.5)) });
349− cardTool.artShapeStyle = "icon";
350− } else {
351− // Should be ubuntu store icon
352− cardTool.artShapeStyle = "flat";
353− item.backgroundShapeStyle = "shadow";
354− }
355− }
356 item.cardTool = cardTool;
347 item.cardTool = cardTool;
357 }
348 }
358
349
@@ -361,36 +352,6 @@ FocusScope {
361 scopeView.enableHeightBehaviorOnNextCreation = item.enableHeightBehaviorOnNextCreation;
352 scopeView.enableHeightBehaviorOnNextCreation = item.enableHeightBehaviorOnNextCreation;
362 }
353 }
363 }
354 }
364− // FIXME: directly connecting to onUnitsChanged cause a compile error:
365− // Cannot assign to non-existent property "onUnitsChanged"
366− // Until the units object is reworked to properly do all we need, let's go through a intermediate property
367− property int pxpgu: units.gu(1);
368− onPxpguChanged: clickScopeSizingHacks();
369−
370− // Returns true if the current category pertains to a Libertine container
371− function isLibertineContainerCategory() {
372− return scope && scope.id === "libertine-scope.ubuntu_libertine-scope" && categoryId !== "hint";
373− }
374−
375− function clickScopeSizingHacks() {
376− if (scope &&
377− ((scope.id === "clickscope" && (categoryId === "predefined" || categoryId === "local")) ||
378− isLibertineContainerCategory())) {
379− // Yeah, hackish :/
380− if (scopeView.width > units.gu(45)) {
381− if (scopeView.width >= units.gu(70)) {
382− cardTool.cardWidth = units.gu(11);
383− item.minimumHorizontalSpacing = units.gu(5);
384− return;
385− } else {
386− cardTool.cardWidth = units.gu(10);
387− }
388− } else {
389− cardTool.cardWidth = units.gu(12);
390− }
391− item.minimumHorizontalSpacing = item.defaultMinimumHorizontalSpacing;
392− }
393− }
394
355
395 Connections {
356 Connections {
396 target: rendererLoader.item
357 target: rendererLoader.item
@@ -425,7 +386,6 @@ FocusScope {
425 target: scopeView
386 target: scopeView
426 onIsCurrentChanged: rendererLoader.updateRanges();
387 onIsCurrentChanged: rendererLoader.updateRanges();
427 onVisibleToParentChanged: rendererLoader.updateRanges();
388 onVisibleToParentChanged: rendererLoader.updateRanges();
428− onWidthChanged: rendererLoader.clickScopeSizingHacks();
429 }
389 }
430 Connections {
390 Connections {
431 target: holdingList
391 target: holdingList