/*
* Copyright (c) 2013 by Gerrit Grunwald
*
* 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.
*/
package eu.hansolo.enzo.common;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.ObjectPropertyBase;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.event.EventTarget;
import javafx.event.EventType;
import javafx.scene.layout.Region;
/**
* Created by
* User: hansolo
* Date: 03.07.13
* Time: 08:12
*/
public class Marker extends Region {
private double _value;
private DoubleProperty value;
private String _text;
private StringProperty text;
private boolean exceeded;
// ******************** Constructors **************************************
public Marker() {
this(0, "Marker");
}
public Marker(final double VALUE) {
this(VALUE, "Marker");
}
public Marker(final double VALUE, final String TEXT) {
_value = VALUE;
_text = TEXT;
exceeded = false;
}
// ******************** Methods *******************************************
public final double getValue() {
return null == value ? _value : value.get();
}
public final void setValue(final double START) {
if (null == value) {
_value = START;
} else {
value.set(START);
}
}
public final DoubleProperty startProperty() {
if (null == value) {
value = new SimpleDoubleProperty(this, "value", _value);
}
return value;
}
public final String getText() {
return null == text ? _text : text.get();
}
public final void setText(final String TEXT) {
if (null == text) {
_text = TEXT;
} else {
text.set(TEXT);
}
}
public final StringProperty textProperty() {
if (null == text) {
text = new SimpleStringProperty(this, "text", _text);
}
return text;
}
public final boolean isExceeded() {
return exceeded;
}
public final void setExceeded(final boolean EXCEEDED) {
exceeded = EXCEEDED;
}
// ******************** Event handling ************************************
public final ObjectProperty<EventHandler<MarkerEvent>> onMarkerExceededProperty() { return onMarkerExceeded; }
public final void setOnMarkerExceeded(EventHandler<MarkerEvent> value) { onMarkerExceededProperty().set(value); }
public final EventHandler<MarkerEvent> getOnMarkerExceeded() { return onMarkerExceededProperty().get(); }
private ObjectProperty<EventHandler<MarkerEvent>> onMarkerExceeded = new ObjectPropertyBase<EventHandler<MarkerEvent>>() {
@Override public Object getBean() { return this; }
@Override public String getName() { return "onMarkerExceeded";}
};
public final ObjectProperty<EventHandler<MarkerEvent>> onMarkerUnderrunProperty() { return onMarkerUnderrun; }
public final void setOnMarkerUnderrun(EventHandler<MarkerEvent> value) { onMarkerUnderrunProperty().set(value); }
public final EventHandler<MarkerEvent> getOnMarkerUnderrun() { return onMarkerUnderrunProperty().get(); }
private ObjectProperty<EventHandler<MarkerEvent>> onMarkerUnderrun = new ObjectPropertyBase<EventHandler<MarkerEvent>>() {
@Override public Object getBean() { return this; }
@Override public String getName() { return "onMarkerUnderrun";}
};
public void fireMarkerEvent(final MarkerEvent EVENT) {
final EventHandler<MarkerEvent> HANDLER;
final EventType TYPE = EVENT.getEventType();
if (MarkerEvent.MARKER_EXCEEDED == TYPE) {
HANDLER = getOnMarkerExceeded();
} else if (MarkerEvent.MARKER_UNDERRUN == TYPE) {
HANDLER = getOnMarkerUnderrun();
} else {
HANDLER = null;
}
if (null == HANDLER) return;
HANDLER.handle(EVENT);
}
public boolean equals(final Marker MARKER) {
return (Double.compare(MARKER.getValue(), getValue()) == 0 &&
MARKER.getText().equals(getText()));
}
@Override public String toString() {
final StringBuilder NAME = new StringBuilder();
NAME.append("Section: ").append("\n");
NAME.append("text : ").append(text.get()).append("\n");
NAME.append("value : ").append(value.get()).append("\n");
return NAME.toString();
}
// ******************** Inner Classes *************************************
public static class MarkerEvent extends Event {
public static final EventType<MarkerEvent> MARKER_EXCEEDED = new EventType(ANY, "markerExceeded");
public static final EventType<MarkerEvent> MARKER_UNDERRUN = new EventType(ANY, "markerUnderrun");
// ******************** Constructors **************************************
public MarkerEvent(final Object SOURCE, final EventTarget TARGET, EventType<MarkerEvent> TYPE) {
super(SOURCE, TARGET, TYPE);
}
}
}