マネージャーAPI
Wails v3のマネージャーAPIは、焦点を絞ったマネージャー構造体を通じてアプリケーションの機能にアクセスするための、整理されており発見しやすい方法を提供します。この新しいAPI構造は、従来のApp APIとの完全な後方互換性を維持しつつ、関連するメソッドをグループ化しています。
マネージャーAPIは、アプリケーションの機能を11の焦点を絞った領域に整理しています:
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()マネージャーリファレンス
Section titled “マネージャーリファレンス”ウィンドウマネージャー
Section titled “ウィンドウマネージャー”ウィンドウの作成、取得、およびライフサイクルコールバックを管理します。
// ウィンドウの作成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) { // ウィンドウ作成の処理})イベントマネージャー
Section titled “イベントマネージャー”カスタムイベントとアプリケーションイベントのリスニングを処理します。
// カスタムイベント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) { // システムテーマ変更の処理})ブラウザーマネージャー
Section titled “ブラウザーマネージャー”URLとファイルを開くためのブラウザー統合を提供します。
// デフォルトブラウザーでURLとファイルを開くerr := app.Browser.OpenURL("https://wails.io")err := app.Browser.OpenFile("/path/to/document.pdf")環境マネージャー
Section titled “環境マネージャー”システム環境情報へのアクセス。
// 環境情報の取得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)ダイアログマネージャー
Section titled “ダイアログマネージャー”ファイルおよびメッセージダイアログへの整理されたアクセス。
// ファイルダイアログ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()メニューマネージャー
Section titled “メニューマネージャー”アプリケーションメニューの作成と管理。
// アプリケーションメニューの作成と設定menu := app.Menu.New()fileMenu := menu.AddSubmenu("File")fileMenu.Add("New").OnClick(func(ctx *Context) { // メニュークリックの処理})
app.Menu.Set(menu)
// アバウトダイアログを表示app.Menu.ShowAbout()キーバインディングマネージャー
Section titled “キーバインディングマネージャー”グローバルキーバインディングの動的管理。
// キーバインディングの追加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()コンテキストメニューマネージャー
Section titled “コンテキストメニューマネージャー”高度なコンテキストメニューの管理(ライブラリ作者向け)。
// コンテキストメニューの作成と登録menu := app.ContextMenu.New()app.ContextMenu.Add("myMenu", menu)
// コンテキストメニューの取得menu, exists := app.ContextMenu.Get("myMenu")
// コンテキストメニューの削除app.ContextMenu.Remove("myMenu")スクリーンマネージャー
Section titled “スクリーンマネージャー”マルチモニター環境向けのスクリーン管理と座標変換。
// スクリーン情報の取得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)クリップボードマネージャー
Section titled “クリップボードマネージャー”テキストの読み書きのためのクリップボード操作。
// クリップボードにテキストを設定success := app.Clipboard.SetText("Hello World")if !success { // エラー処理}
// クリップボードからテキストを取得text, ok := app.Clipboard.Text()if !ok { // エラー処理} else { // テキストを使用}システムトレイマネージャー
Section titled “システムトレイマネージャー”システムトレイアイコンの作成と管理。
// システムトレイの作成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()