func attachWidgets(textView *gtk3.TextView) { var iter gtk3.TextIter buffer := textView.GetBuffer() buffer.GetStartIter(&iter) i := 0 var widget gtk3.WidgetLike for findAnchor(&iter) { anchor := iter.GetChildAnchor() switch i { case 0: widget = gtk3.NewButtonWithLabel("Click Me") //widget.Connect("clicked", case 1: combo := gtk3.NewComboBoxText() combo.AppendText("Option 1") combo.AppendText("Option 2") combo.AppendText("Option 3") widget = combo case 2: filename, _ := findFile("floppybuddy.gif") widget = gtk3.NewImageFromFile(filename) case 3: widget = gtk3.NewEntry() default: break } textView.AddChildAtAnchor(widget, anchor) widget.W().ShowAll() i++ } }
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 }