Platforms to show: All Mac Windows Linux Cross-Platform

/MacBase/Menus/NSMenuPopupEvents


Required plugins for this example: MBS MacBase Plugin, MBS Main Plugin

Last modified Sat, 27th Dec 2024.

You find this example project in your MBS Xojo Plugin download as a Xojo project file within the examples folder: /MacBase/Menus/NSMenuPopupEvents

Download this example: NSMenuPopupEvents.zip

Project "NSMenuPopupEvents.xojo_binary_project"
Class App Inherits DesktopApplication
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
EventHandler Sub Opening() End EventHandler
Sub Constructor() End Sub
End Class
Class Window1 Inherits DesktopWindow
Control Label1 Inherits DesktopLabel
ControlInstance Label1 Inherits DesktopLabel
End Control
Control TextArea1 Inherits DesktopTextArea
ControlInstance TextArea1 Inherits DesktopTextArea
EventHandler Function ConstructContextualMenu(base As DesktopMenuItem, x As Integer, y As Integer) As Boolean System.DebugLog CurrentMethodName // build a context menu using Xojo methods ' Add some items base.AddMenu(New DesktopMenuItem("Test 1")) base.AddMenu(New DesktopMenuItem("Test 2")) base.AddMenu(New DesktopMenuItem("Test 3")) ' Add a Separator base.AddMenu(New DesktopMenuItem(DesktopMenuItem.TextSeparator)) ' Add a sub menu Var submenu As New DesktopMenuItem("SubMenu") submenu.AddMenu(New DesktopMenuItem("SubMenu Test 1")) submenu.AddMenu(New DesktopMenuItem("SubMenu Test 2")) submenu.AddMenu(New DesktopMenuItem("SubMenu Test 3")) base.AddMenu(submenu) ' Add a Separator base.AddMenu(New DesktopMenuItem(DesktopMenuItem.TextSeparator)) Return True End EventHandler
EventHandler Function ContextualMenuItemSelected(selectedItem As DesktopMenuItem) As Boolean System.DebugLog CurrentMethodName If selectedItem = Nil Then System.DebugLog "none selected" Else System.DebugLog "selected: "+selectedItem.Text End If End EventHandler
End Control
Control Button1 Inherits DesktopButton
ControlInstance Button1 Inherits DesktopButton
EventHandler Sub Pressed() System.DebugLog CurrentMethodName // build a context menu using Xojo methods Var base As New DesktopMenuitem ' Add some items base.AddMenu(New DesktopMenuItem("Test 1")) base.AddMenu(New DesktopMenuItem("Test 2")) base.AddMenu(New DesktopMenuItem("Test 3")) ' Add a Separator base.AddMenu(New DesktopMenuItem(DesktopMenuItem.TextSeparator)) ' Add a sub menu Var submenu As New DesktopMenuItem("SubMenu") submenu.AddMenu(New DesktopMenuItem("SubMenu Test 1")) submenu.AddMenu(New DesktopMenuItem("SubMenu Test 2")) submenu.AddMenu(New DesktopMenuItem("SubMenu Test 3")) base.AddMenu(submenu) ' Add a Separator base.AddMenu(New DesktopMenuItem(DesktopMenuItem.TextSeparator)) // and show it! Call base.PopUp End EventHandler
End Control
EventHandler Function ConstructContextualMenu(base As DesktopMenuItem, x As Integer, y As Integer) As Boolean System.DebugLog CurrentMethodName // build a context menu using Xojo methods ' Add some items base.AddMenu(New DesktopMenuItem("Test 1")) base.AddMenu(New DesktopMenuItem("Test 2")) base.AddMenu(New DesktopMenuItem("Test 3")) ' Add a Separator base.AddMenu(New DesktopMenuItem(DesktopMenuItem.TextSeparator)) ' Add a sub menu Var submenu As New DesktopMenuItem("SubMenu") submenu.AddMenu(New DesktopMenuItem("SubMenu Test 1")) submenu.AddMenu(New DesktopMenuItem("SubMenu Test 2")) submenu.AddMenu(New DesktopMenuItem("SubMenu Test 3")) base.AddMenu(submenu) ' Add a Separator base.AddMenu(New DesktopMenuItem(DesktopMenuItem.TextSeparator)) Return True End EventHandler
EventHandler Function ContextualMenuItemSelected(selectedItem As DesktopMenuItem) As Boolean System.DebugLog CurrentMethodName If selectedItem = Nil Then System.DebugLog "none selected" Else System.DebugLog "selected: "+selectedItem.Text End If End EventHandler
EventHandler Sub Opening() // just initialize early, so we can add ourselves between the app and NSMenu m = New MyNSMenuPopupEvents End EventHandler
Property m As MyNSMenuPopupEvents
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
MenuItem HelpMenu = "&Help"
End MenuBar
Sign
End Sign
Class MyNSMenuPopupEvents Inherits NSMenuPopupEventsMBS
EventHandler Sub didCloseMenu(menu as NSMenuMBS, theEvent as NSEventMBS, view as NSViewMBS) // the menu closed System.DebugLog CurrentMethodName End EventHandler
EventHandler Function popUpMenuAtPosition(menu as NSMenuMBS, item as NSMenuItemMBS, location as NSPointMBS, view as NSViewMBS) As Boolean // the menu pops up and you can modify it // will also get an willOpenMenu event next System.DebugLog CurrentMethodName Var title As String = menu.Title Var items() As NSMenuItemMBS = menu.items Var it As NSMenuItemMBS = items(0) it.Title = it.Title + " !" // let macOS add more menu.allowsContextMenuPlugIns = True // macOS 15.2 or newer 'menu.automaticallyInsertsWritingToolsItems = True // return true to disable menu End EventHandler
EventHandler Sub willOpenMenu(menu as NSMenuMBS, theEvent as NSEventMBS, view as NSViewMBS) // the menu opens and you can modify it System.DebugLog CurrentMethodName Var title As String = menu.Title Var items() As NSMenuItemMBS = menu.items Var it As NSMenuItemMBS = items(0) it.Title = it.Title + " 😀" // let macOS add more menu.allowsContextMenuPlugIns = True // macOS 15.2 or newer 'menu.automaticallyInsertsWritingToolsItems = True // return true to disable menu End EventHandler
End Class
End Project

Download this example: NSMenuPopupEvents.zip

The items on this page are in the following plugins: MBS MacBase Plugin.


The biggest plugin in space...