1
0
mirror of https://github.com/mrusme/neonmodem.git synced 2024-12-04 14:46:37 -05:00

Implemented ErrorDialogBox, fixed TODO for keymap

This commit is contained in:
マリウス 2023-01-04 15:28:25 -05:00
parent 623def1263
commit 0fe810871e
No known key found for this signature in database
GPG Key ID: 272ED814BF63261F
7 changed files with 179 additions and 72 deletions

View File

@ -57,6 +57,18 @@ type Config struct {
Bottombar ThemeItemConfig
}
ErrorDialogBox struct {
Window struct {
Focused ThemeItemConfig
Blurred ThemeItemConfig
}
Titlebar struct {
Focused ThemeItemConfig
Blurred ThemeItemConfig
}
Bottombar ThemeItemConfig
}
PostsList struct {
List struct {
Focused ThemeItemConfig
@ -153,6 +165,114 @@ func SetDefaults(cacheDir string) {
viper.SetDefault("Debug", "true")
viper.SetDefault("Log", path.Join(cacheDir, "gobbs.log"))
// DialogBox Window:Focused
viper.SetDefault("Theme.DialogBox.Window.Focused.Margin",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Window.Focused.Padding",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Window.Focused.Border.Border",
lipgloss.ThickBorder())
viper.SetDefault("Theme.DialogBox.Window.Focused.Border.Sides",
[]bool{false, true, true, true},
)
viper.SetDefault("Theme.DialogBox.Window.Focused.Border.Foreground",
lipgloss.AdaptiveColor{Light: "#00ffff", Dark: "#00ffff"})
// DialogBox Window:Blurred
viper.SetDefault("Theme.DialogBox.Window.Blurred.Margin",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Window.Blurred.Padding",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Window.Blurred.Border.Border",
lipgloss.ThickBorder())
viper.SetDefault("Theme.DialogBox.Window.Blurred.Border.Sides",
[]bool{false, true, true, true},
)
viper.SetDefault("Theme.DialogBox.Window.Blurred.Border.Foreground",
lipgloss.AdaptiveColor{Light: "#cccccc", Dark: "#333333"})
// DialogBox Titlebar:Focused
viper.SetDefault("Theme.DialogBox.Titlebar.Focused.Margin",
[]int{0, 0, 1, 0})
viper.SetDefault("Theme.DialogBox.Titlebar.Focused.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.DialogBox.Titlebar.Focused.Foreground",
lipgloss.AdaptiveColor{Light: "#ffffff", Dark: "#000000"})
viper.SetDefault("Theme.DialogBox.Titlebar.Focused.Background",
lipgloss.AdaptiveColor{Light: "#00cccc", Dark: "#00cccc"})
// DialogBox Titlebar:Blurred
viper.SetDefault("Theme.DialogBox.Titlebar.Blurred.Margin",
[]int{0, 0, 1, 0})
viper.SetDefault("Theme.DialogBox.Titlebar.Blurred.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.DialogBox.Titlebar.Blurred.Foreground",
lipgloss.AdaptiveColor{Light: "#ffffff", Dark: "#000000"})
viper.SetDefault("Theme.DialogBox.Titlebar.Blurred.Background",
lipgloss.AdaptiveColor{Light: "#cccccc", Dark: "#333333"})
// DialogBox Bottombar
viper.SetDefault("Theme.DialogBox.Bottombar.Margin",
[]int{1, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Bottombar.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.DialogBox.Bottombar.Foreground",
lipgloss.AdaptiveColor{Light: "#aaaaaa", Dark: "#999999"})
// ErrorDialogBox Window:Focused
viper.SetDefault("Theme.ErrorDialogBox.Window.Focused.Margin",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.ErrorDialogBox.Window.Focused.Padding",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.ErrorDialogBox.Window.Focused.Border.Border",
lipgloss.ThickBorder())
viper.SetDefault("Theme.ErrorDialogBox.Window.Focused.Border.Sides",
[]bool{false, true, true, true},
)
viper.SetDefault("Theme.ErrorDialogBox.Window.Focused.Border.Foreground",
lipgloss.AdaptiveColor{Light: "#00ffff", Dark: "#00ffff"})
// ErrorDialogBox Window:Blurred
viper.SetDefault("Theme.ErrorDialogBox.Window.Blurred.Margin",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.ErrorDialogBox.Window.Blurred.Padding",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.ErrorDialogBox.Window.Blurred.Border.Border",
lipgloss.ThickBorder())
viper.SetDefault("Theme.ErrorDialogBox.Window.Blurred.Border.Sides",
[]bool{false, true, true, true},
)
viper.SetDefault("Theme.ErrorDialogBox.Window.Blurred.Border.Foreground",
lipgloss.AdaptiveColor{Light: "#cccccc", Dark: "#333333"})
// ErrorDialogBox Titlebar:Focused
viper.SetDefault("Theme.ErrorDialogBox.Titlebar.Focused.Margin",
[]int{0, 0, 1, 0})
viper.SetDefault("Theme.ErrorDialogBox.Titlebar.Focused.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.ErrorDialogBox.Titlebar.Focused.Foreground",
lipgloss.AdaptiveColor{Light: "#ffffff", Dark: "#000000"})
viper.SetDefault("Theme.ErrorDialogBox.Titlebar.Focused.Background",
lipgloss.AdaptiveColor{Light: "#00cccc", Dark: "#00cccc"})
// ErrorDialogBox Titlebar:Blurred
viper.SetDefault("Theme.ErrorDialogBox.Titlebar.Blurred.Margin",
[]int{0, 0, 1, 0})
viper.SetDefault("Theme.ErrorDialogBox.Titlebar.Blurred.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.ErrorDialogBox.Titlebar.Blurred.Foreground",
lipgloss.AdaptiveColor{Light: "#ffffff", Dark: "#000000"})
viper.SetDefault("Theme.ErrorDialogBox.Titlebar.Blurred.Background",
lipgloss.AdaptiveColor{Light: "#cccccc", Dark: "#333333"})
// ErrorDialogBox Bottombar
viper.SetDefault("Theme.ErrorDialogBox.Bottombar.Margin",
[]int{1, 0, 0, 0})
viper.SetDefault("Theme.ErrorDialogBox.Bottombar.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.ErrorDialogBox.Bottombar.Foreground",
lipgloss.AdaptiveColor{Light: "#aaaaaa", Dark: "#999999"})
// PostsList List:Focused
viper.SetDefault("Theme.PostsList.List.Focused.Margin",
[]int{0, 0, 0, 0})
@ -229,60 +349,6 @@ func SetDefaults(cacheDir string) {
viper.SetDefault("Theme.PostsList.ItemDetail.Selected.Foreground",
lipgloss.AdaptiveColor{Light: "#000000", Dark: "#FFFFFF"})
// DialogBox Window:Focused
viper.SetDefault("Theme.DialogBox.Window.Focused.Margin",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Window.Focused.Padding",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Window.Focused.Border.Border",
lipgloss.ThickBorder())
viper.SetDefault("Theme.DialogBox.Window.Focused.Border.Sides",
[]bool{false, true, true, true},
)
viper.SetDefault("Theme.DialogBox.Window.Focused.Border.Foreground",
lipgloss.AdaptiveColor{Light: "#00ffff", Dark: "#00ffff"})
// DialogBox Window:Blurred
viper.SetDefault("Theme.DialogBox.Window.Blurred.Margin",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Window.Blurred.Padding",
[]int{0, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Window.Blurred.Border.Border",
lipgloss.ThickBorder())
viper.SetDefault("Theme.DialogBox.Window.Blurred.Border.Sides",
[]bool{false, true, true, true},
)
viper.SetDefault("Theme.DialogBox.Window.Blurred.Border.Foreground",
lipgloss.AdaptiveColor{Light: "#cccccc", Dark: "#333333"})
// DialogBox Titlebar:Focused
viper.SetDefault("Theme.DialogBox.Titlebar.Focused.Margin",
[]int{0, 0, 1, 0})
viper.SetDefault("Theme.DialogBox.Titlebar.Focused.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.DialogBox.Titlebar.Focused.Foreground",
lipgloss.AdaptiveColor{Light: "#ffffff", Dark: "#000000"})
viper.SetDefault("Theme.DialogBox.Titlebar.Focused.Background",
lipgloss.AdaptiveColor{Light: "#00cccc", Dark: "#00cccc"})
// DialogBox Titlebar:Blurred
viper.SetDefault("Theme.DialogBox.Titlebar.Blurred.Margin",
[]int{0, 0, 1, 0})
viper.SetDefault("Theme.DialogBox.Titlebar.Blurred.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.DialogBox.Titlebar.Blurred.Foreground",
lipgloss.AdaptiveColor{Light: "#ffffff", Dark: "#000000"})
viper.SetDefault("Theme.DialogBox.Titlebar.Blurred.Background",
lipgloss.AdaptiveColor{Light: "#cccccc", Dark: "#333333"})
// DialogBox Bottombar
viper.SetDefault("Theme.DialogBox.Bottombar.Margin",
[]int{1, 0, 0, 0})
viper.SetDefault("Theme.DialogBox.Bottombar.Padding",
[]int{0, 1, 0, 1})
viper.SetDefault("Theme.DialogBox.Bottombar.Foreground",
lipgloss.AdaptiveColor{Light: "#aaaaaa", Dark: "#999999"})
// Post Author
viper.SetDefault("Theme.Post.Author.Padding",
[]int{0, 1, 0, 1})

View File

@ -18,6 +18,18 @@ type Theme struct {
Bottombar lipgloss.Style
}
ErrorDialogBox struct {
Window struct {
Focused lipgloss.Style
Blurred lipgloss.Style
}
Titlebar struct {
Focused lipgloss.Style
Blurred lipgloss.Style
}
Bottombar lipgloss.Style
}
PostsList struct {
List struct {
Focused lipgloss.Style
@ -48,6 +60,28 @@ type Theme struct {
func New(cfg *config.Config) *Theme {
t := new(Theme)
t.DialogBox.Window.Focused =
t.fromConfig(&cfg.Theme.DialogBox.Window.Focused)
t.DialogBox.Window.Blurred =
t.fromConfig(&cfg.Theme.DialogBox.Window.Blurred)
t.DialogBox.Titlebar.Focused =
t.fromConfig(&cfg.Theme.DialogBox.Titlebar.Focused)
t.DialogBox.Titlebar.Blurred =
t.fromConfig(&cfg.Theme.DialogBox.Titlebar.Blurred)
t.DialogBox.Bottombar =
t.fromConfig(&cfg.Theme.DialogBox.Bottombar)
t.ErrorDialogBox.Window.Focused =
t.fromConfig(&cfg.Theme.ErrorDialogBox.Window.Focused)
t.ErrorDialogBox.Window.Blurred =
t.fromConfig(&cfg.Theme.ErrorDialogBox.Window.Blurred)
t.ErrorDialogBox.Titlebar.Focused =
t.fromConfig(&cfg.Theme.ErrorDialogBox.Titlebar.Focused)
t.ErrorDialogBox.Titlebar.Blurred =
t.fromConfig(&cfg.Theme.ErrorDialogBox.Titlebar.Blurred)
t.ErrorDialogBox.Bottombar =
t.fromConfig(&cfg.Theme.ErrorDialogBox.Bottombar)
t.PostsList.List.Focused =
t.fromConfig(&cfg.Theme.PostsList.List.Focused)
t.PostsList.List.Blurred =
@ -64,16 +98,7 @@ func New(cfg *config.Config) *Theme {
t.fromConfig(&cfg.Theme.PostsList.ItemDetail.Blurred)
t.PostsList.ItemDetail.Selected =
t.fromConfig(&cfg.Theme.PostsList.ItemDetail.Selected)
t.DialogBox.Window.Focused =
t.fromConfig(&cfg.Theme.DialogBox.Window.Focused)
t.DialogBox.Window.Blurred =
t.fromConfig(&cfg.Theme.DialogBox.Window.Blurred)
t.DialogBox.Titlebar.Focused =
t.fromConfig(&cfg.Theme.DialogBox.Titlebar.Focused)
t.DialogBox.Titlebar.Blurred =
t.fromConfig(&cfg.Theme.DialogBox.Titlebar.Blurred)
t.DialogBox.Bottombar =
t.fromConfig(&cfg.Theme.DialogBox.Bottombar)
t.Post.Author =
t.fromConfig(&cfg.Theme.Post.Author)
t.Post.Subject =

View File

@ -19,9 +19,17 @@ func (tk *ToolKit) Dialog(title string, content string) string {
Width(tk.ViewWidth()).
Render(title)
var bindings []string
for _, binding := range tk.keybindings {
var tmp string = ""
tmp = binding.Help().Key + " " + binding.Help().Desc
bindings = append(bindings, tmp)
}
bindings = append(bindings, "esc close")
bottombar := tk.theme.DialogBox.Bottombar.
Width(tk.ViewWidth()).
Render("[#]r reply · esc close") // TODO
Render(strings.Join(bindings, " · "))
ui := lipgloss.JoinVertical(
lipgloss.Center,

View File

@ -61,6 +61,14 @@ func (tk *ToolKit) IsCached() bool {
return tk.viewcache != ""
}
func (tk *ToolKit) DefaultCaching(cached bool) string {
if cached && !tk.IsFocused() && tk.IsCached() {
return tk.GetCachedView()
}
return ""
}
func (tk *ToolKit) View(m interface{}, cached bool) string {
return tk.viewfunc(m, cached)
}

View File

@ -6,11 +6,12 @@ func (m Model) View() string {
func buildView(mi interface{}, cached bool) string {
var m *Model = mi.(*Model)
if cached && !m.tk.IsFocused() && m.tk.IsCached() {
m.ctx.Logger.Debugln("Cached View()")
return m.tk.GetCachedView()
if vcache := m.tk.DefaultCaching(cached); vcache != "" {
m.ctx.Logger.Debugln("Cached View()")
return vcache
}
m.ctx.Logger.Debugln("View()")
m.ctx.Logger.Debugf("IsFocused: %v\n", m.tk.IsFocused())

View File

@ -59,7 +59,7 @@ func NewModel(c *ctx.Ctx) Model {
replyIDs: []string{},
}
m.tk.KeymapAdd("reply", "reply", "r")
m.tk.KeymapAdd("reply", "reply (prefix with #, e.g. '2r')", "r")
m.a, _ = aggregator.New(m.ctx)

View File

@ -17,10 +17,9 @@ func (m Model) View() string {
func buildView(mi interface{}, cached bool) string {
var m *Model = mi.(*Model)
if cached && !m.tk.IsFocused() && m.tk.IsCached() {
if vcache := m.tk.DefaultCaching(cached); vcache != "" {
m.ctx.Logger.Debugln("Cached View()")
return m.tk.GetCachedView()
return vcache
}
m.ctx.Logger.Debugln("View()")
m.ctx.Logger.Debugf("IsFocused: %v\n", m.tk.IsFocused())