summaryrefslogtreecommitdiff
path: root/redo/table_unix.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-08-20 21:30:23 -0400
committerPietro Gagliardi <[email protected]>2014-08-20 21:30:23 -0400
commit607b49482ee92cd18bd5ac4d3a5bbc4183efb2af (patch)
treee62e684eda8f37ce89950657bd7bef9140f8d74a /redo/table_unix.go
parentb964c564e7a7d7a460dbcf922f4ceeb5368def50 (diff)
Implemented Table.OnSelected() on the GTK+ backend.
Diffstat (limited to 'redo/table_unix.go')
-rw-r--r--redo/table_unix.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/redo/table_unix.go b/redo/table_unix.go
index 95bafdf..8fa18bc 100644
--- a/redo/table_unix.go
+++ b/redo/table_unix.go
@@ -12,6 +12,7 @@ import (
// #include "gtk_unix.h"
// extern void goTableModel_toggled(GtkCellRendererToggle *, gchar *, gpointer);
+// extern void tableSelectionChanged(GtkTreeSelection *, gpointer);
import "C"
type table struct {
@@ -27,6 +28,8 @@ type table struct {
pixbufs []*C.GdkPixbuf
+ selected *event
+
// stuff required by GtkTreeModel
nColumns C.gint
old C.gint
@@ -48,11 +51,17 @@ func finishNewTable(b *tablebase, ty reflect.Type) Table {
_widget: widget,
treeview: (*C.GtkTreeView)(unsafe.Pointer(widget)),
crtocol: make(map[*C.GtkCellRendererToggle]int),
+ selected: newEvent(),
}
model := C.newTableModel(unsafe.Pointer(t))
t.model = model
t.modelgtk = (*C.GtkTreeModel)(unsafe.Pointer(model))
t.selection = C.gtk_tree_view_get_selection(t.treeview)
+ g_signal_connect(
+ C.gpointer(unsafe.Pointer(t.selection)),
+ "changed",
+ C.GCallback(C.tableSelectionChanged),
+ C.gpointer(unsafe.Pointer(t)))
C.gtk_tree_view_set_model(t.treeview, t.modelgtk)
for i := 0; i < ty.NumField(); i++ {
cname := togstr(ty.Field(i).Name)
@@ -139,6 +148,10 @@ func (t *table) Select(index int) {
C.gtk_tree_selection_select_path(t.selection, path)
}
+func (t *table) OnSelected(f func()) {
+ t.selected.set(f)
+}
+
//export goTableModel_get_n_columns
func goTableModel_get_n_columns(model *C.GtkTreeModel) C.gint {
tm := (*C.goTableModel)(unsafe.Pointer(model))
@@ -204,6 +217,12 @@ func goTableModel_toggled(cr *C.GtkCellRendererToggle, pathstr *C.gchar, data C.
datum.SetBool(!datum.Bool())
}
+//export tableSelectionChanged
+func tableSelectionChanged(sel *C.GtkTreeSelection, data C.gpointer) {
+ t := (*table)(unsafe.Pointer(data))
+ t.selected.fire()
+}
+
func (t *table) widget() *C.GtkWidget {
return t._widget
}