All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.anwiba.commons.swing.menu.PopMenuManager Maven / Gradle / Ivy

There is a newer version: 1.2.50
Show newest version
/*
 * #%L
 * anwiba commons swing
 * %%
 * Copyright (C) 2007 - 2016 Andreas Bartels
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 2.1 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */
package net.anwiba.commons.swing.menu;

import java.io.Serializable;
import java.util.Comparator;

import javax.swing.AbstractButton;
import javax.swing.ButtonGroup;
import javax.swing.JMenu;
import javax.swing.JPopupMenu;

import net.anwiba.commons.utilities.registry.KeyValueRegistry;

public class PopMenuManager {

  public static final class MenuItemGroupDescriptionComarator
      implements
      Comparator,
      Serializable {

    private static final long serialVersionUID = 1L;

    @Override
    public int compare(final MenuItemGroupDescription o1, final MenuItemGroupDescription o2) {
      return Integer.valueOf(o1.getWeight()).compareTo(Integer.valueOf(o2.getWeight()));
    }
  }

  private final KeyValueRegistry registry = new KeyValueRegistry<>();
  final Comparator comparator = new MenuItemGroupDescriptionComarator();

  public synchronized void addConfiguration(final PopupMenuActionItemConfiguration menuItem) {

    final MenuItemGroupDescription menuGroupDescription = menuItem.getDescription().getMenuGroupDescription();
    if (!this.registry.contains(menuGroupDescription)) {
      this.registry.register(menuGroupDescription, new MenuItemGroupConfiguration(menuGroupDescription));
    }
    final MenuItemGroupConfiguration groupConfiguration = this.registry.get(menuGroupDescription);
    groupConfiguration.add(menuItem);
  }

  public JPopupMenu getMenu() {
    final JPopupMenu menu = new JPopupMenu();
    return fillMenu(menu);
  }

  private AbstractButton addToMenu(final JPopupMenu menu, final AbstractMenuItemConfiguration menuItemConfiguration) {
    final IMenuItemTypeVisitor visitor = new PopupMenuItemButtomFactory(menu, menuItemConfiguration);
    return menuItemConfiguration.getDescription().getMenuItemType().accept(visitor);
  }

  public boolean isEmpty() {
    return this.registry.isEmpty();
  }

  public JPopupMenu fillMenu(final JPopupMenu menu) {
    final MenuItemGroupConfiguration[] menuGroups = this.registry.getItems(
        this.comparator,
        MenuItemGroupDescription.class,
        MenuItemGroupConfiguration.class);
    for (int i = 0; i < menuGroups.length; i++) {
      if (i > 0) {
        menu.addSeparator();
      }
      final AbstractMenuItemConfiguration[] menuItemConfigurations = menuGroups[i].getMenuItemConfiguration();
      if (menuGroups[i].getDescription().isToggelGroup()) {
        final ButtonGroup group = new ButtonGroup();
        for (final AbstractMenuItemConfiguration menuItemConfiguration : menuItemConfigurations) {
          final AbstractButton button = addToMenu(menu, menuItemConfiguration);
          group.add(button);
        }
      } else {
        for (final AbstractMenuItemConfiguration menuItemConfiguration : menuItemConfigurations) {
          addToMenu(menu, menuItemConfiguration);
        }
      }
    }
    return menu;
  }

  public JMenu fillMenu(final JMenu menu) {
    final MenuItemGroupConfiguration[] menuGroups = this.registry.getItems(
        this.comparator,
        MenuItemGroupDescription.class,
        MenuItemGroupConfiguration.class);
    for (int i = 0; i < menuGroups.length; i++) {
      if (i > 0) {
        menu.addSeparator();
      }
      final AbstractMenuItemConfiguration[] menuItemConfigurations = menuGroups[i].getMenuItemConfiguration();
      if (menuGroups[i].getDescription().isToggelGroup()) {
        final ButtonGroup group = new ButtonGroup();
        for (final AbstractMenuItemConfiguration menuItemConfiguration : menuItemConfigurations) {
          final AbstractButton button = addToMenu(menu, menuItemConfiguration);
          group.add(button);
        }
      } else {
        for (final AbstractMenuItemConfiguration menuItemConfiguration : menuItemConfigurations) {
          addToMenu(menu, menuItemConfiguration);
        }
      }
    }
    return menu;
  }

  private AbstractButton addToMenu(final JMenu menu, final AbstractMenuItemConfiguration menuItemConfiguration) {
    final IMenuItemTypeVisitor visitor = new MenuItemButtomFactory(menu, menuItemConfiguration);
    return menuItemConfiguration.getDescription().getMenuItemType().accept(visitor);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy