func main() { app := walk.App() // These specify the app data sub directory for the settings file. app.SetOrganizationName("The Walk Authors") app.SetProductName("Walk Settings Example") // Settings file name. settings := walk.NewIniFileSettings("settings.ini") // All settings marked as expiring will expire after this duration w/o use. // This applies to all widgets settings. settings.SetExpireDuration(time.Hour * 24 * 30 * 3) if err := settings.Load(); err != nil { log.Fatal(err) } app.SetSettings(settings) if err := RunMainWindow(); err != nil { log.Fatal(err) } if err := settings.Save(); err != nil { log.Fatal(err) } }
func main() { walk.Initialize(walk.InitParams{PanicOnError: true}) defer walk.Shutdown() mainWnd, _ := walk.NewMainWindow() mw := &MainWindow{MainWindow: mainWnd} mw.SetLayout(walk.NewVBoxLayout()) mw.SetTitle("Walk Image Viewer Example") mw.tabWidget, _ = walk.NewTabWidget(mw) imageList, _ := walk.NewImageList(walk.Size{16, 16}, 0) mw.ToolBar().SetImageList(imageList) fileMenu, _ := walk.NewMenu() fileMenuAction, _ := mw.Menu().Actions().AddMenu(fileMenu) fileMenuAction.SetText("&File") openBmp, _ := walk.NewBitmapFromFile("../img/open.png") openAction := walk.NewAction() openAction.SetImage(openBmp) openAction.SetText("&Open") openAction.Triggered().Attach(func() { mw.openImage() }) fileMenu.Actions().Add(openAction) mw.ToolBar().Actions().Add(openAction) exitAction := walk.NewAction() exitAction.SetText("E&xit") exitAction.Triggered().Attach(func() { walk.App().Exit(0) }) fileMenu.Actions().Add(exitAction) helpMenu, _ := walk.NewMenu() helpMenuAction, _ := mw.Menu().Actions().AddMenu(helpMenu) helpMenuAction.SetText("&Help") aboutAction := walk.NewAction() aboutAction.SetText("&About") aboutAction.Triggered().Attach(func() { walk.MsgBox(mw, "About", "Walk Image Viewer Example", walk.MsgBoxOK|walk.MsgBoxIconInformation) }) helpMenu.Actions().Add(aboutAction) mw.SetMinMaxSize(walk.Size{320, 240}, walk.Size{}) mw.SetSize(walk.Size{800, 600}) mw.Show() mw.Run() }
func newNotify() { var err error context.notifyIcon, err = walk.NewNotifyIcon() if err != nil { common.Error("Error invoking NewNotifyIcon: %v", err) } icon, _ := walk.NewIconFromFile("res/lily.ico") if err := context.notifyIcon.SetIcon(icon); err != nil { common.Error("Error setting notify icon: %v", err) } if err := context.notifyIcon.SetToolTip("Click for info or use the context menu to exit."); err != nil { common.Error("Fail to set tooltip: %v", err) } f := func() { if !context.mw.Visible() { context.mw.Show() } else { context.mw.SwitchToThisWindow() } } go core.Triggered(f) context.notifyIcon.MouseUp().Attach(func(x, y int, button walk.MouseButton) { if button == walk.LeftButton { f() } // if err := context.notifyIcon.ShowCustom( // "Walk NotifyIcon Example", // "There are multiple ShowX methods sporting different icons."); err != nil { // common.Error("Fail to show custom notify: %v", err) // } }) exitAction := walk.NewAction() if err := exitAction.SetText("退出"); err != nil { common.Error("Error setting exitAction text: %v", err) } exitAction.Triggered().Attach(func() { context.notifyIcon.Dispose() // os.Exit(-1) walk.App().Exit(0) }) if err := context.notifyIcon.ContextMenu().Actions().Add(exitAction); err != nil { common.Error("Error Adding exitAction: %v", err) } if err := context.notifyIcon.SetVisible(true); err != nil { common.Error("Error setting notify visible: %v", err) } // if err := context.notifyIcon.ShowInfo("Walk NotifyIcon Example", "Click the icon to show again."); err != nil { // common.Error("Error showing info: %v", err) // } }
func (mw *MyWindows) exitAction() error { exitAction := walk.NewAction() if err := exitAction.SetText("退出VIP"); err != nil { return err } exitAction.Triggered().Attach(func() { mw.ni.Dispose() walk.App().Exit(0) }) if err := mw.ni.ContextMenu().Actions().Add(exitAction); err != nil { return err } return nil }
func main() { // Initialize walk and specify that we want errors to be panics. walk.Initialize(walk.InitParams{PanicOnError: true}) defer walk.Shutdown() // We need either a walk.MainWindow or a walk.Dialog for their message loop. // We will not make it visible in this example, though. mw, _ := walk.NewMainWindow() // We load our icon from a file. icon, _ := walk.NewIconFromFile("../img/x.ico") // Create the notify icon and make sure we clean it up on exit. ni, _ := walk.NewNotifyIcon() defer ni.Dispose() // Set the icon and a tool tip text. ni.SetIcon(icon) ni.SetToolTip("Click for info or use the context menu to exit.") // When the left mouse button is pressed, bring up our balloon. ni.MouseDown().Attach(func(x, y int, button walk.MouseButton) { if button != walk.LeftButton { return } ni.ShowCustom( "Walk NotifyIcon Example", "There are multiple ShowX methods sporting different icons.") }) // We put an exit action into the context menu. exitAction := walk.NewAction() exitAction.SetText("E&xit") exitAction.Triggered().Attach(func() { walk.App().Exit(0) }) ni.ContextMenu().Actions().Add(exitAction) // The notify icon is hidden initially, so we have to make it visible. ni.SetVisible(true) // Now that the icon is visible, we can bring up an info balloon. ni.ShowInfo("Walk NotifyIcon Example", "Click the icon to show again.") // Run the message loop. mw.Run() }
func (mw *MyDialog) AddMyNotifyAction() (err error) { // We put an exit action into the context menu. exitAction := walk.NewAction() err = exitAction.SetText("退出程序") mw.checkError(err) exitAction.Triggered().Attach(func() { mw.Dispose() // 释放主程序 mw.ni.Dispose() // 右下角图标退出 walk.App().Exit(1) }) // 增加快捷键 exitAction.SetShortcut(walk.Shortcut{walk.ModShift, walk.KeyB}) // 提示信息 exitAction.SetToolTip("退出程序.") err = mw.ni.ContextMenu().Actions().Add(exitAction) mw.checkError(err) return nil }
func OnWndMenuSelect(nID int, pBool bool) int { switch nID { case 1011: ni.ShowInfo("提示信息", "炫彩菜单101-1") xcgui.MessageBox(xcgui.XWnd_GetHWND(hWindow), "提示信息", "炫彩菜单101-1", xcgui.MB_ICONINFORMATION) case 1012: ni.ShowWarning("警告信息", "炫彩菜单101-2") xcgui.MessageBox(xcgui.XWnd_GetHWND(hWindow), "警告信息", "炫彩菜单101-2", xcgui.MB_ICONWARNING) case 102: ni.ShowError("错误信息", "炫彩菜单102") xcgui.MessageBox(xcgui.XWnd_GetHWND(hWindow), "错误信息", "炫彩菜单102", xcgui.MB_ICONERROR) case 106: ni.ShowMessage("退出程序", "正在退出程序...") ni.Dispose() walk.App().Exit(0) xcgui.XExitXCGUI() default: ni.ShowMessage("其他信息", "您选择的菜单:"+fmt.Sprint(nID)) xcgui.MessageBox(xcgui.XWnd_GetHWND(hWindow), "其他信息", "您选择了其他菜单.", xcgui.MB_USERICON) } return 0 }
func (mw *MainWindow) initPoseInfo() { if modelItem == nil { return } model := modelItem.img if model == nil { return } // Get the pose count poseCnt := 1 x := model.Bounds().Min.X y := model.Bounds().Min.Y w := model.Bounds().Dx() h := model.Bounds().Dy() for i := 2; i < POSE_CNT_MAX; i++ { sh := h / i for j := 1; j < i; j++ { beginY := sh * j // Erase the boundary by 1 pix to handel the neighbor pix for z := 1; z < w-1; z++ { _, _, _, a := model.At(x+z, y+beginY).RGBA() if a != 0 { _, _, _, la := model.At(x+z-1, y+beginY).RGBA() _, _, _, ra := model.At(x+z+1, y+beginY).RGBA() _, _, _, ta := model.At(x+z, y+beginY-1).RGBA() _, _, _, da := model.At(x+z, y+beginY+1).RGBA() if la != 0 && ra != 0 && ta != 0 && da != 0 { fmt.Println("Pose alpha:", x+z, y+beginY, a) goto nextPose } } } } poseCnt = i break nextPose: } fmt.Println("Pose count: ", poseCnt) // Init the pose list imageW = w / int(mw.uiFrameCnt.Value()) imageH = h / poseCnt mw.resetImageList() boundary = image.Rect(0, 0, imageW, imageH) tmpBound := boundary // Read all png images for i := 0; i < poseCnt; i++ { for j := 0; j < int(mw.uiFrameCnt.Value()); j++ { deltaX := imageW * j deltaY := imageH * i tmpBound = boundary.Add(image.Point{deltaX, deltaY}) newImg := new(ImageItem) newImg.fname = "" newImg.img = modelItem.img.SubImage(tmpBound).(ImageExt) newImg.bm, _ = walk.NewBitmapFromImage(newImg.img) imgList = append(imgList, newImg) } } } /* func (mw *MainWindow) onUiSetFrameCnt() { if modelItem == nil { return } // imageW = modelItem.img.Bounds().Dx() // imageH = modelItem.img.Bounds().Dy() // poseCnt := mw.getPoseCnt() playPose = int(mw.uiPlayPose.Value()) mw.setImageSize() }*/ func (mw *MainWindow) refreshToolBar(mode int) { mw.uiConvirm.SetEnabled(false) mw.uiComposeAction.SetEnabled(false) mw.uiPoseCnt.SetEnabled(false) mw.mode = mode mw.uiFrameCnt.SetEnabled(false) if mw.mode == MODE_INVALID { return } if mw.mode == MODE_PLAY { return } if mw.mode == MODE_COMPOSE { mw.uiFrameCnt.SetEnabled(true) mw.uiComposeAction.SetEnabled(true) } } func (mw *MainWindow) getPoseInfo() (int, int) { totalFrame := len(imgList) poseCnt := mw.getPoseCnt() if poseCnt >= totalFrame { return 1, totalFrame } if totalFrame%poseCnt != 0 { return 1, totalFrame } return poseCnt, totalFrame / poseCnt } func (mw *MainWindow) composeImg(fullname string) { poseCnt, frame := mw.getPoseInfo() if frame == 0 { return } sw := boundary.Dx() sh := boundary.Dy() + yBoundAdd //var rgba bool _newBound := image.Rect(0, 0, sw*frame, sh*poseCnt) // No need to check the source image type. var result draw.Image firstImg := imgList[0].img switch firstImg.(type) { case *image.RGBA: result = image.NewRGBA(_newBound) case *image.RGBA64: result = image.NewRGBA64(_newBound) case *image.NRGBA: result = image.NewNRGBA(_newBound) case *image.NRGBA64: result = image.NewNRGBA64(_newBound) default: fmt.Println("image type: ", reflect.TypeOf(firstImg)) println("Unsupported image type") return } // Compress to RGBA32, Stride // result := image.NewRGBA(_newBound) // result.Stride = result.Bounds().Dx() singleBound := image.Rect(0, 0, sw, sh) for i, _img := range imgList { _subImg := _img.img.SubImage(boundary) col := i % frame row := i / frame drawBound := singleBound.Add(image.Point{sw * col, sh * row}) draw.Draw(result, drawBound, _subImg, _subImg.Bounds().Min, draw.Src) } // Modify stride // fmt.Println("Stride ", result.Stride) f, err := os.OpenFile(fullname, os.O_RDWR|os.O_CREATE, os.ModePerm) if err != nil { panic(err) return } defer f.Close() f.Truncate(0) // buf := bufio.NewWriterSize(f, 1024 * 1000) buf := bufio.NewWriter(f) png.Encode(buf, result) } func setIcon(ui *walk.Action, fname string) { fpath := "./img/" + fname _, err := os.Stat(fpath) if err != nil { fmt.Println(err) return } img, _ := walk.NewBitmapFromFile(fpath) ui.SetImage(img) } func (mw *MainWindow) initMenu() { fileMenu, _ := walk.NewMenu() fileMenuAction, _ := mw.Menu().Actions().AddMenu(fileMenu) fileMenuAction.SetText("&File") imageList, _ := walk.NewImageList(walk.Size{TB_H, TB_H}, 0) mw.ToolBar().SetImageList(imageList) openAction := walk.NewAction() setIcon(openAction, "open.png") openAction.SetText("&Open") openAction.Triggered().Attach(func() { go mw.openImage(MODE_COMPOSE) }) fileMenu.Actions().Add(openAction) mw.ToolBar().Actions().Add(openAction) /// // Load loadAction := walk.NewAction() setIcon(loadAction, "load.png") loadAction.SetText("&Load") loadAction.Triggered().Attach(func() { mw.openImage(MODE_PLAY) }) fileMenu.Actions().Add(loadAction) mw.ToolBar().Actions().Add(loadAction) helpMenu, _ := walk.NewMenu() helpMenuAction, _ := mw.Menu().Actions().AddMenu(helpMenu) helpMenuAction.SetText("&Help") aboutAction := walk.NewAction() helpMenu.Actions().Add(aboutAction) aboutAction.SetText("&About") aboutAction.Triggered().Attach(func() { walk.MsgBox(mw, "About", "Image composer V0.1\nAuthor:heml", walk.MsgBoxOK|walk.MsgBoxIconInformation) }) // Image operations // Save mw.uiComposeAction = walk.NewAction() setIcon(mw.uiComposeAction, "save.png") mw.uiComposeAction.SetText("&Save") mw.uiComposeAction.Triggered().Attach(func() { mw.saveImage() }) fileMenu.Actions().Add(mw.uiComposeAction) mw.ToolBar().Actions().Add(mw.uiComposeAction) // Exit exitAction := walk.NewAction() exitAction.SetText("E&xit") exitAction.Triggered().Attach(func() { walk.App().Exit(0) }) fileMenu.Actions().Add(exitAction) } func (mw *MainWindow) initCanvas() { for i := 0; i < POSE_CNT_MAX; i++ { iv, _ := selfWidget.NewMyImageView(mw) mw.imageView[i] = iv } } func (mw *MainWindow) initOtherBars() { sp, _ := walk.NewSplitter(mw) sp.SetSize(walk.Size{400, 20}) lab, _ := walk.NewLabel(sp) lab.SetSize(walk.Size{16, 30}) // lab.SetText("Pose") // others mw.uiFrameCnt, _ = walk.NewNumberEdit(sp) //mw.uiFrameCnt.SetSize(walk.Size{42, TB_H}) mw.uiFrameCnt.SetRange(1, 100) mw.uiFrameCnt.SetDecimals(0) mw.uiFrameCnt.SetValue(8) mw.uiFrameCnt.SetEnabled(false) mw.uiFrameCnt.SetToolTipText(ttPlayPose) mw.uiPoseCnt, _ = walk.NewNumberEdit(sp) //mw.uiPoseCnt.SetSize(walk.Size{42, TB_H}) mw.uiPoseCnt.SetRange(1, 100) mw.uiPoseCnt.SetValue(1) mw.uiPoseCnt.SetDecimals(0) mw.uiPoseCnt.SetToolTipText(ttPosCnt) mw.uiAddBoundY, _ = walk.NewNumberEdit(sp) mw.uiAddBoundY.SetRange(1, 1000) mw.uiAddBoundY.SetValue(0) mw.uiAddBoundY.SetDecimals(0) mw.uiAddBoundY.ValueChanged().Attach(func() { yBoundAdd = int(mw.uiAddBoundY.Value()) if yBoundAdd < -imageH { yBoundAdd = -imageH } if yBoundAdd > (imageH - boundary.Max.Y) { yBoundAdd = imageH - boundary.Max.Y } mw.uiAddBoundY.SetValue(float64(yBoundAdd)) mw.setImageSize() }) mw.uiConvirm, _ = walk.NewPushButton(sp) mw.uiConvirm.SetText("OK") mw.uiConvirm.Clicked().Attach(func() { // Get some fresh data. // mw.onUiSetFrameCnt() }) walk.InitWidget(sp, mw, FREEZEIZE_CLASS, winapi.CCS_NORESIZE, winapi.WS_EX_TOOLWINDOW|winapi.WS_EX_WINDOWEDGE) } func newMainWindow() { walk.SetPanicOnError(true) mainWnd, _ := walk.NewMainWindow() mw := &MainWindow{MainWindow: mainWnd} mw.viewGrid = walk.NewGridLayout() mw.SetLayout(mw.viewGrid) mw.viewGrid.SetRowStretchFactor(GRID_CNT, 2) mw.viewGrid.SetColumnStretchFactor(GRID_CNT, 2) mw.viewGrid.SetMargins(walk.Margins{6, 28, 2, 6}) mw.SetTitle("Image composer") mw.initMenu() mw.initOtherBars() mw.initCanvas() mw.SetMinMaxSize(walk.Size{800, 600}, walk.Size{}) mw.SetSize(walk.Size{800, 600}) mw.refreshToolBar(MODE_INVALID) mw.Show() mw.Run() } func init() { walk.MustRegisterWindowClass(FREEZEIZE_CLASS) runtime.GOMAXPROCS(2) screenW = int(winapi.GetSystemMetrics(winapi.SM_CXSCREEN)) screenH = int(winapi.GetSystemMetrics(winapi.SM_CYSCREEN)) } func main() { newMainWindow() }
func runNotify() { // We need either a walk.MainWindow or a walk.Dialog for their message loop. // We will not make it visible in this example, though. mw, err := walk.NewMainWindow() if err != nil { log.Fatal(err) } // We load our icon from a file. iconPlay, err = walk.NewIconFromFile("play.ico") if err != nil { log.Fatal(err) } // We load our icon from a file. iconStop, err = walk.NewIconFromFile("stop.ico") if err != nil { log.Fatal(err) } // Create the notify icon and make sure we clean it up on exit. notifyIcon, err = walk.NewNotifyIcon() if err != nil { log.Fatal(err) } defer notifyIcon.Dispose() if err := notifyIcon.SetToolTip("Direct Print Server"); err != nil { log.Fatal(err) } // We put an exit action into the context menu. startAction = walk.NewAction() startAction.Triggered().Attach(func() { if stoped { start() } else { stop() } }) if err := notifyIcon.ContextMenu().Actions().Add(startAction); err != nil { log.Fatal(err) } // We put an exit action into the context menu. exitAction := walk.NewAction() if err := exitAction.SetText("E&xit"); err != nil { log.Fatal(err) } exitAction.Triggered().Attach(func() { //stop() walk.App().Exit(0) }) if err := notifyIcon.ContextMenu().Actions().Add(exitAction); err != nil { log.Fatal(err) } // The notify icon is hidden initially, so we have to make it visible. if err := notifyIcon.SetVisible(true); err != nil { log.Fatal(err) } start() // Run the message loop. mw.Run() }
func InterfaceStart(server ZakupkiProxyServer, config ServerConfig) (err error) { if server == nil { panic("InterfaceStart: passed nil server") } if config == nil { panic("InterfaceStart: passed nil config") } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * INITIALIZATION * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ startServer := func() { if !server.IsRunning() { go func() { // start server if err := server.Start(); err != nil { log.Println("Cannot start server:", err) } }() time.Sleep(_START_SERVER_TIMEOUT) } } stopServer := func() { if server.IsRunning() { // shutdown server if err = server.ShutDown(); err != nil { log.Println("Cannot shutdown server", err) } } } if _RUN_SERVER_ON_STARTING && !server.IsRunning() { startServer() } defer func() { if server.IsRunning() { stopServer() } }() defer func() { if err = config.Save(); err != nil { log.Println("Cannot save configures:", err) } }() /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END INITIALIZATION * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ mw, err := walk.NewMainWindow() if err != nil { return } defer mw.Dispose() ni, err := walk.NewNotifyIcon() if err != nil { return } defer ni.Dispose() if err = ni.SetVisible(true); err != nil { return } if err = ni.SetToolTip(_PROG_TITLE); err != nil { return } ni.ShowMessage(_PROG_TITLE, _NOTICE_APP_START) // create image icon if icon, err := walk.NewIconFromFile(_PROG_ICON_FILE_NAME); err != nil { log.Println("Cannot load icon from file:", err) } else { defer icon.Dispose() if err = ni.SetIcon(icon); err != nil { log.Println("Cannot bind img with notify icon:", err) } } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ACTIONS * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ startServerAction := walk.NewAction() err = startServerAction.SetText(_ACTION_TITLE_START_SERVER) if err != nil { return } err = startServerAction.SetVisible(!server.IsRunning()) if err != nil { return } err = ni.ContextMenu().Actions().Add(startServerAction) if err != nil { return } stopServerAction := walk.NewAction() err = stopServerAction.SetText(_ACTION_TITLE_STOP_SERVER) if err != nil { return } err = stopServerAction.SetVisible(server.IsRunning()) if err != nil { return } err = ni.ContextMenu().Actions().Add(stopServerAction) if err != nil { return } filterEnableAction := walk.NewAction() err = filterEnableAction.SetText(_ACTION_TITLE_FILTER_ENABLED) if err != nil { return } err = filterEnableAction.SetVisible(!config.IsFilterEnabled()) if err != nil { return } err = ni.ContextMenu().Actions().Add(filterEnableAction) if err != nil { return } filterDisabledAction := walk.NewAction() err = filterDisabledAction.SetText(_ACTION_TITLE_FILTER_DISABLED) if err != nil { return } err = filterDisabledAction.SetVisible(config.IsFilterEnabled()) if err != nil { return } err = ni.ContextMenu().Actions().Add(filterDisabledAction) if err != nil { return } removeCacheAction := walk.NewAction() err = removeCacheAction.SetText(_ACTION_TITLE_REMOVE_CACHE) if err != nil { return } err = ni.ContextMenu().Actions().Add(removeCacheAction) if err != nil { return } err = ni.ContextMenu().Actions().Add(walk.NewSeparatorAction()) if err != nil { return } openURLGenAction := walk.NewAction() err = openURLGenAction.SetText(_ACTION_TITLE_OPEN_URL_GEN) if err != nil { return } err = ni.ContextMenu().Actions().Add(openURLGenAction) if err != nil { return } openDirAction := walk.NewAction() err = openDirAction.SetText(_ACTION_TITLE_OPEN_DIR) if err != nil { return } err = ni.ContextMenu().Actions().Add(openDirAction) if err != nil { return } openReadMeAction := walk.NewAction() err = openReadMeAction.SetText(_ACTION_TITLE_OPEN_README) if err != nil { return } err = ni.ContextMenu().Actions().Add(openReadMeAction) if err != nil { return } err = ni.ContextMenu().Actions().Add(walk.NewSeparatorAction()) if err != nil { return } exitAction := walk.NewAction() err = exitAction.SetText(_ACTION_TITLE_EXIT) if err != nil { return } err = ni.ContextMenu().Actions().Add(exitAction) if err != nil { return } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * EVENT HANDLERS * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ updateServerButtons := func() { if server.IsRunning() { if err = startServerAction.SetVisible(false); err != nil { log.Println(err) } if err = stopServerAction.SetVisible(true); err != nil { log.Println(err) } } else { if err = stopServerAction.SetVisible(false); err != nil { log.Println(err) } if err = startServerAction.SetVisible(true); err != nil { log.Println(err) } } } startServerAction.Triggered().Attach(func() { if !server.IsRunning() { if err = startServerAction.SetEnabled(false); err != nil { log.Println(err) } startServer() if server.IsRunning() { ni.ShowMessage(_PROG_TITLE, _NOTICE_PROXY_ENABLED) } if err = startServerAction.SetEnabled(true); err != nil { log.Println(err) } } updateServerButtons() }) stopServerAction.Triggered().Attach(func() { if server.IsRunning() { stopServer() ni.ShowMessage(_PROG_TITLE, _NOTICE_PROXY_DISABLED) } updateServerButtons() }) updateFilterButtons := func() { if config.IsFilterEnabled() { err = filterEnableAction.SetVisible(false) if err != nil { log.Println(err) } err = filterDisabledAction.SetVisible(true) if err != nil { log.Println(err) } } else { err = filterDisabledAction.SetVisible(false) if err != nil { log.Println(err) } err = filterEnableAction.SetVisible(true) if err != nil { log.Println(err) } } } filterEnableAction.Triggered().Attach(func() { if !config.IsFilterEnabled() { config.SetFilterEnabled(true) ni.ShowInfo(_PROG_TITLE, _NOTICE_ENABLED_FILTERS) } updateFilterButtons() }) filterDisabledAction.Triggered().Attach(func() { if config.IsFilterEnabled() { config.SetFilterEnabled(false) ni.ShowInfo(_PROG_TITLE, _NOTICE_DISABLED_FILTERS) } updateFilterButtons() }) removeCacheAction.Triggered().Attach(func() { if err = server.RemoveCache(); err != nil { log.Println("Cannot remove cache:", err) } else { ni.ShowInfo(_PROG_TITLE, _NOTICE_CACHE_REMOVED) } }) openURLGenAction.Triggered().Attach(func() { err = exec.Command(_PROG_URL_GENER_FILE_NAME).Start() if err != nil { log.Println("Cannot open url generator:", err) } }) openDirAction.Triggered().Attach(func() { err = exec.Command("cmd", "/C", "start", ".").Start() if err != nil { log.Println("Cannot open program directory:", err) } else { ni.ShowInfo(_PROG_TITLE, _NOTICE_CONFIGS) } }) openReadMeAction.Triggered().Attach(func() { err = exec.Command( "cmd", "/C", "start", _PROG_DESCRIPTION_FILE_NAME, ).Start() if err != nil { log.Println("Cannot open README:", err) } }) exitAction.Triggered().Attach(func() { walk.App().Exit(0) }) /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * END EVENT HANDLERS * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ mw.Run() return }
func main() { walk.Initialize(walk.InitParams{}) defer walk.Shutdown() mw := new(MyMainWindow) openImage, err := walk.NewBitmapFromFile("../img/open.png") if err != nil { log.Fatal(err) } var openAction *walk.Action var recentMenu *walk.Menu menuActions, err := CreateActions( Menu{ Text: "&File", Items: []MenuItem{ Action{ AssignTo: &openAction, Text: "&Open", Image: openImage, OnTriggered: func() { mw.openAction_Triggered() }, }, Menu{ AssignTo: &recentMenu, Text: "Recent", }, Action{}, Action{ Text: "E&xit", OnTriggered: func() { walk.App().Exit(0) }, }, }, }) if err != nil { log.Fatal(err) } openRecent1Action := walk.NewAction() openRecent1Action.SetText("Blah") recentMenu.Actions().Add(openRecent1Action) openRecent2Action := walk.NewAction() openRecent2Action.SetText("Yadda") recentMenu.Actions().Add(openRecent2Action) openRecent3Action := walk.NewAction() openRecent3Action.SetText("Oink") recentMenu.Actions().Add(openRecent3Action) toolBarActions, err := CreateActions( ActionRef{openAction}, Action{Text: "Show Dialog", OnTriggered: func() { mw.showDialogAction_Triggered() }}) if err != nil { log.Fatal(err) } if err := (MainWindow{ AssignTo: &mw.MainWindow, Title: "FTPS cycle finder", MenuActions: menuActions, ToolBarActions: toolBarActions, MinSize: Size{600, 400}, Size: Size{800, 600}, Layout: HBox{Margins: Margins{6, 6, 6, 6}}, Children: []Widget{ ToolBar{Orientation: Vertical, Actions: toolBarActions}, Composite{ Layout: VBox{MarginsZero: true}, Children: []Widget{ Composite{ Layout: HBox{MarginsZero: true}, Children: []Widget{ Label{Text: "File"}, LineEdit{ContextMenuActions: []*walk.Action{openAction}}, ToolButton{Text: "..."}, }, }, Composite{ Layout: HBox{MarginsZero: true}, Children: []Widget{ PushButton{Text: "Check"}, PushButton{Text: "Check and Fix"}, PushButton{Text: "Clear"}, HSpacer{}, Label{Text: "Parameter"}, LineEdit{MaxLength: 10}, }, }, Composite{ Layout: HBox{MarginsZero: true}, Children: []Widget{ LineEdit{Text: "Ready.", ReadOnly: true}, ProgressBar{StretchFactor: 10}, }, }, TextEdit{ReadOnly: true}, }, }, }, }.Create(nil)); err != nil { log.Fatal(err) } mw.Show() mw.Run() }
func main() { MustRegisterCondition("isSpecialMode", isSpecialMode) mw := new(MyMainWindow) var openAction, showAboutBoxAction *walk.Action var recentMenu *walk.Menu var toggleSpecialModePB *walk.PushButton if err := (MainWindow{ AssignTo: &mw.MainWindow, Title: "Walk Actions Example", MenuItems: []MenuItem{ Menu{ Text: "&File", Items: []MenuItem{ Action{ AssignTo: &openAction, Text: "&Open", Image: "../img/open.png", Enabled: Bind("enabledCB.Checked"), Visible: Bind("openVisibleCB.Checked"), Shortcut: Shortcut{walk.ModControl, walk.KeyO}, OnTriggered: mw.openAction_Triggered, }, Menu{ AssignTo: &recentMenu, Text: "Recent", }, Separator{}, Action{ Text: "E&xit", OnTriggered: func() { walk.App().Exit(0) }, }, }, }, Menu{ Text: "&Help", Items: []MenuItem{ Action{ AssignTo: &showAboutBoxAction, Text: "About", OnTriggered: mw.showAboutBoxAction_Triggered, }, }, }, }, ToolBarItems: []MenuItem{ ActionRef{&openAction}, Separator{}, ActionRef{&showAboutBoxAction}, Action{ Text: "Special", Enabled: Bind("isSpecialMode && enabledCB.Checked"), OnTriggered: mw.specialAction_Triggered, }, }, ContextMenuItems: []MenuItem{ ActionRef{&showAboutBoxAction}, }, MinSize: Size{300, 200}, Layout: VBox{}, Children: []Widget{ CheckBox{ Name: "enabledCB", Text: "Open / Special Enabled", Checked: true, }, CheckBox{ Name: "openVisibleCB", Text: "Open Visible", Checked: true, }, PushButton{ AssignTo: &toggleSpecialModePB, Text: "Enable Special Mode", OnClicked: func() { isSpecialMode.SetSatisfied(!isSpecialMode.Satisfied()) if isSpecialMode.Satisfied() { toggleSpecialModePB.SetText("Disable Special Mode") } else { toggleSpecialModePB.SetText("Enable Special Mode") } }, }, }, }.Create()); err != nil { log.Fatal(err) } addRecentFileActions := func(texts ...string) { for _, text := range texts { a := walk.NewAction() a.SetText(text) a.Triggered().Attach(mw.openAction_Triggered) recentMenu.Actions().Add(a) } } addRecentFileActions("Foo", "Bar", "Baz") mw.Run() }
func main() { walk.Initialize(walk.InitParams{PanicOnError: true}) defer walk.Shutdown() mainWnd, _ := walk.NewMainWindow() mw := &MainWindow{ MainWindow: mainWnd, fileInfoModel: &FileInfoModel{}, } mw.SetTitle("Walk File Browser Example") mw.SetLayout(walk.NewHBoxLayout()) fileMenu, _ := walk.NewMenu() fileMenuAction, _ := mw.Menu().Actions().AddMenu(fileMenu) fileMenuAction.SetText("&File") exitAction := walk.NewAction() exitAction.SetText("E&xit") exitAction.Triggered().Attach(func() { walk.App().Exit(0) }) fileMenu.Actions().Add(exitAction) helpMenu, _ := walk.NewMenu() helpMenuAction, _ := mw.Menu().Actions().AddMenu(helpMenu) helpMenuAction.SetText("&Help") aboutAction := walk.NewAction() aboutAction.SetText("&About") aboutAction.Triggered().Attach(func() { walk.MsgBox(mw, "About", "Walk File Browser Example", walk.MsgBoxOK|walk.MsgBoxIconInformation) }) helpMenu.Actions().Add(aboutAction) splitter, _ := walk.NewSplitter(mw) mw.treeView, _ = walk.NewTreeView(splitter) mw.treeView.ItemExpanded().Attach(func(item *walk.TreeViewItem) { children := item.Children() if children.Len() == 1 && children.At(0).Text() == "" { mw.populateTreeViewItem(item) } }) mw.treeView.SelectionChanged().Attach(func(old, new *walk.TreeViewItem) { mw.selTvwItem = new mw.showError(mw.fileInfoModel.ResetRows(pathForTreeViewItem(new))) }) drives, _ := walk.DriveNames() mw.treeView.SetSuspended(true) for _, drive := range drives { driveItem := newTreeViewItem(drive[:2]) mw.treeView.Items().Add(driveItem) } mw.treeView.SetSuspended(false) mw.tableView, _ = walk.NewTableView(splitter) mw.tableView.SetModel(mw.fileInfoModel) mw.tableView.SetSingleItemSelection(true) mw.tableView.CurrentIndexChanged().Attach(func() { var url string index := mw.tableView.CurrentIndex() if index > -1 { name := mw.fileInfoModel.items[index].Name url = path.Join(pathForTreeViewItem(mw.selTvwItem), name) } mw.preview.SetURL(url) }) mw.preview, _ = walk.NewWebView(splitter) mw.SetMinMaxSize(walk.Size{600, 400}, walk.Size{}) mw.SetSize(walk.Size{800, 600}) mw.Show() mw.Run() }
// 退出程序 func (mw *MyWindow) exit() { mw.Dispose() mw.notifyIcon.Dispose() walk.App().Exit(0) }
func main() { xcgui.XWnd_Create(0, 0, 0, 0, "炫彩界面库窗口", 0, xcgui.XC_WINDOW_STYLE_NOTHING) // We load our icon from a file. icon, err := walk.NewIconFromFile("../../img/x.ico") if err != nil { log.Fatal(err) } // Create the notify icon and make sure we clean it up on exit. ni, err := walk.NewNotifyIcon() if err != nil { log.Fatal(err) } defer ni.Dispose() // Set the icon and a tool tip text. if err := ni.SetIcon(icon); err != nil { log.Fatal(err) } if err := ni.SetToolTip("托盘"); err != nil { log.Fatal(err) } // When the left mouse button is pressed, bring up our balloon. ni.MouseDown().Attach(func(x, y int, button walk.MouseButton) { if button != walk.LeftButton { return } if err := ni.ShowCustom( "自定义消息", "这是一个带图标的自定义消息."); err != nil { log.Fatal(err) } }) // 菜单使用walk的,主程序为xcgui. exitAction := walk.NewAction() if err := exitAction.SetText("退出"); err != nil { log.Fatal(err) } exitAction.Triggered().Attach(func() { ni.Dispose() walk.App().Exit(0) xcgui.XExitXCGUI() }) if err := ni.ContextMenu().Actions().Add(exitAction); err != nil { log.Fatal(err) } // 托盘图标默认为隐藏状态,需设置为显示。 if err := ni.SetVisible(true); err != nil { log.Fatal(err) } // Now that the icon is visible, we can bring up an info balloon. if err := ni.ShowInfo("托盘", "正在运行中."); err != nil { log.Fatal(err) } // Run the message loop. xcgui.XRunXCGUI() }
func main() { walk.SetTranslationFunc(tr) var err error if trDict, err = polyglot.NewDict("../../l10n", "en"); err != nil { log.Fatal(err) } mw := new(MyMainWindow) var openAction *walk.Action var recentMenu *walk.Menu menuActions, err := CreateActions( Menu{ Text: "&File", Items: []MenuItem{ Action{ AssignTo: &openAction, Text: "&Open", Image: "../img/open.png", OnTriggered: func() { mw.openAction_Triggered() }, }, Menu{ AssignTo: &recentMenu, Text: "Recent", }, Separator{}, Action{ Text: "E&xit", OnTriggered: func() { walk.App().Exit(0) }, }, }, }) if err != nil { log.Fatal(err) } openRecent1Action := walk.NewAction() openRecent1Action.SetText("Blah") recentMenu.Actions().Add(openRecent1Action) openRecent2Action := walk.NewAction() openRecent2Action.SetText("Yadda") recentMenu.Actions().Add(openRecent2Action) openRecent3Action := walk.NewAction() openRecent3Action.SetText("Oink") recentMenu.Actions().Add(openRecent3Action) toolBarActions, err := CreateActions( ActionRef{openAction}, Separator{}, Action{Text: "Show Dialog", OnTriggered: func() { mw.showDialogAction_Triggered() }}) if err != nil { log.Fatal(err) } if err := (MainWindow{ AssignTo: &mw.MainWindow, Title: "Walk Declarative Example", MenuActions: menuActions, ToolBarActions: toolBarActions, MinSize: Size{600, 400}, Size: Size{1024, 768}, Layout: HBox{MarginsZero: true}, Children: []Widget{ TabWidget{ ContentMarginsZero: true, Pages: []TabPage{ // TabPage{Title: "golang.org/doc/", Content: WebView{URL: "http://golang.org/doc/"}}, // TabPage{Title: "golang.org/ref/", Content: WebView{URL: "http://golang.org/ref/"}}, // TabPage{Title: "golang.org/pkg/", Content: WebView{URL: "http://golang.org/pkg/"}}, TabPage{ Title: "Composite Stuff", Layout: Grid{}, Children: []Widget{ TextEdit{Row: 0, Column: 0, RowSpan: 4}, PushButton{Row: 0, Column: 1, Text: "Foo"}, PushButton{Row: 1, Column: 1, Text: "Bar"}, PushButton{Row: 2, Column: 1, Text: "Baz"}, VSpacer{Row: 3, Column: 1}, }, }, }, }, }, }.Create()); err != nil { log.Fatal(err) } mw.Run() }
func main() { walk.Initialize(walk.InitParams{}) defer walk.Shutdown() mw := new(MyMainWindow) var openAction *walk.Action var recentMenu *walk.Menu menuActions, err := CreateActions( Menu{ Text: "&File", Items: []MenuItem{ Action{ AssignTo: &openAction, Text: "&Open", Image: "../img/open.png", OnTriggered: func() { mw.openAction_Triggered() }, }, Menu{ AssignTo: &recentMenu, Text: "Recent", }, Separator{}, Action{ Text: "E&xit", OnTriggered: func() { walk.App().Exit(0) }, }, }, }) if err != nil { log.Fatal(err) } openRecent1Action := walk.NewAction() openRecent1Action.SetText("Blah") recentMenu.Actions().Add(openRecent1Action) openRecent2Action := walk.NewAction() openRecent2Action.SetText("Yadda") recentMenu.Actions().Add(openRecent2Action) openRecent3Action := walk.NewAction() openRecent3Action.SetText("Oink") recentMenu.Actions().Add(openRecent3Action) toolBarActions, err := CreateActions( ActionRef{openAction}, Separator{}, Action{Text: "Show Dialog", OnTriggered: func() { mw.showDialogAction_Triggered() }}) if err != nil { log.Fatal(err) } if err := (MainWindow{ AssignTo: &mw.MainWindow, Title: "Walk Declarative Example", MenuActions: menuActions, ToolBarActions: toolBarActions, MinSize: Size{600, 400}, Size: Size{1024, 768}, Layout: HBox{MarginsZero: true}, Children: []Widget{ TabWidget{ MarginsZero: true, PageTitles: []string{"golang.org/doc/", "golang.org/ref/", "golang.org/pkg/"}, Pages: []Widget{ WebView{URL: "http://golang.org/doc/"}, WebView{URL: "http://golang.org/ref/"}, WebView{URL: "http://golang.org/pkg/"}, }, }, }, }.Create()); err != nil { log.Fatal(err) } mw.Show() mw.Run() }