--- old/src/java.desktop/share/classes/com/sun/java/swing/plaf/windows/TMSchema.java 2017-11-27 16:55:27.000000000 -0800 +++ /dev/null 2017-11-27 16:55:28.000000000 -0800 @@ -1,577 +0,0 @@ -/* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. 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. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - *

These classes are designed to be used while the - * corresponding LookAndFeel class has been installed - * (UIManager.setLookAndFeel(new XXXLookAndFeel())). - * Using them while a different LookAndFeel is installed - * may produce unexpected results, including exceptions. - * Additionally, changing the LookAndFeel - * maintained by the UIManager without updating the - * corresponding ComponentUI of any - * JComponents may also produce unexpected results, - * such as the wrong colors showing up, and is generally not - * encouraged. - * - */ - -package com.sun.java.swing.plaf.windows; - -import java.awt.*; -import java.util.*; - -import javax.swing.*; - -import sun.awt.windows.ThemeReader; - -/** - * Implements Windows Parts and their States and Properties for the Windows Look and Feel. - * - * See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/topics/partsandstates.asp - * See tmschema.h (or vssym32.h & vsstyle.h for MS Vista) - * - * @author Leif Samuelsson - */ -class TMSchema { - - /** - * An enumeration of the various Windows controls (also known as - * components, or top-level parts) - */ - public static enum Control { - BUTTON, - COMBOBOX, - EDIT, - HEADER, - LISTBOX, - LISTVIEW, - MENU, - PROGRESS, - REBAR, - SCROLLBAR, - SPIN, - TAB, - TOOLBAR, - TRACKBAR, - TREEVIEW, - WINDOW - } - - - /** - * An enumeration of the Windows compoent parts - */ - public static enum Part { - MENU (Control.MENU, 0), // Special case, not in native - MP_BARBACKGROUND (Control.MENU, 7), - MP_BARITEM (Control.MENU, 8), - MP_POPUPBACKGROUND (Control.MENU, 9), - MP_POPUPBORDERS (Control.MENU, 10), - MP_POPUPCHECK (Control.MENU, 11), - MP_POPUPCHECKBACKGROUND (Control.MENU, 12), - MP_POPUPGUTTER (Control.MENU, 13), - MP_POPUPITEM (Control.MENU, 14), - MP_POPUPSEPARATOR (Control.MENU, 15), - MP_POPUPSUBMENU (Control.MENU, 16), - - BP_PUSHBUTTON (Control.BUTTON, 1), - BP_RADIOBUTTON(Control.BUTTON, 2), - BP_CHECKBOX (Control.BUTTON, 3), - BP_GROUPBOX (Control.BUTTON, 4), - - CP_COMBOBOX (Control.COMBOBOX, 0), - CP_DROPDOWNBUTTON(Control.COMBOBOX, 1), - CP_BACKGROUND (Control.COMBOBOX, 2), - CP_TRANSPARENTBACKGROUND (Control.COMBOBOX, 3), - CP_BORDER (Control.COMBOBOX, 4), - CP_READONLY (Control.COMBOBOX, 5), - CP_DROPDOWNBUTTONRIGHT (Control.COMBOBOX, 6), - CP_DROPDOWNBUTTONLEFT (Control.COMBOBOX, 7), - CP_CUEBANNER (Control.COMBOBOX, 8), - - - EP_EDIT (Control.EDIT, 0), - EP_EDITTEXT(Control.EDIT, 1), - - HP_HEADERITEM(Control.HEADER, 1), - HP_HEADERSORTARROW(Control.HEADER, 4), - - LBP_LISTBOX(Control.LISTBOX, 0), - - LBCP_BORDER_HSCROLL (Control.LISTBOX, 1), - LBCP_BORDER_HVSCROLL (Control.LISTBOX, 2), - LBCP_BORDER_NOSCROLL (Control.LISTBOX, 3), - LBCP_BORDER_VSCROLL (Control.LISTBOX, 4), - LBCP_ITEM (Control.LISTBOX, 5), - - LVP_LISTVIEW(Control.LISTVIEW, 0), - - PP_PROGRESS (Control.PROGRESS, 0), - PP_BAR (Control.PROGRESS, 1), - PP_BARVERT (Control.PROGRESS, 2), - PP_CHUNK (Control.PROGRESS, 3), - PP_CHUNKVERT(Control.PROGRESS, 4), - - RP_GRIPPER (Control.REBAR, 1), - RP_GRIPPERVERT(Control.REBAR, 2), - - SBP_SCROLLBAR (Control.SCROLLBAR, 0), - SBP_ARROWBTN (Control.SCROLLBAR, 1), - SBP_THUMBBTNHORZ (Control.SCROLLBAR, 2), - SBP_THUMBBTNVERT (Control.SCROLLBAR, 3), - SBP_LOWERTRACKHORZ(Control.SCROLLBAR, 4), - SBP_UPPERTRACKHORZ(Control.SCROLLBAR, 5), - SBP_LOWERTRACKVERT(Control.SCROLLBAR, 6), - SBP_UPPERTRACKVERT(Control.SCROLLBAR, 7), - SBP_GRIPPERHORZ (Control.SCROLLBAR, 8), - SBP_GRIPPERVERT (Control.SCROLLBAR, 9), - SBP_SIZEBOX (Control.SCROLLBAR, 10), - - SPNP_UP (Control.SPIN, 1), - SPNP_DOWN(Control.SPIN, 2), - - TABP_TABITEM (Control.TAB, 1), - TABP_TABITEMLEFTEDGE (Control.TAB, 2), - TABP_TABITEMRIGHTEDGE(Control.TAB, 3), - TABP_PANE (Control.TAB, 9), - - TP_TOOLBAR (Control.TOOLBAR, 0), - TP_BUTTON (Control.TOOLBAR, 1), - TP_SEPARATOR (Control.TOOLBAR, 5), - TP_SEPARATORVERT (Control.TOOLBAR, 6), - - TKP_TRACK (Control.TRACKBAR, 1), - TKP_TRACKVERT (Control.TRACKBAR, 2), - TKP_THUMB (Control.TRACKBAR, 3), - TKP_THUMBBOTTOM(Control.TRACKBAR, 4), - TKP_THUMBTOP (Control.TRACKBAR, 5), - TKP_THUMBVERT (Control.TRACKBAR, 6), - TKP_THUMBLEFT (Control.TRACKBAR, 7), - TKP_THUMBRIGHT (Control.TRACKBAR, 8), - TKP_TICS (Control.TRACKBAR, 9), - TKP_TICSVERT (Control.TRACKBAR, 10), - - TVP_TREEVIEW(Control.TREEVIEW, 0), - TVP_GLYPH (Control.TREEVIEW, 2), - - WP_WINDOW (Control.WINDOW, 0), - WP_CAPTION (Control.WINDOW, 1), - WP_MINCAPTION (Control.WINDOW, 3), - WP_MAXCAPTION (Control.WINDOW, 5), - WP_FRAMELEFT (Control.WINDOW, 7), - WP_FRAMERIGHT (Control.WINDOW, 8), - WP_FRAMEBOTTOM (Control.WINDOW, 9), - WP_SYSBUTTON (Control.WINDOW, 13), - WP_MDISYSBUTTON (Control.WINDOW, 14), - WP_MINBUTTON (Control.WINDOW, 15), - WP_MDIMINBUTTON (Control.WINDOW, 16), - WP_MAXBUTTON (Control.WINDOW, 17), - WP_CLOSEBUTTON (Control.WINDOW, 18), - WP_MDICLOSEBUTTON (Control.WINDOW, 20), - WP_RESTOREBUTTON (Control.WINDOW, 21), - WP_MDIRESTOREBUTTON(Control.WINDOW, 22); - - private final Control control; - private final int value; - - private Part(Control control, int value) { - this.control = control; - this.value = value; - } - - public int getValue() { - return value; - } - - public String getControlName(Component component) { - String str = ""; - if (component instanceof JComponent) { - JComponent c = (JComponent)component; - String subAppName = (String)c.getClientProperty("XPStyle.subAppName"); - if (subAppName != null) { - str = subAppName + "::"; - } - } - return str + control.toString(); - } - - public String toString() { - return control.toString()+"."+name(); - } - } - - - /** - * An enumeration of the possible component states - */ - public static enum State { - ACTIVE, - ASSIST, - BITMAP, - CHECKED, - CHECKEDDISABLED, - CHECKEDHOT, - CHECKEDNORMAL, - CHECKEDPRESSED, - CHECKMARKNORMAL, - CHECKMARKDISABLED, - BULLETNORMAL, - BULLETDISABLED, - CLOSED, - DEFAULTED, - DISABLED, - DISABLEDHOT, - DISABLEDPUSHED, - DOWNDISABLED, - DOWNHOT, - DOWNNORMAL, - DOWNPRESSED, - FOCUSED, - HOT, - HOTCHECKED, - ICONHOT, - ICONNORMAL, - ICONPRESSED, - ICONSORTEDHOT, - ICONSORTEDNORMAL, - ICONSORTEDPRESSED, - INACTIVE, - INACTIVENORMAL, // See note 1 - INACTIVEHOT, // See note 1 - INACTIVEPUSHED, // See note 1 - INACTIVEDISABLED, // See note 1 - LEFTDISABLED, - LEFTHOT, - LEFTNORMAL, - LEFTPRESSED, - MIXEDDISABLED, - MIXEDHOT, - MIXEDNORMAL, - MIXEDPRESSED, - NORMAL, - PRESSED, - OPENED, - PUSHED, - READONLY, - RIGHTDISABLED, - RIGHTHOT, - RIGHTNORMAL, - RIGHTPRESSED, - SELECTED, - UNCHECKEDDISABLED, - UNCHECKEDHOT, - UNCHECKEDNORMAL, - UNCHECKEDPRESSED, - UPDISABLED, - UPHOT, - UPNORMAL, - UPPRESSED, - HOVER, - UPHOVER, - DOWNHOVER, - LEFTHOVER, - RIGHTHOVER, - SORTEDDOWN, - SORTEDHOT, - SORTEDNORMAL, - SORTEDPRESSED, - SORTEDUP; - - - /** - * A map of allowed states for each Part - */ - private static EnumMap stateMap; - - private static synchronized void initStates() { - stateMap = new EnumMap(Part.class); - - stateMap.put(Part.EP_EDITTEXT, - new State[] { - NORMAL, HOT, SELECTED, DISABLED, FOCUSED, READONLY, ASSIST - }); - - stateMap.put(Part.BP_PUSHBUTTON, - new State[] { NORMAL, HOT, PRESSED, DISABLED, DEFAULTED }); - - stateMap.put(Part.BP_RADIOBUTTON, - new State[] { - UNCHECKEDNORMAL, UNCHECKEDHOT, UNCHECKEDPRESSED, UNCHECKEDDISABLED, - CHECKEDNORMAL, CHECKEDHOT, CHECKEDPRESSED, CHECKEDDISABLED - }); - - stateMap.put(Part.BP_CHECKBOX, - new State[] { - UNCHECKEDNORMAL, UNCHECKEDHOT, UNCHECKEDPRESSED, UNCHECKEDDISABLED, - CHECKEDNORMAL, CHECKEDHOT, CHECKEDPRESSED, CHECKEDDISABLED, - MIXEDNORMAL, MIXEDHOT, MIXEDPRESSED, MIXEDDISABLED - }); - - State[] comboBoxStates = new State[] { NORMAL, HOT, PRESSED, DISABLED }; - stateMap.put(Part.CP_COMBOBOX, comboBoxStates); - stateMap.put(Part.CP_DROPDOWNBUTTON, comboBoxStates); - stateMap.put(Part.CP_BACKGROUND, comboBoxStates); - stateMap.put(Part.CP_TRANSPARENTBACKGROUND, comboBoxStates); - stateMap.put(Part.CP_BORDER, comboBoxStates); - stateMap.put(Part.CP_READONLY, comboBoxStates); - stateMap.put(Part.CP_DROPDOWNBUTTONRIGHT, comboBoxStates); - stateMap.put(Part.CP_DROPDOWNBUTTONLEFT, comboBoxStates); - stateMap.put(Part.CP_CUEBANNER, comboBoxStates); - - stateMap.put(Part.HP_HEADERITEM, new State[] { NORMAL, HOT, PRESSED, - SORTEDNORMAL, SORTEDHOT, SORTEDPRESSED, - ICONNORMAL, ICONHOT, ICONPRESSED, - ICONSORTEDNORMAL, ICONSORTEDHOT, ICONSORTEDPRESSED }); - - stateMap.put(Part.HP_HEADERSORTARROW, - new State[] {SORTEDDOWN, SORTEDUP}); - - State[] listBoxStates = new State[] { NORMAL, PRESSED, HOT, DISABLED}; - stateMap.put(Part.LBCP_BORDER_HSCROLL, listBoxStates); - stateMap.put(Part.LBCP_BORDER_HVSCROLL, listBoxStates); - stateMap.put(Part.LBCP_BORDER_NOSCROLL, listBoxStates); - stateMap.put(Part.LBCP_BORDER_VSCROLL, listBoxStates); - - State[] scrollBarStates = new State[] { NORMAL, HOT, PRESSED, DISABLED, HOVER }; - stateMap.put(Part.SBP_SCROLLBAR, scrollBarStates); - stateMap.put(Part.SBP_THUMBBTNVERT, scrollBarStates); - stateMap.put(Part.SBP_THUMBBTNHORZ, scrollBarStates); - stateMap.put(Part.SBP_GRIPPERVERT, scrollBarStates); - stateMap.put(Part.SBP_GRIPPERHORZ, scrollBarStates); - - stateMap.put(Part.SBP_ARROWBTN, - new State[] { - UPNORMAL, UPHOT, UPPRESSED, UPDISABLED, - DOWNNORMAL, DOWNHOT, DOWNPRESSED, DOWNDISABLED, - LEFTNORMAL, LEFTHOT, LEFTPRESSED, LEFTDISABLED, - RIGHTNORMAL, RIGHTHOT, RIGHTPRESSED, RIGHTDISABLED, - UPHOVER, DOWNHOVER, LEFTHOVER, RIGHTHOVER - }); - - - State[] spinnerStates = new State[] { NORMAL, HOT, PRESSED, DISABLED }; - stateMap.put(Part.SPNP_UP, spinnerStates); - stateMap.put(Part.SPNP_DOWN, spinnerStates); - - stateMap.put(Part.TVP_GLYPH, new State[] { CLOSED, OPENED }); - - State[] frameButtonStates = new State[] { - NORMAL, HOT, PUSHED, DISABLED, // See note 1 - INACTIVENORMAL, INACTIVEHOT, INACTIVEPUSHED, INACTIVEDISABLED, - }; - // Note 1: The INACTIVE frame button states apply when the frame - // is inactive. They are not defined in tmschema.h - - // Fix for 6316538: Vista has five frame button states - if (ThemeReader.getInt(Control.WINDOW.toString(), - Part.WP_CLOSEBUTTON.getValue(), 1, - Prop.IMAGECOUNT.getValue()) == 10) { - frameButtonStates = new State[] { - NORMAL, HOT, PUSHED, DISABLED, null, - INACTIVENORMAL, INACTIVEHOT, INACTIVEPUSHED, INACTIVEDISABLED, null - }; - } - - stateMap.put(Part.WP_MINBUTTON, frameButtonStates); - stateMap.put(Part.WP_MAXBUTTON, frameButtonStates); - stateMap.put(Part.WP_RESTOREBUTTON, frameButtonStates); - stateMap.put(Part.WP_CLOSEBUTTON, frameButtonStates); - - // States for Slider (trackbar) - stateMap.put(Part.TKP_TRACK, new State[] { NORMAL }); - stateMap.put(Part.TKP_TRACKVERT, new State[] { NORMAL }); - - State[] sliderThumbStates = - new State[] { NORMAL, HOT, PRESSED, FOCUSED, DISABLED }; - stateMap.put(Part.TKP_THUMB, sliderThumbStates); - stateMap.put(Part.TKP_THUMBBOTTOM, sliderThumbStates); - stateMap.put(Part.TKP_THUMBTOP, sliderThumbStates); - stateMap.put(Part.TKP_THUMBVERT, sliderThumbStates); - stateMap.put(Part.TKP_THUMBRIGHT, sliderThumbStates); - - // States for Tabs - State[] tabStates = new State[] { NORMAL, HOT, SELECTED, DISABLED, FOCUSED }; - stateMap.put(Part.TABP_TABITEM, tabStates); - stateMap.put(Part.TABP_TABITEMLEFTEDGE, tabStates); - stateMap.put(Part.TABP_TABITEMRIGHTEDGE, tabStates); - - - stateMap.put(Part.TP_BUTTON, - new State[] { - NORMAL, HOT, PRESSED, DISABLED, CHECKED, HOTCHECKED - }); - - State[] frameStates = new State[] { ACTIVE, INACTIVE }; - stateMap.put(Part.WP_WINDOW, frameStates); - stateMap.put(Part.WP_FRAMELEFT, frameStates); - stateMap.put(Part.WP_FRAMERIGHT, frameStates); - stateMap.put(Part.WP_FRAMEBOTTOM, frameStates); - - State[] captionStates = new State[] { ACTIVE, INACTIVE, DISABLED }; - stateMap.put(Part.WP_CAPTION, captionStates); - stateMap.put(Part.WP_MINCAPTION, captionStates); - stateMap.put(Part.WP_MAXCAPTION, captionStates); - - stateMap.put(Part.MP_BARBACKGROUND, - new State[] { ACTIVE, INACTIVE }); - stateMap.put(Part.MP_BARITEM, - new State[] { NORMAL, HOT, PUSHED, - DISABLED, DISABLEDHOT, DISABLEDPUSHED }); - stateMap.put(Part.MP_POPUPCHECK, - new State[] { CHECKMARKNORMAL, CHECKMARKDISABLED, - BULLETNORMAL, BULLETDISABLED }); - stateMap.put(Part.MP_POPUPCHECKBACKGROUND, - new State[] { DISABLEDPUSHED, NORMAL, BITMAP }); - stateMap.put(Part.MP_POPUPITEM, - new State[] { NORMAL, HOT, DISABLED, DISABLEDHOT }); - stateMap.put(Part.MP_POPUPSUBMENU, - new State[] { NORMAL, DISABLED }); - - } - - - public static synchronized int getValue(Part part, State state) { - if (stateMap == null) { - initStates(); - } - - Enum[] states = stateMap.get(part); - if (states != null) { - for (int i = 0; i < states.length; i++) { - if (state == states[i]) { - return i + 1; - } - } - } - - if (state == null || state == State.NORMAL) { - return 1; - } - - return 0; - } - - } - - - /** - * An enumeration of the possible component attributes and the - * corresponding value type - */ - public static enum Prop { - COLOR(Color.class, 204), - SIZE(Dimension.class, 207), - - FLATMENUS(Boolean.class, 1001), - - BORDERONLY(Boolean.class, 2203), // only draw the border area of the image - - IMAGECOUNT(Integer.class, 2401), // the number of state images in an imagefile - BORDERSIZE(Integer.class, 2403), // the size of the border line for bgtype=BorderFill - - PROGRESSCHUNKSIZE(Integer.class, 2411), // size of progress control chunks - PROGRESSSPACESIZE(Integer.class, 2412), // size of progress control spaces - - TEXTSHADOWOFFSET(Point.class, 3402), // where char shadows are drawn, relative to orig. chars - - NORMALSIZE(Dimension.class, 3409), // size of dest rect that exactly source - - - SIZINGMARGINS ( Insets.class, 3601), // margins used for 9-grid sizing - CONTENTMARGINS(Insets.class, 3602), // margins that define where content can be placed - CAPTIONMARGINS(Insets.class, 3603), // margins that define where caption text can be placed - - BORDERCOLOR(Color.class, 3801), // color of borders for BorderFill - FILLCOLOR ( Color.class, 3802), // color of bg fill - TEXTCOLOR ( Color.class, 3803), // color text is drawn in - - TEXTSHADOWCOLOR(Color.class, 3818), // color of text shadow - - BGTYPE(Integer.class, 4001), // basic drawing type for each part - - TEXTSHADOWTYPE(Integer.class, 4010), // type of shadow to draw with text - - TRANSITIONDURATIONS(Integer.class, 6000); - - private final Class type; - private final int value; - - private Prop(Class type, int value) { - this.type = type; - this.value = value; - } - - public int getValue() { - return value; - } - - public String toString() { - return name()+"["+type.getName()+"] = "+value; - } - } - - - /** - * An enumeration of attribute values for some Props - */ - public static enum TypeEnum { - BT_IMAGEFILE (Prop.BGTYPE, "imagefile", 0), - BT_BORDERFILL(Prop.BGTYPE, "borderfill", 1), - - TST_NONE(Prop.TEXTSHADOWTYPE, "none", 0), - TST_SINGLE(Prop.TEXTSHADOWTYPE, "single", 1), - TST_CONTINUOUS(Prop.TEXTSHADOWTYPE, "continuous", 2); - - - private TypeEnum(Prop prop, String enumName, int value) { - this.prop = prop; - this.enumName = enumName; - this.value = value; - } - - private final Prop prop; - private final String enumName; - private final int value; - - public String toString() { - return prop+"="+enumName+"="+value; - } - - String getName() { - return enumName; - } - - - static TypeEnum getTypeEnum(Prop prop, int enumval) { - for (TypeEnum e : TypeEnum.values()) { - if (e.prop == prop && e.value == enumval) { - return e; - } - } - return null; - } - } -} --- /dev/null 2017-11-27 16:55:28.000000000 -0800 +++ new/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/TMSchema.java 2017-11-27 16:55:27.000000000 -0800 @@ -0,0 +1,577 @@ +/* + * Copyright (c) 2005, 2014, Oracle and/or its affiliates. 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + *

These classes are designed to be used while the + * corresponding LookAndFeel class has been installed + * (UIManager.setLookAndFeel(new XXXLookAndFeel())). + * Using them while a different LookAndFeel is installed + * may produce unexpected results, including exceptions. + * Additionally, changing the LookAndFeel + * maintained by the UIManager without updating the + * corresponding ComponentUI of any + * JComponents may also produce unexpected results, + * such as the wrong colors showing up, and is generally not + * encouraged. + * + */ + +package com.sun.java.swing.plaf.windows; + +import java.awt.*; +import java.util.*; + +import javax.swing.*; + +import sun.awt.windows.ThemeReader; + +/** + * Implements Windows Parts and their States and Properties for the Windows Look and Feel. + * + * See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/userex/topics/partsandstates.asp + * See tmschema.h (or vssym32.h & vsstyle.h for MS Vista) + * + * @author Leif Samuelsson + */ +class TMSchema { + + /** + * An enumeration of the various Windows controls (also known as + * components, or top-level parts) + */ + public static enum Control { + BUTTON, + COMBOBOX, + EDIT, + HEADER, + LISTBOX, + LISTVIEW, + MENU, + PROGRESS, + REBAR, + SCROLLBAR, + SPIN, + TAB, + TOOLBAR, + TRACKBAR, + TREEVIEW, + WINDOW + } + + + /** + * An enumeration of the Windows compoent parts + */ + public static enum Part { + MENU (Control.MENU, 0), // Special case, not in native + MP_BARBACKGROUND (Control.MENU, 7), + MP_BARITEM (Control.MENU, 8), + MP_POPUPBACKGROUND (Control.MENU, 9), + MP_POPUPBORDERS (Control.MENU, 10), + MP_POPUPCHECK (Control.MENU, 11), + MP_POPUPCHECKBACKGROUND (Control.MENU, 12), + MP_POPUPGUTTER (Control.MENU, 13), + MP_POPUPITEM (Control.MENU, 14), + MP_POPUPSEPARATOR (Control.MENU, 15), + MP_POPUPSUBMENU (Control.MENU, 16), + + BP_PUSHBUTTON (Control.BUTTON, 1), + BP_RADIOBUTTON(Control.BUTTON, 2), + BP_CHECKBOX (Control.BUTTON, 3), + BP_GROUPBOX (Control.BUTTON, 4), + + CP_COMBOBOX (Control.COMBOBOX, 0), + CP_DROPDOWNBUTTON(Control.COMBOBOX, 1), + CP_BACKGROUND (Control.COMBOBOX, 2), + CP_TRANSPARENTBACKGROUND (Control.COMBOBOX, 3), + CP_BORDER (Control.COMBOBOX, 4), + CP_READONLY (Control.COMBOBOX, 5), + CP_DROPDOWNBUTTONRIGHT (Control.COMBOBOX, 6), + CP_DROPDOWNBUTTONLEFT (Control.COMBOBOX, 7), + CP_CUEBANNER (Control.COMBOBOX, 8), + + + EP_EDIT (Control.EDIT, 0), + EP_EDITTEXT(Control.EDIT, 1), + + HP_HEADERITEM(Control.HEADER, 1), + HP_HEADERSORTARROW(Control.HEADER, 4), + + LBP_LISTBOX(Control.LISTBOX, 0), + + LBCP_BORDER_HSCROLL (Control.LISTBOX, 1), + LBCP_BORDER_HVSCROLL (Control.LISTBOX, 2), + LBCP_BORDER_NOSCROLL (Control.LISTBOX, 3), + LBCP_BORDER_VSCROLL (Control.LISTBOX, 4), + LBCP_ITEM (Control.LISTBOX, 5), + + LVP_LISTVIEW(Control.LISTVIEW, 0), + + PP_PROGRESS (Control.PROGRESS, 0), + PP_BAR (Control.PROGRESS, 1), + PP_BARVERT (Control.PROGRESS, 2), + PP_CHUNK (Control.PROGRESS, 3), + PP_CHUNKVERT(Control.PROGRESS, 4), + + RP_GRIPPER (Control.REBAR, 1), + RP_GRIPPERVERT(Control.REBAR, 2), + + SBP_SCROLLBAR (Control.SCROLLBAR, 0), + SBP_ARROWBTN (Control.SCROLLBAR, 1), + SBP_THUMBBTNHORZ (Control.SCROLLBAR, 2), + SBP_THUMBBTNVERT (Control.SCROLLBAR, 3), + SBP_LOWERTRACKHORZ(Control.SCROLLBAR, 4), + SBP_UPPERTRACKHORZ(Control.SCROLLBAR, 5), + SBP_LOWERTRACKVERT(Control.SCROLLBAR, 6), + SBP_UPPERTRACKVERT(Control.SCROLLBAR, 7), + SBP_GRIPPERHORZ (Control.SCROLLBAR, 8), + SBP_GRIPPERVERT (Control.SCROLLBAR, 9), + SBP_SIZEBOX (Control.SCROLLBAR, 10), + + SPNP_UP (Control.SPIN, 1), + SPNP_DOWN(Control.SPIN, 2), + + TABP_TABITEM (Control.TAB, 1), + TABP_TABITEMLEFTEDGE (Control.TAB, 2), + TABP_TABITEMRIGHTEDGE(Control.TAB, 3), + TABP_PANE (Control.TAB, 9), + + TP_TOOLBAR (Control.TOOLBAR, 0), + TP_BUTTON (Control.TOOLBAR, 1), + TP_SEPARATOR (Control.TOOLBAR, 5), + TP_SEPARATORVERT (Control.TOOLBAR, 6), + + TKP_TRACK (Control.TRACKBAR, 1), + TKP_TRACKVERT (Control.TRACKBAR, 2), + TKP_THUMB (Control.TRACKBAR, 3), + TKP_THUMBBOTTOM(Control.TRACKBAR, 4), + TKP_THUMBTOP (Control.TRACKBAR, 5), + TKP_THUMBVERT (Control.TRACKBAR, 6), + TKP_THUMBLEFT (Control.TRACKBAR, 7), + TKP_THUMBRIGHT (Control.TRACKBAR, 8), + TKP_TICS (Control.TRACKBAR, 9), + TKP_TICSVERT (Control.TRACKBAR, 10), + + TVP_TREEVIEW(Control.TREEVIEW, 0), + TVP_GLYPH (Control.TREEVIEW, 2), + + WP_WINDOW (Control.WINDOW, 0), + WP_CAPTION (Control.WINDOW, 1), + WP_MINCAPTION (Control.WINDOW, 3), + WP_MAXCAPTION (Control.WINDOW, 5), + WP_FRAMELEFT (Control.WINDOW, 7), + WP_FRAMERIGHT (Control.WINDOW, 8), + WP_FRAMEBOTTOM (Control.WINDOW, 9), + WP_SYSBUTTON (Control.WINDOW, 13), + WP_MDISYSBUTTON (Control.WINDOW, 14), + WP_MINBUTTON (Control.WINDOW, 15), + WP_MDIMINBUTTON (Control.WINDOW, 16), + WP_MAXBUTTON (Control.WINDOW, 17), + WP_CLOSEBUTTON (Control.WINDOW, 18), + WP_MDICLOSEBUTTON (Control.WINDOW, 20), + WP_RESTOREBUTTON (Control.WINDOW, 21), + WP_MDIRESTOREBUTTON(Control.WINDOW, 22); + + private final Control control; + private final int value; + + private Part(Control control, int value) { + this.control = control; + this.value = value; + } + + public int getValue() { + return value; + } + + public String getControlName(Component component) { + String str = ""; + if (component instanceof JComponent) { + JComponent c = (JComponent)component; + String subAppName = (String)c.getClientProperty("XPStyle.subAppName"); + if (subAppName != null) { + str = subAppName + "::"; + } + } + return str + control.toString(); + } + + public String toString() { + return control.toString()+"."+name(); + } + } + + + /** + * An enumeration of the possible component states + */ + public static enum State { + ACTIVE, + ASSIST, + BITMAP, + CHECKED, + CHECKEDDISABLED, + CHECKEDHOT, + CHECKEDNORMAL, + CHECKEDPRESSED, + CHECKMARKNORMAL, + CHECKMARKDISABLED, + BULLETNORMAL, + BULLETDISABLED, + CLOSED, + DEFAULTED, + DISABLED, + DISABLEDHOT, + DISABLEDPUSHED, + DOWNDISABLED, + DOWNHOT, + DOWNNORMAL, + DOWNPRESSED, + FOCUSED, + HOT, + HOTCHECKED, + ICONHOT, + ICONNORMAL, + ICONPRESSED, + ICONSORTEDHOT, + ICONSORTEDNORMAL, + ICONSORTEDPRESSED, + INACTIVE, + INACTIVENORMAL, // See note 1 + INACTIVEHOT, // See note 1 + INACTIVEPUSHED, // See note 1 + INACTIVEDISABLED, // See note 1 + LEFTDISABLED, + LEFTHOT, + LEFTNORMAL, + LEFTPRESSED, + MIXEDDISABLED, + MIXEDHOT, + MIXEDNORMAL, + MIXEDPRESSED, + NORMAL, + PRESSED, + OPENED, + PUSHED, + READONLY, + RIGHTDISABLED, + RIGHTHOT, + RIGHTNORMAL, + RIGHTPRESSED, + SELECTED, + UNCHECKEDDISABLED, + UNCHECKEDHOT, + UNCHECKEDNORMAL, + UNCHECKEDPRESSED, + UPDISABLED, + UPHOT, + UPNORMAL, + UPPRESSED, + HOVER, + UPHOVER, + DOWNHOVER, + LEFTHOVER, + RIGHTHOVER, + SORTEDDOWN, + SORTEDHOT, + SORTEDNORMAL, + SORTEDPRESSED, + SORTEDUP; + + + /** + * A map of allowed states for each Part + */ + private static EnumMap stateMap; + + private static synchronized void initStates() { + stateMap = new EnumMap(Part.class); + + stateMap.put(Part.EP_EDITTEXT, + new State[] { + NORMAL, HOT, SELECTED, DISABLED, FOCUSED, READONLY, ASSIST + }); + + stateMap.put(Part.BP_PUSHBUTTON, + new State[] { NORMAL, HOT, PRESSED, DISABLED, DEFAULTED }); + + stateMap.put(Part.BP_RADIOBUTTON, + new State[] { + UNCHECKEDNORMAL, UNCHECKEDHOT, UNCHECKEDPRESSED, UNCHECKEDDISABLED, + CHECKEDNORMAL, CHECKEDHOT, CHECKEDPRESSED, CHECKEDDISABLED + }); + + stateMap.put(Part.BP_CHECKBOX, + new State[] { + UNCHECKEDNORMAL, UNCHECKEDHOT, UNCHECKEDPRESSED, UNCHECKEDDISABLED, + CHECKEDNORMAL, CHECKEDHOT, CHECKEDPRESSED, CHECKEDDISABLED, + MIXEDNORMAL, MIXEDHOT, MIXEDPRESSED, MIXEDDISABLED + }); + + State[] comboBoxStates = new State[] { NORMAL, HOT, PRESSED, DISABLED }; + stateMap.put(Part.CP_COMBOBOX, comboBoxStates); + stateMap.put(Part.CP_DROPDOWNBUTTON, comboBoxStates); + stateMap.put(Part.CP_BACKGROUND, comboBoxStates); + stateMap.put(Part.CP_TRANSPARENTBACKGROUND, comboBoxStates); + stateMap.put(Part.CP_BORDER, comboBoxStates); + stateMap.put(Part.CP_READONLY, comboBoxStates); + stateMap.put(Part.CP_DROPDOWNBUTTONRIGHT, comboBoxStates); + stateMap.put(Part.CP_DROPDOWNBUTTONLEFT, comboBoxStates); + stateMap.put(Part.CP_CUEBANNER, comboBoxStates); + + stateMap.put(Part.HP_HEADERITEM, new State[] { NORMAL, HOT, PRESSED, + SORTEDNORMAL, SORTEDHOT, SORTEDPRESSED, + ICONNORMAL, ICONHOT, ICONPRESSED, + ICONSORTEDNORMAL, ICONSORTEDHOT, ICONSORTEDPRESSED }); + + stateMap.put(Part.HP_HEADERSORTARROW, + new State[] {SORTEDDOWN, SORTEDUP}); + + State[] listBoxStates = new State[] { NORMAL, PRESSED, HOT, DISABLED}; + stateMap.put(Part.LBCP_BORDER_HSCROLL, listBoxStates); + stateMap.put(Part.LBCP_BORDER_HVSCROLL, listBoxStates); + stateMap.put(Part.LBCP_BORDER_NOSCROLL, listBoxStates); + stateMap.put(Part.LBCP_BORDER_VSCROLL, listBoxStates); + + State[] scrollBarStates = new State[] { NORMAL, HOT, PRESSED, DISABLED, HOVER }; + stateMap.put(Part.SBP_SCROLLBAR, scrollBarStates); + stateMap.put(Part.SBP_THUMBBTNVERT, scrollBarStates); + stateMap.put(Part.SBP_THUMBBTNHORZ, scrollBarStates); + stateMap.put(Part.SBP_GRIPPERVERT, scrollBarStates); + stateMap.put(Part.SBP_GRIPPERHORZ, scrollBarStates); + + stateMap.put(Part.SBP_ARROWBTN, + new State[] { + UPNORMAL, UPHOT, UPPRESSED, UPDISABLED, + DOWNNORMAL, DOWNHOT, DOWNPRESSED, DOWNDISABLED, + LEFTNORMAL, LEFTHOT, LEFTPRESSED, LEFTDISABLED, + RIGHTNORMAL, RIGHTHOT, RIGHTPRESSED, RIGHTDISABLED, + UPHOVER, DOWNHOVER, LEFTHOVER, RIGHTHOVER + }); + + + State[] spinnerStates = new State[] { NORMAL, HOT, PRESSED, DISABLED }; + stateMap.put(Part.SPNP_UP, spinnerStates); + stateMap.put(Part.SPNP_DOWN, spinnerStates); + + stateMap.put(Part.TVP_GLYPH, new State[] { CLOSED, OPENED }); + + State[] frameButtonStates = new State[] { + NORMAL, HOT, PUSHED, DISABLED, // See note 1 + INACTIVENORMAL, INACTIVEHOT, INACTIVEPUSHED, INACTIVEDISABLED, + }; + // Note 1: The INACTIVE frame button states apply when the frame + // is inactive. They are not defined in tmschema.h + + // Fix for 6316538: Vista has five frame button states + if (ThemeReader.getInt(Control.WINDOW.toString(), + Part.WP_CLOSEBUTTON.getValue(), 1, + Prop.IMAGECOUNT.getValue()) == 10) { + frameButtonStates = new State[] { + NORMAL, HOT, PUSHED, DISABLED, null, + INACTIVENORMAL, INACTIVEHOT, INACTIVEPUSHED, INACTIVEDISABLED, null + }; + } + + stateMap.put(Part.WP_MINBUTTON, frameButtonStates); + stateMap.put(Part.WP_MAXBUTTON, frameButtonStates); + stateMap.put(Part.WP_RESTOREBUTTON, frameButtonStates); + stateMap.put(Part.WP_CLOSEBUTTON, frameButtonStates); + + // States for Slider (trackbar) + stateMap.put(Part.TKP_TRACK, new State[] { NORMAL }); + stateMap.put(Part.TKP_TRACKVERT, new State[] { NORMAL }); + + State[] sliderThumbStates = + new State[] { NORMAL, HOT, PRESSED, FOCUSED, DISABLED }; + stateMap.put(Part.TKP_THUMB, sliderThumbStates); + stateMap.put(Part.TKP_THUMBBOTTOM, sliderThumbStates); + stateMap.put(Part.TKP_THUMBTOP, sliderThumbStates); + stateMap.put(Part.TKP_THUMBVERT, sliderThumbStates); + stateMap.put(Part.TKP_THUMBRIGHT, sliderThumbStates); + + // States for Tabs + State[] tabStates = new State[] { NORMAL, HOT, SELECTED, DISABLED, FOCUSED }; + stateMap.put(Part.TABP_TABITEM, tabStates); + stateMap.put(Part.TABP_TABITEMLEFTEDGE, tabStates); + stateMap.put(Part.TABP_TABITEMRIGHTEDGE, tabStates); + + + stateMap.put(Part.TP_BUTTON, + new State[] { + NORMAL, HOT, PRESSED, DISABLED, CHECKED, HOTCHECKED + }); + + State[] frameStates = new State[] { ACTIVE, INACTIVE }; + stateMap.put(Part.WP_WINDOW, frameStates); + stateMap.put(Part.WP_FRAMELEFT, frameStates); + stateMap.put(Part.WP_FRAMERIGHT, frameStates); + stateMap.put(Part.WP_FRAMEBOTTOM, frameStates); + + State[] captionStates = new State[] { ACTIVE, INACTIVE, DISABLED }; + stateMap.put(Part.WP_CAPTION, captionStates); + stateMap.put(Part.WP_MINCAPTION, captionStates); + stateMap.put(Part.WP_MAXCAPTION, captionStates); + + stateMap.put(Part.MP_BARBACKGROUND, + new State[] { ACTIVE, INACTIVE }); + stateMap.put(Part.MP_BARITEM, + new State[] { NORMAL, HOT, PUSHED, + DISABLED, DISABLEDHOT, DISABLEDPUSHED }); + stateMap.put(Part.MP_POPUPCHECK, + new State[] { CHECKMARKNORMAL, CHECKMARKDISABLED, + BULLETNORMAL, BULLETDISABLED }); + stateMap.put(Part.MP_POPUPCHECKBACKGROUND, + new State[] { DISABLEDPUSHED, NORMAL, BITMAP }); + stateMap.put(Part.MP_POPUPITEM, + new State[] { NORMAL, HOT, DISABLED, DISABLEDHOT }); + stateMap.put(Part.MP_POPUPSUBMENU, + new State[] { NORMAL, DISABLED }); + + } + + + public static synchronized int getValue(Part part, State state) { + if (stateMap == null) { + initStates(); + } + + Enum[] states = stateMap.get(part); + if (states != null) { + for (int i = 0; i < states.length; i++) { + if (state == states[i]) { + return i + 1; + } + } + } + + if (state == null || state == State.NORMAL) { + return 1; + } + + return 0; + } + + } + + + /** + * An enumeration of the possible component attributes and the + * corresponding value type + */ + public static enum Prop { + COLOR(Color.class, 204), + SIZE(Dimension.class, 207), + + FLATMENUS(Boolean.class, 1001), + + BORDERONLY(Boolean.class, 2203), // only draw the border area of the image + + IMAGECOUNT(Integer.class, 2401), // the number of state images in an imagefile + BORDERSIZE(Integer.class, 2403), // the size of the border line for bgtype=BorderFill + + PROGRESSCHUNKSIZE(Integer.class, 2411), // size of progress control chunks + PROGRESSSPACESIZE(Integer.class, 2412), // size of progress control spaces + + TEXTSHADOWOFFSET(Point.class, 3402), // where char shadows are drawn, relative to orig. chars + + NORMALSIZE(Dimension.class, 3409), // size of dest rect that exactly source + + + SIZINGMARGINS ( Insets.class, 3601), // margins used for 9-grid sizing + CONTENTMARGINS(Insets.class, 3602), // margins that define where content can be placed + CAPTIONMARGINS(Insets.class, 3603), // margins that define where caption text can be placed + + BORDERCOLOR(Color.class, 3801), // color of borders for BorderFill + FILLCOLOR ( Color.class, 3802), // color of bg fill + TEXTCOLOR ( Color.class, 3803), // color text is drawn in + + TEXTSHADOWCOLOR(Color.class, 3818), // color of text shadow + + BGTYPE(Integer.class, 4001), // basic drawing type for each part + + TEXTSHADOWTYPE(Integer.class, 4010), // type of shadow to draw with text + + TRANSITIONDURATIONS(Integer.class, 6000); + + private final Class type; + private final int value; + + private Prop(Class type, int value) { + this.type = type; + this.value = value; + } + + public int getValue() { + return value; + } + + public String toString() { + return name()+"["+type.getName()+"] = "+value; + } + } + + + /** + * An enumeration of attribute values for some Props + */ + public static enum TypeEnum { + BT_IMAGEFILE (Prop.BGTYPE, "imagefile", 0), + BT_BORDERFILL(Prop.BGTYPE, "borderfill", 1), + + TST_NONE(Prop.TEXTSHADOWTYPE, "none", 0), + TST_SINGLE(Prop.TEXTSHADOWTYPE, "single", 1), + TST_CONTINUOUS(Prop.TEXTSHADOWTYPE, "continuous", 2); + + + private TypeEnum(Prop prop, String enumName, int value) { + this.prop = prop; + this.enumName = enumName; + this.value = value; + } + + private final Prop prop; + private final String enumName; + private final int value; + + public String toString() { + return prop+"="+enumName+"="+value; + } + + String getName() { + return enumName; + } + + + static TypeEnum getTypeEnum(Prop prop, int enumval) { + for (TypeEnum e : TypeEnum.values()) { + if (e.prop == prop && e.value == enumval) { + return e; + } + } + return null; + } + } +}