mirror of
https://github.com/ehang-io/nps.git
synced 2025-07-04 13:50:42 +00:00
145 lines
3.8 KiB
Go
145 lines
3.8 KiB
Go
package screens
|
|
|
|
import (
|
|
"image/color"
|
|
|
|
"fyne.io/fyne"
|
|
"fyne.io/fyne/canvas"
|
|
"fyne.io/fyne/layout"
|
|
"fyne.io/fyne/theme"
|
|
"fyne.io/fyne/widget"
|
|
)
|
|
|
|
type browser struct {
|
|
current int
|
|
|
|
name *widget.Select
|
|
icon *widget.Icon
|
|
}
|
|
|
|
func (b *browser) setIcon(index int) {
|
|
if index < 0 || index > len(icons)-1 {
|
|
return
|
|
}
|
|
b.current = index
|
|
|
|
b.name.SetSelected(icons[index].name)
|
|
b.icon.SetResource(icons[index].icon)
|
|
}
|
|
|
|
// IconsPanel loads a panel that shows the various icons available in Fyne
|
|
func IconsPanel() fyne.CanvasObject {
|
|
b := &browser{}
|
|
|
|
prev := widget.NewButtonWithIcon("", theme.NavigateBackIcon(), func() {
|
|
b.setIcon(b.current - 1)
|
|
})
|
|
next := widget.NewButtonWithIcon("", theme.NavigateNextIcon(), func() {
|
|
b.setIcon(b.current + 1)
|
|
})
|
|
b.name = widget.NewSelect(iconList(), func(name string) {
|
|
for i, icon := range icons {
|
|
if icon.name == name {
|
|
if b.current != i {
|
|
b.setIcon(i)
|
|
}
|
|
break
|
|
}
|
|
}
|
|
})
|
|
b.name.SetSelected(icons[b.current].name)
|
|
bar := widget.NewHBox(prev, next, b.name)
|
|
|
|
background := canvas.NewRasterWithPixels(checkerPattern)
|
|
background.SetMinSize(fyne.NewSize(280, 280))
|
|
b.icon = widget.NewIcon(icons[b.current].icon)
|
|
|
|
return fyne.NewContainerWithLayout(layout.NewBorderLayout(
|
|
bar, nil, nil, nil), bar, background, b.icon)
|
|
}
|
|
|
|
func checkerPattern(x, y, _, _ int) color.Color {
|
|
x /= 20
|
|
y /= 20
|
|
|
|
if x%2 == y%2 {
|
|
return theme.BackgroundColor()
|
|
}
|
|
|
|
return theme.ButtonColor()
|
|
}
|
|
|
|
func iconList() []string {
|
|
var ret []string
|
|
for _, icon := range icons {
|
|
ret = append(ret, icon.name)
|
|
}
|
|
|
|
return ret
|
|
}
|
|
|
|
var icons = []struct {
|
|
name string
|
|
icon fyne.Resource
|
|
}{
|
|
{"CancelIcon", theme.CancelIcon()},
|
|
{"ConfirmIcon", theme.ConfirmIcon()},
|
|
{"DeleteIcon", theme.DeleteIcon()},
|
|
{"SearchIcon", theme.SearchIcon()},
|
|
{"SearchReplaceIcon", theme.SearchReplaceIcon()},
|
|
|
|
{"CheckButtonIcon", theme.CheckButtonIcon()},
|
|
{"CheckButtonCheckedIcon", theme.CheckButtonCheckedIcon()},
|
|
{"RadioButtonIcon", theme.RadioButtonIcon()},
|
|
{"RadioButtonCheckedIcon", theme.RadioButtonCheckedIcon()},
|
|
|
|
{"ContentAddIcon", theme.ContentAddIcon()},
|
|
{"ContentRemoveIcon", theme.ContentRemoveIcon()},
|
|
{"ContentClearIcon", theme.ContentClearIcon()},
|
|
{"ContentCutIcon", theme.ContentCutIcon()},
|
|
{"ContentCopyIcon", theme.ContentCopyIcon()},
|
|
{"ContentPasteIcon", theme.ContentPasteIcon()},
|
|
{"ContentRedoIcon", theme.ContentRedoIcon()},
|
|
{"ContentUndoIcon", theme.ContentUndoIcon()},
|
|
|
|
{"InfoIcon", theme.InfoIcon()},
|
|
{"QuestionIcon", theme.QuestionIcon()},
|
|
{"WarningIcon", theme.WarningIcon()},
|
|
|
|
{"DocumentCreateIcon", theme.DocumentCreateIcon()},
|
|
{"DocumentPrintIcon", theme.DocumentPrintIcon()},
|
|
{"DocumentSaveIcon", theme.DocumentSaveIcon()},
|
|
|
|
{"FolderIcon", theme.FolderIcon()},
|
|
{"FolderNewIcon", theme.FolderNewIcon()},
|
|
{"FolderOpenIcon", theme.FolderOpenIcon()},
|
|
{"HomeIcon", theme.HomeIcon()},
|
|
{"HelpIcon", theme.HelpIcon()},
|
|
{"SettingsIcon", theme.SettingsIcon()},
|
|
|
|
{"ViewFullScreenIcon", theme.ViewFullScreenIcon()},
|
|
{"ViewRestoreIcon", theme.ViewRestoreIcon()},
|
|
{"ViewRefreshIcon", theme.ViewRefreshIcon()},
|
|
{"VisibilityIcon", theme.VisibilityIcon()},
|
|
{"VisibilityOffIcon", theme.VisibilityOffIcon()},
|
|
{"ZoomFitIcon", theme.ZoomFitIcon()},
|
|
{"ZoomInIcon", theme.ZoomInIcon()},
|
|
{"ZoomOutIcon", theme.ZoomOutIcon()},
|
|
|
|
{"MoveDownIcon", theme.MoveDownIcon()},
|
|
{"MoveUpIcon", theme.MoveUpIcon()},
|
|
|
|
{"NavigateBackIcon", theme.NavigateBackIcon()},
|
|
{"NavigateNextIcon", theme.NavigateNextIcon()},
|
|
|
|
{"MenuDropDown", theme.MenuDropDownIcon()},
|
|
{"MenuDropUp", theme.MenuDropUpIcon()},
|
|
|
|
{"MailAttachmentIcon", theme.MailAttachmentIcon()},
|
|
{"MailComposeIcon", theme.MailComposeIcon()},
|
|
{"MailForwardIcon", theme.MailForwardIcon()},
|
|
{"MailReplyIcon", theme.MailReplyIcon()},
|
|
{"MailReplyAllIcon", theme.MailReplyAllIcon()},
|
|
{"MailSendIcon", theme.MailSendIcon()},
|
|
}
|