Ein Menu Model ist ein Model für Menüs. Dazu zählen die
Main Menüs in einer
Menu Bar,
Sub Menüs,
Popup Menüs oder
Toolbar Menüs. Es folgt
eine Beschreibung der zusätzlich zu
IItemModel
vorhandenen Methoden der Schnittstelle
IMenuModel
:
Mit Hilfe der folgenden Methoden können bereits existierende Items hinzugefügt werden:
void addItem(final IMenuItemModel item); void addItem(final int index, final IMenuItemModel item);
Mit den folgenden Methoden lassen sich Items mit Hilfe von Item Model Buildern hinzufügen:
<MODEL_TYPE extends IMenuItemModel, BUILDER_TYPE extends IItemModelBuilder<?, MODEL_TYPE>> MODEL_TYPE addItem(final BUILDER_TYPE itemBuilder); <MODEL_TYPE extends IMenuItemModel, BUILDER_TYPE extends IItemModelBuilder<?, MODEL_TYPE>> MODEL_TYPE addItem(int index, final BUILDER_TYPE itemBuilder);
Dabei wird beim Hinzufügen die build()
Methode aufgerufen, das gebaute Item hinzugefügt und
zurückgegeben. Damit können zum Beispiel Konstrukte der
folgenden Art realisiert werden:
1 IActionItemModel action = menu.addItem(ActionItemModel.builder().setText("Action")); 2 IMenuModel subMenu = menu.addItem(MenuModel.builder().setText("SubMenu"));
Die folgenden Methoden erlauben das Erstellen und Hinzufügen von Items mit einem Aufruf:
IActionItemModel addAction(IAction action); IActionItemModel addAction(final int index, IAction action); IActionItemModel addActionItem(); IActionItemModel addActionItem(String text); IActionItemModel addActionItem(String text, String toolTipText); IActionItemModel addActionItem(String text, IImageConstant icon); IActionItemModel addActionItem(String text, String toolTipText, IImageConstant icon); ICheckedItemModel addCheckedItem(); ICheckedItemModel addCheckedItem(String text); ICheckedItemModel addCheckedItem(String text, String toolTipText); ICheckedItemModel addCheckedItem(String text, IImageConstant icon); ICheckedItemModel addCheckedItem(String text, String toolTipText, IImageConstant icon); IRadioItemModel addRadioItem(); IRadioItemModel addRadioItem(String text); IRadioItemModel addRadioItem(String text, String toolTipText); IRadioItemModel addRadioItem(String text, IImageConstant icon); IRadioItemModel addRadioItem(String text, String toolTipText, IImageConstant icon); ISeparatorItemModel addSeparator(); ISeparatorItemModel addSeparator(String id); ISeparatorItemModel addSeparator(int index); IMenuModel addMenu(); IMenuModel addMenu(String text); IMenuModel addMenu(String text, String toolTipText); IMenuModel addMenu(String text, IImageConstant icon); IMenuModel addMenu(String text, String toolTipText, IImageConstant icon);
Dabei wird (mit Hilfe der Parameter) ein neues Item Model erzeugt, hinzugefügt und zurückgegeben. Das folgende Beispiel demonstriert die Verwendung:
1 MenuModel menu = new MenuModel("Menu"); 2 3 IActionItemModel action1 = menu.addActionItem("Action1"); 4 IActionItemModel action2 = menu.addActionItem("Action2"); 5 IActionItemModel action3 = menu.addActionItem("Action3"); 6 7 menu.addSeparator(); 8 ICheckedItemModel option1 = menu.addCheckedItem("Option1"); 9 ICheckedItemModel option2 = menu.addCheckedItem("Option2"); 10 option2.setSelected(true); 11 12 menu.addSeparator(); 13 IRadioItemModel radio1 = menu.addRadioItem("Radio1"); 14 radio1.setSelected(true); 15 IRadioItemModel radio2 = menu.addRadioItem("Radio2"); 16 IRadioItemModel radio3 = menu.addRadioItem("Radio3"); 17 18 IMenuModel subMenu = menu.addMenu("Submenu"); 19 IActionItemModel action4 = subMenu.addActionItem("Action4"); 20 IActionItemModel action5 = subMenu.addActionItem("Action5");
Die folgende Abbildung zeigt das Ergebnis:
Die folgenden Methoden können verwendet werden, um ein Item an eine bestimmte Stelle in einem Menu (inklusive Sub Menüs) hinzuzufügen:
void addBefore(IMenuItemModel newItem, String... idPath); void addAfter(IMenuItemModel newItem, String... idPath);
Der idPath
gibt dabei den Pfad der id´s an,
über welche die Einfügestelle lokalisiert werden kann. Ist
diese nicht vorhanden, wird eine
IllegalArgumentException
geworfen. Mittels
der Methode
findItemByPath(String... idPath)
kann vorab
überprüft werden, ob der Pfad vorhanden ist.
Die Verwendung soll anhand eines Beispiels demonstriert werden. Der folgende Code erzeugt ein Menü und fügt einen Separator hinzu (Zeile 3), zu dem man Custom Actions hinzugefügen können soll:
1 final MenuModel menu = new MenuModel("Menu"); 2 menu.addItem(save); 3 menu.addSeparator(CUSTOM_ACTIONS); 4 menu.addSeparator(EDIT_ACTIONS); 5 menu.addItem(copy); 6 menu.addItem(paste);
An einer anderen Stelle könnte man eine Contribution zum Menü wie folgt machen:
1 final ActionItemModel customAction = new ActionItemModel("Custom action"); 2 menu.addAfter(customAction, CUSTOM_ACTIONS);
Die folgende Abbildung zeigt das Ergebnis:
Mit Hilfe der folgenden Methode werden alle Items der übergebenen Menüs hinzugefügt:
void addItemsOfModel(IMenuModel menuModel);
Dabei wird eine Referenz der Items hinzugefügt und keine Kopie!
Mit Hilfe der folgenden Methoden können Items aus einem Menü entfernt werden:
void removeItem(final IMenuItemModel item); void removeItem(int index); void removeAllItems();
Um sich über das Hinzufügen oder Entfernen von Items
informieren zu lassen, kann ein
IListModelListener
verwendet werden:
void addListModelListener(IListModelListener listener); void removeListModelListener(IListModelListener listener);
Dieser hat die folgenden Methoden:
void afterChildAdded(int index); void beforeChildRemove(int index); void afterChildRemoved(int index);
Die folgende Methode liefert eine nicht modifizierbare Kopie der aktuell vorhandenen Menu Item Models des Menu Model.
List<IMenuItemModel> getChildren();
Um ein Item Anhand eines id Pfades zu finden, kann die folgende Methode verwendet werden:
IMenuItemModel findItemByPath(String... idPath);
Existiert kein solches Item im Menü, wird null zurückgegeben.
Mit Hilfe der folgenden Methoden kann ein Decorator hinzugefügt werden, der alle Actions des Menüs (inklusive aller Untermenüs) dekoriert:
void addDecorator(IDecorator<IAction> decorator); void removeDecorator(IDecorator<IAction> decorator);
Die Dekorierung betrifft alle derzeit vorhanden und zukünftig hinzugefügten Actions. Für weitere Details zu Actions siehe auch Actions und Commands.
Die Schnittstelle IMenuModelBuilder
ist von
IItemModelBuilder
abgeleitet und liefert einen konkreten Builder für Menu
Models. Sie hat keine zusätzlichen Methoden. Eine Instanz
erhält man von der Klasse
org.jowidgets.tools.model.item.MenuModel
.
Die Klasse
org.jowidgets.tools.model.item.MenuModel
liefert zum Einen statische Methoden für die Erzeugung eines
IMenuModelBuilder
. Zum Anderen
implementiert die Klasse die Schnittstelle
IMenuModel
. Das folgende Beispiel zeigt die
Verwendung des Builders:
1 final IMenuModel menu 2 = MenuModel 3 .builder() 4 .setText("Edit menu") 5 .setIcon(IconsSmall.EDIT) 6 .build();
Mit Hilfe einer Instantiierung mittels new
kann das gleiche so erreicht werden:
1 IMenuModel menu = new MenuModel("Edit menu", IconsSmall.EDIT);