Package com.sshtools.ui.awt

Source Code of com.sshtools.ui.awt.ImageButton

package com.sshtools.ui.awt;

import java.awt.Color;
import java.awt.Image;
import java.awt.Insets;
import java.awt.ItemSelectable;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;

import com.sshtools.ui.awt.tooltips.ToolTipManager;

/**
* An button implementation that can display an image.
*
* @author $author$
*/
public class ImageButton extends ImageTextLabel implements MouseListener, ItemSelectable {

    private boolean mouseIsDown = false;
    private Vector listeners, itemListeners;
    private int darkness = -5263441;
    private Image grayImage = null;
    private String actionCommand;
    private Color borderColor;
    private boolean hoverButton;
    private boolean mouseInComponent;
    private int hoverBorder, depressedBorder, normalBorder;
    private String toolTipText;
    private Color hoverBackground = SystemColor.controlLtHighlight;
    private Color hoverForeground = SystemColor.controlText;
    private Color normalBackground = SystemColor.control;
    private Color normalForeground = SystemColor.controlText;
    private Color depressedBackground = SystemColor.controlShadow;
    private Color depressedForeground = SystemColor.controlHighlight;
    private boolean pressed;

    public ImageButton() {
        this(null, null, null);
    }

    public ImageButton(Image image, String text, String actionCommand) {
        this(image, text, actionCommand, FLAT, FLAT, NONE);
    }

    public ImageButton(Image image, String text, String actionCommand, int hoverBorder, int depressedBorder, int normalBorder) {
        super(image, text);
        this.actionCommand = actionCommand;
        this.hoverBorder = hoverBorder;
        this.depressedBorder = depressedBorder;
        this.normalBorder = normalBorder;
        setMargin(new Insets(4, 2, 4, 2));
        setBorderType(hoverBorder);
        addMouseListener(this);
        normalBackground = getBackground();
        normalForeground = getForeground();
    }
   
    public void setEnabled(boolean enabled) {
        if(!enabled) {
            setBorderType(normalBorder);
            super.setBackground(normalBackground);
            super.setForeground(normalForeground);
        }
        super.setEnabled(enabled);
        repaint();
    }
   
    public void setBaseBackground(Color base) {
        if(base == null) {
            setBackground(SystemColor.control);
            hoverBackground = SystemColor.controlHighlight;
            depressedBackground = SystemColor.controlShadow;
        }
        else {
            setBackground(base);
            hoverBackground = base.brighter();
            depressedBackground = base.darker();
        }
    }
   
    public void setBaseForeground(Color base) {
        if(base == null) {
            setForeground(SystemColor.controlText);
            hoverForeground = SystemColor.controlText;
            depressedForeground = SystemColor.controlHighlight;
        }
        else {
            hoverForeground = base.darker();
            depressedForeground = base.brighter();
            setForeground(base);
        }
    }
   
    public void setBackground(Color background) {
        this.normalBackground = background;
        super.setBackground(background);
    }
   
    public void setForeground(Color foreground) {
        this.normalForeground = foreground;
        super.setForeground(foreground);
    }

    /**
     * Set the type of border to use when this is a hover button
     *
     * @param hoverBorder
     */
    public void setHoverBorder(int hoverBorder) {
        this.hoverBorder = hoverBorder;
    }

    /**
     * Set if this is a 'hover button'. If <code>true</code> a border will be
     * raised when the user moves the mouse pointer over this component.
     *
     * @param hoverButton
     */
    public void setHoverButton(boolean hoverButton) {
        this.hoverButton = hoverButton;
        setBorderType(hoverButton ? (mouseInComponent ? hoverBorder : normalBorder) : hoverBorder);

    }
   
    /**
     * Set the background color to use when hovering over a button. <code>null</code>
     * means use default color.
     *
     * @param hoverBackground background color
     */
    public void setHoverBackground(Color hoverBackground) {
        this.hoverBackground = hoverBackground;
    }
   
    /**
     * Set the foreground color to use when hovering over a button. <code>null</code>
     * means use default color.
     *
     * @param hoverForeground foreground color
     */
    public void setHoverForeground(Color hoverForeground) {
        this.hoverForeground = hoverForeground;
    }

    /**
     * Get the action command
     */
    public String getActionCommand() {
        return actionCommand;
    }

    /**
     * Set the action command
     *
     * @param actionCommand
     *            action command
     */
    public void setActionCommand(String actionCommand) {
        this.actionCommand = actionCommand;
    }

    public void setToolTipText(String toolTipText) {
        this.toolTipText = toolTipText;
    }

    public String getToolTipText() {
        return toolTipText;
    }

//    public boolean mouseDown(Event event, int x, int y) {
//        if (isEnabled()) {
//            mouseIsDown = true;
//            setBorderType(depressedBorder);
//        }
//        return true;
//    }

//    public boolean mouseEnter(Event event, int x, int y) {
//        if (isEnabled()) {
//            if (hoverButton) {
//                setBorderType(hoverBorder);
//            }
//        }
//        if (toolTipText != null) {
//            ToolTipManager.getInstance().requestToolTip(this, toolTipText);
//        }
//        mouseInComponent = true;
//        return true;
//    }

//    public boolean mouseUp(Event event, int x, int y) {
//        mouseIsDown = false;
//        if (isEnabled()) {
//            if (this.inside(x, y)) {
//                setBorderType(normalBorder);
//                paint(this.getGraphics());
//                event.id = 1001;
//                event.arg = this.getImage();
//                return action(event, event.arg);
//            }
//        }
//        return false;
//    }

