You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
290 lines
9.9 KiB
290 lines
9.9 KiB
AppType=JavaFX
|
|
Build1=Default,com.stevel05.menumanager
|
|
File1=1.bjl
|
|
File2=icon.png
|
|
File3=MenuManager.css
|
|
FileGroup1=Default Group
|
|
FileGroup2=Default Group
|
|
FileGroup3=Default Group
|
|
Group=Default Group
|
|
Library1=jcore
|
|
Library2=jfx
|
|
Library3=javaobject
|
|
Module1=MenuManager
|
|
Module2=MenuCheckBoxClass
|
|
Module3=MenuManagerUtils
|
|
Module4=KeyCombinations
|
|
Module5=MenuItemTextClass
|
|
Module6=MenuCustomClass
|
|
NumberOfFiles=3
|
|
NumberOfLibraries=3
|
|
NumberOfModules=6
|
|
Version=6.01
|
|
@EndOfDesignText@
|
|
#Region Project Attributes
|
|
#MainFormWidth: 600
|
|
#MainFormHeight: 400
|
|
#LibraryName: jMenuManager
|
|
#LibraryAuthor: Steve Laming
|
|
#LibraryVersion: 0.03
|
|
#End Region
|
|
|
|
'Requires B4j V5.9+
|
|
|
|
Sub Process_Globals
|
|
Private fx As JFX
|
|
Private MainForm As Form
|
|
Private MenuBar1 As MenuBar
|
|
Private ContextMenu1 As ContextMenu
|
|
Private Label1 As Label
|
|
Private DisabledIcon As MenuItemTextClass
|
|
'Menumanager object need to be Global as they manage the callbacks throughout the life of the menu.
|
|
Private FileMenu,HelpMenu,MMContext As MenuManager
|
|
|
|
End Sub
|
|
|
|
Sub AppStart (Form1 As Form, Args() As String)
|
|
MainForm = Form1
|
|
MainForm.RootPane.LoadLayout("1") 'Load the layout file.
|
|
MainForm.Stylesheets.Add(File.GetUri(File.DirAssets,"MenuManager.css"))
|
|
|
|
BuildMenus
|
|
MainForm.Show
|
|
End Sub
|
|
|
|
Private Sub BuildMenus
|
|
|
|
MenuBar1.Menus.Clear
|
|
|
|
FileMenu.Initialize(Me,"Menu","File")
|
|
|
|
|
|
'*******************************************************************************************************************
|
|
'Items attached to the main menu
|
|
'*******************************************************************************************************************
|
|
Dim SubMenu2 As List = Array( _
|
|
FileMenu.MenuCheckBox("Option 1").SetTag("Option 1"), _
|
|
FileMenu.MenuSeparator, _
|
|
FileMenu.MenuCheckBox("Option 2 Alternate Event Name").SetEventName("MCB").SetTag("Option 2"), _
|
|
FileMenu.MenuCheckBox("Option 3").SetTag("Option 3").SetShortCutKey(Array As String(KeyCombinations.KC_CONTROL,KeyCombinations.KC_SHIFT,"K")))
|
|
|
|
DisabledIcon = FileMenu.MenuText("Item With MaterialIcon As Icon").SetTag("MA1").SetGraphic(FileMenu.NewMaterialIcon(Chr(0xE14B),fx.Colors.Red)).SetEnabled(False)
|
|
|
|
Dim SubMenu1 As List = Array( _
|
|
FileMenu.MenuText("Item With ShortCut").SetTag("IWS1").SetShortCutKey(Array As String(KeyCombinations.KC_CONTROL,KeyCombinations.KC_SHIFT,"L")), _
|
|
FileMenu.MenuText("Normal Item").SetTag("NIT1"), _
|
|
FileMenu.MenuText("Item With FontAwesom As Icon").SetTag("FA1").SetGraphic(FileMenu.NewFontAwesome(Chr(0xF1E3),fx.Colors.Black)), _
|
|
DisabledIcon, _
|
|
FileMenu.MenuText("Enable above option").SetTag("EnableMA1"), _
|
|
FileMenu.MenuText("Item With image As Icon").SetTag("Img1").SetGraphic(FileMenu.NewImage(File.DirAssets,"icon.png")), _
|
|
FileMenu.MenuSeparator, _
|
|
FileMenu.MenuSubMenu("Options",SubMenu2))
|
|
|
|
'
|
|
'Add a menutitle, menuText, Seperator or CheckBox (you can add more see: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/MMContext.html
|
|
'for items available
|
|
'
|
|
|
|
'
|
|
'Create the objects for the custom menuitems
|
|
'
|
|
Dim Lbl As Label
|
|
Lbl.Initialize("")
|
|
Lbl.Text = "Item with Tooltip"
|
|
Lbl.TooltipText = "Tooltip for label"
|
|
|
|
Dim Lbl2 As Label
|
|
Lbl2.Initialize("")
|
|
Lbl2.Font = fx.CreateFontAwesome(15)
|
|
Lbl2.Text = Chr(0xF0A1)
|
|
Lbl2.TextColor = fx.Colors.black
|
|
|
|
Dim Lbl3 As Label
|
|
Lbl3.Initialize("")
|
|
Lbl3.Text = "another label with tooltip and Icon"
|
|
Lbl3.TooltipText = "Another tooltip"
|
|
Lbl3.TextColor = fx.Colors.black
|
|
|
|
'
|
|
'An HBox is useful as it will align items horizontally without any effort.
|
|
'Full Docs are here: https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/HBox.html
|
|
'The item with HBox is sent to a different Event callback as it needs to be unwrapped before it can be accessed.
|
|
'
|
|
Dim HBox As JavaObject
|
|
HBox.InitializeNewInstance("javafx.scene.layout.HBox",Null)
|
|
HBox.RunMethodJO("getChildren",Null).RunMethod("add",Array(Lbl2))
|
|
HBox.RunMethodJO("getChildren",Null).RunMethod("add",Array(Lbl3))
|
|
HBox.RunMethod("setSpacing",Array(10.0))
|
|
|
|
'
|
|
'Add them along with submenu1 to the main menu
|
|
'
|
|
Dim MainMenu As List = Array As Object( _
|
|
FileMenu.MenuSeparator, _
|
|
FileMenu.MenuSubMenu("SubMenu1",SubMenu1), _
|
|
FileMenu.MenuSeparator, _
|
|
FileMenu.MenuText("Menuitem Alternate Event Name").SetTag("AEN").SetEventName("AltEN"), _
|
|
FileMenu.MenuCustom(Lbl).SetTag("IWT"), _
|
|
FileMenu.MenuCustom(HBox).SetTag("IWT2").SetEventName("HBox") _
|
|
)
|
|
|
|
|
|
|
|
'*******************************************************************************************************************
|
|
'Items attached to the help menu
|
|
'*******************************************************************************************************************
|
|
|
|
HelpMenu.Initialize(Me,"Menu","Help")
|
|
Dim Simple2 As List = HelpMenu.SimpleMenuList(Array As String("About"))
|
|
|
|
|
|
|
|
|
|
'*******************************************************************************************************************
|
|
'Build and add the menus to the menu bar
|
|
'*******************************************************************************************************************
|
|
|
|
'Get the Menumanager to build the menus
|
|
FileMenu.AddItems(MainMenu,True)
|
|
HelpMenu.AddItems(Simple2,True)
|
|
|
|
'Add the built menus to the MenuBar
|
|
MenuBar1.Menus.Add(FileMenu.Menu)
|
|
MenuBar1.Menus.Add(HelpMenu.menu)
|
|
|
|
|
|
'*******************************************************************************************************************
|
|
'MMContext with submenus
|
|
'*******************************************************************************************************************
|
|
|
|
MMContext.Initialize(Me,"MContext","")
|
|
|
|
'
|
|
'Need to set the MENUTYPE for a context menu
|
|
'
|
|
MMContext.MenuType = MMContext.MENUTYPE_CONTEXTMENU
|
|
|
|
'
|
|
'Note: of you want to change the state of a menu checkbox in code, you will need to keep a reference to it as a global variable,
|
|
'the same goes for changing any attributes once the menus are built. See the disabledicon in the main menu.
|
|
|
|
Dim Lbl As Label
|
|
Lbl.Initialize("")
|
|
Lbl.Text = "Item with Tooltip"
|
|
Lbl.TooltipText = "Tooltip for label"
|
|
'
|
|
Dim SubMenu2 As List = Array( _
|
|
MMContext.MenuCheckBox("Option 1").SetTag("CM Option 1"), _
|
|
MMContext.MenuSeparator, _
|
|
MMContext.MenuCheckBox("Option 2").SetTag("CM Option 2"), _
|
|
MMContext.MenuCheckBox("Option 3").SetTag("CM Option 3"))
|
|
|
|
Dim SubMenu1 As List = Array( _
|
|
MMContext.MenuText("Item 2-1").SetTag("CM Item 2-1"), _
|
|
MMContext.MenuSeparator, _
|
|
MMContext.MenuSubMenu("SubMenu2",SubMenu2), _
|
|
MMContext.MenuSeparator, _
|
|
MMContext.MenuText("Item With image As Icon").SetTag("CM Img 1").SetGraphic(FileMenu.NewImage(File.DirAssets,"icon.png")))
|
|
|
|
Dim SimpleMenu As List = MMContext.SimpleMenuList(Array As String("Simple 1","Simple 2","-","Simple 3"))
|
|
|
|
Dim MenuContext As List = Array As Object( _
|
|
MMContext.MenuTitle("MMContextTitle").SetHideOnClick(False,True), _
|
|
MMContext.MenuSeparator, _
|
|
MMContext.MenuSubMenu("SubMenu1",SubMenu1), _
|
|
MMContext.MenuSubMenu("Simple Menu",SimpleMenu), _
|
|
MMContext.MenuSeparator, _
|
|
MMContext.MenuText("Menuitem 1").SetTag("CM MI 1"))
|
|
|
|
'
|
|
'Add the menu to the menu manager for building
|
|
'
|
|
MMContext.AddItems(MenuContext,True)
|
|
MMContext.AddItems(Array(MMContext.MenuCustom(Lbl)),False)
|
|
|
|
'
|
|
'Assign the menu to the context menu, need to keep this as a global variable so we can call it when needed.
|
|
'
|
|
ContextMenu1 = MMContext.Menu
|
|
|
|
End Sub
|
|
|
|
'*******************************************************************************************************************
|
|
'Menu Callbacks
|
|
'*******************************************************************************************************************
|
|
|
|
Sub Menu_CustomAction(MC As MenuCustomClass)
|
|
Dim L As Label = MC.GetContent
|
|
Log("MainMenu Text Activated" & L.Text & " Tag " & MC.GetTag)
|
|
End Sub
|
|
|
|
Sub HBox_CustomAction(MC As MenuCustomClass)
|
|
Dim HBox As JavaObject = MC.GetContent
|
|
Dim Children As List = HBox.RunMethod("getChildren",Null)
|
|
Dim L As Label = Children.Get(1)
|
|
Log("Menu Text Activated" & L.Text & " Tag " & MC.GetTag)
|
|
End Sub
|
|
|
|
'
|
|
'A menu item has been clicked
|
|
'
|
|
Sub Menu_Action(MI As MenuItemTextClass)
|
|
Log("Menu Text Activated " & MI.Text & " Tag " & MI.GetTag)
|
|
|
|
'Enable and disable an item with graphic
|
|
If MI.GetTag = "EnableMA1" Then
|
|
If DisabledIcon.GetEnabled = False Then
|
|
DisabledIcon.SetEnabled(True).SetGraphic(FileMenu.NewMaterialIcon(Chr(0xE876),fx.Colors.Green))
|
|
MI.Text = "Disable Above Item"
|
|
Else
|
|
DisabledIcon.SetEnabled(False).SetGraphic(FileMenu.NewMaterialIcon(Chr(0xE14B),fx.Colors.Red)).SetEnabled(False)
|
|
MI.Text = "Enable Above Item"
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Menu_MenuOpening(M As Menu)
|
|
Log(M & " opening")
|
|
End Sub
|
|
|
|
'
|
|
'A checkbox item has been clicked
|
|
'
|
|
Sub Menu_SelectedChanged(MCB As MenuCheckBoxClass)
|
|
Log(MCB.Text & " Checked = " & MCB.GetSelected & " Tag " & MCB.getTag)
|
|
End Sub
|
|
|
|
'
|
|
'A menu item has been clicked (For alternate Event Name Test)
|
|
'
|
|
Sub AltEn_Action(MI As MenuItemTextClass)
|
|
Log("Alternate EventName Activated Menu Text " & MI.Text & " Tag " & MI.GetTag)
|
|
End Sub
|
|
|
|
|
|
|
|
'*******************************************************************************************************************
|
|
'Show the context menu
|
|
'*******************************************************************************************************************
|
|
|
|
'Show the MMContext if label1 is Right Clicked
|
|
Sub Label1_MousePressed(EventData As MouseEvent)
|
|
If EventData.SecondaryButtonDown Then MenuManagerUtils.AsJO(ContextMenu1).RunMethod("show",Array(Label1,"RIGHT",0.0,0.0))
|
|
End Sub
|
|
|
|
|
|
'*******************************************************************************************************************
|
|
'Context Menu callbacks
|
|
'*******************************************************************************************************************
|
|
|
|
'A checkbox item has been clicked (For alternate Event Name Test)
|
|
Sub MContext_SelectedChanged(MCB As MenuCheckBoxClass)
|
|
Log("6")
|
|
Log("Context Menu Activated " & MCB.Text & " Checked = " & MCB.GetSelected & " Tag " & MCB.getTag)
|
|
End Sub
|
|
|
|
Sub MContext_Action(MI As MenuItemTextClass)
|
|
Log("7")
|
|
Log("ContextMenu Text Activated " & MI.Text & " Tag " & MI.GetTag)
|
|
End Sub
|