/* * @(#)Region.java 1.30 04/02/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.swing.plaf.synth; import javax.swing.*; import java.util.*; /** * A distinct rendering area of a Swing component. A component may * support one or more regions. Specific component regions are defined * by the typesafe enumeration in this class. *
* Regions are typically used as a way to identify the Component
s
* and areas a particular style is to apply to. Synth's file format allows you
* to bind styles based on the name of a Region
.
* The name is derived from the field name of the constant:
*
SPLIT_PANE
* Region
you would use SplitPane
.
* The following shows a custom SynthStyleFactory
* that returns a specific style for split panes:
* * public SynthStyle getStyle(JComponent c, Region id) { * if (id == Region.SPLIT_PANE) { * return splitPaneStyle; * } * ... * } ** The following xml * accomplishes the same thing: *
* <style id="splitPaneStyle"> * ... * </style> * <bind style="splitPaneStyle" type="region" key="SplitPane"/> ** * @version 1.30, 02/19/04 * @since 1.5 * @author Scott Violet */ public class Region { private static final Map uiToRegionMap = new HashMap(); private static final Map lowerCaseNameMap = new HashMap(); /** * ArrowButton's are special types of buttons that also render a * directional indicator, typically an arrow. ArrowButtons are used by * composite components, for example ScrollBar's contain ArrowButtons. * To bind a style to this
Region
use the name
* ArrowButton
.
*/
public static final Region ARROW_BUTTON = new Region("ArrowButton",
"ArrowButtonUI");
/**
* Button region. To bind a style to this Region
use the name
* Button
.
*/
public static final Region BUTTON = new Region("Button",
"ButtonUI");
/**
* CheckBox region. To bind a style to this Region
use the name
* CheckBox
.
*/
public static final Region CHECK_BOX = new Region("CheckBox",
"CheckBoxUI");
/**
* CheckBoxMenuItem region. To bind a style to this Region
use
* the name CheckBoxMenuItem
.
*/
public static final Region CHECK_BOX_MENU_ITEM = new Region(
"CheckBoxMenuItem", "CheckBoxMenuItemUI");
/**
* ColorChooser region. To bind a style to this Region
use
* the name ColorChooser
.
*/
public static final Region COLOR_CHOOSER = new Region(
"ColorChooser", "ColorChooserUI");
/**
* ComboBox region. To bind a style to this Region
use
* the name ComboBox
.
*/
public static final Region COMBO_BOX = new Region(
"ComboBox", "ComboBoxUI");
/**
* DesktopPane region. To bind a style to this Region
use
* the name DesktopPane
.
*/
public static final Region DESKTOP_PANE = new Region("DesktopPane",
"DesktopPaneUI");
/**
* DesktopIcon region. To bind a style to this Region
use
* the name DesktopIcon
.
*/
public static final Region DESKTOP_ICON = new Region("DesktopIcon",
"DesktopIconUI");
/**
* EditorPane region. To bind a style to this Region
use
* the name EditorPane
.
*/
public static final Region EDITOR_PANE = new Region("EditorPane",
"EditorPaneUI");
/**
* FileChooser region. To bind a style to this Region
use
* the name FileChooser
.
*/
public static final Region FILE_CHOOSER = new Region("FileChooser",
"FileChooserUI");
/**
* FormattedTextField region. To bind a style to this Region
use
* the name FormattedTextField
.
*/
public static final Region FORMATTED_TEXT_FIELD = new Region(
"FormattedTextField", "FormattedTextFieldUI");
/**
* InternalFrame region. To bind a style to this Region
use
* the name InternalFrame
.
*/
public static final Region INTERNAL_FRAME = new Region("InternalFrame",
"InternalFrameUI");
/**
* TitlePane of an InternalFrame. The TitlePane typically
* shows a menu, title, widgets to manipulate the internal frame.
* To bind a style to this Region
use the name
* InternalFrameTitlePane
.
*/
public static final Region INTERNAL_FRAME_TITLE_PANE =
new Region("InternalFrameTitlePane",
"InternalFrameTitlePaneUI");
/**
* Label region. To bind a style to this Region
use the name
* Label
.
*/
public static final Region LABEL = new Region("Label", "LabelUI");
/**
* List region. To bind a style to this Region
use the name
* List
.
*/
public static final Region LIST = new Region("List", "ListUI");
/**
* Menu region. To bind a style to this Region
use the name
* Menu
.
*/
public static final Region MENU = new Region("Menu", "MenuUI");
/**
* MenuBar region. To bind a style to this Region
use the name
* MenuBar
.
*/
public static final Region MENU_BAR = new Region("MenuBar", "MenuBarUI");
/**
* MenuItem region. To bind a style to this Region
use the name
* MenuItem
.
*/
public static final Region MENU_ITEM = new Region("MenuItem","MenuItemUI");
/**
* Accelerator region of a MenuItem. To bind a style to this
* Region
use the name MenuItemAccelerator
.
*/
public static final Region MENU_ITEM_ACCELERATOR = new Region(
"MenuItemAccelerator");
/**
* OptionPane region. To bind a style to this Region
use
* the name OptionPane
.
*/
public static final Region OPTION_PANE = new Region("OptionPane",
"OptionPaneUI");
/**
* Panel region. To bind a style to this Region
use the name
* Panel
.
*/
public static final Region PANEL = new Region("Panel", "PanelUI");
/**
* PasswordField region. To bind a style to this Region
use
* the name PasswordField
.
*/
public static final Region PASSWORD_FIELD = new Region("PasswordField",
"PasswordFieldUI");
/**
* PopupMenu region. To bind a style to this Region
use
* the name PopupMenu
.
*/
public static final Region POPUP_MENU = new Region("PopupMenu",
"PopupMenuUI");
/**
* PopupMenuSeparator region. To bind a style to this Region
* use the name PopupMenuSeparator
.
*/
public static final Region POPUP_MENU_SEPARATOR = new Region(
"PopupMenuSeparator", "PopupMenuSeparatorUI");
/**
* ProgressBar region. To bind a style to this Region
* use the name ProgressBar
.
*/
public static final Region PROGRESS_BAR = new Region("ProgressBar",
"ProgressBarUI");
/**
* RadioButton region. To bind a style to this Region
* use the name RadioButton
.
*/
public static final Region RADIO_BUTTON = new Region(
"RadioButton", "RadioButtonUI");
/**
* RegionButtonMenuItem region. To bind a style to this Region
* use the name RadioButtonMenuItem
.
*/
public static final Region RADIO_BUTTON_MENU_ITEM = new Region(
"RadioButtonMenuItem", "RadioButtonMenuItemUI");
/**
* RootPane region. To bind a style to this Region
use
* the name RootPane
.
*/
public static final Region ROOT_PANE = new Region("RootPane",
"RootPaneUI");
/**
* ScrollBar region. To bind a style to this Region
use
* the name ScrollBar
.
*/
public static final Region SCROLL_BAR = new Region("ScrollBar",
"ScrollBarUI");
/**
* Track of the ScrollBar. To bind a style to this Region
use
* the name ScrollBarTrack
.
*/
public static final Region SCROLL_BAR_TRACK = new Region("ScrollBarTrack");
/**
* Thumb of the ScrollBar. The thumb is the region of the ScrollBar
* that gives a graphical depiction of what percentage of the View is
* currently visible. To bind a style to this Region
use
* the name ScrollBarThumb
.
*/
public static final Region SCROLL_BAR_THUMB = new Region("ScrollBarThumb");
/**
* ScrollPane region. To bind a style to this Region
use
* the name ScrollPane
.
*/
public static final Region SCROLL_PANE = new Region("ScrollPane",
"ScrollPaneUI");
/**
* Separator region. To bind a style to this Region
use
* the name Separator
.
*/
public static final Region SEPARATOR = new Region("Separator",
"SeparatorUI");
/**
* Slider region. To bind a style to this Region
use
* the name Slider
.
*/
public static final Region SLIDER = new Region("Slider", "SliderUI");
/**
* Track of the Slider. To bind a style to this Region
use
* the name SliderTrack
.
*/
public static final Region SLIDER_TRACK = new Region("SliderTrack");
/**
* Thumb of the Slider. The thumb of the Slider identifies the current
* value. To bind a style to this Region
use the name
* SliderThumb
.
*/
public static final Region SLIDER_THUMB = new Region("SliderThumb");
/**
* Spinner region. To bind a style to this Region
use the name
* Spinner
.
*/
public static final Region SPINNER = new Region("Spinner", "SpinnerUI");
/**
* SplitPane region. To bind a style to this Region
use the name
* SplitPane
.
*/
public static final Region SPLIT_PANE = new Region("SplitPane",
"SplitPaneUI");
/**
* Divider of the SplitPane. To bind a style to this Region
* use the name SplitPaneDivider
.
*/
public static final Region SPLIT_PANE_DIVIDER = new Region(
"SplitPaneDivider");
/**
* TabbedPane region. To bind a style to this Region
use
* the name TabbedPane
.
*/
public static final Region TABBED_PANE = new Region("TabbedPane",
"TabbedPaneUI");
/**
* Region of a TabbedPane for one tab. To bind a style to this
* Region
use the name TabbedPaneTab
.
*/
public static final Region TABBED_PANE_TAB = new Region("TabbedPaneTab");
/**
* Region of a TabbedPane containing the tabs. To bind a style to this
* Region
use the name TabbedPaneTabArea
.
*/
public static final Region TABBED_PANE_TAB_AREA =
new Region("TabbedPaneTabArea");
/**
* Region of a TabbedPane containing the content. To bind a style to this
* Region
use the name TabbedPaneContent
.
*/
public static final Region TABBED_PANE_CONTENT =
new Region("TabbedPaneContent");
/**
* Table region. To bind a style to this Region
use
* the name Table
.
*/
public static final Region TABLE = new Region("Table", "TableUI");
/**
* TableHeader region. To bind a style to this Region
use
* the name TableHeader
.
*/
public static final Region TABLE_HEADER = new Region("TableHeader",
"TableHeaderUI");
/**
* TextArea region. To bind a style to this Region
use
* the name TextArea
.
*/
public static final Region TEXT_AREA = new Region("TextArea",
"TextAreaUI");
/**
* TextField region. To bind a style to this Region
use
* the name TextField
.
*/
public static final Region TEXT_FIELD = new Region("TextField",
"TextFieldUI");
/**
* TextPane region. To bind a style to this Region
use
* the name TextPane
.
*/
public static final Region TEXT_PANE = new Region("TextPane",
"TextPaneUI");
/**
* ToggleButton region. To bind a style to this Region
use
* the name ToggleButton
.
*/
public static final Region TOGGLE_BUTTON = new Region("ToggleButton",
"ToggleButtonUI");
/**
* ToolBar region. To bind a style to this Region
use
* the name ToolBar
.
*/
public static final Region TOOL_BAR = new Region("ToolBar", "ToolBarUI");
/**
* Region of the ToolBar containing the content. To bind a style to this
* Region
use the name ToolBarContent
.
*/
public static final Region TOOL_BAR_CONTENT = new Region("ToolBarContent");
/**
* Region for the Window containing the ToolBar. To bind a style to this
* Region
use the name ToolBarDragWindow
.
*/
public static final Region TOOL_BAR_DRAG_WINDOW = new Region(
"ToolBarDragWindow", null, false);
/**
* ToolTip region. To bind a style to this Region
use
* the name ToolTip
.
*/
public static final Region TOOL_TIP = new Region("ToolTip", "ToolTipUI");
/**
* ToolBar separator region. To bind a style to this Region
use
* the name ToolBarSeparator
.
*/
public static final Region TOOL_BAR_SEPARATOR = new Region(
"ToolBarSeparator", "ToolBarSeparatorUI");
/**
* Tree region. To bind a style to this Region
use the name
* Tree
.
*/
public static final Region TREE = new Region("Tree", "TreeUI");
/**
* Region of the Tree for one cell. To bind a style to this
* Region
use the name TreeCell
.
*/
public static final Region TREE_CELL = new Region("TreeCell");
/**
* Viewport region. To bind a style to this Region
use
* the name Viewport
.
*/
public static final Region VIEWPORT = new Region("Viewport", "ViewportUI");
private String name;
private boolean subregion;
static Region getRegion(JComponent c) {
return (Region)uiToRegionMap.get(c.getUIClassID());
}
static void registerUIs(UIDefaults table) {
Iterator uis = uiToRegionMap.keySet().iterator();
while (uis.hasNext()) {
Object key = uis.next();
table.put(key, "javax.swing.plaf.synth.SynthLookAndFeel");
}
}
Region(String name) {
this(name, null, true);
}
Region(String name, String ui) {
this(name, ui, false);
}
/**
* Creates a Region with the specified name. This should only be
* used if you are creating your own JComponent
subclass
* with a custom ComponentUI
class.
*
* @param name Name of the region
* @param ui String that will be returned from
* component.getUIClassID
. This will be null
* if this is a subregion.
* @param subregion Whether or not this is a subregion.
*/
protected Region(String name, String ui, boolean subregion) {
if (name == null) {
throw new NullPointerException("You must specify a non-null name");
}
this.name = name;
if (ui != null) {
uiToRegionMap.put(ui, this);
}
this.subregion = subregion;
}
/**
* Returns true if the Region is a subregion of a Component, otherwise
* false. For example, Region.BUTTON
corresponds do a
* Component
so that Region.BUTTON.isSubregion()
* returns false.
*
* @return true if the Region is a subregion of a Component.
*/
public boolean isSubregion() {
return subregion;
}
/**
* Returns the name of the region.
*
* @return name of the Region.
*/
public String getName() {
return name;
}
/**
* Returns the name, in lowercase.
*/
String getLowerCaseName() {
synchronized(lowerCaseNameMap) {
String lowerCaseName = (String)lowerCaseNameMap.get(this);
if (lowerCaseName == null) {
lowerCaseName = getName().toLowerCase();
lowerCaseNameMap.put(this, lowerCaseName);
}
return lowerCaseName;
}
}
/**
* Returns the name of the Region.
*
* @return name of the Region.
*/
public String toString() {
return name;
}
}