summaryrefslogtreecommitdiff
path: root/redo/table_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'redo/table_windows.go')
-rw-r--r--redo/table_windows.go39
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()))
+}