// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "fmt" "sync" "go.wit.com/gui" "go.wit.com/lib/gadgets" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/log" ) type stdPatchsetTableWin struct { sync.Mutex win *gadgets.GenericWindow // the machines gui window box *gui.Node // the machines gui parent box widget TB *forgepb.PatchsetsTable // the gui table buffer update bool // if the window should be updated } func (w *stdPatchsetTableWin) Toggle() { if w == nil { return } if w.win == nil { return } w.win.Toggle() } func makePatchsetsWin() *stdPatchsetTableWin { dwin := new(stdPatchsetTableWin) dwin.win = gadgets.NewGenericWindow("forge current patchsets", "who is squirreling around?") dwin.win.Custom = func() { log.Info("test delete window here") } grid := dwin.win.Group.RawGrid() grid.NewButton("update patchsets", func() { psets, err := openPatchsets() if err != nil { log.Info("Open Patchsets failed", err) return } dwin.doPatchsetsTable(psets) }) // make a box at the bottom of the window for the protobuf table dwin.box = dwin.win.Bottom.Box().SetProgName("TBOX") // load and show the current patch sets psets, err := openPatchsets() if err != nil { log.Info("Open Patchsets failed", err) return dwin } dwin.doPatchsetsTable(psets) return dwin } func (dwin *stdPatchsetTableWin) doPatchsetsTable(currentPatchsets *forgepb.Patchsets) { dwin.Lock() defer dwin.Unlock() if dwin.TB != nil { dwin.TB.Delete() dwin.TB = nil } // display the protobuf dwin.TB = AddPatchsetsPB(dwin.box, currentPatchsets) f := func(pset *forgepb.Patchset) { log.Info("Triggered. do something here", pset.Name) // m.Enabled = true win := makePatchWindow(pset) win.Show() } dwin.TB.Custom(f) } func AddPatchsetsPB(tbox *gui.Node, pb *forgepb.Patchsets) *forgepb.PatchsetsTable { t := pb.NewTable("PatchsetsPB") t.NewUuid() t.SetParent(tbox) butf := func(p *forgepb.Patchset) string { ctime := p.Ctime.AsTime() s := ctime.Format("2006/01/02 15:04") log.Info("Found", s, p.Name) return "view" } t.AddButtonFunc("view", butf) t.AddName() t.AddComment() ctimef := func(p *forgepb.Patchset) string { ctime := p.Ctime.AsTime() return ctime.Format("2006/01/02 15:04") } t.AddStringFunc("ctime", ctimef) /* etimef := func(e *forgepb.Patchset) string { etime := e.Etime.AsTime() s := etime.Format("2006/01/02 15:04") if strings.HasPrefix(s, "1970/") { // just show a blank if it's not set return "" } return s } t.AddStringFunc("etime", etimef) */ t.AddStringFunc("Author", func(p *forgepb.Patchset) string { return fmt.Sprintf("%s <%s>", p.GitAuthorName, p.GitAuthorEmail) }) t.AddUuid() t.ShowTable() return t }