// This file is part of beagles.
//
// Copyright © 2020 Chris Palmer <chris@red-oxide.org>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package main
import (
"fmt"
"strings"
"github.com/gdamore/tcell"
tui "gitlab.com/tslocum/cview"
)
type list struct {
Widget *tui.List
}
func newList(theme *themeType) *list {
view := tui.NewList()
bgColor := theme.BackgroundColor
fgColor := theme.ForegroundColor
if theme.List != nil {
bgColor = theme.List.BackgroundColor
fgColor = theme.List.ForegroundColor
}
if bgColor == "transparent" {
view.SetBackgroundColor(tcell.ColorDefault)
} else {
view.SetBackgroundColor(tcell.GetColor(bgColor))
}
view.SetMainTextColor(tcell.GetColor(fgColor))
return &list{Widget: view}
}
func (w *list) increment() int {
size := w.Widget.GetItemCount()
if size == 0 {
return -1
}
currItemIndex := w.index()
newIndex := (currItemIndex + 1)
if newIndex >= size {
newIndex = 0
}
w.setIndex(newIndex)
return newIndex
}
func (w *list) decrement() int {
size := w.Widget.GetItemCount()
if size == 0 {
return -1
}
currItemIndex := w.index()
newIndex := (currItemIndex - 1)
if newIndex < 0 {
newIndex = size - 1
}
w.setIndex(newIndex)
return newIndex
}
func (w *list) setIndex(newIndex int) {
w.Widget.SetCurrentItem(newIndex)
}
func (w *list) index() int {
return w.Widget.GetCurrentItem()
}
func (w *list) size() int {
return w.Widget.GetItemCount()
}
func (w *list) remove() int {
i := w.index()
w.Widget.RemoveItem(i)
return i
}
func (w *list) add(item Item) {
name := item.Title
if strings.Contains(item.Type, "audio") {
name = fmt.Sprintf("🎧 %s", name)
}
w.Widget.AddItem(name, "", rune(0), nil)
}
func (w *list) clear() {
w.Widget.Clear()
}