94 lines
2.6 KiB
Go
94 lines
2.6 KiB
Go
// pkg/systray/wails.go
|
|
package systray
|
|
|
|
import (
|
|
"github.com/wailsapp/wails/v3/pkg/application"
|
|
)
|
|
|
|
// WailsPlatform implements Platform using Wails v3.
|
|
// Use: platform := systray.NewWailsPlatform(app)
|
|
type WailsPlatform struct {
|
|
app *application.App
|
|
}
|
|
|
|
// NewWailsPlatform creates a Wails-backed tray platform.
|
|
// Use: platform := systray.NewWailsPlatform(app)
|
|
func NewWailsPlatform(app *application.App) *WailsPlatform {
|
|
return &WailsPlatform{app: app}
|
|
}
|
|
|
|
// NewTray creates a Wails system tray handle.
|
|
// Use: tray := platform.NewTray()
|
|
func (wp *WailsPlatform) NewTray() PlatformTray {
|
|
return &wailsTray{tray: wp.app.SystemTray.New()}
|
|
}
|
|
|
|
// NewMenu creates a Wails tray menu handle.
|
|
// Use: menu := platform.NewMenu()
|
|
func (wp *WailsPlatform) NewMenu() PlatformMenu {
|
|
return &wailsTrayMenu{menu: wp.app.NewMenu()}
|
|
}
|
|
|
|
type wailsTray struct {
|
|
tray *application.SystemTray
|
|
}
|
|
|
|
func (wt *wailsTray) SetIcon(data []byte) { wt.tray.SetIcon(data) }
|
|
func (wt *wailsTray) SetTemplateIcon(data []byte) { wt.tray.SetTemplateIcon(data) }
|
|
func (wt *wailsTray) SetTooltip(text string) { wt.tray.SetTooltip(text) }
|
|
func (wt *wailsTray) SetLabel(text string) { wt.tray.SetLabel(text) }
|
|
|
|
func (wt *wailsTray) SetMenu(menu PlatformMenu) {
|
|
if wm, ok := menu.(*wailsTrayMenu); ok {
|
|
wt.tray.SetMenu(wm.menu)
|
|
}
|
|
}
|
|
|
|
func (wt *wailsTray) AttachWindow(w WindowHandle) {
|
|
if wt.tray == nil {
|
|
return
|
|
}
|
|
window, ok := w.(interface {
|
|
Show()
|
|
Hide()
|
|
Focus()
|
|
IsVisible() bool
|
|
})
|
|
if !ok {
|
|
return
|
|
}
|
|
wt.tray.AttachWindow(window)
|
|
}
|
|
|
|
// wailsTrayMenu wraps *application.Menu for the PlatformMenu interface.
|
|
type wailsTrayMenu struct {
|
|
menu *application.Menu
|
|
}
|
|
|
|
func (m *wailsTrayMenu) Add(label string) PlatformMenuItem {
|
|
return &wailsTrayMenuItem{item: m.menu.Add(label)}
|
|
}
|
|
|
|
func (m *wailsTrayMenu) AddSeparator() {
|
|
m.menu.AddSeparator()
|
|
}
|
|
|
|
func (m *wailsTrayMenu) AddSubmenu(label string) PlatformMenu {
|
|
return &wailsTrayMenu{menu: m.menu.AddSubmenu(label)}
|
|
}
|
|
|
|
// wailsTrayMenuItem wraps *application.MenuItem for the PlatformMenuItem interface.
|
|
type wailsTrayMenuItem struct {
|
|
item *application.MenuItem
|
|
}
|
|
|
|
func (mi *wailsTrayMenuItem) SetTooltip(text string) { mi.item.SetTooltip(text) }
|
|
func (mi *wailsTrayMenuItem) SetChecked(checked bool) { mi.item.SetChecked(checked) }
|
|
func (mi *wailsTrayMenuItem) SetEnabled(enabled bool) { mi.item.SetEnabled(enabled) }
|
|
func (mi *wailsTrayMenuItem) OnClick(fn func()) {
|
|
mi.item.OnClick(func(ctx *application.Context) { fn() })
|
|
}
|
|
func (mi *wailsTrayMenuItem) AddSubmenu() PlatformMenu {
|
|
// Wails doesn't have a direct AddSubmenu on MenuItem — use Menu.AddSubmenu instead
|
|
return &wailsTrayMenu{menu: application.NewMenu()}
|
|
}
|