// 12 february 2014 package ui // A Button represents a clickable button with some text. type Button struct { // Clicked is called when the button is clicked. // This cannot be changed after the Window containing the Button has been created. // If you do not specify a handler, a default of "do nothing" will be used instead. Clicked func() created bool sysData *sysData initText string } // NewButton creates a new button with the specified text. func NewButton(text string) (b *Button) { return &Button{ sysData: mksysdata(c_button), initText: text, } } // SetText sets the button's text. func (b *Button) SetText(text string) { if b.created { b.sysData.setText(text) return } b.initText = text } // Text returns the button's text. func (b *Button) Text() string { if b.created { return b.sysData.text() } return b.initText } func (b *Button) make(window *sysData) error { b.sysData.event = b.Clicked if b.sysData.event == nil { b.sysData.event = func() {} } err := b.sysData.make(window) if err != nil { return err } b.sysData.setText(b.initText) b.created = true return nil } func (b *Button) allocate(x int, y int, width int, height int, d *sysSizeData) []*allocation { return []*allocation{&allocation{ x: x, y: y, width: width, height: height, this: b, }} } func (b *Button) preferredSize(d *sysSizeData) (width int, height int) { return b.sysData.preferredSize(d) } func (b *Button) commitResize(a *allocation, d *sysSizeData) { b.sysData.commitResize(a, d) } func (b *Button) getAuxResizeInfo(d *sysSizeData) { b.sysData.getAuxResizeInfo(d) }