You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

129 lines
3.7 KiB

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)
}
}