/**
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 *
 * Copyright (C)
 * <a href="http://www.inab.org">Spanish National Institute of Bioinformatics (INB)</a>
 * <a href="http://www.bsc.es">Barcelona Supercomputing Center (BSC)</a>
 * <a href="http://inb.bsc.es">Computational Node 6</a>
 */

package org.inb.swing;

import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.border.LineBorder;

/**
 * Light-weight JLabel based button.
 * 
 * @author Dmitry Repchevsky
 */

public class LabelButton extends JLabel implements MouseListener, AWTEventListener
{
    public LabelButton(Icon icon)
    {
        super(icon);

        setOpaque(false);
        setBorder(new LineBorder(Color.GRAY, 1));

        addMouseListener(this);
        Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.MOUSE_EVENT_MASK);
    }

    public void mouseEntered(MouseEvent e)
    {
        setBorder(new LineBorder(Color.RED, 1));
    }

    public void mouseExited(MouseEvent e)
    {
        setBorder(new LineBorder(Color.GRAY, 1));
    }

    public void mouseClicked(MouseEvent e) {}
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}

    public void eventDispatched(AWTEvent event)
    {
        if (this == event.getSource() && event instanceof InputEvent)
        {
            InputEvent iEvent = (InputEvent)event;
            if (isEnabled())
            {
                final int modifier = iEvent.getModifiersEx();

                if (modifier == InputEvent.BUTTON1_DOWN_MASK ||
                    modifier == InputEvent.BUTTON2_DOWN_MASK ||
                    modifier == InputEvent.BUTTON3_DOWN_MASK )
                {
                    requestFocusInWindow(true);
                }
            }
            else
            {
                iEvent.consume();
            }
        }
    }
}
