summaryrefslogtreecommitdiff
path: root/redo/table_unix.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-08-18 02:58:30 -0400
committerPietro Gagliardi <[email protected]>2014-08-18 02:58:30 -0400
commita8f711dfad63c5b1949439ac33ab4a162ab90ded (patch)
tree29253de6cdb543d15969cfd0ec1894b877310c98 /redo/table_unix.go
parent58e95f239940c646dce75c2b978d077884b7d215 (diff)
Implemented Table.Selected()/Select() on GTK+, more TODOs, and a quick Windows fix.
Diffstat (limited to 'redo/table_unix.go')
-rw-r--r--redo/table_unix.go31
1 files changed, 31 insertions, 0 deletions
diff --git a/redo/table_unix.go b/redo/table_unix.go
index f080a8f..95bafdf 100644
--- a/redo/table_unix.go
+++ b/redo/table_unix.go
@@ -23,6 +23,7 @@ type table struct {
model *C.goTableModel
modelgtk *C.GtkTreeModel
+ selection *C.GtkTreeSelection
pixbufs []*C.GdkPixbuf
@@ -51,6 +52,7 @@ func finishNewTable(b *tablebase, ty reflect.Type) Table {
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)
C.gtk_tree_view_set_model(t.treeview, t.modelgtk)
for i := 0; i < ty.NumField(); i++ {
cname := togstr(ty.Field(i).Name)
@@ -108,6 +110,35 @@ func (t *table) LoadImageList(i ImageList) {
i.apply(&t.pixbufs)
}
+func (t *table) Selected() int {
+ var iter C.GtkTreeIter
+
+ t.RLock()
+ defer t.RUnlock()
+ if C.gtk_tree_selection_get_selected(t.selection, nil, &iter) == C.FALSE {
+ return -1
+ }
+ path := C.gtk_tree_model_get_path(t.modelgtk, &iter)
+ if path == nil {
+ panic(fmt.Errorf("invalid iter in Table.Selected()"))
+ }
+ defer C.gtk_tree_path_free(path)
+ return int(*C.gtk_tree_path_get_indices(path))
+}
+
+func (t *table) Select(index int) {
+ t.RLock()
+ defer t.RUnlock()
+ C.gtk_tree_selection_unselect_all(t.selection)
+ if index == -1 {
+ return
+ }
+ path := C.gtk_tree_path_new()
+ defer C.gtk_tree_path_free(path)
+ C.gtk_tree_path_append_index(path, C.gint(index))
+ C.gtk_tree_selection_select_path(t.selection, path)
+}
+
//export goTableModel_get_n_columns
func goTableModel_get_n_columns(model *C.GtkTreeModel) C.gint {
tm := (*C.goTableModel)(unsafe.Pointer(model))