Warning, /libraries/kosmindoormap/src/app/IndoorMapInfoSheet.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 import QtQuick
0008 import QtQuick.Layouts
0009 import QtQuick.Controls as QQC2
0010 import org.kde.kirigami as Kirigami
0011 import org.kde.kosmindoormap
0012 import org.kde.osm.editorcontroller
0013 
0014 Kirigami.OverlaySheet {
0015     id: elementDetailsSheet
0016     property var model
0017     property var mapData
0018 
0019     header: Column {
0020         Kirigami.Heading {
0021             text: elementDetailsSheet.model.name
0022         }
0023         Kirigami.Heading {
0024             text: elementDetailsSheet.model.category
0025             level: 4
0026             visible: text != ""
0027         }
0028     }
0029 
0030     ListView {
0031         id: contentView
0032         model: elementDetailsSheet.model
0033         clip: true
0034         Layout.preferredWidth: Kirigami.Units.gridUnit * 25
0035 
0036         Component {
0037             id: infoStringDelegate
0038             RowLayout {
0039                 x: Kirigami.Units.largeSpacing
0040                 width: parent.ListView.view.width - 2 * x
0041                 QQC2.Label {
0042                     visible: row && row.keyLabel != ""
0043                     text: row ? row.keyLabel + ":" : ""
0044                     color: (row && row.category == OSMElementInformationModel.DebugCategory) ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0045                     Layout.alignment: Qt.AlignTop
0046                 }
0047                 QQC2.Label {
0048                     text: row ? row.value : ""
0049                     color: (row && row.category == OSMElementInformationModel.DebugCategory) ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0050                     wrapMode: Text.WordWrap
0051                     Layout.fillWidth: true
0052                 }
0053             }
0054         }
0055 
0056         Component {
0057             id: infoLinkDelegate
0058             RowLayout {
0059                 x: Kirigami.Units.largeSpacing
0060                 width: parent.ListView.view.width - 2 * x
0061                 QQC2.Label {
0062                     visible: row && row.keyLabel != ""
0063                     text: row ? row.keyLabel + ":" : ""
0064                     color: (row && row.category == OSMElementInformationModel.DebugCategory) ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0065                     Layout.alignment: Qt.AlignTop
0066                 }
0067                 QQC2.Label {
0068                     text: row ? "<a href=\"" + row.url + "\">" + row.value + "</a>" : ""
0069                     color: (row && row.category == OSMElementInformationModel.DebugCategory) ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0070                     onLinkActivated: Qt.openUrlExternally(link)
0071                     wrapMode: Text.WordWrap
0072                     Layout.fillWidth: true
0073                 }
0074             }
0075         }
0076 
0077         Component {
0078             id: infoAddressDelegate
0079             QQC2.Label {
0080                 x: Kirigami.Units.largeSpacing
0081                 width: parent.ListView.view.width - 2 * x
0082                 text: (row.value.street + " " + row.value.houseNumber + "\n" + row.value.postalCode + " " + row.value.city + "\n" + row.value.country).trim()
0083             }
0084         }
0085 
0086         Component {
0087             id: infoOpeningHoursDelegate
0088             IndoorMapInfoSheetOpeningHoursDelegate {
0089                 x: Kirigami.Units.largeSpacing
0090                 width: parent.ListView.view.width - 2 * x
0091                 mapData: elementDetailsSheet.mapData
0092                 model: row
0093             }
0094         }
0095 
0096         section.property: "categoryLabel"
0097         section.delegate: Kirigami.Heading {
0098             x: Kirigami.Units.largeSpacing
0099             level: 4
0100             text: section
0101             color: section == "Debug" ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0102             height: implicitHeight + Kirigami.Units.largeSpacing
0103             verticalAlignment: Qt.AlignBottom
0104         }
0105         section.criteria: ViewSection.FullString
0106         section.labelPositioning: ViewSection.InlineLabels
0107 
0108         delegate: Loader {
0109             property var row: model
0110             sourceComponent: {
0111                 switch (row.type) {
0112                     case OSMElementInformationModel.Link:
0113                         return infoLinkDelegate;
0114                     case OSMElementInformationModel.PostalAddress:
0115                         return infoAddressDelegate;
0116                     case OSMElementInformationModel.OpeningHoursType:
0117                         return infoOpeningHoursDelegate;
0118                     case OSMElementInformationModel.String:
0119                     default:
0120                         return infoStringDelegate;
0121                 }
0122             }
0123         }
0124     }
0125 
0126     footer: RowLayout {
0127         Item { Layout.fillWidth: true }
0128         QQC2.Button {
0129             icon.name: "document-edit"
0130             text: "Edit with iD"
0131             onClicked: EditorController.editElement(elementDetailsSheet.model.element.element, Editor.ID)
0132         }
0133         QQC2.Button {
0134             icon.name: "org.openstreetmap.josm"
0135             text: "Edit with JOSM"
0136             visible: EditorController.hasEditor(Editor.JOSM)
0137             onClicked: EditorController.editElement(elementDetailsSheet.model.element.element, Editor.JOSM)
0138         }
0139         QQC2.Button {
0140             icon.name: "document-edit"
0141             text: "Edit with Vespucci"
0142             visible: EditorController.hasEditor(Editor.Vespucci)
0143             onClicked: EditorController.editElement(elementDetailsSheet.model.element.element, Editor.Vespucci)
0144         }
0145     }
0146 
0147     onClosed: elementDetailsSheet.model.clear()
0148 }