package framework import ( "fmt" "freeCaculator/global" "fyne.io/fyne/v2" "fyne.io/fyne/v2/cmd/fyne_settings/settings" "fyne.io/fyne/v2/theme" "net/url" ) /* * @author: sre @date: 2022/8/22 0022 @desc: todo * */ func MakeMenu(a fyne.App, w fyne.Window) *fyne.MainMenu { newItem := fyne.NewMenuItem("新建", func() { fmt.Println("新建") }) checkedItem := fyne.NewMenuItem("选中", func() { global.MenuCheckFileChosen = !global.MenuCheckFileChosen w.SetMainMenu(MakeMenu(a, w)) fmt.Println("选中") }) checkedItem.Checked = global.MenuCheckFileChosen disabledItem := fyne.NewMenuItem("禁用", func() { fmt.Println("禁用") }) disabledItem.Disabled = true otherItem := fyne.NewMenuItem("其他", func() { fmt.Println("其他") }) otherItem.ChildMenu = fyne.NewMenu("", fyne.NewMenuItem("项目", func() { fmt.Println("菜单 新建->其他->项目") }), fyne.NewMenuItem("邮件", func() { fmt.Println("菜单 新建->其他->邮件") }), fyne.NewMenuItem("doc", func() { fmt.Println("菜单 新建->其他->doc") }), ) newItem.ChildMenu = fyne.NewMenu("", fyne.NewMenuItem("文件", func() { fmt.Println("菜单 新建->文件") }), fyne.NewMenuItem("目录", func() { fmt.Println("菜单 新建->目录") }), otherItem, ) settingsItem := fyne.NewMenuItem("设置", func() { w := a.NewWindow("Fyne 设置") w.SetContent(settings.NewSettings().LoadAppearanceScreen(w)) w.Resize(fyne.NewSize(480, 480)) w.Show() }) cutItem := fyne.NewMenuItem("剪切", func() { shortcutFocused(&fyne.ShortcutCut{ Clipboard: w.Clipboard(), }, w) }) copyItem := fyne.NewMenuItem("复制", func() { shortcutFocused(&fyne.ShortcutCopy{ Clipboard: w.Clipboard(), }, w) }) pasteItem := fyne.NewMenuItem("粘贴", func() { shortcutFocused(&fyne.ShortcutPaste{ Clipboard: w.Clipboard(), }, w) }) findItem := fyne.NewMenuItem("查找", func() { fmt.Println("菜单 查找") }) fullScreenSwitchItem := fyne.NewMenuItem("切换当前", func() { w.SetFullScreen(!w.FullScreen()) }) fullScreenFullItem := fyne.NewMenuItem("切换到全屏", func() { w.SetFullScreen(true) }) fullScreenFormItem := fyne.NewMenuItem("切换到窗口", func() { w.SetFullScreen(false) }) themeDarkItem := fyne.NewMenuItem("暗色", func() { a.Settings().SetTheme(theme.DarkTheme()) }) themeLightItem := fyne.NewMenuItem("亮色", func() { a.Settings().SetTheme(theme.LightTheme()) }) themeCustomItem := fyne.NewMenuItem("高对比度", func() { a.Settings().SetTheme(NewCustomTheme()) }) helpMenu := fyne.NewMenu("帮助", fyne.NewMenuItem("文档", func() { u, _ := url.Parse("https://developer.fyne.io") _ = a.OpenURL(u) }), fyne.NewMenuItem("关于", func() { u, _ := url.Parse("https://sre.ink") _ = a.OpenURL(u) }), fyne.NewMenuItemSeparator(), fyne.NewMenuItem("支持", func() { u, _ := url.Parse("https://fyne.io/support/") _ = a.OpenURL(u) }), fyne.NewMenuItemSeparator(), fyne.NewMenuItem("赞助", func() { u, _ := url.Parse("https://fyne.io/sponsor/") _ = a.OpenURL(u) })) // a quit item will be appended to our first (File) menu file := fyne.NewMenu("文件", newItem, checkedItem, disabledItem) if !fyne.CurrentDevice().IsMobile() { file.Items = append(file.Items, fyne.NewMenuItemSeparator(), settingsItem) } return fyne.NewMainMenu( file, fyne.NewMenu("编辑", cutItem, copyItem, pasteItem, fyne.NewMenuItemSeparator(), findItem), helpMenu, fyne.NewMenu("全屏", fullScreenSwitchItem, fyne.NewMenuItemSeparator(), fullScreenFullItem, fullScreenFormItem), fyne.NewMenu("主题", themeDarkItem, themeLightItem, themeCustomItem), ) } func shortcutFocused(s fyne.Shortcut, w fyne.Window) { if focused, ok := w.Canvas().Focused().(fyne.Shortcutable); ok { focused.TypedShortcut(s) } }