]> git.0d.be Git - barnard.git/blob - ui_tree.go
d164cbd23f234151fbd0c98ad79abdee26ae0c0d
[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(fg, bg uiterm.Attribute, active bool) (uiterm.Attribute, uiterm.Attribute) {
24         if ti.Channel != nil {
25                 fg |= uiterm.AttrBold
26         }
27         if active {
28                 fg, bg = bg, fg
29         }
30         return fg, bg
31 }
32
33 func (b *Barnard) TreeItemSelect(ui *uiterm.Ui, tree *uiterm.Tree, item uiterm.TreeItem) {
34         treeItem := item.(TreeItem)
35         if treeItem.Channel != nil {
36                 b.Client.Self.Move(treeItem.Channel)
37         }
38 }
39
40 func (b *Barnard) TreeItem(item uiterm.TreeItem) []uiterm.TreeItem {
41         var treeItem TreeItem
42         if ti, ok := item.(TreeItem); !ok {
43                 root := b.Client.Channels[0]
44                 if root == nil {
45                         return nil
46                 }
47                 return []uiterm.TreeItem{
48                         TreeItem{
49                                 Channel: root,
50                         },
51                 }
52         } else {
53                 treeItem = ti
54         }
55
56         if treeItem.User != nil {
57                 return nil
58         }
59
60         users := []uiterm.TreeItem{}
61         for _, user := range treeItem.Channel.Users {
62                 users = append(users, TreeItem{
63                         User: user,
64                 })
65         }
66
67         channels := []uiterm.TreeItem{}
68         for _, subchannel := range treeItem.Channel.Children {
69                 channels = append(channels, TreeItem{
70                         Channel: subchannel,
71                 })
72         }
73
74         return append(users, channels...)
75 }