checkpoint: mode view added
- replaced baseFlex with a grid to prevent the need to add more flex primitive. - Added first iteration of the mode view.
This commit is contained in:
parent
dbb37a1060
commit
70238291e7
4 changed files with 62 additions and 22 deletions
|
@ -84,17 +84,17 @@ func (a *App) initQuitModal() {
|
||||||
SetDoneFunc(doneFunc)
|
SetDoneFunc(doneFunc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// initView initialises the view window for displaying the card.
|
// initCardView initialises the view window for displaying the card.
|
||||||
func (a *App) initView() {
|
func (a *App) initCardView() {
|
||||||
doneFunc := func(key tcell.Key) {
|
doneFunc := func(key tcell.Key) {
|
||||||
if key == tcell.KeyEsc {
|
if key == tcell.KeyEsc {
|
||||||
a.pages.HidePage(viewPage)
|
a.pages.HidePage(viewPage)
|
||||||
a.view.Clear()
|
a.cardView.Clear()
|
||||||
a.setColumnFocus()
|
a.setColumnFocus()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
a.view.setDoneFunc(doneFunc)
|
a.cardView.setDoneFunc(doneFunc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *App) initStatusbar() {
|
func (a *App) initStatusbar() {
|
||||||
|
|
|
@ -50,6 +50,7 @@ func (a *App) move() {
|
||||||
a.statusSelection.cardID = a.focusedCardID()
|
a.statusSelection.cardID = a.focusedCardID()
|
||||||
a.statusSelection.currentStatusID = a.focusedStatusID()
|
a.statusSelection.currentStatusID = a.focusedStatusID()
|
||||||
a.mode = selection
|
a.mode = selection
|
||||||
|
a.modeView.update(a.mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,9 +100,9 @@ func (a *App) selected() {
|
||||||
}
|
}
|
||||||
|
|
||||||
status := a.focusedStatusName()
|
status := a.focusedStatusName()
|
||||||
a.view.setText(card.ID, card.Title, status, card.Created, card.Description)
|
a.cardView.setText(card.ID, card.Title, status, card.Created, card.Description)
|
||||||
a.pages.ShowPage(viewPage)
|
a.pages.ShowPage(viewPage)
|
||||||
a.SetFocus(a.view)
|
a.SetFocus(a.cardView)
|
||||||
case selection:
|
case selection:
|
||||||
a.statusSelection.nextStatusID = a.focusedStatusID()
|
a.statusSelection.nextStatusID = a.focusedStatusID()
|
||||||
if a.statusSelection.currentStatusID != a.statusSelection.nextStatusID {
|
if a.statusSelection.currentStatusID != a.statusSelection.nextStatusID {
|
||||||
|
@ -127,5 +128,6 @@ func (a *App) selected() {
|
||||||
func (a *App) escape() {
|
func (a *App) escape() {
|
||||||
if a.mode != normal {
|
if a.mode != normal {
|
||||||
a.mode = normal
|
a.mode = normal
|
||||||
|
a.modeView.update(a.mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
35
internal/ui/modeview.go
Normal file
35
internal/ui/modeview.go
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
package ui
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/gdamore/tcell/v2"
|
||||||
|
"github.com/rivo/tview"
|
||||||
|
)
|
||||||
|
|
||||||
|
type modeView struct {
|
||||||
|
*tview.TextView
|
||||||
|
format string
|
||||||
|
}
|
||||||
|
|
||||||
|
func newModeView() *modeView {
|
||||||
|
format := "[white::b]%s[-:-:-:-]"
|
||||||
|
|
||||||
|
textView := tview.NewTextView()
|
||||||
|
|
||||||
|
textView.SetBackgroundColor(tcell.ColorGrey.TrueColor())
|
||||||
|
textView.SetTextAlign(tview.AlignLeft)
|
||||||
|
textView.SetDynamicColors(true)
|
||||||
|
|
||||||
|
obj := modeView{
|
||||||
|
TextView: textView,
|
||||||
|
format: format,
|
||||||
|
}
|
||||||
|
|
||||||
|
return &obj
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *modeView) update(mode boardMode) {
|
||||||
|
m.Clear()
|
||||||
|
fmt.Fprintf(m, m.format, mode)
|
||||||
|
}
|
|
@ -9,7 +9,7 @@ import (
|
||||||
|
|
||||||
type (
|
type (
|
||||||
boardMovement int
|
boardMovement int
|
||||||
boardMode int
|
boardMode string
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -17,34 +17,33 @@ const (
|
||||||
previous
|
previous
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
normal boardMode = iota
|
|
||||||
selection
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
mainPage string = "main"
|
mainPage string = "main"
|
||||||
quitPage string = "quit"
|
quitPage string = "quit"
|
||||||
cardFormPage string = "card form"
|
cardFormPage string = "card form"
|
||||||
deleteCardModalPage string = "delete card modal"
|
deleteCardModalPage string = "delete card modal"
|
||||||
viewPage string = "view"
|
viewPage string = "view"
|
||||||
|
|
||||||
|
normal boardMode = "NORMAL"
|
||||||
|
selection boardMode = "SELECTION"
|
||||||
)
|
)
|
||||||
|
|
||||||
type App struct {
|
type App struct {
|
||||||
*tview.Application
|
*tview.Application
|
||||||
|
|
||||||
columns []*column
|
columns []*column
|
||||||
baseFlex *tview.Flex
|
grid *tview.Grid
|
||||||
columnFlex *tview.Flex
|
columnFlex *tview.Flex
|
||||||
pages *tview.Pages
|
pages *tview.Pages
|
||||||
focusedColumn int
|
focusedColumn int
|
||||||
board board.Board
|
board board.Board
|
||||||
mode boardMode
|
mode boardMode
|
||||||
|
modeView *modeView
|
||||||
quitModal *tview.Modal
|
quitModal *tview.Modal
|
||||||
cardForm *cardForm
|
cardForm *cardForm
|
||||||
deleteCardModal *tview.Modal
|
deleteCardModal *tview.Modal
|
||||||
statusSelection statusSelection
|
statusSelection statusSelection
|
||||||
view *cardView
|
cardView *cardView
|
||||||
statusbar *statusbar
|
statusbar *statusbar
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +57,7 @@ func NewApp(path string) (App, error) {
|
||||||
app := App{
|
app := App{
|
||||||
Application: tview.NewApplication(),
|
Application: tview.NewApplication(),
|
||||||
pages: tview.NewPages(),
|
pages: tview.NewPages(),
|
||||||
baseFlex: tview.NewFlex(),
|
grid: tview.NewGrid(),
|
||||||
columnFlex: tview.NewFlex(),
|
columnFlex: tview.NewFlex(),
|
||||||
quitModal: tview.NewModal(),
|
quitModal: tview.NewModal(),
|
||||||
cardForm: newCardForm(),
|
cardForm: newCardForm(),
|
||||||
|
@ -67,8 +66,9 @@ func NewApp(path string) (App, error) {
|
||||||
board: kanban,
|
board: kanban,
|
||||||
deleteCardModal: tview.NewModal(),
|
deleteCardModal: tview.NewModal(),
|
||||||
mode: normal,
|
mode: normal,
|
||||||
|
modeView: newModeView(),
|
||||||
statusSelection: statusSelection{0, 0, 0},
|
statusSelection: statusSelection{0, 0, 0},
|
||||||
view: newCardView(),
|
cardView: newCardView(),
|
||||||
statusbar: newStatusbar(),
|
statusbar: newStatusbar(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,11 +85,14 @@ func (a *App) Init() error {
|
||||||
|
|
||||||
a.initStatusbar()
|
a.initStatusbar()
|
||||||
|
|
||||||
a.baseFlex.SetDirection(tview.FlexRow)
|
a.modeView.update(a.mode)
|
||||||
a.baseFlex.AddItem(a.columnFlex, 0, 1, true)
|
|
||||||
a.baseFlex.AddItem(a.statusbar, 2, 1, false)
|
|
||||||
|
|
||||||
a.pages.AddPage(mainPage, a.baseFlex, true, true)
|
a.grid.SetColumns(10, 0).SetRows(0, 1).SetBorders(false)
|
||||||
|
a.grid.AddItem(a.columnFlex, 0, 0, 1, 2, 0, 0, true)
|
||||||
|
a.grid.AddItem(a.modeView, 1, 0, 1, 1, 0, 0, false)
|
||||||
|
a.grid.AddItem(a.statusbar, 1, 1, 1, 1, 0, 0, false)
|
||||||
|
|
||||||
|
a.pages.AddPage(mainPage, a.grid, true, true)
|
||||||
|
|
||||||
a.initQuitModal()
|
a.initQuitModal()
|
||||||
a.pages.AddPage(quitPage, a.quitModal, false, false)
|
a.pages.AddPage(quitPage, a.quitModal, false, false)
|
||||||
|
@ -100,8 +103,8 @@ func (a *App) Init() error {
|
||||||
a.initDeleteCardModal()
|
a.initDeleteCardModal()
|
||||||
a.pages.AddPage(deleteCardModalPage, a.deleteCardModal, false, false)
|
a.pages.AddPage(deleteCardModalPage, a.deleteCardModal, false, false)
|
||||||
|
|
||||||
a.initView()
|
a.initCardView()
|
||||||
a.pages.AddPage(viewPage, a.view, false, false)
|
a.pages.AddPage(viewPage, a.cardView, false, false)
|
||||||
|
|
||||||
a.SetRoot(a.pages, true)
|
a.SetRoot(a.pages, true)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue