Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
3eda10f
(GH-8) Make Editor UI look like an app
michaeltlombardi Apr 18, 2022
a97834f
(GH-8) Fix group creation in company editing
michaeltlombardi Apr 18, 2022
73bb2d8
(TYMPAN) Fix end methods to actually quit
michaeltlombardi Apr 18, 2022
24a3b93
(GH-8) Handle cancels and replacement in player menu
michaeltlombardi Apr 19, 2022
4c2553a
(GH-8) Implement menu cancelling in group/company
michaeltlombardi Apr 19, 2022
101c4c7
(GH-8) Update SaveConfig to return correctly
michaeltlombardi Apr 19, 2022
dea9882
(GH-8) Update editor model after submodel improvements
michaeltlombardi Apr 19, 2022
af59896
(GH-8) Make display more dynamic to buffer size
michaeltlombardi Apr 20, 2022
3a86bd9
(TYMPAN) Add utility to replace a char in string
michaeltlombardi Apr 24, 2022
e1548db
(TYMPAN) Extend Terminal to support dynamic styles
michaeltlombardi Apr 24, 2022
9b1722a
(TYMPAN) Ensure copying terminal settings copies all rules and styles
michaeltlombardi Apr 24, 2022
0bd9d9f
(TYMPAN) Add Terminal Settings to Compositor
michaeltlombardi Apr 24, 2022
590e37a
(TYMPAN) Improve Flag handling
michaeltlombardi Apr 24, 2022
5ef980b
(TYMPAN) Fix first entry in selector table
michaeltlombardi Apr 25, 2022
42c1e2d
(TYMPAN) Add conditional operations to terminal
michaeltlombardi Apr 25, 2022
fcc2055
(GH-8) Overhaul TUI styling
michaeltlombardi Apr 25, 2022
cc833e0
(TYMPAN) Add options to override default color for selector
michaeltlombardi Apr 25, 2022
284dbd2
(GH-8) Standardize selection prompt coloring
michaeltlombardi Apr 25, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 40 additions & 76 deletions pkg/flfa/data/groups_display.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,114 +47,78 @@ func GroupMarkdownTable(groups ...Group) string {
return groupOutput.String()
}

func GroupTerminalSettings(options ...pterm.Option) (settings *pterm.Settings) {
combinedOptions := []pterm.Option{
pterm.WithPrimaryStyle(lipgloss.NewStyle().Padding(0, 1)),
pterm.WithExtraStyle("selected_body", lipgloss.NewStyle().Foreground(lipgloss.Color("11")).Faint(true)),
pterm.WithExtraStyle("captain", lipgloss.NewStyle().Bold(true)),
pterm.WithExtraStyle("header", lipgloss.NewStyle().BorderBottom(true).BorderStyle(lipgloss.DoubleBorder())),
pterm.WithExtraStyle("name", lipgloss.NewStyle().Width(20).Align(lipgloss.Left)),
pterm.WithExtraStyle("profile_name", lipgloss.NewStyle().Width(15).Align(lipgloss.Center)),
pterm.WithExtraStyle("melee", lipgloss.NewStyle().Width(15).Align(lipgloss.Center)),
pterm.WithExtraStyle("missile", lipgloss.NewStyle().Width(15).Align(lipgloss.Center)),
pterm.WithExtraStyle("move", lipgloss.NewStyle().Width(10).Align(lipgloss.Center)),
pterm.WithExtraStyle("fighting_strength", lipgloss.NewStyle().Width(10).Align(lipgloss.Center)),
pterm.WithExtraStyle("resolve", lipgloss.NewStyle().Width(5).Align(lipgloss.Center)),
pterm.WithExtraStyle("toughness", lipgloss.NewStyle().Width(5).Align(lipgloss.Center)),
pterm.WithExtraStyle("traits", lipgloss.NewStyle().Width(25).Align(lipgloss.Left)),
}

combinedOptions = append(combinedOptions, options...)

settings = pterm.New(combinedOptions...)

row := lipgloss.NewStyle().
BorderBottom(true).
BorderStyle(lipgloss.NormalBorder())

if settings.Colors.Subtle == nil {
settings.Styles.Extra["row"] = row.BorderForeground(lipgloss.AdaptiveColor{Light: "#D9DCCF", Dark: "#767676"})
} else {
settings.Styles.Extra["row"] = row.BorderForeground(settings.Colors.Subtle)
}

return settings
}

func (group *Group) ToTerminalTableEntry(options ...pterm.Option) string {
settings := GroupTerminalSettings(options...)
func (group *Group) ToTerminalTableEntry(settings *pterm.Settings) string {
name := fmt.Sprintf("%s (%d)", group.Name, group.Points)

var cells []string
var body_styles []string
var lead_styles []string

if group.Captain.Name != "" {
lead_styles = append(lead_styles, "captain")
if settings.FlagIsOn("selected") {
cells = append(cells, settings.RenderWithDynamicStyle("selection_marking_table", " » "))
} else if settings.FlagIsOff("selected") {
cells = append(cells, settings.RenderWithDynamicStyle("selection_marking_table", " "))
}

switch settings.Flag("selected") {
case pterm.FlagOff:
cells = append(cells, settings.AppliedExtraStyles().Width(4).Render(" "))
case pterm.FlagOn:
lead_styles = append(lead_styles, "selected_lead")
body_styles = append(body_styles, "selected_body")
cells = append(cells, settings.AppliedExtraStyles("selected_lead").Width(4).Render(" » "))
nameStyle := settings.DynamicStyle("table_group_entry_name")
if group.Captain.Name != "" {
nameStyle.Bold(true)
}

cells = append(cells, settings.AppliedExtraStyles(append(lead_styles, "name")...).Render(name))
cells = append(cells, settings.AppliedExtraStyles(append(body_styles, "profile_name")...).Render(group.ProfileName))
cells = append(cells, settings.AppliedExtraStyles(append(body_styles, "melee")...).Render(group.Melee.String()))
cells = append(cells, settings.AppliedExtraStyles(append(body_styles, "missile")...).Render(group.Missile.String()))
cells = append(cells, settings.AppliedExtraStyles(append(body_styles, "move")...).Render(group.Move.String()))
cells = append(cells, settings.AppliedExtraStyles(append(body_styles, "fighting_strength")...).Render(group.FightingStrength.String()))
cells = append(cells, settings.AppliedExtraStyles(append(body_styles, "resolve")...).Render(fmt.Sprintf("%d", group.Resolve)))
cells = append(cells, settings.AppliedExtraStyles(append(body_styles, "toughness")...).Render(fmt.Sprintf("%d", group.Toughness)))
cells = append(cells, settings.AppliedExtraStyles(append(body_styles, "traits")...).Render(strings.Join(group.Traits, ", ")))
cells = append(cells, nameStyle.Render(name))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_entry_profile_name", group.ProfileName))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_entry_melee", group.Melee.String()))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_entry_missile", group.Missile.String()))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_entry_move", group.Move.String()))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_entry_fighting_strength", group.FightingStrength.String()))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_entry_resolve", fmt.Sprintf("%d", group.Resolve)))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_entry_toughness", fmt.Sprintf("%d", group.Toughness)))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_entry_traits", strings.Join(group.Traits, ", ")))

entry := lipgloss.JoinHorizontal(lipgloss.Center, cells...)

// make sure there's always space around the group
height := lipgloss.Height(entry)
entry = lipgloss.PlaceVertical((height + 2), lipgloss.Center, entry)
if height%2 == 0 {
height++
}
entry = lipgloss.PlaceVertical((height), lipgloss.Center, entry)

return settings.Styles.Extra["row"].Render(entry)
}
return entry

func (group *Group) TableHeaderTerminal(options ...pterm.Option) string {
settings := GroupTerminalSettings(options...)
// return settings.Styles.Extra["row"].Render(entry)
}

func (group *Group) TableHeaderTerminal(settings *pterm.Settings) string {
var cells []string

if settings.Flag("for_selection") == pterm.FlagOn {
scrollerStyle := lipgloss.NewStyle().Width(4).BorderBottom(true).BorderStyle(lipgloss.HiddenBorder())
if settings.Flag("can_scroll_up") == pterm.FlagOn {
cells = append(cells, settings.AppliedExtraStyles("header").Width(4).Render(" "))
cells = append(cells, scrollerStyle.Render(" "))
} else {
cells = append(cells, settings.AppliedExtraStyles("header").Width(4).Render(" "))
cells = append(cells, scrollerStyle.Render(" "))
}
}

cells = append(cells, settings.AppliedExtraStyles("header", "name").Render("Name (P)"))
cells = append(cells, settings.AppliedExtraStyles("header", "profile_name").Render("Profile"))
cells = append(cells, settings.AppliedExtraStyles("header", "melee").Render("Melee"))
cells = append(cells, settings.AppliedExtraStyles("header", "missile").Render("Missile"))
cells = append(cells, settings.AppliedExtraStyles("header", "move").Render("Move"))
cells = append(cells, settings.AppliedExtraStyles("header", "fighting_strength").Render("FS"))
cells = append(cells, settings.AppliedExtraStyles("header", "resolve").Render("R"))
cells = append(cells, settings.AppliedExtraStyles("header", "toughness").Render("T"))
cells = append(cells, settings.AppliedExtraStyles("header", "traits").Render("Traits"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_name", "Name (P)"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_profile_name", "Profile"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_melee", "Melee"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_missile", "Missile"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_move", "Move"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_fighting_strength", "FS"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_resolve", "R"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_toughness", "T"))
cells = append(cells, settings.RenderWithDynamicStyle("table_group_header_traits", "Traits"))

return lipgloss.JoinHorizontal(lipgloss.Top, cells...)
}

func DisplayGroupTerminal(groups []Group) string {
func DisplayGroupTerminal(settings *pterm.Settings, groups []Group) string {
var rows []string

header := groups[0].TableHeaderTerminal()
header := groups[0].TableHeaderTerminal(settings)
rows = append(rows, header)

for _, group := range groups {
rows = append(rows, group.ToTerminalTableEntry())
rows = append(rows, group.ToTerminalTableEntry(settings))
}

return lipgloss.JoinVertical(
Expand Down
42 changes: 17 additions & 25 deletions pkg/flfa/data/traits_display.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,41 +19,33 @@ func (trait *Trait) MarkdownHeader() {}

func TraitMarkdownTable(traits ...Trait) {}

func TraitTerminalSettings(options ...terminal.Option) terminal.Settings {
combinedOptions := []terminal.Option{
terminal.WithPrimaryStyle(lipgloss.NewStyle()),
terminal.WithExtraStyle("lead", lipgloss.NewStyle().Bold(true)),
terminal.WithExtraStyle("body", lipgloss.NewStyle()),
terminal.WithLeadColor(lipgloss.Color("32")),
terminal.WithBodyColor(lipgloss.Color("11")),
}

combinedOptions = append(combinedOptions, options...)

return *terminal.New(combinedOptions...)

}
func (trait *Trait) ToTerminalChoice(settings *terminal.Settings, leadWidth int) string {
var marking string
var nameStyle lipgloss.Style
var effectStyle lipgloss.Style

func (trait *Trait) ToTerminalChoice(selected bool, leadWidth int, options ...terminal.Option) string {
settings := TraitTerminalSettings(options...)
leadStyle := settings.AppliedExtraStyles("lead")
bodyStyle := settings.AppliedExtraStyles("body")
selected := settings.FlagIsOn("selected")
removing := settings.FlagIsOn("removing_trait")

var marking string
if selected {
leadStyle.Foreground(settings.Colors.Lead)
bodyStyle.Foreground(settings.Colors.Body)
marking = fmt.Sprintf(" %s ", leadStyle.Render("»"))
effectStyle = settings.DynamicStyle("selected_trait_effect")
if removing {
nameStyle = settings.DynamicStyle("remove_selected_trait_name")
} else {
nameStyle = settings.DynamicStyle("add_selected_trait_name")
}
marking = fmt.Sprintf(" %s ", nameStyle.Render("»"))
} else {
bodyStyle.Faint(true)
effectStyle = settings.DynamicStyle("unselected_trait_effect")
nameStyle = settings.DynamicStyle("unselected_trait_name")
marking = " "
}

return lipgloss.JoinHorizontal(
lipgloss.Top,
marking,
leadStyle.Align(lipgloss.Left).Width(leadWidth).Render(trait.Name),
trait.DisplayEffectBlock(bodyStyle, 80),
nameStyle.Align(lipgloss.Left).Width(leadWidth).Render(trait.Name),
trait.DisplayEffectBlock(effectStyle, 80),
)
}

Expand Down
9 changes: 8 additions & 1 deletion pkg/flfa/tui/company/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,14 @@ func (model *Model) UpdateOnKeyPress(msg tea.KeyMsg) (cmd tea.Cmd) {
case "ctrl+c":
cmd = tea.Quit
case "esc":
// TODO
switch model.State {
case StateChoosingCompany:
cmd = model.Substate.Choosing.UpdateOnEsc(model)
case StateCreatingCompany:
cmd = model.Substate.Creating.UpdateOnEsc(model)
case StateEditingCompany:
cmd = model.Substate.Editing.UpdateOnEsc(model)
}
case "enter":
switch model.State {
case StateChoosingCompany:
Expand Down
3 changes: 3 additions & 0 deletions pkg/flfa/tui/company/company.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ func NewModel(api *flfa.Api, options ...compositor.Option[*Model]) *Model {
model := &Model{
SharedModel: tui.SharedModel{
Api: api,
Compositor: compositor.Compositor{
TerminalSettings: tui.TerminalSettings(),
},
},
}

Expand Down
Loading