@@ -28,6 +28,22 @@ import QtQuick 2.0
30 id: cardTool
30 id: cardTool
33+ \brief Number of cards.
38+ \brief Width of the category view.
40+ property real viewWidth
43+ \brief Scaling factor of selected Carousel item.
45+ readonly property real carouselSelectedItemScaleFactor: 1.38 // XXX assuming 1.38 carousel scaling factor for cards
32 \brief Template supplied for the category.
48 \brief Template supplied for the category.
@@ -39,9 +55,15 @@ Item {
39 property var components
55 property var components
42− \brief Width of the view, based on which carousel width is calculated.
58+ \brief The category layout for this card tool.
44− property var viewWidth
60+ property string categoryLayout: {
61+ var layout = template["category-layout"];
63+ // carousel fallback mode to grid
64+ if (layout === "carousel" && count <= Math.ceil(carouselTool.realPathItemCount)) layout = "grid";
46 // FIXME: Saviq
68 // FIXME: Saviq
47 // Only way for the card below to actually be laid out completely.
69 // Only way for the card below to actually be laid out completely.
@@ -56,7 +78,7 @@ Item {
56 If undefined, should use implicit width of the actual card.
78 If undefined, should use implicit width of the actual card.
58 readonly property var cardWidth: {
80 readonly property var cardWidth: {
59− switch (template !== undefined && template["category-layout"]) {
81+ switch (categoryLayout) {
60 case "grid":
82 case "grid":
61 case "vertical-journal":
83 case "vertical-journal":
62 if (template["card-layout"] === "horizontal") return units.gu(38);
84 if (template["card-layout"] === "horizontal") return units.gu(38);
@@ -66,10 +88,7 @@ Item {
67 return units.gu(18.5);
89 return units.gu(18.5);
68 case "carousel":
90 case "carousel":
69− if (viewWidth === undefined) return undefined
91+ return carouselTool.minimumTileWidth;
70− if (viewWidth <= units.gu(40)) return units.gu(18)
71− if (viewWidth >= units.gu(128)) return units.gu(26)
72− return units.gu(18 + Math.round((viewWidth - units.gu(40))/ units.gu(11)))
73 case undefined:
92 case undefined:
74 case "organic-grid":
93 case "organic-grid":
75 case "journal":
94 case "journal":
@@ -84,7 +103,7 @@ Item {
84 If undefined, should use implicit height of the actual card.
103 If undefined, should use implicit height of the actual card.
86 readonly property var cardHeight: {
105 readonly property var cardHeight: {
87− switch (template !== undefined && template["category-layout"]) {
106+ switch (categoryLayout) {
88 case "journal":
107 case "journal":
89 if (template["card-size"] >= 12 && template["card-size"] <= 38) return units.gu(template["card-size"]);
108 if (template["card-size"] >= 12 && template["card-size"] <= 38) return units.gu(template["card-size"]);
90 return units.gu(18.5);
109 return units.gu(18.5);
@@ -123,6 +142,25 @@ Item {
123 return (template["card-layout"] === "horizontal") ? Text.AlignLeft : Text.AlignHCenter;
142 return (template["card-layout"] === "horizontal") ? Text.AlignLeft : Text.AlignHCenter;
148+ property real minimumTileWidth: {
149+ if (cardTool.viewWidth === undefined) return undefined;
150+ if (cardTool.viewWidth <= units.gu(40)) return units.gu(18);
151+ if (cardTool.viewWidth >= units.gu(128)) return units.gu(26);
152+ return units.gu(18 + Math.round((cardTool.viewWidth - units.gu(40)) / units.gu(11)));
155+ readonly property real pathItemCount: 4.8457 /// (848 / 175) reference values
157+ property real realPathItemCount: {
158+ var scaledMinimumTileWidth = minimumTileWidth / cardTool.carouselSelectedItemScaleFactor;
159+ var tileWidth = Math.max(cardTool.viewWidth / pathItemCount, scaledMinimumTileWidth);
160+ return Math.min(cardTool.viewWidth / tileWidth, pathItemCount);
128 objectName: "card"
166 objectName: "card"