// Copyright 2017-2025 WIT.COM Inc. All rights reserved. // Use of this source code is governed by the GPL 3.0 package main import ( "sync" "go.wit.com/lib/gadgets" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/log" "go.wit.com/gui" ) type repoProblemsWindow struct { once sync.Once // only init() the window once win *gadgets.BasicWindow // the patches window stack *gui.Node // the top box set as vertical shelf *gui.Node // the first box in the stack, set as horizontal grid *gui.Node // the list of available patches // summary *patchSummary // summary of current patches setgrid *gui.Node // the list of each patchset pset *forgepb.Patchset // the patchset in question } // todo: autogenerate these or make them standared 'gui' package functions // make this an go interface somehow // is the window hidden right now? func (w *repoProblemsWindow) Hidden() bool { return w.win.Hidden() } // switches between the window being visable or hidden on the desktop func (w *repoProblemsWindow) Toggle() { if w.Hidden() { w.Show() } else { w.Hide() } } // hides the window completely func (w *repoProblemsWindow) Show() { w.win.Show() } func (w *repoProblemsWindow) Hide() { w.win.Hide() } // should be the first box/widget in the window // greys out the window to the user func (w *repoProblemsWindow) Disable() { w.stack.Disable() } func (w *repoProblemsWindow) Enable() { w.stack.Enable() } // you can only have one of these func makeRepoProblemsWindow() *repoProblemsWindow { pw := new(repoProblemsWindow) // sync.Once() pw.win = gadgets.RawBasicWindow("Potential Repo Problems") pw.win.Make() pw.stack = pw.win.Box().NewBox("bw vbox", false) pw.win.Custom = func() { // sets the hidden flag to false so Toggle() works pw.win.Hide() } pw.stack.NewGroup("things") grid := pw.stack.RawGrid() grid.NewButton("devel is behind master", func() { log.Info("not done yet") }) grid.NewButton("user branch is remote", func() { log.Info("not done yet") }) grid.NewButton("unknown branches", func() { log.Info("not done yet") }) grid.NextRow() grid.NewButton("remote devel != local devel", func() { log.Info("not done yet") }) grid.NewButton("remote master != local master", func() { log.Info("not done yet") }) grid.NextRow() return pw }