// This is a simple example package main import ( "io/ioutil" "strings" "go.wit.com/log" "go.wit.com/gui/gui" "go.wit.com/gui/gadgets" "go.wit.com/gui/gadgets/repostatus" "go.wit.com/apps/control-panel-dns/smartwindow" ) var myGui *gui.Node var allrepos []*repo type repo struct { path string lasttagrev string lasttag string tags []string pLabel *gui.Node // path label bLabel *gui.Node // branch label lastLabel *gui.Node // last tagged version label vLabel *gui.Node // version label // tagsDrop *gui.Node // list of all tags dirtyLabel *gui.Node // git state (dirty or not?) masterVersion *gui.Node // the master branch version develVersion *gui.Node // the devel branch version jcarrVersion *gui.Node // the jcarr branch version cButton *gui.Node // commit button pButton *gui.Node // push button status *repostatus.RepoStatus } func main() { myGui = gui.New().Default() repoworld() /* for i, r := range allrepos { log.Warn("scannning", i, r.path) r.scan() } */ gui.Watchdog() } func (r *repo) getPath() string { return r.path } func addRepo(grid *gui.Node, path string) { newRepo := new(repo) if repostatus.VerifyLocalGoRepo(path) { log.Warn("newRepo actually exists", newRepo.getPath()) } else { log.Warn("newRepo does not exist", newRepo.getPath()) return } newRepo.path = path newRepo.pLabel = grid.NewLabel(path) newRepo.bLabel = grid.NewLabel("") newRepo.lastLabel = grid.NewLabel("") newRepo.vLabel = grid.NewLabel("") // newRepo.tagsDrop = grid.NewDropdown("tags") newRepo.masterVersion = grid.NewLabel("") newRepo.develVersion = grid.NewLabel("") newRepo.jcarrVersion = grid.NewLabel("") newRepo.dirtyLabel = grid.NewLabel("") /* newRepo.cButton = grid.NewButton("status", func () { log.Println("repo status for", newRepo.path) newRepo.scan() if newRepo.status == nil { newRepo.status = repostatus.New(myGui, newRepo.path) newRepo.status.Vertical() newRepo.status.Horizontal() newRepo.status.Make() newRepo.status.Draw() newRepo.status.Draw2() } newRepo.status.Toggle() }) */ newRepo.pButton = grid.NewButton("rescan", func () { newRepo.newScan() }) /* grid.NewButton("SierpiƄski", func () { if newRepo.status != nil { log.Warn("status window already exists") } newRepo.status = repostatus.New(myGui, newRepo.path) newRepo.status.Horizontal() newRepo.status.Make() newRepo.status.Make2() }) */ grid.NewButton("Toggle()", func () { if newRepo.status == nil { log.Warn("status window doesn't exist") return } log.Warn("status window exists. trying Update() here") newRepo.status.Toggle() }) grid.NewButton("TestDraw()", func () { if newRepo.status == nil { log.Warn("status window doesn't exist") return } log.Warn("status window exists. trying TestDraw() here") newRepo.status.TestDraw() }) if path == "" { newRepo.cButton.Hide() newRepo.pButton.Hide() } newRepo.status = repostatus.New(myGui, newRepo.path) newRepo.status.Horizontal() newRepo.status.Make() newRepo.status.Make2() newRepo.status.Update() newRepo.newScan() allrepos = append(allrepos, newRepo) } // This creates a window func repoworld() { win := gadgets.NewBasicWindow(myGui, "git autotypist. it types faster than you can.") box := win.Box().NewBox("bw vbox", false) // box2 := win.Box().NewBox("bw vbox", false) group := box.NewGroup("go repositories (read from ~/.config/myrepolist)") grid := group.NewGrid("test", 11, 1) grid.NewLabel("") grid.NewLabel("branch") grid.NewLabel("last tag") grid.NewLabel("Current Version") // grid.NewLabel("tags") grid.NewLabel("master") grid.NewLabel("devel") grid.NewLabel("jcarr") grid.NewLabel("Status") grid.NewLabel("commit") grid.NewLabel("Toggle()") grid.NewLabel("Draw()") repos := myrepolist() for _, repo := range repos { log.Warn("repo =", repo) addRepo(grid, repo) } win.Draw() } // This creates a window func hellosmart() { win := smartwindow.New() win.SetParent(myGui) win.InitWindow() win.Title("hellosmart test") win.Vertical() win.SetDraw(smartDraw) win.Make() win.Box().NewButton("test smartwindow", func () { log.Println("smart") }) } func smartDraw(sw *smartwindow.SmartWindow) { sw.Box().NewButton("hello", func () { log.Println("smart") }) } func myrepolist() []string { content, _ := ioutil.ReadFile("/home/jcarr/.config/myrepolist") out := string(content) out = strings.TrimSpace(out) lines := strings.Split(out, "\n") return lines } func (r *repo) newScan() bool { if r.status == nil { log.Warn("repo.status = nil. not initialized for some reason") return false } // r.scan() if repostatus.VerifyLocalGoRepo(r.getPath()) { log.Warn("repo actually exists", r.getPath()) } else { log.Warn("repo does not exist", r.getPath()) return false } mn := r.status.GetMasterName() mv := r.status.GetMasterVersion() r.masterVersion.Set(mn + " " + mv) dn := r.status.GetDevelName() dv := r.status.GetDevelVersion() r.develVersion.Set(dn + " " + dv) un := r.status.GetUserName() uv := r.status.GetUserVersion() r.jcarrVersion.Set(un + " " + uv) cbname := r.status.GetCurrentBranchName() cbversion := r.status.GetCurrentBranchVersion() ltversion := r.status.GetLastTagVersion() r.lastLabel.Set(cbname + " " + cbversion) r.vLabel.Set(cbname + " " + ltversion) if r.status.CheckDirty() { log.Warn("CheckDirty() true") r.dirtyLabel.Set("dirty") return false } log.Warn("CheckDirty() no") r.dirtyLabel.Set("not dirty") if r.status.CheckBranches() { log.Warn("Branches are Perfect") r.dirtyLabel.SetText("PEFECT") return true } else { log.Warn("Branches are not Perfect") r.dirtyLabel.SetText("merge") } return false }