diff --git a/pages/taskEditor.go b/pages/taskEditor.go index 7eeba70..a7e7c68 100644 --- a/pages/taskEditor.go +++ b/pages/taskEditor.go @@ -41,6 +41,8 @@ type TaskEditorPage struct { area int areaPicker *areaPicker areas []area + + infoViewport viewport.Model } func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPage { @@ -68,6 +70,11 @@ func NewTaskEditorPage(com *common.Common, task taskwarrior.Task) *TaskEditorPag p.areaPicker = NewAreaPicker(com, []string{"Task", "Tags", "Dates"}) + p.infoViewport = viewport.New(0, 0) + if p.task.Uuid != "" { + p.infoViewport.SetContent(p.common.TW.GetInformation(&p.task)) + } + p.columnCursor = 1 if p.task.Uuid == "" { p.mode = modeInsert @@ -94,6 +101,12 @@ func (p *TaskEditorPage) SetSize(width, height int) { } else { p.colHeight = height - p.common.Styles.ColumnFocused.GetVerticalFrameSize() } + + p.infoViewport.Width = width - p.colWidth - p.common.Styles.ColumnFocused.GetHorizontalFrameSize()*2 - 5 + if p.infoViewport.Width < 0 { + p.infoViewport.Width = 0 + } + p.infoViewport.Height = p.colHeight } func (p *TaskEditorPage) Init() tea.Cmd { @@ -110,12 +123,20 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) { p.mode = mode(msg) case prevColumnMsg: p.columnCursor-- + maxCols := 2 + if p.task.Uuid != "" { + maxCols = 3 + } if p.columnCursor < 0 { - p.columnCursor = len(p.areas) - 1 + p.columnCursor = maxCols - 1 } case nextColumnMsg: p.columnCursor++ - if p.columnCursor > len(p.areas)-1 { + maxCols := 2 + if p.task.Uuid != "" { + maxCols = 3 + } + if p.columnCursor >= maxCols { p.columnCursor = 0 } case prevAreaMsg: @@ -166,20 +187,26 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) { picker, cmd := p.areaPicker.Update(msg) p.areaPicker = picker.(*areaPicker) return p, cmd - } else { + } else if p.columnCursor == 1 { model, cmd := p.areas[p.area].Update(prevFieldMsg{}) p.areas[p.area] = model.(area) return p, cmd + } else if p.columnCursor == 2 { + p.infoViewport.LineUp(1) + return p, nil } case key.Matches(msg, p.common.Keymap.Down): if p.columnCursor == 0 { picker, cmd := p.areaPicker.Update(msg) p.areaPicker = picker.(*areaPicker) return p, cmd - } else { + } else if p.columnCursor == 1 { model, cmd := p.areas[p.area].Update(nextFieldMsg{}) p.areas[p.area] = model.(area) return p, cmd + } else if p.columnCursor == 2 { + p.infoViewport.LineDown(1) + return p, nil } } } @@ -212,21 +239,23 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) { picker, cmd := p.areaPicker.Update(msg) p.areaPicker = picker.(*areaPicker) return p, cmd - } else { + } else if p.columnCursor == 1 { model, cmd := p.areas[p.area].Update(prevFieldMsg{}) p.areas[p.area] = model.(area) return p, cmd } + return p, nil case key.Matches(msg, p.common.Keymap.Next): if p.columnCursor == 0 { picker, cmd := p.areaPicker.Update(msg) p.areaPicker = picker.(*areaPicker) return p, cmd - } else { + } else if p.columnCursor == 1 { model, cmd := p.areas[p.area].Update(nextFieldMsg{}) p.areas[p.area] = model.(area) return p, cmd } + return p, nil case key.Matches(msg, p.common.Keymap.Ok): model, cmd := p.areas[p.area].Update(msg) if p.area != 3 { @@ -241,6 +270,10 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) { picker, cmd := p.areaPicker.Update(msg) p.areaPicker = picker.(*areaPicker) return p, cmd + } else if p.columnCursor == 2 { + var cmd tea.Cmd + p.infoViewport, cmd = p.infoViewport.Update(msg) + return p, cmd } else { model, cmd := p.areas[p.area].Update(msg) p.areas[p.area] = model.(area) @@ -253,29 +286,31 @@ func (p *TaskEditorPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) { func (p *TaskEditorPage) View() string { var focusedStyle, blurredStyle lipgloss.Style if p.mode == modeInsert { - focusedStyle = p.common.Styles.ColumnInsert.Width(p.colWidth).Height(p.colHeight) + focusedStyle = p.common.Styles.ColumnInsert } else { - focusedStyle = p.common.Styles.ColumnFocused.Width(p.colWidth).Height(p.colHeight) + focusedStyle = p.common.Styles.ColumnFocused } - blurredStyle = p.common.Styles.ColumnBlurred.Width(p.colWidth).Height(p.colHeight) - // var picker, area string - var area string - if p.columnCursor == 0 { - // picker = focusedStyle.Render(p.areaPicker.View()) - area = blurredStyle.Render(p.areas[p.area].View()) - } else { - // picker = blurredStyle.Render(p.areaPicker.View()) - area = focusedStyle.Render(p.areas[p.area].View()) + blurredStyle = p.common.Styles.ColumnBlurred + var area string + if p.columnCursor == 1 { + area = focusedStyle.Copy().Width(p.colWidth).Height(p.colHeight).Render(p.areas[p.area].View()) + } else { + area = blurredStyle.Copy().Width(p.colWidth).Height(p.colHeight).Render(p.areas[p.area].View()) } if p.task.Uuid != "" { + var infoView string + if p.columnCursor == 2 { + infoView = focusedStyle.Copy().Width(p.infoViewport.Width).Height(p.infoViewport.Height).Render(p.infoViewport.View()) + } else { + infoView = blurredStyle.Copy().Width(p.infoViewport.Width).Height(p.infoViewport.Height).Render(p.infoViewport.View()) + } area = lipgloss.JoinHorizontal( lipgloss.Top, area, - p.common.Styles.ColumnFocused.Render(p.common.TW.GetInformation(&p.task)), + infoView, ) - } tabs := ""