From a501c5678d4a226d436f030226c76532f2a6f36b Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Tue, 29 Jul 2014 01:06:56 -0400 Subject: Began the implementation of Table on GTK+. --- redo/table_unix.go | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 redo/table_unix.go (limited to 'redo/table_unix.go') diff --git a/redo/table_unix.go b/redo/table_unix.go new file mode 100644 index 0000000..049945c --- /dev/null +++ b/redo/table_unix.go @@ -0,0 +1,64 @@ +// 29 july 2014 + +package ui + +import ( +// "fmt" + "reflect" + "unsafe" +) + +// #include "gtk_unix.h" +import "C" + +type table struct { + *widgetbase + *tablebase + + treewidget *C.GtkWidget + treeview *C.GtkTreeView + + scrollc *C.GtkContainer + scrollwindow *C.GtkScrolledWindow +} + +func finishNewTable(b *tablebase, ty reflect.Type) Table { + widget := C.gtk_tree_view_new() + scroller := C.gtk_scrolled_window_new(nil, nil) + t := &table{ + // TODO kludge + widgetbase: newWidget(scroller), + tablebase: b, + treewidget: widget, + treeview: (*C.GtkTreeView)(unsafe.Pointer(widget)), + scrollc: (*C.GtkContainer)(unsafe.Pointer(scroller)), + scrollwindow: (*C.GtkScrolledWindow)(unsafe.Pointer(scroller)), + } + // give the scrolled window a border (thanks to jlindgren in irc.gimp.net/#gtk+) + C.gtk_scrolled_window_set_shadow_type(t.scrollwindow, C.GTK_SHADOW_IN) + C.gtk_container_add(t.scrollc, t.treewidget) + // TODO model + for i := 0; i < ty.NumField(); i++ { + cname := togstr(ty.Field(i).Name) + C.tableAppendColumn(t.treeview, cname) + freegstr(cname) // free now (not deferred) to conserve memory + } + return t +} + +func (t *table) preferredSize(d *sizing) (width int, height int) { + var r C.GtkRequisition + + C.gtk_widget_get_preferred_size(t.treewidget, nil, &r) + return int(r.width), int(r.height) +} + + +func (t *table) Unlock() { + t.unlock() + // TODO RACE CONDITION HERE + // not sure about this one... + t.RLock() + defer t.RUnlock() + // TODO +} -- cgit v1.2.3