| /**************************************************************************** |
| ** |
| ** Copyright (C) 2017 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the documentation of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:BSD$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** BSD License Usage |
| ** Alternatively, you may use this file under the terms of the BSD license |
| ** as follows: |
| ** |
| ** "Redistribution and use in source and binary forms, with or without |
| ** modification, are permitted provided that the following conditions are |
| ** met: |
| ** * Redistributions of source code must retain the above copyright |
| ** notice, this list of conditions and the following disclaimer. |
| ** * Redistributions in binary form must reproduce the above copyright |
| ** notice, this list of conditions and the following disclaimer in |
| ** the documentation and/or other materials provided with the |
| ** distribution. |
| ** * Neither the name of The Qt Company Ltd nor the names of its |
| ** contributors may be used to endorse or promote products derived |
| ** from this software without specific prior written permission. |
| ** |
| ** |
| ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| //! [QtQuick import] |
| import QtQuick 2.0 |
| //! [QtQuick import] |
| import QtPositioning 5.5 |
| import QtLocation 5.6 |
| |
| Item { |
| width: 400; height: 400; |
| Plugin { |
| id: myPlugin |
| } |
| |
| Place { |
| id: place |
| } |
| |
| //! [Category] |
| Category { |
| id: category |
| |
| plugin: myPlugin |
| name: "New Category" |
| visibility: Category.PrivateVisibility |
| } |
| //! [Category] |
| |
| function saveCategory() { |
| //! [Category save] |
| category.save(); |
| //! [Category save] |
| } |
| |
| //! [CategoryView] |
| ListView { |
| model: CategoryModel { |
| plugin: myPlugin |
| hierarchical: false |
| } |
| delegate: Text { text: category.name } |
| } |
| //! [CategoryView] |
| |
| //! [ExtendedAttributes] |
| ListView { |
| model: place.extendedAttributes.keys() |
| delegate: Text { |
| text: "<b>" + place.extendedAttributes[modelData].label + ": </b>" + |
| place.extendedAttributes[modelData].text |
| } |
| } |
| //! [ExtendedAttributes] |
| |
| //! [ExtendedAttributes read] |
| function printExtendedAttributes(extendedAttributes) { |
| var keys = extendedAttributes.keys(); |
| for (var i = 0; i < keys.length; ++i) { |
| var key = keys[i]; |
| if (extendedAttributes[key].label !== "") |
| console.log(extendedAttributes[key].label + ": " + extendedAttributes[key].text); |
| } |
| } |
| //! [ExtendedAttributes read] |
| |
| function writeExtendedAttributes() { |
| //! [ExtendedAttributes write] |
| //assign a new attribute to a place |
| var smokingAttrib = Qt.createQmlObject('import QtLocation 5.3; PlaceAttribute {}', place); |
| smokingAttrib.label = "Smoking Allowed" |
| smokingAttrib.text = "No" |
| place.extendedAttributes.smoking = smokingAttrib; |
| |
| //modify an existing attribute |
| place.extendedAttributes.smoking.text = "Yes" |
| //! [ExtendedAttributes write] |
| } |
| |
| Icon { |
| id: icon |
| } |
| //! [Icon] |
| Image { |
| source: icon.url(Qt.size(64, 64)) |
| } |
| //! [Icon] |
| |
| Image { |
| //! [Icon default] |
| source: icon.url() |
| //! [Icon default] |
| } |
| |
| //! [SearchSuggestionModel] |
| PlaceSearchSuggestionModel { |
| id: suggestionModel |
| |
| plugin: myPlugin |
| |
| // Brisbane |
| searchArea: QtPositioning.circle(QtPositioning.coordinate(-27.46778, 153.02778)) |
| |
| onSearchTermChanged: update() |
| } |
| |
| ListView { |
| model: suggestionModel |
| delegate: Text { text: suggestion } |
| } |
| //! [SearchSuggestionModel] |
| |
| //! [EditorialModel] |
| EditorialModel { |
| id: editorialModel |
| batchSize: 3 |
| place: place |
| } |
| |
| ListView { |
| model: editorialModel |
| delegate: Item { |
| anchors.fill: parent |
| |
| Column { |
| width: parent.width |
| clip: true |
| |
| Text { |
| text: title |
| width: parent.width |
| wrapMode: Text.WordWrap |
| font.pixelSize: 24 |
| } |
| |
| Text { |
| text: text |
| width: parent.width |
| wrapMode: Text.WordWrap |
| font.pixelSize: 20 |
| } |
| |
| Row { |
| Image { |
| width: 16 |
| height: 16 |
| |
| source: supplier.icon.url(Qt.size(width, height), Icon.List) |
| } |
| |
| Text { |
| text: "Provided by " + supplier.name |
| font.pixelSize: 16 |
| } |
| } |
| |
| Text { |
| text: "Contributed by " + user.name |
| font.pixelSize: 16 |
| } |
| |
| Text { |
| text: attribution |
| font.pixelSize: 8 |
| } |
| } |
| } |
| } |
| //! [EditorialModel] |
| |
| //! [ImageModel] |
| ImageModel { |
| id: imageModel |
| batchSize: 3 |
| place: place |
| } |
| |
| ListView { |
| anchors.top: parent.top |
| width: parent.width |
| spacing: 10 |
| |
| model: imageModel |
| orientation: ListView.Horizontal |
| snapMode: ListView.SnapOneItem |
| |
| delegate: Item { |
| width: listView.width |
| height: listView.height |
| |
| Image { |
| anchors.fill: parent |
| source: url |
| fillMode: Image.PreserveAspectFit |
| } |
| |
| Text { |
| text: supplier.name + "\n" + supplier.url |
| width: parent.width |
| anchors.bottom: parent.bottom |
| } |
| } |
| } |
| //! [ImageModel] |
| |
| //! [Supplier] |
| Supplier { |
| id: placeSupplier |
| name: "Example" |
| url: "http://www.example.com/" |
| } |
| |
| Text { |
| text: "This place is was provided by " + placeSupplier.name + "\n" + placeSupplier.url |
| } |
| //! [Supplier] |
| |
| //! [Ratings] |
| Text { |
| text: "This place is rated " + place.ratings.average + " out of " + place.ratings.maximum + " stars." |
| } |
| //! [Ratings] |
| |
| //! [ContactDetails read] |
| function printContactDetails(contactDetails) { |
| var keys = contactDetails.keys(); |
| for (var i = 0; i < keys.length; ++i) { |
| var contactList = contactDetails[keys[i]]; |
| for (var j = 0; j < contactList.length; ++j) { |
| console.log(contactList[j].label + ": " + contactList[j].value); |
| } |
| } |
| } |
| //! [ContactDetails read] |
| |
| //! [ContactDetails write single] |
| function writeSingle() { |
| var phoneNumber = Qt.createQmlObject('import QtLocation 5.3; ContactDetail {}', place); |
| phoneNumber.label = "Phone"; |
| phoneNumber.value = "555-5555" |
| place.contactDetails.phone = phoneNumber; |
| } |
| //! [ContactDetails write single] |
| |
| //! [ContactDetails write multiple] |
| function writeMultiple() { |
| var bob = Qt.createQmlObject('import QtLocation 5.3; ContactDetail {}', place); |
| bob.label = "Bob"; |
| bob.value = "555-5555" |
| |
| var alice = Qt.createQmlObject('import QtLocation 5.3; ContactDetail {}', place); |
| alice.label = "Alice"; |
| alice.value = "555-8745" |
| |
| var numbers = new Array(); |
| numbers.push(bob); |
| numbers.push(alice); |
| |
| place.contactDetails.phone = numbers; |
| } |
| //! [ContactDetails write multiple] |
| |
| //! [ContactDetails phoneList] |
| ListView { |
| model: place.contactDetails.phone; |
| delegate: Text { text: modelData.label + ": " + modelData.value } |
| } |
| //! [ContactDetails phoneList] |
| |
| //! [Place savePlace def] |
| Place { |
| id: myPlace |
| plugin: myPlugin |
| |
| name: "Brisbane Technology Park" |
| location: Location { |
| address: Address { |
| street: "53 Brandl Street" |
| city: "Eight Mile Plains" |
| postalCode: "4113" |
| country: "Australia" |
| } |
| coordinate { |
| latitude: -27.579646 |
| longitude: 153.100308 |
| } |
| } |
| |
| visibility: Place.PrivateVisibility |
| } |
| //! [Place savePlace def] |
| |
| function fetchDetails() { |
| //! [Place fetchDetails] |
| if (!place.detailsFetched) |
| place.getDetails(); |
| //! [Place fetchDetails] |
| } |
| |
| function savePlace() { |
| //! [Place savePlace] |
| myPlace.save(); |
| //! [Place savePlace] |
| } |
| |
| function createAndSavePlace() { |
| //! [Place createAndSavePlace] |
| //creating and saving a place |
| var place = Qt.createQmlObject('import QtLocation 5.3; Place { }', parent); |
| place.plugin = myPlugin; |
| place.name = "New York"; |
| place.location.coordinate.latitude = 40.7 |
| place.location.coordinate.longitude = -74.0 |
| place.save(); |
| //! [Place createAndSavePlace] |
| } |
| |
| function removePlace() { |
| //! [Place removePlace] |
| //removing a place |
| place.remove(); |
| //! [Place removePlace] |
| } |
| |
| function saveToNewPlugin() { |
| //! [Place save to different plugin] |
| var place = Qt.createQmlObject('import QtLocation 5.3; Place { }', parent); |
| place.plugin = destinationPlugin; |
| place.copyFrom(originalPlace); |
| place.save(); |
| //! [Place save to different plugin] |
| } |
| |
| function getPlaceForId() { |
| //! [Place placeId] |
| place.plugin = myPlugin; |
| place.placeId = "known-place-id"; |
| place.getDetails(); |
| //! [Place placeId] |
| } |
| |
| function primaryContacts() { |
| //! [Place primaryPhone] |
| var primaryPhone; |
| if (place.contactDetails["phone"].length > 0) |
| primaryPhone = place.contactDetails["phone"][0].value; |
| //! [Place primaryPhone] |
| //! [Place primaryFax] |
| var primaryFax; |
| if (place.contactDetails["fax"].length > 0) |
| primaryFax = place.contactDetails["fax"][0].value; |
| //! [Place primaryFax] |
| //! [Place primaryEmail] |
| var primaryEmail; |
| if (place.contactDetails["email"].length > 0) |
| primaryEmail = place.contactDetails["email"][0].value; |
| //! [Place primaryEmail] |
| //! [Place primaryWebsite] |
| var primaryWebsite; |
| if (place.contactDetails["website"].length > 0) |
| primaryWebsite = place.contactDetails["website"][0].value; |
| //! [Place primaryWebsite] |
| } |
| |
| //! [Place favorite] |
| Text { text: place.favorite ? place.favorite.name : place.name } |
| //! [Place favorite] |
| |
| function saveFavorite() { |
| var place = Qt.createQmlObject('import QtLocation 5.3; Place { }', parent); |
| var destinationPlugin |
| //! [Place saveFavorite] |
| place.initializeFavorite(destinationPlugin); |
| //if necessary customizations to the favorite can be made here. |
| //... |
| place.favorite.save(); |
| //! [Place saveFavorite] |
| } |
| |
| function removeFavorite() { |
| var place; |
| //! [Place removeFavorite 1] |
| place.favorite.remove(); |
| //! [Place removeFavorite 1] |
| |
| //! [Place removeFavorite 2] |
| //check successful removal of the favorite by monitoring its status. |
| //once that is done we can assign null to the favorite |
| place.favorite = null; |
| //! [Place removeFavorite 2] |
| } |
| |
| function connectStatusChangedHandler() { |
| //! [Place checkStatus] |
| place.statusChanged.connect(statusChangedHandler); |
| //! [Place checkStatus] |
| } |
| |
| //! [Place checkStatus handler] |
| function statusChangedHandler() { |
| if (statusChangedHandler.prevStatus === Place.Saving) { |
| switch (place.status) { |
| case Place.Ready: |
| console.log('Save successful'); |
| break; |
| case Place.Error: |
| console.log('Save failed'); |
| break; |
| default: |
| break; |
| } |
| } |
| statusChangedHandler.prevStatus = place.status; |
| } |
| //! [Place checkStatus handler] |
| } |