SearchResultDelegate.qml Example File
places/views/SearchResultDelegate.qml
import QtQuick 2.5
import QtLocation 5.6
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.2
import "../helper.js" as Helper
Item {
id: root
signal showPlaceDetails(variant place,variant distance)
signal searchFor(string query)
width: parent.width
height: childrenRect.height
Component {
id: placeComponent
Item {
id: placeRoot
width: root.width
height: Math.max(icon.height, 3 * placeName.height)
Rectangle {
anchors.fill: parent
color: "#44ffffff"
visible: mouse.pressed
}
Rectangle {
anchors.fill: parent
color: "#dbffde"
visible: model.sponsored !== undefined ? model.sponsored : false
Label {
text: qsTr("Sponsored result")
horizontalAlignment: Text.AlignRight
anchors.right: parent.right
anchors.bottom: parent.bottom
font.pixelSize: 8
visible: model.sponsored !== undefined ? model.sponsored : false
}
}
GridLayout {
rows: 2
columns: 2
anchors.fill: parent
anchors.leftMargin: 30
flow: GridLayout.TopToBottom
Image {
id:icon
source: place.favorite ? "../../resources/star.png" : place.icon.url()
Layout.rowSpan: 2
}
Label {
id: placeName
text: place.favorite ? place.favorite.name : place.name
Layout.fillWidth: true
}
Label {
id: distanceText
font.italic: true
text: Helper.formatDistance(distance)
Layout.fillWidth: true
}
}
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: 15
height: 1
color: "#46a2da"
}
MouseArea {
id: mouse
anchors.fill: parent
onClicked: {
if (model.type === undefined || type === PlaceSearchModel.PlaceResult) {
if (!place.detailsFetched)
place.getDetails();
root.showPlaceDetails(model.place, model.distance);
}
}
}
}
}
Component {
id: proposedSearchComponent
Item {
id: proposedSearchRoot
width: root.width
height: Math.max(icon.height, 2 * proposedSearchTitle.height)
Rectangle {
anchors.fill: parent
color: "#11ffffff"
visible: mouse.pressed
}
RowLayout {
anchors.fill: parent
anchors.leftMargin: 30
Image {
source: icon.url()
}
Label {
id: proposedSearchTitle
anchors.verticalCenter: parent.verticalCenter
text: "Search for " + title
}
}
Rectangle {
anchors.left: parent.left
anchors.right: parent.right
anchors.margins: 15
height: 1
color: "#46a2da"
}
MouseArea {
anchors.fill: parent
onClicked: root.ListView.view.model.updateWith(index);
}
}
}
Loader {
anchors.left: parent.left
anchors.right: parent.right
sourceComponent: {
switch (model.type) {
case PlaceSearchModel.PlaceResult:
return placeComponent;
case PlaceSearchModel.ProposedSearchResult:
return proposedSearchComponent;
default:
}
}
}
}