| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
 | 
 | 
package javax.swing.plaf.metal;  | 
 | 
 | 
 | 
import sun.swing.SwingUtilities2;  | 
 | 
import sun.awt.AppContext;  | 
 | 
 | 
 | 
import java.awt.*;  | 
 | 
import java.awt.event.*;  | 
 | 
import java.lang.ref.*;  | 
 | 
import java.util.*;  | 
 | 
import javax.swing.plaf.basic.BasicToggleButtonUI;  | 
 | 
 | 
 | 
import javax.swing.*;  | 
 | 
import javax.swing.border.*;  | 
 | 
import javax.swing.plaf.*;  | 
 | 
import javax.swing.*;  | 
 | 
 | 
 | 
import java.io.Serializable;  | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 */  | 
 | 
public class MetalToggleButtonUI extends BasicToggleButtonUI { | 
 | 
 | 
 | 
    private static final Object METAL_TOGGLE_BUTTON_UI_KEY = new Object();  | 
 | 
 | 
 | 
    protected Color focusColor;  | 
 | 
    protected Color selectColor;  | 
 | 
    protected Color disabledTextColor;  | 
 | 
 | 
 | 
    private boolean defaults_initialized = false;  | 
 | 
 | 
 | 
    // ********************************  | 
 | 
    //        Create PLAF  | 
 | 
      | 
 | 
    public static ComponentUI createUI(JComponent b) { | 
 | 
        AppContext appContext = AppContext.getAppContext();  | 
 | 
        MetalToggleButtonUI metalToggleButtonUI =  | 
 | 
                (MetalToggleButtonUI) appContext.get(METAL_TOGGLE_BUTTON_UI_KEY);  | 
 | 
        if (metalToggleButtonUI == null) { | 
 | 
            metalToggleButtonUI = new MetalToggleButtonUI();  | 
 | 
            appContext.put(METAL_TOGGLE_BUTTON_UI_KEY, metalToggleButtonUI);  | 
 | 
        }  | 
 | 
        return metalToggleButtonUI;  | 
 | 
    }  | 
 | 
 | 
 | 
    // ********************************  | 
 | 
    //        Install Defaults  | 
 | 
      | 
 | 
    public void installDefaults(AbstractButton b) { | 
 | 
        super.installDefaults(b);  | 
 | 
        if(!defaults_initialized) { | 
 | 
            focusColor = UIManager.getColor(getPropertyPrefix() + "focus");  | 
 | 
            selectColor = UIManager.getColor(getPropertyPrefix() + "select");  | 
 | 
            disabledTextColor = UIManager.getColor(getPropertyPrefix() + "disabledText");  | 
 | 
            defaults_initialized = true;  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    protected void uninstallDefaults(AbstractButton b) { | 
 | 
        super.uninstallDefaults(b);  | 
 | 
        defaults_initialized = false;  | 
 | 
    }  | 
 | 
 | 
 | 
    // ********************************  | 
 | 
    //         Default Accessors  | 
 | 
      | 
 | 
    protected Color getSelectColor() { | 
 | 
        return selectColor;  | 
 | 
    }  | 
 | 
 | 
 | 
    protected Color getDisabledTextColor() { | 
 | 
        return disabledTextColor;  | 
 | 
    }  | 
 | 
 | 
 | 
    protected Color getFocusColor() { | 
 | 
        return focusColor;  | 
 | 
    }  | 
 | 
 | 
 | 
 | 
 | 
    // ********************************  | 
 | 
    //        Paint Methods  | 
 | 
    // ********************************  | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    public void update(Graphics g, JComponent c) { | 
 | 
        AbstractButton button = (AbstractButton)c;  | 
 | 
        if ((c.getBackground() instanceof UIResource) &&  | 
 | 
                        button.isContentAreaFilled() && c.isEnabled()) { | 
 | 
            ButtonModel model = button.getModel();  | 
 | 
            if (!MetalUtils.isToolBarButton(c)) { | 
 | 
                if (!model.isArmed() && !model.isPressed() &&  | 
 | 
                        MetalUtils.drawGradient(  | 
 | 
                        c, g, "ToggleButton.gradient", 0, 0, c.getWidth(),  | 
 | 
                        c.getHeight(), true)) { | 
 | 
                    paint(g, c);  | 
 | 
                    return;  | 
 | 
                }  | 
 | 
            }  | 
 | 
            else if ((model.isRollover() || model.isSelected()) &&  | 
 | 
                        MetalUtils.drawGradient(c, g, "ToggleButton.gradient",  | 
 | 
                        0, 0, c.getWidth(), c.getHeight(), true)) { | 
 | 
                paint(g, c);  | 
 | 
                return;  | 
 | 
            }  | 
 | 
        }  | 
 | 
        super.update(g, c);  | 
 | 
    }  | 
 | 
 | 
 | 
    protected void paintButtonPressed(Graphics g, AbstractButton b) { | 
 | 
        if ( b.isContentAreaFilled() ) { | 
 | 
            g.setColor(getSelectColor());  | 
 | 
            g.fillRect(0, 0, b.getWidth(), b.getHeight());  | 
 | 
        }  | 
 | 
    }  | 
 | 
 | 
 | 
    protected void paintText(Graphics g, JComponent c, Rectangle textRect, String text) { | 
 | 
        AbstractButton b = (AbstractButton) c;  | 
 | 
        ButtonModel model = b.getModel();  | 
 | 
        FontMetrics fm = SwingUtilities2.getFontMetrics(b, g);  | 
 | 
        int mnemIndex = b.getDisplayedMnemonicIndex();  | 
 | 
 | 
 | 
          | 
 | 
        if(model.isEnabled()) { | 
 | 
              | 
 | 
            g.setColor(b.getForeground());  | 
 | 
        }  | 
 | 
        else { | 
 | 
              | 
 | 
            if (model.isSelected()) { | 
 | 
                g.setColor(c.getBackground());  | 
 | 
            } else { | 
 | 
                g.setColor(getDisabledTextColor());  | 
 | 
            }  | 
 | 
        }  | 
 | 
        SwingUtilities2.drawStringUnderlineCharAt(c, g, text, mnemIndex,  | 
 | 
                textRect.x, textRect.y + fm.getAscent());  | 
 | 
    }  | 
 | 
 | 
 | 
    protected void paintFocus(Graphics g, AbstractButton b,  | 
 | 
                              Rectangle viewRect, Rectangle textRect, Rectangle iconRect){ | 
 | 
 | 
 | 
        Rectangle focusRect = new Rectangle();  | 
 | 
        String text = b.getText();  | 
 | 
        boolean isIcon = b.getIcon() != null;  | 
 | 
 | 
 | 
          | 
 | 
        if ( text != null && !text.equals( "" ) ) { | 
 | 
            if ( !isIcon ) { | 
 | 
                focusRect.setBounds( textRect );  | 
 | 
            }  | 
 | 
            else { | 
 | 
                focusRect.setBounds( iconRect.union( textRect ) );  | 
 | 
            }  | 
 | 
        }  | 
 | 
          | 
 | 
        else if ( isIcon ) { | 
 | 
            focusRect.setBounds( iconRect );  | 
 | 
        }  | 
 | 
 | 
 | 
        g.setColor(getFocusColor());  | 
 | 
        g.drawRect((focusRect.x-1), (focusRect.y-1),  | 
 | 
                  focusRect.width+1, focusRect.height+1);  | 
 | 
 | 
 | 
    }  | 
 | 
 | 
 | 
      | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
     */  | 
 | 
    protected void paintIcon(Graphics g, AbstractButton b, Rectangle iconRect) { | 
 | 
        super.paintIcon(g, b, iconRect);  | 
 | 
    }  | 
 | 
}  |