on xenial help sign in
Make CardVerticalJournal a proper DashRenderer

Also remove property int margins: 0 property real verticalSpacing: 0 property var currentItem from DashRenderer since we don't need them at all

commitbc529822a5c65e83fe57d946d7b657de19450123 authorAlbert Astals <albert.astals@canonical.com> dateThu 5 Jun 2014, 15:31 (12 years ago) parent11def82
5 files changed+57−48
qml/Components/ResponsiveVerticalJournal.qml+7−7 qml/Dash/CardCarousel.qml−2 qml/Dash/CardFilterGrid.qml+1−4 qml/Dash/CardVerticalJournal.qml+49−28 qml/Dash/DashRenderer.qml−7
qml/Components/ResponsiveVerticalJournal.qml+7−7
@@ -22,7 +22,7 @@ import Dash 0.1
2222// A VerticalJournal, which allows setting max number of columns. Based on
2323// defined column width, delegates are spread in the horizontal space.
2424Item {
25− property int minimumColumnSpacing: units.gu(0.5)
25+ property int minimumColumnSpacing: units.gu(1)
2626 property int maximumNumberOfColumns: 2
2727
2828 property alias columnWidth: verticalJournalView.columnWidth
@@ -31,16 +31,17 @@ Item {
3131 property alias delegate: verticalJournalView.delegate
3232 property alias displayMarginBeginning: verticalJournalView.displayMarginBeginning
3333 property alias displayMarginEnd: verticalJournalView.displayMarginEnd
34+ implicitHeight: verticalJournalView.implicitHeight
3435
3536 VerticalJournal {
3637 id: verticalJournalView
3738 objectName: "responsiveVerticalJournalView"
3839 anchors {
3940 fill: parent
40− leftMargin: columnSpacing/2
41− rightMargin: columnSpacing/2
42− topMargin: rowSpacing/2
43− bottomMargin: rowSpacing/2
41+ leftMargin: columnSpacing / 2
42+ rightMargin: columnSpacing / 2
43+ topMargin: rowSpacing / 2
44+ bottomMargin: rowSpacing / 2
4445 }
4546 clip: parent.height != implicitHeight
4647
@@ -59,8 +60,7 @@ Item {
5960 return units.gu(spacingGU)
6061 }
6162
62− property int expectedColumns: Math.min(
63− columnsForSpacing(minimumColumnSpacing), maximumNumberOfColumns)
63+ property int expectedColumns: Math.min(columnsForSpacing(minimumColumnSpacing), maximumNumberOfColumns)
6464 columnSpacing: spacingForColumns(expectedColumns)
6565 }
6666}
qml/Dash/CardCarousel.qml−2
@@ -27,9 +27,7 @@ DashRenderer {
2727 property alias selectedItemScaleFactor: carousel.selectedItemScaleFactor
2828 property alias tileAspectRatio: carousel.tileAspectRatio
2929
30− currentItem: carousel.currentItem
3130 height: carousel.implicitHeight + units.gu(6)
32− verticalSpacing: units.gu(3)
3331
3432 Carousel {
3533 id: carousel
qml/Dash/CardFilterGrid.qml+1−4
@@ -22,11 +22,8 @@ DashRenderer {
2222
2323 expandable: filterGrid.expandable
2424 collapsedHeight: filterGrid.collapsedHeight
25− margins: filterGrid.margins
2625 uncollapsedHeight: filterGrid.uncollapsedHeight
2726 originY: filterGrid.originY
28− verticalSpacing: units.gu(1)
29− currentItem: filterGrid.currentItem
3027 height: filterGrid.height
3128 filtered: filterGrid.filtered
3229
@@ -40,7 +37,7 @@ DashRenderer {
4037 minimumHorizontalSpacing: units.gu(1)
4138 delegateWidth: cardTool.cardWidth
4239 delegateHeight: cardTool.cardHeight
43− verticalSpacing: genericFilterGrid.verticalSpacing
40+ verticalSpacing: units.gu(1)
4441 model: genericFilterGrid.model
4542 collapsedRowCount: Math.min(2, cardTool && cardTool.template && cardTool.template["collapsed-rows"] || 2)
4643 displayMarginBeginning: genericFilterGrid.displayMarginBeginning
qml/Dash/CardVerticalJournal.qml+49−28
@@ -19,42 +19,63 @@ import Ubuntu.Components 0.1
1919import "../Components"
2020
2121DashRenderer {
22− id: genericVerticalJournal
22+ id: root
2323
24− property alias minimumColumnSpacing: cardVerticalJournal.minimumColumnSpacing
25− property alias maximumNumberOfColumns: cardVerticalJournal.maximumNumberOfColumns
26− property alias columnWidth: cardVerticalJournal.columnWidth
27− property alias rowSpacing: cardVerticalJournal.rowSpacing
24+ readonly property double collapseLimit: units.gu(35)
2825
29− anchors.fill: parent
26+ uncollapsedHeight: cardVerticalJournal.implicitHeight
27+ collapsedHeight: Math.min(collapseLimit, cardVerticalJournal.implicitHeight)
28+ expandable: uncollapsedHeight > collapseLimit
29+
30+ // This minHeight is used as bootstrapper for the height. Vertical Journal
31+ // is special by the fact that it doesn't know how to calculate its implicit height unless we give it
32+ // enough height that it can start creating it's children so we make sure it has enough height for that
33+ // in case the model is non empty
34+ readonly property double minHeight: root.model.count > 1 ? cardVerticalJournal.rowSpacing + 1 : 0
35+ height: filtered ? Math.max(collapsedHeight, minHeight) : uncollapsedHeight
36+
37+ Behavior on height {
38+ id: heightBehaviour
39+ animation: UbuntuNumberAnimation { }
40+ }
41+
42+ function setFilter(filter, animate) {
43+ heightBehaviour.enabled = animate;
44+ filtered = filter;
45+ }
3046
3147 ResponsiveVerticalJournal {
3248 id: cardVerticalJournal
49+
50+ model: root.model
51+
3352 anchors.fill: parent
34− maximumNumberOfColumns: 2
35− minimumColumnSpacing: units.gu(1)
36− rowSpacing: units.gu(1)
37− model: genericVerticalJournal.model
38−
39− columnWidth: {
40− if (genericVerticalJournal.template !== undefined) {
41− switch (genericVerticalJournal.template['card-size']) {
42− case "small": return units.gu(12);
43− case "large": return units.gu(38);
44− }
45− }
46− return units.gu(18.5);
47− }
53+ rowSpacing: minimumColumnSpacing
54+ columnWidth: cardTool.cardWidth
4855
49− delegate: Card {
50− id: card
51− objectName: "delegate" + index
52− cardData: model
53− template: genericVerticalJournal.template
54− components: genericVerticalJournal.components
56+ displayMarginBeginning: root.displayMarginBeginning
57+ displayMarginEnd: root.displayMarginEnd
5558
56− //onClicked: cardVerticalJournal.clicked(index, tile.y)
57− //onPressAndHold: cardVerticalJournal.pressAndHold(index, tile.y)
59+ delegate: Loader {
60+ id: loader
61+ sourceComponent: cardTool.cardComponent
62+ width: cardTool.cardWidth
63+ anchors.horizontalCenter: parent.horizontalCenter
64+ onLoaded: {
65+ item.objectName = "delegate" + index;
66+ item.width = Qt.binding(function() { return cardTool.cardWidth; });
67+ item.height = Qt.binding(function() { return cardTool.cardHeight; });
68+ item.fixedArtShapeSize = Qt.binding(function() { return cardTool.artShapeSize; });
69+ item.cardData = Qt.binding(function() { return model; });
70+ item.template = Qt.binding(function() { return cardTool.template; });
71+ item.components = Qt.binding(function() { return cardTool.components; });
72+ item.headerAlignment = Qt.binding(function() { return cardTool.headerAlignment; });
73+ }
74+ Connections {
75+ target: loader.item
76+ onClicked: root.clicked(index, result)
77+ onPressAndHold: root.pressAndHold(index)
78+ }
5879 }
5980 }
6081}
qml/Dash/DashRenderer.qml−7
@@ -25,8 +25,6 @@ Item {
2525
2626 property int collapsedHeight: height
2727
28− property int margins: 0
29−
3028 property int uncollapsedHeight: height
3129
3230 property int displayMarginBeginning: 0
@@ -35,11 +33,6 @@ Item {
3533
3634 property real originY: 0
3735
38− property real verticalSpacing: 0
39−
40− // The current item of the renderer
41− property var currentItem
42−
4336 // The model to renderer
4437 property var model
4538