package net.codjo.dataprocess.gui.activation.impl;
import net.codjo.dataprocess.gui.activation.spi.JComponentIterator;
import net.codjo.dataprocess.gui.activation.spi.JComponentPod;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.MenuElement;
/**
*
*/
public class JMenuIterator implements JComponentIterator {
private List<JComponentPod> menuList = new ArrayList<JComponentPod>();
private int currentIndex = 0;
public JMenuIterator(JMenuBar menuBar) {
int menuCount = menuBar.getMenuCount();
for (int index = 0; index < menuCount; index++) {
JMenu menu = menuBar.getMenu(index);
menuList.add(new JComponentPod(menu, menu.getText()));
if (menu.getSubElements().length > 0) {
computePopupMenu(menu.getSubElements()[0], menu.getText());
}
}
}
private void computePopupMenu(MenuElement menuElement, String parentPath) {
MenuElement[] subElements = menuElement.getSubElements();
for (MenuElement subElement : subElements) {
if (subElement instanceof JPopupMenu) {
JPopupMenu popupMenu = (JPopupMenu)subElement;
computePopupMenu(popupMenu, parentPath);
}
else if (subElement instanceof JMenu) {
JMenu subMenu = (JMenu)subElement;
menuList.add(new JComponentPod(subMenu, parentPath + ":" + subMenu.getText()));
if (subMenu.getSubElements().length > 0) {
computePopupMenu(subMenu.getSubElements()[0], parentPath + ":" + subMenu.getText());
}
}
else if (subElement instanceof JMenuItem) {
JMenuItem menuItem = (JMenuItem)subElement;
menuList.add(new JComponentPod(menuItem, parentPath + ":" + menuItem.getText()));
}
}
}
public boolean hasMoreComponents() {
return currentIndex < menuList.size();
}
public JComponentPod next() {
return menuList.get(currentIndex++);
}
public void resetIndex() {
currentIndex = 0;
}
}