125 lines
2.0 KiB
Go
125 lines
2.0 KiB
Go
|
// This is a simple example
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
"strings"
|
||
|
|
||
|
"go.wit.com/gui"
|
||
|
"go.wit.com/log"
|
||
|
|
||
|
"go.wit.com/lib/gadgets"
|
||
|
)
|
||
|
|
||
|
var lw *gadgets.BasicWindow
|
||
|
var allsections []*section
|
||
|
|
||
|
type section struct {
|
||
|
name string
|
||
|
parent *gui.Node
|
||
|
box *gui.Node
|
||
|
group *gui.Node
|
||
|
checkbox *gui.Node
|
||
|
repos []*gui.Node
|
||
|
}
|
||
|
|
||
|
func listWindow() {
|
||
|
if lw != nil {
|
||
|
lw.Toggle()
|
||
|
return
|
||
|
}
|
||
|
lw = gadgets.NewBasicWindow(me.myGui, "go.wit.com repositories")
|
||
|
lw.Custom = func() {
|
||
|
log.Warn("got to close")
|
||
|
}
|
||
|
|
||
|
lw.Make()
|
||
|
lw.StandardClose()
|
||
|
lw.Draw()
|
||
|
box := lw.Box()
|
||
|
group := box.NewGroup("list")
|
||
|
group.NewButton("blah", func() {})
|
||
|
|
||
|
var lines []string
|
||
|
var curs *section
|
||
|
|
||
|
lines = dumpURL("https://go.wit.com/list")
|
||
|
for i, line := range lines {
|
||
|
if line == "" {
|
||
|
continue
|
||
|
}
|
||
|
if line[0] == '#' {
|
||
|
curs = NewSection(group, line)
|
||
|
log.Warn("new group:", line)
|
||
|
continue
|
||
|
}
|
||
|
log.Warn(i, line)
|
||
|
parts := strings.Split(line, " ")
|
||
|
if curs != nil {
|
||
|
curs.add(parts[0])
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *section) add(path string) {
|
||
|
if s == nil {
|
||
|
return
|
||
|
}
|
||
|
tmp := s.parent.NewLabel(path)
|
||
|
s.repos = append(s.repos, tmp)
|
||
|
}
|
||
|
|
||
|
func NewSection(parent *gui.Node, path string) *section {
|
||
|
news := new(section)
|
||
|
news.parent = parent
|
||
|
news.box = news.parent.NewBox("bw vbox", true)
|
||
|
news.group = news.box.NewGroup(path)
|
||
|
news.checkbox = news.box.NewCheckbox("hide")
|
||
|
news.checkbox.Custom = func() {
|
||
|
news.toggle()
|
||
|
}
|
||
|
allsections = append(allsections, news)
|
||
|
return news
|
||
|
}
|
||
|
|
||
|
func (s *section) toggle() {
|
||
|
log.Warn(s.name)
|
||
|
for i, n := range s.repos {
|
||
|
log.Warn(i, n.String())
|
||
|
n.Hide()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
func dumpURL(url string) string {
|
||
|
resp, err := http.Get(url)
|
||
|
if err != nil {
|
||
|
return ""
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
|
||
|
return resp.Body.String()
|
||
|
|
||
|
_, err = io.Copy(os.Stdout, resp.Body)
|
||
|
if err != nil {
|
||
|
return ""
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
|
||
|
func dumpURL(url string) []string {
|
||
|
resp, err := http.Get(url)
|
||
|
if err != nil {
|
||
|
return nil
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
|
||
|
bodyBytes, err := ioutil.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
return strings.Split(string(bodyBytes), "\n")
|
||
|
}
|