forked from cerc-io/plugeth
74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
|
package ethui
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"github.com/ethereum/eth-go/ethchain"
|
||
|
"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 := &QBlock{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", NewQStateObject(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()
|
||
|
}
|