/*
* JAME 6.2.1
* http://jame.sourceforge.net
*
* Copyright 2001, 2016 Andrea Medeghini
*
* This file is part of JAME.
*
* JAME is an application for creating fractals and other graphics artifacts.
*
* JAME is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* JAME is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with JAME. If not, see <http://www.gnu.org/licenses/>.
*
*/
package net.sf.jame.twister.layer;
import net.sf.jame.core.config.ValueChangeEvent;
import net.sf.jame.core.config.ValueChangeListener;
import net.sf.jame.core.config.ValueConfigElement;
import net.sf.jame.twister.image.ImageConfigElement;
import net.sf.jame.twister.image.ImageRuntimeElement;
/**
* @author Andrea Medeghini
*/
public class ImageLayerRuntimeElement extends AbstractLayerRuntimeElement {
private ImageRuntimeElement imageElement;
private ImageElementListener imageListener;
/**
* Constructs a new layer.
*
* @param layerElement
*/
public ImageLayerRuntimeElement(final ImageLayerConfigElement layerElement) {
super(layerElement);
createImage(layerElement);
imageListener = new ImageElementListener();
layerElement.getImageSingleElement().addChangeListener(imageListener);
}
/**
* @see net.sf.jame.core.config.RuntimeElement#dispose()
*/
@Override
public void dispose() {
if ((getLayerElement() != null) && (imageListener != null)) {
((ImageLayerConfigElement) getLayerElement()).getImageSingleElement().removeChangeListener(imageListener);
}
imageListener = null;
if (imageElement != null) {
imageElement.dispose();
imageElement = null;
}
super.dispose();
}
private void createImage(final ImageLayerConfigElement layerElement) {
final ImageConfigElement imageElement = layerElement.getImageConfigElement();
if (imageElement != null) {
final ImageRuntimeElement image = new ImageRuntimeElement(imageElement);
setImage(image);
}
}
/**
* Returns the image.
*
* @return the image.
*/
public ImageRuntimeElement getImage() {
return imageElement;
}
private void setImage(final ImageRuntimeElement imageElement) {
if (this.imageElement != null) {
this.imageElement.dispose();
}
this.imageElement = imageElement;
}
/**
* @see net.sf.jame.core.config.RuntimeElement#isChanged()
*/
@Override
public boolean isChanged() {
final boolean imageChanged = imageElement.isChanged();
return super.isChanged() || imageChanged;
}
private class ImageElementListener implements ValueChangeListener {
/**
* @see net.sf.jame.core.config.ValueChangeListener#valueChanged(net.sf.jame.core.config.ValueChangeEvent)
*/
public void valueChanged(final ValueChangeEvent e) {
switch (e.getEventType()) {
case ValueConfigElement.VALUE_CHANGED: {
setImage(new ImageRuntimeElement((ImageConfigElement) e.getParams()[0]));
fireChanged();
break;
}
default: {
break;
}
}
}
}
}