func find_dialog(find_file bool) (bool, string, bool, bool) { dialog := gtk.Dialog() defer dialog.Destroy() dialog.SetTitle("Find") dialog.AddButton("_Find", int(gtk.GTK_RESPONSE_ACCEPT)) dialog.AddButton("_Cancel", int(gtk.GTK_RESPONSE_CANCEL)) w := dialog.GetWidgetForResponse(int(gtk.GTK_RESPONSE_ACCEPT)) dialog.AddAccelGroup(accel_group) w.AddAccelerator("clicked", accel_group, gdk.GDK_KEY_Return, 0, gtk.GTK_ACCEL_VISIBLE) entry := find_entry_with_history() global_button := gtk.CheckButtonWithLabel("Global") global_button.SetVisible(true) global_button.SetActive(prev_global) file_button := gtk.CheckButtonWithLabel("Find file by name pattern") file_button.SetVisible(true) file_button.SetActive(find_file) vbox := dialog.GetVBox() vbox.Add(entry) vbox.Add(global_button) vbox.Add(file_button) if int(gtk.GTK_RESPONSE_ACCEPT) == dialog.Run() { entry_text := entry.GetActiveText() if nil == search_history { search_history = make([]string, 1) search_history[0] = entry_text } else { be := 0 if 10 <= len(search_history) { be = 1 } search_history = append(search_history[be:], entry_text) } prev_global = global_button.GetActive() return true, entry_text, prev_global, file_button.GetActive() } return false, "", false, false }
func main() { var menuitem *gtk.GtkMenuItem gtk.Init(nil) window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL) window.SetPosition(gtk.GTK_WIN_POS_CENTER) window.SetTitle("GTK Go!") window.Connect("destroy", func(ctx *glib.CallbackContext) { println("got destroy!", ctx.Data().(string)) gtk.MainQuit() }, "foo") //-------------------------------------------------------- // GtkVBox //-------------------------------------------------------- vbox := gtk.VBox(false, 1) //-------------------------------------------------------- // GtkMenuBar //-------------------------------------------------------- menubar := gtk.MenuBar() vbox.PackStart(menubar, false, false, 0) //-------------------------------------------------------- // GtkVPaned //-------------------------------------------------------- vpaned := gtk.VPaned() vbox.Add(vpaned) //-------------------------------------------------------- // GtkFrame //-------------------------------------------------------- frame1 := gtk.Frame("Demo") framebox1 := gtk.VBox(false, 1) frame1.Add(framebox1) frame2 := gtk.Frame("Demo") framebox2 := gtk.VBox(false, 1) frame2.Add(framebox2) vpaned.Pack1(frame1, false, false) vpaned.Pack2(frame2, false, false) //-------------------------------------------------------- // GtkImage //-------------------------------------------------------- dir, _ := path.Split(os.Args[0]) imagefile := path.Join(dir, "../../data/go-gtk-logo.png") label := gtk.Label("Go Binding for GTK") label.ModifyFontEasy("DejaVu Serif 15") framebox1.PackStart(label, false, true, 0) //-------------------------------------------------------- // GtkEntry //-------------------------------------------------------- entry := gtk.Entry() entry.SetText("Hello world") framebox1.Add(entry) image := gtk.ImageFromFile(imagefile) framebox1.Add(image) //-------------------------------------------------------- // GtkScale //-------------------------------------------------------- scale := gtk.HScaleWithRange(0, 100, 1) scale.Connect("value-changed", func() { println("scale:", int(scale.GetValue())) }) framebox2.Add(scale) //-------------------------------------------------------- // GtkHBox //-------------------------------------------------------- buttons := gtk.HBox(false, 1) //-------------------------------------------------------- // GtkButton //-------------------------------------------------------- button := gtk.ButtonWithLabel("Button with label") button.Clicked(func() { println("button clicked:", button.GetLabel()) messagedialog := gtk.MessageDialog( button.GetTopLevelAsWindow(), gtk.GTK_DIALOG_MODAL, gtk.GTK_MESSAGE_INFO, gtk.GTK_BUTTONS_OK, entry.GetText()) messagedialog.Response(func() { println("Dialog OK!") //-------------------------------------------------------- // GtkFileChooserDialog //-------------------------------------------------------- filechooserdialog := gtk.FileChooserDialog( "Choose File...", button.GetTopLevelAsWindow(), gtk.GTK_FILE_CHOOSER_ACTION_OPEN, gtk.GTK_STOCK_OK, int(gtk.GTK_RESPONSE_ACCEPT)) filter := gtk.FileFilter() filter.AddPattern("*.go") filechooserdialog.AddFilter(filter) filechooserdialog.Response(func() { println(filechooserdialog.GetFilename()) filechooserdialog.Destroy() }) filechooserdialog.Run() messagedialog.Destroy() }) messagedialog.Run() }) buttons.Add(button) //-------------------------------------------------------- // GtkFontButton //-------------------------------------------------------- fontbutton := gtk.FontButton() fontbutton.Connect("font-set", func() { println("title:", fontbutton.GetTitle()) println("fontname:", fontbutton.GetFontName()) println("use_size:", fontbutton.GetUseSize()) println("show_size:", fontbutton.GetShowSize()) }) buttons.Add(fontbutton) framebox2.PackStart(buttons, false, false, 0) buttons = gtk.HBox(false, 1) //-------------------------------------------------------- // GtkToggleButton //-------------------------------------------------------- togglebutton := gtk.ToggleButtonWithLabel("ToggleButton with label") togglebutton.Connect("toggled", func() { if togglebutton.GetActive() { togglebutton.SetLabel("ToggleButton ON!") } else { togglebutton.SetLabel("ToggleButton OFF!") } }) buttons.Add(togglebutton) //-------------------------------------------------------- // GtkCheckButton //-------------------------------------------------------- checkbutton := gtk.CheckButtonWithLabel("CheckButton with label") checkbutton.Connect("toggled", func() { if checkbutton.GetActive() { checkbutton.SetLabel("CheckButton CHECKED!") } else { checkbutton.SetLabel("CheckButton UNCHECKED!") } }) buttons.Add(checkbutton) //-------------------------------------------------------- // GtkRadioButton //-------------------------------------------------------- buttonbox := gtk.VBox(false, 1) radiofirst := gtk.RadioButtonWithLabel(nil, "Radio1") buttonbox.Add(radiofirst) buttonbox.Add(gtk.RadioButtonWithLabel(radiofirst.GetGroup(), "Radio2")) buttonbox.Add(gtk.RadioButtonWithLabel(radiofirst.GetGroup(), "Radio3")) buttons.Add(buttonbox) //radiobutton.SetMode(false); radiofirst.SetActive(true) framebox2.PackStart(buttons, false, false, 0) //-------------------------------------------------------- // GtkVSeparator //-------------------------------------------------------- vsep := gtk.VSeparator() framebox2.PackStart(vsep, false, false, 0) //-------------------------------------------------------- // GtkComboBoxEntry //-------------------------------------------------------- combos := gtk.HBox(false, 1) comboboxentry := gtk.ComboBoxEntryNewText() comboboxentry.AppendText("Monkey") comboboxentry.AppendText("Tiger") comboboxentry.AppendText("Elephant") comboboxentry.Connect("changed", func() { println("value:", comboboxentry.GetActiveText()) }) combos.Add(comboboxentry) //-------------------------------------------------------- // GtkComboBox //-------------------------------------------------------- combobox := gtk.ComboBoxNewText() combobox.AppendText("Peach") combobox.AppendText("Banana") combobox.AppendText("Apple") combobox.SetActive(1) combobox.Connect("changed", func() { println("value:", combobox.GetActiveText()) }) combos.Add(combobox) framebox2.PackStart(combos, false, false, 0) //-------------------------------------------------------- // GtkTextView //-------------------------------------------------------- swin := gtk.ScrolledWindow(nil, nil) swin.SetPolicy(gtk.GTK_POLICY_AUTOMATIC, gtk.GTK_POLICY_AUTOMATIC) swin.SetShadowType(gtk.GTK_SHADOW_IN) textview := gtk.TextView() var start, end gtk.GtkTextIter buffer := textview.GetBuffer() buffer.GetStartIter(&start) buffer.Insert(&start, "Hello ") buffer.GetEndIter(&end) buffer.Insert(&end, "World!") tag := buffer.CreateTag("bold", map[string]string{ "background": "#FF0000", "weight": "700"}) buffer.GetStartIter(&start) buffer.GetEndIter(&end) buffer.ApplyTag(tag, &start, &end) swin.Add(textview) framebox2.Add(swin) buffer.Connect("changed", func() { println("changed") }) //-------------------------------------------------------- // GtkMenuItem //-------------------------------------------------------- cascademenu := gtk.MenuItemWithMnemonic("_File") menubar.Append(cascademenu) submenu := gtk.Menu() cascademenu.SetSubmenu(submenu) menuitem = gtk.MenuItemWithMnemonic("E_xit") menuitem.Connect("activate", func() { gtk.MainQuit() }) submenu.Append(menuitem) cascademenu = gtk.MenuItemWithMnemonic("_View") menubar.Append(cascademenu) submenu = gtk.Menu() cascademenu.SetSubmenu(submenu) checkmenuitem := gtk.CheckMenuItemWithMnemonic("_Disable") checkmenuitem.Connect("activate", func() { vpaned.SetSensitive(!checkmenuitem.GetActive()) }) submenu.Append(checkmenuitem) menuitem = gtk.MenuItemWithMnemonic("_Font") menuitem.Connect("activate", func() { fsd := gtk.FontSelectionDialog("Font") fsd.SetFontName(fontbutton.GetFontName()) fsd.Response(func() { println(fsd.GetFontName()) fontbutton.SetFontName(fsd.GetFontName()) fsd.Destroy() }) fsd.SetTransientFor(window) fsd.Run() }) submenu.Append(menuitem) cascademenu = gtk.MenuItemWithMnemonic("_Help") menubar.Append(cascademenu) submenu = gtk.Menu() cascademenu.SetSubmenu(submenu) menuitem = gtk.MenuItemWithMnemonic("_About") menuitem.Connect("activate", func() { dialog := gtk.AboutDialog() dialog.SetName("Go-Gtk Demo!") dialog.SetProgramName("demo") dialog.SetAuthors([]string{ "Yasuhiro Matsumoto <*****@*****.**>", "David Roundy <*****@*****.**>", "Mark Andrew Gerads", "Tobias Kortkamp", "Mikhail Trushnikov", "Federico Sogaro <*****@*****.**>"}) dir, _ := path.Split(os.Args[0]) imagefile := path.Join(dir, "../../data/mattn-logo.png") pixbuf, _ := gdkpixbuf.PixbufFromFile(imagefile) dialog.SetLogo(pixbuf) dialog.SetLicense("The library is available under the same terms and conditions as the Go, the BSD style license, and the LGPL (Lesser GNU Public License). The idea is that if you can use Go (and Gtk) in a project, you should also be able to use go-gtk.") dialog.SetWrapLicense(true) dialog.Run() dialog.Destroy() }) submenu.Append(menuitem) //-------------------------------------------------------- // GtkStatusbar //-------------------------------------------------------- statusbar := gtk.Statusbar() context_id := statusbar.GetContextId("go-gtk") statusbar.Push(context_id, "GTK binding for Go!") framebox2.PackStart(statusbar, false, false, 0) //-------------------------------------------------------- // Event //-------------------------------------------------------- window.Add(vbox) window.SetSizeRequest(600, 600) window.ShowAll() gtk.Main() }
func fnr_dialog() { var fnr_cnt int = 0 var scope_be, scope_en gtk.GtkTextIter if MAX_SEL_LEN < len(source_selection()) { source_buf.GetSelectionBounds(&scope_be, &scope_en) } else { source_buf.GetStartIter(&scope_be) source_buf.GetEndIter(&scope_en) } source_buf.CreateMark("fnr_be", &scope_be, true) source_buf.CreateMark("fnr_en", &scope_en, false) var map_filled bool = false var global_map map[string]int var insert_set bool = false dialog := gtk.Dialog() dialog.SetTitle("Find and Replace") dialog.AddButton("_Find Next", int(gtk.GTK_RESPONSE_OK)) dialog.AddButton("_Replace", int(gtk.GTK_RESPONSE_YES)) dialog.AddButton("Replace _All", int(gtk.GTK_RESPONSE_APPLY)) dialog.AddButton("_Close", int(gtk.GTK_RESPONSE_CLOSE)) dialog.AddAccelGroup(accel_group) entry := find_entry_with_history() replacement := find_entry_with_history() global_button := gtk.CheckButtonWithLabel("Global") global_button.SetVisible(true) global_button.SetActive(prev_global) vbox := dialog.GetVBox() vbox.Add(entry) vbox.Add(replacement) vbox.Add(global_button) find_next_button := dialog.GetWidgetForResponse(int(gtk.GTK_RESPONSE_OK)) replace_button := dialog.GetWidgetForResponse(int(gtk.GTK_RESPONSE_YES)) replace_all_button := dialog.GetWidgetForResponse(int(gtk.GTK_RESPONSE_APPLY)) close_button := dialog.GetWidgetForResponse(int(gtk.GTK_RESPONSE_CLOSE)) find_next_button.Connect("clicked", func() { fnr_pre_cb(global_button, &insert_set) if !fnr_find_next(entry.GetActiveText(), prev_global, &map_filled, &global_map) { fnr_close_and_report(dialog, fnr_cnt) } }, nil) find_next_button.AddAccelerator("clicked", accel_group, gdk.GDK_KEY_Return, 0, gtk.GTK_ACCEL_VISIBLE) replace_button.Connect("clicked", func() { fnr_pre_cb(global_button, &insert_set) done, next_found := fnr_replace(entry.GetActiveText(), replacement.GetActiveText(), prev_global, &map_filled, &global_map) fnr_cnt += done if !next_found { fnr_close_and_report(dialog, fnr_cnt) } }, nil) replace_all_button.Connect("clicked", func() { insert_set = false fnr_pre_cb(global_button, &insert_set) fnr_cnt += fnr_replace_all_local(entry.GetActiveText(), replacement.GetActiveText()) if prev_global { fnr_cnt += fnr_replace_all_global(entry.GetActiveText(), replacement.GetActiveText()) file_tree_store() } fnr_close_and_report(dialog, fnr_cnt) }, nil) close_button.Connect("clicked", func() { dialog.Destroy() }, nil) dialog.Run() }