]> git.lizzy.rs Git - micro.git/blob - cmd/micro/action/tab.go
Split improvements
[micro.git] / cmd / micro / action / tab.go
1 package action
2
3 import (
4         "github.com/zyedidia/micro/cmd/micro/display"
5         "github.com/zyedidia/micro/cmd/micro/screen"
6         "github.com/zyedidia/micro/cmd/micro/views"
7         "github.com/zyedidia/tcell"
8 )
9
10 var MainTab *TabPane
11
12 type TabPane struct {
13         *views.Node
14         display.Window
15         Panes  []*EditPane
16         active int
17
18         resizing bool
19 }
20
21 func (t *TabPane) HandleEvent(event tcell.Event) {
22         switch e := event.(type) {
23         case *tcell.EventResize:
24                 w, h := screen.Screen.Size()
25                 InfoBar.Resize(w, h-1)
26                 t.Node.Resize(w, h-1)
27                 t.Resize()
28         case *tcell.EventMouse:
29                 switch e.Buttons() {
30                 case tcell.Button1:
31                         mx, my := e.Position()
32
33                         for i, p := range t.Panes {
34                                 v := p.GetView()
35                                 inpane := mx >= v.X && mx < v.X+v.Width && my >= v.Y && my < v.Y+v.Height
36                                 if inpane {
37                                         t.active = i
38                                         p.SetActive(true)
39                                 } else {
40                                         p.SetActive(false)
41                                 }
42                         }
43                 }
44         }
45         t.Panes[t.active].HandleEvent(event)
46 }
47
48 func (t *TabPane) SetActive(i int) {
49         t.active = i
50         for j, p := range t.Panes {
51                 if j == i {
52                         p.SetActive(true)
53                 } else {
54                         p.SetActive(false)
55                 }
56         }
57 }
58
59 func (t *TabPane) Resize() {
60         for _, p := range t.Panes {
61                 v := t.GetNode(p.splitID).GetView()
62                 pv := p.GetView()
63                 pv.X, pv.Y = v.X, v.Y
64                 p.SetView(pv)
65                 p.Resize(v.W, v.H)
66         }
67 }
68
69 func (t *TabPane) CurPane() *EditPane {
70         return t.Panes[t.active]
71 }