aboutsummaryrefslogblamecommitdiffstats
path: root/ethereal/ui/ui_lib.go
blob: ddc955176c9dbc5496d8a4bd5f77237cdf5afce5 (plain) (tree)
1
2
3
4
5
6
7
8
9




                                            
                               
              

 




                     




                                                       
                        
                                      


                                


                                                                               
                                                                     

 


                                                    
 
                    

 
                                        

                                                 
 

                    
 


                                                                           
                                   






                                                                    





                          
                                             
                          
                                  

                                            





                                             

                                             
                                         
 
 



                                                                                                      
                                                                     
         
                                     








                                                 
 

                                           
                                  


                       
package ethui

import (
    "github.com/ethereum/eth-go"
    "github.com/ethereum/eth-go/ethutil"
    "github.com/go-qml/qml"
    "path"
)

type memAddr struct {
    Num   string
    Value string
}

// UI Library that has some basic functionality exposed
type UiLib struct {
    engine    *qml.Engine
    eth       *eth.Ethereum
    connected bool
    assetPath string
    // The main application window
    win      *qml.Window
    Db       *Debugger
    DbWindow *DebuggerWindow
}

func NewUiLib(engine *qml.Engine, eth *eth.Ethereum, assetPath string) *UiLib {
    return &UiLib{engine: engine, eth: eth, assetPath: assetPath}
}

func (ui *UiLib) OpenQml(path string) {
    container := NewQmlApplication(path[7:], ui)
    app := NewExtApplication(container, ui)

    go app.run()
}

func (ui *UiLib) OpenHtml(path string) {
    container := NewHtmlApplication(path, ui)
    app := NewExtApplication(container, ui)

    go app.run()
}

func (ui *UiLib) Muted(content string) {
    component, err := ui.engine.LoadFile(ui.AssetPath("qml/muted.qml"))
    if err != nil {
        logger.Debugln(err)

        return
    }
    win := component.CreateWindow(nil)
    go func() {
        path := "file://" + ui.AssetPath("muted/index.html")
        win.Set("url", path)

        win.Show()
        win.Wait()
    }()
}

func (ui *UiLib) Connect(button qml.Object) {
    if !ui.connected {
        ui.eth.Start(true)
        ui.connected = true
        button.Set("enabled", false)
    }
}

func (ui *UiLib) ConnectToPeer(addr string) {
    ui.eth.ConnectToPeer(addr)
}

func (ui *UiLib) AssetPath(p string) string {
    return path.Join(ui.assetPath, p)
}

func (self *UiLib) StartDbWithContractAndData(contractHash, data string) {
    dbWindow := NewDebuggerWindow(self)
    object := self.eth.StateManager().CurrentState().GetStateObject(ethutil.FromHex(contractHash))
    if len(object.Script()) > 0 {
        dbWindow.SetCode("0x" + ethutil.Hex(object.Script()))
    }
    dbWindow.SetData("0x" + data)

    dbWindow.Show()
}

func (self *UiLib) StartDbWithCode(code string) {
    dbWindow := NewDebuggerWindow(self)
    dbWindow.SetCode("0x" + code)
    dbWindow.Show()
}

func (self *UiLib) StartDebugger() {
    dbWindow := NewDebuggerWindow(self)
    //self.DbWindow = dbWindow

    dbWindow.Show()
}