この章では、アプリケーションのメニュー、ステータスバー、ツールバーを説明します。
package main
import "github.com/dontpanic92/wxGo/wx"
func main() {
app := wx.NewApp()
frame := wx.NewFrame(wx.NullWindow, -1, "Quit Menu")
menuBar := wx.NewMenuBar()
fileMenu:= wx.NewMenu()
fileMenu. Append(wx.ID_EXIT)
/*
wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
frame.Close()
}, wx.ID_EXIT)
*/
menuBar . Append(fileMenu, "&File")
frame . SetMenuBar(menuBar)
frame . Show()
app . MainLoop()
}
ターミナルで、quitmenu.go を保存したディレクトリに移動して、次のコードを実行してください。
go run quitmenu.go
実行結果が表示されるまで、少し時間がかかります。
quitmenuitem メニューから、Quit Wxgo メニューアイテムを選択すると、アプリケーションが終了します。キーボードで、⌘Q(command + Q)を押しても、アプリケーションを終了できます。
package main
import "github.com/dontpanic92/wxGo/wx"
func NewMyFrame(title string) wx.Frame {
frame := wx.NewFrame(wx.NullWindow, -1, title)
menuBar := wx.NewMenuBar()
fileMenu:= wx.NewMenu()
fileMenu. Append(wx.ID_EXIT)
/*
wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
frame.Close()
}, wx.ID_EXIT)
*/
menuBar . Append(fileMenu, "&File")
frame . SetMenuBar(menuBar)
return frame
}
func main() {
app := wx.NewApp()
frame := NewMyFrame("Quit Menu")
frame . Show()
app . MainLoop()
}
import "github.com/dontpanic92/wxGo/wx"
type MyFrame struct {
wx.Frame
menuBar wx.MenuBar
}
func NewMyFrame(title string) *MyFrame {
self := &MyFrame{}
self.Frame = wx.NewFrame(wx.NullWindow, -1, title)
self.menuBar = wx.NewMenuBar()
fileMenu := wx.NewMenu()
fileMenu . Append(wx.ID_EXIT)
/*
wx.Bind(self, wx.EVT_MENU, func(e wx.Event) {
self.Close()
}, wx.ID_EXIT)
*/
self.menuBar . Append(fileMenu, "&File")
self . SetMenuBar(self.menuBar)
return self
}
func main() {
app := wx.NewApp()
frame := NewMyFrame("Quit Menu")
frame . Show()
app . MainLoop()
}
package main
import "github.com/dontpanic92/wxGo/wx"
func main() {
app := wx.NewApp()
frame := wx.NewFrame(wx.NullWindow, -1, "Sub Menu")
hBox := wx.NewBoxSizer(wx.HORIZONTAL)
vBox := wx.NewBoxSizer(wx.VERTICAL)
label := wx.NewStaticText(frame, -1, "未選択")
hBox . Add(label, 1, wx.ALIGN_CENTER)
vBox . Add(hBox, 1, wx.LEFT, 10)
frame . SetSizer(vBox)
menuBar := wx.NewMenuBar()
fileMenu:= wx.NewMenu()
subMenu := wx.NewMenu()
fileMenu. Append(wx.ID_NEW)
fileMenu. Append(wx.ID_OPEN)
fileMenu. Append(wx.ID_SAVE)
fileMenu. AppendSeparator()
fileMenu. AppendSubMenu(subMenu, "Import")
fileMenu. AppendSeparator()
fileMenu. Append(wx.ID_EXIT)
subMenu . Append(101, "Import newsfeed list...")
subMenu . Append(102, "Import bookmarks...")
subMenu . Append(103, "Import mail...")
wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
if e.GetId() == wx.ID_EXIT {
frame.Close()
} else {
label.SetLabel(menuBar.GetLabel(e.GetId()))
}
}, menuBar.GetId())
menuBar . Append(fileMenu, "&File")
frame . SetMenuBar(menuBar)
frame . Show()
app . MainLoop()
}
ターミナルで、submenu.go を保存したディレクトリに移動して、次のコードで実行してください。
go run submenu.go
実行結果が表示されるまで、少し時間がかかります。
package main
import "github.com/dontpanic92/wxGo/wx"
func main() {
app := wx.NewApp()
frame := wx.NewFrame(wx.NullWindow, -1, "Predefined Menu")
menuBar := wx.NewMenuBar()
fileMenu:= wx.NewMenu()
editMenu:= wx.NewMenu()
helpMenu:= wx.NewMenu()
fileMenu. Append(wx.ID_ABOUT)
fileMenu. AppendSeparator()
fileMenu. Append(wx.ID_NEW)
fileMenu. Append(wx.ID_OPEN)
fileMenu. Append(wx.ID_SAVE)
fileMenu. AppendSeparator()
fileMenu. Append(wx.ID_SAVEAS)
fileMenu. Append(wx.ID_CLOSE)
fileMenu. AppendSeparator()
fileMenu. Append(wx.ID_EXIT)
editMenu. Append(wx.ID_UNDO)
editMenu. Append(wx.ID_REDO)
editMenu. AppendSeparator()
editMenu. Append(wx.ID_COPY)
editMenu. Append(wx.ID_CUT)
editMenu. Append(wx.ID_PASTE)
editMenu. Append(wx.ID_DELETE)
helpMenu. Append(wx.ID_HELP)
menuBar . Append(fileMenu, "&File")
menuBar . Append(editMenu, "&Edit")
menuBar . Append(helpMenu, "&Help")
frame . SetMenuBar(menuBar)
frame . Show()
app . MainLoop()
}
ターミナルで、predefinedmenu.go を保存したディレクトリに移動して、次のコードで実行してください。
go run predefinedmenu.go
実行結果が表示されるまで、少し時間がかかります。
package main
import "github.com/dontpanic92/wxGo/wx"
func main() {
app := wx.NewApp()
frame := wx.NewFrame(wx.NullWindow, -1, "Sub Menu")
hBox := wx.NewBoxSizer(wx.HORIZONTAL)
vBox := wx.NewBoxSizer(wx.VERTICAL)
label := wx.NewStaticText(frame, -1, "未選択")
hBox . Add(label, 1, wx.ALIGN_CENTER)
vBox . Add(hBox, 1, wx.LEFT, 10)
frame . SetSizer(vBox)
menuBar := wx.NewMenuBar()
fileMenu:= wx.NewMenu()
fileMenu. Append(wx.ID_NEW)
fileMenu. Append(wx.ID_OPEN)
fileMenu. Append(wx.ID_SAVE)
fileMenu. AppendCheckItem(100, "チェックメニュー")
fileMenu. AppendSeparator()
fileMenu. Append(wx.ID_EXIT)
wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
if e.GetId() == wx.ID_EXIT {
frame.Close()
} else if e.GetId() == 100 {
if menuBar.IsChecked(100) {
label.SetLabel("チェックされました")
} else {
label.SetLabel("未選択")
}
} else {
label.SetLabel(menuBar.GetLabel(e.GetId()))
}
}, menuBar.GetId())
menuBar . Append(fileMenu, "&File")
frame . SetMenuBar(menuBar)
frame . Show()
app . MainLoop()
}
ターミナルで、checkmenu.go を保存したディレクトリに移動して、次のコードで実行してください。
go run checkmenu.go
実行結果が表示されるまで、少し時間がかかります。
package main
import "github.com/dontpanic92/wxGo/wx"
func main() {
app := wx.NewApp()
frame := wx.NewFrame(wx.NullWindow, -1, "Popup Menu")
menu := wx.NewMenu()
menu . Append(101, "Minimize")
menu . Append(wx.ID_EXIT)
wx.Bind(frame, wx.EVT_RIGHT_DOWN, func(e wx.Event) {
frame.PopupMenu(menu)
}, frame.GetId())
wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
frame.Iconize()
}, 101)
wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
frame.Close()
}, wx.ID_EXIT)
frame . Show()
app . MainLoop()
}
ターミナルで、popupmenu.go を保存したディレクトリに移動して、次のコードで実行してください。
go run popupmenu.go
package main
import "github.com/dontpanic92/wxGo/wx"
func main() {
app := wx.NewApp()
frame := wx.NewFrame(wx.NullWindow, -1, "Status Bar")
menuBar := wx.NewMenuBar()
fileMenu:= wx.NewMenu()
fileMenu. Append(wx.ID_NEW)
fileMenu. Append(wx.ID_OPEN)
fileMenu. Append(wx.ID_SAVE)
fileMenu. AppendSeparator()
fileMenu. Append(wx.ID_EXIT)
menuBar . Append(fileMenu, "&File")
frame . SetMenuBar(menuBar)
ok := wx.NewButton(frame, 101, "OK")
cancel := wx.NewButton(frame, 102, "Cancel")
hBox := wx.NewBoxSizer(wx.HORIZONTAL)
hBox . Add(ok, 1, wx.TOP|wx.RIGHT|wx.LEFT, 5)
hBox . Add(cancel, 1, wx.TOP|wx.RIGHT, 5)
frame . SetSizer(hBox)
status := wx.NewStatusBar(frame, -1)
status . SetStatusText("Hello wxGo")
frame . SetStatusBar(status)
/*
frame . CreateStatusBar()
frame . SetStatusText("Hello wxGo")
*/
wx.Bind(frame, wx.EVT_BUTTON, func(e wx.Event) {
status.SetStatusText("You clicked OK.")
}, 101)
wx.Bind(frame, wx.EVT_BUTTON, func(e wx.Event) {
status.SetStatusText("You clicked Cancel.")
}, 102)
frame . Show()
app . MainLoop()
}
package main
import (
"github.com/dontpanic92/wxGo/wx"
"strconv"
)
func main() {
app := wx.NewApp()
frame := wx.NewFrame(wx.NullWindow, -1, "Tool Bar")
label := wx.NewStaticText(frame, -1, "5")
label . SetFont(label.GetFont().Larger())
hBox := wx.NewBoxSizer(wx.HORIZONTAL)
vBox := wx.NewBoxSizer(wx.VERTICAL)
hBox . Add(label, 1, wx.ALIGN_CENTER)
vBox . Add(hBox, 1, wx.ALIGN_CENTER)
frame . SetSizer(vBox)
toolBar := wx.NewToolBar(frame, -1)
frame . SetToolBar(toolBar)
toolBar . AddTool(wx.ID_UNDO, "Undo", wx.ArtProviderGetBitmap(wx.ART_UNDO))
toolBar . AddTool(wx.ID_REDO, "Redo", wx.ArtProviderGetBitmap(wx.ART_REDO))
toolBar . AddSeparator()
toolBar . AddTool(wx.ID_EXIT, "Quit", wx.ArtProviderGetBitmap(wx.ART_QUIT))
toolBar . Realize()
/* Another ToolBar definition
toolBar := frame.CreateToolBar(wx.TB_HORIZONTAL, -1)
toolBar .AddTool(wx.ID_UNDO, "Back", wx.ArtProviderGetBitmap(wx.ART_UNDO), wx.NullBitmap, wx.ITEM_NORMAL, "Back", "Go Back")
*/
toolBar . EnableTool(wx.ID_REDO, false)
wx.Bind(frame, wx.EVT_TOOL, func(e wx.Event) {
n, _ := strconv.Atoi(label.GetLabel())
n--
switch n {
case 0:
toolBar.EnableTool(wx.ID_UNDO, false)
case 4:
toolBar.EnableTool(wx.ID_REDO, true)
}
label.SetLabel(strconv.Itoa(n))
}, wx.ID_UNDO)
wx.Bind(frame, wx.EVT_TOOL, func(e wx.Event) {
n, _ := strconv.Atoi(label.GetLabel())
n++
switch n {
case 1:
toolBar.EnableTool(wx.ID_UNDO, true)
case 5:
toolBar.EnableTool(wx.ID_REDO, false)
}
label.SetLabel(strconv.Itoa(n))
}, wx.ID_REDO)
wx.Bind(frame, wx.EVT_TOOL, func(e wx.Event) {
frame.Close()
}, wx.ID_EXIT)
frame . Show()
app . MainLoop()
}