on xenial help sign in
More visibility changes. Visibility test.
6048b25Nick Dedekind
Panel/IndicatorItem.qml+1−3
@@ -31,9 +31,7 @@ Item {
31 opacity: dimmed ? 0.4 : 1
31 opacity: dimmed ? 0.4 : 1
32 Behavior on opacity { StandardAnimation {} }
32 Behavior on opacity { StandardAnimation {} }
33
33
34− // only visible when non-empty
34+ width: loader.item != undefined && loader.status == Loader.Ready ? loader.item.width : 0
35− visible: indicatorVisible
36− width: indicatorVisible ? loader.item.width : 0
37
35
38 Loader {
36 Loader {
39 id: loader
37 id: loader
Panel/IndicatorRow.qml+5−1
@@ -56,7 +56,8 @@ Item {
56 Item {
56 Item {
57 id: itemWrapper
57 id: itemWrapper
58 height: indicatorRow.height
58 height: indicatorRow.height
59− width: childrenRect.width
59+ width: indicatorItem.width
60+ visible: indicatorItem.indicatorVisible
60
61
61 property int ownIndex: index
62 property int ownIndex: index
62 property alias highlighted: indicatorItem.highlighted
63 property alias highlighted: indicatorItem.highlighted
@@ -72,6 +73,9 @@ Item {
72 widgetSource: model.widgetSource
73 widgetSource: model.widgetSource
73 indicatorProperties : model.indicatorProperties
74 indicatorProperties : model.indicatorProperties
74
75
76+ Component.onCompleted: {
77+ indicatorsModel.setData(index, indicatorVisible, Indicators.IndicatorsModelRole.IsVisible);
78+ }
75 onIndicatorVisibleChanged: {
79 onIndicatorVisibleChanged: {
76 indicatorsModel.setData(index, indicatorVisible, Indicators.IndicatorsModelRole.IsVisible);
80 indicatorsModel.setData(index, indicatorVisible, Indicators.IndicatorsModelRole.IsVisible);
77 }
81 }
tests/mocks/Unity/Indicators/IndicatorsModel.qml+83−57
@@ -23,55 +23,54 @@ ListModel {
23
23
24 function load() {}
24 function load() {}
25
25
26− ListElement {
26+ // Need to do this dynamically.
27+ // Apparently ListModels dont order roles visually when using ListElement
28+ // which throws off the filter for non-visible indicators.
29+ Component.onCompleted: {
27− identifier: "indicator-fake1";
30+ append({ "identifier": "indicator-fake1",
28− priority: 0
31+ "priority": 0,
29− title: "Menu1";
32+ "title": "Menu1",
30− description: "";
33+ "description": "",
31− widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget1.qml";
34+ "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget1.qml",
32− pageSource: "qrc:/tests/indciators/qml/fake_menu_page1.qml";
35+ "pageSource": "qrc:/tests/indciators/qml/fake_menu_page1.qml",
33− indicatorProperties: "";
36+ "indicatorProperties": "",
34− isValid: "";
37+ "isVisible": true});
35− }
38+
36− ListElement {
37− identifier: "indicator-fake2";
39+ append({ "identifier": "indicator-fake2",
38− priority: 1
40+ "priority": 1,
39− title: "Menu2";
41+ "title": "Menu2",
40− description: "";
42+ "description": "",
41− widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget2.qml";
43+ "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget2.qml",
42− pageSource: "qrc:/tests/indciators/qml/fake_menu_page2.qml";
44+ "pageSource": "qrc:/tests/indciators/qml/fake_menu_page2.qml",
43− indicatorProperties: "";
45+ "indicatorProperties": "",
44− isValid: "";
46+ "isVisible": true});
45− }
47+
46− ListElement {
47− identifier: "indicator-fake3";
48+ append({ "identifier": "indicator-fake3",
48− priority: 2
49+ "priority": 2,
49− title: "Menu3";
50+ "title": "Menu3",
50− description: "";
51+ "description": "",
51− widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget3.qml";
52+ "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget3.qml",
52− pageSource: "qrc:/tests/indciators/qml/fake_menu_page3.qml";
53+ "pageSource": "qrc:/tests/indciators/qml/fake_menu_page3.qml",
53− indicatorProperties: "";
54+ "indicatorProperties": "",
54− isValid: "";
55+ "isVisible": true});
55− }
56+
56− ListElement {
57− identifier: "indicator-fake4";
57+ append({ "identifier": "indicator-fake4",
58− priority: 3
58+ "priority": 3,
59− title: "Menu4";
59+ "title": "Menu4",
60− description: "";
60+ "description": "",
61− widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget4.qml";
61+ "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget4.qml",
62− pageSource: "qrc:/tests/indciators/qml/fake_menu_page4.qml";
62+ "pageSource": "qrc:/tests/indciators/qml/fake_menu_page4.qml",
63− indicatorProperties: "";
63+ "indicatorProperties": "",
64− isValid: "";
64+ "isVisible": true});
65− }
65+
66− ListElement {
67− identifier: "indicator-fake5";
66+ append({ "identifier": "indicator-fake5",
68− priority: 4
67+ "priority": 4,
69− title: "Menu5";
68+ "title": "Menu5",
70− description: "";
69+ "description": "",
71− widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget5.qml";
70+ "widgetSource": "qrc:/tests/indciators/qml/fake_menu_widget5.qml",
72− pageSource: "qrc:/tests/indciators/qml/fake_menu_page5.qml";
71+ "pageSource": "qrc:/tests/indciators/qml/fake_menu_page5.qml",
73− indicatorProperties: "";
72+ "indicatorProperties": "",
74− isValid: "";
73+ "isVisible": true});
75 }
74 }
76
75
77 function data(row, role) {
76 function data(row, role) {
@@ -79,25 +78,52 @@ ListModel {
79 return get(row).identifier;
78 return get(row).identifier;
80 }
79 }
81 else if (role == Indicators.IndicatorsModelRole.Priority) {
80 else if (role == Indicators.IndicatorsModelRole.Priority) {
82− return get(row).priority
81+ return get(row).priority;
82+ }
83+ else if (role == Indicators.IndicatorsModelRole.Title) {
84+ return get(row).title;
85+ }
86+ else if (role == Indicators.IndicatorsModelRole.Description) {
87+ return get(row).description;
88+ }
89+ else if (role == Indicators.IndicatorsModelRole.WidgetSource) {
90+ return get(row).widgetSource;
91+ }
92+ else if (role == Indicators.IndicatorsModelRole.PageSource) {
93+ return get(row).pageSource;
94+ }
95+ else if (role == Indicators.IndicatorsModelRole.IndicatorProperties) {
96+ return get(row).indicatorProperties;
97+ }
98+ else if (role == Indicators.IndicatorsModelRole.IsVisible) {
99+ return get(row).isVisible;
100+ }
101+ }
102+
103+ function setData(row, value, role) {
104+ if (role == Indicators.IndicatorsModelRole.Identifier) {
105+ return set(row, {"identifier": value});
106+ }
107+ else if (role == Indicators.IndicatorsModelRole.Priority) {
108+ return set(row, {"priority": value});
83 }
109 }
84 else if (role == Indicators.IndicatorsModelRole.Title) {
110 else if (role == Indicators.IndicatorsModelRole.Title) {
85− return get(row).title
111+ return set(row, {"title": value});
86 }
112 }
87 else if (role == Indicators.IndicatorsModelRole.Description) {
113 else if (role == Indicators.IndicatorsModelRole.Description) {
88− return get(row).description
114+ return set(row, {"description": value});
89 }
115 }
90 else if (role == Indicators.IndicatorsModelRole.WidgetSource) {
116 else if (role == Indicators.IndicatorsModelRole.WidgetSource) {
91− return get(row).widgetSource
117+ return set(row, {"widgetSource": value});
92 }
118 }
93 else if (role == Indicators.IndicatorsModelRole.PageSource) {
119 else if (role == Indicators.IndicatorsModelRole.PageSource) {
94− return get(row).pageSource
120+ return set(row, {"pageSource": value});
95 }
121 }
96 else if (role == Indicators.IndicatorsModelRole.IndicatorProperties) {
122 else if (role == Indicators.IndicatorsModelRole.IndicatorProperties) {
97− return get(row).indicatorProperties
123+ return set(row, {"indicatorProperties": value});
98 }
124 }
99− else if (role == Indicators.IndicatorsModelRole.IsValid) {
125+ else if (role == Indicators.IndicatorsModelRole.IsVisible) {
100− return get(row).isValid
126+ return set(row, {"isVisible": value});
101 }
127 }
102 }
128 }
103
129
tests/mocks/Unity/Indicators/qml/fake_menu_widget2.qml+2
@@ -20,4 +20,6 @@ Rectangle {
20 width: 40
20 width: 40
21 height: 40
21 height: 40
22 color : "yellow"
22 color : "yellow"
23+
24+ enabled: false
23}
25}
tests/qmltests/CMakeLists.txt+1−1
@@ -65,7 +65,7 @@ add_qml_test(Launcher Launcher IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltes
65add_qml_test(Notifications Notifications IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_SOURCE_DIR}/tests/mocks)
65add_qml_test(Notifications Notifications IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS} ${CMAKE_SOURCE_DIR}/tests/mocks)
66add_qml_test(Panel IndicatorRow)
66add_qml_test(Panel IndicatorRow)
67add_qml_test(Panel Indicators IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
67add_qml_test(Panel Indicators IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
68−add_qml_test(Panel MenuContent)
68+add_qml_test(Panel MenuContent IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
69add_qml_test(Panel Panel IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
69add_qml_test(Panel Panel IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
70add_qml_test(Panel SearchIndicator)
70add_qml_test(Panel SearchIndicator)
71add_qml_test(SideStage SideStage IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS}
71add_qml_test(SideStage SideStage IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS}
tests/qmltests/Panel/tst_IndicatorItem.qml+2−2
@@ -53,9 +53,9 @@ Rectangle {
53 }
53 }
54
54
55 function test_empty() {
55 function test_empty() {
56− compare(indicatorItem.visible, false, "IndicatorItem should not be visible.");
56+ compare(indicatorItem.indicatorVisible, false, "IndicatorItem should not be visible.");
57 indicatorItem.widgetSource = "qrc:/tests/indciators/qml/fake_menu_widget1.qml";
57 indicatorItem.widgetSource = "qrc:/tests/indciators/qml/fake_menu_widget1.qml";
58− tryCompare(indicatorItem, "visible", true);
58+ tryCompare(indicatorItem, "indicatorVisible", true);
59 }
59 }
60 }
60 }
61}
61}
tests/qmltests/Panel/tst_Indicators.qml+30−11
@@ -100,26 +100,29 @@ Item {
100 {
100 {
101 // tests changing the lateral position of the revealer activates the correct indicator items.
101 // tests changing the lateral position of the revealer activates the correct indicator items.
102
102
103− var indicator_row = findChild(indicators, "indicatorRow")
103+ var indicatorRow = findChild(indicators, "indicatorRow")
104− var row_repeater = findChild(indicators, "rowRepeater")
104+ var rowRepeater = findChild(indicators, "rowRepeater")
105
105
106− for (var i = 0; i < row_repeater.count; i++) {
106+ for (var i = 0; i < rowRepeater.count; i++) {
107− var indicator_item = row_repeater.itemAt(i);
107+ var indicatorItem = rowRepeater.itemAt(i);
108
108
109+ if (!indicatorItem.visible)
110+ continue;
111+
109− var indicator_position = indicators.mapFromItem(indicator_item,
112+ var indicatorPosition = indicators.mapFromItem(indicatorItem,
110− indicator_item.width/2, indicator_item.height/2)
113+ indicatorItem.width/2, indicatorItem.height/2)
111
114
112 touchFlick(indicators,
115 touchFlick(indicators,
113− indicator_position.x, indicator_position.y,
116+ indicatorPosition.x, indicatorPosition.y,
114− indicator_position.x, indicators.openedHeight * 0.4,
117+ indicatorPosition.x, indicators.openedHeight * 0.4,
115 true /* beginTouch */, false /* endTouch */)
118 true /* beginTouch */, false /* endTouch */)
116
119
117− compare(indicator_row.currentItem, indicator_item,
120+ compare(indicatorRow.currentItem, indicatorItem,
118 "Incorrect item activated at position " + i);
121 "Incorrect item activated at position " + i);
119
122
120 touchFlick(indicators,
123 touchFlick(indicators,
121− indicator_position.x, indicators.openedHeight * 0.4,
124+ indicatorPosition.x, indicators.openedHeight * 0.4,
122− indicator_position.x, indicator_position.y,
125+ indicatorPosition.x, indicatorPosition.y,
123 false /* beginTouch */, true /* endTouch */)
126 false /* beginTouch */, true /* endTouch */)
124
127
125 // wait until fully closed
128 // wait until fully closed
@@ -158,5 +161,21 @@ Item {
158 compare(indicators.fullyOpened, true);
161 compare(indicators.fullyOpened, true);
159 }
162 }
160
163
164+ function test_row_visible_menuContent_visible_data() { return [
165+ {tag: "visible", index: 0, name: "indicator-fake1", visible: true },
166+ {tag: "invisible", index: 1, name: "indicator-fake2", visible: false }]
167+ }
168+
169+ function test_row_visible_menuContent_visible(data) {
170+ var indicatorTabs = findChild(indicators, "tabs");
171+ var rowRepeater = findChild(indicators, "rowRepeater");
172+
173+ var indicatorItem = rowRepeater.itemAt(data.index);
174+ tryCompareFunction(function() { return indicatorItem.width > 0}, true);
175+ tryCompare(indicatorItem, "visible", data.visible);
176+
177+ var indicatorTab = findChild(indicatorTabs, data.name)
178+ tryCompareFunction(function() { return indicatorTab !== undefined }, data.visible);
179+ }
161 }
180 }
162}
181}
tests/qmltests/Panel/tst_Panel.qml+3
@@ -159,6 +159,9 @@ Item {
159 var indicatorItem = get_indicator_item(i);
159 var indicatorItem = get_indicator_item(i);
160 verify(indicatorItem != undefined);
160 verify(indicatorItem != undefined);
161
161
162+ if (!indicatorItem.visible)
163+ continue;
164+
162 var indicatorItemCoord = get_indicator_item_position(i);
165 var indicatorItemCoord = get_indicator_item_position(i);
163
166
164 touchPress(panel,
167 touchPress(panel,