package main

import "time"
import "log"
import "fmt"

import "github.com/andlabs/ui"
import _ "github.com/andlabs/ui/winmanifest"

var mainwin *ui.Window
var hbox *ui.Box
var vbox *ui.Box
var newgroup *ui.Group

func makeSplashPage() ui.Control {
	hbox = ui.NewHorizontalBox()
	hbox.SetPadded(true)

	group := ui.NewGroup("Numbers")
	group.SetMargined(true)
	hbox.Append(group, true)

	vbox = ui.NewVerticalBox()
	vbox.SetPadded(true)
	group.SetChild(vbox)

	spinbox := ui.NewSpinbox(47, 100)
	slider  := ui.NewSlider(21, 100)
	pbar    := ui.NewProgressBar()

	spinbox.OnChanged(func(*ui.Spinbox) {
		slider.SetValue(spinbox.Value())
		pbar.SetValue(spinbox.Value())
	})
	slider.OnChanged(func(*ui.Slider) {
		spinbox.SetValue(slider.Value())
		pbar.SetValue(slider.Value())
	})
	vbox.Append(spinbox, false)
	vbox.Append(slider, false)
	vbox.Append(pbar, false)

	return hbox
}

func setupUI() {
	mainwin = ui.NewWindow("gui-example1", 300, 200, false)
	mainwin.OnClosing(func(*ui.Window) bool {
		ui.Quit()
		return true
	})
	ui.OnShouldQuit(func() bool {
		mainwin.Destroy()
		return true
	})

	tab := ui.NewTab()
	mainwin.SetChild(tab)
	mainwin.SetMargined(true)

	tab.Append("WIT Splash", makeSplashPage())
	tab.SetMargined(0, true)

	mainwin.Show()
}

func main() {
	go ui.Main(setupUI)

	// locks up GTK after a while (50 times)
	time.Sleep(1000 * time.Millisecond)
	count := 0
	for {
		time.Sleep(300 * time.Millisecond)
		log.Println("sleep")

		if (newgroup == nil) {
			name := "Test " + fmt.Sprintf("%d", count)
			log.Println("name=",name)
			newgroup = ui.NewGroup(name)
			newgroup.SetMargined(true)
			hbox.Append(newgroup, false)
			// newgroup = append(newgroup, group)
			count += 1
		} else {
			hbox.Delete(1)
			// newgroup.Delete()
			// can't destroy when there is a parent
			newgroup.Destroy()
			newgroup = nil
		}
	}
}