API менеджера
API менеджера Wails v3 предоставляет организованную и удобную для поиска возможность доступа к функциональности приложения через специализированные структуры менеджеров. Эта новая структура API группирует связанные методы вместе, сохраняя при этом полную обратную совместимость с традиционным API приложения.
API менеджера организует функциональность приложения по одиннадцати основным направлениям:
app.Window- Создание окон, управление ими и обратные вызовыapp.ContextMenu- Регистрация и управление контекстным менюapp.KeyBinding- Управление глобальными сочетаниями клавишapp.Browser- Интеграция с браузером (открытие URL-адресов и файлов)app.Env- Информация об окружении и состояние системыapp.Dialog- Операции с диалогами выбора файлов и сообщенийapp.Event- Обработка пользовательских событий и событий приложенияapp.Menu- Управление меню приложенияapp.Screen- Управление экранами и преобразование координатapp.Clipboard- Операции с текстом в буфере обменаapp.SystemTray- Создание и управление значком в системном трее
Преимущества
Заголовок раздела «Преимущества»- Лучшая обнаруживаемость - Автодополнение IDE показывает организованную поверхность API
- Улучшенная организация кода - Связанные методы сгруппированы вместе
- Повышенная поддерживаемость - Разделение ответственности между менеджерами
- Расширяемость в будущем - Легче добавлять новые функции в конкретные области
Использование
Заголовок раздела «Использование»API менеджера обеспечивает организованный доступ ко всей функциональности приложения:
// События и обработка пользовательских событийapp.Event.Emit("custom", data)app.Event.On("custom", func(e *CustomEvent) { ... })
// Управление окнамиwindow, _ := app.Window.GetByName("main")app.Window.OnCreate(func(window Window) { ... })
// Интеграция с браузеромapp.Browser.OpenURL("https://wails.io")
// Управление менюmenu := app.Menu.New()app.Menu.Set(menu)
// Системный трейsystray := app.SystemTray.New()Справочник по менеджерам
Заголовок раздела «Справочник по менеджерам»Менеджер окон
Заголовок раздела «Менеджер окон»Управляет созданием окон, их поиском и обратными вызовами жизненного цикла.
// Создание оконwindow := app.Window.New()window := app.Window.NewWithOptions(options)current := app.Window.Current()
// Поиск оконwindow, exists := app.Window.GetByName("main")windows := app.Window.GetAll()
// Обратные вызовы оконapp.Window.OnCreate(func(window Window) { // Обработка создания окна})Менеджер событий
Заголовок раздела «Менеджер событий»Обрабатывает пользовательские события и прослушивание событий приложения.
// Пользовательские событияapp.Event.Emit("userAction", data)cancelFunc := app.Event.On("userAction", func(e *CustomEvent) { // Обработка события})app.Event.Off("userAction")app.Event.Reset() // Удалить все слушатели
// События приложенияapp.Event.OnApplicationEvent(events.Common.ThemeChanged, func(e *ApplicationEvent) { // Обработка изменения системной темы})Менеджер браузера
Заголовок раздела «Менеджер браузера»Обеспечивает интеграцию с браузером для открытия URL-адресов и файлов.
// Открытие URL-адресов и файлов в браузере по умолчаниюerr := app.Browser.OpenURL("https://wails.io")err := app.Browser.OpenFile("/path/to/document.pdf")Менеджер окружения
Заголовок раздела «Менеджер окружения»Доступ к информации об окружении системы.
// Получение информации об окруженииenv := app.Env.Info()fmt.Printf("OS: %s, Arch: %s\n", env.OS, env.Arch)
// Проверка системной темыif app.Env.IsDarkMode() { // Активен темный режим}
// Открытие файлового менеджераerr := app.Env.OpenFileManager("/path/to/folder", false)Менеджер диалогов
Заголовок раздела «Менеджер диалогов»Организованный доступ к диалогам выбора файлов и сообщений.
// Диалоги выбора файловresult, err := app.Dialog.OpenFile(). AddFilter("Text Files", "*.txt"). PromptForSingleSelection()
result, err = app.Dialog.SaveFile(). SetDefaultFilename("document.txt"). PromptForSingleSelection()
// Диалоги сообщенийapp.Dialog.Info(). SetTitle("Information"). SetMessage("Operation completed successfully"). Show()
app.Dialog.Error(). SetTitle("Error"). SetMessage("An error occurred"). Show()Менеджер меню
Заголовок раздела «Менеджер меню»Создание и управление меню приложения.
// Создание и установка меню приложенияmenu := app.Menu.New()fileMenu := menu.AddSubmenu("File")fileMenu.Add("New").OnClick(func(ctx *Context) { // Обработка клика по меню})
app.Menu.Set(menu)
// Показать диалог "О программе"app.Menu.ShowAbout()Менеджер сочетаний клавиш
Заголовок раздела «Менеджер сочетаний клавиш»Динамическое управление глобальными сочетаниями клавиш.
// Добавление сочетаний клавишapp.KeyBinding.Add("ctrl+n", func(window *WebviewWindow) { // Обработка Ctrl+N})
app.KeyBinding.Add("ctrl+q", func(window *WebviewWindow) { app.Quit()})
// Удаление сочетаний клавишapp.KeyBinding.Remove("ctrl+n")
// Получение всех сочетанийbindings := app.KeyBinding.GetAll()Менеджер контекстного меню
Заголовок раздела «Менеджер контекстного меню»Расширенное управление контекстным меню (для авторов библиотек).
// Создание и регистрация контекстного менюmenu := app.ContextMenu.New()app.ContextMenu.Add("myMenu", menu)
// Получение контекстного менюmenu, exists := app.ContextMenu.Get("myMenu")
// Удаление контекстного менюapp.ContextMenu.Remove("myMenu")Менеджер экранов
Заголовок раздела «Менеджер экранов»Управление экранами и преобразование координат для конфигураций с несколькими мониторами.
// Получение информации об экранахscreens := app.Screen.GetAll()primary := app.Screen.GetPrimary()
// Преобразование координатphysicalPoint := app.Screen.DipToPhysicalPoint(logicalPoint)logicalPoint := app.Screen.PhysicalToDipPoint(physicalPoint)
// Определение экранаscreen := app.Screen.ScreenNearestDipPoint(point)screen = app.Screen.ScreenNearestDipRect(rect)Менеджер буфера обмена
Заголовок раздела «Менеджер буфера обмена»Операции с буфером обмена для чтения и записи текста.
// Установка текста в буфер обменаsuccess := app.Clipboard.SetText("Hello World")if !success { // Обработка ошибки}
// Получение текста из буфера обменаtext, ok := app.Clipboard.Text()if !ok { // Обработка ошибки} else { // Использование текста}Менеджер системного трея
Заголовок раздела «Менеджер системного трея»Создание и управление значком в системном трее.
// Создание значка в системном трееsystray := app.SystemTray.New()systray.SetLabel("My App")systray.SetIcon(iconBytes)
// Добавление меню в системный трейmenu := app.Menu.New()menu.Add("Open").OnClick(func(ctx *Context) { // Обработка клика})systray.SetMenu(menu)
// Уничтожение значка в системном трее, когда он больше не нуженsystray.Destroy()