summaryrefslogtreecommitdiffstats
path: root/examples/location/places/content/places/PlaceDialog.qml
diff options
context:
space:
mode:
Diffstat (limited to 'examples/location/places/content/places/PlaceDialog.qml')
-rw-r--r--examples/location/places/content/places/PlaceDialog.qml362
1 files changed, 362 insertions, 0 deletions
diff --git a/examples/location/places/content/places/PlaceDialog.qml b/examples/location/places/content/places/PlaceDialog.qml
new file mode 100644
index 00000000..ed08716d
--- /dev/null
+++ b/examples/location/places/content/places/PlaceDialog.qml
@@ -0,0 +1,362 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** 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 Digia Plc and its Subsidiary(-ies) 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$
+**
+****************************************************************************/
+
+import QtQuick 2.0
+import QtLocation 5.0
+import QtLocation.examples 5.0
+
+Dialog {
+ id: root
+ property list<Category> __categories
+ property Place locationPlace
+ property bool __createdPlace: false
+
+ signal completed;
+
+ function prepareDialog(inputPlace) {
+ if (!inputPlace) {
+ locationPlace = Qt.createQmlObject('import QtLocation 5.0; Place { }', root);
+ __createdPlace = true;
+ } else {
+ locationPlace = inputPlace;
+ __createdPlace = false;
+ }
+
+ setDataFields([
+ ["Name", locationPlace ? locationPlace.name : ""],
+ ["Street", locationPlace ? locationPlace.location.address.street : ""],
+ ["District", locationPlace ? locationPlace.location.address.district : ""],
+ ["City", locationPlace ? locationPlace.location.address.city : ""],
+ ["County", locationPlace ? locationPlace.location.address.county : ""],
+ ["State", locationPlace ? locationPlace.location.address.state : ""],
+ ["Country code", locationPlace ? locationPlace.location.address.countryCode : ""],
+ ["Country", locationPlace ? locationPlace.location.address.country : ""],
+ ["Postal code", locationPlace ? locationPlace.location.address.postalCode : ""],
+ ["Latitude", locationPlace ? locationPlace.location.coordinate.latitude.toString() : ""],
+ ["Longitude", locationPlace ? locationPlace.location.coordinate.longitude.toString() : ""],
+ ["Phone", locationPlace ? locationPlace.primaryPhone : ""],
+ ["Fax", locationPlace ? locationPlace.primaryFax : ""],
+ ["Email", locationPlace ? locationPlace.primaryEmail : ""],
+ ["Website", locationPlace ? locationPlace.primaryWebsite.toString() : ""]
+ ]);
+
+ __categories = locationPlace ? locationPlace.categories : new Array()
+ }
+
+ function setDataFields(objects)
+ {
+ dataFieldsModel.clear();
+ for (var i = 0; i < objects.length; i++)
+ dataFieldsModel.append({"labelText": objects[i][0], "inputText": objects[i][1]})
+ }
+
+ function processStatus() {
+ if (processStatus.prevStatus == Place.Saving) {
+ switch (locationPlace.status) {
+ case Place.Ready:
+ if (__createdPlace) {
+ locationPlace.destroy();
+ __createdPlace = false;
+ processStatus.prevStatus = null;
+ }
+ completed();
+ break;
+ case Place.Error:
+ console.log("Save failed:" + locationPlace.errorString());
+ errorDialog.text = locationPlace.errorString();
+ errorDialog.opacity = 1;
+ break;
+ }
+ }
+
+ processStatus.prevStatus = locationPlace.status;
+ }
+
+ Behavior on opacity { NumberAnimation { duration: 500 } }
+
+ ErrorDialog {
+ id: errorDialog
+ title: "Save Place Failed"
+ }
+
+ onGoButtonClicked: {
+ if (locationPlace.status == Place.Saving)
+ return;
+//! [Place save]
+ locationPlace.plugin = placesPlugin;
+
+ locationPlace.name = dataFieldsModel.get(0).inputText;
+ locationPlace.location.address.street = dataFieldsModel.get(1).inputText;
+ locationPlace.location.address.district = dataFieldsModel.get(2).inputText;
+ locationPlace.location.address.city = dataFieldsModel.get(3).inputText;
+ locationPlace.location.address.county = dataFieldsModel.get(4).inputText;
+ locationPlace.location.address.state = dataFieldsModel.get(5).inputText;
+ locationPlace.location.address.countryCode = dataFieldsModel.get(6).inputText;
+ locationPlace.location.address.country = dataFieldsModel.get(7).inputText;
+ locationPlace.location.address.postalCode = dataFieldsModel.get(8).inputText;
+
+ var c = QtPositioning.coordinate(parseFloat(dataFieldsModel.get(9).inputText),
+ parseFloat(dataFieldsModel.get(10).inputText));
+ locationPlace.location.coordinate = c;
+ var phone = Qt.createQmlObject('import QtLocation 5.0; ContactDetail { }', locationPlace);
+ phone.label = "Phone";
+ phone.value = dataFieldsModel.get(11).inputText;
+ locationPlace.contactDetails.phone = phone;
+
+ var fax = Qt.createQmlObject('import QtLocation 5.0; ContactDetail { }', locationPlace);
+ fax.label = "Fax";
+ fax.value = dataFieldsModel.get(12).inputText;
+ locationPlace.contactDetails.fax = fax;
+
+ var email = Qt.createQmlObject('import QtLocation 5.0; ContactDetail { }', locationPlace);
+ email.label = "Email";
+ email.value = dataFieldsModel.get(13).inputText;
+ locationPlace.contactDetails.email = email;
+
+ var website = Qt.createQmlObject('import QtLocation 5.0; ContactDetail { }', locationPlace);
+ website.label = "Website";
+ website.value = dataFieldsModel.get(14).inputText;
+ locationPlace.contactDetails.website = website;
+
+ locationPlace.categories = __categories;
+ locationPlace.statusChanged.connect(processStatus);
+ locationPlace.save();
+//! [Place save]
+ }
+
+ onClearButtonClicked: {
+ for (var i = 0; i < dataFieldsModel.count; i++)
+ dataFieldsModel.set(i, {"inputText": ""});
+ __categories = new Array();
+ }
+
+ onCancelButtonClicked: {
+ if (locationPlace && __createdPlace)
+ locationPlace.destroy();
+ }
+
+ onOpacityChanged: {
+ if (opacity == 0)
+ view.currentIndex = 0
+ }
+
+ ListModel {
+ id: dataFieldsModel
+ }
+
+ item: ListView {
+ id: view
+
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: 10
+
+ implicitHeight: flickable.contentHeight
+
+ spacing: gap/2
+ orientation: ListView.Horizontal
+ interactive: false
+
+ model: VisualItemModel {
+ Item {
+ id: firstPage
+ width: view.width
+ height: view.height
+
+ Flickable {
+ id: flickable
+ anchors.top: parent.top
+ anchors.topMargin: gap/2
+ anchors.bottomMargin: gap/2
+ height: parent.height
+ width: parent.width
+ interactive: height < contentHeight
+ contentWidth: parent.width
+ contentHeight:col.height
+
+ clip: true
+
+ Column {
+ id: col
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: parent.width - gap
+ spacing: gap/2
+
+ Repeater {
+ id: dataFields
+ model: dataFieldsModel
+
+ TextWithLabel {
+ anchors.leftMargin: gap/2
+ anchors.rightMargin: gap/2
+
+ width: parent ? parent.width : 0
+ labelWidth: 95
+ label: labelText
+ text: inputText
+
+ onTextChanged: dataFieldsModel.set(index, {"inputText": text})
+ }
+ }
+
+ Group {
+ id: categoriesHeading
+ width: parent.width
+ anchors.topMargin: gap
+
+ text: qsTr("Categories");
+ }
+
+ Repeater {
+ model: __categories
+ width: parent.width
+
+ delegate: Item {
+ height: cross.height
+ width: parent.width
+
+ Text {
+ id: categoryName
+
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ verticalAlignment: Text.AlignVCenter
+ text: model.modelData.name
+ }
+
+ IconButton {
+ id: cross
+
+ anchors.top: parent.top
+ anchors.right: parent.right
+ source: "../../resources/cross.png"
+ hoveredSource: "../../resources/cross_hovered.png"
+ pressedSource: "../../resources/cross_pressed.png"
+
+ onClicked: {
+ var cats = new Array();
+ for (var i =0; i < __categories.length; ++i) {
+ if (__categories[i].name != model.modelData.name)
+ cats.push(__categories[i]);
+ }
+ __categories = cats
+ }
+ }
+ }
+ }
+
+ Button {
+ text: qsTr("Add Category")
+ onClicked: view.currentIndex = 1
+ }
+ }
+ }
+
+ Rectangle {
+ id: scrollbar
+ anchors.right: flickable.right
+ y: {
+ var yPosition = flickable.visibleArea.yPosition
+ if (yPosition < 0)
+ yPosition = 0
+ if (yPosition > (1.0 - flickable.visibleArea.heightRatio))
+ yPosition = (1.0 - flickable.visibleArea.heightRatio)
+ yPosition *flickable.height
+ }
+
+ width: 10
+ height: flickable.visibleArea.heightRatio * flickable.height
+ color: "gray"
+ radius: 5
+ }
+
+ }
+
+ Item {
+ height:view.height
+ width: view.width
+
+ Group {
+ id: chooseCategoryHeading
+
+ anchors.top: parent.top
+ width: parent.width
+ text: qsTr("Choose Category");
+ }
+
+ CategoryView {
+ id: categoryView
+
+ anchors.top: chooseCategoryHeading.bottom
+ anchors.bottom: categoryCancel.top
+ width: parent.width
+
+ showSave: false
+ showRemove: false
+ showChildren: false
+
+ onCategoryClicked: {
+ var categoriesList = new Array();
+ var alreadyExists = false;
+ for (var i = 0; i < __categories.length; ++i) {
+ categoriesList.push(__categories[i]);
+ if (__categories[i].categoryId == category.categoryId)
+ alreadyExists = true;
+ }
+
+ if (!alreadyExists)
+ categoriesList.push(category);
+ __categories = categoriesList
+ view.currentIndex = 0;
+ }
+ }
+
+ Button {
+ id: categoryCancel
+
+ anchors.bottom: parent.bottom
+ text: qsTr("Cancel ")
+ onClicked: view.currentIndex = 0
+ }
+ }
+ }
+ }
+}