split divedetails into view and edit parts

This splits the dive detail page into two modes: view and edit

- The edit part loses the profile (it's not editable anyway)

- The view part gets a new layout, friendlier for viewing

- Properties for diveNumber, duration, depth and weight are added

Signed-off-by: Sebastian Kügler <sebas@kde.org>
This commit is contained in:
Sebastian Kügler 2015-12-04 02:28:48 +01:00
parent bd7af5a511
commit 8cf4725742
5 changed files with 168 additions and 127 deletions

View file

@ -13,15 +13,22 @@ MobileComponents.Page {
flickable: flick flickable: flick
property string location property string location
property string depth
property string dive_id property string dive_id
property string diveNumber
property string duration
property string airtemp property string airtemp
property string watertemp property string watertemp
property string suit property string suit
property int rating
property string buddy property string buddy
property string divemaster; property string divemaster;
property string notes; property string notes;
property string date property string date
property string number property string number
property string weight
state: "view"
states: [ states: [
State { State {
@ -35,10 +42,6 @@ MobileComponents.Page {
PropertyChanges { target: detailsEdit; opacity: 1 } PropertyChanges { target: detailsEdit; opacity: 1 }
} }
] ]
onDive_idChanged: {
qmlProfile.diveId = dive_id
qmlProfile.update()
}
ScrollView { ScrollView {
anchors.fill: parent anchors.fill: parent
@ -79,8 +82,7 @@ MobileComponents.Page {
NumberAnimation { duration: MobileComponents.Units.shortDuration } NumberAnimation { duration: MobileComponents.Units.shortDuration }
} }
} }
DiveDetailsView {
ColumnLayout {
id: detailsView id: detailsView
anchors { anchors {
left: parent.left left: parent.left
@ -88,116 +90,11 @@ MobileComponents.Page {
top: parent.top top: parent.top
margins: MobileComponents.Units.smallSpacing margins: MobileComponents.Units.smallSpacing
} }
spacing: MobileComponents.Units.smallSpacing
Behavior on opacity { Behavior on opacity {
NumberAnimation { duration: MobileComponents.Units.shortDuration } NumberAnimation { duration: MobileComponents.Units.shortDuration }
} }
GridLayout {
id: editorDetails
width: parent.width
columns: 2
MobileComponents.Heading {
Layout.columnSpan: 2
text: "VIEW Dive " + number + " (" + date + ")"
}
Item {
Layout.columnSpan: 2
Layout.fillWidth: true
Layout.preferredHeight: qmlProfile.height
QMLProfile {
id: qmlProfile
height: MobileComponents.Units.gridUnit * 25
anchors {
top: parent.top
left: parent.left
right: parent.right
}
//Rectangle { color: "green"; opacity: 0.4; anchors.fill: parent } // used for debugging the dive profile sizing, will be removed later
}
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Location:"
}
TextField {
id: txtLocation; text: location;
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Air Temp:"
}
TextField {
id: txtAirTemp
text: airtemp
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Water Temp:"
}
TextField {
id: txtWaterTemp
text: watertemp
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Suit:"
}
TextField {
id: txtSuit
text: suit
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Buddy:"
}
TextField {
id: txtBuddy
text: buddy
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Dive Master:"
}
TextField {
id: txtDiveMaster
text: divemaster
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Notes:"
}
TextArea {
id: txtNotes
text: notes
focus: true
Layout.fillWidth: true
Layout.fillHeight: true
selectByMouse: true
wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
}
}
Item {
height: MobileComponents.Units.gridUnit * 3
width: height // just to make sure the spacer doesn't produce scrollbars, but also isn't null
}
} }
} }
} }

View file

