/* ******************************************************************************
* Copyright (c) 2006-2012 XMind Ltd. and others.
*
* This file is a part of XMind 3. XMind releases 3 and
* above are dual-licensed under the Eclipse Public License (EPL),
* which is available at http://www.eclipse.org/legal/epl-v10.html
* and the GNU Lesser General Public License (LGPL),
* which is available at http://www.gnu.org/licenses/lgpl.html
* See http://www.xmind.net/license.html for details.
*
* Contributors:
* XMind Ltd. - initial API and implementation
*******************************************************************************/
package org.xmind.gef.draw2d.decoration;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
/**
* @author Frank Shaka
*/
public class CompoundDecoration extends AbstractDecoration implements
ICompoundDecoration {
private List<IDecoration> decorations = new ArrayList<IDecoration>();
public CompoundDecoration() {
}
public CompoundDecoration(String id) {
super(id);
}
protected List<IDecoration> getDecorations() {
return decorations;
}
/*
* (non-Javadoc)
*
* @see
* org.xmind.gef.draw2d.decoration.ICompoundDecoration#getDecoration(int)
*/
public IDecoration getDecoration(int index) {
if (index < 0 || index >= decorations.size())
return null;
return decorations.get(index);
}
/*
* (non-Javadoc)
*
* @see
* org.xmind.gef.draw2d.decoration.ICompoundDecoration#setDecoration(org
* .eclipse.draw2d.IFigure, int,
* org.xmind.gef.draw2d.decoration.IDecoration)
*/
public IDecoration setDecoration(IFigure figure, int index,
IDecoration decoration) {
if (index < 0 || index >= decorations.size())
return null;
IDecoration set = decorations.set(index, decoration);
if (decoration != null)
update(figure, decoration);
return set;
}
protected void update(IFigure figure, IDecoration decoration) {
decoration.setAlpha(figure, getAlpha());
decoration.setVisible(figure, isVisible());
}
/*
* (non-Javadoc)
*
* @see
* org.xmind.gef.draw2d.decoration.ICompoundDecoration#add(org.eclipse.draw2d
* .IFigure, org.xmind.gef.draw2d.decoration.IDecoration)
*/
public void add(IFigure figure, IDecoration decoration) {
add(figure, -1, decoration);
}
/*
* (non-Javadoc)
*
* @see
* org.xmind.gef.draw2d.decoration.ICompoundDecoration#add(org.eclipse.draw2d
* .IFigure, int, org.xmind.gef.draw2d.decoration.IDecoration)
*/
public void add(IFigure figure, int index, IDecoration decoration) {
if (index < 0 || index > decorations.size()) {
decorations.add(decoration);
} else {
decorations.add(index, decoration);
}
if (decoration != null)
update(figure, decoration);
}
/*
* (non-Javadoc)
*
* @see org.xmind.gef.draw2d.decoration.ICompoundDecoration#size()
*/
public int size() {
return decorations.size();
}
/*
* (non-Javadoc)
*
* @see org.xmind.gef.draw2d.decoration.ICompoundDecoration#isEmpty()
*/
public boolean isEmpty() {
return decorations.isEmpty();
}
/*
* (non-Javadoc)
*
* @see
* org.xmind.gef.draw2d.decoration.ICompoundDecoration#contains(org.xmind
* .gef.draw2d.decoration.IDecoration)
*/
public boolean contains(IDecoration decoration) {
return decorations.contains(decoration);
}
/*
* (non-Javadoc)
*
* @see
* org.xmind.gef.draw2d.decoration.ICompoundDecoration#indexOf(org.xmind
* .gef.draw2d.decoration.IDecoration)
*/
public int indexOf(IDecoration decoration) {
return decorations.indexOf(decoration);
}
/*
* (non-Javadoc)
*
* @see
* org.xmind.gef.draw2d.decoration.ICompoundDecoration#move(org.eclipse.
* draw2d.IFigure, int, int)
*/
public IDecoration move(IFigure figure, int oldIndex, int newIndex) {
IDecoration decoration = decorations.remove(oldIndex);
decorations.add(newIndex, decoration);
if (decoration != null)
update(figure, decoration);
return decoration;
}
/*
* (non-Javadoc)
*
* @see org.xmind.gef.draw2d.decoration.ICompoundDecoration#remove(int)
*/
public IDecoration remove(IFigure figure, int index) {
if (index < 0 || index >= decorations.size())
return null;
return decorations.remove(index);
}
public void invalidate() {
super.invalidate();
for (IDecoration decoration : decorations) {
if (decoration != null)
decoration.invalidate();
}
}
public void validate(IFigure figure) {
super.validate(figure);
for (IDecoration decoration : decorations) {
if (decoration != null)
decoration.validate(figure);
}
}
public void setAlpha(IFigure figure, int alpha) {
super.setAlpha(figure, alpha);
for (IDecoration decoration : decorations) {
if (decoration != null)
decoration.setAlpha(figure, alpha);
}
}
public boolean isVisible() {
boolean visible = false;
for (IDecoration decoration : decorations) {
if (decoration != null)
visible |= decoration.isVisible();
}
return visible & super.isVisible();
}
public void setVisible(IFigure figure, boolean visible) {
super.setVisible(figure, visible);
for (IDecoration decoration : decorations) {
if (decoration != null)
decoration.setVisible(figure, visible);
}
}
protected void performPaint(IFigure figure, Graphics g) {
for (IDecoration decoration : decorations) {
if (decoration != null)
decoration.paint(figure, g);
}
}
}