diff options
| author | Pietro Gagliardi <[email protected]> | 2014-07-25 20:47:08 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2014-07-25 20:47:08 -0400 |
| commit | c676a2d9b7996df8d76d42c47b5f376b72b08ae0 (patch) | |
| tree | 6d7346ca95c1b2b593ba30fae37d24b2c4372509 /redo/containers_unix.go | |
| parent | 3d5e8feba4d2980f0be647231ae0f75385afa45b (diff) | |
Implemented Tab on GTK+. I really don't like the way sizing works now...
Diffstat (limited to 'redo/containers_unix.go')
| -rw-r--r-- | redo/containers_unix.go | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/redo/containers_unix.go b/redo/containers_unix.go new file mode 100644 index 0000000..20d1bef --- /dev/null +++ b/redo/containers_unix.go @@ -0,0 +1,62 @@ +// 25 july 2014 + +package ui + +import ( + "unsafe" +) + +// #include "gtk_unix.h" +// extern void layoutResizing(GtkWidget *, GdkRectangle *, gpointer); +import "C" + +type tab struct { + *widgetbase + notebook *C.GtkNotebook + + containers []*container + layoutws []*C.GtkWidget + layoutcs []*C.GtkContainer + layouts []*C.GtkLayout +} + +func newTab() Tab { + widget := C.gtk_notebook_new() + t := &tab{ + widgetbase: newWidget(widget), + notebook: (*C.GtkNotebook)(unsafe.Pointer(widget)), + } + return t +} + +func (t *tab) Append(name string, control Control) { + // TODO isolate and standardize + layout := C.gtk_layout_new(nil, nil) + t.layoutws = append(t.layoutws, layout) + t.layoutcs = append(t.layoutcs, (*C.GtkContainer)(unsafe.Pointer(layout))) + t.layouts = append(t.layouts, (*C.GtkLayout)(unsafe.Pointer(layout))) + c := new(container) + c.beginResize = beginResize + t.containers = append(t.containers, c) + c.child = control + c.child.setParent((*C.GtkContainer)(unsafe.Pointer(layout))) + g_signal_connect_after( + C.gpointer(unsafe.Pointer(layout)), + "size-allocate", + C.GCallback(C.layoutResizing), + C.gpointer(unsafe.Pointer(c))) + cname := togstr(name) + defer freegstr(cname) + tab := C.gtk_notebook_append_page(t.notebook, + layout, + C.gtk_label_new(cname)) + if tab == -1 { + panic("gtk_notebook_append_page() failed") + } +} + +//export layoutResizing +func layoutResizing(wid *C.GtkWidget, r *C.GdkRectangle, data C.gpointer) { + c := (*container)(unsafe.Pointer(data)) + c.resize(int(r.width), int(r.height)) +} |
