mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	showMap() uses a location to open Google Maps in a browser. Make showMap() a generic function to push the mapPage on the view stack. Update the calls to this function from child widgets and pages. Also either call mapPage.centerOnLocation() or mapPage.centerOnDiveSiteUUID() depending if the caller wants the map to center on a dive site or on map coordinates. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
		
			
				
	
	
		
			404 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			QML
		
	
	
	
	
	
			
		
		
	
	
			404 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			QML
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0
 | 
						|
import QtQuick 2.6
 | 
						|
/*
 | 
						|
import QtWebView 1.0
 | 
						|
*/
 | 
						|
import QtQuick.Dialogs 1.2
 | 
						|
import QtQuick.Layouts 1.2
 | 
						|
import QtQuick.Controls 2.2 as Controls
 | 
						|
import org.subsurfacedivelog.mobile 1.0
 | 
						|
import org.kde.kirigami 2.2 as Kirigami
 | 
						|
 | 
						|
Item {
 | 
						|
	id: detailsView
 | 
						|
	property real gridWidth: detailsView.width - 2 * Kirigami.Units.gridUnit
 | 
						|
	property real col1Width: gridWidth * 0.40
 | 
						|
	property real col2Width: gridWidth * 0.30
 | 
						|
	property real col3Width: gridWidth * 0.30
 | 
						|
 | 
						|
	width: diveDetailsPage.width - diveDetailsPage.leftPadding - diveDetailsPage.rightPadding
 | 
						|
	height: divePlate.implicitHeight + bottomLayout.implicitHeight + Kirigami.Units.iconSizes.large
 | 
						|
	Rectangle {
 | 
						|
		z: 99
 | 
						|
		color: Kirigami.Theme.textColor
 | 
						|
		opacity: 0.3
 | 
						|
		width: Kirigami.Units.smallSpacing/4
 | 
						|
		anchors {
 | 
						|
			right: parent.right
 | 
						|
			top: parent.top
 | 
						|
			bottom: parent.bottom
 | 
						|
		}
 | 
						|
	}
 | 
						|
	Item {
 | 
						|
		id: divePlate
 | 
						|
		width: parent.width - Kirigami.Units.gridUnit
 | 
						|
		height: childrenRect.height - Kirigami.Units.smallSpacing
 | 
						|
		anchors.left: parent.left
 | 
						|
		Controls.Label {
 | 
						|
			id: locationText
 | 
						|
			text: dive.location
 | 
						|
			font.weight: Font.Bold
 | 
						|
			font.pointSize: subsurfaceTheme.titlePointSize
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			color: Kirigami.Theme.textColor
 | 
						|
			anchors {
 | 
						|
				left: parent.left
 | 
						|
				top: parent.top
 | 
						|
				right: gpsButton.left
 | 
						|
				margins: Math.round(Kirigami.Units.gridUnit / 2)
 | 
						|
			}
 | 
						|
			MouseArea {
 | 
						|
				anchors.fill: parent
 | 
						|
				enabled: dive.gps_decimal !== ""
 | 
						|
				onClicked: {
 | 
						|
					showMap()
 | 
						|
					mapPage.centerOnDiveSiteUUID(dive.dive_site_uuid)
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
		SsrfButton {
 | 
						|
			id: gpsButton
 | 
						|
			anchors.right: parent.right
 | 
						|
			enabled: dive.gps !== ""
 | 
						|
			text: qsTr("Map it")
 | 
						|
			onClicked: {
 | 
						|
				showMap()
 | 
						|
				mapPage.centerOnDiveSiteUUID(dive.dive_site_uuid)
 | 
						|
			}
 | 
						|
		}
 | 
						|
		Row {
 | 
						|
			id: dateRow
 | 
						|
			anchors {
 | 
						|
				left: locationText.left
 | 
						|
				top: locationText.bottom
 | 
						|
				topMargin: Kirigami.Units.smallSpacing
 | 
						|
				bottom: numberText.bottom
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
			Controls.Label {
 | 
						|
				text: dive.date + " " + dive.time
 | 
						|
				width: Math.max(locationText.width * 0.45, paintedWidth)
 | 
						|
				font.pointSize: subsurfaceTheme.smallPointSize
 | 
						|
				color: subsurfaceTheme.textColor
 | 
						|
			}
 | 
						|
			// let's try to show the depth / duration very compact
 | 
						|
			Controls.Label {
 | 
						|
				text: dive.depth + ' / ' + dive.duration
 | 
						|
				width: Math.max(Kirigami.Units.gridUnit * 3, paintedWidth)
 | 
						|
				font.pointSize: subsurfaceTheme.smallPointSize
 | 
						|
				color: subsurfaceTheme.textColor
 | 
						|
			}
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			id: numberText
 | 
						|
			text: "#" + dive.number
 | 
						|
			font.pointSize: subsurfaceTheme.smallPointSize
 | 
						|
			color: subsurfaceTheme.textColor
 | 
						|
			anchors {
 | 
						|
				right: parent.right
 | 
						|
				top: locationText.bottom
 | 
						|
				topMargin: Kirigami.Units.smallSpacing
 | 
						|
			}
 | 
						|
		}
 | 
						|
		Row {
 | 
						|
			anchors {
 | 
						|
				left: dateRow.left
 | 
						|
				top: numberText.bottom
 | 
						|
				topMargin: Kirigami.Units.smallSpacing
 | 
						|
			}
 | 
						|
			Controls.Label {
 | 
						|
				id: ratingText
 | 
						|
				text: qsTr("Rating:")
 | 
						|
				font.pointSize: subsurfaceTheme.smallPointSize
 | 
						|
				color: subsurfaceTheme.textColor
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: ratingText.verticalCenter 
 | 
						|
				source: (dive.rating >= 1) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: ratingText.verticalCenter 
 | 
						|
				source: (dive.rating >= 2) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: ratingText.verticalCenter 
 | 
						|
				source: (dive.rating >= 3) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: ratingText.verticalCenter 
 | 
						|
				source: (dive.rating >= 4) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: ratingText.verticalCenter 
 | 
						|
				source: (dive.rating === 5) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
		}
 | 
						|
		Row {
 | 
						|
			anchors {
 | 
						|
				right: numberText.right
 | 
						|
				top: numberText.bottom
 | 
						|
				topMargin: Kirigami.Units.smallSpacing
 | 
						|
			}
 | 
						|
			Controls.Label {
 | 
						|
				id: visibilityText
 | 
						|
				text: qsTr("Visibility:")
 | 
						|
				font.pointSize: subsurfaceTheme.smallPointSize
 | 
						|
				color: subsurfaceTheme.textColor
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: visibilityText.verticalCenter 
 | 
						|
				source: (dive.visibility >= 1) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: visibilityText.verticalCenter 
 | 
						|
				source: (dive.visibility >= 2) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}	
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: visibilityText.verticalCenter 
 | 
						|
				source: (dive.visibility >= 3) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: visibilityText.verticalCenter 
 | 
						|
				source: (dive.visibility >= 4) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
			Kirigami.Icon {
 | 
						|
				width: height
 | 
						|
				height: subsurfaceTheme.regularPointSize
 | 
						|
				anchors.verticalCenter: visibilityText.verticalCenter 
 | 
						|
				source: (dive.visibility === 5) ? "icons/ic_star.svg" : "icons/ic_star_border.svg"
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
	GridLayout {
 | 
						|
		id: bottomLayout
 | 
						|
		anchors {
 | 
						|
			top: divePlate.bottom
 | 
						|
			left: parent.left
 | 
						|
			right: parent.right
 | 
						|
			margins: Math.round(Kirigami.Units.gridUnit / 2)
 | 
						|
			topMargin: Kirigami.Units.gridUnit
 | 
						|
		}
 | 
						|
		columns: 3
 | 
						|
		rowSpacing: Kirigami.Units.smallSpacing * 2
 | 
						|
		columnSpacing: Kirigami.Units.smallSpacing
 | 
						|
 | 
						|
		QMLProfile {
 | 
						|
			id: qmlProfile
 | 
						|
			visible: !dive.noDive
 | 
						|
			Layout.fillWidth: true
 | 
						|
			Layout.preferredHeight: Layout.minimumHeight
 | 
						|
			Layout.minimumHeight: width * 0.75
 | 
						|
			Layout.columnSpan: 3
 | 
						|
			clip: false
 | 
						|
			Rectangle {
 | 
						|
				color: "transparent"
 | 
						|
				opacity: 0.6
 | 
						|
				border.width: 1
 | 
						|
				border.color: subsurfaceTheme.primaryColor
 | 
						|
				anchors.fill: parent
 | 
						|
			}
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			id: noProfile
 | 
						|
			visible: dive.noDive
 | 
						|
			Layout.fillWidth: true
 | 
						|
			Layout.columnSpan: 3
 | 
						|
			Layout.margins: Kirigami.Units.gridUnit
 | 
						|
			horizontalAlignment: Text.AlignHCenter
 | 
						|
			text: qsTr("No profile to show")
 | 
						|
		}
 | 
						|
 | 
						|
		// first row
 | 
						|
		//-----------
 | 
						|
		Controls.Label {
 | 
						|
			text: qsTr("Suit:")
 | 
						|
			opacity: 0.6
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col1Width
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			text: qsTr("Air Temp:")
 | 
						|
			opacity: 0.6
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col2Width
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			text: qsTr("Water Temp:")
 | 
						|
			opacity: 0.6
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col3Width
 | 
						|
		}
 | 
						|
 | 
						|
		// second row
 | 
						|
		//------------
 | 
						|
		Controls.Label {
 | 
						|
			id: txtSuit
 | 
						|
			text: dive.suit
 | 
						|
			wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col1Width
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			id: txtAirTemp
 | 
						|
			text: dive.airTemp
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col2Width
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			id: txtWaterTemp
 | 
						|
			text: dive.waterTemp
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col3Width
 | 
						|
		}
 | 
						|
 | 
						|
		Rectangle {
 | 
						|
			color: subsurfaceTheme.primaryColor
 | 
						|
			height: 1
 | 
						|
			opacity: 0.5
 | 
						|
			Layout.columnSpan: 3
 | 
						|
			Layout.fillWidth: true
 | 
						|
		}
 | 
						|
 | 
						|
		// thrid row
 | 
						|
		//------------
 | 
						|
		Controls.Label {
 | 
						|
			text: qsTr("Cylinder:")
 | 
						|
			opacity: 0.6
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col1Width
 | 
						|
			Layout.bottomMargin: 0
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			text: qsTr("Weight:")
 | 
						|
			opacity: 0.6
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col2Width
 | 
						|
			Layout.bottomMargin: 0
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			text: qsTr("SAC:")
 | 
						|
			opacity: 0.6
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col3Width
 | 
						|
			Layout.bottomMargin: 0
 | 
						|
		}
 | 
						|
 | 
						|
		// fourth row
 | 
						|
		//------------
 | 
						|
		Controls.Label {
 | 
						|
			id: txtCylinder
 | 
						|
			text: dive.getCylinder
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col1Width
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			id: txtWeight
 | 
						|
			text: dive.sumWeight
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col2Width
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			id: txtSAC
 | 
						|
			text: dive.sac
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col3Width
 | 
						|
		}
 | 
						|
 | 
						|
		Rectangle {
 | 
						|
			color: subsurfaceTheme.primaryColor
 | 
						|
			height: 1
 | 
						|
			opacity: 0.5
 | 
						|
			Layout.columnSpan: 3
 | 
						|
			Layout.fillWidth: true
 | 
						|
		}
 | 
						|
 | 
						|
		// fifth row
 | 
						|
		//-----------
 | 
						|
		Controls.Label {
 | 
						|
			text: qsTr("Divemaster:")
 | 
						|
			opacity: 0.6
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col1Width
 | 
						|
			Layout.bottomMargin: 0
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			text: qsTr("Buddy:")
 | 
						|
			opacity: 0.6
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.columnSpan: 2
 | 
						|
			Layout.maximumWidth: detailsView.col2Width + detailsView.col3Width
 | 
						|
			Layout.bottomMargin: 0
 | 
						|
		}
 | 
						|
 | 
						|
		// sixth row
 | 
						|
		//-----------
 | 
						|
		Controls.Label {
 | 
						|
			id: txtDiveMaster
 | 
						|
			text: dive.divemaster
 | 
						|
			wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.maximumWidth: detailsView.col1Width
 | 
						|
		}
 | 
						|
		Controls.Label {
 | 
						|
			id: txtBuddy
 | 
						|
			text: dive.buddy
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.columnSpan: 2
 | 
						|
			Layout.maximumWidth: detailsView.col2Width + detailsView.col3Width
 | 
						|
		}
 | 
						|
 | 
						|
		Rectangle {
 | 
						|
			color: subsurfaceTheme.primaryColor
 | 
						|
			height: 1
 | 
						|
			opacity: 0.5
 | 
						|
			Layout.columnSpan: 3
 | 
						|
			Layout.fillWidth: true
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		Controls.Label {
 | 
						|
			Layout.fillWidth: true
 | 
						|
			opacity: 0.6
 | 
						|
			text: qsTr("Notes")
 | 
						|
			wrapMode: Text.WrapAtWordBoundaryOrAnywhere
 | 
						|
			Layout.columnSpan: 3
 | 
						|
		}
 | 
						|
 | 
						|
		Controls.Label {
 | 
						|
			id: txtNotes
 | 
						|
			text: dive.notes
 | 
						|
			focus: true
 | 
						|
			Layout.columnSpan: 3
 | 
						|
			Layout.fillWidth: true
 | 
						|
			wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
 | 
						|
		}
 | 
						|
		Item {
 | 
						|
			Layout.columnSpan: 3
 | 
						|
			Layout.fillWidth: true
 | 
						|
			Layout.minimumHeight: Kirigami.Units.gridUnit * 6
 | 
						|
		}
 | 
						|
		Component.onCompleted: {
 | 
						|
			qmlProfile.setMargin(Kirigami.Units.smallSpacing)
 | 
						|
			qmlProfile.diveId = model.dive.id;
 | 
						|
			qmlProfile.update();
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |