-
Notifications
You must be signed in to change notification settings - Fork 1
/
namedbool.go
93 lines (79 loc) · 1.9 KB
/
namedbool.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
package jaws
import (
"fmt"
"html/template"
"github.com/linkdata/deadlock"
)
// NamedBool stores a named boolen value with a HTML representation.
type NamedBool struct {
nba *NamedBoolArray // (read-only) NamedBoolArray that this is part of (may be nil)
name string // (read-only) name within the named bool set
html template.HTML // (read-only) HTML code used in select lists or labels
mu deadlock.RWMutex // protects following
checked bool // it's state
}
func NewNamedBool(nba *NamedBoolArray, name string, html template.HTML, checked bool) *NamedBool {
return &NamedBool{
nba: nba,
name: name,
html: html,
checked: checked,
}
}
func (nb *NamedBool) Array() *NamedBoolArray {
return nb.nba
}
func (nb *NamedBool) Name() (s string) {
s = nb.name
return
}
func (nb *NamedBool) Html() (h template.HTML) {
h = nb.html
return
}
func (nb *NamedBool) JawsGetString(*Element) (name string) {
return nb.Name()
}
func (nb *NamedBool) JawsGetHtml(*Element) (h template.HTML) {
return nb.Html()
}
func (nb *NamedBool) JawsGetBool(*Element) (v bool) {
nb.mu.RLock()
v = nb.checked
nb.mu.RUnlock()
return
}
func (nb *NamedBool) JawsSetBool(e *Element, checked bool) (err error) {
nb.mu.Lock()
var nba *NamedBoolArray
if nb.checked != checked {
nb.checked = checked
nba = nb.nba
}
nb.mu.Unlock()
e.Dirty(nb)
if nba != nil {
e.Dirty(nba)
nb.nba.Set(nb.name, checked)
}
return
}
func (nb *NamedBool) Checked() (checked bool) {
nb.mu.RLock()
checked = nb.checked
nb.mu.RUnlock()
return
}
func (nb *NamedBool) Set(checked bool) (changed bool) {
nb.mu.Lock()
if nb.checked != checked {
nb.checked = checked
changed = true
}
nb.mu.Unlock()
return
}
// String returns a string representation of the NamedBool suitable for debugging.
func (nb *NamedBool) String() string {
return fmt.Sprintf("&{%q,%q,%v}", nb.Name(), nb.Html(), nb.Checked())
}