135 lines
3.3 KiB
Go
135 lines
3.3 KiB
Go
package gui
|
|
|
|
import "log"
|
|
|
|
import "github.com/andlabs/ui"
|
|
import _ "github.com/andlabs/ui/winmanifest"
|
|
|
|
import "github.com/davecgh/go-spew/spew"
|
|
|
|
func makeGenericArea(gb *GuiBox, newText *ui.AttributedString, custom func(*GuiButton)) {
|
|
// make this button just to get the default font (but don't display the button)
|
|
// There should be another way to do this (?)
|
|
var newB *GuiButton
|
|
newB = CreateFontButton(gb, "AREA")
|
|
newB.Box = gb
|
|
newB.Custom = custom
|
|
|
|
gw := gb.Window
|
|
// initialize the GuiArea{}
|
|
gw.Area = new(GuiArea)
|
|
gw.Area.Button = newB
|
|
gw.Area.Box = gb
|
|
gw.Area.UiAttrstr = newText
|
|
gw.Area.UiArea = ui.NewArea(gw.Area)
|
|
|
|
if (Config.Debug) {
|
|
spew.Dump(gw.Area.UiArea)
|
|
log.Println("DEBUGGING", Config.Debug)
|
|
} else {
|
|
log.Println("NOT DEBUGGING AREA mhAH.Button =", gw.Area.Button)
|
|
}
|
|
}
|
|
|
|
func AreaAppendText(newText *ui.AttributedString, what string, attrs ...ui.Attribute) {
|
|
start := len(newText.String())
|
|
end := start + len(what)
|
|
newText.AppendUnattributed(what)
|
|
for _, a := range attrs {
|
|
newText.SetAttribute(a, start, end)
|
|
}
|
|
}
|
|
|
|
func appendWithAttributes(newText *ui.AttributedString, what string, attrs ...ui.Attribute) {
|
|
start := len(newText.String())
|
|
end := start + len(what)
|
|
newText.AppendUnattributed(what)
|
|
for _, a := range attrs {
|
|
newText.SetAttribute(a, start, end)
|
|
}
|
|
}
|
|
|
|
func (ah GuiArea) Draw(a *ui.Area, p *ui.AreaDrawParams) {
|
|
tl := ui.DrawNewTextLayout(&ui.DrawTextLayoutParams{
|
|
String: ah.UiAttrstr,
|
|
DefaultFont: ah.Button.FB.Font(),
|
|
Width: p.AreaWidth,
|
|
Align: ui.DrawTextAlign(1),
|
|
})
|
|
p.Context.Text(tl, 0, 0)
|
|
defer tl.Free()
|
|
}
|
|
|
|
func (ah GuiArea) MouseEvent(a *ui.Area, me *ui.AreaMouseEvent) {
|
|
if (Config.Debug) {
|
|
log.Println("GOT MouseEvent() ah.Button =", ah.Button)
|
|
spew.Dump(me)
|
|
}
|
|
if (me.Down == 1) {
|
|
log.Println("GOT MOUSE DOWN")
|
|
log.Println("GOT MOUSE DOWN ah.Button =", ah.Button)
|
|
log.Println("GOT MOUSE UP ah.Button.FB =", ah.Button.FB)
|
|
}
|
|
if (me.Up == 1) {
|
|
log.Println("GOT MOUSE UP")
|
|
log.Println("GOT MOUSE UP ah.Button =", ah.Button)
|
|
log.Println("GOT MOUSE UP ah.Button.FB =", ah.Button.FB)
|
|
if (ah.Button.Custom != nil) {
|
|
ah.Button.Custom(ah.Button)
|
|
} else if (Data.MouseClick != nil) {
|
|
Data.MouseClick(ah.Button)
|
|
}
|
|
}
|
|
}
|
|
|
|
func (ah GuiArea) MouseCrossed(a *ui.Area, left bool) {
|
|
log.Println("GOT MouseCrossed()")
|
|
}
|
|
|
|
func (ah GuiArea) DragBroken(a *ui.Area) {
|
|
log.Println("GOT DragBroken()")
|
|
}
|
|
|
|
// TODO: fix KeyEvents
|
|
func (ah GuiArea) KeyEvent(a *ui.Area, ke *ui.AreaKeyEvent) (handled bool) {
|
|
log.Println("GOT KeyEvent()")
|
|
if (ke.Key == 10) {
|
|
log.Println("GOT ENTER")
|
|
log.Println("GOT ENTER")
|
|
log.Println("GOT ENTER")
|
|
}
|
|
if (ke.Key == 32) {
|
|
log.Println("GOT ENTER")
|
|
log.Println("GOT ENTER")
|
|
log.Println("GOT ENTER")
|
|
}
|
|
spew.Dump(ke)
|
|
return false
|
|
}
|
|
|
|
func ShowTextBox(gw *GuiWindow, newText *ui.AttributedString, custom func(*GuiButton), name string) *GuiBox {
|
|
log.Println("ShowTextBox() START")
|
|
if (gw == nil) {
|
|
log.Println("ShowTextBox() ERROR gw = nil")
|
|
return nil
|
|
}
|
|
log.Println("ShowTextBox() START gw =", gw)
|
|
|
|
var newbox *GuiBox
|
|
newbox = new(GuiBox)
|
|
newbox.Window = gw
|
|
newbox.Name = name
|
|
hbox := ui.NewVerticalBox()
|
|
newbox.UiBox = hbox
|
|
|
|
// TODO: allow padded & axis here
|
|
hbox.SetPadded(true)
|
|
|
|
add(gw.BoxMap["MAINBOX"], newbox)
|
|
|
|
makeGenericArea(newbox, newText, custom)
|
|
newbox.UiBox.Append(newbox.Window.Area.UiArea, true)
|
|
|
|
return newbox
|
|
}
|