diff options
| -rw-r--r-- | objc_darwin.h | 1 | ||||
| -rw-r--r-- | sysdata_darwin.go | 27 |
2 files changed, 27 insertions, 1 deletions
diff --git a/objc_darwin.h b/objc_darwin.h index a1ee381..1208e0e 100644 --- a/objc_darwin.h +++ b/objc_darwin.h @@ -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); diff --git a/sysdata_darwin.go b/sysdata_darwin.go index 4625c44..fc3f57c 100644 --- a/sysdata_darwin.go +++ b/sysdata_darwin.go @@ -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 } |
