/* A Standard Window */ package gadgets import ( "go.wit.com/gui" "go.wit.com/log" ) type BasicWindow struct { ready bool hidden bool vertical bool title string parent *gui.Node win *gui.Node // window widget box *gui.Node // box Custom func() } func NewBasicWindow(parent *gui.Node, title string) *BasicWindow { var w *BasicWindow w = &BasicWindow{ parent: parent, title: title, vertical: false, } log.Warn("NewBasicWindow() END") return w } func (w *BasicWindow) Show() { if !w.Ready() { return } w.win.Show() w.hidden = false return } func (w *BasicWindow) Hide() { if !w.Ready() { return } log.Warn("BasicWindow.Hide() here") w.win.Hide() w.hidden = true return } func (w *BasicWindow) Toggle() { if !w.Ready() { return } if w.hidden { w.Show() w.hidden = false } else { w.Hide() w.hidden = true } return } func (w *BasicWindow) Title(title string) { if !w.Ready() { return } w.win.SetText(title) return } // sets this window to run os.Exit() func (w *BasicWindow) StandardClose() { if !w.Initialized() { return } w.win.Custom = w.win.StandardClose /* log.Warn("BasicWindow.Custom() closed. TODO: handle this", w.title) log.Warn("BasicWindow.Custom() closed. handled properly?", w.title) if w.Custom != nil { log.Warn("BasicWindow.Custom() HAS CUSTOM") w.Custom() return } w.win.StandardExit() } */ return } // sets this window to run os.Exit() func (w *BasicWindow) StandardExit() { if !w.Ready() { return } w.win.Custom = func() { log.Warn("BasicWindow.Custom() closed. TODO: handle this", w.title) log.Warn("BasicWindow.Custom() closed. handled properly?", w.title) if w.Custom != nil { log.Warn("BasicWindow.Custom() HAS CUSTOM") w.Custom() return } w.win.StandardExit() } return } // Returns true if initialized func (w *BasicWindow) Initialized() bool { if w == nil { return false } if w.parent == nil { return false } return true } // Returns true if the status is valid func (w *BasicWindow) Ready() bool { if !w.Initialized() { return false } if !w.parent.Ready() { return false } return w.ready } func (w *BasicWindow) Box() *gui.Node { if !w.Initialized() { return nil } if w.win == nil { w.Draw() } return w.box } func (w *BasicWindow) Vertical() { log.Warn("BasicWindow() Vertical() START w.vertical =", w.vertical, w.title) if w == nil { return } w.vertical = true log.Warn("BasicWindow() Vertical() END w.vertical =", w.vertical, w.title) } func (w *BasicWindow) Horizontal() { log.Warn("BasicWindow() Horizontal() START w.vertical =", w.vertical, w.title) if w == nil { return } w.vertical = false log.Warn("BasicWindow() Horizontal() END w.vertical =", w.vertical, w.title) } func (w *BasicWindow) Make() { if !w.Initialized() { return } if w.win != nil { log.Warn("BasicWindow.Make() window was already created") return } w.win = w.parent.RawWindow(w.title) // if Custom isn't set, set it here. This prevents the application from // os.Exit() if the window is closed. It destroy's the widgets in the toolkit plugins // the the window still exists in the binary tree and functions normally // I like to call this Sierpinski mode if w.win.Custom == nil { w.win.Custom = func() { log.Warn("BasicWindow.Custom() closed. TODO: handle this", w.title) log.Warn("BasicWindow.Custom() closed. handled properly?", w.title) if w.Custom != nil { w.Custom() } } } if w.vertical { w.box = w.win.NewVerticalBox("BW VBOX") log.Log(INFO, "BasicWindow.Make() made NewVerticalBox", w.title) } else { w.box = w.win.NewHorizontalBox("BW HBOX") log.Log(INFO, "BasicWindow.Make() made NewHorizontalBox", w.title) } w.ready = true } func (w *BasicWindow) TestDraw() { if !w.Initialized() { return } if w.win == nil { log.Warn("BasicWindow.TestDraw() can't draw on window == nil") w.Make() } log.Warn("BasicWindow.TestDraw() RUNNING HERE") w.win.TestDraw() } func (w *BasicWindow) Draw() { if !w.Initialized() { return } if w.win != nil { log.Warn("BasicWindow.Draw() window was already created") w.Make() } w.win.TestDraw() }