// based off andlabs/ui/examples/table.go package main import "fmt" import "log" import "github.com/davecgh/go-spew/spew" import "github.com/andlabs/ui" import _ "github.com/andlabs/ui/winmanifest" func newDemoModelHandler() *modelHandler { mh := new(modelHandler) mh.rows = 20 mh.funcColumnTypes = demoColumnTypes mh.scanCellValue = demoCellValue mh.setCellValue = demoSetCellValue mh.checkStates = make([]int, mh.rows) mh.vms = make([]vmRowData, mh.rows) mh.vms[8].hostname = "host1" mh.vms[9].hostname = "host3test" mh.yellowRow = -1 log.Println("Called newDemoModelhandler() with mh=", mh) spew.Dump(mh) return mh } func demoColumnTypes() []ui.TableValue { return []ui.TableValue{ ui.TableString(""), // column 0 text ui.TableString(""), // column 1 text ui.TableString(""), // column 2 text ui.TableColor{}, // row background color ui.TableColor{}, // column 1 text color ui.TableImage{}, // column 1 image ui.TableString(""), // column 4 button text ui.TableInt(0), // column 3 checkbox state ui.TableInt(0), // column 5 progress } } var img [2]*ui.Image func demoCellValue(mh *modelHandler, row, column int) ui.TableValue { switch column { case 0: return ui.TableString(fmt.Sprintf("Row %d", row)) case 1: return ui.TableString("Colors!") case 7: return ui.TableInt(mh.checkStates[row]) case 8: if row == 0 { return ui.TableInt(0) } if row == 13 { return ui.TableInt(100) } if row == 14 { return ui.TableInt(-1) } return ui.TableInt(50) case 5: if row < 8 { return ui.TableImage{img[0]} } return ui.TableImage{img[1]} case 4: if (row % 2) == 1 { return ui.TableColor{0.5, 0, 0.75, 1} } return nil case 3: if row == mh.yellowRow { return ui.TableColor{1, 1, 0, .1} } if row == 3 { // Red with .1 transparency // R G B Trans return ui.TableColor{1, 0, 0, .1} } if row == 11 { return ui.TableColor{0, 0.5, 1, 0.5} } return nil case 2: return ui.TableString(mh.vms[row].hostname) case 6: return ui.TableString("Make Yellow") } panic("unreachable in demoCellValue()") } func makeDemotable(name string) *ui.Table { img[0] = ui.NewImage(16, 16) img[1] = ui.NewImage(16, 16) mh := newDemoModelHandler() mh.name = name model := ui.NewTableModel(mh) table := ui.NewTable( &ui.TableParams{ Model: model, RowBackgroundColorModelColumn: 3, }) table.AppendTextColumn("Column 1", 0, ui.TableModelColumnNeverEditable, nil) table.AppendImageTextColumn("Column 2", 5, 1, ui.TableModelColumnNeverEditable, &ui.TableTextColumnOptionalParams{ ColorModelColumn: 4, }); table.AppendTextColumn("hostname", 2, ui.TableModelColumnAlwaysEditable, nil) table.AppendCheckboxColumn("Checkboxes", 7, ui.TableModelColumnAlwaysEditable) table.AppendButtonColumn("Buttons", 6, ui.TableModelColumnAlwaysEditable) table.AppendProgressBarColumn("Progress Bar", 8) return table } func demoSetCellValue(mh *modelHandler, m *ui.TableModel, row, column int, value ui.TableValue) { if column == 2 { mh.vms[row].hostname = string(value.(ui.TableString)) } if column == 6 { // row background color prevYellowRow := mh.yellowRow mh.yellowRow = row if prevYellowRow != -1 { m.RowChanged(prevYellowRow) } m.RowChanged(mh.yellowRow) } if column == 7 { // checkboxes mh.checkStates[row] = int(value.(ui.TableInt)) } }