func BugList(p chan string) gui.Widget { bugs := []gui.Widget{} bl, err := bug.List() if err != nil { panic("bug.List: " + err.String()) } attributes := bug.ListAttributes() bugtable := [][]gui.Widget{{gui.Text("id")}} for _, a := range attributes { bugtable[0] = append(bugtable[0], gui.Text(a)) } bugtable[0] = append(bugtable[0], gui.Text("date"), gui.Text("bug")) for bnum, b := range bl { b.Comments() // to get attributes bugname := fmt.Sprint(bug, "-", bnum) // bugs = append(bugs, gui.Text(""), gui.Text(bugname)) cs, err := b.Comments() if err != nil || len(cs) == 0 { continue } // for _, c := range cs { // bugs = append(bugs, gui.Text(c.Author), gui.Text(c.Date), gui.Text(c.Text)) // } bid := gui.Button(bugname) row := []gui.Widget{bid} for _, a := range attributes { row = append(row, AttributeChooser(b, a, WriteNow)) } bdate := gui.Text(cs[0].Date) //btitle := AttributeChooser(b, "title") btitle := gui.Markdown(b.Attributes["title"]) row = append(row, bdate, btitle) go func() { for { select { case _ = <-bid.Clicks(): p <- "/" + bugname case _ = <-bdate.Clicks(): p <- "/" + bugname } } }() bugtable = append(bugtable, row) } bugs = append(bugs, gui.Text(""), gui.Text(""), gui.Table(bugtable)) return gui.Column(bugs...) }
func BugPage(p chan string, btype έντομο.Type, bnum int) gui.Widget { bl, err := btype.List() if err != nil { return gui.Text("Error: " + err.String()) } if bnum >= len(bl) { return gui.Text(fmt.Sprint("Error: no such ", btype, " as number ", bnum)) } b := bl[bnum] cs, err := b.Comments() if err != nil { return gui.Text("Error: " + err.String()) } attrs := []gui.Widget{} for attr := range b.Attributes { attrs = append(attrs, gui.Row(gui.Text(attr+":"), AttributeChooser(b, attr, WriteNow))) } newcomment := gui.TextArea("") attrs = append(attrs, gui.Text("New comment:")) attrs = append(attrs, newcomment) submit := gui.Button("Add comment") attrs = append(attrs, submit) go func() { commentstr := "" for { select { case commentstr = <-newcomment.Changes(): fmt.Println("Got nice comment:", commentstr) // Nothing to do... case _ = <-submit.Clicks(): fmt.Println("Got add comment pushed.") b.AddComment(commentstr) p <- "/" + string(btype) + "-" + fmt.Sprint(bnum) return } } }() var bugs []gui.Widget for _, c := range cs { if len(c.Text) > 0 { bugs = append(bugs, gui.Row(gui.Text(c.Author), gui.Text(c.Date)), gui.Markdown(c.Text)) } } return gui.Column(append(attrs, gui.Table(transpose(bugs)))...) }
func NewWidget() gui.Window { window := gui.Window{"Class survey", "", nil} teamname := "" team := gui.Menu(0, "", "archimedes", "boltzmann", "curie", "doppler", "euler", "feynman", "galileo", "hamilton", "ising", "joule", "kelvin", "lagrange", "maxwell", "newton", "onsager", "planck", ) teamrow := gui.Table([][]gui.Widget{{gui.Text("Team:"), team}}) name := "" namebox := gui.EditText(name) namerow := gui.Row(gui.Text("Name:"), namebox) // namebox.HandleChanged = func(old string) (modified gui.Widget, refresh bool) { // window.Title = `Survey of ` + namebox.Text.String // return // } partner := "" partnerbox := gui.EditText(partner) partnerrow := gui.Row(gui.Text("Partner:"), partnerbox) donetext := "" dotoday := gui.TextArea(donetext) learnedtoday := "" learntoday := gui.TextArea(learnedtoday) problems := "" workwell := gui.TextArea(problems) button := gui.Button("Submit") widget := gui.Table([][]gui.Widget{ {teamrow}, {namerow}, {partnerrow}, {gui.Text("What did you do today?")}, {dotoday}, {gui.Text("What is one thing you learned today?")}, {learntoday}, {gui.Text("What is one thing that didn't work well today?")}, {workwell}, {button}, }) window.Contents = widget go func() { for { select { case teamname = <-team.Changes(): fmt.Println("Team name changed to", teamname) case name = <-namebox.Changes(): //fmt.Println("Name changed to", name) case partner = <-partnerbox.Changes(): //fmt.Println("Partner changed to", partner) case donetext = <-dotoday.Changes(): fmt.Println("Done text is", donetext) case learnedtoday = <-learntoday.Changes(): fmt.Println("Learned today is", learnedtoday) case problems = <-workwell.Changes(): fmt.Println("Problems is", problems) case _ = <-button.Clicks(): t := time.LocalTime() // First let's see if today has already been created if _, err := os.Stat(t.Format("2006-01-02")); err != nil { surveyfile.WriteString(t.Format("\\thisday{Monday}{2006-01-02}\n\n")) } else { fmt.Println("Day already exists.") } dir := t.Format("2006-01-02/15.04.05") err := os.MkdirAll(dir, 0777) if err != nil { fmt.Println("ERROR CREATING DIRECTORY", dir, "!") return } f, err := os.Create(filepath.Join(dir, name)) if err != nil { fmt.Println("ERROR CREATING FILE", filepath.Join(dir, name), "!", err) return } defer f.Close() _, err = fmt.Fprintf(f, "\\daily{%s}{%s}{%s}{%s}{\n%s\n}{\n%s\n}{\n%s\n}\n", t.Format("3:04PM"), name, partner, teamname, IndentWrapText(" ", CleanLatex(donetext)), IndentWrapText(" ", CleanLatex(learnedtoday)), IndentWrapText(" ", CleanLatex(problems))) if err == nil { surveyfile.WriteString(t.Format("\\input{2006-01-02/15.04.05/" + name + "}\n")) } else { fmt.Println("I ran into a bug!", err) return } window.Contents.Updater() <- gui.Text("Thank you, " + name + "!") } } }() return window }