Factor out map marker into its own QML element for reuse
This commit is contained in:
58
src/qml/Component/LocationMapItem.qml
Normal file
58
src/qml/Component/LocationMapItem.qml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2021 Tobias Fella <fella@posteo.de>
|
||||||
|
// SPDX-FileCopyrightText: 2023 Volker Krause <vkrause@kde.org>
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
import QtQuick 2.15
|
||||||
|
import QtQuick.Controls 2.15
|
||||||
|
import QtQuick.Layouts 1.15
|
||||||
|
import QtLocation 5.15
|
||||||
|
import QtPositioning 5.15
|
||||||
|
|
||||||
|
import org.kde.kirigami 2.15 as Kirigami
|
||||||
|
|
||||||
|
import org.kde.neochat 1.0
|
||||||
|
|
||||||
|
/** Location marker for any of the shared location maps. */
|
||||||
|
MapQuickItem {
|
||||||
|
id: root
|
||||||
|
required property real latitude
|
||||||
|
required property real longitude
|
||||||
|
|
||||||
|
required property string asset
|
||||||
|
required property var author
|
||||||
|
|
||||||
|
required property bool isLive
|
||||||
|
|
||||||
|
anchorPoint.x: sourceItem.width / 2
|
||||||
|
anchorPoint.y: sourceItem.height
|
||||||
|
coordinate: QtPositioning.coordinate(root.latitude, root.longitude)
|
||||||
|
autoFadeIn: false
|
||||||
|
sourceItem: Kirigami.Icon {
|
||||||
|
width: height
|
||||||
|
height: Kirigami.Units.iconSizes.huge
|
||||||
|
source: "gps"
|
||||||
|
isMask: true
|
||||||
|
color: root.isLive ? Kirigami.Theme.highlightColor : Kirigami.Theme.disabledTextColor
|
||||||
|
|
||||||
|
Kirigami.Icon {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
anchors.verticalCenterOffset: -parent.height / 8
|
||||||
|
visible: root.asset === "m.pin"
|
||||||
|
width: height
|
||||||
|
height: parent.height / 3 + 1
|
||||||
|
source: "pin"
|
||||||
|
isMask: true
|
||||||
|
color: parent.color
|
||||||
|
}
|
||||||
|
Kirigami.Avatar {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
anchors.verticalCenterOffset: -parent.height / 8
|
||||||
|
visible: root.asset === "m.self"
|
||||||
|
width: height
|
||||||
|
height: parent.height / 3 + 1
|
||||||
|
name: root.author.displayName
|
||||||
|
source: root.author.avatarSource
|
||||||
|
color: root.author.color
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,40 +42,7 @@ TimelineContainer {
|
|||||||
|
|
||||||
MapItemView {
|
MapItemView {
|
||||||
model: liveLocationModel
|
model: liveLocationModel
|
||||||
delegate: MapQuickItem {
|
delegate: LocationMapItem {}
|
||||||
anchorPoint.x: sourceItem.width / 2
|
|
||||||
anchorPoint.y: sourceItem.height
|
|
||||||
coordinate: QtPositioning.coordinate(model.latitude, model.longitude)
|
|
||||||
autoFadeIn: false
|
|
||||||
sourceItem: Kirigami.Icon {
|
|
||||||
width: height
|
|
||||||
height: Kirigami.Units.iconSizes.huge
|
|
||||||
source: "gps"
|
|
||||||
isMask: true
|
|
||||||
color: model.isLive ? Kirigami.Theme.highlightColor : Kirigami.Theme.disabledTextColor
|
|
||||||
|
|
||||||
Kirigami.Icon {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
anchors.verticalCenterOffset: -parent.height / 8
|
|
||||||
visible: model.asset === "m.pin"
|
|
||||||
width: height
|
|
||||||
height: parent.height / 3 + 1
|
|
||||||
source: "pin"
|
|
||||||
isMask: true
|
|
||||||
color: parent.color
|
|
||||||
}
|
|
||||||
Kirigami.Avatar {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
anchors.verticalCenterOffset: -parent.height / 8
|
|
||||||
visible: model.asset === "m.self"
|
|
||||||
width: height
|
|
||||||
height: parent.height / 3 + 1
|
|
||||||
name: model.author.displayName
|
|
||||||
source: model.author.avatarSource
|
|
||||||
color: model.author.color
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TapHandler {
|
TapHandler {
|
||||||
|
|||||||
@@ -52,43 +52,12 @@ TimelineContainer {
|
|||||||
plugin: OsmLocationPlugin.plugin
|
plugin: OsmLocationPlugin.plugin
|
||||||
onCopyrightLinkActivated: Qt.openUrlExternally(link)
|
onCopyrightLinkActivated: Qt.openUrlExternally(link)
|
||||||
|
|
||||||
|
LocationMapItem {
|
||||||
MapQuickItem {
|
latitude: root.latitude
|
||||||
id: point
|
longitude: root.longitude
|
||||||
|
asset: root.asset
|
||||||
anchorPoint.x: sourceItem.width / 2
|
author: root.author
|
||||||
anchorPoint.y: sourceItem.height
|
isLive: true
|
||||||
coordinate: QtPositioning.coordinate(root.latitude, root.longitude)
|
|
||||||
autoFadeIn: false
|
|
||||||
|
|
||||||
sourceItem: Kirigami.Icon {
|
|
||||||
width: height
|
|
||||||
height: Kirigami.Units.iconSizes.huge
|
|
||||||
source: "gps"
|
|
||||||
isMask: true
|
|
||||||
color: Kirigami.Theme.highlightColor
|
|
||||||
|
|
||||||
Kirigami.Icon {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
anchors.verticalCenterOffset: -parent.height / 8
|
|
||||||
visible: root.asset === "m.pin"
|
|
||||||
width: height
|
|
||||||
height: parent.height / 3 + 1
|
|
||||||
source: "pin"
|
|
||||||
isMask: true
|
|
||||||
color: Kirigami.Theme.highlightColor
|
|
||||||
}
|
|
||||||
Kirigami.Avatar {
|
|
||||||
anchors.centerIn: parent
|
|
||||||
anchors.verticalCenterOffset: -parent.height / 8
|
|
||||||
visible: root.asset === "m.self"
|
|
||||||
width: height
|
|
||||||
height: parent.height / 3 + 1
|
|
||||||
name: root.author.displayName
|
|
||||||
source: root.author.avatarSource
|
|
||||||
color: root.author.color
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TapHandler {
|
TapHandler {
|
||||||
|
|||||||
@@ -130,5 +130,6 @@
|
|||||||
<file alias="LiveLocationDelegate.qml">qml/Component/Timeline/LiveLocationDelegate.qml</file>
|
<file alias="LiveLocationDelegate.qml">qml/Component/Timeline/LiveLocationDelegate.qml</file>
|
||||||
<file alias="FullScreenMap.qml">qml/Component/FullScreenMap.qml</file>
|
<file alias="FullScreenMap.qml">qml/Component/FullScreenMap.qml</file>
|
||||||
<file alias="LocationsPage.qml">qml/Component/LocationPage.qml</file>
|
<file alias="LocationsPage.qml">qml/Component/LocationPage.qml</file>
|
||||||
|
<file alias="LocationMapItem.qml">qml/Component/LocationMapItem.qml</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
Reference in New Issue
Block a user