From 3d2c3b0107d438dd081c57ef74036f4c5a03855f Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Mon, 3 Mar 2014 00:54:41 +0100
Subject: [PATCH] Using asset path helper (includes a debug path atm)

---
 ui/gui.go    |   9 +--
 ui/ui_lib.go |  27 +++++++
 wallet.qml   | 198 ++++++++++++++++++++++++++++++---------------------
 3 files changed, 147 insertions(+), 87 deletions(-)

diff --git a/ui/gui.go b/ui/gui.go
index 389fe4f68..196d2cd76 100644
--- a/ui/gui.go
+++ b/ui/gui.go
@@ -9,8 +9,6 @@ import (
 	"github.com/ethereum/eth-go/ethdb"
 	"github.com/ethereum/eth-go/ethutil"
 	"github.com/niemeyer/qml"
-	"bitbucket.org/kardianos/osext"
-    "path/filepath"
 	"math/big"
 	"strings"
 )
@@ -87,15 +85,12 @@ func (ui *Gui) Start() {
 	// Create a new QML engine
 	ui.engine = qml.NewEngine()
 
-	// Get Binary Directory
-	exedir , _ := osext.ExecutableFolder()
-
 	// Load the main QML interface
-	component, err := ui.engine.LoadFile(filepath.Join(exedir, "wallet.qml"))
+	component, err := ui.engine.LoadFile(AssetPath("wallet.qml"))
 	if err != nil {
 		panic(err)
 	}
-	ui.engine.LoadFile(filepath.Join(exedir, "transactions.qml"))
+	ui.engine.LoadFile(AssetPath("transactions.qml"))
 
 	ui.win = component.CreateWindow(nil)
 
diff --git a/ui/ui_lib.go b/ui/ui_lib.go
index c956fd032..2a1abee23 100644
--- a/ui/ui_lib.go
+++ b/ui/ui_lib.go
@@ -1,9 +1,13 @@
 package ethui
 
 import (
+	"bitbucket.org/kardianos/osext"
 	"github.com/ethereum/eth-go"
 	"github.com/ethereum/eth-go/ethutil"
 	"github.com/niemeyer/qml"
+	"path"
+	"path/filepath"
+	"runtime"
 )
 
 // UI Library that has some basic functionality exposed
@@ -38,3 +42,26 @@ func (ui *UiLib) Connect(button qml.Object) {
 func (ui *UiLib) ConnectToPeer(addr string) {
 	ui.eth.ConnectToPeer(addr)
 }
+
+func (ui *UiLib) AssetPath(p string) string {
+	return AssetPath(p)
+}
+
+func AssetPath(p string) string {
+	var base string
+	switch runtime.GOOS {
+	case "darwin":
+		// Get Binary Directory
+		exedir, _ := osext.ExecutableFolder()
+		base = filepath.Join(exedir, "../Resources")
+		base = "/Users/jeffrey/go/src/github.com/ethereum/go-ethereum"
+	case "linux":
+		base = "/usr/share/ethereal"
+	case "window":
+		fallthrough
+	default:
+		base = "."
+	}
+
+	return path.Join(base, p)
+}
diff --git a/wallet.qml b/wallet.qml
index e86551ad6..39bc21f39 100644
--- a/wallet.qml
+++ b/wallet.qml
@@ -115,116 +115,141 @@ ApplicationWindow {
 					}
 				}
 			}