    public void addActionListener(ActionListener l) {
        if (listeners == null) {
            listeners = new Vector();
        }
        listeners.addElement(l);
    }
   
    public void addItemListener(ItemListener l) {
        if (itemListeners == null) {
            itemListeners = new Vector();
        }
        itemListeners.addElement(l);
    }

    public void removeActionListener(ActionListener l) {
        if (listeners != null) {
            listeners.removeElement(l);
        }
    }
   
    public void removeItemListener(ItemListener l) {
        if (itemListeners != null) {
            itemListeners.removeElement(l);
        }
    }
   
    boolean itemEvent(boolean selected) {
        ItemEvent evt = null;
        for (int i = itemListeners == null ? -1 : itemListeners.size() - 1; i >= 0; i--) {
            if (evt == null) {
                evt = new ItemEvent(this, selected ? ItemEvent.SELECTED :
                    ItemEvent.DESELECTED, this, 0);
            }
            ((ItemListener) itemListeners.elementAt(i)).itemStateChanged(evt);
        }
        return false;
       
    }

    boolean actionEvent(int modifiers) {
        ActionEvent evt = null;
        for (int i = listeners == null ? -1 : listeners.size() - 1; i >= 0; i--) {
            if (evt == null) {
                evt = new ActionEvent(this, 1001, actionCommand, modifiers);
            }
            ((ActionListener) listeners.elementAt(i)).actionPerformed(evt);
        }
        return false;
    }

//    public boolean mouseExit(Event event, int x, int y) {
//        mouseInComponent = false;
//        if (hoverButton) {
//            setBorderType(normalBorder);
//        } else {
//            if (mouseIsDown) {
//                paint(this.getGraphics());
//            }
//        }
//        if (toolTipText != null) {
//            ToolTipManager.getInstance().requestToolTip(null, null);
//        }
//        return true;
//    }

    public int getDarkness() {
        return darkness;
    }

    public void setDarkness(int darkness) {
        this.darkness = darkness;
    }

    public Image getGrayImage() {
        return grayImage;
    }

    public void setGrayImage(Image grayImage) {
        this.grayImage = grayImage;
    }

    /*
     * private void createGrayImage(Graphics g) { java.awt.image.ImageFilter
     * filter = new GrayFilter(darkness); java.awt.image.ImageProducer producer =
     * new FilteredImageSource(this.getImage().getSource(), filter); grayImage =
     * this.createImage(producer); int border = this.getBorder(); if (getScale() ==
     * STRETCH) this.prepareImage(grayImage, getWidth() - 2 * border,
     * getHeight() - 2 * border, this); else this.prepareImage(grayImage, this);
     * super.paint(g); }
     */

    /*
     * (non-Javadoc)
     *
     * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
     */
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     *
     * @see java.awt.event.MouseListener#mousePressed(java.awt.event.MouseEvent)
     */
    public void mousePressed(MouseEvent e) {
        if (isEnabled()) {
            mouseIsDown = true;
            setBorderType(depressedBorder);
            super.setBackground(depressedBackground);
            super.setForeground(depressedForeground);
        }
    }

    /*
     * (non-Javadoc)
     *
     * @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
     */
    public void mouseReleased(MouseEvent event) {
        mouseIsDown = false;
        if (isEnabled()) {
            if (this.inside(event.getX(), event.getY())) {
                setBorderType(normalBorder);
                paint(this.getGraphics());
                actionEvent(event.getModifiers());
            }
        }

    }

    /*
     * (non-Javadoc)
     *
     * @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
     */
    public void mouseEntered(MouseEvent e) {
        if (isEnabled()) {
            if (hoverButton && !pressed) {
                setBorderType(hoverBorder);
                if(hoverForeground != null) {
                    super.setForeground(hoverForeground);
                }
                if(hoverBackground != null) {
                    super.setBackground(hoverBackground);
               
                itemEvent(true);
            }
        }
        if (toolTipText != null) {
            ToolTipManager.getInstance().requestToolTip(this, toolTipText);
        }
        mouseInComponent = true;

    }

    /*
     * (non-Javadoc)
     *
     * @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
     */
    public void mouseExited(MouseEvent e) {
        mouseInComponent = false;
        if (hoverButton) {
            if(!pressed) {
              setBorderType(normalBorder);
              if(hoverForeground != null) {
                  super.setForeground(normalForeground);
              }
              if(hoverBackground != null) {
                  super.setBackground(normalBackground);
              }
                itemEvent(true);              
            }
        } else {
            if (mouseIsDown) {
                paint(this.getGraphics());
            }
        }
        if (toolTipText != null) {
            ToolTipManager.getInstance().requestToolTip(null, null);
        }
    }

    /**
     * @param b
     */
    public void setPressed(boolean pressed) {
        this.pressed = pressed;
        if(pressed) {
            setBorderType(depressedBorder);
            super.setBackground(depressedBackground);
            super.setForeground(depressedForeground);
        }
        else {
            setBorderType(normalBorder);
            super.setBackground(normalBackground);
            super.setForeground(normalForeground);
        };
        repaint();
       
    }

    /* (non-Javadoc)
     * @see java.awt.ItemSelectable#getSelectedObjects()
     */
    public Object[] getSelectedObjects() {
        return new Object[] { this };
    }
}
TOP

Related Classes of com.sshtools.ui.awt.ImageButton

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.