func main() { // Initialize gtk3 gtk3.Init() // Create windows w := gtk3.NewWindow(gtk3.GTK_WINDOW_TOPLEVEL, nil) w.Connect("destroy", gtk3.MainQuit) // Let's set a couple of window properties w.Set(gtk3.P{"title": "Go-GTK3 Demo", "resizable": true}) b2 := gtk3.NewVBox(0) w.Add(b2) // Create GtkFrame f := gtk3.NewFrame("Button Play") b2.Add(f) // Create GtkBox box := gtk3.NewBox(gtk3.ORIENTATION_VERTICAL, 5) // Add it to window f.Add(box) // Create First Button fbut := gtk3.NewButtonWithLabel("Click Me") box.PackStart(fbut, false, false, 0) fbut.Connect("clicked", func() { box.ReorderChild(fbut, 2) }) // Another one fbut2 := gtk3.NewButtonWithLabel("Disable my upper brother") box.PackStart(fbut2, false, false, 0) // So, let's disable him fbut2.Connect("clicked", func(s bool) { fbut.SetSensitive(s) }, false) // And another fbut3 := gtk3.NewButtonWithLabel("Don't do it") box.PackStart(fbut3, false, false, 0) fbut2.Connect("clicked", but_disabled, fbut3, fbut) fbut3.Connect("clicked", func() { fbut.SetSensitive(true) fbut3.SetLabel("There you go") }) entry1 := gtk3.NewEntry() box.PackStart(entry1, false, false, 0) fbut4 := gtk3.NewButtonWithLabel("Get entry text, now!") box.PackStart(fbut4, false, false, 0) fbut4.Connect("clicked", func() { fbut4.SetLabel(entry1.GetText()) }) // Run applicaton w.ShowAll() gtk3.Main() }
func main() { app := gtk3.NewApplication("si.go-gtk3.demoapp", gtk3.G_APPLICATION_FLAGS_NONE) // Create windows w := gtk3.NewWindow(gtk3.GTK_WINDOW_TOPLEVEL, nil) // Add window to GTKApplication app.AddWindow(w) // Let's set a couple of window properties w.Set(gtk3.P{"title": "Go-GTK3 Demo", "resizable": false}) //Create frame f := gtk3.NewFrame("Button play") // Add it to window w.Add(f) // Create GtkBox box := gtk3.NewBox(gtk3.ORIENTATION_VERTICAL, 5) f.Add(box) // Create First Button fbut := gtk3.NewButtonWithLabel("Click Me") box.PackStart(fbut, false, false, 0) fbut.Connect("clicked", func() { box.ReorderChild(fbut, 2) }) // Another one fbut2 := gtk3.NewButtonWithLabel("Disable my upper brother") box.PackStart(fbut2, false, false, 0) // So, let's disable him fbut2.Connect("clicked", func(s bool) { fbut.SetSensitive(s) }, false) // And another fbut3 := gtk3.NewButtonWithLabel("Don't do it") box.PackStart(fbut3, false, false, 0) fbut2.Connect("clicked", but_disabled, fbut3, fbut) fbut3.Connect("clicked", func() { fbut.SetSensitive(true) fbut3.SetLabel("There you go") }) entry1 := gtk3.NewEntry() box.PackStart(entry1, false, false, 0) fbut4 := gtk3.NewButtonWithLabel("Get entry text, now!") box.PackStart(fbut4, false, false, 0) fbut4.Connect("clicked", func() { fbut4.SetLabel(entry1.GetText()) }) // Run applicaton w.ShowAll() app.Run() }
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 DoMenu(w gtk3.WidgetLike) gtk3.WidgetLike { if window == nil { window = gtk3.NewWindow(gtk3.GtkWindowType.TOPLEVEL) window.SetScreen(w.W().GetScreen()) window.SetTitle("Menus") window.Connect("destroy", func() { window.Destroy(); window = nil }) accelGroup := gtk3.NewAccelGroup() window.AddAccelGroup(accelGroup) window.SetBorderWidth(0) box := gtk3.NewHBox(0) window.Add(box) box.Show() box1 := gtk3.NewVBox(0) box.Add(box1) box1.Show() menubar := gtk3.NewMenuBar() box1.PackStart(menubar, false, true, 0) menubar.Show() menu := createMenu(2, true) menuitem := gtk3.NewMenuItemWithLabel("test\nline2") menuitem.SetSubmenu(menu) menubar.Append(menuitem) menuitem.Show() menuitem = gtk3.NewMenuItemWithLabel("foo") menuitem.SetSubmenu(createMenu(3, true)) menubar.Append(menuitem) menuitem.Show() menuitem = gtk3.NewMenuItemWithLabel("bar") menuitem.SetSubmenu(createMenu(4, true)) menubar.Append(menuitem) menuitem.Show() box2 := gtk3.NewVBox(10) box2.SetBorderWidth(10) box1.PackStart(box2, false, true, 0) box2.Show() button := gtk3.NewButtonWithLabel("Flip") button.Connect("clicked", changeOrientation, menubar) box2.PackStart(button, true, true, 0) button.Show() button = gtk3.NewButtonWithLabel("Close") button.Connect("clicked", func() { window.Destroy() }) box2.PackStart(button, true, true, 0) button.SetCanDefault(true) button.GrabDefault() button.Show() } if !window.GetVisible() { window.ShowAll() } else { window.Destroy() window = nil return nil } return window }
func DoSearchEntry(w gtk3.WidgetLike) gtk3.WidgetLike { if window == nil { var searchProgressId, finishSearchId uint window = gtk3.NewDialogWithButtons("Search Entry", w.(*gtk3.Window), 0, gtk3.B{{gtk3.GtkStock.CLOSE, gtk3.GtkResponse.NONE}}) window.SetResizable(false) window.Connect("response", func() { window.Destroy() }) window.Connect("destroy", func() { if finishSearchId != 0 { glib.GSourceRemove(finishSearchId) } if searchProgressId != 0 { glib.GSourceRemove(searchProgressId) } window = nil }) contentArea := window.GetContentArea().(*gtk3.Box) vbox := gtk3.NewVBox(5) contentArea.PackStart(vbox, true, true, 0) vbox.SetBorderWidth(5) label := gtk3.NewLabel("") label.SetMarkup("Search entry demo") vbox.PackStart(label, false, false, 0) hbox := gtk3.NewHBox(10) vbox.PackStart(hbox, true, true, 0) hbox.SetBorderWidth(0) // Create our entry entry := gtk3.NewEntry() hbox.PackStart(entry, false, false, 0) // Create the find and cancel buttons notebook := gtk3.NewNotebook() notebook.SetShowTabs(false) notebook.SetShowBorder(false) hbox.PackStart(notebook, false, false, 0) startSearchFunc := func() { entry.ProgressPulse() } finishSearchFunc := func() bool { notebook.SetCurrentPage(0) glib.GSourceRemove(searchProgressId) searchProgressId = 0 entry.SetProgressFraction(0.0) return false } findButton := gtk3.NewButtonWithLabel("Find") findButton.Connect("clicked", func() { notebook.SetCurrentPage(1) searchProgressId = glib.GTimeoutAddFull(glib.GPriority.DEFAULT, 100, startSearchFunc) finishSearchId = glib.GTimeoutAddSecondsFull(glib.GPriority.DEFAULT, 15, finishSearchFunc) }) notebook.AppendPage(findButton, nil) findButton.Show() cancelButton := gtk3.NewButtonWithLabel("Cancel") cancelButton.Connect("clicked", func() { glib.GSourceRemove(finishSearchId) finishSearchFunc() }) notebook.AppendPage(cancelButton, nil) cancelButton.Show() // Set up the search icon entry.SetIconFromStock(gtk3.GtkEntryIconPosition.PRIMARY, gtk3.GtkStock.FIND) entry.SetIconTooltipText(gtk3.GtkEntryIconPosition.PRIMARY, "Search by name\nClick here to change the search type") entry.SetPlaceholderText("name") // Set up the clear icon entry.SetIconFromStock(gtk3.GtkEntryIconPosition.SECONDARY, gtk3.GtkStock.CLEAR) menu := createSearchMenu(entry) menu.AttachToWidget(entry, nil) textChangedFunc := func() { hasText := entry.GetTextLength() > 0 entry.SetIconSensitive(gtk3.GtkEntryIconPosition.SECONDARY, hasText) findButton.SetSensitive(hasText) } textChangedFunc() entry.Connect("icon-press", iconPressCallback, menu) entry.Connect("notify::text", textChangedFunc) entry.Connect("activate", func() { if searchProgressId != 0 { return } notebook.SetCurrentPage(1) searchProgressId = glib.GTimeoutAddFull(glib.GPriority.DEFAULT, 100, startSearchFunc) finishSearchId = glib.GTimeoutAddSecondsFull(glib.GPriority.DEFAULT, 15, finishSearchFunc) }) entry.Connect("populate-popup", entryPopulatePopup) button := window.GetWidgetForResponse(gtk3.GtkResponse.NONE) button.W().GrabFocus() } if !window.GetVisible() { window.ShowAll() } else { window.Destroy() window = nil return nil } return window }