QML UI: use a scrollable page for StartPage

Fixes scrolling of the cloud credentials and simplifies code

Signed-off-by: Marco Martin <notmart@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Marco Martin 2017-04-03 14:08:00 +02:00 committed by Dirk Hohndel
parent b5f203c888
commit e4460be8a6
2 changed files with 37 additions and 47 deletions

View file

@ -209,16 +209,14 @@ Kirigami.ScrollablePage {
}
}
Flickable {
id: startPageWrapper
StartPage {
id: startPage
anchors.fill: parent
opacity: credentialStatus === QMLManager.NOCLOUD || (credentialStatus === QMLManager.VALID || credentialStatus === QMLManager.VALID_EMAIL) ? 0 : 1
visible: opacity > 0
contentWidth: width
contentHeight: startPage.height
Behavior on opacity { NumberAnimation { duration: Kirigami.Units.shortDuration } }
onVisibleChanged: {
print("startPageWrapper onVisibleChanged credentialStatus " + credentialStatus + " diveListView.count " + diveListView.count)
print("startPage onVisibleChanged credentialStatus " + credentialStatus + " diveListView.count " + diveListView.count)
if (visible) {
page.actions.main = page.saveAction
page.actions.right = page.offlineAction
@ -235,16 +233,6 @@ Kirigami.ScrollablePage {
title = qsTr("Dive list")
}
}
ScrollBar.vertical: ScrollBar { }
StartPage {
id: startPage
}
Component.onCompleted: {
// initially we are in "no credentials" mode
page.actions.main = page.saveAction
page.actions.right = page.offlineAction
}
}
Text {
@ -262,7 +250,7 @@ Kirigami.ScrollablePage {
ListView {
id: diveListView
anchors.fill: parent
opacity: 0.8 - startPageWrapper.opacity
opacity: 0.8 - startPage.opacity
visible: opacity > 0
model: diveModel
currentIndex: -1
@ -304,11 +292,11 @@ Kirigami.ScrollablePage {
}
onBackRequested: {
if (startPageWrapper.visible && diveListView.count > 0 && manager.credentialStatus !== QMLManager.INVALID) {
if (startPage.visible && diveListView.count > 0 && manager.credentialStatus !== QMLManager.INVALID) {
manager.credentialStatus = oldStatus
event.accepted = true;
}
if (!startPageWrapper.visible) {
if (!startPage.visible) {
if (Qt.platform.os != "ios") {
manager.quit()
}

View file

@ -3,38 +3,40 @@ import QtQuick.Layouts 1.1
import org.kde.kirigami 2.0 as Kirigami
import org.subsurfacedivelog.mobile 1.0
ColumnLayout {
Kirigami.ScrollablePage {
id: startpage
width: subsurfaceTheme.columnWidth
function saveCredentials() { cloudCredentials.saveCredentials() }
Kirigami.Label {
id: explanationText
Layout.fillWidth: true
Layout.margins: Kirigami.Units.gridUnit
Layout.topMargin: Kirigami.Units.gridUnit * 3
text: qsTr("To use Subsurface-mobile with Subsurface cloud storage, please enter your cloud credentials.\n") +
qsTr("If this is the first time you use Subsurface cloud storage, enter a valid email (all lower case) " +
"and a password of your choice (letters and numbers). " +
"The server will send a PIN to the email address provided that you will have to enter here.\n\n") +
qsTr("To use Subsurface-mobile only with local data on this device, tap " +
"on the no cloud icon below.")
wrapMode: Text.WordWrap
}
Kirigami.Label {
id: messageArea
Layout.fillWidth: true
Layout.margins: Kirigami.Units.gridUnit
Layout.topMargin: 0
text: manager.startPageText
wrapMode: Text.WordWrap
}
CloudCredentials {
id: cloudCredentials
Layout.fillWidth: true
Layout.margins: Kirigami.Units.gridUnit
Layout.topMargin: 0
property int headingLevel: 3
ColumnLayout {
Kirigami.Label {
id: explanationText
Layout.fillWidth: true
Layout.margins: Kirigami.Units.gridUnit
Layout.topMargin: Kirigami.Units.gridUnit * 3
text: qsTr("To use Subsurface-mobile with Subsurface cloud storage, please enter your cloud credentials.\n") +
qsTr("If this is the first time you use Subsurface cloud storage, enter a valid email (all lower case) " +
"and a password of your choice (letters and numbers). " +
"The server will send a PIN to the email address provided that you will have to enter here.\n\n") +
qsTr("To use Subsurface-mobile only with local data on this device, tap " +
"on the no cloud icon below.")
wrapMode: Text.WordWrap
}
Kirigami.Label {
id: messageArea
Layout.fillWidth: true
Layout.margins: Kirigami.Units.gridUnit
Layout.topMargin: 0
text: manager.startPageText
wrapMode: Text.WordWrap
}
CloudCredentials {
id: cloudCredentials
Layout.fillWidth: true
Layout.margins: Kirigami.Units.gridUnit
Layout.topMargin: 0
property int headingLevel: 3
}
}
}