
io.github.mmm.ui.fx.widget.menu.nav.FxAbstractMenuWithItems Maven / Gradle / Ivy
/* Copyright (c) The m-m-m Team, Licensed under the Apache License, Version 2.0
* http://www.apache.org/licenses/LICENSE-2.0 */
package io.github.mmm.ui.fx.widget.menu.nav;
import io.github.mmm.ui.api.event.UiClickEventListener;
import io.github.mmm.ui.api.widget.menu.UiAbstractMenuEntry;
import io.github.mmm.ui.api.widget.menu.UiAbstractMenuWithItems;
import io.github.mmm.ui.api.widget.menu.UiMenu;
import io.github.mmm.ui.api.widget.menu.UiMenuItem;
import io.github.mmm.ui.api.widget.menu.UiMenuItemSeparator;
import io.github.mmm.ui.api.widget.menu.UiNavigationBar;
import io.github.mmm.ui.fx.widget.composite.FxRemovableComposite;
import javafx.scene.Node;
import javafx.scene.control.TreeItem;
/**
* Implementation of {@link UiAbstractMenuWithItems} for JavaFx and {@link FxNavigationBar}.
*
* @param type of {@link #getWidget() JavaFx widget}.
* @since 1.0.0
*/
public abstract class FxAbstractMenuWithItems extends FxRemovableComposite
implements UiAbstractMenuWithItems, FxNavigationEntry {
private final TreeItem treeItem;
/**
* The constructor.
*
* @param widget the {@link #getWidget() JavaFx widget}.
*/
public FxAbstractMenuWithItems(W widget) {
super(widget);
if (this instanceof UiNavigationBar) {
this.treeItem = new TreeItem<>();
} else {
this.treeItem = new TreeItem<>(widget);
}
this.treeItem.setExpanded(true);
}
@Override
public TreeItem getTreeItem() {
return this.treeItem;
}
@Override
public UiMenu addMenu(String text, int index) {
FxNavigationMenu menu = new FxNavigationMenu();
menu.setText(text);
addChild(menu, index);
return menu;
}
@Override
public UiMenuItem addItem(String text, UiClickEventListener listener, int index) {
FxNavigationItem item = new FxNavigationItem();
if (text != null) {
item.setText(text);
}
if (listener != null) {
item.addListener(listener);
}
addChild(item, index);
return item;
}
@Override
public UiMenuItemSeparator addSeparator(int index) {
FxNavigationItemSeparator separator = new FxNavigationItemSeparator();
addChild(separator, index);
return separator;
}
private void addChild(UiAbstractMenuEntry child, int index) {
setParent(child, this);
TreeItem childItem = ((FxNavigationEntry) child).getTreeItem();
if (index == -1) {
this.treeItem.getChildren().add(childItem);
this.children.add(child);
} else {
this.treeItem.getChildren().add(index, childItem);
this.children.add(index, child);
}
}
@Override
protected void removeChildWidget(UiAbstractMenuEntry child, int index) {
this.treeItem.getChildren().remove(index);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy