/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2011, Open Source Geospatial Foundation (OSGeo)
*
* This library 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;
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotools.swing.control;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPopupMenu;
/**
* A status bar item with an icon which displays a pop-up menu when clicked.
*
* @author Michael Bedward
* @since 8.0
* @source $URL$
* @version $Id$
*/
class MenuStatusBarItem extends StatusBarItem {
/**
* Creates a new item to display the given menu;
*
* @param name the item name
* @param icon the icon to display
* @param menu the pop-up menu to launch when the item is clicked
*
* @throws IllegalArgumentException if {@code icon} or {@code menu} are {@code null}
*/
public MenuStatusBarItem(String name, final ImageIcon icon, final JPopupMenu menu) {
this(name, icon, new PopupMenuProvider() {
{
if (menu == null) {
throw new IllegalArgumentException("menu must not be null");
}
}
@Override
public JPopupMenu getMenu() {
return menu;
}
});
}
/**
* Creates a new item to display a menu which will be supplired by
* {@code menuProvider}.
*
* @param name the item name
* @param icon the icon to display
* @param menuProvider an object to provide a (possibly dynamic) pop-up menu
*
* @throws IllegalArgumentException if {@code icon} or {@code menuPRovider}
* are {@code null}
*/
public MenuStatusBarItem(String name, final ImageIcon icon,
final PopupMenuProvider menuProvider) {
super(name, false);
if (icon == null) {
throw new IllegalArgumentException("icon must not be null");
}
if (menuProvider == null) {
throw new IllegalArgumentException("menuProvider must not be null");
}
final JButton btn = new JButton(icon);
btn.setBorderPainted(false);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
menuProvider.getMenu().show(btn, 0, 0);
}
});
add(btn);
}
}