3.11.5. Menu Model

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:

Hinzufügen von existierenden Items

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);
Hinzufügen von Items mit Hilfe von Item Model Buildern

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"));
Erstellen und Hinzufügen von Items mit einem Aufruf

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:

Abbildung 30. Menu Model Beispiel

Menu Model Beispiel

Hinzufügen von Items relativ zu anderen Items

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:

Abbildung 31. Menu Contribution Beispiel

Menu Contribution Beispiel

Hinzufügen von Items eines anderen Menüs

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!

Entfernen von Items

Mit Hilfe der folgenden Methoden können Items aus einem Menü entfernt werden:

    void removeItem(final IMenuItemModel item);

    void removeItem(int index);

    void removeAllItems();
ListModelListener

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);
Zugriff auf die Items eines Menüs

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.

Action Decorator

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.

Menu Model Builder

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.

Menu Model Instanzen

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);

Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation