aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-02-23 08:56:04 +0800
committerobscuren <geffobscura@gmail.com>2014-02-23 08:56:04 +0800
commit0656f465b0c0690f237e42ac1e8f306dcda6c40b (patch)
treecf0232f8993125e372d6c1354b41ccd96089ae0e
parentaa33a4b2fb9dc07468498decceb6fdb56d38f54d (diff)
downloaddexon-0656f465b0c0690f237e42ac1e8f306dcda6c40b.tar.gz
dexon-0656f465b0c0690f237e42ac1e8f306dcda6c40b.tar.zst
dexon-0656f465b0c0690f237e42ac1e8f306dcda6c40b.zip
Added transactions window
-rw-r--r--transactions.qml9
-rw-r--r--ui/gui.go19
-rw-r--r--wallet.qml177
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" }
+}
diff --git a/ui/gui.go b/ui/gui.go
index 51fd6d9a8..f0e281de1 100644
--- a/ui/gui.go
+++ b/ui/gui.go
@@ -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})