diff --git a/listbox_darwin.go b/listbox_darwin.go index e663e78..9575af6 100644 --- a/listbox_darwin.go +++ b/listbox_darwin.go @@ -223,6 +223,7 @@ var ( _setHeaderView = sel_getUid("setHeaderView:") _selectedRowIndexes = sel_getUid("selectedRowIndexes") _count = sel_getUid("count") + _numberOfRows = sel_getUid("numberOfRows") ) func makeListbox(parentWindow C.id, alternate bool) C.id { @@ -294,3 +295,7 @@ func deleteListbox(listbox C.id, index int) { array := listboxArray(listbox) deleteListboxArray(array, index) } + +func listboxLen(listbox C.id) int { + return int(C.objc_msgSend_intret_noargs(listboxInScrollView(listbox), _numberOfRows)) +} diff --git a/sysdata_darwin.go b/sysdata_darwin.go index eb3a76f..6db7ad3 100644 --- a/sysdata_darwin.go +++ b/sysdata_darwin.go @@ -30,6 +30,7 @@ type classData struct { selIndices func(id C.id) []int selTexts func(id C.id) []string delete func(id C.id, index int) + len func(id C.id) int } var ( @@ -76,6 +77,7 @@ var ( _setControlSize = sel_getUid("setControlSize:") _setIndeterminate = sel_getUid("setIndeterminate:") _setDoubleValue = sel_getUid("setDoubleValue:") + _numberOfItems = sel_getUid("numberOfItems") ) func addControl(parentWindow C.id, control C.id) { @@ -199,6 +201,9 @@ var classTypes = [nctypes]*classData{ delete: func(id C.id, index int) { C.objc_msgSend_int(id, _removeItemAtIndex, C.intptr_t(index)) }, + len: func(id C.id) int { + return int(C.objc_msgSend_intret_noargs(id, _numberOfItems)) + }, }, c_lineedit: &classData{ make: func(parentWindow C.id, alternate bool) C.id { @@ -246,6 +251,7 @@ var classTypes = [nctypes]*classData{ selIndices: selectedListboxIndices, selTexts: selectedListboxTexts, delete: deleteListbox, + len: listboxLen, }, c_progressbar: &classData{ make: func(parentWindow C.id, alternate bool) C.id { @@ -465,3 +471,12 @@ func (s *sysData) setProgress(percent int) { } <-ret } + +func (s *sysData) len() int { + ret := make(chan int) + defer close(ret) + uitask <- func() { + ret <- classTypes[s.ctype].len(s.id) + } + return <-ret +}