]> git.0d.be Git - barnard.git/blob - ui_tree.go
uiterm: split Ui.SetView into Ui.Add, Ui.SetBounds
[barnard.git] / ui_tree.go
1 package barnard
2
3 import (
4         "github.com/layeh/barnard/uiterm"
5         "github.com/layeh/gumble/gumble"
6 )
7
8 type TreeItem struct {
9         User    *gumble.User
10         Channel *gumble.Channel
11 }
12
13 func (ti TreeItem) String() string {
14         if ti.User != nil {
15                 return ti.User.Name()
16         }
17         if ti.Channel != nil {
18                 return ti.Channel.Name()
19         }
20         return ""
21 }
22
23 func (ti TreeItem) TreeItemStyle(active bool) (uiterm.Attribute, uiterm.Attribute) {
24         fg := uiterm.ColorDefault
25         bg := uiterm.ColorBlack
26         if ti.Channel != nil {
27                 fg |= uiterm.AttrBold
28         }
29         if active {
30                 bg |= uiterm.AttrReverse
31         }
32         return fg, bg
33 }
34
35 func (b *Barnard) TreeItemSelect(ui *uiterm.Ui, tree *uiterm.Tree, item uiterm.TreeItem) {
36         treeItem := item.(TreeItem)
37         if treeItem.Channel != nil {
38                 b.Client.Self().Move(treeItem.Channel)
39         }
40 }
41
42 func (b *Barnard) TreeItem(item uiterm.TreeItem) []uiterm.TreeItem {
43         var treeItem TreeItem
44         if ti, ok := item.(TreeItem); !ok {
45                 root := b.Client.Channels()[0]
46                 if root == nil {
47                         return nil
48                 }
49                 return []uiterm.TreeItem{
50                         TreeItem{
51                                 Channel: root,
52                         },
53                 }
54         } else {
55                 treeItem = ti
56         }
57
58         if treeItem.User != nil {
59                 return nil
60         }
61
62         users := []uiterm.TreeItem{}
63         for _, user := range treeItem.Channel.Users() {
64                 users = append(users, TreeItem{
65                         User: user,
66                 })
67         }
68
69         channels := []uiterm.TreeItem{}
70         for _, subchannel := range treeItem.Channel.Channels() {
71                 channels = append(channels, TreeItem{
72                         Channel: subchannel,
73                 })
74         }
75
76         return append(users, channels...)
77 }