org.eclipse.fx.ui.controls.image.FontIconView Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.eclipse.fx.ui.controls Show documentation
Show all versions of org.eclipse.fx.ui.controls Show documentation
Custom JavaFX controls like a styled text component, ...
/*******************************************************************************
* Copyright (c) 2014 BestSolution.at and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Christoph Caks - initial API and implementation
*******************************************************************************/
package org.eclipse.fx.ui.controls.image;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ReadOnlyObjectProperty;
import javafx.css.CssMetaData;
import javafx.css.FontCssMetaData;
import javafx.css.SimpleStyleableObjectProperty;
import javafx.css.StyleOrigin;
import javafx.css.Styleable;
import javafx.css.StyleableObjectProperty;
import javafx.css.StyleableProperty;
import javafx.geometry.Insets;
import javafx.scene.control.Control;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.text.Font;
import com.sun.javafx.css.converters.InsetsConverter;
import com.sun.javafx.css.converters.PaintConverter;
/**
* Font icon view
*/
@SuppressWarnings("restriction")
public class FontIconView extends Control {
/**
* Create a new font icon view
*/
public FontIconView() {
getStyleClass().setAll("fonticonview"); //$NON-NLS-1$
setMouseTransparent(true);
}
@Override
public String getUserAgentStylesheet() {
String uri = FontIconView.class.getResource("fonticonview.css").toExternalForm(); //$NON-NLS-1$
return uri;
}
@Deprecated
@Override
protected/* do not make final */Boolean impl_cssGetFocusTraversableInitialValue() {
return Boolean.FALSE;
}
private ObjectProperty icon;
/**
* @return the icon property
*/
public ObjectProperty iconProperty() {
if (this.icon == null) {
this.icon = new SimpleStyleableObjectProperty(StyleableProperties.ICON, FontIcon.create('?'));
}
return this.icon;
}
/**
* Set a new font icon
*
* @param icon
* the icon
*/
public void setIcon(FontIcon icon) {
this.iconProperty().set(icon);
}
/**
* @return the current font icon
*/
public FontIcon getIcon() {
return this.icon == null ? null : this.icon.get();
}
/**
* @return the font property
*/
public final @NonNull ObjectProperty fontProperty() {
ObjectProperty font = this.font;
if (font == null) {
this.font = font = new StyleableObjectProperty(Font.getDefault()) {
private boolean cssFont = false;
@Override
public void applyStyle(StyleOrigin newOrigin, Font value) {
try {
this.cssFont = true;
super.applyStyle(newOrigin, value);
} catch (Exception e) {
throw e;
} finally {
this.cssFont = false;
}
}
@Override
public void set(Font value) {
final Font oldValue = get();
if (value != null ? !value.equals(oldValue) : oldValue != null) {
super.set(value);
}
}
@Override
protected void invalidated() {
if (!this.cssFont) {
FontIconView.this.impl_reapplyCSS();
}
}
@Override
public CssMetaData getCssMetaData() {
return StyleableProperties.FONT;
}
@Override
public Object getBean() {
return FontIconView.this;
}
@Override
public String getName() {
return "font"; //$NON-NLS-1$
}
};
}
return font;
}
ObjectProperty font;
/**
* Set a new font
*
* @param font
* the new font
*/
public final void setFont(Font font) {
fontProperty().setValue(font);
}
/**
* @return get the current font
*/
public final Font getFont() {
return this.font == null ? Font.getDefault() : this.font.getValue();
}
/**
* @return padding for the icon
*/
public final ReadOnlyObjectProperty iconPaddingProperty() {
return iconPaddingPropertyImpl();
}
ObjectProperty iconPaddingPropertyImpl() {
if (this.iconPadding == null) {
this.iconPadding = new StyleableObjectProperty(Insets.EMPTY) {
private Insets lastValidValue = Insets.EMPTY;
@Override
public void invalidated() {
final Insets newValue = get();
if (newValue == null) {
set(this.lastValidValue);
throw new NullPointerException("Null not allowed"); //$NON-NLS-1$
}
this.lastValidValue = newValue;
requestLayout();
}
@Override
public CssMetaData getCssMetaData() {
return StyleableProperties.ICON_PADDING;
}
@Override
public Object getBean() {
return FontIconView.this;
}
@Override
public String getName() {
return "iconPadding"; //$NON-NLS-1$
}
};
}
return this.iconPadding;
}
ObjectProperty iconPadding;
/**
* @return the current padding
*/
public final Insets getIconPadding() {
return this.iconPadding == null ? Insets.EMPTY : this.iconPadding.get();
}
ObjectProperty iconFill; // TODO for now change this
/**
* @param value
* set a new fill
*/
public final void setIconFill(Paint value) {
iconFillProperty().set(value);
}
/**
* @return the current fill
*/
public final Paint getIconFill() {
return this.iconFill == null ? Color.BLACK : this.iconFill.get();
}
/**
* @return the icon property
*/
public final ObjectProperty iconFillProperty() {
if (this.iconFill == null) {
this.iconFill = new StyleableObjectProperty(Color.BLACK) {
@Override
public CssMetaData getCssMetaData() {
return StyleableProperties.ICON_FILL;
}
@Override
public Object getBean() {
return FontIconView.this;
}
@Override
public String getName() {
return "iconFill"; //$NON-NLS-1$
}
};
}
return this.iconFill;
}
private static class StyleableProperties {
static final FontCssMetaData FONT = new FontCssMetaData("-fx-font", Font.getDefault()) { //$NON-NLS-1$
@Override
public boolean isSettable(FontIconView n) {
return n.font == null || !n.font.isBound();
}
@SuppressWarnings("unchecked")
@Override
public StyleableProperty getStyleableProperty(FontIconView n) {
return (StyleableProperty) n.fontProperty();
}
};
static final CssMetaData ICON = new CssMetaData("-fx-icon", new FontIconStyleConverter()) { //$NON-NLS-1$
@Override
public boolean isSettable(FontIconView styleable) {
return true;
}
@SuppressWarnings("unchecked")
@Override
public StyleableProperty getStyleableProperty(FontIconView styleable) {
return (StyleableProperty) styleable.iconProperty();
}
};
static final CssMetaData ICON_PADDING = new CssMetaData("-fx-icon-padding", InsetsConverter.getInstance(), Insets.EMPTY) { //$NON-NLS-1$
@Override
public boolean isSettable(FontIconView n) {
return n.iconPadding == null || !n.iconPadding.isBound();
}
@SuppressWarnings("unchecked")
@Override
public StyleableProperty getStyleableProperty(FontIconView n) {
return (StyleableProperty) n.iconPaddingPropertyImpl();
}
};
static final CssMetaData ICON_FILL = new CssMetaData("-fx-icon-fill", PaintConverter.getInstance(), Color.BLACK) { //$NON-NLS-1$
@Override
public boolean isSettable(FontIconView n) {
return n.iconFill == null || !n.iconFill.isBound();
}
@SuppressWarnings("unchecked")
@Override
public StyleableProperty getStyleableProperty(FontIconView n) {
return (StyleableProperty) n.iconFillProperty();
}
};
static final List> STYLEABLES;
static {
final List> styleables = new ArrayList>(Control.getClassCssMetaData());
Collections.addAll(styleables, FONT, ICON, ICON_FILL, ICON_PADDING);
STYLEABLES = Collections.unmodifiableList(styleables);
}
}
/**
* @return The CssMetaData associated with this class, which may include the
* CssMetaData of its super classes.
* @since JavaFX 8.0
*/
public static List> getClassCssMetaData() {
return StyleableProperties.STYLEABLES;
}
/**
* {@inheritDoc}
*
* @since JavaFX 8.0
*/
@Override
public List> getControlCssMetaData() {
return getClassCssMetaData();
}
}