From 554fd8c5195424bdbcabf5de30fdc183aba391bd Mon Sep 17 00:00:00 2001 From: upstream source tree Date: Sun, 15 Mar 2015 20:14:05 -0400 Subject: obtained gcc-4.6.4.tar.bz2 from upstream website; verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository. --- libjava/classpath/javax/swing/LookAndFeel.java | 433 +++++++++++++++++++++++++ 1 file changed, 433 insertions(+) create mode 100644 libjava/classpath/javax/swing/LookAndFeel.java (limited to 'libjava/classpath/javax/swing/LookAndFeel.java') diff --git a/libjava/classpath/javax/swing/LookAndFeel.java b/libjava/classpath/javax/swing/LookAndFeel.java new file mode 100644 index 000000000..aec6ebb7f --- /dev/null +++ b/libjava/classpath/javax/swing/LookAndFeel.java @@ -0,0 +1,433 @@ +/* LookAndFeel.java -- + Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.swing; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.Toolkit; +import java.net.URL; + +import javax.swing.border.Border; +import javax.swing.plaf.ComponentInputMapUIResource; +import javax.swing.plaf.IconUIResource; +import javax.swing.plaf.InputMapUIResource; +import javax.swing.plaf.UIResource; +import javax.swing.plaf.metal.MetalLookAndFeel; +import javax.swing.text.JTextComponent; + +/** + * A look-and-feel controls most aspects of the appearance and + * operation of user interface components in javax.swing. A + * cross-platform look-and-feel (the {@link MetalLookAndFeel}) is provided. + * + * @see UIManager#getInstalledLookAndFeels() + * @see UIManager#setLookAndFeel(LookAndFeel) + */ +public abstract class LookAndFeel +{ + /** + * Creates and returns a look-and-feel specific defaults table. This method + * is called once by {@link UIManager#setLookAndFeel(LookAndFeel)} and + * shouldn't be called again (as it creates a large table of defaults). + * + * @return The UI defaults. + */ + public UIDefaults getDefaults() + { + return null; + } + + /** + * Returns a description of the look and feel. + * + * @return A description of the look and feel. + */ + public abstract String getDescription(); + + /** + * Returns the value of Toolkit.getDefaultToolkit() + * .getDesktopProperty(systemPropertyName), or + * fallbackValue if no such property is defined. + * + * @param systemPropertyName the system property name. + * @param fallbackValue the fallback value. + * + * @return The property value or fallbackValue. + */ + public static Object getDesktopPropertyValue(String systemPropertyName, + Object fallbackValue) + { + Object value = Toolkit.getDefaultToolkit().getDesktopProperty( + systemPropertyName); + return value != null ? value : fallbackValue; + } + + /** + * Returns an identifier for the look and feel. + * + * @return An identifier for the look and feel. + */ + public abstract String getID(); + + /** + * Returns the name for the look and feel. + * + * @return The name for the look and feel. + */ + public abstract String getName(); + + /** + * Returns true when the look-and-feel supports window + * decorations, and false otherwise. This default implementation + * always returns false and needs to be overridden when the + * derived look-and-feel supports this. + * + * @return false. + * + * @since 1.4 + */ + public boolean getSupportsWindowDecorations() + { + return false; + } + + /** + * Initializes the look-and-feel. The + * {@link UIManager#setLookAndFeel(LookAndFeel)} method calls this method + * before the first call (and typically the only call) to + * {@link #getDefaults()}. This default implementation does nothing, but + * subclasses can override this behaviour. + */ + public void initialize() + { + // We do nothing here. This method is meant to be overridden by + // LookAndFeel implementations. + } + + /** + * Convenience method for installing a component's default {@link Border} + * object on the specified component if either the border is currently + * null or already an instance of {@link UIResource}. + * + * @param c the component (null not permitted). + * @param defaultBorderName the border name (for lookup in the UIDefaults + * table). + */ + public static void installBorder(JComponent c, String defaultBorderName) + { + Border b = c.getBorder(); + if (b == null || b instanceof UIResource) + c.setBorder(UIManager.getBorder(defaultBorderName)); + } + + /** + * Convenience method for initializing a component's foreground and + * background color properties with values from the current defaults table. + * + * @param c the component (null not permitted). + * @param defaultBgName the key for the background color in the UIDefaults + * table. + * @param defaultFgName the key for the foreground color in the UIDefaults + * table. + */ + public static void installColors(JComponent c, String defaultBgName, + String defaultFgName) + { + // Install background. + Color bg = c.getBackground(); + if (bg == null || bg instanceof UIResource) + c.setBackground(UIManager.getColor(defaultBgName)); + + // Install foreground. + Color fg = c.getForeground(); + if (fg == null || fg instanceof UIResource) + c.setForeground(UIManager.getColor(defaultFgName)); + } + + /** + * Convenience method for initializing a component's foreground, background + * and font properties with values from the current defaults table. + * + * @param component the component (null not permitted). + * @param defaultBgName the key for the background color in the UIDefaults + * table. + * @param defaultFgName the key for the foreground color in the UIDefaults + * table. + * @param defaultFontName the key for the font in the UIDefaults table. + */ + public static void installColorsAndFont(JComponent component, + String defaultBgName, + String defaultFgName, + String defaultFontName) + { + // Install colors. + installColors(component, defaultBgName, defaultFgName); + // Install font. + Font f = component.getFont(); + if (f == null || f instanceof UIResource) + component.setFont(UIManager.getFont(defaultFontName)); + } + + /** + * Returns true if the look-and-feel is the "native" + * look-and-feel for the current platform, and false otherwise. + * A native look-and-feel emulates the appearance and behaviour of the + * default windowing system on the host operating system. + * + * @return A flag indicating whether or not this is the native look and feel + * for the current platform. + */ + public abstract boolean isNativeLookAndFeel(); + + /** + * Returns true if the look-and-feel is supported on the + * current operating system, and false otherwise. This + * mechanism is provided so that it is possible to prevent a look-and-feel + * from being used on some operating systems (usually for legal, not + * technical, reasons). + * + * @return A flag indicating whether or not the look-and-feel is supported + * on the current platform. + */ + public abstract boolean isSupportedLookAndFeel(); + + /** + * Loads the bindings in keys into retMap. Does not remove existing entries + * from retMap. keys describes the InputMap, every even indexed + * item is either a KeyStroke or a String representing a KeyStroke and every + * odd indexed item is the Object associated with that KeyStroke in an + * ActionMap. + * + * @param retMap the InputMap into which we load bindings + * @param keys the Object array describing the InputMap as above + */ + public static void loadKeyBindings(InputMap retMap, Object[] keys) + { + if (keys == null) + return; + for (int i = 0; i < keys.length - 1; i += 2) + { + Object key = keys[i]; + KeyStroke keyStroke; + if (key instanceof KeyStroke) + keyStroke = (KeyStroke) key; + else + keyStroke = KeyStroke.getKeyStroke((String) key); + retMap.put(keyStroke, keys[i + 1]); + } + } + + /** + * Creates a ComponentInputMap from keys. + * keys describes the InputMap, every even indexed + * item is either a KeyStroke or a String representing a KeyStroke and every + * odd indexed item is the Object associated with that KeyStroke in an + * ActionMap. + * + * @param c the JComponent associated with the ComponentInputMap + * @param keys the Object array describing the InputMap as above + * + * @return A new input map. + */ + public static ComponentInputMap makeComponentInputMap(JComponent c, + Object[] keys) + { + ComponentInputMap retMap = new ComponentInputMapUIResource(c); + loadKeyBindings(retMap, keys); + return retMap; + } + + /** + * Utility method that creates a UIDefaults.LazyValue that creates an + * ImageIcon UIResource for the specified gifFile filename. + * + * @param baseClass the base class for accessing the icon resource. + * @param gifFile the file name. + * + * @return A {@link UIDefaults.LazyValue} that serves up an + * {@link IconUIResource}. + */ + public static Object makeIcon(Class baseClass, String gifFile) + { + final URL file = baseClass.getResource(gifFile); + return new UIDefaults.LazyValue() + { + public Object createValue(UIDefaults table) + { + return new IconUIResource(new ImageIcon(file)); + } + }; + } + + /** + * Creates a InputMap from keys. + * keys describes the InputMap, every even indexed + * item is either a KeyStroke or a String representing a KeyStroke and every + * odd indexed item is the Object associated with that KeyStroke in an + * ActionMap. + * + * @param keys the Object array describing the InputMap as above + * + * @return A new input map. + */ + public static InputMap makeInputMap(Object[] keys) + { + InputMap retMap = new InputMapUIResource(); + loadKeyBindings(retMap, keys); + return retMap; + } + + /** + * Convenience method for building lists of KeyBindings. + * keyBindingList is an array of KeyStroke-Action pairs where + * even indexed elements are KeyStrokes or Strings representing KeyStrokes + * and odd indexed elements are the associated Actions. + * + * @param keyBindingList the array of KeyStroke-Action pairs + * @return a JTextComponent.KeyBinding array + */ + public static JTextComponent.KeyBinding[] makeKeyBindings( + Object[] keyBindingList) + { + JTextComponent.KeyBinding[] retBindings = + new JTextComponent.KeyBinding[keyBindingList.length / 2]; + for (int i = 0; i < keyBindingList.length - 1; i += 2) + { + KeyStroke stroke; + if (keyBindingList[i] instanceof KeyStroke) + stroke = (KeyStroke) keyBindingList[i]; + else + stroke = KeyStroke.getKeyStroke((String) keyBindingList[i]); + retBindings[i / 2] = new JTextComponent.KeyBinding(stroke, + (String) keyBindingList[i + 1]); + } + return retBindings; + } + + /** + * Invoked when the user attempts an invalid operation. The default + * implementation just beeps. Subclasses that wish to change this need to + * override this method. + * + * @param component the component the error occured in + */ + public void provideErrorFeedback(Component component) + { + Toolkit.getDefaultToolkit().beep(); + } + + /** + * Returns a string that displays and identifies this object's properties. + * + * @return string containing the description and class name. + */ + public String toString() + { + return getDescription() + " " + getClass().getName(); + } + + /** + * UIManager.setLookAndFeel calls this method just before we're replaced by + * a new default look and feel. + */ + public void uninitialize() + { + // We do nothing here. This method is meant to be overridden by + // LookAndFeel implementations. + } + + /** + * Convenience method for un-installing a component's default border on the + * specified component if the border is currently an instance of UIResource. + * + * @param c the component (null not permitted). + */ + public static void uninstallBorder(JComponent c) + { + if (c.getBorder() instanceof UIResource) + c.setBorder(null); + } + + /** + * This methods installs a UI property if it hasn't already been set by an + * application. This method is used by UI delegates that install a default + * value for a property with a primitive type but do not want to override + * a value that has been set by an application. + * + * The supported properties depend on the actual type of the component and + * are listed in the table below. The supported properties are of course + * inherited to subclasses. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
TypeSupported properties
JComponentopaque, autoscrolls
AbstractButtonborderPainted, rolloverEnabled, iconTextGap, + * contentAreaFilled
JDesktopPanedragMode
JSplitPanedividerSize, oneTouchExpandable
JTablerowHeight
JTreerowHeight, scrollsOnExpand, showsRootHandles
+ * + * @param c the component to install the property to + * @param propertyName the name of the property + * @param value the value of the property + * + * @throws IllegalArgumentException if the specified property cannot be set + * by this method + * @throws ClassCastException if the property value does not match the + * property type + * @throws NullPointerException if c or + * propertyValue is null + * + * @since 1.5 + */ + public static void installProperty(JComponent c, String propertyName, + Object value) + { + c.setUIProperty(propertyName, value); + } +} -- cgit v1.2.3