on xenial help sign in
merged with trunk
commit5cf367a334b9a99488a21cd74e89b72b5de8b1a6 authorNick Dedekind <nicholas.dedekind@gmail.com> dateThu 18 Jul 2013, 16:27 (13 years ago) parentb644619212a1db
44 files changed+334−933
Applications/applications.js+2−2 Components/ApplicationScreenshot.qml+1−1 Components/Carousel.qml+38−1 Components/FilterGrid.qml+2−2 Components/ListItems/Header.qml+1−1 Components/PageHeader.qml+1−1 Components/Tile.qml+1−1 Dash/Apps/RunningApplicationTile.qml+1−1 Dash/DashBar.qml+1−1 Dash/DashPreview.qml+1−1 Dash/Generic/GenericCarousel.qml+58 Dash/Generic/GenericFilterGrid.qml+59 Panel/Menus/IndicatorMenuWindow.qml → Dash/Generic/GenericFilterGridPotrait.qml+9−14 Dash/GenericScopeView.qml+46−41 Dash/Music/AlbumTile.qml+2−2 Dash/Video/VideoPreview.qml+3−3 Notifications/Notification.qml+4−4 Panel/IndicatorItem.qml+1−1 Panel/IndicatorRow.qml+1−2 Panel/Indicators.qml+18−43 Panel/Indicators/DatetimeIndicatorPage.qml+2−2 Panel/Indicators/DatetimeIndicatorWidget.qml+1−1 Panel/Indicators/DefaultIndicatorWidget.qml+1−1 Panel/MenuContent.qml+9−68 Panel/Menus/Overview.qml−70 Panel/Menus/Overview/FlightModeWidget.qml−60 Panel/Menus/Overview/OverviewGrid.qml−135 Panel/Menus/Overview/VolumeWidget.qml−88 Panel/Menus/Overview/graphics/plane_icon@18.png Panel/Menus/Overview/graphics/sound_off_icon@18.png Panel/Menus/Overview/graphics/sound_on_icon@18.png Shell.qml+2 debian/changelog+19 plugins/Unity/Launcher/backend/launcherbackend.cpp+3−3 tests/mocks/Ubuntu/Application/ApplicationManager.cpp+2−2 tests/mocks/Unity/Launcher/MockLauncherModel.cpp+1−1 tests/plugins/Unity/previewbindingstest.cpp−2 tests/qmltests/CMakeLists.txt−2 tests/qmltests/Panel/Menus/tst_IndicatorMenuWindow.qml−68 tests/qmltests/Panel/tst_IndicatorRow.qml−14 tests/qmltests/Panel/tst_Indicators.qml+1−39 tests/qmltests/Panel/tst_MenuContent.qml+10−80 tests/qmltests/Panel/tst_Overview.qml−142 tests/qmltests/Panel/tst_Panel.qml+33−33
Applications/applications.js+2−2
@@ -70,10 +70,10 @@ var __availableApplications = {
7070 'exec': '/usr/bin/qmlscene /usr/share/notes-app/NotesApp.qml',
7171 'stage': SideStage
7272 },
73− '/usr/share/applications/ubuntu-calendar-app.desktop': {
73+ '/usr/share/applications/calendar-app.desktop': {
7474 'name': i18n.tr("Calendar"),
7575 'icon': 'calendar',
76− 'exec': '/usr/bin/qmlscene /usr/share/ubuntu-calendar-app/calendar.qml',
76+ 'exec': '/usr/bin/qmlscene /usr/share/calendar-app/calendar.qml',
7777 'stage': SideStage
7878 },
7979 '/usr/share/applications/mediaplayer-app.desktop': {
Components/ApplicationScreenshot.qml+1−1
@@ -46,7 +46,7 @@ Item {
4646 Rectangle {
4747 id: background
4848 anchors.fill: parent
49− color: "white"
49+ color: "white" // FIXME should use normal background color of Suru theme
5050 visible: applicationScreenshot.withBackground
5151 }
5252
Components/Carousel.qml+38−1
@@ -52,6 +52,12 @@ Item {
5252 /// @param itemY is y of the clicked delegate
5353 signal clicked(int index, var delegateItem, real itemY)
5454
55+ /// Emitted when the user pressed and held on an item
56+ /// @param index is the index of the held item
57+ /// @param delegateItem is the held component/delegate itself
58+ /// @param itemY is y of the held delegate
59+ signal pressAndHold(int index, var delegateItem, real itemY)
60+
5561 implicitHeight: listView.tileHeight * selectedItemScaleFactor
5662
5763 /* Basic idea behind the carousel effect is to move the items of the delegates (compacting /stuffing them).
@@ -159,6 +165,30 @@ Item {
159165 newContentXAnimation.start()
160166 }
161167
168+ function itemPressAndHold(index, delegateItem) {
169+ var x = CarouselJS.getXFromContinuousIndex(index,
170+ realWidth,
171+ realContentWidth,
172+ tileWidth,
173+ gapToMiddlePhase,
174+ gapToEndPhase,
175+ carousel.drawBuffer);
176+
177+ if (Math.abs(x - contentX) < 1) {
178+ /* We're pressAndHold the selected item and
179+ we're in the neighbourhood of radius 1 pixel from it.
180+ Let's emit the pressAndHold signal. */
181+ carousel.pressAndHold(index, delegateItem, delegateItem.y);
182+ return;
183+ }
184+
185+ stepAnimation.stop();
186+ newContentXAnimation.stop();
187+
188+ newContentX = x;
189+ newContentXAnimation.start();
190+ }
191+
162192 onMovementStarted: {
163193 stepAnimation.stop()
164194 newContentXAnimation.stop()
@@ -279,7 +309,14 @@ Item {
279309
280310 anchors.fill: parent
281311
282− onClicked: listView.itemClicked(index, item)
312+ onClicked: {
313+ listView.itemClicked(index, item)
314+ }
315+
316+ onPressAndHold: {
317+ listView.itemPressAndHold(index, item)
318+ }
319+
283320 }
284321 }
285322 }
Components/FilterGrid.qml+2−2
@@ -99,7 +99,7 @@ Item {
9999
100100 UbuntuShape {
101101 anchors.fill: parent
102− color: "#33ffffff"
102+ color: "#33ffffff" // FIXME no palette
103103 radius: "small"
104104 }
105105
@@ -123,7 +123,7 @@ Item {
123123 }
124124 text: (filter) ? "+ View all (" + model.count + ")" : "- Show fewer"
125125 fontSize: "small"
126− color: "#f3f3e7"
126+ color: Theme.palette.selected.backgroundText
127127 opacity: 0.6
128128 style: Text.Raised
129129 styleColor: "black"
Components/ListItems/Header.qml+1−1
@@ -45,7 +45,7 @@ Item {
4545 verticalCenter: parent.verticalCenter
4646 }
4747
48− color: "#f3f3e7" //at 60%
48+ color: Theme.palette.selected.backgroundText //at 60%
4949 opacity: 0.6
5050 font.family: "Ubuntu"
5151 fontSize: "medium"
Components/PageHeader.qml+1−1
@@ -90,7 +90,7 @@ Item {
9090 verticalCenter: parent.verticalCenter
9191 }
9292
93− color: "#f3f3e7"
93+ color: Theme.palette.selected.backgroundText
9494 opacity: 0.8
9595 font.family: "Ubuntu"
9696 font.weight: Font.Light
Components/Tile.qml+1−1
@@ -75,7 +75,7 @@ AbstractButton {
7575 rightMargin: units.gu(1)
7676 }
7777
78− color: "#f3f3e7"
78+ color: Theme.palette.selected.backgroundText
7979 opacity: 0.9
8080 style: Text.Raised
8181 styleColor: "black"
Dash/Apps/RunningApplicationTile.qml+1−1
@@ -113,7 +113,7 @@ AbstractButton {
113113 }
114114 text: (application) ? application.name : ""
115115
116− color: "#f3f3e7"
116+ color: Theme.palette.selected.backgroundText
117117 opacity: 0.9
118118 style: Text.Raised
119119 styleColor: "black"
Dash/DashBar.qml+1−1
@@ -117,7 +117,7 @@ Item {
117117
118118 Rectangle {
119119 id: highlightLine
120− color: "#dd4814"
120+ color: Theme.palette.selected.foreground
121121 height: parent.height
122122 anchors.bottom: parent.bottom
123123 z: 1
Dash/DashPreview.qml+1−1
@@ -92,7 +92,7 @@ Rectangle {
9292 elide: Text.ElideRight
9393 fontSize: "x-large"
9494 font.weight: Font.Light
95− color: "#f3f3e7"
95+ color: Theme.palette.selected.backgroundText
9696 opacity: 0.9
9797 text: root.title
9898 style: Text.Raised
Dash/Generic/GenericCarousel.qmlnew file+58
@@ -0,0 +1,58 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import Ubuntu.Components 0.1
19+import "../../Components"
20+import "../../Components/IconUtil.js" as IconUtil
21+
22+Carousel {
23+ id: genericCarousel
24+
25+ tileAspectRatio: 198 / 288
26+ minimumTileWidth: units.gu(13)
27+ itemComponent: carouselDelegateGeneric
28+ selectedItemScaleFactor: 1.14
29+ cacheBuffer: 1404 // 18px * 13gu * 6
30+ height: implicitHeight + units.gu(6)
31+
32+ Component {
33+ id: carouselDelegateGeneric
34+
35+ BaseCarouselDelegate {
36+ id: item
37+
38+ UbuntuShape {
39+ anchors.fill: parent
40+ radius: "medium"
41+ borderSource: ""
42+ image: Image {
43+ asynchronous: true
44+ sourceSize { width: item.width; height: item.height }
45+ source: model ? IconUtil.from_gicon(model.icon) : ""
46+ }
47+ }
48+
49+ BorderImage {
50+ anchors.centerIn: parent
51+ opacity: 0.6
52+ source: "../../Components/graphics/non-selected.sci"
53+ width: parent.width + units.gu(1.5)
54+ height: parent.height + units.gu(1.5)
55+ }
56+ }
57+ }
58+}
Dash/Generic/GenericFilterGrid.qmlnew file+59
@@ -0,0 +1,59 @@
1+/*
2+ * Copyright (C) 2013 Canonical, Ltd.
3+ *
4+ * This program is free software; you can redistribute it and/or modify
5+ * it under the terms of the GNU General Public License as published by
6+ * the Free Software Foundation; version 3.
7+ *
8+ * This program is distributed in the hope that it will be useful,
9+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
10+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11+ * GNU General Public License for more details.
12+ *
13+ * You should have received a copy of the GNU General Public License
14+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
15+ */
16+
17+import QtQuick 2.0
18+import "../../Components"
19+import "../../Components/IconUtil.js" as IconUtil
20+
21+FilterGrid {
22+ id: filtergrid
23+
24+ filter: false
25+ minimumHorizontalSpacing: units.gu(0.5)
26+ delegateWidth: units.gu(11)
27+ delegateHeight: units.gu(9.5)
28+ verticalSpacing: units.gu(2)
29+
30+ property int iconWidth: units.gu(8)
31+ property int iconHeight: units.gu(7.5)
32+
33+ signal clicked(int index, var delegateItem, real itemY)
34+ signal pressAndHold(int index, var delegateItem, real itemY)
35+
36+ delegate: Tile {
37+ id: tile
38+ objectName: "delegate" + index
39+ width: filtergrid.cellWidth
40+ height: filtergrid.cellHeight
41+ text: model.title
42+ imageWidth: filtergrid.iconWidth
43+ imageHeight: filtergrid.iconHeight
44+
45+ source: IconUtil.from_gicon(model.icon)
46+
47+ fillMode: Image.PreserveAspectCrop
48+
49+ onClicked: {
50+ var data = { model: model }
51+ filtergrid.clicked(index, data, tile.y)
52+ }
53+
54+ onPressAndHold: {
55+ var data = { model: model }
56+ filtergrid.pressAndHold(index, data, tile.y)
57+ }
58+ }
59+}
Panel/Menus/IndicatorMenuWindow.qml → Dash/Generic/GenericFilterGridPotrait.qmlrenamed+9−14
@@ -15,21 +15,16 @@
1515 */
1616
1717import QtQuick 2.0
18+import "../../Components"
1819
19−Item {
20− id: menuWindow
20+GenericFilterGrid {
21+ id: filtergrid
2122
22− property bool shown: false
23− property int contentHeight: height
24− property string headingText: name
25− property string name
23+ minimumHorizontalSpacing: units.gu(0.5)
24+ delegateWidth: units.gu(11)
25+ delegateHeight: units.gu(18)
26+ verticalSpacing: units.gu(2)
2627
27− enabled: shown
28− opacity: shown ? 1.0 : 0.0
29− Behavior on opacity { NumberAnimation {duration: shown ? 300 : 150 } }
30−
31− // don't pass any events under this screen
32− MouseArea {
33− anchors.fill: parent
34− }
28+ iconWidth: (width / columns) * 0.8
29+ iconHeight: iconWidth * 16 / 11
3530}
Dash/GenericScopeView.qml+46−41
@@ -56,53 +56,45 @@ ScopeView {
5656 delegate: ListItems.Base {
5757 highlightWhenPressed: false
5858
59− FilterGrid {
60− id: filtergrid
61− model: results
62−
59+ Loader {
60+ id: rendererLoader
6361 anchors {
6462 top: parent.top
6563 left: parent.left
6664 right: parent.right
6765 }
6866
69− filter: false
70− minimumHorizontalSpacing: units.gu(0.5)
71− delegateWidth: units.gu(11)
72− delegateHeight: units.gu(18)
73− verticalSpacing: units.gu(2)
74−
75− delegate: Tile {
76− width: filtergrid.cellWidth
77− height: filtergrid.cellHeight
78− text: title
79− imageWidth: units.gu(11)
80− imageHeight: units.gu(16)
81−
82− source: IconUtil.from_gicon(icon)
83−
84− MouseArea {
85− anchors {
86− fill: parent
87− }
88− onClicked: {
89− mouse.accepted = true
90− effect.positionPx = mapToItem(categoryView, 0, 0).y
91− scopeView.scope.activate(uri, icon,
92− category, 0,
93− mimetype, title,
94− comment, dndUri,
95− metadata)
96− }
97− onPressAndHold: {
98− mouse.accepted = true
99− effect.positionPx = mapToItem(categoryView, 0, 0).y
100− scopeView.scope.preview(uri, icon,
101− category, 0,
102− mimetype, title,
103− comment, dndUri,
104− metadata)
105− }
67+ source: getRenderer(model.renderer, model.contentType)
68+
69+ onLoaded: {
70+ item.model = results
71+ }
72+
73+ Connections {
74+ target: rendererLoader.item
75+ onClicked: {
76+ effect.positionPx = mapToItem(categoryView, 0, itemY).y
77+ scopeView.scope.activate(delegateItem.model.uri,
78+ delegateItem.model.icon,
79+ delegateItem.model.category,
80+ 0,
81+ delegateItem.model.mimetype,
82+ delegateItem.model.title,
83+ delegateItem.model.comment,
84+ delegateItem.model.dndUri,
85+ delegateItem.model.metadata)
86+ }
87+ onPressAndHold: {
88+ effect.positionPx = mapToItem(categoryView, 0, itemY).y
89+ scopeView.scope.preview( delegateItem.model.uri,
90+ delegateItem.model.icon,
91+ delegateItem.model.category,
92+ 0,
93+ delegateItem.model.mimetype,
94+ delegateItem.model.title,
95+ delegateItem.model.comment,
96+ delegateItem.model.dndUri,
97+ delegateItem.model.metadata)
10698 }
10799 }
108100 }
@@ -122,6 +114,19 @@ ScopeView {
122114 }
123115 }
124116
117+ function getRenderer(rendererId, contentType) {
118+ switch (rendererId) {
119+ case "grid": {
120+ switch (contentType) {
121+ case "video": return "Generic/GenericFilterGridPotrait.qml";
122+ default: return "Generic/GenericFilterGrid.qml";
123+ }
124+ }
125+ case "carousel": return "Generic/GenericCarousel.qml";
126+ default: return "Generic/GenericFilterGrid.qml";
127+ }
128+ }
129+
125130 OpenEffect {
126131 id: effect
127132 anchors {
Dash/Music/AlbumTile.qml+2−2
@@ -69,7 +69,7 @@ AbstractButton {
6969 rightMargin: units.gu(1)
7070 }
7171
72− color: "#f3f3e7"
72+ color: Theme.palette.selected.backgroundText
7373 opacity: 0.9
7474 style: Text.Raised
7575 styleColor: "black"
@@ -97,7 +97,7 @@ AbstractButton {
9797 rightMargin: units.gu(1)
9898 }
9999
100− color: "#f3f3e7"
100+ color: Theme.palette.selected.backgroundText
101101 opacity: 0.9
102102 style: Text.Raised
103103 styleColor: "black"
Dash/Video/VideoPreview.qml+3−3
@@ -48,7 +48,7 @@ DashPreview {
4848 property int buttonWidth: Math.min(units.gu(22), (width - spacing) / 2)
4949 Button {
5050 width: parent.buttonWidth
51− color: "#dd4814"
51+ color: Theme.palette.selected.foreground
5252 text: nfo.ready && nfo.video.buyPrice != "" ? "Buy for " + nfo.video.buyPrice : ""
5353 visible: text != ""
5454 iconSource: "graphics/icon_button_amazon.png"
@@ -56,7 +56,7 @@ DashPreview {
5656 }
5757 Button {
5858 width: parent.buttonWidth
59− color: "#dd4814"
59+ color: Theme.palette.selected.foreground
6060 text: nfo.ready && nfo.video.buyPrice != "" ? "Rent for " + nfo.video.rentPrice : ""
6161 visible: text != ""
6262 iconSource: "graphics/icon_button_u1.png"
@@ -73,7 +73,7 @@ DashPreview {
7373
7474 Label {
7575 text: nfo.ready ? nfo.video.plot : ""
76− color: "#f3f3e7"
76+ color: Theme.palette.selected.backgroundText
7777 opacity: .6
7878 fontSize: "medium"
7979 width: parent.width
Notifications/Notification.qml+4−4
@@ -117,7 +117,7 @@ UbuntuShape {
117117 }
118118 fontSize: "medium"
119119 font.bold: true
120− color: "#f3f3e7"
120+ color: Theme.palette.selected.backgroundText
121121 elide: Text.ElideRight
122122 }
123123
@@ -131,7 +131,7 @@ UbuntuShape {
131131 }
132132 visible: body != ""
133133 fontSize: "small"
134− color: "#f3f3e7"
134+ color: Theme.palette.selected.backgroundText
135135 opacity: 0.6
136136 wrapMode: Text.WordWrap
137137 maximumLineCount: 10
@@ -194,7 +194,7 @@ UbuntuShape {
194194 top: parent.top
195195 bottom: parent.bottom
196196 }
197− color: "#d85317"
197+ color: "#d85317" // FIXME ??
198198 visible: width > 0
199199 onClicked: notification.notification.invokeAction(actionRepeater.itemAt(0).actionId)
200200 }
@@ -241,7 +241,7 @@ UbuntuShape {
241241
242242 text: loader.actionLabel
243243 height: units.gu(4)
244− color: "#cdcdcb"
244+ color: "#cdcdcb" // FIXME ?? which color?
245245 onClicked: notification.notification.invokeAction(loader.actionId)
246246 }
247247 }
Panel/IndicatorItem.qml+1−1
@@ -47,7 +47,7 @@ Item {
4747 }
4848
4949 Rectangle {
50− color: "#dd4814"
50+ color: Theme.palette.selected.foreground
5151 objectName: "highlight"
5252 height: units.dp(2)
5353 width: parent.width
Panel/IndicatorRow.qml+1−2
@@ -24,7 +24,6 @@ Item {
2424 readonly property int currentItemIndex: currentItem ? currentItem.ownIndex : -1
2525 property alias row: row
2626 property QtObject indicatorsModel: null
27− property bool overviewActive: false // "state of the menu"
2827
2928 Behavior on y {NumberAnimation {duration: 300; easing.type: Easing.OutCubic} }
3029
@@ -76,7 +75,7 @@ Item {
7675 height: indicatorRow.height
7776 y: {
7877 //FIXME: all indicators will be initial for now.
79− if (!highlighted && !overviewActive && (indicatorRow.state == "locked" || indicatorRow.state == "commit")) {
78+ if (!highlighted && (indicatorRow.state == "locked" || indicatorRow.state == "commit")) {
8079 return -indicatorRow.height
8180 } else {
8281 return 0
Panel/Indicators.qml+18−43
@@ -56,36 +56,22 @@ Showable {
5656
5757 onHeightChanged: {
5858 // need to use handle.get_height(). As the handle height depends on indicators.height changes (but this is called first!)
59− var contentProgress = indicators.height - handle.get_height()
59+ var contentProgress = indicators.height - handle.get_height();
6060 if (!showAnimation.running && !hideAnimation.running) {
6161 if (contentProgress <= hintValue && indicators.state == "reveal") {
62− indicators.state = "hint"
63− menuContent.hideAll()
62+ indicators.state = "hint";
6463 } else if (contentProgress > hintValue && contentProgress < lockThreshold) {
65− menuContent.showMenu()
66− indicators.state = "reveal"
64+ indicators.state = "reveal";
6765 } else if (contentProgress >= lockThreshold && lockThreshold > 0) {
68− // If we've shown the overview and are closing the view with progress changes (revealer handle),
69− // we dont want to switch to a indicator menu until we hit reveal state.
70− if (menuContent.overviewActive) {
71− menuContent.showOverview()
72− } else {
73− menuContent.showMenu()
74− }
75− indicators.state = "locked"
66+ indicators.state = "locked";
7667 }
7768 }
7869
7970 if (contentProgress == 0) {
80− menuContent.releaseContent()
71+ menuContent.releaseContent();
8172 }
8273 }
8374
84− function openOverview() {
85− indicatorRow.currentItem = null
86− menuContent.showOverview()
87− }
88−
8975 function calculateCurrentItem(xValue, useBuffer) {
9076 var rowCoordinates
9177 var itemCoordinates
@@ -93,7 +79,7 @@ Showable {
9379 var distanceFromRightEdge
9480 var bufferExceeded = false
9581
96− if (indicators.state == "commit" || indicators.state == "locked" || showAnimation.running || hideAnimation.running) return
82+ if (indicators.state == "commit" || indicators.state == "locked" || showAnimation.running || hideAnimation.running) return;
9783
9884 /*
9985 If user drags the indicator handle bar down a distance hintValue or less, this is 0.
@@ -102,14 +88,14 @@ Showable {
10288 */
10389 var verticalProgress =
10490 MathLocal.clamp((indicators.height - handle.height - hintValue) /
105− (lockThreshold - hintValue), 0, 1)
91+ (lockThreshold - hintValue), 0, 1);
10692
10793 /*
10894 Percentage of an indicator icon's width the user's press can stray horizontally from the
10995 focused icon before we change focus to another icon. E.g. a value of 0.5 means you must
11096 go right a distance of half an icon's width before focus moves to the icon on the right
11197 */
112− var maxBufferThreshold = 0.5
98+ var maxBufferThreshold = 0.5;
11399
114100 /*
115101 To help users find the indicator of their choice while opening the indicators, we add logic to add a
@@ -126,12 +112,12 @@ Showable {
126112 itemCoordinates = indicatorRow.row.mapToItem(currentItem, rowCoordinates.x, 0);
127113 distanceFromRightEdge = (currentItem.width - itemCoordinates.x) / (currentItem.width)
128114 if (Math.abs(currentItem.ownIndex - indicatorRow.currentItemIndex) > 1) {
129− bufferExceeded = true
115+ bufferExceeded = true;
130116 } else {
131117 if (indicatorRow.currentItemIndex < currentItem.ownIndex && distanceFromRightEdge < (1 - effectiveBufferThreshold)) {
132− bufferExceeded = true
118+ bufferExceeded = true;
133119 } else if (indicatorRow.currentItemIndex > currentItem.ownIndex && distanceFromRightEdge > effectiveBufferThreshold) {
134− bufferExceeded = true
120+ bufferExceeded = true;
135121 }
136122 }
137123 if ((!useBuffer || (useBuffer && bufferExceeded)) || indicatorRow.currentItem < 0 || indicatorRow.currentItem == null) {
@@ -172,8 +158,7 @@ Showable {
172158 bottom: parent.bottom
173159 }
174160 indicatorsModel: indicatorsModel
175− animate: false
176− clip: indicators.partiallyOpened
161+ clip: !indicators.fullyOpened
177162
178163 onMenuSelected: {
179164 indicatorRow.setItem(index)
@@ -209,7 +194,7 @@ Showable {
209194 clip: height < handleImage.height
210195
211196 function get_height() {
212− return Math.max(Math.min(handleImage.height, indicators.height - handleImage.height), 0)
197+ return Math.max(Math.min(handleImage.height, indicators.height - handleImage.height), 0);
213198 }
214199
215200 BorderImage {
@@ -264,7 +249,6 @@ Showable {
264249 height: indicators.panelHeight
265250 indicatorsModel: indicatorsModel
266251 state: indicators.state
267− overviewActive: menuContent.overviewActive
268252
269253 onCurrentItemIndexChanged: menuContent.currentIndex = currentItemIndex
270254
@@ -279,7 +263,6 @@ Showable {
279263 onRunningChanged: {
280264 if (hideAnimation.running) {
281265 indicators.state = "initial"
282− menuContent.hideAll()
283266 } else {
284267 if (state == "initial") {
285268 indicatorRow.setDefaultItem();
@@ -292,13 +275,8 @@ Showable {
292275 target: showAnimation
293276 onRunningChanged: {
294277 if (showAnimation.running) {
295− if (indicators.state == "initial") {
296− openOverview()
297− } else {
298− indicators.calculateCurrentItem(dragHandle.touchX, false)
299− menuContent.showMenu()
300− }
301− indicators.state = "commit"
278+ indicators.calculateCurrentItem(dragHandle.touchX, false);
279+ indicators.state = "commit";
302280 }
303281 }
304282 }
@@ -306,8 +284,8 @@ Showable {
306284 Connections {
307285 target: dragHandle
308286 onTouchXChanged: {
309− var buffer = dragHandle.dragging ? true : false
310− indicators.calculateCurrentItem(dragHandle.touchX, buffer)
287+ var buffer = dragHandle.dragging ? true : false;
288+ indicators.calculateCurrentItem(dragHandle.touchX, buffer);
311289 }
312290 }
313291
@@ -342,8 +320,7 @@ Showable {
342320
343321 onStatusChanged: {
344322 if (status === DirectionalDragArea.Recognized) {
345− menuContent.hideAll()
346− menuContent.activateContent()
323+ menuContent.activateContent();
347324 }
348325 }
349326 }
@@ -371,7 +348,6 @@ Showable {
371348 State {
372349 name: "reveal"
373350 extend: "hint"
374− PropertyChanges { target: menuContent; animate: true }
375351 StateChangeScript { script: calculateCurrentItem(dragHandle.touchX, false); }
376352 },
377353 State {
@@ -393,7 +369,6 @@ Showable {
393369 },
394370 State {
395371 name: "reveal"
396− PropertyChanges { target: menuContent; animate: true }
397372 StateChangeScript { script: calculateCurrentItem(dragHandle.touchX, false); }
398373 },
399374 State {
Panel/Indicators/DatetimeIndicatorPage.qml+2−2
@@ -54,7 +54,7 @@ Flickable {
5454 }
5555
5656 text: ""
57− color: "#f3f3e7"
57+ color: Theme.palette.selected.backgroundText
5858 font.weight: Font.Light
5959 font.pixelSize: units.gu(6)
6060 }
@@ -69,7 +69,7 @@ Flickable {
6969 bottomMargin: units.gu(1.5)
7070 }
7171 text: ""
72− color: "#f3f3e7"
72+ color: Theme.palette.selected.backgroundText
7373 fontSize: "small"
7474 }
7575 }
Panel/Indicators/DatetimeIndicatorWidget.qml+1−1
@@ -31,7 +31,7 @@ Indicators.IndicatorWidget {
3131 Label {
3232 id: timeLabel
3333 objectName: "timeLabel"
34− color: "#f3f3e7"
34+ color: Theme.palette.selected.backgroundText
3535 opacity: 0.8
3636 font.family: "Ubuntu"
3737 fontSize: "medium"
Panel/Indicators/DefaultIndicatorWidget.qml+1−1
@@ -52,7 +52,7 @@ Indicators.IndicatorWidget {
5252 Label {
5353 id: itemLabel
5454 objectName: "itemLabel"
55− color: "#f3f3e7"
55+ color: Theme.palette.selected.backgroundText
5656 opacity: 0.8
5757 font.family: "Ubuntu"
5858 fontSize: "medium"
Panel/MenuContent.qml+9−68
@@ -17,50 +17,31 @@
1717import QtQuick 2.0
1818import Ubuntu.Components 0.1
1919import Unity.Indicators 0.1 as Indicators
20−import "Menus"
2120import "../Components"
2221
2322Rectangle {
2423 id: content
2524
2625 property QtObject indicatorsModel: null
27− property bool animate: true // FIXME: Remove. This doesnt seem to be being used and it's referenced in Indicators.
28− property bool overviewActive: true // "state of the menu"
29− property bool __shown: false
3026 property bool __contentActive: false
3127 property alias currentIndex : menus.currentIndex
32− property color backgroundColor: "#221e1c"
28+ property color backgroundColor: "#221e1c" // FIXME not in palette yet
3329 property int contentReleaseInterval: 20000
3430
3531 width: units.gu(40)
3632 height: units.gu(42)
3733 color: backgroundColor
38− enabled: __shown
3934
4035 signal menuSelected(int index)
4136
42− function showMenu() {
43− __shown = true
44− overviewActive = false
45− }
46−
47− function showOverview() {
48− __shown = true
49− overviewActive = true
50− }
51−
52− function hideAll() {
53− __shown = false
54− }
55−
5637 function activateContent() {
57− contentReleaseTimer.stop()
58− __contentActive = true
38+ contentReleaseTimer.stop();
39+ __contentActive = true;
5940 }
6041
6142 function releaseContent() {
6243 if (__contentActive)
63− contentReleaseTimer.restart()
44+ contentReleaseTimer.restart();
6445 }
6546
6647 ListView {
@@ -72,7 +53,6 @@ Rectangle {
7253 width: parent.width
7354
7455 spacing: units.gu(0.5)
75− opacity: !overviewActive && __shown ? 1 : 0
7656 enabled: opacity != 0
7757 orientation: ListView.Horizontal
7858 model: indicatorsModel
@@ -87,20 +67,19 @@ Rectangle {
8767
8868 onContentActiveChanged: {
8969 if (contentActive && item) {
90− item.start()
70+ item.start();
9171 } else if (!contentActive && item) {
92− item.stop()
72+ item.stop();
9373 }
9474 }
9575
9676 width: menus.width
9777 height: menus.height
9878 source: pageSource
99− visible: content.__shown
10079 onVisibleChanged: {
10180 // Reset the indicator states
10281 if (!visible && item && item["reset"]) {
103− item.reset()
82+ item.reset();
10483 }
10584 }
10685 asynchronous: true
@@ -108,11 +87,11 @@ Rectangle {
10887 onLoaded: {
10988 for(var pName in indicatorProperties) {
11089 if (item.hasOwnProperty(pName)) {
111− item[pName] = indicatorProperties[pName]
90+ item[pName] = indicatorProperties[pName];
11291 }
11392 }
11493 if (contentActive && menus.visible) {
115− item.start()
94+ item.start();
11695 }
11796 }
11897
@@ -124,40 +103,6 @@ Rectangle {
124103 value: handle.height
125104 }
126105 }
127−
128− Behavior on opacity { NumberAnimation {duration: 200} }
129− }
130−
131− Overview {
132− id: overview
133− objectName: "overview"
134−
135− anchors.top: header.bottom
136− anchors.bottom: parent.bottom
137− // FIXME: Dont know why we're using handle height (introduces dep).. Check with design about bottom margin
138− anchors.bottomMargin: handle.height
139−
140− width: content.width
141− indicatorsModel: content.indicatorsModel
142− enabled: content.overviewActive && content.__shown
143− opacity: content.overviewActive && content.__shown ? 1 : 0
144− Behavior on opacity {NumberAnimation{duration: 200}}
145− visible: opacity != 0
146−
147− onMenuSelected: {
148− var storedDuration = menus.highlightMoveDuration
149− var storedVelocity = menus.highlightMoveVelocity
150− menus.highlightMoveDuration = 0
151− menus.highlightMoveVelocity = 100000
152−
153− menus.currentIndex = modelIndex
154− content.overviewActive = false
155−
156− menus.highlightMoveDuration = storedDuration
157− menus.highlightMoveVelocity = storedVelocity
158−
159− content.menuSelected(modelIndex)
160− }
161106 }
162107
163108 Rectangle {
@@ -181,14 +126,10 @@ Rectangle {
181126 right: parent.right
182127 }
183128 text: {
184− if (content.overviewActive)
185− return i18n.tr("Device");
186129 if (indicatorsModel && menus.currentIndex >= 0 && menus.currentIndex < indicatorsModel.count)
187130 return indicatorsModel.data(menus.currentIndex, Indicators.IndicatorsModelRole.Title);
188131 return "";
189132 }
190− opacity: __shown ? 1 : 0
191− Behavior on opacity {NumberAnimation{duration: 100}}
192133 }
193134 }
194135
Panel/Menus/Overview.qmldeleted−70
@@ -1,70 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import "../../Components/ListItems" as ListItems
20−import "Overview"
21−
22−IndicatorMenuWindow {
23− id: overview
24−
25− property QtObject indicatorsModel: null
26−
27− signal menuSelected(int modelIndex)
28−
29− VisualItemModel {
30− id: itemModel
31−
32− FlightModeWidget {
33− anchors {
34− left: parent ? parent.left : undefined
35− right: parent ? parent.right : undefined
36− }
37− height: units.gu(8)
38−
39− ListItems.ThinDivider {
40− anchors {
41− bottom: parent.bottom
42− bottomMargin: -units.dp(1)
43− }
44− }
45− }
46−
47− VolumeWidget {
48− anchors {
49− left: parent ? parent.left : undefined
50− right: parent ? parent.right : undefined
51− }
52− height: units.gu(10)
53− }
54−
55− OverviewGrid {
56− model: indicatorsModel
57− anchors {
58− left: parent ? parent.left : undefined
59− right: parent ? parent.right : undefined
60− }
61− }
62− }
63−
64− ListView {
65− id: listView
66− anchors.fill: parent
67− model: itemModel
68− interactive: false
69− }
70−}
Panel/Menus/Overview/FlightModeWidget.qmldeleted−60
@@ -1,60 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−Item {
21− id: flightModeWidget
22−
23− Image {
24− id: flightIcon
25− source: "graphics/plane_icon.png"
26− anchors {
27− left: parent.left
28− leftMargin: units.gu(2)
29− verticalCenter: parent.verticalCenter
30− }
31− width: units.gu(4)
32− height: units.gu(4)
33− }
34−
35− Label {
36− anchors {
37− left: flightIcon.right
38− right: flightModeSwitch.left
39− margins: units.gu(2)
40− verticalCenter: parent.verticalCenter
41− }
42− text: i18n.tr("Flight mode")
43− color: "#f3f3e7"
44− style: Text.Raised
45− styleColor: "black"
46− opacity: 0.6;
47− fontSize: "medium"
48− elide: Text.ElideRight
49− horizontalAlignment: Text.AlignLeft
50− }
51−
52− Switch {
53− id: flightModeSwitch
54− anchors {
55− right: parent.right
56− rightMargin: units.gu(2)
57− verticalCenter: parent.verticalCenter
58− }
59− }
60−}
Panel/Menus/Overview/OverviewGrid.qmldeleted−135
@@ -1,135 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−
20−import "../../../Components/ListItems" as ListItems
21−
22−Item {
23− id: overviewGrid
24−
25− height: childrenRect.height
26−
27− property var model
28−
29− UbuntuShape {
30− id: gridBackground
31− anchors.fill: grid
32− color: "#282421"
33− radius: "medium"
34− }
35−
36− GridView {
37− id: grid
38− objectName: "overviewGrid"
39−
40− property int columnCount: 3
41− property int rowCount: Math.ceil(model.count / columnCount)
42−
43− anchors {
44− top: parent.top
45− left: parent.left
46− right: parent.right
47− topMargin: units.gu(3)
48− leftMargin: units.gu(2)
49− rightMargin: units.gu(2)
50− }
51− height: cellWidth * rowCount
52− cellWidth: Math.floor((width) / columnCount)
53− cellHeight: cellWidth
54− model: overviewGrid.model
55− visible: opacity != 0
56− interactive: false
57− delegate:
58− AbstractButton {
59− objectName: "overviewGridButton" + index
60− width: grid.cellWidth
61− height: grid.cellHeight
62−
63− Loader {
64− id: loader
65− source: widgetSource
66−
67− width: units.gu(5)
68− height: units.gu(5)
69− anchors.centerIn: parent
70− anchors.verticalCenterOffset: -units.gu(1)
71−
72− onLoaded: {
73− for(var pName in indicatorProperties) {
74− if (item.hasOwnProperty(pName)) {
75− item[pName] = indicatorProperties[pName]
76− }
77− }
78− }
79− }
80−
81− Label {
82− text: title
83− color: "#f3f3e7"
84− fontSize: "small"
85− anchors {
86− left: parent.left
87− right: parent.right
88− bottom: parent.bottom
89− leftMargin: units.gu(0.5)
90− rightMargin: units.gu(0.5)
91− bottomMargin: units.gu(1.5)
92− }
93− elide: Text.ElideRight
94− horizontalAlignment: Text.AlignHCenter
95−
96− }
97− onClicked: overview.menuSelected(index)
98− }
99− }
100−
101− Item {
102− id: gridOverlay
103− anchors.fill: grid
104−
105− Column {
106− anchors {
107− left: parent.left
108− right: parent.right
109− }
110− spacing: grid.cellHeight
111− y: grid.cellHeight - units.dp(1)
112− Repeater {
113− model: grid.rowCount - 1
114− ListItems.ThinDivider {
115− anchors.margins: units.dp(1)
116− }
117− }
118− }
119−
120− Row {
121− anchors {
122− top: parent.top
123− bottom: parent.bottom
124− }
125− spacing: grid.cellWidth - units.dp(1)
126− x: grid.cellWidth - units.dp(1)
127− Repeater {
128− model: grid.columnCount - 1
129− ListItems.VerticalThinDivider {
130− anchors.margins: units.dp(1)
131− }
132− }
133− }
134− }
135−}
Panel/Menus/Overview/VolumeWidget.qmldeleted−88
@@ -1,88 +0,0 @@
1−/*
2− * Copyright (C) 2013 Canonical, Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import Ubuntu.Components 0.1
19−import "../../../Components/"
20−
21−Item {
22− id: volumeWidget
23−
24− Image {
25− id: minVolumeIcon
26− objectName: "minVolumeIcon"
27− source: "graphics/sound_off_icon.png"
28− anchors {
29− left: parent.left
30− leftMargin: units.gu(2)
31− verticalCenter: parent.verticalCenter
32− }
33− width: units.gu(4)
34− height: units.gu(4)
35−
36− MouseArea {
37− anchors.fill: parent
38− onClicked: volumeControl.volumeDown();
39− }
40− }
41−
42− Slider {
43− id: slider
44− objectName: "volumeSlider"
45− anchors {
46− left: minVolumeIcon.right
47− right: maxVolumeIcon.left
48− margins: units.gu(1)
49− verticalCenter: parent.verticalCenter
50− }
51− live: false
52− minimumValue: 0
53− maximumValue: 100
54− value: 50
55−
56− onValueChanged: {
57− volumeControl.volume = value;
58− }
59−
60− Binding {
61− target: slider
62− property: "value"
63− value: volumeControl.volume
64− }
65−
66− function formatValue(v) {
67− return ""
68− }
69− }
70−
71− Image {
72− id: maxVolumeIcon
73− objectName: "maxVolumeIcon"
74− source: "graphics/sound_on_icon.png"
75− anchors {
76− right: parent.right
77− rightMargin: units.gu(2)
78− verticalCenter: parent.verticalCenter
79− }
80− width: units.gu(4)
81− height: units.gu(4)
82−
83− MouseArea {
84− anchors.fill: parent
85− onClicked: volumeControl.volumeUp();
86− }
87− }
88−}
Panel/Menus/Overview/graphics/plane_icon@18.pngdeleted

Binary file not shown.

Panel/Menus/Overview/graphics/sound_off_icon@18.pngdeleted

Binary file not shown.

Panel/Menus/Overview/graphics/sound_on_icon@18.pngdeleted

Binary file not shown.

Shell.qml+2
@@ -62,6 +62,8 @@ FocusScope {
6262 property var applicationManager: ApplicationManagerWrapper {}
6363
6464 Component.onCompleted: {
65+ Theme.name = "Ubuntu.Components.Themes.SuruGradient"
66+
6567 applicationManager.sideStageEnabled = Qt.binding(function() { return sideStage.enabled })
6668
6769 // FIXME: if application focused before shell starts, shell draws on top of it only.
debian/changelog+19
@@ -1,3 +1,22 @@
1+unity8 (7.81.3+13.10.20130718ubuntu.unity.next-0ubuntu1) saucy; urgency=low
2+
3+ [ Andrea Cimitan ]
4+ * Add support for the colour palette.
5+
6+ [ Omer Akram ]
7+ * fix the calendar icon in the launcher. (LP: #1201905)
8+
9+ [ Nick Dedekind ]
10+ * Export indicator plugin symbols using Q_DECL_EXPORT.
11+
12+ [ Ying-Chun Liu ]
13+ * Don't include .moc in previewbindingstest.cpp.
14+
15+ [ Ubuntu daily release ]
16+ * Automatic snapshot from revision 118 (ubuntu-unity/next)
17+
18+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Thu, 18 Jul 2013 06:07:00 +0000
19+
120unity8 (7.81.3+13.10.20130717ubuntu.unity.next-0ubuntu1) saucy; urgency=low
221
322 [ Daniel d'Andrada ]
plugins/Unity/Launcher/backend/launcherbackend.cpp+3−3
@@ -37,7 +37,7 @@ LauncherBackend::LauncherBackend(QObject *parent):
3737 QLatin1String("gmail-webapp.desktop") <<
3838 QLatin1String("ubuntu-weather-app.desktop") <<
3939 QLatin1String("notes-app.desktop") <<
40− QLatin1String("ubuntu-calendar-app.desktop");
40+ QLatin1String("calendar-app.desktop");
4141
4242 // TODO: get stuff from desktop files instead this hardcoded map
4343 m_displayNameMap.insert("phone-app.desktop", "Phone");
@@ -49,7 +49,7 @@ LauncherBackend::LauncherBackend(QObject *parent):
4949 m_displayNameMap.insert("gmail-webapp.desktop", "GMail");
5050 m_displayNameMap.insert("ubuntu-weather-app.desktop", "Weather");
5151 m_displayNameMap.insert("notes-app.desktop", "Notes");
52− m_displayNameMap.insert("ubuntu-calendar-app.desktop", "Calendar");
52+ m_displayNameMap.insert("calendar-app.desktop", "Calendar");
5353
5454 // TODO: get stuff from desktop files instead this hardcoded map
5555 m_iconMap.insert("phone-app.desktop", "phone-app");
@@ -61,7 +61,7 @@ LauncherBackend::LauncherBackend(QObject *parent):
6161 m_iconMap.insert("gmail-webapp.desktop", "gmail");
6262 m_iconMap.insert("ubuntu-weather-app.desktop", "weather");
6363 m_iconMap.insert("notes-app.desktop", "notepad");
64− m_iconMap.insert("ubuntu-calendar-app.desktop", "calendar");
64+ m_iconMap.insert("calendar-app.desktop", "calendar");
6565
6666}
6767
tests/mocks/Ubuntu/Application/ApplicationManager.cpp+2−2
@@ -321,10 +321,10 @@ void ApplicationManager::buildListOfAvailableApplications()
321321 m_availableApplications.append(application);
322322
323323 application = new ApplicationInfo(this);
324− application->setDesktopFile("/usr/share/applications/ubuntu-calendar-app.desktop");
324+ application->setDesktopFile("/usr/share/applications/calendar-app.desktop");
325325 application->setName("Calendar");
326326 application->setIcon("calendar");
327− application->setExec("/usr/bin/qmlscene /usr/share/ubuntu-calendar-app/calendar.qml");
327+ application->setExec("/usr/bin/qmlscene /usr/share/calendar-app/calendar.qml");
328328 application->setStage(ApplicationInfo::SideStage);
329329 application->setHandle(nextHandle++);
330330 m_availableApplications.append(application);
tests/mocks/Unity/Launcher/MockLauncherModel.cpp+1−1
@@ -40,7 +40,7 @@ MockLauncherModel::MockLauncherModel(QObject* parent): LauncherModelInterface(pa
4040 m_list.append(item);
4141 item = new MockLauncherItem("notes-app", "/usr/share/applications/notes-app.desktop", "Notepad", "notepad");
4242 m_list.append(item);
43− item = new MockLauncherItem("ubuntu-calendar-app", "/usr/share/applications/ubuntu-calendar-app.desktop","Calendar", "calendar");
43+ item = new MockLauncherItem("calendar-app", "/usr/share/applications/calendar-app.desktop","Calendar", "calendar");
4444 m_list.append(item);
4545}
4646
tests/plugins/Unity/previewbindingstest.cpp−2
@@ -165,5 +165,3 @@ void PreviewBindingsTest::testSocialPreview()
165165}
166166
167167QTEST_MAIN(PreviewBindingsTest)
168−
169−#include "previewbindingstest.moc"
tests/qmltests/CMakeLists.txt−2
@@ -61,10 +61,8 @@ add_qml_test(Notifications Notifications IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_P
6161add_qml_test(Panel IndicatorRow)
6262add_qml_test(Panel Indicators IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
6363add_qml_test(Panel MenuContent)
64−add_qml_test(Panel Overview)
6564add_qml_test(Panel Panel IMPORT_PATHS ${CMAKE_BINARY_DIR}/plugins ${qmltest_DEFAULT_IMPORT_PATHS})
6665add_qml_test(Panel SearchIndicator)
67−add_qml_test(Panel/Menus IndicatorMenuWindow IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS})
6866add_qml_test(SideStage SideStage IMPORT_PATHS ${qmltest_DEFAULT_IMPORT_PATHS}
6967 ${CMAKE_BINARY_DIR}/tests/mocks
7068 ${CMAKE_BINARY_DIR}/plugins)
tests/qmltests/Panel/Menus/tst_IndicatorMenuWindow.qmldeleted−68
@@ -1,68 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import "../.."
20−import "../../../../Panel/Menus"
21−import Ubuntu.Components 0.1
22−import Unity.Test 0.1 as UT
23−
24−Item {
25− id: testIndicatorMenuWindowItem
26− width: units.gu(9)
27− height: units.gu(3)
28−
29− MouseArea {
30− id: mouseArea
31− anchors.fill: parent
32− }
33−
34− IndicatorMenuWindow {
35− id: indicatorMenuWindow
36− name: "TestIndicatorMenuWindow"
37− anchors.fill: parent
38− }
39−
40− UT.UnityTestCase {
41− name: "IndicatorMenuWindow"
42− when: windowShown
43−
44− function test_mouseEvent_data() {
45− return [
46− {tag: "visible", shown: true, opacity: 1.0, mouseClicks: 0},
47− {tag: "invisible", shown: false, opacity: 0.0, mouseClicks: 1},
48− ]
49− }
50−
51− function test_mouseEvent(data) {
52− indicatorMenuWindow.shown = data.shown
53− tryCompare(indicatorMenuWindow, "opacity", data.opacity)
54−
55− clickedSpy.clear()
56− mouseClick(indicatorMenuWindow, indicatorMenuWindow.width / 2,
57− indicatorMenuWindow.height / 2)
58− compare(clickedSpy.count, data.mouseClicks,
59− "Check for Mouse event eating by indicatorMenuWindow failed")
60− }
61− }
62−
63− SignalSpy {
64− id: clickedSpy
65− target: mouseArea
66− signalName: "clicked"
67− }
68−}
tests/qmltests/Panel/tst_IndicatorRow.qml−14
@@ -32,7 +32,6 @@ Item {
3232
3333 function init_test()
3434 {
35− indicatorRow.overviewActive = false;
3635 indicatorRow.state = "initial";
3736 indicatorRow.currentItem = null;
3837 }
@@ -241,18 +240,5 @@ Item {
241240 compare(get_indicator_item_at(3).dimmed, true, "Other indicators should dim when in locked state");
242241 compare(get_indicator_item_at(4).dimmed, true, "Other indicators should dim when in locked state");
243242 }
244−
245− function test_active_overview() {
246− init_test();
247−
248− indicatorRow.overviewActive = true;
249− indicatorRow.state = "commit";
250−
251− compare(get_indicator_item_at(0).dimmed, true, "Indicator should dim when in overview");
252− compare(get_indicator_item_at(1).dimmed, true, "Indicator should dim when in overview");
253− compare(get_indicator_item_at(2).dimmed, true, "Indicator should dim when in overview");
254− compare(get_indicator_item_at(3).dimmed, true, "Indicator should dim when in overview");
255− compare(get_indicator_item_at(4).dimmed, true, "Indicator should dim when in overview");
256− }
257243 }
258244}
tests/qmltests/Panel/tst_Indicators.qml+1−39
@@ -69,7 +69,6 @@ Item {
6969
7070 onClicked: {
7171 if (!indicators.shown) {
72− indicators.openOverview();
7372 indicators.show();
7473 } else {
7574 indicators.hide();
@@ -89,47 +88,10 @@ Item {
8988 tryCompare(indicators, "state", "initial");
9089 }
9190
92− // Showing the indicators should fully open the indicator panel with the overview menu visible.
91+ // Showing the indicators should fully open the indicator panel.
9392 function test_show() {
9493 indicators.show()
9594 tryCompare(indicators, "fullyOpened", true);
96−
97− // A show must open the indicators.
98− compare(findChild(indicators, "indicatorRow").overviewActive, true, "Overview indicator should be active when opened overview.")
99− }
100−
101− // Opening the overview menu will activate the overview panel.
102− function test_open_overview() {
103− indicators.openOverview();
104− compare(findChild(indicators, "indicatorRow").overviewActive, true, "Overview should be active when opened overview.")
105− }
106−
107− // Showing the indicators, then changing the progress (simulating drag) should keep the overview panel open until
108− // the reveal state is reached.
109− function test_slow_close_open_overview() {
110−
111− var indicator_row = findChild(indicators, "indicatorRow");
112− verify(indicator_row != undefined);
113−
114− indicators.show()
115− // wait for animation to end. (progress needs to be updated)
116− tryCompare(indicators.showAnimation, "running", false);
117− compare(indicator_row.overviewActive, true, "Overview should be active when opened overview.")
118−
119− // iteratively decrease the progress and ensure that it keeps the correct behaviour
120− var current_progress = indicators.progress - shell.height/20;
121− while (current_progress > 0) {
122− indicators.progress = current_progress;
123−
124− if (indicators.state == "commit" || indicators.state == "locked") {
125− compare(indicator_row.overviewActive, true, "Overview should be active when in locked or commit state after show.")
126− }
127− else if (indicators.state == "reveal" || indicators.state == "hint") {
128− compare(indicator_row.overviewActive, false, "Overview should be not active when not in commit or locked state.")
129− }
130−
131− current_progress = current_progress - shell.height/20;
132− }
13395 }
13496
13597 // Test the change in the revealer lateral position changes the current panel menu to fit the position
tests/qmltests/Panel/tst_MenuContent.qml+10−80
@@ -52,8 +52,8 @@ Item {
5252 height: parent.height - 50
5353 }
5454
55− Item {
56− id: click_me
55+ Rectangle {
56+ color: "#bbbbbb"
5757
5858 height: 50
5959 anchors {
@@ -62,50 +62,16 @@ Item {
6262 right: parent.right
6363 }
6464
65− Rectangle {
66− color: "#999999"
67−
68− anchors {
69− top: parent.top
70− left: parent.left
71− right: parent.horizontalCenter
72− bottom: parent.bottom
73− }
74−
75− Text {
76− text: "Devices"
77− anchors.fill: parent
78− horizontalAlignment: Text.AlignHCenter
79− verticalAlignment: Text.AlignVCenter
80− }
81−
82− MouseArea {
83− anchors.fill: parent
84− onClicked: menuContent.showOverview()
85− }
65+ Text {
66+ text: "Next Indicator"
67+ anchors.fill: parent
68+ horizontalAlignment: Text.AlignHCenter
69+ verticalAlignment: Text.AlignVCenter
8670 }
8771
88− Rectangle {
89− color: "#bbbbbb"
90−
91− anchors {
92− top: parent.top
93− left: parent.horizontalCenter
94− right: parent.right
95− bottom: parent.bottom
96− }
97−
98− Text {
99− text: "Next Indicator"
100− anchors.fill: parent
101− horizontalAlignment: Text.AlignHCenter
102− verticalAlignment: Text.AlignVCenter
103− }
104−
105− MouseArea {
106− anchors.fill: parent
107− onClicked: activate_next_content()
108− }
72+ MouseArea {
73+ anchors.fill: parent
74+ onClicked: activate_next_content()
10975 }
11076 }
11177
@@ -120,7 +86,6 @@ Item {
12086 function activate_content(index)
12187 {
12288 menuContent.currentIndex = index
123− menuContent.showMenu();
12489 }
12590
12691 function get_test_menu_objecName(index) {
@@ -151,7 +116,6 @@ Item {
151116 when: windowShown
152117
153118 function init() {
154− menuContent.hideAll();
155119 if (menuContent.__contentActive)
156120 menuContent.releaseContent();
157121 tryCompare(menuContent, "__contentActive", false);
@@ -174,40 +138,6 @@ Item {
174138 compare(menus.currentIndex, menu_index, "Current menu index does not match selected menu index");
175139 tryCompareFunction(current_menu_equals_test_menu, true);
176140 }
177− // overview should not be visible.
178− tryCompare(findChild(menuContent, "overview"), "visible", false);
179− }
180−
181− function test_show_overview() {
182− menuContent.showOverview();
183−
184− var overview = findChild(menuContent, "overview");
185− tryCompare(overview, "visible", true);
186− tryCompare(overview, "enabled", true);
187− tryCompare(overview, "opacity", 1.0);
188−
189− // menus should not be enabled.
190− tryCompare(findChild(menuContent, "menus"), "opacity", 0);
191− tryCompare(findChild(menuContent, "menus"), "enabled", false);
192− }
193−
194− function test_overview_menuSelected_signal() {
195− menuContent.showOverview();
196−
197− var overview = findChild(menuContent, "overview");
198− var menus = menu_content_test.findChild(menuContent, "menus")
199−
200− var menu_count = indicatorsModel.count;
201− verify(menu_count > 0, "Menu count should be greater than zero");
202− for (var i = 0; i < menu_count; i++) {
203− // manually emit signal from overview.
204− // we dont want to go with mouse events here, otherwise we're testing the overview and not the signal.
205− overview.menuSelected(i);
206−
207− test_menu_objectName = get_test_menu_objecName(i);
208− compare(menus.currentIndex, i, "Current menu index does not match selected menu index");
209− tryCompareFunction(current_menu_equals_test_menu, true);
210− }
211141 }
212142
213143 // Calling activateContent should call start on all menus
tests/qmltests/Panel/tst_Overview.qmldeleted−142
@@ -1,142 +0,0 @@
1−/*
2− * Copyright 2013 Canonical Ltd.
3− *
4− * This program is free software; you can redistribute it and/or modify
5− * it under the terms of the GNU General Public License as published by
6− * the Free Software Foundation; version 3.
7− *
8− * This program is distributed in the hope that it will be useful,
9− * but WITHOUT ANY WARRANTY; without even the implied warranty of
10− * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11− * GNU General Public License for more details.
12− *
13− * You should have received a copy of the GNU General Public License
14− * along with this program. If not, see <http://www.gnu.org/licenses/>.
15− */
16−
17−import QtQuick 2.0
18−import QtTest 1.0
19−import ".."
20−import "../../../Panel/Menus"
21−import "../../../Components"
22−import Unity.Test 0.1 as UT
23−import Unity.Indicators 0.1 as Indicators
24−
25−Rectangle {
26− id: shell
27− width: units.gu(40)
28− height: units.gu(80)
29− color: "black"
30−
31− Overview {
32− id: overview
33− anchors.fill: parent
34− indicatorsModel: mockModel
35− shown: true
36− }
37−
38− Item {
39− id: volumeControl
40− property int volume
41− function volumeUp() {
42− volume = Math.min(100, volume + 10);
43− }
44− function volumeDown() {
45− volume = Math.max(0, volume - 10);
46− }
47− }
48−
49− ListModel {
50− id: mockModel
51− ListElement {title: "fake1"; widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget1.qml"; indicatorProperties: ""}
52− ListElement {title: "fake2"; widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget2.qml"; indicatorProperties: ""}
53− ListElement {title: "fake3"; widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget3.qml"; indicatorProperties: ""}
54− }
55−
56− ListModel {
57− id: mockModel2
58− }
59−
60− SignalSpy {
61− id: clickSpy
62− target: overview
63− signalName: "menuSelected"
64− }
65−
66− UT.UnityTestCase {
67− name: "Overview"
68− when: windowShown
69−
70− function initTestCase() {
71− // Spin the event loop once because the UI builds up delayed
72− wait(0);
73− }
74−
75− function test_menuSelected() {
76− overview.indicatorsModel = mockModel;
77−
78− for (var i = 0; i < mockModel.count; ++i) {
79− var button = findChild(overview, "overviewGridButton" + i);
80− clickSpy.clear();
81− mouseClick(button, button.width / 2, button.height / 2);
82− compare(clickSpy.count, 1, "Clicking on grid didn't work");
83− compare(clickSpy.signalArguments[0][0], i, "Clicking the grid returned a wrong index");
84− }
85− }
86−
87− function test_dynamic_addition() {
88− var overviewGrid = findChild(overview, "overviewGrid");
89−
90− for(var i = 0; i < mockModel.count; ++i) {
91− mockModel2.append(mockModel.get(i));
92− }
93− overview.indicatorsModel = mockModel2;
94− overviewGrid.forceLayout();
95− waitForRendering(overviewGrid);
96−
97− var button = findChild(overview, "overviewGridButton2");
98− verify(button !== undefined, "button2 wasn't found");
99− button = findChild(overview, "overviewGridButton3");
100− compare(button, undefined, "There should only be 3 buttons... found at least 4...");
101−
102− mockModel2.append({title: "humppa", widgetSource: "qrc:/tests/indciators/qml/fake_menu_widget4.qml", indicatorProperties: ""})
103− overviewGrid.forceLayout();
104− waitForRendering(overviewGrid);
105−
106− button = findChild(overview, "overviewGridButton3");
107− verify(button !== undefined, "button3 wasn't found");
108− }
109−
110− function test_volume_slider_data() {
111− return [
112− {tag: "0%", sliderPos:0},
113− {tag: "100%", sliderPos: 100},
114− {tag: "50%", sliderPos: 50}
115− ];
116− }
117−
118− function test_volume_slider(data) {
119− var volumeSlider = findChild(overview, "volumeSlider");
120− var startX = volumeSlider.width * volumeSlider.value / 100;
121− var startY = volumeSlider.y + volumeSlider.height / 2;
122− var stopX = (volumeSlider.width - units.gu(5)) * data.sliderPos / 100;
123− var stopY = volumeSlider.y + volumeSlider.height / 2;
124− mouseFlick(volumeSlider, startX, startY, stopX, stopY, true, true, 0.1);
125− }
126−
127− function test_volume_buttons(data) {
128− var volumeDownButton = findChild(overview, "minVolumeIcon");
129− var volumeUpButton = findChild(overview, "maxVolumeIcon");
130−
131− for (var i = 0; i < 10; ++i) {
132− mouseClick(volumeDownButton, volumeDownButton.width / 2, volumeDownButton.height / 2);
133− wait(0)
134− }
135− tryCompare(volumeControl, "volume", 0);
136− for (var i = 0; i < 10; ++i) {
137− mouseClick(volumeUpButton, 1, 1);
138− wait(0)
139− }
140− }
141− }
142−}
tests/qmltests/Panel/tst_Panel.qml+33−33
@@ -62,14 +62,14 @@ Item {
6262
6363 function get_indicator_item(index) {
6464 var row_repeater = findChild(panel.indicators, "rowRepeater");
65− verify(row_repeater != undefined)
65+ verify(row_repeater != undefined);
6666 return row_repeater.itemAt(index);
6767 }
6868
6969 function get_indicator_item_position(index) {
7070
7171 var indicator_row = findChild(panel.indicators, "indicatorRow");
72− verify(indicator_row != undefined)
72+ verify(indicator_row != undefined);
7373
7474 var indicator_item = get_indicator_item(index);
7575 verify(indicator_item != undefined);
@@ -83,11 +83,11 @@ Item {
8383 panel.fullscreenMode = false;
8484 // Wait for the indicators to get into position.
8585 // (switches between normal and fullscreen modes are animated)
86− tryCompare(panel.indicators, "y", 0)
86+ tryCompare(panel.indicators, "y", 0);
8787
8888 var indicator_item_coord = get_indicator_item_position(0);
8989
90− touchPress(panel, indicator_item_coord.x, panel.panelHeight / 2)
90+ touchPress(panel, indicator_item_coord.x, panel.panelHeight / 2);
9191
9292 // hint animation should be run, meaning that indicators will move downwards
9393 // by hintValue pixels without any drag taking place
@@ -96,7 +96,7 @@ Item {
9696 tryCompare(panel.indicators, "partiallyOpened", true);
9797 tryCompare(panel.indicators, "fullyOpened", false);
9898
99− touchRelease(panel, indicator_item_coord.x, panel.panelHeight/2)
99+ touchRelease(panel, indicator_item_coord.x, panel.panelHeight/2);
100100 }
101101
102102 // Pressing on the top edge of the screen should have no effect if the panel
@@ -105,31 +105,31 @@ Item {
105105 panel.fullscreenMode = true;
106106 // Wait for the indicators to get into position.
107107 // (switches between normal and fullscreen modes are animated)
108− tryCompare(panel.indicators, "y", -panel.panelHeight)
108+ tryCompare(panel.indicators, "y", -panel.panelHeight);
109109
110110 var indicator_item_coord = get_indicator_item_position(0);
111111
112− touchPress(panel, indicator_item_coord.x, panel.panelHeight / 2)
112+ touchPress(panel, indicator_item_coord.x, panel.panelHeight / 2);
113113
114114 // Give some time for a hint animation to change things, if any
115− wait(500)
115+ wait(500);
116116
117117 // no hint animation when fullscreen
118− compare(panel.indicators.y, -panel.panelHeight)
118+ compare(panel.indicators.y, -panel.panelHeight);
119119 var indicatorRow = findChild(panel.indicators, "indicatorRow");
120− verify(indicatorRow != undefined)
121− compare(indicatorRow.y, 0)
122− compare(panel.indicators.height, panel.indicators.panelHeight)
120+ verify(indicatorRow != undefined);
121+ compare(indicatorRow.y, 0);
122+ compare(panel.indicators.height, panel.indicators.panelHeight);
123123 compare(panel.indicators.partiallyOpened, false,
124124 "Indicator should not be partially opened when panel is pressed in" +
125− " fullscreenmode")
125+ " fullscreenmode");
126126 compare(panel.indicators.fullyOpened, false, "Indicator should not be partially" +
127− " opened when panel is pressed in fullscreenmode")
127+ " opened when panel is pressed in fullscreenmode");
128128
129− touchRelease(panel, indicator_item_coord.x, panel.panelHeight/2)
129+ touchRelease(panel, indicator_item_coord.x, panel.panelHeight/2);
130130 }
131131
132− function test_drag_show_data() { return get_window_data() }
132+ function test_drag_show_data() { return get_window_data(); }
133133
134134 // Dragging from a indicator item in the panel will gradually expose the
135135 // indicators, first by running the hint animation, then after dragging down will
@@ -138,50 +138,50 @@ Item {
138138 panel.fullscreenMode = data.fullscreenFlag;
139139
140140 var indicator_row = findChild(panel.indicators, "indicatorRow");
141− verify(indicator_row != undefined)
141+ verify(indicator_row != undefined);
142142
143143 var row_repeater = findChild(panel.indicators, "rowRepeater");
144− verify(indicator_row != undefined)
144+ verify(indicator_row != undefined);
145145
146146 var menu_content = findChild(panel.indicators, "menuContent");
147− verify(indicator_row != undefined)
147+ verify(indicator_row != undefined);
148148
149149 // Wait for the indicators to get into position.
150150 // (switches between normal and fullscreen modes are animated)
151151 if (data.fullscreenFlag) {
152− tryCompare(panel.indicators, "y", -panel.panelHeight)
152+ tryCompare(panel.indicators, "y", -panel.panelHeight);
153153 } else {
154− tryCompare(panel.indicators, "y", 0)
154+ tryCompare(panel.indicators, "y", 0);
155155 }
156156
157157 // do this for each indicator item
158158 for (var i = 0; i < row_repeater.count; i++) {
159159
160160 var indicator_item = get_indicator_item(i);
161− verify(indicator_item != undefined)
161+ verify(indicator_item != undefined);
162162
163163 var indicator_item_coord = get_indicator_item_position(i);
164164
165165 touchPress(panel,
166− indicator_item_coord.x, panel.panelHeight / 2)
166+ indicator_item_coord.x, panel.panelHeight / 2);
167167
168168 // 1) Drag the mouse down
169169 touchFlick(panel,
170170 indicator_item_coord.x, panel.panelHeight / 2,
171171 indicator_item_coord.x, panel.height * 0.8,
172− false /* beginTouch */, false /* endTouch */)
172+ false /* beginTouch */, false /* endTouch */);
173173
174174 // Indicators height should follow the drag, and therefore increase accordingly.
175175 // They should be at least half-way through the screen
176176 tryCompareFunction(
177177 function() {return panel.indicators.height >= panel.height * 0.5},
178− true)
178+ true);
179179
180− touchRelease(panel, indicator_item_coord.x, panel.height * 0.8)
180+ touchRelease(panel, indicator_item_coord.x, panel.height * 0.8);
181181
182182 compare(indicator_row.currentItem, indicator_item,
183− "Incorrect item activated at position " + i)
184− compare(menu_content.__shown, true, "Menu conetent should be enabled for item at position " + i);
183+ "Incorrect item activated at position " + i);
184+ compare(menu_content.currentIndex, i, "Menu conetent should be enabled for item at position " + i);
185185
186186 // init for next indicator_item
187187 init();
@@ -195,23 +195,23 @@ Item {
195195 var search_indicator = findChild(panel, "search");
196196 verify(search_indicator != undefined);
197197
198− tap(search_indicator, 1, 1)
198+ tap(search_indicator, 1, 1);
199199
200200 compare(search_clicked, true,
201− "Tapping search indicator while it was enabled did not emit searchClicked signal")
201+ "Tapping search indicator while it was enabled did not emit searchClicked signal");
202202 }
203203
204204 function test_search_click_when_not_visible() {
205205 panel.fullscreenMode = false;
206− panel.searchVisible = false
206+ panel.searchVisible = false;
207207
208208 var search_indicator = findChild(panel, "search");
209209 verify(search_indicator != undefined);
210210
211− tap(search_indicator, 1, 1)
211+ tap(search_indicator, 1, 1);
212212
213213 compare(search_clicked, false,
214− "Tapping search indicator while it was not visible emitted searchClicked signal")
214+ "Tapping search indicator while it was not visible emitted searchClicked signal");
215215 }
216216 }
217217}