75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package ethui
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"github.com/ethereum/eth-go/ethchain"
 | |
| 	"github.com/ethereum/eth-go/ethpub"
 | |
| 	"github.com/ethereum/eth-go/ethutil"
 | |
| 	"github.com/go-qml/qml"
 | |
| 	"math/big"
 | |
| 	"path/filepath"
 | |
| )
 | |
| 
 | |
| type HtmlApplication struct {
 | |
| 	win     *qml.Window
 | |
| 	webView qml.Object
 | |
| 	engine  *qml.Engine
 | |
| 	lib     *UiLib
 | |
| 	path    string
 | |
| }
 | |
| 
 | |
| func NewHtmlApplication(path string, lib *UiLib) *HtmlApplication {
 | |
| 	engine := qml.NewEngine()
 | |
| 
 | |
| 	return &HtmlApplication{engine: engine, lib: lib, path: path}
 | |
| 
 | |
| }
 | |
| 
 | |
| func (app *HtmlApplication) Create() error {
 | |
| 	component, err := app.engine.LoadFile(app.lib.AssetPath("qml/webapp.qml"))
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 
 | |
| 	if filepath.Ext(app.path) == "eth" {
 | |
| 		return errors.New("Ethereum package not yet supported")
 | |
| 
 | |
| 		// TODO
 | |
| 		ethutil.OpenPackage(app.path)
 | |
| 	}
 | |
| 
 | |
| 	win := component.CreateWindow(nil)
 | |
| 	win.Set("url", app.path)
 | |
| 	webView := win.ObjectByName("webView")
 | |
| 
 | |
| 	app.win = win
 | |
| 	app.webView = webView
 | |
| 
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (app *HtmlApplication) Engine() *qml.Engine {
 | |
| 	return app.engine
 | |
| }
 | |
| 
 | |
| func (app *HtmlApplication) Window() *qml.Window {
 | |
| 	return app.win
 | |
| }
 | |
| 
 | |
| func (app *HtmlApplication) NewBlock(block *ethchain.Block) {
 | |
| 	b := ðpub.PBlock{Number: int(block.BlockInfo().Number), Hash: ethutil.Hex(block.Hash())}
 | |
| 	app.webView.Call("onNewBlockCb", b)
 | |
| }
 | |
| 
 | |
| func (app *HtmlApplication) ObjectChanged(stateObject *ethchain.StateObject) {
 | |
| 	app.webView.Call("onObjectChangeCb", ethpub.NewPStateObject(stateObject))
 | |
| }
 | |
| 
 | |
| func (app *HtmlApplication) StorageChanged(stateObject *ethchain.StateObject, addr []byte, value *big.Int) {
 | |
| 	app.webView.Call("onStorageChangeCb", nil)
 | |
| }
 | |
| 
 | |
| func (app *HtmlApplication) Destroy() {
 | |
| 	app.engine.Destroy()
 | |
| }
 |