cli/display/tray.go

75 lines
2 KiB
Go
Raw Normal View History

package display
import (
"runtime"
_ "embed"
"github.com/wailsapp/wails/v3/pkg/application"
)
//go:embed apptray.png
var appTrayIcon []byte
// setupTray configures and creates the system tray icon and menu.
func (s *Service) setupTray() {
systray := s.app.SystemTray.New()
systray.SetTooltip("Lethean Desktop")
if runtime.GOOS == "darwin" {
systray.SetTemplateIcon(appTrayIcon)
} else {
// Support for light/dark mode icons
systray.SetDarkModeIcon(appTrayIcon)
systray.SetIcon(appTrayIcon)
}
// Create a hidden window for the system tray menu to interact with
trayWindow := s.app.Window.NewWithOptions(application.WebviewWindowOptions{
Title: "System Tray Status",
URL: "/#/system-tray",
Width: 400,
Frameless: true,
Hidden: true,
})
systray.AttachWindow(trayWindow).WindowOffset(5)
// --- Build Tray Menu ---
trayMenu := s.app.Menu.New()
trayMenu.Add("Open Desktop").OnClick(func(ctx *application.Context) {
for _, window := range s.app.Window.GetAll() {
window.Show()
}
})
trayMenu.Add("Close Desktop").OnClick(func(ctx *application.Context) {
for _, window := range s.app.Window.GetAll() {
window.Hide()
}
})
trayMenu.Add("Environment Info").OnClick(func(ctx *application.Context) {
s.ShowEnvironmentDialog()
})
// Add brand-specific menu items
switch s.brand {
case AdminHub:
trayMenu.Add("Manage Workspace").OnClick(func(ctx *application.Context) { /* TODO */ })
case ServerHub:
trayMenu.Add("Server Control").OnClick(func(ctx *application.Context) { /* TODO */ })
case GatewayHub:
trayMenu.Add("Routing Table").OnClick(func(ctx *application.Context) { /* TODO */ })
case DeveloperHub:
trayMenu.Add("Debug Console").OnClick(func(ctx *application.Context) { /* TODO */ })
case ClientHub:
trayMenu.Add("Connect").OnClick(func(ctx *application.Context) { /* TODO */ })
trayMenu.Add("Disconnect").OnClick(func(ctx *application.Context) { /* TODO */ })
}
trayMenu.AddSeparator()
trayMenu.Add("Quit").OnClick(func(ctx *application.Context) {
s.app.Quit()
})
systray.SetMenu(trayMenu)
}