This is much less intimidating than asking if the user wants to use a proxy out of the gate.
206 lines
6.1 KiB
QML
206 lines
6.1 KiB
QML
import QtQuick
|
|
import QtQuick.Layouts
|
|
import QtQuick.Controls
|
|
|
|
import org.electrum 1.0
|
|
|
|
import "../controls"
|
|
|
|
ElDialog {
|
|
id: wizard
|
|
focus: true
|
|
|
|
width: parent.width
|
|
height: parent.height
|
|
|
|
padding: 0
|
|
|
|
title: (pages.currentItem.wizard_title ? pages.currentItem.wizard_title : wizardTitle) +
|
|
(pages.currentItem.title ? ' - ' + pages.currentItem.title : '')
|
|
iconSource: '../../../icons/electrum.png'
|
|
|
|
// android back button triggers close() on Popups. Disabling close here,
|
|
// we handle that via Keys.onReleased event handler in the root layout.
|
|
closePolicy: Popup.NoAutoClose
|
|
|
|
property string wizardTitle
|
|
|
|
property var wizard_data
|
|
property alias pages: pages
|
|
property QtObject wiz
|
|
property alias finishButtonText: finishButton.text
|
|
|
|
function doClose() {
|
|
if (pages.currentIndex == 0)
|
|
reject()
|
|
else
|
|
pages.prev()
|
|
}
|
|
|
|
function _setWizardData(wdata) {
|
|
wizard_data = {}
|
|
Object.assign(wizard_data, wdata) // deep copy
|
|
// console.log('wizard data is now :' + JSON.stringify(wizard_data))
|
|
}
|
|
|
|
// helper function to dynamically load wizard page components
|
|
// and add them to the SwipeView
|
|
// Here we do some manual binding of page.valid -> pages.pagevalid and
|
|
// page.last -> pages.lastpage to propagate the state without the binding
|
|
// going stale.
|
|
function _loadNextComponent(view, wdata={}) {
|
|
// remove any existing pages after current page
|
|
while (pages.contentChildren[pages.currentIndex+1]) {
|
|
pages.takeItem(pages.currentIndex+1).destroy()
|
|
}
|
|
|
|
var url = Qt.resolvedUrl(wiz.viewToComponent(view))
|
|
var comp = Qt.createComponent(url)
|
|
if (comp.status == Component.Error) {
|
|
console.log(comp.errorString())
|
|
return null
|
|
}
|
|
|
|
// make a deepcopy of wdata and pass it to the component
|
|
var wdata_copy={}
|
|
Object.assign(wdata_copy, wdata)
|
|
var page = comp.createObject(pages, {wizard_data: wdata_copy})
|
|
page.validChanged.connect(function() {
|
|
if (page != pages.currentItem)
|
|
return
|
|
pages.pagevalid = page.valid
|
|
})
|
|
page.lastChanged.connect(function() {
|
|
if (page != pages.currentItem)
|
|
return
|
|
pages.lastpage = page.last
|
|
})
|
|
page.next.connect(function() {
|
|
var newview = wiz.submit(page.wizard_data)
|
|
if (newview.view) {
|
|
console.log('next view: ' + newview.view)
|
|
var newpage = _loadNextComponent(newview.view, newview.wizard_data)
|
|
} else {
|
|
console.log('END')
|
|
}
|
|
})
|
|
page.prev.connect(function() {
|
|
var wdata = wiz.prev()
|
|
})
|
|
|
|
pages.pagevalid = page.valid
|
|
pages.lastpage = page.last
|
|
|
|
return page
|
|
}
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
spacing: 0
|
|
|
|
// root Item in Wizard, capture back button here and delegate to main
|
|
Keys.onReleased: {
|
|
if (event.key == Qt.Key_Back) {
|
|
console.log("Back button within wizard")
|
|
app.close() // this handles unwind of dialogs/stack
|
|
}
|
|
}
|
|
|
|
SwipeView {
|
|
id: pages
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
interactive: false
|
|
|
|
clip:true
|
|
|
|
function prev() {
|
|
currentItem.prev()
|
|
currentIndex = currentIndex - 1
|
|
_setWizardData(pages.contentChildren[currentIndex].wizard_data)
|
|
pages.pagevalid = pages.contentChildren[currentIndex].valid
|
|
pages.lastpage = pages.contentChildren[currentIndex].last
|
|
|
|
}
|
|
|
|
function next() {
|
|
currentItem.accept()
|
|
_setWizardData(pages.contentChildren[currentIndex].wizard_data)
|
|
currentItem.next()
|
|
currentIndex = currentIndex + 1
|
|
}
|
|
|
|
function finish() {
|
|
currentItem.accept()
|
|
_setWizardData(pages.contentChildren[currentIndex].wizard_data)
|
|
wizard.doAccept()
|
|
}
|
|
|
|
property bool pagevalid: false
|
|
property bool lastpage: false
|
|
|
|
Component.onCompleted: {
|
|
_setWizardData({})
|
|
}
|
|
|
|
Binding {
|
|
target: AppController
|
|
property: 'secureWindow'
|
|
value: pages.contentChildren[pages.currentIndex].securePage
|
|
}
|
|
}
|
|
|
|
ColumnLayout {
|
|
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
|
|
|
|
PageIndicator {
|
|
id: indicator
|
|
|
|
Layout.alignment: Qt.AlignHCenter
|
|
|
|
count: pages.count
|
|
currentIndex: pages.currentIndex
|
|
}
|
|
|
|
ButtonContainer {
|
|
Layout.fillWidth: true
|
|
|
|
FlatButton {
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 1
|
|
visible: pages.currentIndex == 0
|
|
text: qsTr("Cancel")
|
|
onClicked: wizard.doReject()
|
|
}
|
|
FlatButton {
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 1
|
|
visible: pages.currentIndex > 0
|
|
text: qsTr('Back')
|
|
onClicked: pages.prev()
|
|
}
|
|
FlatButton {
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 1
|
|
text: qsTr("Next")
|
|
visible: !pages.lastpage
|
|
enabled: pages.pagevalid
|
|
onClicked: pages.next()
|
|
}
|
|
FlatButton {
|
|
id: finishButton
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 1
|
|
text: qsTr("Finish")
|
|
visible: pages.lastpage
|
|
enabled: pages.pagevalid
|
|
onClicked: pages.finish()
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|