]> git.0d.be Git - barnard.git/blob - ui_tree.go
update due to gumble API changes
[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         if b.Client == nil {
42                 return nil
43         }
44
45         var treeItem TreeItem
46         if ti, ok := item.(TreeItem); !ok {
47                 root := b.Client.Channels[0]
48                 if root == nil {
49                         return nil
50                 }
51                 return []uiterm.TreeItem{
52                         TreeItem{
53                                 Channel: root,
54                         },
55                 }
56         } else {
57                 treeItem = ti
58         }
59
60         if treeItem.User != nil {
61                 return nil
62         }
63
64         users := []uiterm.TreeItem{}
65         for _, user := range treeItem.Channel.Users {
66                 users = append(users, TreeItem{
67                         User: user,
68                 })
69         }
70
71         channels := []uiterm.TreeItem{}
72         for _, subchannel := range treeItem.Channel.Children {
73                 channels = append(channels, TreeItem{
74                         Channel: subchannel,
75                 })
76         }
77
78         return append(users, channels...)
79 }