2014-08-02 21:35:58 -05:00
// 15 july 2014
package ui
import (
"unsafe"
)
// #include "winapi_windows.h"
import "C"
type checkbox struct {
2014-08-03 08:18:35 -05:00
* controlbase
toggled * event
2014-08-02 21:35:58 -05:00
}
func newCheckbox ( text string ) * checkbox {
2014-08-03 08:18:35 -05:00
// don't use BS_AUTOCHECKBOX here because it creates problems when refocusing (see http://blogs.msdn.com/b/oldnewthing/archive/2014/05/22/10527522.aspx)
// we'll handle actually toggling the check state ourselves (see controls_windows.c)
cc := newControl ( buttonclass ,
C . BS_CHECKBOX | C . WS_TABSTOP ,
0 )
cc . setText ( text )
C . controlSetControlFont ( cc . hwnd )
2014-08-02 21:35:58 -05:00
c := & checkbox {
2014-08-03 08:18:35 -05:00
controlbase : cc ,
toggled : newEvent ( ) ,
2014-08-02 21:35:58 -05:00
}
C . setCheckboxSubclass ( c . hwnd , unsafe . Pointer ( c ) )
return c
}
2014-08-03 08:18:35 -05:00
func ( c * checkbox ) OnToggled ( e func ( ) ) {
c . toggled . set ( e )
}
func ( c * checkbox ) Text ( ) string {
return c . text ( )
}
func ( c * checkbox ) SetText ( text string ) {
c . setText ( text )
}
2014-08-02 21:35:58 -05:00
func ( c * checkbox ) Checked ( ) bool {
2014-08-03 08:22:15 -05:00
return C . checkboxChecked ( c . hwnd ) != C . FALSE
2014-08-02 21:35:58 -05:00
}
func ( c * checkbox ) SetChecked ( checked bool ) {
if checked {
C . checkboxSetChecked ( c . hwnd , C . TRUE )
return
}
C . checkboxSetChecked ( c . hwnd , C . FALSE )
}
//export checkboxToggled
func checkboxToggled ( data unsafe . Pointer ) {
c := ( * checkbox ) ( data )
2014-08-03 08:18:35 -05:00
c . toggled . fire ( )
2014-08-02 21:35:58 -05:00
println ( "checkbox toggled" )
}
2014-08-03 08:18:35 -05:00
func ( c * checkbox ) setParent ( p * controlParent ) {
basesetParent ( c . controlbase , p )
}
func ( c * checkbox ) containerShow ( ) {
basecontainerShow ( c . controlbase )
}
func ( c * checkbox ) containerHide ( ) {
basecontainerHide ( c . controlbase )
}
func ( c * checkbox ) allocate ( x int , y int , width int , height int , d * sizing ) [ ] * allocation {
return baseallocate ( c , x , y , width , height , d )
}
2014-08-02 21:35:58 -05:00
const (
// from http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing
checkboxHeight = 10
// from http://msdn.microsoft.com/en-us/library/windows/desktop/bb226818%28v=vs.85%29.aspx
checkboxXFromLeftOfBoxToLeftOfLabel = 12
)
2014-08-03 08:18:35 -05:00
func ( c * checkbox ) preferredSize ( d * sizing ) ( width , height int ) {
2014-08-02 21:35:58 -05:00
return fromdlgunitsX ( checkboxXFromLeftOfBoxToLeftOfLabel , d ) + int ( c . textlen ) ,
fromdlgunitsY ( checkboxHeight , d )
}
2014-08-03 08:18:35 -05:00
func ( c * checkbox ) commitResize ( a * allocation , d * sizing ) {
basecommitResize ( c . controlbase , a , d )
}
func ( c * checkbox ) getAuxResizeInfo ( d * sizing ) {
2014-08-03 19:42:45 -05:00
basegetAuxResizeInfo ( c , d )
2014-08-03 08:18:35 -05:00
}