--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthStyle.java Sat Dec 01 00:00:00 2007 +0000
@@ -0,0 +1,1033 @@
+/*
+ * Copyright 2002-2006 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Sun designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Sun in the LICENSE file that accompanied this code.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+package javax.swing.plaf.synth;
+
+import java.awt.*;
+import javax.swing.*;
+import javax.swing.border.Border;
+import javax.swing.plaf.UIResource;
+import javax.swing.plaf.basic.BasicLookAndFeel;
+import javax.swing.text.DefaultEditorKit;
+import java.util.HashMap;
+import java.util.Map;
+import sun.swing.plaf.synth.SynthUI;
+
+/**
+ * <code>SynthStyle</code> is a set of style properties.
+ * Each <code>SynthUI</code> references at least one
+ * <code>SynthStyle</code> that is obtained using a
+ * <code>SynthStyleFactory</code>. You typically don't need to interact with
+ * this class directly, rather you will load a
+ * <a href="doc-files/synthFileFormat.html">Synth File Format file</a> into
+ * <code>SynthLookAndFeel</code> that will create a set of SynthStyles.
+ *
+ * @see SynthLookAndFeel
+ * @see SynthStyleFactory
+ *
+ * @since 1.5
+ * @author Scott Violet
+ */
+public abstract class SynthStyle {
+ /**
+ * Contains the default values for certain properties.
+ */
+ private static Map DEFAULT_VALUES;
+
+ /**
+ * Shared SynthGraphics.
+ */
+ private static final SynthGraphicsUtils SYNTH_GRAPHICS =
+ new SynthGraphicsUtils();
+
+ /**
+ * Adds the default values that we know about to DEFAULT_VALUES.
+ */
+ private static void populateDefaultValues() {
+ Object buttonMap = new UIDefaults.LazyInputMap(new Object[] {
+ "SPACE", "pressed",
+ "released SPACE", "released"
+ });
+ DEFAULT_VALUES.put("Button.focusInputMap", buttonMap);
+ DEFAULT_VALUES.put("CheckBox.focusInputMap", buttonMap);
+ DEFAULT_VALUES.put("RadioButton.focusInputMap", buttonMap);
+ DEFAULT_VALUES.put("ToggleButton.focusInputMap", buttonMap);
+ DEFAULT_VALUES.put("SynthArrowButton.focusInputMap", buttonMap);
+ DEFAULT_VALUES.put("List.dropLineColor", Color.BLACK);
+ DEFAULT_VALUES.put("Tree.dropLineColor", Color.BLACK);
+ DEFAULT_VALUES.put("Table.dropLineColor", Color.BLACK);
+ DEFAULT_VALUES.put("Table.dropLineShortColor", Color.RED);
+
+ Object multilineInputMap = new UIDefaults.LazyInputMap(new Object[] {
+ "ctrl C", DefaultEditorKit.copyAction,
+ "ctrl V", DefaultEditorKit.pasteAction,
+ "ctrl X", DefaultEditorKit.cutAction,
+ "COPY", DefaultEditorKit.copyAction,
+ "PASTE", DefaultEditorKit.pasteAction,
+ "CUT", DefaultEditorKit.cutAction,
+ "control INSERT", DefaultEditorKit.copyAction,
+ "shift INSERT", DefaultEditorKit.pasteAction,
+ "shift DELETE", DefaultEditorKit.cutAction,
+ "shift LEFT", DefaultEditorKit.selectionBackwardAction,
+ "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
+ "shift RIGHT", DefaultEditorKit.selectionForwardAction,
+ "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
+ "ctrl LEFT", DefaultEditorKit.previousWordAction,
+ "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
+ "ctrl RIGHT", DefaultEditorKit.nextWordAction,
+ "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
+ "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
+ "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
+ "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
+ "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
+ "ctrl A", DefaultEditorKit.selectAllAction,
+ "HOME", DefaultEditorKit.beginLineAction,
+ "END", DefaultEditorKit.endLineAction,
+ "shift HOME", DefaultEditorKit.selectionBeginLineAction,
+ "shift END", DefaultEditorKit.selectionEndLineAction,
+
+ "UP", DefaultEditorKit.upAction,
+ "KP_UP", DefaultEditorKit.upAction,
+ "DOWN", DefaultEditorKit.downAction,
+ "KP_DOWN", DefaultEditorKit.downAction,
+ "PAGE_UP", DefaultEditorKit.pageUpAction,
+ "PAGE_DOWN", DefaultEditorKit.pageDownAction,
+ "shift PAGE_UP", "selection-page-up",
+ "shift PAGE_DOWN", "selection-page-down",
+ "ctrl shift PAGE_UP", "selection-page-left",
+ "ctrl shift PAGE_DOWN", "selection-page-right",
+ "shift UP", DefaultEditorKit.selectionUpAction,
+ "shift KP_UP", DefaultEditorKit.selectionUpAction,
+ "shift DOWN", DefaultEditorKit.selectionDownAction,
+ "shift KP_DOWN", DefaultEditorKit.selectionDownAction,
+ "ENTER", DefaultEditorKit.insertBreakAction,
+ "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
+ "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
+ "ctrl H", DefaultEditorKit.deletePrevCharAction,
+ "DELETE", DefaultEditorKit.deleteNextCharAction,
+ "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
+ "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
+ "RIGHT", DefaultEditorKit.forwardAction,
+ "LEFT", DefaultEditorKit.backwardAction,
+ "KP_RIGHT", DefaultEditorKit.forwardAction,
+ "KP_LEFT", DefaultEditorKit.backwardAction,
+ "TAB", DefaultEditorKit.insertTabAction,
+ "ctrl BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
+ "ctrl HOME", DefaultEditorKit.beginAction,
+ "ctrl END", DefaultEditorKit.endAction,
+ "ctrl shift HOME", DefaultEditorKit.selectionBeginAction,
+ "ctrl shift END", DefaultEditorKit.selectionEndAction,
+ "ctrl T", "next-link-action",
+ "ctrl shift T", "previous-link-action",
+ "ctrl SPACE", "activate-link-action",
+ "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
+ });
+ DEFAULT_VALUES.put("EditorPane.focusInputMap", multilineInputMap);
+ DEFAULT_VALUES.put("TextArea.focusInputMap", multilineInputMap);
+ DEFAULT_VALUES.put("TextPane.focusInputMap", multilineInputMap);
+
+ Object fieldInputMap = new UIDefaults.LazyInputMap(new Object[] {
+ "ctrl C", DefaultEditorKit.copyAction,
+ "ctrl V", DefaultEditorKit.pasteAction,
+ "ctrl X", DefaultEditorKit.cutAction,
+ "COPY", DefaultEditorKit.copyAction,
+ "PASTE", DefaultEditorKit.pasteAction,
+ "CUT", DefaultEditorKit.cutAction,
+ "control INSERT", DefaultEditorKit.copyAction,
+ "shift INSERT", DefaultEditorKit.pasteAction,
+ "shift DELETE", DefaultEditorKit.cutAction,
+ "shift LEFT", DefaultEditorKit.selectionBackwardAction,
+ "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
+ "shift RIGHT", DefaultEditorKit.selectionForwardAction,
+ "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
+ "ctrl LEFT", DefaultEditorKit.previousWordAction,
+ "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
+ "ctrl RIGHT", DefaultEditorKit.nextWordAction,
+ "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
+ "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
+ "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
+ "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
+ "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
+ "ctrl A", DefaultEditorKit.selectAllAction,
+ "HOME", DefaultEditorKit.beginLineAction,
+ "END", DefaultEditorKit.endLineAction,
+ "shift HOME", DefaultEditorKit.selectionBeginLineAction,
+ "shift END", DefaultEditorKit.selectionEndLineAction,
+ "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
+ "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
+ "ctrl H", DefaultEditorKit.deletePrevCharAction,
+ "DELETE", DefaultEditorKit.deleteNextCharAction,
+ "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
+ "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
+ "RIGHT", DefaultEditorKit.forwardAction,
+ "LEFT", DefaultEditorKit.backwardAction,
+ "KP_RIGHT", DefaultEditorKit.forwardAction,
+ "KP_LEFT", DefaultEditorKit.backwardAction,
+ "ENTER", JTextField.notifyAction,
+ "ctrl BACK_SLASH", "unselect"/*DefaultEditorKit.unselectAction*/,
+ "control shift O", "toggle-componentOrientation"/*DefaultEditorKit.toggleComponentOrientation*/
+ });
+ DEFAULT_VALUES.put("TextField.focusInputMap", fieldInputMap);
+ DEFAULT_VALUES.put("PasswordField.focusInputMap", fieldInputMap);
+
+
+ DEFAULT_VALUES.put("ComboBox.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ESCAPE", "hidePopup",
+ "PAGE_UP", "pageUpPassThrough",
+ "PAGE_DOWN", "pageDownPassThrough",
+ "HOME", "homePassThrough",
+ "END", "endPassThrough",
+ "DOWN", "selectNext",
+ "KP_DOWN", "selectNext",
+ "alt DOWN", "togglePopup",
+ "alt KP_DOWN", "togglePopup",
+ "alt UP", "togglePopup",
+ "alt KP_UP", "togglePopup",
+ "SPACE", "spacePopup",
+ "ENTER", "enterPressed",
+ "UP", "selectPrevious",
+ "KP_UP", "selectPrevious"
+ }));
+
+ DEFAULT_VALUES.put("Desktop.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ctrl F5", "restore",
+ "ctrl F4", "close",
+ "ctrl F7", "move",
+ "ctrl F8", "resize",
+ "RIGHT", "right",
+ "KP_RIGHT", "right",
+ "shift RIGHT", "shrinkRight",
+ "shift KP_RIGHT", "shrinkRight",
+ "LEFT", "left",
+ "KP_LEFT", "left",
+ "shift LEFT", "shrinkLeft",
+ "shift KP_LEFT", "shrinkLeft",
+ "UP", "up",
+ "KP_UP", "up",
+ "shift UP", "shrinkUp",
+ "shift KP_UP", "shrinkUp",
+ "DOWN", "down",
+ "KP_DOWN", "down",
+ "shift DOWN", "shrinkDown",
+ "shift KP_DOWN", "shrinkDown",
+ "ESCAPE", "escape",
+ "ctrl F9", "minimize",
+ "ctrl F10", "maximize",
+ "ctrl F6", "selectNextFrame",
+ "ctrl TAB", "selectNextFrame",
+ "ctrl alt F6", "selectNextFrame",
+ "shift ctrl alt F6", "selectPreviousFrame",
+ "ctrl F12", "navigateNext",
+ "shift ctrl F12", "navigatePrevious"
+ }));
+
+ DEFAULT_VALUES.put("FileChooser.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ESCAPE", "cancelSelection",
+ "F2", "editFileName",
+ "F5", "refresh",
+ "BACK_SPACE", "Go Up",
+ "ENTER", "approveSelection",
+ "ctrl ENTER", "approveSelection"
+ }));
+
+ DEFAULT_VALUES.put("FormattedTextField.focusInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ctrl C", DefaultEditorKit.copyAction,
+ "ctrl V", DefaultEditorKit.pasteAction,
+ "ctrl X", DefaultEditorKit.cutAction,
+ "COPY", DefaultEditorKit.copyAction,
+ "PASTE", DefaultEditorKit.pasteAction,
+ "CUT", DefaultEditorKit.cutAction,
+ "control INSERT", DefaultEditorKit.copyAction,
+ "shift INSERT", DefaultEditorKit.pasteAction,
+ "shift DELETE", DefaultEditorKit.cutAction,
+ "shift LEFT", DefaultEditorKit.selectionBackwardAction,
+ "shift KP_LEFT", DefaultEditorKit.selectionBackwardAction,
+ "shift RIGHT", DefaultEditorKit.selectionForwardAction,
+ "shift KP_RIGHT", DefaultEditorKit.selectionForwardAction,
+ "ctrl LEFT", DefaultEditorKit.previousWordAction,
+ "ctrl KP_LEFT", DefaultEditorKit.previousWordAction,
+ "ctrl RIGHT", DefaultEditorKit.nextWordAction,
+ "ctrl KP_RIGHT", DefaultEditorKit.nextWordAction,
+ "ctrl shift LEFT", DefaultEditorKit.selectionPreviousWordAction,
+ "ctrl shift KP_LEFT", DefaultEditorKit.selectionPreviousWordAction,
+ "ctrl shift RIGHT", DefaultEditorKit.selectionNextWordAction,
+ "ctrl shift KP_RIGHT", DefaultEditorKit.selectionNextWordAction,
+ "ctrl A", DefaultEditorKit.selectAllAction,
+ "HOME", DefaultEditorKit.beginLineAction,
+ "END", DefaultEditorKit.endLineAction,
+ "shift HOME", DefaultEditorKit.selectionBeginLineAction,
+ "shift END", DefaultEditorKit.selectionEndLineAction,
+ "BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
+ "shift BACK_SPACE", DefaultEditorKit.deletePrevCharAction,
+ "ctrl H", DefaultEditorKit.deletePrevCharAction,
+ "DELETE", DefaultEditorKit.deleteNextCharAction,
+ "ctrl DELETE", DefaultEditorKit.deleteNextWordAction,
+ "ctrl BACK_SPACE", DefaultEditorKit.deletePrevWordAction,
+ "RIGHT", DefaultEditorKit.forwardAction,
+ "LEFT", DefaultEditorKit.backwardAction,
+ "KP_RIGHT", DefaultEditorKit.forwardAction,
+ "KP_LEFT", DefaultEditorKit.backwardAction,
+ "ENTER", JTextField.notifyAction,
+ "ctrl BACK_SLASH", "unselect",
+ "control shift O", "toggle-componentOrientation",
+ "ESCAPE", "reset-field-edit",
+ "UP", "increment",
+ "KP_UP", "increment",
+ "DOWN", "decrement",
+ "KP_DOWN", "decrement",
+ }));
+
+ DEFAULT_VALUES.put("InternalFrame.icon",
+ LookAndFeel.makeIcon(BasicLookAndFeel.class,
+ "icons/JavaCup16.png"));
+
+ DEFAULT_VALUES.put("InternalFrame.windowBindings",
+ new Object[] {
+ "shift ESCAPE", "showSystemMenu",
+ "ctrl SPACE", "showSystemMenu",
+ "ESCAPE", "hideSystemMenu"});
+
+ DEFAULT_VALUES.put("List.focusInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ctrl C", "copy",
+ "ctrl V", "paste",
+ "ctrl X", "cut",
+ "COPY", "copy",
+ "PASTE", "paste",
+ "CUT", "cut",
+ "control INSERT", "copy",
+ "shift INSERT", "paste",
+ "shift DELETE", "cut",
+ "UP", "selectPreviousRow",
+ "KP_UP", "selectPreviousRow",
+ "shift UP", "selectPreviousRowExtendSelection",
+ "shift KP_UP", "selectPreviousRowExtendSelection",
+ "ctrl shift UP", "selectPreviousRowExtendSelection",
+ "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
+ "ctrl UP", "selectPreviousRowChangeLead",
+ "ctrl KP_UP", "selectPreviousRowChangeLead",
+ "DOWN", "selectNextRow",
+ "KP_DOWN", "selectNextRow",
+ "shift DOWN", "selectNextRowExtendSelection",
+ "shift KP_DOWN", "selectNextRowExtendSelection",
+ "ctrl shift DOWN", "selectNextRowExtendSelection",
+ "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
+ "ctrl DOWN", "selectNextRowChangeLead",
+ "ctrl KP_DOWN", "selectNextRowChangeLead",
+ "LEFT", "selectPreviousColumn",
+ "KP_LEFT", "selectPreviousColumn",
+ "shift LEFT", "selectPreviousColumnExtendSelection",
+ "shift KP_LEFT", "selectPreviousColumnExtendSelection",
+ "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
+ "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
+ "ctrl LEFT", "selectPreviousColumnChangeLead",
+ "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
+ "RIGHT", "selectNextColumn",
+ "KP_RIGHT", "selectNextColumn",
+ "shift RIGHT", "selectNextColumnExtendSelection",
+ "shift KP_RIGHT", "selectNextColumnExtendSelection",
+ "ctrl shift RIGHT", "selectNextColumnExtendSelection",
+ "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
+ "ctrl RIGHT", "selectNextColumnChangeLead",
+ "ctrl KP_RIGHT", "selectNextColumnChangeLead",
+ "HOME", "selectFirstRow",
+ "shift HOME", "selectFirstRowExtendSelection",
+ "ctrl shift HOME", "selectFirstRowExtendSelection",
+ "ctrl HOME", "selectFirstRowChangeLead",
+ "END", "selectLastRow",
+ "shift END", "selectLastRowExtendSelection",
+ "ctrl shift END", "selectLastRowExtendSelection",
+ "ctrl END", "selectLastRowChangeLead",
+ "PAGE_UP", "scrollUp",
+ "shift PAGE_UP", "scrollUpExtendSelection",
+ "ctrl shift PAGE_UP", "scrollUpExtendSelection",
+ "ctrl PAGE_UP", "scrollUpChangeLead",
+ "PAGE_DOWN", "scrollDown",
+ "shift PAGE_DOWN", "scrollDownExtendSelection",
+ "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
+ "ctrl PAGE_DOWN", "scrollDownChangeLead",
+ "ctrl A", "selectAll",
+ "ctrl SLASH", "selectAll",
+ "ctrl BACK_SLASH", "clearSelection",
+ "SPACE", "addToSelection",
+ "ctrl SPACE", "toggleAndAnchor",
+ "shift SPACE", "extendTo",
+ "ctrl shift SPACE", "moveSelectionTo"
+ }));
+
+ DEFAULT_VALUES.put("List.focusInputMap.RightToLeft",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "LEFT", "selectNextColumn",
+ "KP_LEFT", "selectNextColumn",
+ "shift LEFT", "selectNextColumnExtendSelection",
+ "shift KP_LEFT", "selectNextColumnExtendSelection",
+ "ctrl shift LEFT", "selectNextColumnExtendSelection",
+ "ctrl shift KP_LEFT", "selectNextColumnExtendSelection",
+ "ctrl LEFT", "selectNextColumnChangeLead",
+ "ctrl KP_LEFT", "selectNextColumnChangeLead",
+ "RIGHT", "selectPreviousColumn",
+ "KP_RIGHT", "selectPreviousColumn",
+ "shift RIGHT", "selectPreviousColumnExtendSelection",
+ "shift KP_RIGHT", "selectPreviousColumnExtendSelection",
+ "ctrl shift RIGHT", "selectPreviousColumnExtendSelection",
+ "ctrl shift KP_RIGHT", "selectPreviousColumnExtendSelection",
+ "ctrl RIGHT", "selectPreviousColumnChangeLead",
+ "ctrl KP_RIGHT", "selectPreviousColumnChangeLead",
+ }));
+
+ DEFAULT_VALUES.put("MenuBar.windowBindings",
+ new Object[] { "F10", "takeFocus" });
+
+ DEFAULT_VALUES.put("OptionPane.windowBindings",
+ new Object[] { "ESCAPE", "close" });
+
+ DEFAULT_VALUES.put("RootPane.defaultButtonWindowKeyBindings",
+ new Object[] {
+ "ENTER", "press",
+ "released ENTER", "release",
+ "ctrl ENTER", "press",
+ "ctrl released ENTER", "release"
+ });
+
+ DEFAULT_VALUES.put("RootPane.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "shift F10", "postPopup"
+ }));
+
+ DEFAULT_VALUES.put("ScrollBar.anecstorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "RIGHT", "positiveUnitIncrement",
+ "KP_RIGHT", "positiveUnitIncrement",
+ "DOWN", "positiveUnitIncrement",
+ "KP_DOWN", "positiveUnitIncrement",
+ "PAGE_DOWN", "positiveBlockIncrement",
+ "LEFT", "negativeUnitIncrement",
+ "KP_LEFT", "negativeUnitIncrement",
+ "UP", "negativeUnitIncrement",
+ "KP_UP", "negativeUnitIncrement",
+ "PAGE_UP", "negativeBlockIncrement",
+ "HOME", "minScroll",
+ "END", "maxScroll"
+ }));
+
+ DEFAULT_VALUES.put("ScrollBar.ancestorInputMap.RightToLeft",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "RIGHT", "negativeUnitIncrement",
+ "KP_RIGHT", "negativeUnitIncrement",
+ "LEFT", "positiveUnitIncrement",
+ "KP_LEFT", "positiveUnitIncrement",
+ }));
+
+ DEFAULT_VALUES.put("ScrollPane.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "RIGHT", "unitScrollRight",
+ "KP_RIGHT", "unitScrollRight",
+ "DOWN", "unitScrollDown",
+ "KP_DOWN", "unitScrollDown",
+ "LEFT", "unitScrollLeft",
+ "KP_LEFT", "unitScrollLeft",
+ "UP", "unitScrollUp",
+ "KP_UP", "unitScrollUp",
+ "PAGE_UP", "scrollUp",
+ "PAGE_DOWN", "scrollDown",
+ "ctrl PAGE_UP", "scrollLeft",
+ "ctrl PAGE_DOWN", "scrollRight",
+ "ctrl HOME", "scrollHome",
+ "ctrl END", "scrollEnd"
+ }));
+ DEFAULT_VALUES.put("ScrollPane.ancestorInputMap.RightToLeft",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ctrl PAGE_UP", "scrollRight",
+ "ctrl PAGE_DOWN", "scrollLeft",
+ }));
+
+ DEFAULT_VALUES.put("SplitPane.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "UP", "negativeIncrement",
+ "DOWN", "positiveIncrement",
+ "LEFT", "negativeIncrement",
+ "RIGHT", "positiveIncrement",
+ "KP_UP", "negativeIncrement",
+ "KP_DOWN", "positiveIncrement",
+ "KP_LEFT", "negativeIncrement",
+ "KP_RIGHT", "positiveIncrement",
+ "HOME", "selectMin",
+ "END", "selectMax",
+ "F8", "startResize",
+ "F6", "toggleFocus",
+ "ctrl TAB", "focusOutForward",
+ "ctrl shift TAB", "focusOutBackward"
+ }));
+
+ DEFAULT_VALUES.put("Spinner.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "UP", "increment",
+ "KP_UP", "increment",
+ "DOWN", "decrement",
+ "KP_DOWN", "decrement"
+ }));
+
+ DEFAULT_VALUES.put("Slider.focusInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "RIGHT", "positiveUnitIncrement",
+ "KP_RIGHT", "positiveUnitIncrement",
+ "DOWN", "negativeUnitIncrement",
+ "KP_DOWN", "negativeUnitIncrement",
+ "PAGE_DOWN", "negativeBlockIncrement",
+ "ctrl PAGE_DOWN", "negativeBlockIncrement",
+ "LEFT", "negativeUnitIncrement",
+ "KP_LEFT", "negativeUnitIncrement",
+ "UP", "positiveUnitIncrement",
+ "KP_UP", "positiveUnitIncrement",
+ "PAGE_UP", "positiveBlockIncrement",
+ "ctrl PAGE_UP", "positiveBlockIncrement",
+ "HOME", "minScroll",
+ "END", "maxScroll"
+ }));
+
+ DEFAULT_VALUES.put("Slider.focusInputMap.RightToLeft",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "RIGHT", "negativeUnitIncrement",
+ "KP_RIGHT", "negativeUnitIncrement",
+ "LEFT", "positiveUnitIncrement",
+ "KP_LEFT", "positiveUnitIncrement",
+ }));
+
+ DEFAULT_VALUES.put("TabbedPane.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ctrl PAGE_DOWN", "navigatePageDown",
+ "ctrl PAGE_UP", "navigatePageUp",
+ "ctrl UP", "requestFocus",
+ "ctrl KP_UP", "requestFocus",
+ }));
+
+ DEFAULT_VALUES.put("TabbedPane.focusInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "RIGHT", "navigateRight",
+ "KP_RIGHT", "navigateRight",
+ "LEFT", "navigateLeft",
+ "KP_LEFT", "navigateLeft",
+ "UP", "navigateUp",
+ "KP_UP", "navigateUp",
+ "DOWN", "navigateDown",
+ "KP_DOWN", "navigateDown",
+ "ctrl DOWN", "requestFocusForVisibleComponent",
+ "ctrl KP_DOWN", "requestFocusForVisibleComponent",
+ }));
+
+ DEFAULT_VALUES.put("Table.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ctrl C", "copy",
+ "ctrl V", "paste",
+ "ctrl X", "cut",
+ "COPY", "copy",
+ "PASTE", "paste",
+ "CUT", "cut",
+ "control INSERT", "copy",
+ "shift INSERT", "paste",
+ "shift DELETE", "cut",
+ "RIGHT", "selectNextColumn",
+ "KP_RIGHT", "selectNextColumn",
+ "shift RIGHT", "selectNextColumnExtendSelection",
+ "shift KP_RIGHT", "selectNextColumnExtendSelection",
+ "ctrl shift RIGHT", "selectNextColumnExtendSelection",
+ "ctrl shift KP_RIGHT", "selectNextColumnExtendSelection",
+ "ctrl RIGHT", "selectNextColumnChangeLead",
+ "ctrl KP_RIGHT", "selectNextColumnChangeLead",
+ "LEFT", "selectPreviousColumn",
+ "KP_LEFT", "selectPreviousColumn",
+ "shift LEFT", "selectPreviousColumnExtendSelection",
+ "shift KP_LEFT", "selectPreviousColumnExtendSelection",
+ "ctrl shift LEFT", "selectPreviousColumnExtendSelection",
+ "ctrl shift KP_LEFT", "selectPreviousColumnExtendSelection",
+ "ctrl LEFT", "selectPreviousColumnChangeLead",
+ "ctrl KP_LEFT", "selectPreviousColumnChangeLead",
+ "DOWN", "selectNextRow",
+ "KP_DOWN", "selectNextRow",
+ "shift DOWN", "selectNextRowExtendSelection",
+ "shift KP_DOWN", "selectNextRowExtendSelection",
+ "ctrl shift DOWN", "selectNextRowExtendSelection",
+ "ctrl shift KP_DOWN", "selectNextRowExtendSelection",
+ "ctrl DOWN", "selectNextRowChangeLead",
+ "ctrl KP_DOWN", "selectNextRowChangeLead",
+ "UP", "selectPreviousRow",
+ "KP_UP", "selectPreviousRow",
+ "shift UP", "selectPreviousRowExtendSelection",
+ "shift KP_UP", "selectPreviousRowExtendSelection",
+ "ctrl shift UP", "selectPreviousRowExtendSelection",
+ "ctrl shift KP_UP", "selectPreviousRowExtendSelection",
+ "ctrl UP", "selectPreviousRowChangeLead",
+ "ctrl KP_UP", "selectPreviousRowChangeLead",
+ "HOME", "selectFirstColumn",
+ "shift HOME", "selectFirstColumnExtendSelection",
+ "ctrl shift HOME", "selectFirstRowExtendSelection",
+ "ctrl HOME", "selectFirstRow",
+ "END", "selectLastColumn",
+ "shift END", "selectLastColumnExtendSelection",
+ "ctrl shift END", "selectLastRowExtendSelection",
+ "ctrl END", "selectLastRow",
+ "PAGE_UP", "scrollUpChangeSelection",
+ "shift PAGE_UP", "scrollUpExtendSelection",
+ "ctrl shift PAGE_UP", "scrollLeftExtendSelection",
+ "ctrl PAGE_UP", "scrollLeftChangeSelection",
+ "PAGE_DOWN", "scrollDownChangeSelection",
+ "shift PAGE_DOWN", "scrollDownExtendSelection",
+ "ctrl shift PAGE_DOWN", "scrollRightExtendSelection",
+ "ctrl PAGE_DOWN", "scrollRightChangeSelection",
+ "TAB", "selectNextColumnCell",
+ "shift TAB", "selectPreviousColumnCell",
+ "ENTER", "selectNextRowCell",
+ "shift ENTER", "selectPreviousRowCell",
+ "ctrl A", "selectAll",
+ "ctrl SLASH", "selectAll",
+ "ctrl BACK_SLASH", "clearSelection",
+ "ESCAPE", "cancel",
+ "F2", "startEditing",
+ "SPACE", "addToSelection",
+ "ctrl SPACE", "toggleAndAnchor",
+ "shift SPACE", "extendTo",
+ "ctrl shift SPACE", "moveSelectionTo",
+ "F8", "focusHeader"
+ }));
+
+ DEFAULT_VALUES.put("TableHeader.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "SPACE", "toggleSortOrder",
+ "LEFT", "selectColumnToLeft",
+ "KP_LEFT", "selectColumnToLeft",
+ "RIGHT", "selectColumnToRight",
+ "KP_RIGHT", "selectColumnToRight",
+ "alt LEFT", "moveColumnLeft",
+ "alt KP_LEFT", "moveColumnLeft",
+ "alt RIGHT", "moveColumnRight",
+ "alt KP_RIGHT", "moveColumnRight",
+ "alt shift LEFT", "resizeLeft",
+ "alt shift KP_LEFT", "resizeLeft",
+ "alt shift RIGHT", "resizeRight",
+ "alt shift KP_RIGHT", "resizeRight",
+ "ESCAPE", "focusTable",
+ }));
+
+ DEFAULT_VALUES.put("Tree.ancestorInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ESCAPE", "cancel"
+ }));
+ DEFAULT_VALUES.put("Tree.focusInputMap",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "ADD", "expand",
+ "SUBTRACT", "collapse",
+ "ctrl C", "copy",
+ "ctrl V", "paste",
+ "ctrl X", "cut",
+ "COPY", "copy",
+ "PASTE", "paste",
+ "CUT", "cut",
+ "control INSERT", "copy",
+ "shift INSERT", "paste",
+ "shift DELETE", "cut",
+ "UP", "selectPrevious",
+ "KP_UP", "selectPrevious",
+ "shift UP", "selectPreviousExtendSelection",
+ "shift KP_UP", "selectPreviousExtendSelection",
+ "ctrl shift UP", "selectPreviousExtendSelection",
+ "ctrl shift KP_UP", "selectPreviousExtendSelection",
+ "ctrl UP", "selectPreviousChangeLead",
+ "ctrl KP_UP", "selectPreviousChangeLead",
+ "DOWN", "selectNext",
+ "KP_DOWN", "selectNext",
+ "shift DOWN", "selectNextExtendSelection",
+ "shift KP_DOWN", "selectNextExtendSelection",
+ "ctrl shift DOWN", "selectNextExtendSelection",
+ "ctrl shift KP_DOWN", "selectNextExtendSelection",
+ "ctrl DOWN", "selectNextChangeLead",
+ "ctrl KP_DOWN", "selectNextChangeLead",
+ "RIGHT", "selectChild",
+ "KP_RIGHT", "selectChild",
+ "LEFT", "selectParent",
+ "KP_LEFT", "selectParent",
+ "PAGE_UP", "scrollUpChangeSelection",
+ "shift PAGE_UP", "scrollUpExtendSelection",
+ "ctrl shift PAGE_UP", "scrollUpExtendSelection",
+ "ctrl PAGE_UP", "scrollUpChangeLead",
+ "PAGE_DOWN", "scrollDownChangeSelection",
+ "shift PAGE_DOWN", "scrollDownExtendSelection",
+ "ctrl shift PAGE_DOWN", "scrollDownExtendSelection",
+ "ctrl PAGE_DOWN", "scrollDownChangeLead",
+ "HOME", "selectFirst",
+ "shift HOME", "selectFirstExtendSelection",
+ "ctrl shift HOME", "selectFirstExtendSelection",
+ "ctrl HOME", "selectFirstChangeLead",
+ "END", "selectLast",
+ "shift END", "selectLastExtendSelection",
+ "ctrl shift END", "selectLastExtendSelection",
+ "ctrl END", "selectLastChangeLead",
+ "F2", "startEditing",
+ "ctrl A", "selectAll",
+ "ctrl SLASH", "selectAll",
+ "ctrl BACK_SLASH", "clearSelection",
+ "ctrl LEFT", "scrollLeft",
+ "ctrl KP_LEFT", "scrollLeft",
+ "ctrl RIGHT", "scrollRight",
+ "ctrl KP_RIGHT", "scrollRight",
+ "SPACE", "addToSelection",
+ "ctrl SPACE", "toggleAndAnchor",
+ "shift SPACE", "extendTo",
+ "ctrl shift SPACE", "moveSelectionTo"
+ }));
+ DEFAULT_VALUES.put("Tree.focusInputMap.RightToLeft",
+ new UIDefaults.LazyInputMap(new Object[] {
+ "RIGHT", "selectParent",
+ "KP_RIGHT", "selectParent",
+ "LEFT", "selectChild",
+ "KP_LEFT", "selectChild",
+ }));
+ }
+
+ /**
+ * Returns the default value for the specified property, or null if there
+ * is no default for the specified value.
+ */
+ private static Object getDefaultValue(Object key) {
+ synchronized(SynthStyle.class) {
+ if (DEFAULT_VALUES == null) {
+ DEFAULT_VALUES = new HashMap();
+ populateDefaultValues();
+ }
+ Object value = DEFAULT_VALUES.get(key);
+ if (value instanceof UIDefaults.LazyValue) {
+ value = ((UIDefaults.LazyValue)value).createValue(null);
+ DEFAULT_VALUES.put(key, value);
+ }
+ return value;
+ }
+ }
+
+ /**
+ * Constructs a SynthStyle.
+ */
+ public SynthStyle() {
+ }
+
+ /**
+ * Returns the <code>SynthGraphicUtils</code> for the specified context.
+ *
+ * @param context SynthContext identifying requester
+ * @return SynthGraphicsUtils
+ */
+ public SynthGraphicsUtils getGraphicsUtils(SynthContext context) {
+ return SYNTH_GRAPHICS;
+ }
+
+ /**
+ * Returns the color for the specified state. This gives precedence to
+ * foreground and background of the <code>JComponent</code>. If the
+ * <code>Color</code> from the <code>JComponent</code> is not appropriate,
+ * or not used, this will invoke <code>getColorForState</code>. Subclasses
+ * should generally not have to override this, instead override
+ * {@link #getColorForState}.
+ *
+ * @param context SynthContext identifying requester
+ * @param type Type of color being requested.
+ * @return Color
+ */
+ public Color getColor(SynthContext context, ColorType type) {
+ JComponent c = context.getComponent();
+ Region id = context.getRegion();
+ int cs = context.getComponentState();
+ // For the enabled state, prefer the widget's colors
+ if (!id.isSubregion() && cs == SynthConstants.ENABLED) {
+ if (type == ColorType.BACKGROUND) {
+ return c.getBackground();
+ }
+ else if (type == ColorType.FOREGROUND) {
+ return c.getForeground();
+ }
+ else if (type == ColorType.TEXT_FOREGROUND) {
+ // If getForeground returns a non-UIResource it means the
+ // developer has explicitly set the foreground, use it over
+ // that of TEXT_FOREGROUND as that is typically the expected
+ // behavior.
+ Color color = c.getForeground();
+ if (!(color instanceof UIResource)) {
+ return color;
+ }
+ }
+ }
+ // Then use what we've locally defined
+ Color color = getColorForState(context, type);
+ if (color == null) {
+ // No color, fallback to that of the widget.
+ if (type == ColorType.BACKGROUND ||
+ type == ColorType.TEXT_BACKGROUND) {
+ return c.getBackground();
+ }
+ else if (type == ColorType.FOREGROUND ||
+ type == ColorType.TEXT_FOREGROUND) {
+ return c.getForeground();
+ }
+ }
+ return color;
+ }
+
+ /**
+ * Returns the color for the specified state. This should NOT call any
+ * methods on the <code>JComponent</code>.
+ *
+ * @param context SynthContext identifying requester
+ * @param type Type of color being requested.
+ * @return Color to render with
+ */
+ protected abstract Color getColorForState(SynthContext context,
+ ColorType type);
+
+ /**
+ * Returns the Font for the specified state. This redirects to the
+ * <code>JComponent</code> from the <code>context</code> as necessary.
+ * If this does not redirect
+ * to the JComponent {@link #getFontForState} is invoked.
+ *
+ * @param context SynthContext identifying requester
+ * @return Font to render with
+ */
+ public Font getFont(SynthContext context) {
+ JComponent c = context.getComponent();
+ if (context.getComponentState() == SynthConstants.ENABLED) {
+ return c.getFont();
+ }
+ Font cFont = c.getFont();
+ if (cFont != null && !(cFont instanceof UIResource)) {
+ return cFont;
+ }
+ return getFontForState(context);
+ }
+
+ /**
+ * Returns the font for the specified state. This should NOT call any
+ * method on the <code>JComponent</code>.
+ *
+ * @param context SynthContext identifying requester
+ * @return Font to render with
+ */
+ protected abstract Font getFontForState(SynthContext context);
+
+ /**
+ * Returns the Insets that are used to calculate sizing information.
+ *
+ * @param context SynthContext identifying requester
+ * @param insets Insets to place return value in.
+ * @return Sizing Insets.
+ */
+ public Insets getInsets(SynthContext context, Insets insets) {
+ if (insets == null) {
+ insets = new Insets(0, 0, 0, 0);
+ }
+ insets.top = insets.bottom = insets.left = insets.right = 0;
+ return insets;
+ }
+
+ /**
+ * Returns the <code>SynthPainter</code> that will be used for painting.
+ * This may return null.
+ *
+ * @param context SynthContext identifying requester
+ * @return SynthPainter to use
+ */
+ public SynthPainter getPainter(SynthContext context) {
+ return null;
+ }
+
+ /**
+ * Returns true if the region is opaque.
+ *
+ * @param context SynthContext identifying requester
+ * @return true if region is opaque.
+ */
+ public boolean isOpaque(SynthContext context) {
+ return true;
+ }
+
+ /**
+ * Getter for a region specific style property.
+ *
+ * @param context SynthContext identifying requester
+ * @param key Property being requested.
+ * @return Value of the named property
+ */
+ public Object get(SynthContext context, Object key) {
+ return getDefaultValue(key);
+ }
+
+ void installDefaults(SynthContext context, SynthUI ui) {
+ // Special case the Border as this will likely change when the LAF
+ // can have more control over this.
+ if (!context.isSubregion()) {
+ JComponent c = context.getComponent();
+ Border border = c.getBorder();
+
+ if (border == null || border instanceof UIResource) {
+ c.setBorder(new SynthBorder(ui, getInsets(context, null)));
+ }
+ }
+ installDefaults(context);
+ }
+
+ /**
+ * Installs the necessary state from this Style on the
+ * <code>JComponent</code> from <code>context</code>.
+ *
+ * @param context SynthContext identifying component to install properties
+ * to.
+ */
+ public void installDefaults(SynthContext context) {
+ if (!context.isSubregion()) {
+ JComponent c = context.getComponent();
+ Region region = context.getRegion();
+ Font font = c.getFont();
+
+ if (font == null || (font instanceof UIResource)) {
+ c.setFont(getFontForState(context));
+ }
+ Color background = c.getBackground();
+ if (background == null || (background instanceof UIResource)) {
+ c.setBackground(getColorForState(context,
+ ColorType.BACKGROUND));
+ }
+ Color foreground = c.getForeground();
+ if (foreground == null || (foreground instanceof UIResource)) {
+ c.setForeground(getColorForState(context,
+ ColorType.FOREGROUND));
+ }
+ LookAndFeel.installProperty(c, "opaque", Boolean.valueOf(isOpaque(context)));
+ }
+ }
+
+ /**
+ * Uninstalls any state that this style installed on
+ * the <code>JComponent</code> from <code>context</code>.
+ * <p>
+ * Styles should NOT depend upon this being called, in certain cases
+ * it may never be called.
+ *
+ * @param context SynthContext identifying component to install properties
+ * to.
+ */
+ public void uninstallDefaults(SynthContext context) {
+ if (!context.isSubregion()) {
+ // NOTE: because getForeground, getBackground and getFont will look
+ // at the parent Container, if we set them to null it may
+ // mean we they return a non-null and non-UIResource value
+ // preventing install from correctly settings its colors/font. For
+ // this reason we do not uninstall the fg/bg/font.
+
+ JComponent c = context.getComponent();
+ Border border = c.getBorder();
+
+ if (border instanceof UIResource) {
+ c.setBorder(null);
+ }
+ }
+ }
+
+ /**
+ * Convenience method to get a specific style property whose value is
+ * a <code>Number</code>. If the value is a <code>Number</code>,
+ * <code>intValue</code> is returned, otherwise <code>defaultValue</code>
+ * is returned.
+ *
+ * @param context SynthContext identifying requester
+ * @param key Property being requested.
+ * @param defaultValue Value to return if the property has not been
+ * specified, or is not a Number
+ * @return Value of the named property
+ */
+ public int getInt(SynthContext context, Object key, int defaultValue) {
+ Object value = get(context, key);
+
+ if (value instanceof Number) {
+ return ((Number)value).intValue();
+ }
+ return defaultValue;
+ }
+
+ /**
+ * Convenience method to get a specific style property whose value is
+ * an Boolean.
+ *
+ * @param context SynthContext identifying requester
+ * @param key Property being requested.
+ * @param defaultValue Value to return if the property has not been
+ * specified, or is not a Boolean
+ * @return Value of the named property
+ */
+ public boolean getBoolean(SynthContext context, Object key,
+ boolean defaultValue) {
+ Object value = get(context, key);
+
+ if (value instanceof Boolean) {
+ return ((Boolean)value).booleanValue();
+ }
+ return defaultValue;
+ }
+
+ /**
+ * Convenience method to get a specific style property whose value is
+ * an Icon.
+ *
+ * @param context SynthContext identifying requester
+ * @param key Property being requested.
+ * @return Value of the named property, or null if not specified
+ */
+ public Icon getIcon(SynthContext context, Object key) {
+ Object value = get(context, key);
+
+ if (value instanceof Icon) {
+ return (Icon)value;
+ }
+ return null;
+ }
+
+ /**
+ * Convenience method to get a specific style property whose value is
+ * a String.
+ *
+ * @param context SynthContext identifying requester
+ * @param key Property being requested.
+ * @param defaultValue Value to return if the property has not been
+ * specified, or is not a String
+ * @return Value of the named property
+ */
+ public String getString(SynthContext context, Object key,
+ String defaultValue) {
+ Object value = get(context, key);
+
+ if (value instanceof String) {
+ return (String)value;
+ }
+ return defaultValue;
+ }
+}