/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Tiny Look and Feel * * * * (C) Copyright 2003 - 2007 Hans Bickel * * * * For licensing information and credits, please refer to the * * comment in file de.muntjak.tinylookandfeel.TinyLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package de.muntjak.tinylookandfeel; import java.awt.*; import java.awt.event.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.EventListener; import javax.swing.*; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; import javax.swing.event.MouseInputListener; import javax.swing.plaf.BorderUIResource; import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.metal.MetalToolBarUI; import de.muntjak.tinylookandfeel.borders.*; /** * TinyToolBarUI * * @version 1.1 * @author Hans Bickel */ public class TinyToolBarUI extends MetalToolBarUI { public static final String IS_TOOL_BAR_BUTTON_KEY = "JToolBar.isToolbarButton"; public static final int floatableGripSize = 8; /** * The Border used for buttons in a toolbar */ private static Border toolButtonBorder = new TinyToolButtonBorder(); /** * Creates the UI delegate for the given component. * * @param c The component to create its UI delegate. * @return The UI delegate for the given component. */ public static ComponentUI createUI(JComponent c) { return new TinyToolBarUI(); } /** * Installs some default values for the given toolbar. * The gets a rollover property. * * @param mainColor The reference of the toolbar to install its default values. */ public void installUI(JComponent c) { super.installUI(c); c.putClientProperty("JToolBar.isRollover", Boolean.TRUE); } /** * Overrides BasicToolBarUI.createFloatingWindow() to return a * simple dialog (which works with TinyLaF). * Creates a window which contains the toolbar after it has been * dragged out from its container * @return a <code>RootPaneContainer</code> object, containing the toolbar. */ protected RootPaneContainer createFloatingWindow(JToolBar toolbar) { JDialog dialog; Window window = SwingUtilities.getWindowAncestor(toolbar); if(window instanceof Frame) { dialog = new JDialog((Frame)window, toolbar.getName(), false); } else if(window instanceof Dialog) { dialog = new JDialog((Dialog)window, toolbar.getName(), false); } else { dialog = new JDialog((Frame)null, toolbar.getName(), false); } dialog.setTitle(toolbar.getName()); dialog.setResizable(false); WindowListener wl = createFrameListener(); dialog.addWindowListener(wl); return dialog; } /** * Paints the given component. * * @param g The graphics context to use. * @param c The component to paint. */ public void paint(Graphics g, JComponent c) { if(c.getBackground() instanceof ColorUIResource) { g.setColor(Theme.toolBarColor[Theme.style].getColor()); } else { g.setColor(c.getBackground()); } g.fillRect(0, 0, c.getWidth(), c.getHeight()); } /** * Rewritten in 1.3. Now the border is defined * through button margin. */ protected void setBorderToRollover(Component c) { setBorderToNormal(c); } protected void setBorderToNormal(Component c) { if(!(c instanceof AbstractButton)) return; if(c instanceof JCheckBox) return; if(c instanceof JRadioButton) return; AbstractButton b = (AbstractButton)c; b.setRolloverEnabled(true); b.putClientProperty(IS_TOOL_BAR_BUTTON_KEY, Boolean.TRUE); if(!(b.getBorder() instanceof UIResource) && !(b.getBorder() instanceof TinyToolButtonBorder)) { // user has installed her own border return; } b.setBorder(toolButtonBorder); } }