package magic.ui.widget;
import java.awt.Cursor;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import javax.swing.SwingUtilities;
import magic.data.MagicIcon;
import magic.ui.MagicImages;
import magic.ui.helpers.ImageHelper;
import magic.ui.utility.MagicStyle;
@SuppressWarnings("serial")
public class MenuIconLabel extends JLabel {
private static final ImageIcon NORMAL_ICON = MagicImages.getIcon(MagicIcon.MENU);
private static final Icon HILITE_ICON = ImageHelper.getRecoloredIcon(NORMAL_ICON, MagicStyle.getRolloverColor());
private static final Icon PRESSED_ICON = ImageHelper.getRecoloredIcon(NORMAL_ICON, MagicStyle.getPressedColor());
private JPopupMenu menu;
public MenuIconLabel() {
this.menu = null;
setIcon(null);
setMouseListener();
}
public MenuIconLabel(final JPopupMenu aMenu) {
this.menu = aMenu;
setIcon(NORMAL_ICON);
setMouseListener();
}
private void setMouseListener() {
addMouseListener(new MouseAdapter() {
private boolean isMenuVisible = false;
@Override
public void mousePressed(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
isMenuVisible = menu.isVisible();
setIcon(PRESSED_ICON);
}
}
@Override
public void mouseReleased(MouseEvent e) {
if (SwingUtilities.isLeftMouseButton(e)) {
setIcon(HILITE_ICON);
if (isMenuVisible == false) {
final Rectangle rect = getBounds();
menu.show(MenuIconLabel.this.getParent(), rect.x, rect.y + rect.height + 2);
isMenuVisible = true;
} else {
isMenuVisible = false;
}
}
}
@Override
public void mouseEntered(MouseEvent e) {
setIcon(HILITE_ICON);
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
}
@Override
public void mouseExited(MouseEvent e) {
setIcon(NORMAL_ICON);
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}
});
}
void setPopupMenu(JPopupMenu aMenu) {
this.menu = aMenu;
setIcon(aMenu != null ? NORMAL_ICON : null);
}
}