From 67fb0938a66605a0b6a837005804637b348b250d Mon Sep 17 00:00:00 2001 From: Daniel Bridges Date: Mon, 22 Jul 2019 16:29:07 -0700 Subject: Support configurable header layout in compose widget --- widgets/msgviewer.go | 47 ++++++++++------------------------------------- 1 file changed, 10 insertions(+), 37 deletions(-) (limited to 'widgets/msgviewer.go') diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go index 7d92861..5b97f6f 100644 --- a/widgets/msgviewer.go +++ b/widgets/msgviewer.go @@ -46,7 +46,16 @@ type PartSwitcher struct { func NewMessageViewer(acct *AccountView, conf *config.AercConfig, store *lib.MessageStore, msg *models.MessageInfo) *MessageViewer { - header, headerHeight := createHeader(msg, conf.Viewer.HeaderLayout) + + layout := HeaderLayout(conf.Viewer.HeaderLayout).forMessage(msg) + header, headerHeight := layout.grid( + func(header string) ui.Drawable { + return &HeaderView{ + Name: header, + Value: fmtHeader(msg, header), + } + }, + ) grid := ui.NewGrid().Rows([]ui.GridSpec{ {ui.SIZE_EXACT, headerHeight}, @@ -78,42 +87,6 @@ func NewMessageViewer(acct *AccountView, conf *config.AercConfig, } } -func createHeader(msg *models.MessageInfo, layout [][]string) (grid *ui.Grid, height int) { - presentHeaders := presentHeaders(msg, layout) - rowCount := len(presentHeaders) + 1 // extra row for spacer - grid = ui.MakeGrid(rowCount, 1, ui.SIZE_EXACT, ui.SIZE_WEIGHT) - for i, cols := range presentHeaders { - r := ui.MakeGrid(1, len(cols), ui.SIZE_EXACT, ui.SIZE_WEIGHT) - for j, col := range cols { - r.AddChild( - &HeaderView{ - Name: col, - Value: fmtHeader(msg, col), - }).At(0, j) - } - grid.AddChild(r).At(i, 0) - } - grid.AddChild(ui.NewFill(' ')).At(rowCount-1, 0) - return grid, rowCount -} - -// presentHeaders returns a filtered header layout, removing rows whose headers -// do not appear in the provided message. -func presentHeaders(msg *models.MessageInfo, layout [][]string) [][]string { - headers := msg.RFC822Headers - result := make([][]string, 0, len(layout)) - for _, row := range layout { - // To preserve layout alignment, only hide rows if all columns are empty - for _, col := range row { - if headers.Get(col) != "" { - result = append(result, row) - break - } - } - } - return result -} - func fmtHeader(msg *models.MessageInfo, header string) string { switch header { case "From": -- cgit 1.4.1-2-gfad0