summaryrefslogtreecommitdiff
path: root/redo/checkbox_unix.go
blob: 45048d1d70e33b8146b904cc734324f7127cae95 (plain)
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
// +build !windows,!darwin

// 7 july 2014

package ui

import (
	"unsafe"
)

// #include "gtk_unix.h"
// extern void buttonClicked(GtkButton *, gpointer);
// extern void checkboxToggled(GtkToggleButton *, gpointer);
import "C"

type checkbox struct {
	// embed button so its methods and events carry over
	*button
	toggle		*C.GtkToggleButton
	checkbox		*C.GtkCheckButton
}

func newCheckbox(text string) *checkbox {
	ctext := togstr(text)
	defer freegstr(ctext)
	widget := C.gtk_check_button_new_with_label(ctext)
	return &checkbox{
		button:		finishNewButton(widget, "toggled", C.checkboxToggled),
		toggle:		(*C.GtkToggleButton)(unsafe.Pointer(widget)),
		checkbox:	(*C.GtkCheckButton)(unsafe.Pointer(widget)),
	}
}

//export checkboxToggled
func checkboxToggled(bwid *C.GtkToggleButton, data C.gpointer) {
	// note that the finishNewButton() call uses the embedded *button as data
	// this is fine because we're only deferring to buttonClicked() anyway
	buttonClicked(nil, data)
}

func (c *checkbox) Checked() bool {
	return fromgbool(C.gtk_toggle_button_get_active(c.toggle))
}

func (c *checkbox) SetChecked(checked bool) {
	C.gtk_toggle_button_set_active(c.toggle, togbool(checked))
}