// 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" "path/filepath" "sync" "go.wit.com/gui" "go.wit.com/lib/gadgets" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/log" ) type stdPatchTableWin struct { sync.Mutex win *gadgets.GenericWindow // the machines gui window box *gui.Node // the machines gui parent box widget TB *forgepb.PatchesTable // the gui table buffer update bool // if the window should be updated } func (w *stdPatchTableWin) Toggle() { if w == nil { return } if w.win == nil { return } w.win.Toggle() } func makePatchesWin(patches *forgepb.Patches) *stdPatchTableWin { dwin := new(stdPatchTableWin) dwin.win = gadgets.NewGenericWindow("current patches", "patching options") dwin.win.Custom = func() { log.Info("test delete window here") // dwin = nil } grid := dwin.win.Group.RawGrid() grid.NewLabel(fmt.Sprintf("%d", patches.Len())) grid.NewLabel(fmt.Sprintf("total patches")) grid.NextRow() repomap := make(map[string]int) all := patches.All() for all.Scan() { patch := all.Next() repomap[patch.RepoNamespace] += 1 } grid.NewLabel(fmt.Sprintf("%d", len(repomap))) grid.NewLabel(fmt.Sprintf("total repos")) grid.NextRow() grid.NewButton("reload", func() { }) // make a box at the bottom of the window for the protobuf table dwin.box = dwin.win.Bottom.Box().SetProgName("TBOX") if patches != nil { dwin.doPatchesTable(patches) } return dwin } func (dwin *stdPatchTableWin) doPatchesTable(currentPatches *forgepb.Patches) { dwin.Lock() defer dwin.Unlock() if dwin.TB != nil { dwin.TB.Delete() dwin.TB = nil } // display the protobuf dwin.TB = AddPatchesPB(dwin.box, currentPatches) f := func(p *forgepb.Patch) { log.Info("do something with patch", p.Filename) } dwin.TB.Custom(f) } // define what rows to have in the protobuf table func AddPatchesPB(tbox *gui.Node, pb *forgepb.Patches) *forgepb.PatchesTable { t := pb.NewTable("PatchesPB") t.NewUuid() t.SetParent(tbox) t.AddRepoNamespace() // t.AddFilename() t.AddStringFunc("file", func(p *forgepb.Patch) string { _, fname := filepath.Split(p.Filename) return fname }) t.AddCommitHash() t.ShowTable() return t }