Exemple 7 : Menu
La fonction main crée une nouvelle application Fyne, une fenêtre au sein de cette application avec le titre "Exemple 07 : Menu et raccourcis", ainsi que des labels et des champs de texte. Voici une explication plus détaillée ligne par ligne :
a := app.New()initialise une nouvelle application Fyne.w := a.NewWindow("Exemple 07 : Menu et raccourcis")crée une nouvelle fenêtre dans cette application avec le titre donné.src, dst := makeSrcDstEntries()initialisesrcetdst, oùsrcest un champ de texte à lignes multiples etdstest un widget affichant du texte enrichi. L'entréedstse met à jour pour afficher le texte de l'entréesrcanalysé en tant que Markdown.Ensuite, il crée un élément de menu "Ouvrir" qui déclenche l'ouverture d'une boîte de dialogue pour sélectionner un fichier Markdown (
.md). Le contenu du document sélectionné est défini dans les entréessrcetdstde l'application. Cet élément de menu est également lié au raccourci clavierCtrl-O.Un menu principal (
mainMenu) est ensuite créé, qui comprend l'élément de menu "Ouvrir" et un élément de menu "Enregistrer". Lorsque l'on clique sur l'élément de menu "Enregistrer", une boîte de dialogue de fichier s'ouvre pour sauvegarder le contenu actuel de l'entréesrcen tant que fichier Markdown.w.SetMainMenu(mainMenu)définit lemainMenudans la fenêtre.Un séparateur (ou diviseur) horizontal est créé, qui sépare les entrées
srcetdst.w.SetContent(container.NewBorder(filename, nil, nil, nil, split))crée un nouveau conteneur avec le labelfilename, qui est mis à jour avec le chemin du fichier actuellement ouvert, en haut, et le séparateur créé au centre.w.Resize(fyne.NewSize(800, 600))définit ensuite la taille de la fenêtre à800x600pixels.w.ShowAndRun()affiche enfin la fenêtre et commence la boucle principale de l'application.
Construction du menu et des raccourcis
Un élément de menu "Ouvrir" est créé avec l'appel
fyne.NewMenuItem("Open", getOpenMenuFunc(w, src, dst, filename)). Ici, "Open" est le texte qui apparaîtra dans l'élément de menu, etgetOpenMenuFunc(w, src, dst, filename)est la fonction qui sera exécutée lorsque l'élément de menu sera cliqué. La fonctiongetOpenMenuFuncretourne une autre fonction qui ouvre un dialogue de sélection de fichier lorsque l'utilisateur clique sur le bouton "Open". Le fichier sélectionné sera lu et son contenu sera affiché dans les widgetssrcetdst.L'icône et le raccourci de l'élément de menu "Ouvrir" sont définis avec les deux instructions suivantes :
openMenuItem.Icon = theme.DocumentIcon() openMenuItem.Shortcut = &desktop.CustomShortcut{ KeyName: fyne.KeyO, Modifier: fyne.KeyModifierShortcutDefault, }Ici,
theme.DocumentIcon()est une icône standard présente dans la bibliothèque Fyne etdesktop.CustomShortcut{KeyName: fyne.KeyO, Modifier: fyne.KeyModifierShortcutDefault}est un raccourci qui sera déclenché lorsque l'utilisateur appuie sur "Cmd+O" (sur macOS) ou "Ctrl+O" (sur Windows/Linux).Le raccourci est également ajouté au Canvas de la fenêtre avec
w.Canvas().AddShortcut(openMenuItem.Shortcut, func(shortcut fyne.Shortcut) { getOpenMenuFunc(w, src, dst, filename)() }). Cela permet au raccourci d'être écouté à tout moment lorsque la fenêtre est en focus, et pas seulement lorsque le menu est déroulé.Un menu "Fichier" contenant les éléments de menu "Ouvrir" et "Enregistrer" est créé avec
fyne.NewMenu("File", openMenuItem, fyne.NewMenuItem("Save", getSaveMenuFunc(w, src))). Lorsque l'élément de menu "Save" est cliqué, il déclenche également un dialogue de sélection de fichier, mais cette fois pour sauver le contenu des deux zones de textesrcetdstdans un fichier.Enfin, le menu principal de la fenêtre est défini avec
w.SetMainMenu(fyne.NewMainMenu(mainMenu)).
Donc, essentiellement, le menu est construit en ajoutant des MenuItem individuels à un Menu, qui est ensuite ajouté à un MainMenu qui est défini comme le menu principal de la fenêtre. Chaque MenuItem peut avoir une fonction associée qui sera déclenchée lors du clic sur cet élément de menu, ainsi qu'un raccourci clavier qui peut déclencher la même fonction.