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