Merge lp:~michael-sheldon/content-hub/peer-picker-updates into lp:content-hub

Proposed by Michael Sheldon
Status: Merged
Approved by: Ken VanDine
Approved revision: 127
Merged at revision: 127
Proposed branch: lp:~michael-sheldon/content-hub/peer-picker-updates
Merge into: lp:content-hub
Diff against target: 596 lines (+400/-90)
7 files modified
doc/qml/pages/mainpage.qdoc (+3/-3)
doc/qml/pages/moduledef.qdoc (+1/-1)
import/Ubuntu/Content/ContentPeerPicker.qdoc (+82/-0)
import/Ubuntu/Content/ContentPeerPicker10.qml (+261/-0)
import/Ubuntu/Content/ContentPeerPicker11.qml (+24/-73)
import/Ubuntu/Content/contenthubplugin.cpp (+20/-12)
import/Ubuntu/Content/qmldir (+9/-1)
To merge this branch: bzr merge lp:~michael-sheldon/content-hub/peer-picker-updates
Reviewer Review Type Date Requested Status
Ken VanDine Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+227551@code.launchpad.net

Commit message

Make the ContentPeerPicker's header text customisable and replace the bottom cancel button with new header style cancel.

Description of the change

Make the ContentPeerPicker's header text customisable and replace the bottom cancel button with new header style cancel.

To post a comment you must log in.
Revision history for this message
Michael Sheldon (michael-sheldon) wrote :

Are there any related MPs required for this MP to build/function as expected? Please list.

 * No

Is your branch in sync with latest trunk (e.g. bzr pull lp:trunk -> no changes)

 * Yes

Did you perform an exploratory manual test run of your code change and any related functionality on device or emulator?

 * Yes

Did you successfully run all tests found in your component's Test Plan (https://wiki.ubuntu.com/Process/Merges/TestPlan/content-hub) on device or emulator?

 * Yes, however attaching contacts from the address-book currently fails due to https://bugs.launchpad.net/address-book-app/+bug/1346278

If you changed the UI, was the change specified/approved by design?

 * Yes, change specified at UX sprint

If you changed the packaging (debian), did you add a core-dev as a reviewer to this MP?

 * No change

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Ken VanDine (ken-vandine) wrote :

This change includes bumping the Ubuntu.Components import version to 1.1, is that available in the 14.04 framework?

review: Needs Information
126. By Michael Sheldon

Separate new ContentPeerPicker into new QML API version and duplicate existing 0.1 elements as 1.0

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
127. By Michael Sheldon

Fix documentation for separate versions of ContentPeerPicker

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Ken VanDine (ken-vandine) wrote :

This looks good with the API bump, I tested all the versions with my example apps and they all work as expected.

However, our plugin package is versioned 0.1, I guess that needs to be changed to 1.1. I also noticed even though our plugin package is versioned so it can be parallel installable, it isn't installed in a versioned directory.

review: Needs Fixing
Revision history for this message
Michael Sheldon (michael-sheldon) wrote :

I'm not entirely sure we want to have separate packages for the different versions as the way the QML versioning works means that the one package contains both versions of the API, with the files used for each controlled by the qmldir file (and by the C++ version registration).

Revision history for this message
Ken VanDine (ken-vandine) wrote :

> I'm not entirely sure we want to have separate packages for the different
> versions as the way the QML versioning works means that the one package
> contains both versions of the API, with the files used for each controlled by
> the qmldir file (and by the C++ version registration).

Yeah, in this case from a functional point of view it all works fine, the package name is just useful for package depends (not for click). So if your app import Ubuntu.Content 1.1 you would need to have that package installed. As for keeping them around and parallel installable, it'll be much more useful when we transition to say a 2.0 API version which might not be backwards compatible and we stop carrying old versions. This way the old module can be installed as well.

We currently have 3 packages depending on qtdeclarative5-ubuntu-content0.1:
 address-book-app
 unity-webapps-qml
 ubuntu-system-settings

This can land without actually breaking apps, which is great but there isn't a clear way for any of those apps depending on package versions ensure that 1.1 is installed. And folks would likely assume content0.1 provides that API versions. However, changing that to content1.1 doesn't make it clear that it also provides 0.1, so no silver bullet there.

