-
Notifications
You must be signed in to change notification settings - Fork 2
/
combobox.go
113 lines (92 loc) · 2.18 KB
/
combobox.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package giox
import (
"errors"
"gioui.org/widget"
)
// Combo holds combobox state
type Combo struct {
items []string
hint string
selected int
expanded bool
selectButton widget.Clickable
buttons []widget.Clickable
}
// MakeCombo Creates new combobox widget
func MakeCombo(items []string, hint string) Combo {
c := Combo{
items: items,
hint: hint,
selected: -1,
expanded: false,
buttons: make([]widget.Clickable, len(items)),
}
return c
}
// HasSelected returns true if an item is selected
func (c *Combo) HasSelected() bool {
return c.selected != -1
}
// IsExpanded checks wheather box is expanded
func (c *Combo) IsExpanded() bool {
return c.expanded
}
// Toggle expands and collapses a combobox
func (c *Combo) Toggle() bool {
c.expanded = !c.expanded
return c.expanded
}
// Len returns number of items
func (c *Combo) Len() int {
return len(c.items)
}
// Items returns current list of items
func (c *Combo) Items() []string {
return c.items
}
// Hint returns control's hint test
func (c *Combo) Hint() string {
return c.hint
}
// Item returns a text for corresponding item
func (c *Combo) Item(index int) string {
return c.items[index]
}
// SelectButton returns a points to main (open) combobox button
func (c *Combo) SelectButton() *widget.Clickable {
return &c.selectButton
}
// Button returns a pointer to correspoding button widget
func (c *Combo) Button(index int) *widget.Clickable {
return &(c.buttons[index])
}
// SelectedText returns currently selected item
func (c *Combo) SelectedText() string {
if c.selected == -1 {
return c.hint
}
return c.items[c.selected]
}
// SelectIndex sets currenly selected item by index
func (c *Combo) SelectIndex(index int) error {
N := len(c.items)
if index != -1 && (index < 0 || index >= N) {
return errors.New("Combobox: bad index")
}
c.selected = index
return nil
}
// SelectItem sets currenly selected item by value
func (c *Combo) SelectItem(item string) error {
for i, val := range c.items {
if val == item {
c.selected = i
return nil
}
}
return errors.New("Combobox: bad index")
}
// Unselect removes current selection
func (c *Combo) Unselect() {
c.selected = -1
}