diff options
author | obscuren <geffobscura@gmail.com> | 2014-02-23 08:56:04 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-02-23 08:56:04 +0800 |
commit | 0656f465b0c0690f237e42ac1e8f306dcda6c40b (patch) | |
tree | cf0232f8993125e372d6c1354b41ccd96089ae0e | |
parent | aa33a4b2fb9dc07468498decceb6fdb56d38f54d (diff) | |
download | go-tangerine-0656f465b0c0690f237e42ac1e8f306dcda6c40b.tar.gz go-tangerine-0656f465b0c0690f237e42ac1e8f306dcda6c40b.tar.zst go-tangerine-0656f465b0c0690f237e42ac1e8f306dcda6c40b.zip |
Added transactions window
-rw-r--r-- | transactions.qml | 9 | ||||
-rw-r--r-- | ui/gui.go | 19 | ||||
-rw-r--r-- | wallet.qml | 177 |
3 files changed, 163 insertions, 42 deletions
diff --git a/transactions.qml b/transactions.qml new file mode 100644 index 000000000..e9a035a85 --- /dev/null +++ b/transactions.qml @@ -0,0 +1,9 @@ +import QtQuick 2.0 +import QtQuick.Controls 1.0; +import QtQuick.Layouts 1.0; + +Rectangle { + id: transactionView + visible: false + Text { text: "TX VIEW" } +} @@ -18,6 +18,17 @@ type Block struct { Hash string } +type Tx struct { + Value, Hash, Address string +} + +func NewTxFromTransaction(tx *ethchain.Transaction) *Tx { + hash := hex.EncodeToString(tx.Hash()) + sender := hex.EncodeToString(tx.Recipient) + + return &Tx{Hash: hash[:4], Value: tx.Value.String(), Address: sender} +} + // Creates a new QML Block from a chain block func NewBlockFromBlock(block *ethchain.Block) *Block { info := block.BlockInfo() @@ -56,6 +67,8 @@ func (ui *Gui) Start() { // Register ethereum functions qml.RegisterTypes("Ethereum", 1, 0, []qml.TypeSpec{{ Init: func(p *Block, obj qml.Object) { p.Number = 0; p.Hash = "" }, + }, { + Init: func(p *Tx, obj qml.Object) { p.Value = ""; p.Hash = ""; p.Address = "" }, }}) ethutil.Config.Log.Infoln("[GUI] Starting GUI") @@ -66,6 +79,7 @@ func (ui *Gui) Start() { if err != nil { panic(err) } + ui.engine.LoadFile("transactions.qml") ui.win = component.CreateWindow(nil) @@ -77,6 +91,7 @@ func (ui *Gui) Start() { // Register the ui as a block processor ui.eth.BlockManager.SecondaryBlockProcessor = ui + ui.eth.TxPool.SecondaryProcessor = ui // Add the ui as a log system so we can log directly to the UGI ethutil.Config.Log.AddLogSystem(ui) @@ -102,6 +117,10 @@ func (ui *Gui) ProcessBlock(block *ethchain.Block) { ui.win.Root().Call("addBlock", NewBlockFromBlock(block)) } +func (ui *Gui) ProcessTransaction(tx *ethchain.Transaction) { + ui.win.Root().Call("addTx", NewTxFromTransaction(tx)) +} + // Logging functions that log directly to the GUI interface func (ui *Gui) Println(v ...interface{}) { str := strings.TrimRight(fmt.Sprintln(v...), "\n") diff --git a/wallet.qml b/wallet.qml index b18614801..6ee6ff110 100644 --- a/wallet.qml +++ b/wallet.qml @@ -3,18 +3,18 @@ import QtQuick.Controls 1.0; import QtQuick.Layouts 1.0; import QtQuick.Dialogs 1.0; import QtQuick.Window 2.1; +import QtQuick.Controls.Styles 1.1 import Ethereum 1.0 ApplicationWindow { id: root - width: 800 + width: 900 height: 600 minimumHeight: 300 title: "Ethereal" - toolBar: ToolBar { id: mainToolbar @@ -43,22 +43,6 @@ ApplicationWindow { } } - SplitView { - id: splitView - height: 200 - anchors.top: parent.top - anchors.right: parent.right - anchors.left: parent.left - - TextArea { - id: codeView - width: parent.width /2 - } - - TextArea { - readOnly: true - } - } MenuBar { Menu { @@ -85,42 +69,133 @@ ApplicationWindow { onTriggered: ui.connect() } } + + Menu { + title: "Help" + MenuItem { + text: "About" + onTriggered: { + aboutWin.visible = true + } + } + } + } property var blockModel: ListModel { id: blockModel } + function setView(view) { + mainView.visible = false + transactionView.visible = false + view.visible = true + } - TableView { - id: blockTable - width: parent.width - anchors.top: splitView.bottom - anchors.bottom: logView.top - TableViewColumn{ role: "number" ; title: "#" ; width: 100 } - TableViewColumn{ role: "hash" ; title: "Hash" ; width: 560 } + SplitView { + anchors.fill: parent + + + Rectangle { + id: menu + width: 200 + anchors.bottom: parent.bottom + anchors.top: parent.top + color: "#D9DDE7" + + GridLayout { + columns: 1 + Button { + text: "Main" + onClicked: { + setView(mainView) + } + } + Button { + text: "Transactions" + onClicked: { + setView(transactionView) + } + } + } + + } - model: blockModel + property var txModel: ListModel { + id: txModel + } - onDoubleClicked: { - popup.visible = true - popup.block = eth.getBlock(blockModel.get(row).hash) - popup.hashLabel.text = popup.block.hash + Rectangle { + id: transactionView + visible: false + anchors.right: parent.right + anchors.left: menu.right + anchors.bottom: parent.bottom + anchors.top: parent.top + TableView { + id: txTableView + anchors.fill: parent + TableViewColumn{ role: "hash" ; title: "#" ; width: 150 } + TableViewColumn{ role: "value" ; title: "Value" ; width: 100 } + TableViewColumn{ role: "address" ; title: "Address" ; } + + model: txModel + } } - } - property var logModel: ListModel { - id: logModel - } + Rectangle { + id: mainView + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.top: parent.top + SplitView { + id: splitView + height: 200 + anchors.top: parent.top + anchors.right: parent.right + anchors.left: parent.left + + TextArea { + id: codeView + width: parent.width /2 + } + + TextArea { + readOnly: true + } + } + + TableView { + id: blockTable + width: parent.width + anchors.top: splitView.bottom + anchors.bottom: logView.top + TableViewColumn{ role: "number" ; title: "#" ; width: 100 } + TableViewColumn{ role: "hash" ; title: "Hash" ; width: 560 } + + model: blockModel - TableView { - id: logView - width: parent.width - height: 150 - anchors.bottom: parent.bottom - TableViewColumn{ role: "description" ; title: "log" } + onDoubleClicked: { + popup.visible = true + popup.block = eth.getBlock(blockModel.get(row).hash) + popup.hashLabel.text = popup.block.hash + } + } - model: logModel + property var logModel: ListModel { + id: logModel + } + + TableView { + id: logView + width: parent.width + height: 150 + anchors.bottom: parent.bottom + TableViewColumn{ role: "description" ; title: "log" } + + model: logModel + } + } } FileDialog { @@ -146,7 +221,6 @@ ApplicationWindow { text: "Import App" } - Label { text: "0.0.1" } Label { anchors.right: peerImage.left anchors.rightMargin: 5 @@ -201,6 +275,25 @@ ApplicationWindow { } } + Window { + id: aboutWin + visible: false + title: "About" + minimumWidth: 300 + maximumWidth: 300 + maximumHeight: 200 + minimumHeight: 200 + + Text { + font.pointSize: 18 + text: "Eth Go" + } + + } + + function addTx(tx) { + txModel.insert(0, {hash: tx.hash, address: tx.address, value: tx.value}) + } function addBlock(block) { blockModel.insert(0, {number: block.number, hash: block.hash}) |