|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
|
|
package com.sun.java.swing.plaf.windows; |
|
|
|
import java.awt.*; |
|
import javax.swing.*; |
|
import javax.swing.plaf.*; |
|
import javax.swing.plaf.basic.*; |
|
|
|
import sun.swing.SwingUtilities2; |
|
|
|
import com.sun.java.swing.plaf.windows.TMSchema.*; |
|
import com.sun.java.swing.plaf.windows.XPStyle.*; |
|
|
|
/** |
|
* Windows rendition of the component. |
|
* <p> |
|
* <strong>Warning:</strong> |
|
* Serialized objects of this class will not be compatible with |
|
* future Swing releases. The current serialization support is appropriate |
|
* for short term storage or RMI between applications running the same |
|
* version of Swing. A future release of Swing will provide support for |
|
* long term persistence. |
|
* |
|
* @author Igor Kushnirskiy |
|
*/ |
|
|
|
public class WindowsMenuItemUI extends BasicMenuItemUI { |
|
final WindowsMenuItemUIAccessor accessor = |
|
new WindowsMenuItemUIAccessor() { |
|
|
|
public JMenuItem getMenuItem() { |
|
return menuItem; |
|
} |
|
|
|
public State getState(JMenuItem menuItem) { |
|
return WindowsMenuItemUI.getState(this, menuItem); |
|
} |
|
|
|
public Part getPart(JMenuItem menuItem) { |
|
return WindowsMenuItemUI.getPart(this, menuItem); |
|
} |
|
}; |
|
public static ComponentUI createUI(JComponent c) { |
|
return new WindowsMenuItemUI(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
protected void paintText(Graphics g, JMenuItem menuItem, |
|
Rectangle textRect, String text) { |
|
if (WindowsMenuItemUI.isVistaPainting()) { |
|
WindowsMenuItemUI.paintText(accessor, g, menuItem, textRect, text); |
|
return; |
|
} |
|
ButtonModel model = menuItem.getModel(); |
|
Color oldColor = g.getColor(); |
|
|
|
if(model.isEnabled() && |
|
(model.isArmed() || (menuItem instanceof JMenu && |
|
model.isSelected()))) { |
|
g.setColor(selectionForeground); |
|
} |
|
|
|
WindowsGraphicsUtils.paintText(g, menuItem, textRect, text, 0); |
|
|
|
g.setColor(oldColor); |
|
} |
|
|
|
@Override |
|
protected void paintBackground(Graphics g, JMenuItem menuItem, |
|
Color bgColor) { |
|
if (WindowsMenuItemUI.isVistaPainting()) { |
|
WindowsMenuItemUI.paintBackground(accessor, g, menuItem, bgColor); |
|
return; |
|
} |
|
super.paintBackground(g, menuItem, bgColor); |
|
} |
|
|
|
static void paintBackground(WindowsMenuItemUIAccessor menuItemUI, |
|
Graphics g, JMenuItem menuItem, Color bgColor) { |
|
XPStyle xp = XPStyle.getXP(); |
|
assert isVistaPainting(xp); |
|
if (isVistaPainting(xp)) { |
|
int menuWidth = menuItem.getWidth(); |
|
int menuHeight = menuItem.getHeight(); |
|
if (menuItem.isOpaque()) { |
|
Color oldColor = g.getColor(); |
|
g.setColor(menuItem.getBackground()); |
|
g.fillRect(0,0, menuWidth, menuHeight); |
|
g.setColor(oldColor); |
|
} |
|
Part part = menuItemUI.getPart(menuItem); |
|
Skin skin = xp.getSkin(menuItem, part); |
|
skin.paintSkin(g, 0 , 0, |
|
menuWidth, |
|
menuHeight, |
|
menuItemUI.getState(menuItem)); |
|
} |
|
} |
|
|
|
static void paintText(WindowsMenuItemUIAccessor menuItemUI, Graphics g, |
|
JMenuItem menuItem, Rectangle textRect, |
|
String text) { |
|
assert isVistaPainting(); |
|
if (isVistaPainting()) { |
|
State state = menuItemUI.getState(menuItem); |
|
|
|
|
|
FontMetrics fm = SwingUtilities2.getFontMetrics(menuItem, g); |
|
int mnemIndex = menuItem.getDisplayedMnemonicIndex(); |
|
|
|
if (WindowsLookAndFeel.isMnemonicHidden() == true) { |
|
mnemIndex = -1; |
|
} |
|
WindowsGraphicsUtils.paintXPText(menuItem, |
|
menuItemUI.getPart(menuItem), state, |
|
g, textRect.x, |
|
textRect.y + fm.getAscent(), |
|
text, mnemIndex); |
|
} |
|
} |
|
|
|
static State getState(WindowsMenuItemUIAccessor menuItemUI, JMenuItem menuItem) { |
|
State state; |
|
ButtonModel model = menuItem.getModel(); |
|
if (model.isArmed()) { |
|
state = (model.isEnabled()) ? State.HOT : State.DISABLEDHOT; |
|
} else { |
|
state = (model.isEnabled()) ? State.NORMAL : State.DISABLED; |
|
} |
|
return state; |
|
} |
|
|
|
static Part getPart(WindowsMenuItemUIAccessor menuItemUI, JMenuItem menuItem) { |
|
return Part.MP_POPUPITEM; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
static boolean isVistaPainting(final XPStyle xp) { |
|
return xp != null && xp.isSkinDefined(null, Part.MP_POPUPITEM); |
|
} |
|
|
|
static boolean isVistaPainting() { |
|
return isVistaPainting(XPStyle.getXP()); |
|
} |
|
} |