func fixedToggled(m gtk3.TreeModelLike, data ...interface{}) { // Data should hold additional arguments filled with closure if len(data) != 2 { return } // We need path string pathStr, _ := data[1].(string) model := m.(*gtk3.ListStore) var iter gtk3.TreeIter path := gtk3.NewTreePathFromString(pathStr) // Get toggled iter model.GetIter(&iter, path) fixed := model.GetValue(&iter, ColumnFixed).(bool) // Do something with the value if fixed { fixed = false } else { fixed = true } // set new value model.SetValue(&iter, ColumnFixed, fixed) // C code would have to free path // Go GC will do that for us - weeeee }
func itemToggled(model *gtk3.TreeStore, column int, data ...interface{}) { var iter gtk3.TreeIter pathStr := data[1].(string) path := gtk3.NewTreePathFromString(pathStr) model.GetIter(&iter, path) toggleItem := model.GetValue(&iter, column).(bool) if toggleItem { toggleItem = false } else { toggleItem = true } model.SetValue(&iter, column, toggleItem) }
func DoComboBox(w gtk3.WidgetLike) gtk3.WidgetLike { if window == nil { window = gtk3.NewWindow(gtk3.GtkWindowType.TOPLEVEL) window.SetScreen(w.W().GetScreen()) window.SetTitle("Combo boxes") window.Connect("destroy", func() { window.Destroy(); window = nil }) window.SetBorderWidth(10) vbox := gtk3.NewVBox(2) window.Add(vbox) // A combobox demonstrating cell renderers, separators and insensitive rows frame := gtk3.NewFrame("Some stock icons") vbox.PackStart(frame, false, false, 0) box := gtk3.NewVBox(0) box.SetBorderWidth(5) frame.Add(box) model := createStockIconStore() combo := gtk3.NewComboBoxWithModel(model) box.Add(combo) var renderer gtk3.CellRendererLike renderer = gtk3.NewCellRendererPixbuf() combo.PackStart(renderer, false) combo.SetAttributes(renderer, gtk3.A{{"pixbuf", PixbufCol}}) combo.SetCellDataFunc(renderer, setSensitive) renderer = gtk3.NewCellRendererText() combo.PackStart(renderer, true) combo.SetAttributes(renderer, gtk3.A{{"text", TextCol}}) combo.SetCellDataFunc(renderer, setSensitive) combo.SetRowSeparatorFunc(isSeparator) combo.SetActive(0) // A ComboBox demonstrating trees. frame = gtk3.NewFrame("Where are we ?") vbox.PackStart(frame, false, false, 0) box = gtk3.NewVBox(0) box.SetBorderWidth(5) frame.Add(box) model1 := createCapitalStore() combo3 := gtk3.NewComboBoxWithModel(model1) box.Add(combo3) renderer1 := gtk3.NewCellRendererText() combo3.PackStart(renderer1, true) combo3.SetAttributes(renderer1, gtk3.A{{"text", 0}}) combo3.SetCellDataFunc(renderer1, isCapitalSensitive) var iter gtk3.TreeIter path := gtk3.NewTreePathFromString("3:3") model1.ITreeModel().GetIter(&iter, path) combo3.SetActiveIter(&iter) // a combobox with validation frame = gtk3.NewFrame("Editable") vbox.PackStart(frame, false, false, 0) box = gtk3.NewVBox(0) box.SetBorderWidth(5) frame.Add(box) combo1 := gtk3.NewComboBoxTextWithEntry() box.Add(combo1) combo1.AppendText("One") combo1.AppendText("Two") combo1.AppendText("2\302\275") combo1.AppendText("Three") mask := "^([0-9]*|One|Two|2\302\275|Three)$" entry := combo1.GetChild().(*gtk3.Entry) entry.Connect("changed", setBackground, entry, mask) // A ComboBox with string IDs frame = gtk3.NewFrame("String IDs") vbox.PackStart(frame, false, false, 0) box = gtk3.NewVBox(0) vbox.SetBorderWidth(5) frame.Add(box) combo2 := gtk3.NewComboBoxText() combo2.Append("never", "Not visible") combo2.Append("when-active", "Visible when active") combo2.Append("always", "Always visible") box.Add(combo2) entry = gtk3.NewEntry() box.Add(entry) gobject.BindProperty(combo2, "active-id", entry, "text", gobject.GBindingFlags.BIDIRECTIONAL) } if !window.GetVisible() { window.ShowAll() } else { window.Destroy() window = nil return nil } return window }