@ -27,21 +27,6 @@ Item {
text: "Dive " + number + " (" + date + ")" text: "Dive " + number + " (" + date + ")"
} }
Item {
Layout.columnSpan: 2
Layout.fillWidth: true
Layout.preferredHeight: qmlProfile.height
QMLProfile {
id: qmlProfile
height: MobileComponents.Units.gridUnit * 25
anchors {
top: parent.top
left: parent.left
right: parent.right
}
//Rectangle { color: "green"; opacity: 0.4; anchors.fill: parent } // used for debugging the dive profile sizing, will be removed later
}
}
MobileComponents.Label { MobileComponents.Label {
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
text: "Location:" text: "Location:"

View file

@ -0,0 +1,154 @@
import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.1
import org.subsurfacedivelog.mobile 1.0
import org.kde.plasma.mobilecomponents 0.2 as MobileComponents
ColumnLayout {
id: detailsView
spacing: MobileComponents.Units.smallSpacing
Connections {
target: diveDetailsWindow
onDive_idChanged: {
qmlProfile.diveId = diveDetailsWindow.dive_id
qmlProfile.update()
}
}
MobileComponents.Heading {
id: detailsViewHeading
Layout.columnSpan: 2
text: location
}
RowLayout {
// anchors {
// left: parent.left
// right: parent.right
// bottom: numberText.bottom
// }
Layout.columnSpan: 2
MobileComponents.Label {
text: 'Depth: '
opacity: 0.6
}
MobileComponents.Label {
text: depth
Layout.minimumWidth: Math.max(MobileComponents.Units.gridUnit * 4, paintedWidth) // helps vertical alignment throughout listview
}
MobileComponents.Label {
text: 'Duration: '
opacity: 0.6
}
MobileComponents.Label {
text: duration
}
Item {
Layout.fillWidth: true
height: parent.height
}
MobileComponents.Label {
id: numberText
text: "#" + diveNumber
color: MobileComponents.Theme.textColor
//opacity: 0.6
}
}
Item {
Layout.columnSpan: 2
Layout.fillWidth: true
Layout.preferredHeight: qmlProfile.height
QMLProfile {
id: qmlProfile
//height: MobileComponents.Units.gridUnit * 25
height: width * 0.66
anchors {
top: parent.top
left: parent.left
right: parent.right
}
//Rectangle { color: "green"; opacity: 0.4; anchors.fill: parent } // used for debugging the dive profile sizing, will be removed later
}
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Location:"
}
MobileComponents.Label {
id: txtLocation; text: location;
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Air Temp:"
}
MobileComponents.Label {
id: txtAirTemp
text: airtemp
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Water Temp:"
}
MobileComponents.Label {
id: txtWaterTemp
text: watertemp
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Suit:"
}
MobileComponents.Label {
id: txtSuit
text: suit
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Buddy:"
}
MobileComponents.Label {
id: txtBuddy
text: buddy
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Dive Master:"
}
MobileComponents.Label {
id: txtDiveMaster
text: divemaster
Layout.fillWidth: true
}
MobileComponents.Label {
Layout.alignment: Qt.AlignRight
text: "Notes:"
}
MobileComponents.Label {
id: txtNotes
text: notes
focus: true
Layout.fillWidth: true
Layout.fillHeight: true
//selectByMouse: true
wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere
}
Item {
height: MobileComponents.Units.gridUnit * 3
width: height // just to make sure the spacer doesn't produce scrollbars, but also isn't null
}
}

View file

@ -28,6 +28,10 @@ MobileComponents.Page {
detailsWindow.width = parent.width detailsWindow.width = parent.width
detailsWindow.location = location detailsWindow.location = location
detailsWindow.dive_id = id detailsWindow.dive_id = id
detailsWindow.diveNumber = diveNumber
detailsWindow.duration = duration
detailsWindow.depth = depth
detailsWindow.rating = rating
detailsWindow.buddy = buddy detailsWindow.buddy = buddy
detailsWindow.suit = suit detailsWindow.suit = suit
detailsWindow.airtemp = airtemp detailsWindow.airtemp = airtemp
@ -36,6 +40,7 @@ MobileComponents.Page {
detailsWindow.notes = notes detailsWindow.notes = notes
detailsWindow.number = diveNumber detailsWindow.number = diveNumber
detailsWindow.date = date detailsWindow.date = date
detailsWindow.weight = weight
stackView.push(detailsWindow) stackView.push(detailsWindow)
} }
@ -66,7 +71,6 @@ MobileComponents.Page {
} }
} }
Row { Row {
id: descriptionText
anchors { anchors {
left: parent.left left: parent.left
right: parent.right right: parent.right

View file

@ -7,6 +7,7 @@
<file>DiveList.qml</file> <file>DiveList.qml</file>
<file>DiveDetails.qml</file> <file>DiveDetails.qml</file>
<file>DiveDetailsEdit.qml</file> <file>DiveDetailsEdit.qml</file>
<file>DiveDetailsView.qml</file>
<file>DownloadFromDiveComputer.qml</file> <file>DownloadFromDiveComputer.qml</file>
<file>Log.qml</file> <file>Log.qml</file>
<file>TopBar.qml</file> <file>TopBar.qml</file>