Files
barnard/ui_tree.go
2014-12-05 10:13:12 -04:00

78 lines
1.4 KiB
Go

package barnard
import (
"github.com/layeh/barnard/uiterm"
"github.com/layeh/gumble/gumble"
)
type TreeItem struct {
User *gumble.User
Channel *gumble.Channel
}
func (ti TreeItem) String() string {
if ti.User != nil {
return ti.User.Name()
}
if ti.Channel != nil {
return ti.Channel.Name()
}
return ""
}
func (ti TreeItem) TreeItemStyle(active bool) (uiterm.Attribute, uiterm.Attribute) {
fg := uiterm.ColorDefault
bg := uiterm.ColorBlack
if ti.Channel != nil {
fg |= uiterm.AttrBold
}
if active {
bg |= uiterm.AttrReverse
}
return fg, bg
}
func (b *Barnard) TreeItemSelect(ui *uiterm.Ui, tree *uiterm.Tree, item uiterm.TreeItem) {
treeItem := item.(TreeItem)
if treeItem.Channel != nil {
b.Client.Self().Move(treeItem.Channel)
}
}
func (b *Barnard) TreeItem(item uiterm.TreeItem) []uiterm.TreeItem {
var treeItem TreeItem
if ti, ok := item.(TreeItem); !ok {
root := b.Client.Channels()[0]
if root == nil {
return nil
}
return []uiterm.TreeItem{
TreeItem{
Channel: root,
},
}
} else {
treeItem = ti
}
if treeItem.User != nil {
return nil
}
users := []uiterm.TreeItem{}
for _, user := range treeItem.Channel.Users() {
users = append(users, TreeItem{
User: user,
})
}
channels := []uiterm.TreeItem{}
for _, subchannel := range treeItem.Channel.Channels() {
channels = append(channels, TreeItem{
Channel: subchannel,
})
}
return append(users, channels...)
}