Revision history for this message
Ken VanDine (ken-vandine) wrote :

This looks good, but lets land this along with:
https://code.launchpad.net/~ken-vandine/content-hub/api_v1/+merge/227948

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'doc/qml/pages/mainpage.qdoc'
--- doc/qml/pages/mainpage.qdoc 2014-04-02 12:00:25 +0000
+++ doc/qml/pages/mainpage.qdoc 2014-07-22 08:44:26 +0000
@@ -67,8 +67,8 @@
6767
68\qml68\qml
69import QtQuick 2.069import QtQuick 2.0
70import Ubuntu.Components 0.170import Ubuntu.Components 1.1
71import Ubuntu.Content 0.171import Ubuntu.Content 1.1
7272
73Rectangle {73Rectangle {
74 id: root74 id: root
@@ -140,7 +140,7 @@
140\part Components140\part Components
141Available through:141Available through:
142\code142\code
143 import Ubuntu.Content 0.1143 import Ubuntu.Content 1.1
144\endcode144\endcode
145145
146*/146*/
147147
=== modified file 'doc/qml/pages/moduledef.qdoc'
--- doc/qml/pages/moduledef.qdoc 2014-04-02 12:18:01 +0000
+++ doc/qml/pages/moduledef.qdoc 2014-07-22 08:44:26 +0000
@@ -1,3 +1,3 @@
1/*!1/*!
2 \qmlmodule Ubuntu.Content 0.12 \qmlmodule Ubuntu.Content 1.1
3*/3*/
44
=== added file 'import/Ubuntu/Content/ContentPeerPicker.qdoc'
--- import/Ubuntu/Content/ContentPeerPicker.qdoc 1970-01-01 00:00:00 +0000
+++ import/Ubuntu/Content/ContentPeerPicker.qdoc 2014-07-22 08:44:26 +0000
@@ -0,0 +1,82 @@
1/*
2 * Copyright 2014 Canonical Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17/*!
18 \qmltype ContentPeerPicker
19 \inqmlmodule Ubuntu.Content
20 \brief Component that allows users to select a source/destination for content transfer
21
22 This component displays a list of applications, devices and services which
23 are appropriate for transferring a given content type with.
24*/
25
26/*!
27 \qmlproperty ContentHandler ContentPeerPicker::handler
28 \brief The ContentHandler to use when finding peers.
29*/
30
31/*!
32 \qmlproperty ContentType ContentPeerPicker::contentType
33 \brief The ContentType to use when finding peers.
34*/
35
36/*!
37 \qmlproperty bool ContentPeerPicker::showTitle
38 \brief Determines whether the header should be displayed.
39
40 This makes it possible to hide the header, which can be useful
41 if embedding the picker within another page or popup.
42*/
43
44/*!
45 \qmlproperty ContentPeer ContentPeerPicker::peer
46 \brief The peer selected by the user.
47
48 Once the peerSelected signal has been sent, this provides the
49 ContentPeer which the user has selected.
50*/
51
52/*!
53 \qmlproperty Loader ContentPeerPicker::customerPeerModelLoader
54 \brief A Loader containing a ContentPeerModel.
55
56 This can optionally be used to provide a pre-populated ContentPeerModel
57 to this ContentPeerPicker.
58*/
59
60/*!
61 \qmlproperty string ContentPeerPicker::headerText
62 \brief Text to display in the header.
63*/
64
65/*!
66 \qmlsignal ContentPeerPicker::peerSelected
67 \brief Emitted when a user selects a peer.
68
69 Once this signal has been emitted the selected peer can be accessed via
70 the peer property.
71 \c onPeerSelected
72*/
73
74/*!
75 \qmlsignal ContentPeerPicker::cancelPressed
76 \brief Emitted when the user clicks the cancel button.
77
78 The ContentPeerPicker will be hidden automatically when the user cancels
79 the operations and the active ContentTransfer will be set to Aborted.
80 \c onCancelPressed
81*/
82
083
=== added file 'import/Ubuntu/Content/ContentPeerPicker10.qml'
--- import/Ubuntu/Content/ContentPeerPicker10.qml 1970-01-01 00:00:00 +0000
+++ import/Ubuntu/Content/ContentPeerPicker10.qml 2014-07-22 08:44:26 +0000
@@ -0,0 +1,261 @@
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 Lesser 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 Lesser General Public License for more details.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17import QtQuick 2.0
18import Ubuntu.Components 0.1
19import Ubuntu.Components.Popups 0.1
20import Ubuntu.Components.ListItems 0.1 as ListItem
21import Ubuntu.Content 0.1
22
23/*!
24 \internal
25 Documentation is in ContentPeerPicker.qdoc
26*/
27Item {
28 id: root
29 anchors.fill: parent
30
31 property var handler
32 property var contentType
33 property alias showTitle: header.visible
34 property var peer
35 property var customPeerModelLoader
36 property var completed: false
37
38 signal peerSelected
39 signal cancelPressed
40
41 Rectangle {
42 anchors.fill: parent
43 color: Theme.palette.normal.overlay
44 }
45
46 Header {
47 id: header
48 title: (handler === ContentHandler.Source) ? i18n.tr("Choose from") : (handler === ContentHandler.Destination ? i18n.tr("Open with") : i18n.tr("Share to"))
49 }
50
51 Loader {
52 id: peerModelLoader
53 active: false
54 sourceComponent: ContentPeerModel { }
55 onLoaded: {
56 item.handler = root.handler;
57 item.contentType = root.contentType;
58 }
59 }
60
61 Component.onCompleted: {
62 if (root.visible) {
63 if (customPeerModelLoader) {
64 customPeerModelLoader.active = true;
65 } else {
66 peerModelLoader.active = true;
67 }
68 }
69 completed = true;
70 }
71
72 onVisibleChanged: {
73 if (completed) {
74 if (customPeerModelLoader) {
75 customPeerModelLoader.active = true;
76 } else {
77 peerModelLoader.active = true;
78 }
79 }
80 }
81
82 onHandlerChanged: {
83 if (!customPeerModelLoader && peerModelLoader.item) {
84 appPeers.model = undefined; // Clear grid view
85 peerModelLoader.item.handler = root.handler;
86 appPeers.model = peerModelLoader.item.peers;
87 }
88 }
89
90 onContentTypeChanged: {
91 if (!customPeerModelLoader && peerModelLoader.item) {
92 appPeers.model = undefined; // Clear grid view
93 peerModelLoader.item.contentType = root.contentType;
94 appPeers.model = peerModelLoader.item.peers;
95 }
96 }
97
98 Component {
99 id: peerDelegate
100 Item {
101 width: units.gu(13.5)
102 height: units.gu(16)
103 AbstractButton {
104 width: parent.width
105 height: icon.height + label.height
106 UbuntuShape {
107 id: icon
108 anchors {
109 top: parent.top
110 horizontalCenter: parent.horizontalCenter
111 }
112 radius: "medium"
113 width: units.gu(8)
114 height: units.gu(7.5)
115 image: Image {
116 id: image
117 objectName: "image"
118 sourceSize { width: icon.width; height: icon.height }
119 asynchronous: true
120 cache: false
121 source: "image://content-hub/" + modelData.appId
122 horizontalAlignment: Image.AlignHCenter
123 verticalAlignment: Image.AlignVCenter
124 }
125 }
126
127 Label {
128 id: label
129 objectName: "label"
130 anchors {
131 baseline: icon.bottom
132 baselineOffset: units.gu(2)
133 left: parent.left
134 right: parent.right
135 leftMargin: units.gu(1)
136 rightMargin: units.gu(1)
137 }
138
139 opacity: 0.9
140 fontSize: "small"
141 elide: Text.ElideMiddle
142 horizontalAlignment: Text.AlignHCenter
143 text: modelData.name || modelData.appId
144 }
145
146 onClicked: {
147 peer = modelData
148 peerSelected()
149 }
150 }
151
152 }
153 }
154
155 ListItem.Header {
156 id: appTitle
157 anchors.top: header.visible ? header.bottom : parent.top
158 text: i18n.tr("Apps")
159 }
160
161 Rectangle {
162 id: apps
163 color: "#FFFFFF"
164 clip: true
165 anchors {
166 left: parent.left
167 right: parent.right
168 top: appTitle.bottom
169 bottom: devTitle.visible ? devTitle.top : cancelButton.top
170 bottomMargin: units.gu(1)
171 }
172
173 Flickable {
174 anchors.fill: parent
175
176 ResponsiveGridView {
177 id: appPeers
178 anchors.fill: parent
179 minimumHorizontalSpacing: units.gu(0.5)
180 maximumNumberOfColumns: 6
181 delegateWidth: units.gu(11)
182 delegateHeight: units.gu(9.5)
183 verticalSpacing: units.gu(2)
184 model: customPeerModelLoader ? customPeerModelLoader.item.peers : peerModelLoader.item.peers
185 delegate: peerDelegate
186
187 Label {
188 anchors.top: parent.top
189 anchors.topMargin: units.gu(2.5)
190 anchors.horizontalCenter: parent.horizontalCenter
191 width: parent.width - units.gu(5)
192 wrapMode: Text.WordWrap
193 horizontalAlignment: Text.AlignHCenter
194 text: root.handler === ContentHandler.Source ? i18n.tr("Sorry, there aren't currently any apps installed that can provide this type of content.") : i18n.tr("Sorry, there aren't currently any apps installed that can handle this type of content.")
195 visible: appPeers.model ? appPeers.model.length == 0 : false
196 }
197 }
198 }
199 }
200
201 ListItem.Header {
202 id: devTitle
203 // TODO: make this visible when we have a way to populate devices
204 visible: false
205 anchors {
206 left: parent.left
207 right: parent.right
208 top: apps.bottom
209 }
210 text: i18n.tr("Devices")
211 }
212
213 Rectangle {
214 id: devices
215 // TODO: make this visible when we have a way to populate devices
216 visible: false
217 color: "#FFFFFF"
218 width: parent.width
219 radius: 0
220 anchors {
221 left: parent.left
222 right: parent.right
223 top: devTitle.bottom
224 bottom: cancelButton.top
225 bottomMargin: units.gu(1)
226 }
227
228 Flickable {
229 anchors.fill: parent
230
231 ResponsiveGridView {
232 id: devPeers
233 anchors.fill: parent
234 minimumHorizontalSpacing: units.gu(0.5)
235 maximumNumberOfColumns: 6
236 delegateWidth: units.gu(11)
237 delegateHeight: units.gu(9.5)
238 verticalSpacing: units.gu(2)
239 delegate: peerDelegate
240 }
241 }
242 }
243
244 Button {
245 id: cancelButton
246 objectName: "contentPeerPickerCancelButton"
247 text: i18n.tr("Cancel")
248 anchors {
249 left: parent.left
250 bottom: parent.bottom
251 margins: units.gu(1)
252 }
253 onClicked: {
254 if(root.activeTransfer) {
255 root.activeTransfer.state = ContentTransfer.Aborted;
256 }
257 cancelPressed();
258 }
259 }
260
261}
0262
=== renamed file 'import/Ubuntu/Content/ContentPeerPicker.qml' => 'import/Ubuntu/Content/ContentPeerPicker11.qml'
--- import/Ubuntu/Content/ContentPeerPicker.qml 2014-07-09 13:03:19 +0000
+++ import/Ubuntu/Content/ContentPeerPicker11.qml 2014-07-22 08:44:26 +0000
@@ -15,76 +15,28 @@
15 */15 */
1616
17import QtQuick 2.017import QtQuick 2.0
18import Ubuntu.Components 0.118import Ubuntu.Components 1.1
19import Ubuntu.Components.Popups 0.119import Ubuntu.Components.Popups 0.1
20import Ubuntu.Components.ListItems 0.1 as ListItem20import Ubuntu.Components.ListItems 0.1 as ListItem
21import Ubuntu.Content 0.121import Ubuntu.Content 1.1
2222
23/*!23/*!
24 \qmltype ContentPeerPicker24 \internal
25 \inqmlmodule Ubuntu.Content25 Documentation is in ContentPeerPicker.qdoc
26 \brief Component that allows users to select a source/destination for content transfer
27
28 This component displays a list of applications, devices and services which
29 are appropriate for transferring a given content type with.
30*/26*/
31Item {27Item {
32 id: root28 id: root
33 anchors.fill: parent29 anchors.fill: parent
3430
35 /*!
36 \qmlproperty ContentHandler handler
37 \brief The ContentHandler to use when finding peers.
38 */
39 property var handler31 property var handler
40
41 /*! \qmlproperty ContentType contentType
42 \brief The ContentType to use when finding peers.
43 */
44 property var contentType32 property var contentType
45
46 /*! \qmlproperty bool showTitle
47 \brief Determines whether the header should be displayed.
48
49 This makes it possible to hide the header, which can be useful
50 if embedding the picker within another page or popup.
51 */
52 property alias showTitle: header.visible33 property alias showTitle: header.visible
53
54 /*! \qmlproperty ContentPeer peer
55 \brief The peer selected by the user.
56
57 Once the peerSelected signal has been sent, this provides the
58 ContentPeer which the user has selected.
59 */
60 property var peer34 property var peer
61
62 /*! \qmlproperty Loader customerPeerModelLoader
63 \brief A Loader containing a ContentPeerModel.
64
65 This can optionally be used to provide a pre-populated ContentPeerModel
66 to this ContentPeerPicker.
67 */
68 property var customPeerModelLoader35 property var customPeerModelLoader
6936 property string headerText
70 property var completed: false37 property var completed: false
7138
72 /*! \qmlsignal peerSelected
73 \brief Emitted when a user selects a peer.
74
75 Once this signal has been emitted the selected peer can be accessed via
76 the peer property.
77 \c onPeerSelected
78 */
79 signal peerSelected39 signal peerSelected
80
81 /*! \qmlsignal cancelPressed
82 \brief Emitted when the user clicks the cancel button.
83
84 The ContentPeerPicker will be hidden automatically when the user cancels
85 the operations and the active ContentTransfer will be set to Aborted.
86 \c onCancelPressed
87 */
88 signal cancelPressed40 signal cancelPressed
8941
90 Rectangle {42 Rectangle {
@@ -94,7 +46,23 @@
9446
95 Header {47 Header {
96 id: header48 id: header
97 title: (handler === ContentHandler.Source) ? i18n.tr("Choose from") : (handler === ContentHandler.Destination ? i18n.tr("Open with") : i18n.tr("Share to"))49 title: headerText ? headerText : (handler === ContentHandler.Source) ? i18n.tr("Choose from") : (handler === ContentHandler.Destination ? i18n.tr("Open with") : i18n.tr("Share to"))
50 useDeprecatedToolbar: false
51 config: PageHeadConfiguration {
52 backAction: Action {
53 objectName: "cancel"
54
55 iconName: "close"
56 text: i18n.tr("Cancel")
57 onTriggered: {
58 if(root.activeTransfer) {
59 root.activeTransfer.state = ContentTransfer.Aborted;
60 }
61 cancelPressed()
62 }
63
64 }
65 }
98 }66 }
9967
100 Loader {68 Loader {
@@ -215,7 +183,7 @@
215 left: parent.left183 left: parent.left
216 right: parent.right184 right: parent.right
217 top: appTitle.bottom185 top: appTitle.bottom
218 bottom: devTitle.visible ? devTitle.top : cancelButton.top186 bottom: devTitle.visible ? devTitle.top : parent.bottom
219 bottomMargin: units.gu(1)187 bottomMargin: units.gu(1)
220 }188 }
221189
@@ -270,7 +238,7 @@
270 left: parent.left238 left: parent.left
271 right: parent.right239 right: parent.right
272 top: devTitle.bottom240 top: devTitle.bottom
273 bottom: cancelButton.top241 bottom: parent.bottom
274 bottomMargin: units.gu(1)242 bottomMargin: units.gu(1)
275 }243 }
276244
@@ -290,21 +258,4 @@
290 }258 }
291 }259 }
292260
293 Button {
294 id: cancelButton
295 objectName: "contentPeerPickerCancelButton"
296 text: i18n.tr("Cancel")
297 anchors {
298 left: parent.left
299 bottom: parent.bottom
300 margins: units.gu(1)
301 }
302 onClicked: {
303 if(root.activeTransfer) {
304 root.activeTransfer.state = ContentTransfer.Aborted;
305 }
306 cancelPressed();
307 }
308 }
309
310}261}
311262
=== modified file 'import/Ubuntu/Content/contenthubplugin.cpp'
--- import/Ubuntu/Content/contenthubplugin.cpp 2014-07-04 13:09:29 +0000
+++ import/Ubuntu/Content/contenthubplugin.cpp 2014-07-22 08:44:26 +0000
@@ -66,16 +66,24 @@
66 TRACE() << Q_FUNC_INFO;66 TRACE() << Q_FUNC_INFO;
67 Q_ASSERT(uri == QLatin1String("Ubuntu.Content"));67 Q_ASSERT(uri == QLatin1String("Ubuntu.Content"));
6868
69 const int versionMajor = 0;69 QVector<QPair<int, int>> versions;
70 const int versionMinor = 1;70 versions.append(QPair<int, int>(0, 1));
7171 versions.append(QPair<int, int>(1, 0));
72 qmlRegisterUncreatableType<ContentHandler>(uri, versionMajor, versionMinor, "ContentHandler", "Not creatable as an object, use only to retrieve handler enums (e.g. ContentHandler.Source)");72 versions.append(QPair<int, int>(1, 1));
73 qmlRegisterSingletonType<ContentHub>(uri, versionMajor, versionMinor, "ContentHub", qml_content_hub);73
74 qmlRegisterType<ContentItem>(uri, versionMajor, versionMinor, "ContentItem");74 // Register common types for version 0.1, 1.0 and 1.1
75 qmlRegisterType<ContentPeer>(uri, versionMajor, versionMinor, "ContentPeer");75 for(int i = 0; i < versions.length(); i++) {
76 qmlRegisterType<ContentPeerModel>(uri, versionMajor, versionMinor, "ContentPeerModel");76 int versionMajor = versions[i].first;
77 qmlRegisterType<ContentScope>(uri, versionMajor, versionMinor, "ContentScope");77 int versionMinor = versions[i].second;
78 qmlRegisterType<ContentStore>(uri, versionMajor, versionMinor, "ContentStore");78
79 qmlRegisterUncreatableType<ContentTransfer>(uri, versionMajor, versionMinor, "ContentTransfer", "created by hub");79 qmlRegisterUncreatableType<ContentHandler>(uri, versionMajor, versionMinor, "ContentHandler", "Not creatable as an object, use only to retrieve handler enums (e.g. ContentHandler.Source)");
80 qmlRegisterUncreatableType<ContentType>(uri, versionMajor, versionMinor, "ContentType", "Use only the type");80 qmlRegisterSingletonType<ContentHub>(uri, versionMajor, versionMinor, "ContentHub", qml_content_hub);
81 qmlRegisterType<ContentItem>(uri, versionMajor, versionMinor, "ContentItem");
82 qmlRegisterType<ContentPeer>(uri, versionMajor, versionMinor, "ContentPeer");
83 qmlRegisterType<ContentPeerModel>(uri, versionMajor, versionMinor, "ContentPeerModel");
84 qmlRegisterType<ContentScope>(uri, versionMajor, versionMinor, "ContentScope");
85 qmlRegisterType<ContentStore>(uri, versionMajor, versionMinor, "ContentStore");
86 qmlRegisterUncreatableType<ContentTransfer>(uri, versionMajor, versionMinor, "ContentTransfer", "created by hub");
87 qmlRegisterUncreatableType<ContentType>(uri, versionMajor, versionMinor, "ContentType", "Use only the type");
88 }
81}89}
8290
=== modified file 'import/Ubuntu/Content/qmldir'
--- import/Ubuntu/Content/qmldir 2014-02-26 15:51:06 +0000
+++ import/Ubuntu/Content/qmldir 2014-07-22 08:44:26 +0000
@@ -1,5 +1,13 @@
1module Ubuntu.Content1module Ubuntu.Content
2plugin ubuntu-content-hub-plugin2plugin ubuntu-content-hub-plugin
33
4#0.1
4ContentTransferHint 0.1 ContentTransferHint.qml5ContentTransferHint 0.1 ContentTransferHint.qml
5ContentPeerPicker 0.1 ContentPeerPicker.qml6ContentPeerPicker 0.1 ContentPeerPicker10.qml
7
8#1.0
9ContentTransferHint 1.0 ContentTransferHint.qml
10ContentPeerPicker 1.0 ContentPeerPicker10.qml
11
12#1.1
13ContentPeerPicker 1.1 ContentPeerPicker11.qml

Subscribers

People subscribed via source and target branches