/** * @(#)BasicGripperUI.java * * Copyright 2002 - 2004 JIDE Software. All rights reserved. */ package com.jidesoft.plaf.basic; import com.jidesoft.plaf.GripperUI; import com.jidesoft.plaf.UIDefaultsLookup; import com.jidesoft.swing.Gripper; import com.jidesoft.swing.JideSwingUtilities; import com.jidesoft.utils.SecurityUtils; import javax.swing.*; import javax.swing.plaf.ComponentUI; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; /** * A Basic L&F implementation of GripperUI. */ public class BasicGripperUI extends GripperUI { private int _size; protected ThemePainter _painter; protected Painter _gripperPainter; public static ComponentUI createUI(JComponent c) { return new BasicGripperUI(); } @Override public void installUI(JComponent c) { _painter = (ThemePainter) UIDefaultsLookup.get("Theme.painter"); _gripperPainter = (Painter) UIDefaultsLookup.get("Gripper.painter"); installDefaults((Gripper) c); installListeners((Gripper) c); } @Override public void uninstallUI(JComponent c) { _painter = null; _gripperPainter = null; uninstallDefaults((Gripper) c); uninstallListeners((Gripper) c); } protected void installDefaults(Gripper s) { _size = UIDefaultsLookup.getInt("Gripper.size"); } protected void uninstallDefaults(Gripper s) { } protected MouseListener createMouseListener() { return new GripperMouseListener(); } protected void installListeners(Gripper g) { MouseListener listener = createMouseListener(); if (listener != null) { // put the listener in the gripper's client properties so that // we can get at it later g.putClientProperty(this, listener); g.addMouseListener(listener); } } protected void uninstallListeners(Gripper g) { MouseListener listener = (MouseListener) g.getClientProperty(this); g.putClientProperty(this, null); if (listener != null) { g.removeMouseListener(listener); } } protected void paintBackground(Graphics g, Gripper b) { Rectangle rect = new Rectangle(0, 0, b.getWidth(), b.getHeight()); if (b.isRollover()) { getPainter().paintButtonBackground(b, g, rect, 0, ThemePainter.STATE_ROLLOVER); } else { if (b.isOpaque()) { getPainter().paintButtonBackground(b, g, rect, 0, b.isSelected() ? ThemePainter.STATE_SELECTED : ThemePainter.STATE_DEFAULT, false); if ("true".equals(SecurityUtils.getProperty("shadingtheme", "false"))) { JideSwingUtilities.fillGradient(g, rect, SwingConstants.HORIZONTAL); } } } } @Override public void paint(Graphics g, JComponent c) { Gripper gripper = (Gripper) c; paintBackground(g, gripper); int state = gripper.isSelected() ? ThemePainter.STATE_SELECTED : ThemePainter.STATE_DEFAULT; if (_gripperPainter == null) { getPainter().paintGripper(c, g, new Rectangle(0, 0, c.getWidth(), c.getHeight()), gripper.getOrientation(), state); } else { _gripperPainter.paint(c, g, new Rectangle(0, 0, c.getWidth(), c.getHeight()), gripper.getOrientation(), state); } } @Override public Dimension getPreferredSize(JComponent c) { return new Dimension(_size, _size); } @Override public Dimension getMinimumSize(JComponent c) { return getPreferredSize(c); } @Override public Dimension getMaximumSize(JComponent c) { Gripper gripper = (Gripper) c; if (gripper.getOrientation() == SwingConstants.HORIZONTAL) return new Dimension(_size, c.getParent().getHeight()); else return new Dimension(c.getParent().getWidth(), _size); } public ThemePainter getPainter() { return _painter; } class GripperMouseListener extends MouseAdapter { @Override public void mouseEntered(MouseEvent e) { super.mouseEntered(e); if (e.getSource() instanceof Gripper) { if (((Gripper) e.getSource()).isRolloverEnabled()) { ((Gripper) e.getSource()).setRollover(true); } } } @Override public void mouseExited(MouseEvent e) { super.mouseExited(e); if (e.getSource() instanceof Gripper) { if (((Gripper) e.getSource()).isRolloverEnabled()) { ((Gripper) e.getSource()).setRollover(false); } } } } }