diff options
Diffstat (limited to 'ethereal/ui/gui.go')
-rw-r--r-- | ethereal/ui/gui.go | 107 |
1 files changed, 83 insertions, 24 deletions
diff --git a/ethereal/ui/gui.go b/ethereal/ui/gui.go index 46bfa0133..65c87c4c2 100644 --- a/ethereal/ui/gui.go +++ b/ethereal/ui/gui.go @@ -24,7 +24,8 @@ type Gui struct { eth *eth.Ethereum // The public Ethereum library - lib *EthLib + lib *EthLib + uiLib *UiLib txDb *ethdb.LDBDatabase @@ -75,19 +76,55 @@ func (gui *Gui) Start(assetPath string) { // Expose the eth library and the ui library to QML context.SetVar("eth", gui) - uiLib := NewUiLib(gui.engine, gui.eth, assetPath) - context.SetVar("ui", uiLib) + gui.uiLib = NewUiLib(gui.engine, gui.eth, assetPath) + context.SetVar("ui", gui.uiLib) // Load the main QML interface data, _ := ethutil.Config.Db.Get([]byte("KeyRing")) - var err error - var component qml.Object - firstRun := len(data) == 0 + /* + var err error + var component qml.Object + firstRun := len(data) == 0 + + if firstRun { + component, err = gui.engine.LoadFile(uiLib.AssetPath("qml/first_run.qml")) + } else { + component, err = gui.engine.LoadFile(uiLib.AssetPath("qml/wallet.qml")) + } + if err != nil { + ethutil.Config.Log.Infoln("FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'") + + panic(err) + } + + gui.win = component.CreateWindow(nil) + uiLib.win = gui.win + db := &Debugger{gui.win, make(chan bool)} + gui.lib.Db = db + uiLib.Db = db + + // Add the ui as a log system so we can log directly to the UGI + ethutil.Config.Log.AddLogSystem(gui) + + // Loads previous blocks + if firstRun == false { + go gui.setInitialBlockChain() + go gui.readPreviousTransactions() + go gui.update() + } - if firstRun { - component, err = gui.engine.LoadFile(uiLib.AssetPath("qml/first_run.qml")) + gui.win.Show() + gui.win.Wait() + + gui.eth.Stop() + */ + + var win *qml.Window + var err error + if len(data) == 0 { + win, err = gui.showKeyImport(context) } else { - component, err = gui.engine.LoadFile(uiLib.AssetPath("qml/wallet.qml")) + win, err = gui.showWallet(context) } if err != nil { ethutil.Config.Log.Infoln("FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'") @@ -95,26 +132,48 @@ func (gui *Gui) Start(assetPath string) { panic(err) } - gui.win = component.CreateWindow(nil) - uiLib.win = gui.win - db := &Debugger{gui.win, make(chan bool)} - gui.lib.Db = db - uiLib.Db = db + win.Show() + win.Wait() + + gui.eth.Stop() +} + +func (gui *Gui) showWallet(context *qml.Context) (*qml.Window, error) { + component, err := gui.engine.LoadFile(gui.uiLib.AssetPath("qml/wallet.qml")) + if err != nil { + return nil, err + } - // Add the ui as a log system so we can log directly to the UGI - ethutil.Config.Log.AddLogSystem(gui) + win := gui.createWindow(component) - // Loads previous blocks - if firstRun == false { - go gui.setInitialBlockChain() - go gui.readPreviousTransactions() - go gui.update() + go gui.setInitialBlockChain() + go gui.readPreviousTransactions() + go gui.update() + + return win, nil +} + +func (gui *Gui) showKeyImport(context *qml.Context) (*qml.Window, error) { + context.SetVar("lib", gui.lib) + component, err := gui.engine.LoadFile(gui.uiLib.AssetPath("qml/first_run.qml")) + if err != nil { + return nil, err } - gui.win.Show() - gui.win.Wait() + return gui.createWindow(component), nil +} - gui.eth.Stop() +func (gui *Gui) createWindow(comp qml.Object) *qml.Window { + win := comp.CreateWindow(nil) + + gui.win = win + gui.uiLib.win = win + + db := &Debugger{gui.win, make(chan bool)} + gui.lib.Db = db + gui.uiLib.Db = db + + return gui.win } func (gui *Gui) setInitialBlockChain() { |