// based off andlabs/ui/examples/table.go package main import "fmt" import "log" import "github.com/andlabs/ui" import _ "github.com/andlabs/ui/winmanifest" import "github.com/davecgh/go-spew/spew" type vmRowData struct { hostname string size int IPv6 string IPv4 string memory int disk int } type modelHandler struct { name string rows int bgcolorColumn int yellowRow int checkStates []int vms []vmRowData columnTypes string funcColumnTypes func() []ui.TableValue scanCellValue func(*modelHandler, int, int) ui.TableValue setCellValue func(*modelHandler, *ui.TableModel, int, int, ui.TableValue) } func newModelHandler(rows int) *modelHandler { mh := new(modelHandler) mh.rows = rows mh.columnTypes = "standard" mh.funcColumnTypes = standardColumnTypes mh.scanCellValue = defaultCellValue mh.setCellValue = defaultSetCellValue mh.bgcolorColumn = 0 mh.checkStates = make([]int, mh.rows) mh.vms = make([]vmRowData, mh.rows) mh.vms[1].hostname = "jcarr" mh.yellowRow = -1 log.Println("Called newModelhandler() with mh=", mh) spew.Dump(mh) return mh } func standardColumnTypes() []ui.TableValue { return []ui.TableValue{ ui.TableColor{}, // row background color ui.TableString(""), // column 0 text ui.TableColor{}, // column 0 text color ui.TableString("test"), // column 1 button text } } func makeTable(name string, rows int, row1Name string) (*ui.Table, *modelHandler, *ui.TableModel) { mh := newModelHandler(rows) mh.name = name model := ui.NewTableModel(mh) table := ui.NewTable( &ui.TableParams{ Model: model, RowBackgroundColorModelColumn: mh.bgcolorColumn, }) table.AppendTextColumn(row1Name, 1, ui.TableModelColumnAlwaysEditable, nil) table.AppendButtonColumn("Details", 3, ui.TableModelColumnAlwaysEditable) return table, mh, model } func defaultCellValue(mh *modelHandler, row, column int) ui.TableValue { switch column { case 0: if (row % 2) == 1 { return ui.TableColor{0.5, 0.5, 0.5, .1} } return nil case 1: return ui.TableString(fmt.Sprintf("jcarrgood %d", row)) } return ui.TableString(fmt.Sprintf("jcarrbad %d", row)) } func defaultSetCellValue(mh *modelHandler, m *ui.TableModel, row, column int, value ui.TableValue) { if column == 3 { // button row (?) log.Println("Button was pressed START", row, column) } return }