qtdoc/examples/demos/lightningviewer/LightningViewer/ActionsLayer.qml

178 lines
4.8 KiB
QML

// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtLocation
import QtQuick.Layouts
import QtQuick.Controls
Item {
id: actionsLayer
property alias mapType: switchMap.mapType
property bool distanceLayerVisible: false
property bool lightningLayerVisible: false
signal recenterRequested();
GridLayout {
anchors.fill: parent
anchors.leftMargin: 15
anchors.rightMargin: 15
columns: 3
rows: 3
visible: LightningViewConfig.isLandscape
LayoutItemProxy { target: switchMap }
Item {
Layout.columnSpan: 2
Layout.fillWidth: true
}
Item {
Layout.columnSpan: 3
Layout.fillHeight: true
}
MapLayersItem {
id: mapLayersItem
mapActionButton: mapLayersButtonComponent
onVisibleChanged: {
if (!visible && opened)
close();
}
}
Item { Layout.fillWidth: true }
LayoutItemProxy { target: recenterButton }
}
GridLayout {
anchors.right: parent.right
anchors.top: parent.top
anchors.margins: 15
height: parent.height
width: 60
rowSpacing: 15
columns: 1
rows: 5
visible: LightningViewConfig.isPortrait
Item {
Layout.fillHeight: true
Layout.fillWidth: true
}
Loader {
width: 60
height: 60
Layout.alignment: Qt.AlignHCenter
sourceComponent: mapLayersButtonComponent
}
LayoutItemProxy { target: recenterButton }
LayoutItemProxy { target: switchMap; Layout.topMargin: -10 }
Item {
Layout.fillHeight: true
Layout.fillWidth: true
}
}
Component {
id: mapLayersButtonComponent
Button {
icon.source: "icons/map-layers.svg"
icon.color: !enabled ? "#808080" : checked ? "#80EBB6" : "#2CDE85"
icon.width: 24
icon.height: 24
checked: mapLayersButtonConfig.checked
onClicked: mapLayersButtonConfig.clicked()
}
}
QtObject {
id: mapLayersButtonConfig
property bool checked: false
signal clicked()
}
Button {
id: recenterButton
Layout.alignment: Qt.AlignHCenter
icon.source: "icons/recenter.svg"
icon.color: !enabled ? "#808080" : checked ? "#80EBB6" : "#2CDE85"
icon.width: 24
icon.height: 24
onClicked: actionsLayer.recenterRequested();
}
SwitchMap { id: switchMap }
MapLayersDrawer {
id: drawer
parent: Overlay.overlay
anchors.left: parent.left
anchors.bottom: parent.bottom
width: parent.width
height: 200
dragMargin: 30
onVisibleChanged: {
if (!visible && opened)
close();
}
visible: LightningViewConfig.isPortrait
}
states: [
State {
when: LightningViewConfig.isLandscape
PropertyChanges {
target: switchMap
orientation: Qt.Horizontal
}
PropertyChanges {
target: mapLayersButtonConfig
checked: mapLayersItem.opened
onClicked: mapLayersItem.toggle()
}
},
State {
when: LightningViewConfig.isPortrait
PropertyChanges {
target: switchMap
orientation: Qt.Vertical
}
PropertyChanges {
target: mapLayersButtonConfig
checked: drawer.opened
onClicked: drawer.toggle()
}
}
]
Binding {
mapLayersItem.lightningLayerVisible: actionsLayer.lightningLayerVisible
mapLayersItem.distanceLayerVisible: actionsLayer.distanceLayerVisible
drawer.lightningLayerVisible: actionsLayer.lightningLayerVisible
drawer.distanceLayerVisible: actionsLayer.distanceLayerVisible
}
Connections {
target: mapLayersItem
function onLightningLayerVisibleChanged() {
actionsLayer.lightningLayerVisible = mapLayersItem.lightningLayerVisible
}
function onDistanceLayerVisibleChanged() {
actionsLayer.distanceLayerVisible = mapLayersItem.distanceLayerVisible
}
}
Connections {
target: drawer
function onLightningLayerVisibleChanged() {
actionsLayer.lightningLayerVisible = drawer.lightningLayerVisible
}
function onDistanceLayerVisibleChanged() {
actionsLayer.distanceLayerVisible = drawer.distanceLayerVisible
}
}
}