summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-03-03 15:32:54 -0500
committerPietro Gagliardi <[email protected]>2014-03-03 15:32:54 -0500
commit383933c45e1eae6a8c965d75df31c4f11f447588 (patch)
treebb6b34b982223624bed8f293e422157358ff08aa
parent874491a87142742ac726b12d8433d5c0fb64a85e (diff)
Added Mac OS X ProgressBars. Mac OS X now feature-equal!
-rw-r--r--objc_darwin.h1
-rw-r--r--sysdata_darwin.go27
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
}