Minor GUI updates

* IceCream => IceCREAM
* Added coin base to block info
This commit is contained in:
obscuren 2014-05-30 11:50:30 +02:00
parent 40d72ff40b
commit fcbf99a30a
3 changed files with 49 additions and 36 deletions

View File

@ -8,7 +8,7 @@ import Ethereum 1.0
ApplicationWindow { ApplicationWindow {
visible: false visible: false
title: "IceCream" title: "IceCREAM"
minimumWidth: 1280 minimumWidth: 1280
minimumHeight: 900 minimumHeight: 900
width: 1290 width: 1290

View File

@ -245,10 +245,25 @@ ApplicationWindow {
width: 500 width: 500
} }
property var addressModel: ListModel {
id: addressModel
}
TableView {
id: addressView
width: parent.width
height: 200
anchors.bottom: logView.top
TableViewColumn{ role: "name"; title: "name" }
TableViewColumn{ role: "address"; title: "address"; width: 300}
model: addressModel
}
property var logModel: ListModel { property var logModel: ListModel {
id: logModel id: logModel
} }
TableView { TableView {
id: logView id: logView
width: parent.width width: parent.width
@ -342,13 +357,13 @@ ApplicationWindow {
visible: false visible: false
property var block property var block
width: root.width width: root.width
height: 240 height: 300
Component{ Component{
id: blockDetailsDelegate id: blockDetailsDelegate
Rectangle { Rectangle {
color: "#252525" color: "#252525"
width: popup.width width: popup.width
height: 200 height: 150
Column { Column {
anchors.leftMargin: 10 anchors.leftMargin: 10
anchors.topMargin: 5 anchors.topMargin: 5
@ -357,6 +372,7 @@ ApplicationWindow {
Text { text: '<h3>Block details</h3>'; color: "#F2F2F2"} Text { text: '<h3>Block details</h3>'; color: "#F2F2F2"}
Text { text: '<b>Block number:</b> ' + number; color: "#F2F2F2"} Text { text: '<b>Block number:</b> ' + number; color: "#F2F2F2"}
Text { text: '<b>Hash:</b> ' + hash; color: "#F2F2F2"} Text { text: '<b>Hash:</b> ' + hash; color: "#F2F2F2"}
Text { text: '<b>Coinbase:</b> ' + coinbase; color: "#F2F2F2"}
Text { text: '<b>Block found at:</b> ' + prettyTime; color: "#F2F2F2"} Text { text: '<b>Block found at:</b> ' + prettyTime; color: "#F2F2F2"}
} }
} }
@ -365,7 +381,7 @@ ApplicationWindow {
model: singleBlock model: singleBlock
delegate: blockDetailsDelegate delegate: blockDetailsDelegate
anchors.top: parent.top anchors.top: parent.top
height: 70 height: 100
anchors.leftMargin: 20 anchors.leftMargin: 20
id: listViewThing id: listViewThing
Layout.maximumHeight: 40 Layout.maximumHeight: 40
@ -390,7 +406,7 @@ ApplicationWindow {
if(tx.data) { if(tx.data) {
popup.showContractData(tx) popup.showContractData(tx)
}else{ }else{
popup.height = 230 popup.height = 440
} }
} }
} }
@ -404,7 +420,7 @@ ApplicationWindow {
contractLabel.text = "<h4> Transaction ran contract " + tx.address + "</h4>" contractLabel.text = "<h4> Transaction ran contract " + tx.address + "</h4>"
contractData.text = tx.rawData contractData.text = tx.rawData
} }
popup.height = 400 popup.height = 540
} }
Rectangle { Rectangle {
@ -456,7 +472,7 @@ ApplicationWindow {
} }
function setDetails(block){ function setDetails(block){
singleBlock.set(0,block) singleBlock.set(0,block)
popup.height = 230 popup.height = 300
transactionModel.clear() transactionModel.clear()
if(block.txs != undefined){ if(block.txs != undefined){
for(var i = 0; i < block.txs.count; ++i) { for(var i = 0; i < block.txs.count; ++i) {
@ -620,36 +636,15 @@ ApplicationWindow {
} }
} }
function setAsm(asm) {
asmModel.append({asm: asm})
}
function setInstruction(num) {
asmTableView.selection.clear()
asmTableView.selection.select(num-1)
}
function clearAsm() {
asmModel.clear()
}
function setMem(mem) {
memModel.append({num: mem.num, value: mem.value})
}
function clearMem(){
memModel.clear()
}
function setStack(stack) {
stackModel.append({value: stack})
}
function addDebugMessage(message){ function addDebugMessage(message){
console.log("WOOP:")
debuggerLog.append({value: message}) debuggerLog.append({value: message})
} }
function clearStack() { function addAddress(address) {
stackModel.clear() addressModel.append({name: address.name, address: address.address})
}
function clearAddress() {
addressModel.clear()
} }
function loadPlugin(name) { function loadPlugin(name) {
@ -683,9 +678,9 @@ ApplicationWindow {
} }
if(initial){ if(initial){
blockModel.append({number: block.number, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) blockModel.append({number: block.number, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
}else{ }else{
blockModel.insert(0, {number: block.number, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)}) blockModel.insert(0, {number: block.number, coinbase: block.coinbase, hash: block.hash, txs: txs, txAmount: amount, time: block.time, prettyTime: convertToPretty(block.time)})
} }
} }

View File

@ -110,6 +110,7 @@ func (gui *Gui) showWallet(context *qml.Context) (*qml.Window, error) {
win := gui.createWindow(component) win := gui.createWindow(component)
go gui.setInitialBlockChain() go gui.setInitialBlockChain()
go gui.loadAddressBook()
go gui.readPreviousTransactions() go gui.readPreviousTransactions()
go gui.update() go gui.update()
@ -147,6 +148,19 @@ func (gui *Gui) setInitialBlockChain() {
} }
} }
type address struct {
Name, Address string
}
var namereg = ethutil.FromHex("bb5f186604d057c1c5240ca2ae0f6430138ac010")
func (gui *Gui) loadAddressBook() {
gui.win.Root().Call("clearAddress")
gui.eth.StateManager().CurrentState().GetStateObject(namereg).State().EachStorage(func(name string, value *ethutil.Value) {
gui.win.Root().Call("addAddress", struct{ Name, Address string }{name, ethutil.Hex(value.Bytes())})
})
}
func (gui *Gui) readPreviousTransactions() { func (gui *Gui) readPreviousTransactions() {
it := gui.txDb.Db().NewIterator(nil, nil) it := gui.txDb.Db().NewIterator(nil, nil)
for it.Next() { for it.Next() {
@ -191,10 +205,12 @@ func (gui *Gui) update() {
blockChan := make(chan ethutil.React, 1) blockChan := make(chan ethutil.React, 1)
txChan := make(chan ethutil.React, 1) txChan := make(chan ethutil.React, 1)
objectChan := make(chan ethutil.React, 1)
reactor.Subscribe("newBlock", blockChan) reactor.Subscribe("newBlock", blockChan)
reactor.Subscribe("newTx:pre", txChan) reactor.Subscribe("newTx:pre", txChan)
reactor.Subscribe("newTx:post", txChan) reactor.Subscribe("newTx:post", txChan)
reactor.Subscribe("object:"+string(namereg), objectChan)
state := gui.eth.StateManager().TransState() state := gui.eth.StateManager().TransState()
@ -241,6 +257,8 @@ func (gui *Gui) update() {
state.UpdateStateObject(object) state.UpdateStateObject(object)
} }
case <-objectChan:
gui.loadAddressBook()
} }
} }
} }