mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-11 22:47:13 -06:00
Styling: added StyleableUI.getStyleableValue() for tooling (e.g. GUI builder)
This commit is contained in:
@@ -49,6 +49,14 @@ public class FlatCapsLockIcon
|
||||
}
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
switch( key ) {
|
||||
case "capsLockIconColor": return color;
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g ) {
|
||||
/*
|
||||
|
||||
@@ -172,6 +172,11 @@ public class FlatCheckBoxIcon
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g ) {
|
||||
boolean indeterminate = isIndeterminate( c );
|
||||
|
||||
@@ -59,6 +59,11 @@ public class FlatCheckBoxMenuItemIcon
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g2 ) {
|
||||
boolean selected = (c instanceof AbstractButton) && ((AbstractButton)c).isSelected();
|
||||
|
||||
@@ -69,6 +69,11 @@ public class FlatClearIcon
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g ) {
|
||||
if( !ignoreButtonState && c instanceof AbstractButton ) {
|
||||
|
||||
@@ -84,6 +84,11 @@ public class FlatHelpButtonIcon
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g2 ) {
|
||||
/*
|
||||
|
||||
@@ -61,6 +61,11 @@ public class FlatMenuArrowIcon
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g ) {
|
||||
if( c != null && !c.getComponentOrientation().isLeftToRight() )
|
||||
|
||||
@@ -67,6 +67,11 @@ public class FlatSearchIcon
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g ) {
|
||||
/*
|
||||
|
||||
@@ -76,6 +76,11 @@ public class FlatTabbedPaneCloseIcon
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintIcon( Component c, Graphics2D g ) {
|
||||
// paint background
|
||||
|
||||
@@ -101,6 +101,12 @@ public class FlatBorder
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) {
|
||||
Graphics2D g2 = (Graphics2D) g.create();
|
||||
|
||||
@@ -366,6 +366,18 @@ public class FlatButtonUI
|
||||
return infos;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
if( key.startsWith( "help." ) ) {
|
||||
return (helpButtonIcon instanceof FlatHelpButtonIcon)
|
||||
? ((FlatHelpButtonIcon)helpButtonIcon).getStyleableValue( key.substring( "help.".length() ) )
|
||||
: null;
|
||||
}
|
||||
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, c.getBorder(), key );
|
||||
}
|
||||
|
||||
static boolean isContentAreaFilled( Component c ) {
|
||||
return !(c instanceof AbstractButton) || ((AbstractButton)c).isContentAreaFilled();
|
||||
}
|
||||
|
||||
@@ -28,7 +28,6 @@ import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI;
|
||||
import javax.swing.plaf.basic.BasicMenuItemUI;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException;
|
||||
import com.formdev.flatlaf.util.LoggingFacade;
|
||||
|
||||
/**
|
||||
@@ -126,13 +125,7 @@ public class FlatCheckBoxMenuItemUI
|
||||
|
||||
/** @since 2 */
|
||||
protected Object applyStyleProperty( String key, Object value ) {
|
||||
try {
|
||||
return renderer.applyStyleProperty( key, value );
|
||||
} catch ( UnknownStyleException ex ) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, menuItem, key, value );
|
||||
return FlatMenuItemUI.applyStyleProperty( menuItem, this, renderer, key, value );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
@@ -141,6 +134,12 @@ public class FlatCheckBoxMenuItemUI
|
||||
return FlatMenuItemUI.getStyleableInfos( this, renderer );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatMenuItemUI.getStyleableValue( this, renderer, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) {
|
||||
return renderer.getPreferredMenuItemSize();
|
||||
|
||||
@@ -505,6 +505,12 @@ public class FlatComboBoxUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this, comboBox.getBorder() );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, comboBox.getBorder(), key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update( Graphics g, JComponent c ) {
|
||||
float focusWidth = FlatUIUtils.getBorderFocusWidth( c );
|
||||
|
||||
@@ -107,6 +107,12 @@ public class FlatDropShadowBorder
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) {
|
||||
if( shadowSize <= 0 )
|
||||
|
||||
@@ -209,6 +209,12 @@ public class FlatEditorPaneUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
private void updateBackground() {
|
||||
FlatTextFieldUI.updateBackground( getComponent(), background,
|
||||
disabledBackground, inactiveBackground,
|
||||
|
||||
@@ -76,4 +76,9 @@ public class FlatEmptyBorder
|
||||
right = insets.right;
|
||||
return oldInsets;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Insets getStyleableValue() {
|
||||
return new Insets( top, left, bottom, right );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,6 +179,12 @@ public class FlatInternalFrameUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this, frame.getBorder() );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, frame.getBorder(), key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update( Graphics g, JComponent c ) {
|
||||
// The internal frame actually should be opaque and fill its background,
|
||||
@@ -253,6 +259,23 @@ public class FlatInternalFrameUI
|
||||
return infos;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( String key ) {
|
||||
switch( key ) {
|
||||
case "borderMargins": return getStyleableValue();
|
||||
|
||||
case "activeDropShadowColor": return activeDropShadowBorder.getStyleableValue( "shadowColor" );
|
||||
case "activeDropShadowInsets": return activeDropShadowBorder.getStyleableValue( "shadowInsets" );
|
||||
case "activeDropShadowOpacity": return activeDropShadowBorder.getStyleableValue( "shadowOpacity" );
|
||||
case "inactiveDropShadowColor": return inactiveDropShadowBorder.getStyleableValue( "shadowColor" );
|
||||
case "inactiveDropShadowInsets": return inactiveDropShadowBorder.getStyleableValue( "shadowInsets" );
|
||||
case "inactiveDropShadowOpacity": return inactiveDropShadowBorder.getStyleableValue( "shadowOpacity" );
|
||||
}
|
||||
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Insets getBorderInsets( Component c, Insets insets ) {
|
||||
if( c instanceof JInternalFrame && ((JInternalFrame)c).isMaximum() ) {
|
||||
|
||||
@@ -158,6 +158,12 @@ public class FlatLabelUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether text contains HTML tags that use "absolute-size" keywords
|
||||
* (e.g. "x-large") for font-size in default style sheet
|
||||
|
||||
@@ -209,6 +209,12 @@ public class FlatListUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle selection colors from focused to inactive and vice versa.
|
||||
*
|
||||
|
||||
@@ -51,6 +51,12 @@ public class FlatMenuBarBorder
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) {
|
||||
if( !showBottomSeparator( c ) )
|
||||
|
||||
@@ -174,6 +174,12 @@ public class FlatMenuBarUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this, menuBar.getBorder() );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, menuBar.getBorder(), key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update( Graphics g, JComponent c ) {
|
||||
// paint background
|
||||
|
||||
@@ -169,6 +169,19 @@ public class FlatMenuItemRenderer
|
||||
return infos;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
if( key.startsWith( "icon." ) ) {
|
||||
String key2 = key.substring( "icon.".length() );
|
||||
if( checkIcon instanceof FlatCheckBoxMenuItemIcon )
|
||||
return ((FlatCheckBoxMenuItemIcon)checkIcon).getStyleableValue( key2 );
|
||||
if( arrowIcon instanceof FlatMenuArrowIcon )
|
||||
return ((FlatMenuArrowIcon)arrowIcon).getStyleableValue( key2 );
|
||||
}
|
||||
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
protected Dimension getPreferredMenuItemSize() {
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.beans.PropertyChangeListener;
|
||||
import java.util.Map;
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JMenuItem;
|
||||
import javax.swing.LookAndFeel;
|
||||
import javax.swing.plaf.ComponentUI;
|
||||
import javax.swing.plaf.basic.BasicMenuItemUI;
|
||||
@@ -125,13 +126,19 @@ public class FlatMenuItemUI
|
||||
|
||||
/** @since 2 */
|
||||
protected Object applyStyleProperty( String key, Object value ) {
|
||||
return applyStyleProperty( menuItem, this, renderer, key, value );
|
||||
}
|
||||
|
||||
static Object applyStyleProperty( JMenuItem menuItem, BasicMenuItemUI ui,
|
||||
FlatMenuItemRenderer renderer, String key, Object value )
|
||||
{
|
||||
try {
|
||||
return renderer.applyStyleProperty( key, value );
|
||||
} catch ( UnknownStyleException ex ) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, menuItem, key, value );
|
||||
return FlatStylingSupport.applyToAnnotatedObjectOrComponent( ui, menuItem, key, value );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
@@ -146,6 +153,19 @@ public class FlatMenuItemUI
|
||||
return infos;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return getStyleableValue( this, renderer, key );
|
||||
}
|
||||
|
||||
static Object getStyleableValue( BasicMenuItemUI ui, FlatMenuItemRenderer renderer, String key ) {
|
||||
Object value = renderer.getStyleableValue( key );
|
||||
if( value == null )
|
||||
value = FlatStylingSupport.getAnnotatedStyleableValue( ui, key );
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) {
|
||||
return renderer.getPreferredMenuItemSize();
|
||||
|
||||
@@ -39,7 +39,6 @@ import javax.swing.plaf.basic.BasicMenuItemUI;
|
||||
import javax.swing.plaf.basic.BasicMenuUI;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException;
|
||||
import com.formdev.flatlaf.util.LoggingFacade;
|
||||
|
||||
/**
|
||||
@@ -174,13 +173,7 @@ public class FlatMenuUI
|
||||
|
||||
/** @since 2 */
|
||||
protected Object applyStyleProperty( String key, Object value ) {
|
||||
try {
|
||||
return renderer.applyStyleProperty( key, value );
|
||||
} catch ( UnknownStyleException ex ) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, menuItem, key, value );
|
||||
return FlatMenuItemUI.applyStyleProperty( menuItem, this, renderer, key, value );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
@@ -189,6 +182,12 @@ public class FlatMenuUI
|
||||
return FlatMenuItemUI.getStyleableInfos( this, renderer );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatMenuItemUI.getStyleableValue( this, renderer, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension getMinimumSize( JComponent c ) {
|
||||
// avoid that top-level menus (in menu bar) are made smaller if horizontal space is rare
|
||||
|
||||
@@ -127,6 +127,12 @@ public class FlatPanelUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update( Graphics g, JComponent c ) {
|
||||
// fill background
|
||||
|
||||
@@ -233,6 +233,14 @@ public class FlatPasswordFieldUI
|
||||
return infos;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
if( key.equals( "capsLockIconColor" ) && capsLockIcon instanceof FlatCapsLockIcon )
|
||||
return ((FlatCapsLockIcon)capsLockIcon).getStyleableValue( key );
|
||||
|
||||
return super.getStyleableValue( c, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public View create( Element elem ) {
|
||||
return new PasswordView( elem );
|
||||
|
||||
@@ -66,6 +66,16 @@ public class FlatPopupMenuBorder
|
||||
return infos;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( String key ) {
|
||||
switch( key ) {
|
||||
case "borderInsets": return getStyleableValue();
|
||||
case "borderColor": return borderColor;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Color getLineColor() {
|
||||
return (borderColor != null) ? borderColor : super.getLineColor();
|
||||
|
||||
@@ -184,6 +184,12 @@ public class FlatPopupMenuUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this, popupMenu.getBorder() );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, popupMenu.getBorder(), key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Popup getPopup( JPopupMenu popup, int x, int y ) {
|
||||
// do not add scroller to combobox popups or to popups that already have a scroll pane
|
||||
|
||||
@@ -160,6 +160,12 @@ public class FlatProgressBarUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension getPreferredSize( JComponent c ) {
|
||||
Dimension size = super.getPreferredSize( c );
|
||||
|
||||
@@ -28,7 +28,6 @@ import javax.swing.plaf.basic.BasicMenuItemUI;
|
||||
import javax.swing.plaf.basic.BasicRadioButtonMenuItemUI;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableField;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI;
|
||||
import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException;
|
||||
import com.formdev.flatlaf.util.LoggingFacade;
|
||||
|
||||
/**
|
||||
@@ -126,13 +125,7 @@ public class FlatRadioButtonMenuItemUI
|
||||
|
||||
/** @since 2 */
|
||||
protected Object applyStyleProperty( String key, Object value ) {
|
||||
try {
|
||||
return renderer.applyStyleProperty( key, value );
|
||||
} catch ( UnknownStyleException ex ) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, menuItem, key, value );
|
||||
return FlatMenuItemUI.applyStyleProperty( menuItem, this, renderer, key, value );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
@@ -141,6 +134,12 @@ public class FlatRadioButtonMenuItemUI
|
||||
return FlatMenuItemUI.getStyleableInfos( this, renderer );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatMenuItemUI.getStyleableValue( this, renderer, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) {
|
||||
return renderer.getPreferredMenuItemSize();
|
||||
|
||||
@@ -199,6 +199,19 @@ public class FlatRadioButtonUI
|
||||
return infos;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
// style icon
|
||||
if( key.startsWith( "icon." ) ) {
|
||||
return (icon instanceof FlatCheckBoxIcon)
|
||||
? ((FlatCheckBoxIcon)icon).getStyleableValue( key.substring( "icon.".length() ) )
|
||||
: null;
|
||||
}
|
||||
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
private static final Insets tempInsets = new Insets( 0, 0, 0, 0 );
|
||||
|
||||
@Override
|
||||
|
||||
@@ -262,6 +262,12 @@ public class FlatScrollBarUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension getPreferredSize( JComponent c ) {
|
||||
return UIScale.scale( super.getPreferredSize( c ) );
|
||||
|
||||
@@ -343,6 +343,12 @@ public class FlatScrollPaneUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this, scrollpane.getBorder() );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, scrollpane.getBorder(), key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateViewport( PropertyChangeEvent e ) {
|
||||
super.updateViewport( e );
|
||||
|
||||
@@ -170,6 +170,12 @@ public class FlatSeparatorUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paint( Graphics g, JComponent c ) {
|
||||
Graphics2D g2 = (Graphics2D) g.create();
|
||||
|
||||
@@ -222,6 +222,12 @@ public class FlatSliderUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getBaseline( JComponent c, int width, int height ) {
|
||||
if( c == null )
|
||||
|
||||
@@ -223,6 +223,12 @@ public class FlatSpinnerUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this, spinner.getBorder() );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, spinner.getBorder(), key );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JComponent createEditor() {
|
||||
JComponent editor = super.createEditor();
|
||||
|
||||
@@ -183,6 +183,17 @@ public class FlatSplitPaneUI
|
||||
return infos;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
if( divider instanceof FlatSplitPaneDivider ) {
|
||||
Object value = ((FlatSplitPaneDivider)divider).getStyleableValue( key );
|
||||
if( value != null )
|
||||
return value;
|
||||
}
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
//---- class FlatSplitPaneDivider -----------------------------------------
|
||||
|
||||
protected class FlatSplitPaneDivider
|
||||
@@ -200,20 +211,21 @@ public class FlatSplitPaneUI
|
||||
setLayout( new FlatDividerLayout() );
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 2
|
||||
*/
|
||||
/** @since 2 */
|
||||
protected Object applyStyleProperty( String key, Object value ) {
|
||||
return FlatStylingSupport.applyToAnnotatedObject( this, key, value );
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 2
|
||||
*/
|
||||
/** @since 2 */
|
||||
public Map<String, Class<?>> getStyleableInfos() {
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
public Object getStyleableValue( String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
void updateStyle() {
|
||||
if( leftButton instanceof FlatOneTouchButton )
|
||||
((FlatOneTouchButton)leftButton).updateStyle();
|
||||
|
||||
@@ -97,12 +97,14 @@ public class FlatStylingSupport
|
||||
/** @since 2 */
|
||||
public interface StyleableUI {
|
||||
Map<String, Class<?>> getStyleableInfos( JComponent c );
|
||||
/** @since 2.5 */ Object getStyleableValue( JComponent c, String key );
|
||||
}
|
||||
|
||||
/** @since 2 */
|
||||
public interface StyleableBorder {
|
||||
Object applyStyleProperty( String key, Object value );
|
||||
Map<String, Class<?>> getStyleableInfos();
|
||||
/** @since 2.5 */ Object getStyleableValue( String key );
|
||||
}
|
||||
|
||||
|
||||
@@ -396,21 +398,25 @@ public class FlatStylingSupport
|
||||
public static Object applyToAnnotatedObject( Object obj, String key, Object value )
|
||||
throws UnknownStyleException, IllegalArgumentException
|
||||
{
|
||||
String fieldName = key;
|
||||
int dotIndex = key.indexOf( '.' );
|
||||
if( dotIndex >= 0 ) {
|
||||
// remove first dot in key and change subsequent character to uppercase
|
||||
fieldName = key.substring( 0, dotIndex )
|
||||
+ Character.toUpperCase( key.charAt( dotIndex + 1 ) )
|
||||
+ key.substring( dotIndex + 2 );
|
||||
}
|
||||
String fieldName = keyToFieldName( key );
|
||||
|
||||
return applyToField( obj, fieldName, key, value, field -> {
|
||||
Styleable styleable = field.getAnnotation( Styleable.class );
|
||||
return styleable != null && styleable.dot() == (dotIndex >= 0);
|
||||
return styleable != null && styleable.dot() == (fieldName != key);
|
||||
} );
|
||||
}
|
||||
|
||||
private static String keyToFieldName( String key ) {
|
||||
int dotIndex = key.indexOf( '.' );
|
||||
if( dotIndex < 0 )
|
||||
return key;
|
||||
|
||||
// remove first dot in key and change subsequent character to uppercase
|
||||
return key.substring( 0, dotIndex )
|
||||
+ Character.toUpperCase( key.charAt( dotIndex + 1 ) )
|
||||
+ key.substring( dotIndex + 2 );
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the given value to a field of the given object.
|
||||
*
|
||||
@@ -460,8 +466,7 @@ public class FlatStylingSupport
|
||||
}
|
||||
|
||||
private static Object applyToField( Field f, Object obj, Object value ) {
|
||||
if( !isValidField( f ) )
|
||||
throw new IllegalArgumentException( "field '" + f.getDeclaringClass().getName() + "." + f.getName() + "' is final or static" );
|
||||
checkValidField( f );
|
||||
|
||||
try {
|
||||
// necessary to access protected fields in other packages
|
||||
@@ -472,10 +477,30 @@ public class FlatStylingSupport
|
||||
f.set( obj, convertToEnum( value, f.getType() ) );
|
||||
return oldValue;
|
||||
} catch( IllegalAccessException ex ) {
|
||||
throw new IllegalArgumentException( "failed to access field '" + f.getDeclaringClass().getName() + "." + f.getName() + "'", ex );
|
||||
throw newFieldAccessFailed( f, ex );
|
||||
}
|
||||
}
|
||||
|
||||
private static Object getFieldValue( Field f, Object obj ) {
|
||||
checkValidField( f );
|
||||
|
||||
try {
|
||||
f.setAccessible( true );
|
||||
return f.get( obj );
|
||||
} catch( IllegalAccessException ex ) {
|
||||
throw newFieldAccessFailed( f, ex );
|
||||
}
|
||||
}
|
||||
|
||||
private static IllegalArgumentException newFieldAccessFailed( Field f, IllegalAccessException ex ) {
|
||||
return new IllegalArgumentException( "failed to access field '" + f.getDeclaringClass().getName() + "." + f.getName() + "'", ex );
|
||||
}
|
||||
|
||||
private static void checkValidField( Field f ) {
|
||||
if( !isValidField( f ) )
|
||||
throw new IllegalArgumentException( "field '" + f.getDeclaringClass().getName() + "." + f.getName() + "' is final or static" );
|
||||
}
|
||||
|
||||
private static boolean isValidField( Field f ) {
|
||||
int modifiers = f.getModifiers();
|
||||
return (modifiers & (Modifier.FINAL|Modifier.STATIC)) == 0 && !f.isSynthetic();
|
||||
@@ -752,6 +777,54 @@ public class FlatStylingSupport
|
||||
infos.put( keyPrefix.concat( e.getKey() ), e.getValue() );
|
||||
}
|
||||
|
||||
public static Object getAnnotatedStyleableValue( Object obj, String key ) {
|
||||
String fieldName = keyToFieldName( key );
|
||||
Class<?> cls = obj.getClass();
|
||||
|
||||
for(;;) {
|
||||
try {
|
||||
// find field annotated with 'Styleable'
|
||||
Field f = cls.getDeclaredField( fieldName );
|
||||
Styleable styleable = f.getAnnotation( Styleable.class );
|
||||
if( styleable != null ) {
|
||||
if( styleable.dot() != (fieldName != key) )
|
||||
throw new IllegalArgumentException( "'Styleable.dot' on field '" + fieldName + "' does not match key '" + key + "'" );
|
||||
if( styleable.type() != Void.class )
|
||||
throw new IllegalArgumentException( "'Styleable.type' on field '" + fieldName + "' not supported" );
|
||||
|
||||
return getFieldValue( f, obj );
|
||||
}
|
||||
} catch( NoSuchFieldException ex ) {
|
||||
// field not found in class --> try superclass
|
||||
}
|
||||
|
||||
// find field specified in 'StyleableField' annotation
|
||||
for( StyleableField styleableField : cls.getAnnotationsByType( StyleableField.class ) ) {
|
||||
if( key.equals( styleableField.key() ) ) {
|
||||
Field f = getStyleableField( styleableField );
|
||||
return getFieldValue( f, obj );
|
||||
}
|
||||
}
|
||||
|
||||
cls = cls.getSuperclass();
|
||||
if( cls == null )
|
||||
return null;
|
||||
|
||||
String superclassName = cls.getName();
|
||||
if( superclassName.startsWith( "java." ) || superclassName.startsWith( "javax." ) )
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static Object getAnnotatedStyleableValue( Object obj, Border border, String key ) {
|
||||
if( border instanceof StyleableBorder ) {
|
||||
Object value = ((StyleableBorder)border).getStyleableValue( key );
|
||||
if( value != null )
|
||||
return value;
|
||||
}
|
||||
return getAnnotatedStyleableValue( obj, key );
|
||||
}
|
||||
|
||||
//---- class UnknownStyleException ----------------------------------------
|
||||
|
||||
public static class UnknownStyleException
|
||||
|
||||
@@ -687,6 +687,76 @@ public class FlatTabbedPaneUI
|
||||
return infos;
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
// close icon
|
||||
if( key.startsWith( "close" ) ) {
|
||||
return (closeIcon instanceof FlatTabbedPaneCloseIcon)
|
||||
? ((FlatTabbedPaneCloseIcon)closeIcon).getStyleableValue( key )
|
||||
: null;
|
||||
}
|
||||
|
||||
switch( key ) {
|
||||
// BasicTabbedPaneUI
|
||||
case "tabInsets": return tabInsets;
|
||||
case "tabAreaInsets": return tabAreaInsets;
|
||||
case "textIconGap": return textIconGapUnscaled;
|
||||
|
||||
// FlatTabbedPaneUI
|
||||
case "tabType":
|
||||
switch( tabType ) {
|
||||
default:
|
||||
case TAB_TYPE_UNDERLINED: return TABBED_PANE_TAB_TYPE_UNDERLINED;
|
||||
case TAB_TYPE_CARD: return TABBED_PANE_TAB_TYPE_CARD;
|
||||
}
|
||||
|
||||
case "tabsPopupPolicy":
|
||||
switch( tabsPopupPolicy ) {
|
||||
default:
|
||||
case AS_NEEDED: return TABBED_PANE_POLICY_AS_NEEDED;
|
||||
case NEVER: return TABBED_PANE_POLICY_NEVER;
|
||||
}
|
||||
|
||||
case "scrollButtonsPolicy":
|
||||
switch( scrollButtonsPolicy ) {
|
||||
default:
|
||||
case AS_NEEDED_SINGLE: return TABBED_PANE_POLICY_AS_NEEDED_SINGLE;
|
||||
case AS_NEEDED: return TABBED_PANE_POLICY_AS_NEEDED;
|
||||
case NEVER: return TABBED_PANE_POLICY_NEVER;
|
||||
}
|
||||
|
||||
case "scrollButtonsPlacement":
|
||||
switch( scrollButtonsPlacement ) {
|
||||
default:
|
||||
case BOTH: return TABBED_PANE_PLACEMENT_BOTH;
|
||||
case TRAILING: return TABBED_PANE_PLACEMENT_TRAILING;
|
||||
}
|
||||
|
||||
case "tabAreaAlignment": return alignmentToString( tabAreaAlignment, TABBED_PANE_ALIGN_LEADING );
|
||||
case "tabAlignment": return alignmentToString( tabAlignment, TABBED_PANE_ALIGN_CENTER );
|
||||
|
||||
case "tabWidthMode":
|
||||
switch( tabWidthMode ) {
|
||||
default:
|
||||
case WIDTH_MODE_PREFERRED: return TABBED_PANE_TAB_WIDTH_MODE_PREFERRED;
|
||||
case WIDTH_MODE_EQUAL: return TABBED_PANE_TAB_WIDTH_MODE_EQUAL;
|
||||
case WIDTH_MODE_COMPACT: return TABBED_PANE_TAB_WIDTH_MODE_COMPACT;
|
||||
}
|
||||
|
||||
case "tabIconPlacement":
|
||||
switch( tabIconPlacement ) {
|
||||
default:
|
||||
case LEADING: return "leading";
|
||||
case TRAILING: return "trailing";
|
||||
case TOP: return "top";
|
||||
case BOTTOM: return "bottom";
|
||||
}
|
||||
}
|
||||
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
protected void setRolloverTab( int x, int y ) {
|
||||
setRolloverTab( tabForCoordinate( tabPane, x, y ) );
|
||||
}
|
||||
@@ -1685,6 +1755,16 @@ public class FlatTabbedPaneUI
|
||||
}
|
||||
}
|
||||
|
||||
private static String alignmentToString( int value, String defaultValue ) {
|
||||
switch( value ) {
|
||||
case LEADING: return TABBED_PANE_ALIGN_LEADING;
|
||||
case TRAILING: return TABBED_PANE_ALIGN_TRAILING;
|
||||
case CENTER: return TABBED_PANE_ALIGN_CENTER;
|
||||
case FILL: return TABBED_PANE_ALIGN_FILL;
|
||||
default: return defaultValue;
|
||||
}
|
||||
}
|
||||
|
||||
protected static int parseTabWidthMode( String str ) {
|
||||
if( str == null )
|
||||
return WIDTH_MODE_PREFERRED;
|
||||
|
||||
@@ -171,6 +171,22 @@ public class FlatTableHeaderUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
if( key.equals( "sortIconPosition" ) ) {
|
||||
switch( sortIconPosition ) {
|
||||
default:
|
||||
case SwingConstants.RIGHT: return "right";
|
||||
case SwingConstants.LEFT: return "left";
|
||||
case SwingConstants.TOP: return "top";
|
||||
case SwingConstants.BOTTOM: return "bottom";
|
||||
}
|
||||
}
|
||||
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
private static int parseSortIconPosition( String str ) {
|
||||
if( str == null )
|
||||
str = "";
|
||||
|
||||
@@ -286,6 +286,12 @@ public class FlatTableUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle selection colors from focused to inactive and vice versa.
|
||||
*
|
||||
|
||||
@@ -183,6 +183,12 @@ public class FlatTextAreaUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
private void updateBackground() {
|
||||
FlatTextFieldUI.updateBackground( getComponent(), background,
|
||||
disabledBackground, inactiveBackground,
|
||||
|
||||
@@ -354,6 +354,12 @@ public class FlatTextFieldUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this, getComponent().getBorder() );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, getComponent().getBorder(), key );
|
||||
}
|
||||
|
||||
private void updateBackground() {
|
||||
updateBackground( getComponent(), background,
|
||||
disabledBackground, inactiveBackground,
|
||||
|
||||
@@ -191,6 +191,12 @@ public class FlatTextPaneUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
private void updateBackground() {
|
||||
FlatTextFieldUI.updateBackground( getComponent(), background,
|
||||
disabledBackground, inactiveBackground,
|
||||
|
||||
@@ -160,6 +160,12 @@ public class FlatToolBarSeparatorUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dimension getPreferredSize( JComponent c ) {
|
||||
Dimension size = ((JToolBar.Separator)c).getSeparatorSize();
|
||||
|
||||
@@ -201,6 +201,12 @@ public class FlatToolBarUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
/** @since 1.4 */
|
||||
protected void setButtonsFocusable( boolean focusable ) {
|
||||
for( Component c : toolBar.getComponents() )
|
||||
|
||||
@@ -340,6 +340,12 @@ public class FlatTreeUI
|
||||
return FlatStylingSupport.getAnnotatedStyleableInfos( this );
|
||||
}
|
||||
|
||||
/** @since 2.5 */
|
||||
@Override
|
||||
public Object getStyleableValue( JComponent c, String key ) {
|
||||
return FlatStylingSupport.getAnnotatedStyleableValue( this, key );
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as super.paintRow(), but supports wide selection and uses
|
||||
* inactive selection background/foreground if tree is not focused.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user