001    /*
002     * @(#)ToolButton.java
003     *
004     * Project:             JHotdraw - a GUI framework for technical drawings
005     *                              http://www.jhotdraw.org
006     *                              http://jhotdraw.sourceforge.net
007     * Copyright:   © by the original author(s) and all contributors
008     * License:             Lesser GNU Public License (LGPL)
009     *                              http://www.opensource.org/licenses/lgpl-license.html
010     */
011    
012    package org.objectweb.jac.ide.diagrams;
013    
014    import CH.ifa.draw.framework.Tool;
015    import CH.ifa.draw.framework.ToolListener;
016    import CH.ifa.draw.util.PaletteButton;
017    import CH.ifa.draw.util.PaletteListener;
018    import java.util.EventObject;
019    import javax.swing.BorderFactory;
020    import javax.swing.ImageIcon;
021    import javax.swing.border.BevelBorder;
022    import javax.swing.border.Border;
023    
024    /**
025     * A PaletteButton that is associated with a tool.
026     *
027     * @see Tool
028     *
029     * @version <$CURRENT_VERSION$>
030     */
031    public class ToolButton extends PaletteButton implements ToolListener {
032    
033       private String          name;
034       private Tool            tool;
035    
036       public ToolButton(PaletteListener listener, ImageIcon icon, String name, Tool tool) {
037          super(listener);
038          tool.addToolListener(this);
039          setEnabled(tool.isUsable());
040    
041          this.tool = tool;
042          this.name = name;
043                    
044          setIcon(icon);
045          setToolTipText(name);
046          setEnabled(true);
047          setBorder(normalBorder);
048       }
049    
050       Border normalBorder = 
051          BorderFactory.createCompoundBorder(
052             BorderFactory.createBevelBorder(BevelBorder.RAISED),
053             BorderFactory.createEmptyBorder(2,2,2,2));
054       Border pressedBorder =
055          BorderFactory.createCompoundBorder(
056             BorderFactory.createBevelBorder(BevelBorder.LOWERED),
057             BorderFactory.createEmptyBorder(2,2,2,2));
058    
059       public Tool getTool() {
060          return tool;
061       }
062    
063       public String getName() {
064          return name;
065       }
066    
067       public Object attributeValue() {
068          return getTool();
069       }
070    
071       public void toolUsable(EventObject toolEvent) {
072          setEnabled(true);
073       }
074    
075       public void toolUnusable(EventObject toolEvent) {
076          setEnabled(false);
077          setSelected(false);
078       }
079    
080       public void toolActivated(EventObject toolEvent) {
081          setBorder(pressedBorder);
082       }
083    
084       public void toolDeactivated(EventObject toolEvent) {
085          setBorder(normalBorder);
086       }
087    
088       public void toolEnabled(EventObject toolEvent) {
089          setEnabled(true);
090       }
091    
092       public void toolDisabled(EventObject toolEvent) {
093          setEnabled(false);
094       }
095    }