Refactored simple send to use states

This commit is contained in:
Maran 2014-04-11 15:18:38 -04:00
parent 4d18798468
commit 5768b18a3b
1 changed files with 208 additions and 177 deletions

View File

@ -30,27 +30,27 @@ ApplicationWindow {
MenuItem { MenuItem {
text: "Test test" text: "Test test"
shortcut: "Ctrl+t" shortcut: "Ctrl+t"
onTriggered: { onTriggered: {
var win var win
function finishedLoading(){ function finishedLoading(){
console.log("Trigged") console.log("Trigged")
win = wizard.createObject(root) win = wizard.createObject(root)
} }
console.log("Loading wizard") console.log("Loading wizard")
var wizard = Qt.createComponent("first_run.qml") var wizard = Qt.createComponent("first_run.qml")
if(wizard.status== Component.Ready){ if(wizard.status== Component.Ready){
console.log("Component is ready") console.log("Component is ready")
finishedLoading() finishedLoading()
}else if( wizard.status == Component.Error){ }else if( wizard.status == Component.Error){
console.log("Error loading component:", wizard.errorString()) console.log("Error loading component:", wizard.errorString())
} }
else{ else{
wizard.statusChanged.connect(finishedLoading) wizard.statusChanged.connect(finishedLoading)
console.log("Component is NOT ready") console.log("Component is NOT ready")
win = wizard.createObject(root) win = wizard.createObject(root)
} }
} }
} }
} }
@ -187,52 +187,89 @@ ApplicationWindow {
anchors.bottomMargin: 5 anchors.bottomMargin: 5
id: newTransactionTab id: newTransactionTab
Component.onCompleted:{ Component.onCompleted:{
addTab("Send ether", newTransaction) addTab("Simple send", newTransaction)
addTab("Create contract", newContract) addTab("Create contract", newContract)
} }
} }
Component { Component {
id: newTransaction id: newTransaction
Column { Column {
id: simpleSendColumn
states: [
State{
name: "ERROR"
},
State {
name: "DONE"
PropertyChanges { target: txSimpleValue; visible:false}
PropertyChanges { target: txSimpleRecipient; visible:false}
PropertyChanges { target:newSimpleTxButton; visible:false}
PropertyChanges { target: txSimpleResult; visible:true}
PropertyChanges { target: txSimpleOutput; visible:true}
PropertyChanges { target:newSimpleTxButton; visible:true}
},
State {
name: "SETUP"
PropertyChanges { target: txSimpleValue; visible:true; text: ""}
PropertyChanges { target: txSimpleRecipient; visible:true; text: ""}
PropertyChanges { target: txSimpleButton; visible:true}
PropertyChanges { target:newSimpleTxButton; visible:false}
}
]
spacing: 5 spacing: 5
anchors.leftMargin: 5 anchors.leftMargin: 5
anchors.topMargin: 5 anchors.topMargin: 5
anchors.top: parent.top anchors.top: parent.top
anchors.left: parent.left anchors.left: parent.left
function checkFormState(){
if(txSimpleRecipient.text.length == 40 && txSimpleValue.text.length > 0) {
txSimpleButton.state = "READY"
}else{
txSimpleButton.state = "NOTREADY"
}
}
TextField { TextField {
id: txSimpleRecipient id: txSimpleRecipient
placeholderText: "Recipient address" placeholderText: "Recipient address"
Layout.fillWidth: true Layout.fillWidth: true
validator: RegExpValidator { regExp: /[a-f0-9]{40}/ } validator: RegExpValidator { regExp: /[a-f0-9]{40}/ }
width: 530 width: 530
onTextChanged: { checkFormState() }
} }
TextField { TextField {
id: txSimpleValue id: txSimpleValue
placeholderText: "Amount" placeholderText: "Amount"
anchors.rightMargin: 5 anchors.rightMargin: 5
validator: IntValidator { } validator: IntValidator { }
onTextChanged: { checkFormState() }
} }
Button { Button {
id: txSimpleButton id: txSimpleButton
states: [
State {
name: "READY"
PropertyChanges { target: txSimpleButton; enabled: true}
},
State {
name: "NOTREADY"
PropertyChanges { target: txSimpleButton; enabled: false}
}
]
text: "Send" text: "Send"
enabled: false
onClicked: { onClicked: {
//this.enabled = false //this.enabled = false
var res = eth.createTx(txSimpleRecipient.text, txSimpleValue.text,"","","") var res = eth.createTx(txSimpleRecipient.text, txSimpleValue.text,"","","")
if(res[1]) { if(res[1]) {
txSimpleResult.text = "There has been an error broadcasting your transaction:" + res[1].error() txSimpleResult.text = "There has been an error broadcasting your transaction:" + res[1].error()
txSimpleResult.visible = true
} else { } else {
txSimpleResult.text = "Your transaction has been broadcasted over the network.\nYour transaction id is:" txSimpleResult.text = "Your transaction has been broadcasted over the network.\nYour transaction id is:"
txSimpleOutput.text = res[0] txSimpleOutput.text = res[0]
txSimpleOutput.visible = true this.visible = false
txSimpleResult.visible = true simpleSendColumn.state = "DONE"
txSimpleValue.visible = false
txSimpleRecipient.visible = false
txSimpleValue.text = ""
txSimpleRecipient.text = ""
txSimpleRecipient.focus = true
newSimpleTxButton.visible = true
this.visible = false
} }
} }
} }
@ -247,18 +284,12 @@ ApplicationWindow {
width: 530 width: 530
} }
Button { Button {
id: newSimpleTxButton id: newSimpleTxButton
visible: false visible: false
text: "Create an other transaction" text: "Create an other transaction"
onClicked: { onClicked: {
this.visible = false this.visible = false
txSimpleResult.text = "" simpleSendColumn.state = "SETUP"
txSimpleOutput.text = ""
txSimpleResult.visible = false
txSimpleOutput.visible = false
txSimpleValue.visible = true
txSimpleRecipient.visible = true
txSimpleButton.visible = true
} }
} }
} }
@ -266,49 +297,49 @@ ApplicationWindow {
Component { Component {
id: newContract id: newContract
Column { Column {
id: mainContractColumn id: mainContractColumn
function contractFormReady(){ function contractFormReady(){
if(codeView.text.length > 0 && txValue.text.length > 0 && txGas.text.length > 0 && txGasPrice.length > 0) { if(codeView.text.length > 0 && txValue.text.length > 0 && txGas.text.length > 0 && txGasPrice.length > 0) {
txButton.state = "READY" txButton.state = "READY"
}else{ }else{
txButton.state = "NOTREADY" txButton.state = "NOTREADY"
} }
} }
states: [ states: [
State{ State{
name: "ERROR" name: "ERROR"
PropertyChanges { target: txResult; visible:true} PropertyChanges { target: txResult; visible:true}
PropertyChanges { target: codeView; visible:true} PropertyChanges { target: codeView; visible:true}
}, },
State { State {
name: "DONE" name: "DONE"
PropertyChanges { target: txValue; visible:false} PropertyChanges { target: txValue; visible:false}
PropertyChanges { target: txGas; visible:false} PropertyChanges { target: txGas; visible:false}
PropertyChanges { target: txGasPrice; visible:false} PropertyChanges { target: txGasPrice; visible:false}
PropertyChanges { target: codeView; visible:false} PropertyChanges { target: codeView; visible:false}
PropertyChanges { target: txButton; visible:false} PropertyChanges { target: txButton; visible:false}
PropertyChanges { target: txDataLabel; visible:false} PropertyChanges { target: txDataLabel; visible:false}
PropertyChanges { target: txResult; visible:true} PropertyChanges { target: txResult; visible:true}
PropertyChanges { target: txOutput; visible:true} PropertyChanges { target: txOutput; visible:true}
PropertyChanges { target: newTxButton; visible:true} PropertyChanges { target: newTxButton; visible:true}
}, },
State { State {
name: "SETUP" name: "SETUP"
PropertyChanges { target: txValue; visible:true; text: ""} PropertyChanges { target: txValue; visible:true; text: ""}
PropertyChanges { target: txGas; visible:true; text: ""} PropertyChanges { target: txGas; visible:true; text: ""}
PropertyChanges { target: txGasPrice; visible:true; text: ""} PropertyChanges { target: txGasPrice; visible:true; text: ""}
PropertyChanges { target: codeView; visible:true; text: ""} PropertyChanges { target: codeView; visible:true; text: ""}
PropertyChanges { target: txButton; visible:true} PropertyChanges { target: txButton; visible:true}
PropertyChanges { target: txDataLabel; visible:true} PropertyChanges { target: txDataLabel; visible:true}
PropertyChanges { target: txResult; visible:false} PropertyChanges { target: txResult; visible:false}
PropertyChanges { target: txOutput; visible:false} PropertyChanges { target: txOutput; visible:false}
PropertyChanges { target: newTxButton; visible:false} PropertyChanges { target: newTxButton; visible:false}
} }
] ]
width: 400 width: 400
spacing: 5 spacing: 5
anchors.left: parent.left anchors.left: parent.left
anchors.top: parent.top anchors.top: parent.top
anchors.leftMargin: 5 anchors.leftMargin: 5
@ -319,31 +350,31 @@ ApplicationWindow {
width: 200 width: 200
placeholderText: "Amount" placeholderText: "Amount"
validator: IntValidator { } validator: IntValidator { }
onTextChanged: { onTextChanged: {
contractFormReady() contractFormReady()
} }
} }
TextField { TextField {
id: txGas id: txGas
width: 200 width: 200
validator: IntValidator { } validator: IntValidator { }
placeholderText: "Gas" placeholderText: "Gas"
onTextChanged: { onTextChanged: {
contractFormReady() contractFormReady()
} }
} }
TextField { TextField {
id: txGasPrice id: txGasPrice
width: 200 width: 200
placeholderText: "Gas price" placeholderText: "Gas price"
validator: IntValidator { } validator: IntValidator { }
onTextChanged: { onTextChanged: {
contractFormReady() contractFormReady()
} }
} }
Label { Label {
id: txDataLabel id: txDataLabel
text: "Transaction data" text: "Transaction data"
} }
@ -352,58 +383,58 @@ ApplicationWindow {
anchors.topMargin: 5 anchors.topMargin: 5
Layout.fillWidth: true Layout.fillWidth: true
width: parent.width /2 width: parent.width /2
onTextChanged: { onTextChanged: {
contractFormReady() contractFormReady()
} }
} }
Button { Button {
id: txButton id: txButton
states: [ states: [
State { State {
name: "READY" name: "READY"
PropertyChanges { target: txButton; enabled: true} PropertyChanges { target: txButton; enabled: true}
}, },
State { State {
name: "NOTREADY" name: "NOTREADY"
PropertyChanges { target: txButton; enabled:false} PropertyChanges { target: txButton; enabled:false}
} }
] ]
text: "Send" text: "Send"
enabled: false enabled: false
onClicked: { onClicked: {
//this.enabled = false //this.enabled = false
var res = eth.createTx("", txValue.text, txGas.text, txGasPrice.text, codeView.text) var res = eth.createTx("", txValue.text, txGas.text, txGasPrice.text, codeView.text)
if(res[1]) { if(res[1]) {
txResult.text = "Your contract <b>could not</b> be send over the network:\n<b>" txResult.text = "Your contract <b>could not</b> be send over the network:\n<b>"
txResult.text += res[1].error() txResult.text += res[1].error()
txResult.text += "</b>" txResult.text += "</b>"
mainContractColumn.state = "ERROR" mainContractColumn.state = "ERROR"
} else { } else {
txResult.text = "Your contract has been submitted:\n" txResult.text = "Your contract has been submitted:\n"
txOutput.text = res[0] txOutput.text = res[0]
mainContractColumn.state = "DONE" mainContractColumn.state = "DONE"
} }
} }
} }
Text { Text {
id: txResult id: txResult
visible: false visible: false
} }
TextField { TextField {
id: txOutput id: txOutput
visible: false visible: false
width: 530 width: 530
} }
Button { Button {
id: newTxButton id: newTxButton
visible: false visible: false
text: "Create an other contract" text: "Create an other contract"
onClicked: { onClicked: {
this.visible = false this.visible = false
txResult.text = "" txResult.text = ""
txOutput.text = "" txOutput.text = ""
mainContractColumn.state = "SETUP" mainContractColumn.state = "SETUP"
} }
} }
@ -461,26 +492,26 @@ ApplicationWindow {
} }
/* /*
signal addPlugin(string name) signal addPlugin(string name)
Component { Component {
id: pluginWindow id: pluginWindow
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
Label { Label {
id: pluginTitle id: pluginTitle
anchors.centerIn: parent anchors.centerIn: parent
text: "Hello world" text: "Hello world"
} }
Component.onCompleted: setView(this) Component.onCompleted: setView(this)
} }
} }
onAddPlugin: { onAddPlugin: {
var pluginWin = pluginWindow.createObject(mainView) var pluginWin = pluginWindow.createObject(mainView)
console.log(pluginWin) console.log(pluginWin)
pluginWin.pluginTitle.text = "Test" pluginWin.pluginTitle.text = "Test"
} }
*/ */
} }
} }
@ -665,52 +696,52 @@ ApplicationWindow {
function setAsm(asm) { function setAsm(asm) {
//for(var i = 0; i < asm.length; i++) { //for(var i = 0; i < asm.length; i++) {
asmModel.append({asm: asm}) asmModel.append({asm: asm})
//} //}
} }
function clearAsm() { function clearAsm() {
asmModel.clear() asmModel.clear()
} }
function setMem(mem) { function setMem(mem) {
memModel.append({num: mem.num, value: mem.value}) memModel.append({num: mem.num, value: mem.value})
} }
function clearMem(){ function clearMem(){
memModel.clear() memModel.clear()
} }
function setStack(stack) { function setStack(stack) {
stackModel.append({value: stack}) stackModel.append({value: stack})
} }
function clearStack() { function clearStack() {
stackModel.clear() stackModel.clear()
} }
function loadPlugin(name) { function loadPlugin(name) {
console.log("Loading plugin" + name) console.log("Loading plugin" + name)
mainView.addPlugin(name) mainView.addPlugin(name)
} }
function setWalletValue(value) { function setWalletValue(value) {
walletValueLabel.text = value walletValueLabel.text = value
} }
function addTx(tx) { function addTx(tx) {
txModel.insert(0, {hash: tx.hash, address: tx.address, value: tx.value}) txModel.insert(0, {hash: tx.hash, address: tx.address, value: tx.value})
} }
function addBlock(block) { function addBlock(block) {
blockModel.insert(0, {number: block.number, hash: block.hash}) blockModel.insert(0, {number: block.number, hash: block.hash})
} }
function addLog(str) { function addLog(str) {
if(str.len != 0) { if(str.len != 0) {
logModel.append({description: str}) logModel.append({description: str})
}
}
function setPeers(text) {
peerLabel.text = text
} }
} }
function setPeers(text) {
peerLabel.text = text
}
}