diff options
Diffstat (limited to 'redo/table_windows.go')
| -rw-r--r-- | redo/table_windows.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/redo/table_windows.go b/redo/table_windows.go new file mode 100644 index 0000000..4711e37 --- /dev/null +++ b/redo/table_windows.go @@ -0,0 +1,39 @@ +// 28 july 2014 + +package ui + +import ( + "unsafe" + "reflect" +) + +// #include "winapi_windows.h" +import "C" + +type table struct { + *widgetbase + *tablebase +} + +func finishNewTable(b *tablebase, ty reflect.Type) Table { + t := &table{ + widgetbase: newWidget(C.xWC_LISTVIEW, + C.LVS_REPORT | C.LVS_OWNERDATA | C.LVS_NOSORTHEADER | C.LVS_SHOWSELALWAYS | C.WS_HSCROLL | C.WS_VSCROLL, + 0), // TODO WS_EX_CLIENTEDGE? + tablebase: b, + } + C.setTableSubclass(t.hwnd, unsafe.Pointer(&t)) + for i := 0; i < ty.NumField(); i++ { + C.tableAppendColumn(t.hwnd, C.int(i), toUTF16(ty.Field(i).Name)) + } + return t +} + +func (t *table) Unlock() { + t.unlock() + // TODO RACE CONDITION HERE + // I think there's a way to set the item count without causing a refetch of data that works around this... + t.RLock() + defer t.RUnlock() + C.tableUpdate(t.hwnd, C.int(reflect.Indirect(reflect.ValueOf(t.data)).Len())) +} |