-						
-		}
-
-		property var txModel: ListModel {
-			id: txModel
 		}
 
 		Rectangle {
-			id: historyView
-			property var title: "Transactions"
+			id: mainView
+			color: "#00000000"
 			anchors.right: parent.right
 			anchors.left: menu.right
 			anchors.bottom: parent.bottom
 			anchors.top: parent.top
-			TableView {
-				id: txTableView
-				anchors.fill: parent
-				TableViewColumn{ role: "value" ; title: "Value" ; width: 100 }
-				TableViewColumn{ role: "address" ; title: "Address" ; width: 430 }
 
-				model: txModel
+			property var txModel: ListModel {
+				id: txModel
 			}
-		}
 
-		Rectangle {
-			id: newTxView
-			property var title: "New transaction"
-			visible: false
-			anchors.right: parent.right
-			anchors.left: menu.right
-			anchors.bottom: parent.bottom
-			anchors.top: parent.top
-			color: "#00000000"
+			Rectangle {
+				id: historyView
+				anchors.fill: parent
 
-			ColumnLayout {
-				width: 400
-				anchors.left: parent.left
-				anchors.top: parent.top
-				anchors.leftMargin: 5
-				anchors.topMargin: 5
-				TextField {
-					id: txAmount
-					width: 200
-					placeholderText: "Amount"
-				}
+				property var title: "Transactions"
+				TableView {
+					id: txTableView
+					anchors.fill: parent
+					TableViewColumn{ role: "value" ; title: "Value" ; width: 100 }
+					TableViewColumn{ role: "address" ; title: "Address" ; width: 430 }
 
-				TextField {
-					id: txReceiver
-					placeholderText: "Receiver Address (or empty for contract)"
-					Layout.fillWidth: true
+					model: txModel
 				}
+			}
 
-				Label {
-					text: "Transaction data"
-				}
-				TextArea {
-					id: codeView
+			Rectangle {
+				id: newTxView
+				property var title: "New transaction"
+				visible: false
+				anchors.fill: parent
+				color: "#00000000"
+
+				ColumnLayout {
+					width: 400
+					anchors.left: parent.left
+					anchors.top: parent.top
+					anchors.leftMargin: 5
 					anchors.topMargin: 5
-					Layout.fillWidth: true
-					width: parent.width /2 
-				}
+					TextField {
+						id: txAmount
+						width: 200
+						placeholderText: "Amount"
+					}
+
+					TextField {
+						id: txReceiver
+						placeholderText: "Receiver Address (or empty for contract)"
+						Layout.fillWidth: true
+					}
 
-				Button {
-					text: "Send"
-					onClicked: {
-						console.log(eth.createTx(txReceiver.text, txAmount.text, codeView.text))
+					Label {
+						text: "Transaction data"
+					}
+					TextArea {
+						id: codeView
+						anchors.topMargin: 5
+						Layout.fillWidth: true
+						width: parent.width /2 
+					}
+
+					Button {
+						text: "Send"
+						onClicked: {
+							console.log(eth.createTx(txReceiver.text, txAmount.text, codeView.text))
+						}
 					}
 				}
 			}
-		}
 
 
-		Rectangle {
-			id: networkView
-			property var title: "Network"
-			visible: false
-			anchors.right: parent.right
-			anchors.bottom: parent.bottom
-			anchors.top: parent.top
+			Rectangle {
+				id: networkView
+				property var title: "Network"
+				visible: false
+				anchors.fill: parent
+
+				TableView {
+					id: blockTable
+					width: parent.width
+					anchors.top: parent.top
+					anchors.bottom: logView.top
+					TableViewColumn{ role: "number" ; title: "#" ; width: 100 }
+					TableViewColumn{ role: "hash" ; title: "Hash" ; width: 560 }
+
+					model: blockModel
+
+					/*
+					 onDoubleClicked: {
+						 popup.visible = true
+						 popup.block = eth.getBlock(blockModel.get(row).hash)
+						 popup.hashLabel.text = popup.block.hash
+					 }
+					 */
+				}
 
-			TableView {
-				id: blockTable
-				width: parent.width
-				anchors.top: parent.top
-				anchors.bottom: logView.top
-				TableViewColumn{ role: "number" ; title: "#" ; width: 100 }
-				TableViewColumn{ role: "hash" ; title: "Hash" ; width: 560 }
+				property var logModel: ListModel {
+					id: logModel
+				}
 
-				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
+			/*
+			signal addPlugin(string name)
+			Component {
+				id: pluginWindow
+				Rectangle {
+					anchors.fill: parent
+					Label {
+						id: pluginTitle
+						anchors.centerIn: parent
+						text: "Hello world"
+					}
+					Component.onCompleted: setView(this)
+				}
 			}
 
-			TableView {
-				id: logView
-				width: parent.width
-				height: 150
-				anchors.bottom: parent.bottom
-				TableViewColumn{ role: "description" ; title: "log" }
-
-				model: logModel
+			onAddPlugin: {
+				var pluginWin = pluginWindow.createObject(mainView)
+				console.log(pluginWin)
+				pluginWin.pluginTitle.text = "Test"
 			}
+			*/
 		}
 	}
 
@@ -249,6 +274,7 @@ ApplicationWindow {
 				}
 				text: "Connect"
 			}
+
 			Button {
 				id: importAppButton
 				anchors.left: connectButton.right
@@ -304,6 +330,10 @@ ApplicationWindow {
 			anchors.left: parent.left
 			anchors.leftMargin: 10
 			placeholderText: "address:port"
+			onAccepted: {
+				ui.connectToPeer(addrField.text)
+				addPeerWin.visible = false
+			}
 		}
 		Button {
 			anchors.left: addrField.right
@@ -315,6 +345,9 @@ ApplicationWindow {
 				addPeerWin.visible = false
 			}
 		}
+		Component.onCompleted: {
+			addrField.focus = true
+		}
 	}
 
 	Window {
@@ -346,6 +379,11 @@ ApplicationWindow {
 
 	}
 
+	function loadPlugin(name) {
+		console.log("Loading plugin" + name)
+		mainView.addPlugin(name)
+	}
+
 	function setWalletValue(value) {
 		walletValueLabel.text = value
 	}
-- 
GitLab