Added Mac OS X ProgressBars. Mac OS X now feature-equal!

This commit is contained in:
Pietro Gagliardi 2014-03-03 15:32:54 -05:00
parent 874491a871
commit 383933c45e
2 changed files with 27 additions and 1 deletions

View File

@ -83,6 +83,7 @@ extern id _objc_msgSend_uint(id obj, SEL sel, uintptr_t a);
m1(ptr, void *)
m1(bool, BOOL)
extern id objc_msgSend_int(id obj, SEL sel, intptr_t a);
m1(double, double)
m2(id_id, id, id)
extern id _objc_msgSend_rect_bool(id obj, SEL sel, int64_t x, int64_t y, int64_t w, int64_t h, BOOL b);

View File

@ -39,6 +39,7 @@ var (
_NSComboBox = objc_getClass("NSComboBox")
_NSTextField = objc_getClass("NSTextField")
_NSSecureTextField = objc_getClass("NSSecureTextField")
_NSProgressIndicator = objc_getClass("NSProgressIndicator")
_initWithContentRect = sel_getUid("initWithContentRect:styleMask:backing:defer:")
_initWithFrame = sel_getUid("initWithFrame:")
@ -71,6 +72,10 @@ var (
_setEditable = sel_getUid("setEditable:")
_setBordered = sel_getUid("setBordered:")
_setDrawsBackground = sel_getUid("setDrawsBackground:")
_setStyle = sel_getUid("setStyle:")
_setControlSize = sel_getUid("setControlSize:")
_setIndeterminate = sel_getUid("setIndeterminate:")
_setDoubleValue = sel_getUid("setDoubleValue:")
)
func controlShow(what C.id) {
@ -243,6 +248,20 @@ var classTypes = [nctypes]*classData{
delete: deleteListbox,
},
c_progressbar: &classData{
make: func(parentWindow C.id, alternate bool) C.id {
pbar := objc_alloc(_NSProgressIndicator)
pbar = objc_msgSend_rect(pbar, _initWithFrame,
0, 0, 100, 100)
// TODO really int?
C.objc_msgSend_int(pbar, _setStyle, 0) // NSProgressIndicatorBarStyle
objc_msgSend_uint(pbar, _setControlSize, 0) // NSRegularControlSize
C.objc_msgSend_bool(pbar, _setIndeterminate, C.BOOL(C.NO))
windowView := C.objc_msgSend_noargs(parentWindow, _contentView)
C.objc_msgSend_id(windowView, _addSubview, pbar)
return pbar
},
show: controlShow,
hide: controlHide,
},
}
@ -448,5 +467,11 @@ if classTypes[s.ctype].delete == nil { return nil }
}
func (s *sysData) setProgress(percent int) {
// TODO
ret := make(chan struct{})
defer close(ret)
uitask <- func() {
C.objc_msgSend_double(s.id, _setDoubleValue, C.double(percent))
ret <- struct{}{}
}
<-ret
}