menu.adoc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. = menu
  2. :revnumber: 2.0
  3. :revdate: 2020/07/25
  4. == Menu Class
  5. The Menu class extends ScrollArea as Menu’s can be resizable and scrollable if the behaviors are enabled.
  6. Menus contain a list of MenuItems, which provide mapping for sub-menus. This implementation of menu’s negates the need for any form of Menu Manager as the Screen, by default, handles delegating Mouse Events and therefore is (in a sense) a Menu Manager. Menus utilize a single text element with separate highlight element, to keep the rendered meshes to count of 3 for any length menu.
  7. Features:
  8. * Unlimited menu item list
  9. * Unlimited sub-menu mapping
  10. * MenuItem toggle states (semi-work-in-progress here)
  11. Menu utilizes the standard 3 constructors as shown in the xref:gui/tonegodgui/quickstart.adoc[Quick Start Guide] with the addition of a single boolean:
  12. * isScrollable – appended to the end of the parameter list in each constructor
  13. === Abstract Event Methods:
  14. [source,java]
  15. ----
  16. public void onMenuItemClicked(int index, Object value);
  17. ----
  18. === Methods specific to the Menu Class:
  19. [source,java]
  20. ----
  21. // Menu manipulation
  22. menu.addMenuItem(String caption, Object value, Menu subMenu); // null if no sub-menu
  23. menu.addMenuItem(String caption, Object value, Menu subMenu, boolean isToggleItem);
  24. menu.addMenuItem(String caption, Object value, Menu subMenu, boolean isToggleItem, boolean isToggled);
  25. menu.insertMenuItem(int index, String caption, Object value, Menu subMenu); // null if no sub-menu
  26. menu.insertMenuItem(int index, String caption, Object value, Menu subMenu, boolean isToggleItem)
  27. menu.insertMenuItem(int index, String caption, Object value, Menu subMenu, boolean isToggleItem, boolean isToggled)
  28. menu.removeMenuItem(int index);
  29. menu.removeMenuItem(String caption);
  30. menu.removeMenuItem(Object value);
  31. menu.removeFirstMenuItem();
  32. menu.removeLastMenuItem();
  33. // Configuration related methods
  34. menu.setMenuOverhang(float menuOverhang);
  35. menu.getMenuOverhang();
  36. menu.getMenuItemHeight();
  37. menu.getMenuPadding();
  38. menu.setPreferredSize(Vector2f preferredSize)
  39. //Menu item related methods
  40. menu.getMenuItems(); // point to menu item list
  41. menu.getMenuItem(int index);
  42. // Hide/show methods
  43. menu.showMenu(Menu caller, float x, float y); // Caller is null if not show by another menu
  44. menu.hideMenu();
  45. // Setting & retrieving an external caller element
  46. menu.setCallerElement(Element el);
  47. menu.getCallerElement();
  48. ----
  49. === Hooks
  50. [source,java]
  51. ----
  52. public void controlHideHook() { }
  53. ----
  54. == Menu Examples:
  55. Cut & Paste the code below into the simpleInitApp() method of a new JME project to try it out.
  56. [source,java]
  57. ----
  58. flyCam.setDragToRotate(true);
  59. inputManager.setCursorVisible(true);
  60. screen = new Screen(this);
  61. guiNode.addControl(screen);
  62. Menu subMenu = new Menu(
  63. screen,
  64. new Vector2f(0,0),
  65. false
  66. ) {
  67. @Override
  68. public void onMenuItemClicked(int index, Object value, boolean isToggled) { }
  69. };
  70. // Add a menu item
  71. subMenu.addMenuItem("Some string caption 1", null, null);
  72. // Add a toggle-able menu item (checkbox)
  73. subMenu.addMenuItem("Some string caption 2", null, null, true);
  74. // Add a toggle-able menu item and set the default state of the checkbox to checked
  75. subMenu.addMenuItem("Some string caption 3", null, null, true, true);
  76. screen.addElement(subMenu);
  77. final Menu menu = new Menu(
  78. screen,
  79. new Vector2f(0,0),
  80. false
  81. ) {
  82. @Override
  83. public void onMenuItemClicked(int index, Object value, boolean isToggled) { }
  84. };
  85. // Add subMenu as a sub-menu to this menu item
  86. menu.addMenuItem("Some caption", null, subMenu);
  87. screen.addElement(menu);
  88. ButtonAdapter b = new ButtonAdapter(screen, new Vector2f(50,50)) {
  89. @Override
  90. public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean isToggled) {
  91. menu.showMenu(null, getAbsoluteX(), getAbsoluteY()-menu.getHeight());
  92. }
  93. };
  94. b.setText("Show Menu");
  95. screen.addElement(b);
  96. ----