Aller au contenu

API des gestionnaires

L’API des gestionnaires de Wails v3 offre un moyen organisé et facile à découvrir d’accéder aux fonctionnalités de l’application via des structs de gestionnaire spécialisées. Cette nouvelle structure d’API regroupe les méthodes liées tout en maintenant une compatibilité ascendante totale avec l’API App traditionnelle.

L’API des gestionnaires organise les fonctionnalités de l’application en onze domaines spécialisés :

  • app.Window - Création, gestion et rappels des fenêtres
  • app.ContextMenu - Enregistrement et gestion des menus contextuels
  • app.KeyBinding - Gestion des raccourcis clavier globaux
  • app.Browser - Intégration du navigateur (ouverture d’URL et de fichiers)
  • app.Env - Informations d’environnement et état du système
  • app.Dialog - Opérations de boîtes de dialogue de fichiers et de messages
  • app.Event - Gestion des événements personnalisés et des événements de l’application
  • app.Menu - Gestion du menu de l’application
  • app.Screen - Gestion des écrans et transformations de coordonnées
  • app.Clipboard - Opérations de texte du presse-papiers
  • app.SystemTray - Création et gestion de l’icône de la zone de notification
  • Meilleure découvrabilité - L’autocomplétion de l’IDE affiche une surface d’API organisée
  • Organisation du code améliorée - Méthodes liées regroupées ensemble
  • Maintenabilité accrue - Séparation des responsabilités entre les gestionnaires
  • Extensibilité future - Plus facile d’ajouter de nouvelles fonctionnalités à des domaines spécifiques

L’API des gestionnaires fournit un accès organisé à toutes les fonctionnalités de l’application :

// Événements et gestion d'événements personnalisés
app.Event.Emit("custom", data)
app.Event.On("custom", func(e *CustomEvent) { ... })
// Gestion des fenêtres
window, _ := app.Window.GetByName("main")
app.Window.OnCreate(func(window Window) { ... })
// Intégration du navigateur
app.Browser.OpenURL("https://wails.io")
// Gestion du menu
menu := app.Menu.New()
app.Menu.Set(menu)
// Zone de notification
systray := app.SystemTray.New()

Gère la création, la récupération et les rappels de cycle de vie des fenêtres.

// Créer des fenêtres
window := app.Window.New()
window := app.Window.NewWithOptions(options)
current := app.Window.Current()
// Trouver des fenêtres
window, exists := app.Window.GetByName("main")
windows := app.Window.GetAll()
// Rappels de fenêtre
app.Window.OnCreate(func(window Window) {
// Gérer la création de la fenêtre
})

Gère les événements personnalisés et l’écoute des événements de l’application.

// Événements personnalisés
app.Event.Emit("userAction", data)
cancelFunc := app.Event.On("userAction", func(e *CustomEvent) {
// Gérer l'événement
})
app.Event.Off("userAction")
app.Event.Reset() // Supprimer tous les écouteurs
// Événements de l'application
app.Event.OnApplicationEvent(events.Common.ThemeChanged, func(e *ApplicationEvent) {
// Gérer le changement de thème système
})

Fournit l’intégration du navigateur pour l’ouverture d’URL et de fichiers.

// Ouvrir des URL et des fichiers dans le navigateur par défaut
err := app.Browser.OpenURL("https://wails.io")
err := app.Browser.OpenFile("/path/to/document.pdf")

Accès aux informations de l’environnement système.

// Obtenir les informations de l'environnement
env := app.Env.Info()
fmt.Printf("OS: %s, Arch: %s\n", env.OS, env.Arch)
// Vérifier le thème système
if app.Env.IsDarkMode() {
// Le mode sombre est actif
}
// Ouvrir le gestionnaire de fichiers
err := app.Env.OpenFileManager("/path/to/folder", false)

Accès organisé aux boîtes de dialogue de fichiers et de messages.

// Boîtes de dialogue de fichiers
result, err := app.Dialog.OpenFile().
AddFilter("Text Files", "*.txt").
PromptForSingleSelection()
result, err = app.Dialog.SaveFile().
SetDefaultFilename("document.txt").
PromptForSingleSelection()
// Boîtes de dialogue de messages
app.Dialog.Info().
SetTitle("Information").
SetMessage("Operation completed successfully").
Show()
app.Dialog.Error().
SetTitle("Error").
SetMessage("An error occurred").
Show()

Création et gestion du menu de l’application.

// Créer et définir le menu de l'application
menu := app.Menu.New()
fileMenu := menu.AddSubmenu("File")
fileMenu.Add("New").OnClick(func(ctx *Context) {
// Gérer le clic de menu
})
app.Menu.Set(menu)
// Afficher la boîte de dialogue À propos
app.Menu.ShowAbout()

Gestion dynamique des raccourcis clavier globaux.

// Ajouter des raccourcis clavier
app.KeyBinding.Add("ctrl+n", func(window *WebviewWindow) {
// Gérer Ctrl+N
})
app.KeyBinding.Add("ctrl+q", func(window *WebviewWindow) {
app.Quit()
})
// Supprimer des raccourcis clavier
app.KeyBinding.Remove("ctrl+n")
// Obtenir tous les raccourcis
bindings := app.KeyBinding.GetAll()

Gestion avancée des menus contextuels (pour les auteurs de bibliothèques).

// Créer et enregistrer un menu contextuel
menu := app.ContextMenu.New()
app.ContextMenu.Add("myMenu", menu)
// Récupérer le menu contextuel
menu, exists := app.ContextMenu.Get("myMenu")
// Supprimer le menu contextuel
app.ContextMenu.Remove("myMenu")

Gestion des écrans et transformations de coordonnées pour les configurations multi-écrans.

// Obtenir les informations des écrans
screens := app.Screen.GetAll()
primary := app.Screen.GetPrimary()
// Transformations de coordonnées
physicalPoint := app.Screen.DipToPhysicalPoint(logicalPoint)
logicalPoint := app.Screen.PhysicalToDipPoint(physicalPoint)
// Détection d'écran
screen := app.Screen.ScreenNearestDipPoint(point)
screen = app.Screen.ScreenNearestDipRect(rect)

Opérations de presse-papiers pour la lecture et l’écriture de texte.

// Définir le texte dans le presse-papiers
success := app.Clipboard.SetText("Hello World")
if !success {
// Gérer l'erreur
}
// Obtenir le texte du presse-papiers
text, ok := app.Clipboard.Text()
if !ok {
// Gérer l'erreur
} else {
// Utiliser le texte
}

Création et gestion de l’icône de la zone de notification.

// Créer la zone de notification
systray := app.SystemTray.New()
systray.SetLabel("My App")
systray.SetIcon(iconBytes)
// Ajouter un menu à la zone de notification
menu := app.Menu.New()
menu.Add("Open").OnClick(func(ctx *Context) {
// Gérer le clic
})
systray.SetMenu(menu)
// Détruire la zone de notification lorsque c'est terminé
systray.Destroy()