func DoSpinner(w gtk3.WidgetLike) gtk3.WidgetLike { if window == nil { window = gtk3.NewDialogWithButtons("GtkSpinner", 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() { window = nil }) contentArea := window.GetContentArea().(*gtk3.Box) vbox := gtk3.NewVBox(5) contentArea.PackStart(vbox, true, true, 0) vbox.SetBorderWidth(5) // Sensitive hbox := gtk3.NewHBox(5) spinnerS := gtk3.NewSpinner() hbox.Add(spinnerS) hbox.Add(gtk3.NewEntry()) vbox.Add(hbox) // Disabled hbox = gtk3.NewHBox(5) spinnerU := gtk3.NewSpinner() hbox.Add(spinnerU) hbox.Add(gtk3.NewEntry()) vbox.Add(hbox) hbox.SetSensitive(false) button := gtk3.NewButtonFromStock(gtk3.GtkStock.MEDIA_PLAY) button.Connect("clicked", func() { spinnerS.Start() spinnerU.Start() }) vbox.Add(button) button = gtk3.NewButtonFromStock(gtk3.GtkStock.MEDIA_STOP) button.Connect("clicked", func() { spinnerS.Stop() spinnerU.Stop() }) vbox.Add(button) spinnerS.Start() spinnerU.Start() } if !window.GetVisible() { window.ShowAll() } else { window.Destroy() window = nil return nil } return window }
func main() { gtk3.Init() var infoBuf, sourceBuf *gtk3.TextBuffer window := gtk3.NewWindow(gtk3.GtkWindowType.TOPLEVEL) window.SetTitle("Gtk+ Code Demos") window.Connect("destroy", gtk3.MainQuit) hbox := gtk3.NewHBox(0) window.Add(hbox) // Create tree tree := CreateTree() hbox.PackStart(tree, false, false, 0) notebook := gtk3.NewNotebook() hbox.PackStart(notebook, true, true, 0) notebook.AppendPage(CreateText(&infoBuf, false), gtk3.NewLabelWithMnemonic("_Info")) infoBuf.CreateTag("title", gtk3.P{"font": "Sans 18"}) notebook.AppendPage(CreateText(&sourceBuf, true), gtk3.NewLabelWithMnemonic("_Source")) sourceBuf.CreateTag("comment", gtk3.P{"foreground": "DodgerBlue"}) window.SetDefaultSize(600, 400) window.ShowAll() gtk3.Main() }
func interactiveDialog(w *gtk3.Window, entry1, entry2 *gtk3.Entry) { dialog := gtk3.NewDialogWithButtons("Interactive Dialog", w, gtk3.GtkDialogFlags.MODAL|gtk3.GtkDialogFlags.DESTROY_WITH_PARENT, gtk3.B{{gtk3.GtkStock.OK, gtk3.GtkResponse.OK}, {"_Non-stock Button", gtk3.GtkResponse.CANCEL}}) content_area := dialog.GetContentArea().(*gtk3.Box) hbox := gtk3.NewHBox(8) hbox.SetBorderWidth(uint(8)) content_area.PackStart(hbox, false, false, 0) stock := gtk3.NewImageFromStock(gtk3.GtkStock.DIALOG_QUESTION, gtk3.GtkIconSize.DIALOG) hbox.PackStart(stock, false, false, 0) table := gtk3.NewGrid() table.SetRowSpacing(4) table.SetColumnSpacing(4) hbox.PackStart(table, true, true, 0) label := gtk3.NewLabelWithMnemonic("_Entry 1") table.Attach(label, 0, 0, 1, 1) local_entry1 := gtk3.NewEntry() local_entry1.SetText(entry1.GetText()) table.Attach(local_entry1, 1, 0, 1, 1) label.SetMnemonicWidget(local_entry1) label = gtk3.NewLabelWithMnemonic("E_ntry 2") table.Attach(label, 0, 1, 1, 1) local_entry2 := gtk3.NewEntry() local_entry2.SetText(entry2.GetText()) table.Attach(local_entry2, 1, 1, 1, 1) label.SetMnemonicWidget(local_entry2) hbox.ShowAll() response := dialog.Run() if response == gtk3.GtkResponse.OK { entry1.SetText(local_entry1.GetText()) entry2.SetText(local_entry2.GetText()) } dialog.Destroy() }
func DoButtonBox(doWidget gtk3.WidgetLike) gtk3.WidgetLike { if window == nil { window = gtk3.NewWindow(gtk3.GtkWindowType.TOPLEVEL) window.SetScreen(doWidget.W().GetScreen()) window.SetTitle("Button Boxes") window.Connect("destroy", func() { window.Destroy(); window = nil }) main_vbox := gtk3.NewVBox(0) window.Add(main_vbox) frame_horz := gtk3.NewFrame("Horizontal Button Boxes") main_vbox.PackStart(frame_horz, true, true, 10) vbox := gtk3.NewVBox(0) frame_horz.Add(vbox) vbox.PackStart(createBBox(gtk3.GtkOrientation.HORIZONTAL, "Spread", 40, gtk3.GtkButtonBoxStyle.SPREAD), true, true, 0) vbox.PackStart(createBBox(gtk3.GtkOrientation.HORIZONTAL, "Edge", 40, gtk3.GtkButtonBoxStyle.EDGE), true, true, 5) vbox.PackStart(createBBox(gtk3.GtkOrientation.HORIZONTAL, "Start", 40, gtk3.GtkButtonBoxStyle.START), true, true, 5) vbox.PackStart(createBBox(gtk3.GtkOrientation.HORIZONTAL, "End", 40, gtk3.GtkButtonBoxStyle.END), true, true, 5) frame_vert := gtk3.NewFrame("Vertical Button Boxes") main_vbox.PackStart(frame_vert, true, true, 10) hbox := gtk3.NewHBox(0) frame_vert.Add(hbox) hbox.PackStart(createBBox(gtk3.GtkOrientation.VERTICAL, "Spread", 30, gtk3.GtkButtonBoxStyle.SPREAD), true, true, 0) hbox.PackStart(createBBox(gtk3.GtkOrientation.VERTICAL, "Edge", 30, gtk3.GtkButtonBoxStyle.EDGE), true, true, 5) hbox.PackStart(createBBox(gtk3.GtkOrientation.VERTICAL, "Start", 30, gtk3.GtkButtonBoxStyle.START), true, true, 5) hbox.PackStart(createBBox(gtk3.GtkOrientation.VERTICAL, "End", 30, gtk3.GtkButtonBoxStyle.END), true, true, 5) } if !window.GetVisible() { window.ShowAll() } else { window.Destroy() window = nil return nil } return window }
func createPage1(assistant *gtk3.Assistant) { box := gtk3.NewHBox(12) box.SetBorderWidth(12) label := gtk3.NewLabel("You must fill out this entry to continue") box.PackStart(label, false, false, 0) entry := gtk3.NewEntry() entry.SetActivatesDefault(true) box.PackStart(entry, true, true, 0) entry.Connect("changed", onEntryChanged, assistant) box.ShowAll() assistant.AppendPage(box) assistant.SetPageTitle(box, "Page 1") assistant.SetPageType(box, gtk3.GtkAssistantPage.INTRO) }
func DoDialog(w gtk3.WidgetLike) gtk3.WidgetLike { if window == nil { window = gtk3.NewWindow(gtk3.GtkWindowType.TOPLEVEL) window.SetScreen(w.W().GetScreen()) window.SetTitle("Dialogs") window.Connect("destroy", func() { window.Destroy(); window = nil }) window.SetBorderWidth(8) frame := gtk3.NewFrame("Dialogs") window.Add(frame) vbox := gtk3.NewVBox(8) vbox.SetBorderWidth(8) frame.Add(vbox) // Standard message dialog hbox := gtk3.NewHBox(8) vbox.PackStart(hbox, false, false, 0) button := gtk3.NewButtonWithMnemonic("_Message Dialog") button.Connect("clicked", dialogClickedClosure(window)) hbox.PackStart(button, false, false, 0) vbox.PackStart(gtk3.NewHSeparator(), false, false, 0) // Interactive dialog hbox = gtk3.NewHBox(8) vbox.PackStart(hbox, false, false, 0) vbox2 := gtk3.NewVBox(0) button = gtk3.NewButtonWithMnemonic("_Interactive Dialog") hbox.PackStart(vbox2, false, false, 0) vbox2.PackStart(button, false, false, 0) table := gtk3.NewGrid() table.SetRowSpacing(4) table.SetColumnSpacing(4) hbox.PackStart(table, false, false, 0) label := gtk3.NewLabelWithMnemonic("_Entry 1") table.Attach(label, 0, 0, 1, 1) entry1 := gtk3.NewEntry() table.Attach(entry1, 1, 0, 1, 1) label.SetMnemonicWidget(entry1) label = gtk3.NewLabelWithMnemonic("E_ntry 2") table.Attach(label, 0, 1, 1, 1) entry2 := gtk3.NewEntry() table.Attach(entry2, 1, 1, 1, 1) label.SetMnemonicWidget(entry2) button.Connect("clicked", interactiveDialog, window, entry1, entry2) } if !window.GetVisible() { window.ShowAll() } else { window.Destroy() window = nil return nil } return window }
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 }