com.googlecode.blaisemath.style.ObjectStyler Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of blaise-graphics Show documentation
Show all versions of blaise-graphics Show documentation
Scene graph and style library using Java2D graphics.
/*
* ObjectStyler.java
* Created Oct 11, 2011
*/
package com.googlecode.blaisemath.style;
/*
* #%L
* BlaiseGraphics
* --
* Copyright (C) 2009 - 2019 Elisha Peterson
* --
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/
import com.google.common.base.Function;
import com.google.common.base.Functions;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.base.Predicate;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import javax.annotation.Nullable;
/**
* Provides delegates for draw style, label, label visibility, label style,
* and tooltip text. It is intended to be used with objects that combine display
* of a primitive/graphics object and an accompanying label. The same styler can
* be used for many different graphic objects.
*
* @param the type of source object
*
* @author elisha
*/
public final class ObjectStyler {
/** Delegate for point rendering */
@Nullable
private Function super S, AttributeSet> styler = null;
/** Show/hide label setting */
@Nullable
private Predicate labelFilter = null;
/** Delegate for point labels (only used if the styler returns a label style) */
@Nullable
private Function super S, String> labeler = null;
/** Delegate for point label styles */
@Nullable
private Function super S, AttributeSet> labelStyler = null;
/** Delegate for tooltips (with default) */
@Nullable
private Function super S, String> tipper = new Function() {
@Override
public String apply(S src) {
return src == null ? "null" : src.toString();
}
};
protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
//
//
// STATIC FACTORY METHODS
//
/**
* Create new default styler instance.
* @param the type of source object
* @return new styler instance
*/
public static ObjectStyler create() {
return new ObjectStyler();
}
//
//
//
// PROPERTY PATTERNS
//
/**
* Returns the current style delegate
* @return style delegate
*/
@Nullable
public Function super S, AttributeSet> getStyleDelegate() {
return styler;
}
/**
* Sets the current style delegate. If null, will use the default style
* provided by the parent.
* @param styler used to style object
*/
public void setStyleDelegate(@Nullable Function super S, AttributeSet> styler) {
if (this.styler != styler) {
this.styler = styler;
pcs.firePropertyChange("styleDelegate", null, this.styler);
}
}
public Predicate getLabelFilter() {
return labelFilter;
}
public void setLabelFilter(Predicate labelFilter) {
if (this.labelFilter != labelFilter) {
Object old = this.labelFilter;
this.labelFilter = labelFilter;
pcs.firePropertyChange("labelFilter", old, labelFilter);
}
}
/**
* Returns the current label delegate
* @return label delegate
*/
@Nullable
public Function super S, String> getLabelDelegate() {
return labeler;
}
/**
* Sets the current label delegate. If null, uses a default label.
* @param labeler the new labeler
*/
public void setLabelDelegate(@Nullable Function super S, String> labeler) {
if (this.labeler != labeler) {
this.labeler = labeler;
pcs.firePropertyChange("labelDelegate", null, styler);
}
}
/**
* Returns the current label style delegate
* @return label style delegate
*/
@Nullable
public Function super S, AttributeSet> getLabelStyleDelegate() {
return labelStyler;
}
/**
* Sets the current label style delegate. If null, uses a default style.
* @param labelStyler the new label styler
*/
public void setLabelStyleDelegate(@Nullable Function super S, AttributeSet> labelStyler) {
if (this.labelStyler != labelStyler) {
this.labelStyler = labelStyler;
pcs.firePropertyChange("labelStyleDelegate", null, this.labelStyler);
}
}
/**
* Returns the current tip delegate
* @return tip delegate
*/
@Nullable
public Function super S, String> getTipDelegate() {
return tipper;
}
/**
* Sets the current tip delegate. If null, uses the default tooltip.
* @param tipper generates tips for the object
*/
public void setTipDelegate(@Nullable Function super S, String> tipper) {
if (this.tipper != tipper) {
this.tipper = tipper;
pcs.firePropertyChange("tipDelegate", null, this.tipper);
}
}
//
//
/**
* Get style for given object.
* @param src object
* @return style
*/
@Nullable
public AttributeSet style(S src) {
return styler == null ? null : styler.apply(src);
}
/**
* Get label for given object.
* @param src object
* @return label
*/
@Nullable
public String label(S src) {
return labeler == null ? null
: labelFilter == null || labelFilter.apply(src) ? labeler.apply(src)
: null;
}
/**
* Get tip for given object.
* @param src object
* @return label
*/
@Nullable
public AttributeSet labelStyle(S src) {
return labelStyler == null ? null : labelStyler.apply(src);
}
/**
* Get tip for given object.
* @param src object
* @param def default label to return
* @return label
*/
@Nullable
public String tooltip(S src, @Nullable String def) {
return tipper == null ? def : tipper.apply(src);
}
//
//
// CONSTANT VALUE SETTERS
//
/**
* Sets a single label for all objects
* @param text label text
*/
public void setLabelConstant(@Nullable String text) {
setLabelDelegate(Functions.constant(text));
}
/**
* Sets a single style for all objects.
* @param style style to use for all objects
*/
public void setStyleConstant(AttributeSet style) {
setStyleDelegate(Functions.constant(checkNotNull(style)));
}
/**
* Sets a single label style for all objects.
* @param style style to use for all objects
*/
public void setLabelStyleConstant(AttributeSet style) {
setLabelStyleDelegate(Functions.constant(checkNotNull(style)));
}
//
//
// PROPERTY CHANGE HANDLING
//
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
pcs.removePropertyChangeListener(propertyName, listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
pcs.removePropertyChangeListener(listener);
}
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
pcs.addPropertyChangeListener(propertyName, listener);
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
pcs.addPropertyChangeListener(listener);
}
//
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy