summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--redo/gtk_unix.h5
-rw-r--r--redo/table_unix.c16
-rw-r--r--redo/table_unix.go64
3 files changed, 83 insertions, 2 deletions
diff --git a/redo/gtk_unix.h b/redo/gtk_unix.h
index 702d480..1f24fc3 100644
--- a/redo/gtk_unix.h
+++ b/redo/gtk_unix.h
@@ -1,7 +1,5 @@
/* 16 march 2014 */
-/* This header file is a convenience to ensure that the compatibility flags below are included in all Go files that include <gtk/gtk.h> */
-
/*
MIN_REQUIRED signals that programs are expected to run on at least GLib 2.32/GTK+ 3.4 and thus deprectation warnings for newer versions (such as gtk_scrolled_window_add_with_viewport() being deprecated in GTK+ 3.8) should be suppressed.
MAX_ALLOWED signals that programs will not use features introduced in newer versions of GLib/GTK+ and that the compiler should warn us if we slip.
@@ -20,3 +18,6 @@ Thanks to desrt in irc.gimp.net/#gtk+
#include <stdlib.h>
#include <gtk/gtk.h>
+
+/* table_unix.c */
+extern void tableAppendColumn(GtkTreeView *, gchar *);
diff --git a/redo/table_unix.c b/redo/table_unix.c
new file mode 100644
index 0000000..5f2e9cb
--- /dev/null
+++ b/redo/table_unix.c
@@ -0,0 +1,16 @@
+/* 29 july 2014 */
+
+#include "gtk_unix.h"
+#include "_cgo_export.h"
+
+void tableAppendColumn(GtkTreeView *table, gchar *name)
+{
+ GtkTreeViewColumn *col;
+ GtkCellRenderer *renderer;
+
+ renderer = gtk_cell_renderer_text_new();
+ col = gtk_tree_view_column_new_with_attributes(name, renderer,
+ /* TODO */
+ NULL);
+ gtk_tree_view_append_column(table, col);
+}
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
+}